From b885f626761aadc3943d236e63fff79567d46644 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 26 Jul 2018 19:45:41 +0200 Subject: [PATCH 001/622] Update: Translations from eints croatian: 44 changes by VoyagerOne polish: 6 changes by xaxa --- src/lang/croatian.txt | 44 +++++++++++++++++++++++++++++++++++++++++++ src/lang/polish.txt | 6 ++++++ 2 files changed, 50 insertions(+) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 0d6a8a44a3..e00ed68af8 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -571,6 +571,7 @@ STR_ABOUT_MENU_SCREENSHOT :Slika zaslona STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Zumirano do kraja na slici zaslona STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Standardno zumiranje slike zaslona STR_ABOUT_MENU_GIANT_SCREENSHOT :Slika zaslona cijele karte +STR_ABOUT_MENU_SHOW_FRAMERATE :Prikaži broj sličica u sekundi STR_ABOUT_MENU_ABOUT_OPENTTD :O 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Poravnanje spritea STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Odaberi granične okvire @@ -2794,9 +2795,52 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD tim # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Broj sličica +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Stopa simulacije: {STRING} +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Broj otkucaja igre simuliranih u sekundi. +STR_FRAMERATE_RATE_BLITTER :{WHITE}Broj sličica u sekundi: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Broj sličica videa prikayanih u sekundi. +STR_FRAMERATE_SPEED_FACTOR :{WHITE}Trenutni faktor brzine igre: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Koliko brzo se igra izvodi trenutno u usporedbi sa očekivanom brzinom u uobičajenoj simulaciji. +STR_FRAMERATE_CURRENT :{WHITE}Trenutno +STR_FRAMERATE_AVERAGE :{WHITE}Prosječno +STR_FRAMERATE_DATA_POINTS :{WHITE}Podaci bazirani na {COMMA} mjerama +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE} sličica/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} sličica/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} sličica/s +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{WHITE}Zbroj petlji igre: +STR_FRAMERATE_GL_ECONOMY :{WHITE} Korištenje tereta: +STR_FRAMERATE_GL_TRAINS :{WHITE} Otkucaji vlakova: +STR_FRAMERATE_GL_ROADVEHS :{WHITE} Otkucaji cestovnih vozila: +STR_FRAMERATE_GL_SHIPS :{WHITE} Otkucaji brodova: +STR_FRAMERATE_GL_AIRCRAFT :{WHITE} Otkucaji aviona: +STR_FRAMERATE_GL_LANDSCAPE :{WHITE} Otkucaji svijeta: +STR_FRAMERATE_GL_LINKGRAPH :Odmak linka grafikona +STR_FRAMERATE_DRAWING :{WHITE}Prikaz grafike: +STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Prikazi svijeta: +STR_FRAMERATE_VIDEO :{WHITE}Video izlaz: +STR_FRAMERATE_SOUND :{WHITE}Miksanje zvukova: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Petlja igre +STR_FRAMETIME_CAPTION_GL_ECONOMY :Korištenje tereta +STR_FRAMETIME_CAPTION_GL_TRAINS :Otkucaji vlakova +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Otkucaji cestovnih vozila +STR_FRAMETIME_CAPTION_GL_SHIPS :Otkucaji brodova +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Otkucaji aviona +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Otkucaji svijeta +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Odmak linka grafikona +STR_FRAMETIME_CAPTION_DRAWING :Prikaz grafike +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Prikazi svijeta +STR_FRAMETIME_CAPTION_VIDEO :Video izlaz +STR_FRAMETIME_CAPTION_SOUND :Miksanje zvukova ############ End of leave-in-this-order diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 5825519ef3..efeb48dc9e 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3072,9 +3072,13 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 Zespół OpenTTD # Framerate display window +STR_FRAMERATE_CURRENT :{WHITE}Obecny ############ Leave those lines in this order!! +STR_FRAMERATE_VIDEO :{WHITE}Wyjście video: +STR_FRAMERATE_SOUND :{WHITE}Miksowanie dźwięku: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_VIDEO :Wyjście wideo ############ End of leave-in-this-order @@ -4874,6 +4878,8 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Oryginalna edyc STR_BASESOUNDS_WIN_DESCRIPTION :Oryginalna edycja dźwięków dla Transport Tycoon Deluxe Windows. STR_BASESOUNDS_NONE_DESCRIPTION :Zestaw dźwięków nie zawierający żadnych dźwięków. STR_BASEMUSIC_WIN_DESCRIPTION :Oryginalna edycja utworów muzycznych w Transport Tycoon Deluxe Windows. +STR_BASEMUSIC_DOS_DESCRIPTION :Oryginalna edycja utworów muzycznych dla Transport Tycoon Deluxe DOS. +STR_BASEMUSIC_TTO_DESCRIPTION :Oryginalna edycja utworów muzycznych dla Transport Tycoon DOS. STR_BASEMUSIC_NONE_DESCRIPTION :Zestaw utworów muzycznych nie zawierający żadnej muzyki. ##id 0x2000 From 64dac65e20550f5fd11092b55de5b119286bbaa0 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 28 Jul 2018 19:45:41 +0200 Subject: [PATCH 002/622] Update: Translations from eints spanish (mexican): 1 change by Absay --- src/lang/spanish_MX.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index c658780710..fd2a926574 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -2727,7 +2727,7 @@ STR_FRAMERATE_GL_ROADVEHS :{WHITE} Ticks d STR_FRAMERATE_GL_SHIPS :{WHITE} Ticks de barcos: STR_FRAMERATE_GL_AIRCRAFT :{WHITE} Ticks de aeronaves: STR_FRAMERATE_GL_LANDSCAPE :{WHITE} Ticks de mapa: -STR_FRAMERATE_GL_LINKGRAPH :{WHITE} Retraro en gráfica de distribución: +STR_FRAMERATE_GL_LINKGRAPH :{WHITE} Retraso en gráfica de distribución: STR_FRAMERATE_DRAWING :{WHITE}Presentación de gráficos: STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Ventanas de vista generales: STR_FRAMERATE_VIDEO :{WHITE}Salida de video: From 962757759627fd6933c3b03321bdb8ae0d5c5e6d Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sat, 28 Jul 2018 23:46:09 +0200 Subject: [PATCH 003/622] Fix: HouseSpec::watched_cargoes not 64 bit Looks like HouseSpec::watched_cargoes was missed in the conversion to 64 cargo types. --- src/house.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/house.h b/src/house.h index ddc2a448c6..94ef62ad54 100644 --- a/src/house.h +++ b/src/house.h @@ -120,7 +120,7 @@ struct HouseSpec { AnimationInfo animation; ///< information about the animation. byte processing_time; ///< Periodic refresh multiplier byte minimum_life; ///< The minimum number of years this house will survive before the town rebuilds it - uint32 watched_cargoes; ///< Cargo types watched for acceptance. + CargoTypes watched_cargoes; ///< Cargo types watched for acceptance. Money GetRemovalCost() const; From 4bd281cef3c4be64fc0d40ab33d72089eaef2055 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 30 Jul 2018 19:45:41 +0200 Subject: [PATCH 004/622] Update: Translations from eints korean: 44 changes by telk5093 --- src/lang/korean.txt | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 8eb6dca1de..f7bb3cd59c 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -476,6 +476,7 @@ STR_ABOUT_MENU_SCREENSHOT :스크린샷 STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :스크린샷 찍기 (지금 보고 있는 영역) STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :스크린샷 찍기 (창을 제외한 게임 화면만) STR_ABOUT_MENU_GIANT_SCREENSHOT :스크린샷 찍기 (지도 전체) +STR_ABOUT_MENU_SHOW_FRAMERATE :프레임레이트 보기 STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD'에 대해서 STR_ABOUT_MENU_SPRITE_ALIGNER :스프라이트 정렬도구 STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :박스 경계선 보기 전환 @@ -2699,9 +2700,52 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD 개발팀 # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}프레임레이트 +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{WHITE}시뮬레이션 비율: {STRING} +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}1초에 시뮬레이션하는 게임 틱 수입니다. +STR_FRAMERATE_RATE_BLITTER :{WHITE}그래픽 프레임레이트: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}1초에 표현하는 비디오 프레임 수입니다. +STR_FRAMERATE_SPEED_FACTOR :{WHITE}현재 게임 속력 계수: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}현재 게임이 일반적인 시뮬레이션 비율 속도에 비해 얼마나 빠르게 구동되고 있는지를 보여줍니다. +STR_FRAMERATE_CURRENT :{WHITE}현재 +STR_FRAMERATE_AVERAGE :{WHITE}평균 +STR_FRAMERATE_DATA_POINTS :{WHITE}{COMMA}개의 값을 기반으로 측정한 데이터 +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE} 프레임/초 +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} 프레임/초 +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} 프레임/초 +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA}초 ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{WHITE}총 게임 루프: +STR_FRAMERATE_GL_ECONOMY :{WHITE} 화물 처리: +STR_FRAMERATE_GL_TRAINS :{WHITE} 열차 틱: +STR_FRAMERATE_GL_ROADVEHS :{WHITE} 자동차 틱: +STR_FRAMERATE_GL_SHIPS :{WHITE} 선박 틱: +STR_FRAMERATE_GL_AIRCRAFT :{WHITE} 항공기 틱: +STR_FRAMERATE_GL_LANDSCAPE :{WHITE} 세계 틱: +STR_FRAMERATE_GL_LINKGRAPH :{WHITE} 연결 그래프 지연: +STR_FRAMERATE_DRAWING :{WHITE}그래픽 렌더링: +STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} 세계 화면: +STR_FRAMERATE_VIDEO :{WHITE}비디오 출력: +STR_FRAMERATE_SOUND :{WHITE}사운드 합성: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :게임 루프 +STR_FRAMETIME_CAPTION_GL_ECONOMY :화물 처리 +STR_FRAMETIME_CAPTION_GL_TRAINS :열차 틱 +STR_FRAMETIME_CAPTION_GL_ROADVEHS :자동차 틱 +STR_FRAMETIME_CAPTION_GL_SHIPS :선박 틱 +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :항공기 틱 +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :세계 틱 +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :연결 그래프 지연 +STR_FRAMETIME_CAPTION_DRAWING :그래픽 렌더링 +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :세계 화면 렌더링 +STR_FRAMETIME_CAPTION_VIDEO :비디오 출력 +STR_FRAMETIME_CAPTION_SOUND :사운드 합성 ############ End of leave-in-this-order From 76f788124b2b951f23ecc6403c9bdb66914fa0ce Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 3 Aug 2018 19:45:40 +0200 Subject: [PATCH 005/622] Update: Translations from eints latvian: 8 changes by krixis02 --- src/lang/latvian.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 0408558c5a..015689bdfb 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -475,6 +475,7 @@ STR_ABOUT_MENU_SCREENSHOT :Ekrānuzņēmum STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Pilnībā pietuvināts ekrānuzņēmums STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Noklusējuma mēroga ekrānuzņēmums STR_ABOUT_MENU_GIANT_SCREENSHOT :Visas kartes ekrānuzņēmums +STR_ABOUT_MENU_SHOW_FRAMERATE :Rādīt kadru ātrumu STR_ABOUT_MENU_ABOUT_OPENTTD :Par 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Gariņu līdzinātājs STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Pārslēgt saistītās kastes @@ -1561,6 +1562,7 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Lielpilsētu vi STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuāli STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asimetriska STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :simetriska +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"nesimetriski" nozīmē, ka patvaļīgu kravas daudzumu var nosūtīt abos virzienos."manuāli" nozīmē, ka šīm kravām netiks veikta automātiska izplatīšana. STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Sadales precizitāte: {STRING} STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Uzstādod šo mazāk par 100% liks simetriskajai sadalei izturēties vairāk kā asimetriskajai. Mazāk kravas ar varu tiks sūtīts atpakaļ ja noteikts daudzums tiks sūtīts uz piestātni. Ja jūs uzstādīsiet to uz 0% simetriskā sadale izturēsies tā pat kā asimetriskā. @@ -2626,9 +2628,11 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD darba grupa # Framerate display window +STR_FRAMERATE_SPEED_FACTOR :{WHITE}pašreizējās spēles ātruma pakāpe: {DECIMAL}x ############ Leave those lines in this order!! ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_VIDEO :{WHITE}video izeja ############ End of leave-in-this-order @@ -2782,6 +2786,7 @@ STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Pašlaik STR_SAVE_PRESET_CANCEL :{BLACK}Atcelt STR_SAVE_PRESET_CANCEL_TOOLTIP :{BLACK}Nemainīt iepriekšiestatījumu STR_SAVE_PRESET_SAVE :{BLACK}Saglabāt +STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}pašreizējos iestatījumus saglābāt kā sākontnējos iestatījumus # NewGRF parameters window STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Mainīt NewGRF parametrus @@ -3293,6 +3298,7 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Novākt visus t STR_GROUP_RENAME_CAPTION :{BLACK}Pārdēvēt grupu +STR_GROUP_PROFIT_THIS_YEAR :Ienākumi šajā gadā: # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Jauni dzelzceļa transportlīdzekļi @@ -4058,6 +4064,7 @@ STR_ERROR_EXCAVATION_WOULD_DAMAGE :{WHITE}Rakšana STR_ERROR_ALREADY_AT_SEA_LEVEL :{WHITE}... jau ir jūras līmenī STR_ERROR_TOO_HIGH :{WHITE}... pārāk augstu STR_ERROR_ALREADY_LEVELLED :{WHITE}... jau ir līdzens +STR_ERROR_BRIDGE_TOO_HIGH_AFTER_LOWER_LAND :{WHITE}Tilta otrs gals ir pārāk augstu. # Company related errors STR_ERROR_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Uzņēmuma nosaukumu nevar mainīt... @@ -4272,6 +4279,7 @@ STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... tā STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Nevar izveidot grupu... STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Nevar izdzēst šo grupu... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Nevar pārdēvēt grupu... +STR_ERROR_GROUP_CAN_T_SET_PARENT :nevar iestatīt vecāku grupu... STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Nevar noņemt no šīs grupas visus transportlīdzekļus... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Nevar pievienot transportlīdzekļus šai grupai... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Nevar pievienot koplietojamos transportlīdzekļus šai grupai... From 16cf577b61ce8031a8f6ddb046731983e7647523 Mon Sep 17 00:00:00 2001 From: ScumbagDog Date: Sun, 29 Jul 2018 15:43:27 +0200 Subject: [PATCH 006/622] Feature: Added New Russian Ruble as currency (#6678) --- src/currency.cpp | 1 + src/currency.h | 1 + src/lang/english.txt | 1 + 3 files changed, 3 insertions(+) diff --git a/src/currency.cpp b/src/currency.cpp index 8cc385fc04..615c5113bb 100644 --- a/src/currency.cpp +++ b/src/currency.cpp @@ -62,6 +62,7 @@ static const CurrencySpec origin_currency_specs[CURRENCY_END] = { { 1, "", CF_NOEURO, "", "", 2, STR_GAME_OPTIONS_CURRENCY_CUSTOM }, ///< custom currency (add further languages below) { 3, "", CF_NOEURO, "", NBSP "GEL", 1, STR_GAME_OPTIONS_CURRENCY_GEL }, ///< Georgian Lari { 4901, "", CF_NOEURO, "", NBSP "Rls", 1, STR_GAME_OPTIONS_CURRENCY_IRR }, ///< Iranian Rial + { 80, "", CF_NOEURO, "", NBSP "rub", 1, STR_GAME_OPTIONS_CURRENCY_RUB }, ///< New Russian Ruble }; /** Array of currencies used by the system */ diff --git a/src/currency.h b/src/currency.h index ab8026002d..2529aca11f 100644 --- a/src/currency.h +++ b/src/currency.h @@ -58,6 +58,7 @@ enum Currencies { CURRENCY_CUSTOM, ///< Custom currency CURRENCY_GEL, ///< Georgian Lari CURRENCY_IRR, ///< Iranian Rial + CURRENCY_RUB, ///< New Russian Ruble CURRENCY_END, ///< always the last item }; diff --git a/src/lang/english.txt b/src/lang/english.txt index 1be1387061..0589ec4f11 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -927,6 +927,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :South African R STR_GAME_OPTIONS_CURRENCY_CUSTOM :Custom... STR_GAME_OPTIONS_CURRENCY_GEL :Georgian Lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Iranian Rial (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :New Russian Ruble (RUB) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Road vehicles From 41a620c1a7d51b0f97b243359a67955e6323f735 Mon Sep 17 00:00:00 2001 From: J0anJosep Date: Sat, 31 Mar 2018 18:09:29 +0200 Subject: [PATCH 007/622] Fix #6805: (Doc) Road depot and stations (except rail stations and waypoints) do not use m8 for railtype. --- docs/landscape_grid.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/landscape_grid.html b/docs/landscape_grid.html index b801b334dd..cac2423438 100644 --- a/docs/landscape_grid.html +++ b/docs/landscape_grid.html @@ -173,7 +173,7 @@ the array so you can quickly see what is used and what is not. XXOO OOXX OOOO OOOO XXXO XXXX - -inherit- + OOOO OOOO OOOO OOOO 3 @@ -241,7 +241,7 @@ the array so you can quickly see what is used and what is not. ~~~~ ~XXX OOXX XOOO XXOX XXXX - -inherit- + OOOO OOOO OOOO OOOO dock @@ -254,7 +254,7 @@ the array so you can quickly see what is used and what is not. ~~~~ ~XXX OOXX XOOO OOOO OOOO - -inherit- + OOOO OOOO OOOO OOOO airport @@ -267,7 +267,7 @@ the array so you can quickly see what is used and what is not. XXXX XXXX OOXX XOOO XXXX XXXX - -inherit- + OOOO OOOO OOOO OOOO buoy @@ -280,7 +280,7 @@ the array so you can quickly see what is used and what is not. ~~~~ ~~~~ OOXX XOOO OOOO OOOO - -inherit- + OOOO OOOO OOOO OOOO oilrig @@ -293,7 +293,7 @@ the array so you can quickly see what is used and what is not. ~~~~ ~~~~ OOXX XOOO OOOO OOOO - -inherit- + OOOO OOOO OOOO OOOO 6 From 8c0a6bbc4f12db9dd331482ff1e3c229c60354c8 Mon Sep 17 00:00:00 2001 From: J0an Josep Date: Thu, 26 Jul 2018 18:00:56 +0200 Subject: [PATCH 008/622] Fix: (Doc) Use free bits and -inherit- more consistently in landscape grid. --- docs/landscape_grid.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/landscape_grid.html b/docs/landscape_grid.html index cac2423438..8519fa990a 100644 --- a/docs/landscape_grid.html +++ b/docs/landscape_grid.html @@ -93,7 +93,7 @@ the array so you can quickly see what is used and what is not. -inherit- OOOX XXOO OOOO OOOO - -inherit- + OOOO OOOO OOOO OOOO 1 @@ -156,7 +156,7 @@ the array so you can quickly see what is used and what is not. -inherit- -inherit- XXXX OOOO - -inherit- + OOOO OOOO XXXX OOOX OOXX XOOO XXXX XXXX @@ -320,7 +320,7 @@ the array so you can quickly see what is used and what is not. -inherit- OOOO OOOO OOOO OOOO - -inherit- + OOOO OOOO OOOO OOOO shipdepot @@ -333,7 +333,7 @@ the array so you can quickly see what is used and what is not. -inherit- OOOO OOOO OOOO OOOO - -inherit- + OOOO OOOO OOOO OOOO 8 @@ -368,9 +368,9 @@ the array so you can quickly see what is used and what is not. -inherit- -inherit- -inherit- + OOOO OOOO OOOO OOOO -inherit- - -inherit- - -inherit- + OOOO OOOO -inherit- OOXX XXOO -inherit- From a53f13cff633962108db52da09d4f54ae6946f10 Mon Sep 17 00:00:00 2001 From: J0an Josep Date: Fri, 27 Jul 2018 22:02:16 +0200 Subject: [PATCH 009/622] Fix #6805: Clear some m8 bits when making some tiles. --- src/clear_map.h | 2 ++ src/station_map.h | 1 + 2 files changed, 3 insertions(+) diff --git a/src/clear_map.h b/src/clear_map.h index 76b1e82d04..d24916de35 100644 --- a/src/clear_map.h +++ b/src/clear_map.h @@ -269,6 +269,7 @@ static inline void MakeClear(TileIndex t, ClearGround g, uint density) SetClearGroundDensity(t, g, density); // Sets m5 _me[t].m6 = 0; _me[t].m7 = 0; + _me[t].m8 = 0; } @@ -289,6 +290,7 @@ static inline void MakeField(TileIndex t, uint field_type, IndustryID industry) SetClearGroundDensity(t, CLEAR_FIELDS, 3); SB(_me[t].m6, 2, 4, 0); _me[t].m7 = 0; + _me[t].m8 = 0; } /** diff --git a/src/station_map.h b/src/station_map.h index 7ca9bd7204..e591787e3b 100644 --- a/src/station_map.h +++ b/src/station_map.h @@ -542,6 +542,7 @@ static inline void MakeStation(TileIndex t, Owner o, StationID sid, StationType SB(_me[t].m6, 2, 1, 0); SB(_me[t].m6, 3, 3, st); _me[t].m7 = 0; + _me[t].m8 = 0; } /** From 67f6bcdc9bb7dcd2424d41be9c3ce44c8ebdcf37 Mon Sep 17 00:00:00 2001 From: J0an Josep Date: Sat, 28 Jul 2018 15:59:37 +0200 Subject: [PATCH 010/622] Fix #6805: Update CmdBuilRailWaypoint bits. --- src/waypoint_cmd.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/waypoint_cmd.cpp b/src/waypoint_cmd.cpp index 54489fa457..639dce13bc 100644 --- a/src/waypoint_cmd.cpp +++ b/src/waypoint_cmd.cpp @@ -148,7 +148,8 @@ extern CommandCost CanExpandRailStation(const BaseStation *st, TileArea &new_ta, * @param start_tile northern most tile where waypoint will be built * @param flags type of operation * @param p1 various bitstuffed elements - * - p1 = (bit 4) - orientation (Axis) + * - p1 = (bit 0- 5) - railtype (not used) + * - p1 = (bit 6) - orientation (Axis) * - p1 = (bit 8-15) - width of waypoint * - p1 = (bit 16-23) - height of waypoint * - p1 = (bit 24) - allow waypoints directly adjacent to other waypoints. @@ -161,7 +162,7 @@ extern CommandCost CanExpandRailStation(const BaseStation *st, TileArea &new_ta, CommandCost CmdBuildRailWaypoint(TileIndex start_tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { /* Unpack parameters */ - Axis axis = Extract(p1); + Axis axis = Extract(p1); byte width = GB(p1, 8, 8); byte height = GB(p1, 16, 8); bool adjacent = HasBit(p1, 24); From b34a1f372f2701bae4f18dcb97e92c1f8323de46 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 4 Aug 2018 19:45:41 +0200 Subject: [PATCH 011/622] Update: Translations from eints italian: 1 change by lorenzodv --- src/lang/italian.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 1ffafdcd76..a1eb67ae99 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -929,6 +929,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Rand sudafrican STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizzata... STR_GAME_OPTIONS_CURRENCY_GEL :Lari georgiano (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Rial iraniano (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Nuovo rublo russo (RUB) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Automezzi From 74eb77f0a864e65d96f8bf760ecbc50b243461ba Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 4 Aug 2018 20:53:17 +0200 Subject: [PATCH 012/622] Add: notify IRC about pushes to this repository --- .dorpsgek.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .dorpsgek.yml diff --git a/.dorpsgek.yml b/.dorpsgek.yml new file mode 100644 index 0000000000..89ed750dc4 --- /dev/null +++ b/.dorpsgek.yml @@ -0,0 +1,5 @@ +notifications: + push: + irc: + - openttd + - openttd.notice From 5df3a65074295f7a50f3a5a6bab355b6ab28afdc Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 5 Aug 2018 17:19:41 +0200 Subject: [PATCH 013/622] Add: notify IRC about pull-requests and issues --- .dorpsgek.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.dorpsgek.yml b/.dorpsgek.yml index 89ed750dc4..a8b976f5c7 100644 --- a/.dorpsgek.yml +++ b/.dorpsgek.yml @@ -3,3 +3,11 @@ notifications: irc: - openttd - openttd.notice + pull-request: + irc: + - openttd + - openttd.notice + issue: + irc: + - openttd + - openttd.notice From af043df5a3b0490d47ba53b02403133cab8ab8b2 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 24 Apr 2018 09:26:41 +0100 Subject: [PATCH 014/622] Fix: Some pixels in ship autoreplace icon (sprite 106) were transparent. --- media/extra_grf/openttdgui.png | Bin 26396 -> 26393 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/media/extra_grf/openttdgui.png b/media/extra_grf/openttdgui.png index 710adf001bb25c1505db836e3e1b1865d637ad3f..900a612a87f17902771a5d7ae18b6ddcf64021c4 100644 GIT binary patch delta 7205 zcmY*-cT^Kw_jU>;fRcbxL`pzZkR}Ltxy?U?MBm4_e-8!0N*V_(*HCbO9d2XAbXNK}uyG_W&c7P@4`#R?~m)?mmm=ho- zC=?=YrKv3ly?~F`_cRAD?{Khemh3ByQJImgq9)`~{hPWEg8}-i=ogi50?Qc?#2u$2 zQ}78M0Z=Bki+|z5{$#86WFd$fzR~5&soa>WC-=#3Ih3bNcNmk7%1yP|FsL6J*)clz zT=$e#BEt1;{zVdUbaQa_+ILA2eRhl}AmJFb&l#1L`D(ySEyqVKjZ0TFQZmMdn8jAI z3qX&ks>>t5)9%Zg(r6sPtjP3J8^%Of>>^3Kti$e;{;`>?Nfx$XTbpi1!T$+<6=gQI zGgr@`7K`bf9~v8tlT>)1@``q?05pTGN_3{nGH#)t3Lz1eH62Xl(l&&T%;Gcuu{~=y zy!rz)%gl`4yTOdqIU}9=ASDO)?dxGcZLlN3%-jf&*NvqjBpq0P)S#7u%ecvdi{1+Z zxvr!-Z@)OJ{sv8^nhxpi=4U#m_!jd&LYWrruckEei}U44f!V}noH^=}H4)R%Oz zO9)Rf5o6gB?T$y6Mox8K&N+{JbaYy>3lb}8LJ|s5Q7_sK$V2A1*n?lSDWCTk9p1Si z|D#v?IBj?!K`gk|wgSKiSV-&;Fs@8HqE^3(w?8Y-)#f4i?*gTwhj~tB; zKVNmFA{Xi+T~Qxq488t`1@c9c$4$m?b4VUwSCPZ(^X{FNyk0NMTQ5AYJmNWV_kreg z!1P=x?huuhNG;1}aruHk3J*S)2q6}|R&Pezal!=q76YECM*aDn2kXd79RxYe6G7I= zMk8g?L33}GJq|lhA4cG9O(Br>u*1EhjOpv_@}1G$_wS&m16rVbO3#g>pjw-E!7!kK zMEtkJIl{-yml%==1%BqC5b*g4OT1jUDAzleWES(TcRnK&+Dv?|VCk$b>sI z#f%-|1<+A~!_vIJ!q0oO6gF?bwXa3Kj0o!uZJQP2mynkYd+b{FX*D9IkBzIlEgF@* zWG&sr&t1FIH2k~m4!=UhmoheyPvDjgM^JMJBO19PK@dRT)HXEj9E!M2Z2<)fXmd3D zd$?K9eor>_*C;y?v$r#dE@{o>O5axKx50mL2Z497Q##KmV6cmW~KS9-j^etf0;y zY}_LVJ&m+wnMsbq6Jr2g#LU)bAdaD5I!4lQ^B`J;7W-y~mMqMz;-dYT{Mqn`#djgI=ov zo9WIFG11RVgs}Dt7gKHCwlj$)D4as-K7uv)lv7-3VQT+0Fet9R5yi*GS+(O`j61Xm$_|yIS zwuco7%#K<;v5ob~3dlAKLcLq1*AFa@jYu8AXbwfNY!c_{@>s^YxSa|m4i&c>v#prb zg*32qnNqg<5k}u~O|c&#*X*y-dVu!_(S#P+aF>tlv}vJ5Zp`j3Rp z!p6y#r!%ZLur(!=@6&k^gM3oZ>&bHvzjZzkm08fAf;` zWy85m;T{M56KL;oRMvXvg*W(+4$ zQjEw7Azf#tQ`cwWx(R9%TY0B4p6U{)SO)5$xr%x2z~1^GE!QE#1kkBjG;KrLd85c; zn0NOQC~tV?8MlbHz0mgcTWhP8$@V;ue;_AEJ!9uddj8`Wyi@w-jIuyM4aWx=YHKVV;>WtHm+(lTJ#$F-nNTdoetu0^6yP`q@p2EU$Zi~jOT1-6_WQ(y z5OlQ@gp=e9SyvalctLFH5f(hy3d+W928;EdlszF2*3^3)a(wL6?$}WAl7*v)oaC=f&H05g>|w zhzo=P2jkuuq%H^gcBgpz?K5a$4z%zhDD!Dgy5P(MbFgDcSn0Pjcaa% zGQj-;Ix96WK+U0SfniIf_nKUj?&0X9h9gQJW7k#Vz~*p&v=6sWa!3S~2_iDSzOYfEx^&UX=e}D^MKcMM*44F?eD2VCJfsOr1;61C(_t{0uU?E zcaU9_IlLxo1U~jFo=ESrHr${=kaL0}7H81fM_%~v--Wj11y6O{dKGOD!kR%`$qEe< zNRa!y=shh8i^+9ng0SQNk4wXO%BQ9QD?q(3zb>NwQu?+*yT;}HU{0kfzzlbi;Z*X* zKt|@_>eP{t7$hnl{QL;i_URzniLd*M6dsTBI6jzMQ}uAb<=jLX_u^c*$PUlTmYj&O zt;A~E9Ay1dO^FTB&mWtAbd4N$uEnKKtWMOg)=voS{d(DFNTo>r`H|dkTrZ5+q@6+t z(1k6H>M$70InY(O9s&@1movM`{3Z->>D|j_);9JFUb-sX35oD4V((hDK)D0?yoi(T z_wFs|{)n;w+J}2#1JvyW+?GCvb4^tS|H4pg>RX(+UK|HH&ySQBZI`rHq*u$ zT1hHy=1f4gv;rFS_M}9=4_v9T$|z*SLB%d-qcH88B57%u9xn3{%}2c9n5kRo99r`f z`^GmN{0`q%J8Y|}4khBjT2(At;7Qga-)?rbgKaAy&%uG^$PRVw1Q|%2V}Of`4VeZP zoFVV5TH43-IK7BwzCu2zO&4;%^$$2Ua^ol*c;|;V8&Ov*ohvB```#{zFM>Hn(rPkU!KH|*F^IsBNgu@AzXB^sT+?M@1h%Yt54TLIoOt`Li;MUayCW_L6 zVV~DgNRiR~jJ#X)*W37$D?9pA2LN1%?RA<7Sj=Mdx7)tR7Zd6l$-PCV`fx8caCN$t zb;)CRh%LCrmyNe8?((ru;avGbiS6ldqt%U*>SWNQ0dG(%9{|w(bTk^EiBDQHV#Ii1MM}_QHUI5Zyug6SAfE$h@pi2UsO>-8jz;ZTv+70-CPyjbEU1$)c_v(JJLTYkLndjuWT z63z5@eWNsVoEU{)&%l7KZIZGN9%=7Inr{{tQ0p;ox*}x1Cq~O*hZ5kFU(}c0MY1C3 z{=~ocqINc@&?`2qbeqP|(y&7_CrxFMfrC21jjPg~igMLJs5~q=dZKT44UOn$Cu)VS zi&QadN}y2bOro=uS&^-qnCsb|+U$734xCx^H2B4)o16DV7pYVmn=i$e_Lj^Uljcb6 zEKuQSA)yjQd=C%%6Smh{puqgtirl4hr^_-sZ=tY1jykj$Ni~->F(Heo%Qz&wk1xd> zKhS&4-VD&K+I}))9lQ589DP%0R6hBry{GF_{uQ)cPvJryBu=!M1{WlTvrii5N%1nB zB0N~|A50AOao0dL`8{x3`z8Z}0SgsRnT`ndweMeRYYty;jNtb8XJQYH(%RqFB*#b-a_mcY3 zRfAc+!GGqn!n@^9@`wJfvXbWK=g+vM?_6#pvCYB7cu{L5&r=u4B$8uY)K66|&nflx zR3A+VHbq~Z@(j5U?@nvGarfc+Md8ke)#FuQvVPM`7A6$gYG~7JjFK7;zxby+Z=VWC zI&>H($xX>-B*0ZZ$v7;DEp$crJfjcf2a&QK1bU$*s7*JzK_St2A~&)$ENC59K{`^s zKTmo_wkun(FZy4?z*@7CMFV9rk|2{&lor(bpblN}dr}ag@_#Db?}fr@T(P(3BWJ!J zIb9t3c8p2PONf$`14Zl=K;_{@$~Yvw{a==3VHfug zF)@b7-IVkLyE45I9aIJt4YENWI)wu;{Dx#vRCHFPIde;5xg5d8ZS9#fjEg4zNf%vK zT>txDWI^@JZPn%*QW?YXrTQLLvHzsbKw0FL(b%&!)^mnVw1TrUtP%G$_s6|bAq_|y?;CivBam@>tIavXjGK{o zrmqVF&%O@S;Vw37Y&@RK1lc5a43D2i_JNR9ss8)rr6ImSLG%?xL3RY0uTWry^)?T& z)9Pdjk`LIk0pSasJ|MH1tSb+5;ugMV3EfgF|&3touF_XYQ56;k2v%eff~sdgCn# zh{E;10#G_`Lz*v6hK&z6dGgu@y_!lWX}PFpxjOSSh=HP{$;LkE-wDu84Kny9ed%s&uGGK159x*GrK5y*3np%tRTE-AMy$9+|MUP{HD{$&({4qvont39 zdr*~i42)Eq^3Ct6R$RwiK0V+D%Fn+@v5xeq`ax5oc!vCv2o5ob`nqj7z-7CpMjV8! zEcctI#C12g?c?Hnin$k9j&V7U253sVqUu>Mzr>}vR!!{-I-`4}6aS}lIY(Nrj1vs+ z`Y-T#{7Fgyd`34%U3-YX2U@+a)c}4~*%|3ygE%`aol;6!4uc-v*^mE+VT%oau@b{V zH5{5_EFUu*rb1|}>x}6Ikq@>t-kYu}NAwNDmU)Hsd?jz**uOAF2r&m#6?{~N`Z zCMi70b=l{}F7&40gxJoN@U~>-XBV@SJps{8ku`_xh;W({{>Toh#KX`XMuT8AieK+tiL{|HD@f+pX|RLT)93@4p24TC3U+dI%A$5 z=yM@%9}fNNFzvvCX`FWO;*0}P`;LL9pvT~jIV%MYtwOv}0YuwLo=V0HHG6*ZQ5c#_ zp-UX}C~f)dzH|G%uyUL`;K4bUK7gQ_xP5AWi9w zZ!wObshbzX78W#WNqfCA2M5En)vevt*4Elek9Ir)IWM)b-lOnIHP+-S5+D%1VGqGr z;&vJ`92h4eB_E&}^o(PAL|f|_&$*@qPK{M{CRi5aRYTfx%cvGX=I$u4vCsO)6sai7iad+8reNPVO^`Y14}` z2g6RB#0TO`J+NbI2otcP+lXb+5LAW3ZfPN39QQyW<#f@F%^r1;vdhRU5<71;x7o=e zAn`Bs2|vkA&!6lwzNXQGlKc1&Cv$*hR@&mpVHSO)wRcRaMhanzBm=DI{PVUb7K%-z zEIyp;m@kOTM;*D*iXX48512WqT;Yg}?5(${^l

e)A#+0KvoVI=SM1!dQ}F8X*0~ z`)8#)IN&jY?s~~baQGQZKEXmkVHV;&*~ICOS>N_#`->5yX`8?g0B+ z@zKMzt->VDYp=RO5j8x}FXo{6@$DiOBDwt0ZzrD6ZU5%0&3vgkJ+zSatvV)RPB1Mk zc-mruTpIwazx5ug4qhH!JsTz_8i+>Ip~ATE&}ivaxbSZnJt9J*4@}iZIr@J`+C357 z#y`pnlw5qndHtJ|G|bnFl6vyxWs{nEkC9Ee+Yuo^oE)e#2;CM#9u@<09VB&&uSgoN z$A22E`W<$QyXsdZb|>^l&v@PzC4xZEU_EV3GeD&9i6)vJ81VLC7VIPiAYyWKS|qdI zhAIouexObPHCh-4?q;4 z%t)dVu>~cB4M}_^nw3<^!sIb@xQh|`2_L%@KHS;J)m;;vw|WXe_;Gu2^+*3~{*MVA z4#DEqF>8r6Z-rj1WKNAf7rf_nB!q4DW)XJptqVvLkqZ^+>9t0zWb?-y>c8evLK>Jm z+JkO>u{$jf<40VsK;A?n)ii(^2wXr{87(4l5205;*ClcJd<+ zLFa@KbbILwZ@@G1nE7giHftbyjqE>J(}=pEqO>pNH`7dO3U!g?eN_8XUMz9YJBCGj z@xvk3kZm!{tTzzGFh}-+mp9j*&Cl%?`vVe!GILI+Pd3OV+oCehvZsBgLv4w;ZnE#p z+Qb-5aJfF1wx;60TI&z+b$7|`#>Zd9RN8ie!3Ueo|0%y@Uj|R%_V@t$tvigpA?>$*@iPM+&EH{pK>&bX=EKI9q ziYsPJu>qKB`3vl@+UnE0m&hYlx#Q`{dW{1QjVhWejj_Usy>*Amf0ivD!o3w^*ts_y zE)FbmysW0Fr4~AY-er_rVgl*;o&o8dJqv0&U~4saDd8_0QVJpzvbGdMs2eZGZ)yOU n0>kG|;Q#;spIsR9$E;B<-29_2(qy$kCx@QSJ?#>$`=S32Zym~) delta 7223 zcmZ9xc{o(>AOAm#VJtD0ED^_2*|)SHW9(ZCB71})l57z(&RD7`%2+F5R1=}hTSB&x zkbM+yN%lRVvBeC-eCPB2UBBylUElM^xz2U&`@HVg{d~Ue`&^H6p3$IrH0VF>aHKHm zsDS73-#03K;i~5Fa_rB_G^?j@a1~JUWI8QASXYq{NzoL4=l=9tm6K(LB&@+h=OJ^w z(e+Iy)h|uG{o=}8VptGPF$=NS8Jo8fj<&=gX}PtJXLioMT(6zcH`SXn6SS5G&&#H{ z^s!d8-iQ&`*Akxk3!VH9SLGr5CzkQKQoOYZ(SwxX94&~7VETIRwJse{ccfcFD1Gqy zcUQI;-d<#h#D~Wt=Pts5tP4`Fu;vr>PdnlcVy2;&YiUrPA9{<3!JA(HD17fYR5H*W z8Np92iQcV~RaK-BOgcoSdvvP&#gz;T+_BsSb4fN(m06)9sSXnf>BsfLavv6FJ-&bZ zv$DU=k#K%Tz2?FF&_Zu8K4335gsD`3=nzVO7{xazY13s!_RmokujS8PBz0NXW?jfG zP$sD!M&Y#5(}U{c8-~28&Pvx`#Tv%xS`?iD_6he^fA_zG!@oMGS%6}=(a^ymzwFJQQQa;r$){e3Yb4!4` z#G7kcmp(t)!E)@`ypa=4yD4I~bBchGcy`t8<2%CC^qHtg{NyOVrKn`m>~!Q2z(k34 zQ@(v?`O->#mHGb zYQQ(ifEkUEx_z(+{x~P|O(P#MFqL-jkFGBY|0RDIa(*<9#M3tQ4F7YOe|4|+Dj=pA8><5eJ2(c=AIqn3#`-<1P^TA9bc5Z_s%dWU4<`ZuJ+U1sTO^n^L4yi5c6MSXLR zl!rfUH0S5#XYwV`M5ZEiIRV1u@>tH{E~1%bHeV~a=YtD5kqYBxf|vt9yoyO(J z-MIOda(7kjbog^QdpIGzCAZD=`K_5pG0u|v34zxtR&RZE`|9e+1wZoTs`iSyc-5Zv zy1u;cFyq^OC!-V#DKp<1^pBsTuDoVnE}c9%1wVn8)EB^f>|+ZjA4WL9Kd14a-z=qo z&b|-rz64MGVGT=l)xA0uR^sK-WkV)MvGju$u!O8zA^8rR1=_;V^DBgj zn%;aF2sO#BxlY_YCxnzq?gnHsL1C0`KTH9O*4FbeO#FL5yx%{X0&VS(Zv&tj4^DEc zjP{yW#Z^qk^azFw5d3uCTfX|49cgf_pyk((wNoc?0XM#zq{?UlrhQCs4e|R|XWD(P z8r6d09+G?cVJ&LJS&R}_4kTn09sndK=j;_mbDxlpo`>fO68ZIOk+DZ_H6NDAHQHquv0aGP)@RB;d z5FOuEh;J)_(+Z|DA?9bK?H<`>oEJ;Wvh6!oY19-Qi`$KTEjP8FaxfwC`wJXycO#!{ zcMR7b(2ve2uym3lFFstBE>?@x2KUbnEd6wGY1%7b_C>IT(|_D0rW&2w-FWmhYhs%< zHDVQhOSl(le?0NeQ0lGS6N=06V@QeO;0>3kPx!f|5fF^r)p}8!$=jKGesj^BbUvtm zcfM(2?nUl{lq2>7k%dS7<@MFx7?A=EK6Ww>LG%>;%Wpm6y_7b|i4}93N<##O$9wH{ z?#DN6(Stqp`uT}J?w8pNJ@I~ieseDKG4oVlUUkCty5Bp+3qwWp?K9p_s1r*0zxr)( zb!avYX8A6-`W;;MIK`3?~H?+ zOBYM6x3OK4;wXq*w-)Ruiyj}_zY!gyl)y4oN*pUK6xZ=;{^O*Qv1s z5rsAjMRWYA57QAjTP$q!q``m}3tvkU`%WI-@0bAiy+oU4R(u9{ znRBKl@otX9)~W_J>Y^O_eJQ>WtlE|OnWjb-1@_AbKTi7J8rFiEzQ)_106KV%DWS)0 zycn%*(;3kf%3s$QGif>`a6(Jy3MuYS#3iO03H@xA5eVz>gLcfw09lV}GZh=&sscSx zt5tVk#5r9+oos$)&oNhU;ex^~4EAcQJ5>*dhM4RPsxX%OJGH>A8soj;iT&jOFvZ(= zclZLh)hz;4&*;9{dL@Z^ehE?=zA$#Ue4LW`1)my$XHc3BV8P{;8)ky6%7M{DWNf8b z7pYr3xm7%Qb`#EEa1y*QbBC05;@_WR2-V4n@~Zj`{UzT0%Mky(nU)|J;SHw{57qgh z??zgkCZVFk}{$@fR5VldFJ|7rQ)%;6I;hn6S{`q|t643RUb zi;M+x5bS%w{iKUxa||~i5x;Xht7)&k$;=#|t_zgQeUgk~J1qOU-A16k(pSKV5!}K` zH${&}scSe*{qwe(<|Quy$M=%DPs+r|Pc)DSG}mpX)9%b2<6+$U%KFCon#P)XxOe?3 z(*|vXFgmoc-82MO*e`&ZDo)JsJ(S?(Re?jmd3jz_rAntW)WR^-XQfJe#wXV+<}~Yo z+WvJD3#Cd|J#D_fXnifOc53zl% z`Te9T-jLp~7kd%&e!-Vni}V&r`j_UL?JH>WwOpuQU#>#pXuQTp*9)Kgmz#%fvm%PY zU%pp!v=52)H@Ce+jn@B~1>{D%RaGEBK9@Y>bH_v2LLy3AaWE3=pn6Jy<+YgsIA_Uy zdlaQw5*{S)8!+~QCr{8pFY?jSS4xD-a?hsEKqu^npcvAEOF5%xv<%Jd3CI zlQKmg=)e4Jfb2~~EylfxFd>{7`9z{LtFiSU z#Wj2RUkoIL7w`zJG+smzKG?Tfa^*MEOlHRJne;WePexLy|{G4WQ`~db|w8% zaVAr~ES7GxM&Z)2@LHy>yKvCFd z#Q+-5QzEwRQD2Q3Zf-#TSHW`;N6+oIXeGz@_8s{$tG8a>GONz$NkXj!O)oJnPutcZ zO)m}2NC>+?AABV!g~}FX0F6bgMYr;%w1a%h89VVwGYCZV5(oz=PrR|{1EzxVszYIG@TluFPoy?*T4(<=WbWJ)*>g2 z1u$q~S3(ITO<#=}c~ck9chiu;E<{>)EKo)b?hig^YYf}!{-~!vJVm+O zK2(0`;AA^!43%3Nn6+pf1jHs{6X=)bLY?>isdM!9Ky!U_rNSUPe%9^l2N$nE7G2R7 zo@A#jm@)Y`Bj$H7IB|U-5-a7(5 zn?K^B%?;hC*c~1}j5KwJIucg*;57iUt-UxCFlSwgtT-*(c~9)IH565`{{kS(1KRN+ zA?3+8u0{mgRS$A`H+D_b^Cer0`J9M5xb~f=f8z=YhiYj8yVP3SFduGyz&gh| zQg^TpR1VN}xsZ$J%K9@osy3;EHV!7I<+>&7@me?B2qb$avfIIBs6lZt#n+mbo79S2bGUV#vXx$F>@m?Q%Bpnx?DhLMizw&(Dcrv zb-Ua+A?*7|#;Q(YX}@K0y*47CuaF5f{5yF?pSyNlFp#meHBS3O0}0pP-sZm>FaO#2 zmV{bSVs!fCE4>tFciH0V%_zb0V;&Kqe8_p}^3de|m2t+k&gI5d#bNa)(x*N>QTg~4 z|EXP~%%C915SO|Bf(r*SoxIU={QAGw=SJo#*G+h;=Ip%4o=jr7258_Mdg+7u1wo_* znsH64kS>gJgw00T)5rR5SA#sM*y`RIwd&Cn=l{DG z^f}!0KT7Y^v@gQFj}jCNSyrfXx|2}SJt19UUwCZ}RP$1Dpnist=a%{_{&VT4g~(j6 z1|*AO*S=o0Fj7sofj)~j8b5dYsqXI)WH|?;@zJu0nz&wJfoW5Qm;JIGp!@V>k&YP?bML0-{dwr=OX znQE}NUe3GPQ;^mUtle+3df`m?^tI%?{GGX8f6Bxi2^QafDrN39Jc2xHg<7k8HfBgF zaVyDE>tMPC99<3oeGs5JQzRU`-PLvUH?2O<;C7g7P<`(nFk`cPIa`4>iBh*FdEC4> zDd8XdhnrX|2mJmRqc*d6JV2O;ujXupw{wRm<_sQmuc4R^zvysoJ#sYUE$nHg*tMZrg7xzIL>1&`_SMF2ki<>Fe2K& z*R(ltjzZ;!2bcl?CyX=Z{iz^X3(S}Q0bnZP|8n2|PlcI}FLP%q@JfM?Wr4N&{_KxR zi={?+=lUj&n{sxnl9-4 zO`D;hZzlg{6pI{5P%87i*xO6HUcSuCm6W0-E)Til>nbkdZ2BYHz7DH{RliS2>r{FM zt@sx^hHnyaE5f@g>ehMS)%y_y9eFdTBjcQG@f%)SEA^_N>+RpU7s*#*4*(~sl#GJY z1yAizj~*_+AbpiWd61s7A7qf&ozIiuj>mb`*+zsjqt8u*W|TX>9G#q?h=uG>zo5xh zAM9^uYzS<7ko*J)&)RhV1K*CRI@i0>Yu6XcSAG2Q)I|}Yiu$SuT`;%jG4J>$;U9{%q2Am7| zN5-ii%Hc_7e-}Drdwn2*+#P_biZ5Ve z|11yBu@>0i8igHuciuS)mH{*M4nHlu`q$C2H|wl-B4yNVfTAehGMMP9m;GT7xO4yj zA39p!dBXoWjLx(DXS8;+v0eq(m%<7;@+IW=X|SVF#?aP){)mTI)_}1C-1;I$)>u4Q zNj%vWsMGwGUCOz6nQ$_fYxS8r4)c^ zw_Bi{dr~Z=<82)M=PdWx33ouwSMpwH*0%e4b63{s(5M)#M)-R17HK+72GC+NL65qc z4<94r)@a**aP+PG5sA=aUGcY>J>dcmLP#pGX+qP_Ren}CgjbSfN4p||*=Ldt02(0V zj*Q(klfZ*0TW7qry5+b;iMwR^v-3rh5_c}23A0{_(bhhaAJpw8>cpYjM?5= zkwn3gv55VAH|{7a$A{uv!WGZJG-JF_MuBMZYMQi&(rbYZWA=tI`|C&75Qy+0*69F~ zKwe_QafeRRGbtDLY6Z@QVw5$Y8MaX3by<{dK1^1hzrRvkytff!2FakFOLBL_oIVVt z=6vBd+s_zeyOBpd8iFU@(>x}c{>ri%u1>i3K;Ne(k|>4O zs4qVNT<4H%@T3GeDeVM8NKGy&ue%+<1%E>jwWrypecPt{J4KR2!x{-KEIS8xCG1;m z^wQP}|96dIe-jAm3TU$|fRb*8h)(g~c_mX55qGBKGg>rwE7?<5rhg~;Ww*3I`a9c1 zuufv0a6-?KiykObFUi&QDY{h}=6D3DFOR#o2N(ZWH}I%~8_KlC7gNoL&wE}l22F6d(lI*%<29wOUmB+H^!^t9$0zBL!!xr=ylUK1A)5gZ&GG0;iU z!|^ih;r(&BH8#Y{T**y;LuKw%w?7o09iI+iEZ})-mqw{P+-+3l%#m6M1Rif=ZsPP@ zC2rc!Sp!5W8w>S)J1h1-3m_sJ=@Av51moKw{lU2|+;~A^k~q}bBx)#G460xM7EX?C zKk;;4BY*9@o@IsNP&Aw;)dtqF(pH}m-Nfz<-KTJrt+_eo(Ga~m?%SEDl&l``Sj?UH zb?T-#sYTV5sC|Ts@lPdiSVledwE$ow&Nl~&`^H1U{yBsY&*(ZhgplV}VJ8UiS+AI0 zK@e{V{O-{}{`!y)h3V}4YA|wlKXan4J}}``Rg58j8}9rUH{`(7!ZQIBjoTbBIdeZ- zXd+zz;QAannKZ1=pO`PEm_f49dC5&KQSIRetg6f8xuNjsR&gaBWb(p-mZwiju`;*^ z-`eBfde_#Ih<{JgkJ#!N=D_+5T4G^z8y>~=8iwST{E3=W6cE8E?==hE3^S)D*%_dS zPs?-xpfo#D@f`GlhP6{QP@_5eo-OgkGG$Z9G8H!vPv4qu%zM8PwSMD}TBu3Ps(jA3 z6#S|&8k?{o?18ckZH!yms;5&ywfUa{Knq-9BIPPs2ROt1;EY7#FF>ecY@6mG@ngZV z*b;2h^kkr2i9Kzw5D7!e){I!qe*7<)ED~L13QO$L7iw=cgi*G{FZwTj6rlmHFNyZ6bU9z7v>$3Mymh ze;VUz=;LLumm|Guh*>#VDh5xKBzhRfY~LrezZ)@TO&vbe=l`tC7xGLC^D(7OgD^wJ zdp6vXAb#Xe=ixI4e{t5qytcBi0@Qrfv>#p!-1x=diIjZ(eTd HllXrCC=$0O From 004f54f4c89863a0d973847c2d274536934de6b1 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 7 Aug 2018 19:45:41 +0200 Subject: [PATCH 015/622] Update: Translations from eints hebrew: 23 changes by dnd_man french: 45 changes by glx --- src/lang/french.txt | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/lang/hebrew.txt | 24 +++++++++++++++++++++++- 2 files changed, 68 insertions(+), 1 deletion(-) diff --git a/src/lang/french.txt b/src/lang/french.txt index 34b3bcd892..3f5daf4a9d 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -476,6 +476,7 @@ STR_ABOUT_MENU_SCREENSHOT :Copie d'écran STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Copie d'écran au zoom maximum STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Copie d'écran au zoom par défaut STR_ABOUT_MENU_GIANT_SCREENSHOT :Copie d'écran de la carte entière +STR_ABOUT_MENU_SHOW_FRAMERATE :Afficher la fréquence d'images STR_ABOUT_MENU_ABOUT_OPENTTD :À propos d'OpenTTD STR_ABOUT_MENU_SPRITE_ALIGNER :Alignement de sprite STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Afficher/Cacher les boites de dimensions maximum @@ -927,6 +928,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Rand sud-africa STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personnalisée... STR_GAME_OPTIONS_CURRENCY_GEL :Lari Géorgien (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iranien (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Nouveau rouble russe (RUB) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Véhicules routiers @@ -2699,9 +2701,52 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 L'équipe OpenTTD # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Fréquence d'images +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Fréquence de simulation{NBSP}: {STRING} +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Nombre de ticks simulés par seconde. +STR_FRAMERATE_RATE_BLITTER :{WHITE}Fréquence des graphismes{NBSP}: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Nombre d'images rendues par seconde. +STR_FRAMERATE_SPEED_FACTOR :{WHITE}Facteur de vitesse actuel{NBSP}: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}À quelle vitesse le jeu tourne actuellement, comparé à la vitesse attendue pour la simulation normale. +STR_FRAMERATE_CURRENT :{WHITE}Actuel +STR_FRAMERATE_AVERAGE :{WHITE}Moyen +STR_FRAMERATE_DATA_POINTS :{WHITE}Données basées sur {COMMA} mesures +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE} images/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} images/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} images/s +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{WHITE}Total de la boucle de jeu{NBSP}: +STR_FRAMERATE_GL_ECONOMY :{WHITE} Traitement des marchandises{NBSP}: +STR_FRAMERATE_GL_TRAINS :{WHITE} Ticks des trains{NBSP}: +STR_FRAMERATE_GL_ROADVEHS :{WHITE} Ticks des véhicules routiers{NBSP}: +STR_FRAMERATE_GL_SHIPS :{WHITE} Ticks des navires{NBSP}: +STR_FRAMERATE_GL_AIRCRAFT :{WHITE} Ticks des aéroplanes{NBSP}: +STR_FRAMERATE_GL_LANDSCAPE :{WHITE} Ticks du monde{NBSP}: +STR_FRAMERATE_GL_LINKGRAPH :{WHITE} Délai du flux des marchandises{NBSP}: +STR_FRAMERATE_DRAWING :{WHITE}Rendu des graphismes{NBSP}: +STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Vues{NBSP}: +STR_FRAMERATE_VIDEO :{WHITE}Sortie vidéo{NBSP}: +STR_FRAMERATE_SOUND :{WHITE}Mixage sonore{NBSP}: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Boucle de jeu +STR_FRAMETIME_CAPTION_GL_ECONOMY :Traitement des marchandises +STR_FRAMETIME_CAPTION_GL_TRAINS :Ticks des trains +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Ticks des véhicules routiers +STR_FRAMETIME_CAPTION_GL_SHIPS :Ticks des navires +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Ticks des aéroplanes +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Ticks du monde +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Délai du flux des marchandises +STR_FRAMETIME_CAPTION_DRAWING :Rendu des graphismes +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Rendu des vues +STR_FRAMETIME_CAPTION_VIDEO :Sortie vidéo +STR_FRAMETIME_CAPTION_SOUND :Mixage sonore ############ End of leave-in-this-order diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index cc36dab80e..ddd112678d 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -489,6 +489,7 @@ STR_ABOUT_MENU_SCREENSHOT :צילום מס STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :צילום מסך בהגדלה מלאה STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :ברירת מחדל של תקריב צילום מסך STR_ABOUT_MENU_GIANT_SCREENSHOT :צילום מסך ענק +STR_ABOUT_MENU_SHOW_FRAMERATE :הצג קצב פריימים STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD'{NBSP}אודות STR_ABOUT_MENU_SPRITE_ALIGNER :מיישר ספרייטים STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :הדלק/כבה הצגת תיבות גבול של ספרייטים @@ -664,6 +665,7 @@ STR_MUSIC_RULER_MARKER :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}אין מוזיקה זמינה STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}רצועה STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}כותרת @@ -936,6 +938,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :(ZAR) ראנד STR_GAME_OPTIONS_CURRENCY_CUSTOM :אחר... STR_GAME_OPTIONS_CURRENCY_GEL :לארי גאורגי (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :ריאל איראני (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :רובל רוסי (RUB) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}רכבי כביש @@ -1348,6 +1351,8 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :צבע פני STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :ירוק STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :ירוק כהה STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :סגול +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :הזז את התצוגה עם כפתור עכבר ימני, מיקום העכבר נעול +STR_CONFIG_SETTING_SCROLLMODE_LMB :הזז מפה עם כפתור עכבר שמאלי STR_CONFIG_SETTING_SMOOTH_SCROLLING :{STRING} :גלילה חלקה של התצוגה המשנית STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :שלוט כיצד התצוגה הראשית נגללת למיקום מסוים כאשר מקליקים על המפה הקטנה אן כאשר נותנים הוראה לגלול לעצם מסוים על גבי המפה. אם מאופשר, חלון התצוגה נגלל באופן חלק, אם מבוטל הוא מוקפץ ישירות אל נקודת המטרה STR_CONFIG_SETTING_MEASURE_TOOLTIP :{STRING} :'הצג מידות בעת בניית כבישים/מסילות וכיוב @@ -2701,9 +2706,23 @@ STR_ABOUT_VERSION :{BLACK}{REV} ג STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 The OpenTTD team # Framerate display window +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{WHITE}קצב סימולציה: {STRING} +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK} כמה מהר המשחק כרגע רץ, בהשוואה למהירות הצפוייה בקצב סימולציה רגיל. +STR_FRAMERATE_DATA_POINTS :{WHITE}נתונים מבוססים על {COMMA} מדידות ############ Leave those lines in this order!! +STR_FRAMERATE_GL_ROADVEHS :{WHITE} פעימות כלי רכב: +STR_FRAMERATE_GL_SHIPS :{WHITE} פעימות כלי שייט: +STR_FRAMERATE_GL_LANDSCAPE :{WHITE} נקודות עולם: +STR_FRAMERATE_DRAWING :{WHITE}עיבוד גרפיקה: +STR_FRAMERATE_SOUND :{WHITE} ערבוב צליל: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GL_TRAINS :פעימות רכבת +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :השהיית גרף קשרים +STR_FRAMETIME_CAPTION_DRAWING :עיבוד גרפיקה +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :עיבוד תצוגת עולם +STR_FRAMETIME_CAPTION_VIDEO :פלט וידאו ############ End of leave-in-this-order @@ -2733,7 +2752,7 @@ STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: STR_SAVELOAD_OSKTITLE :{BLACK}הכנס שם לשמירה # World generation -STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}יצור עולם +STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}יצירת עולם STR_MAPGEN_MAPSIZE :{BLACK}:גודל המפה STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}בחר את גודל המפה במשבצות. מספר המשבצות הזמינות תהיה קצת קטנה יותר. STR_MAPGEN_BY :{BLACK}* @@ -2991,6 +3010,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}הכנס STR_TOWN_DIRECTORY_CAPTION :{WHITE}ערים STR_TOWN_DIRECTORY_NONE :{ORANGE}- אין - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (City){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}שמות ערים - לחץ על שם כדי למקד את התצוגה על העיר. Ctrl+לחיצה פותח חלונית תצוגה חדשה על מיקום העיר STR_TOWN_POPULATION :{BLACK}אוכלוסיית העולם: {COMMA} @@ -4244,6 +4264,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... כב STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}הכביש פונה לכיוון לא נכון... STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... לתחנות "על הדרך" לא יכולות להיות פינות STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... לתחנות "על הדרך" לא יכולות להיות צמתים +STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... הדרך חד כיוונית או חסומה # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}... לא ניתן לבטל חלק מהתחנה @@ -4495,6 +4516,7 @@ STR_BASESOUNDS_DOS_DESCRIPTION :צלילי Tran STR_BASESOUNDS_WIN_DESCRIPTION :צלילי Transport Tycoon Deluxe המקורי בגרסת Windows. STR_BASESOUNDS_NONE_DESCRIPTION :אוסף צלילים ללא צלילים. STR_BASEMUSIC_WIN_DESCRIPTION :מנגינות Transport Tycoon Deluxe המקורי בגרסת Windows. +STR_BASEMUSIC_TTO_DESCRIPTION :מנגינות Transport Tycoon Deluxe (Original/World Editor) המקורי בגרסת DOS. STR_BASEMUSIC_NONE_DESCRIPTION :אוסף מנגינות ללא מנגינות. ##id 0x2000 From 27c4f5517f1f104e36ac2ea773462f20e3ddeb59 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 8 Aug 2018 19:45:45 +0200 Subject: [PATCH 016/622] Update: Translations from eints dutch: 115 changes by mrLeopold --- src/lang/dutch.txt | 169 ++++++++++++++++++++++++++++++--------------- 1 file changed, 115 insertions(+), 54 deletions(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 9b387f2f7c..fd47910a68 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -224,7 +224,7 @@ STR_UNITS_HEIGHT_METRIC :{COMMA}{NBSP}m STR_UNITS_HEIGHT_SI :{COMMA}{NBSP}m # Common window strings -STR_LIST_FILTER_TITLE :{BLACK}Filter tekst: +STR_LIST_FILTER_TITLE :{BLACK}Filtertekst: STR_LIST_FILTER_OSKTITLE :{BLACK}Voer filtertekst in STR_LIST_FILTER_TOOLTIP :{BLACK}Geef een woord waarop gefilterd kan worden in de lijst @@ -440,7 +440,7 @@ STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Bouw magneetzwe ############ range for road construction menu starts STR_ROAD_MENU_ROAD_CONSTRUCTION :Bouw wegen -STR_ROAD_MENU_TRAM_CONSTRUCTION :Bouw tramwegen +STR_ROAD_MENU_TRAM_CONSTRUCTION :Bouw tramsporen ############ range ends here ############ range for waterways construction menu starts @@ -475,6 +475,7 @@ STR_ABOUT_MENU_SCREENSHOT :Screenshot STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Ingezoomd screenshot STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Screenshot met standaard zoom STR_ABOUT_MENU_GIANT_SCREENSHOT :Screenshot van hele kaart +STR_ABOUT_MENU_SHOW_FRAMERATE :Toon frame rate STR_ABOUT_MENU_ABOUT_OPENTTD :Over 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite-uitlijner STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Schakel selectiekaders @@ -650,6 +651,7 @@ STR_MUSIC_RULER_MARKER :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Geen muziek beschikbaar STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Nummer STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Titel @@ -670,11 +672,14 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Programm STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Toon nummerkeuzescherm # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Muziekprogramma - '{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Nummerindex STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Programma - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Maak leeg +STR_PLAYLIST_CHANGE_SET :{BLACK}Verander set STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Maak huidig programma leeg (alleen Aangepast1 en Aangepast2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Verander muziekselectie naar een andere geïnstalleerde set STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klik op het nummer om deze aan het programma toe te voegen (alleen Aangepast1 en Aangepast2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klik op het nummer om deze uit het programma te verwijderen (alleen Aangepast1 en Aangepast2) @@ -877,10 +882,10 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC # Extra view window STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Kijkvenster {COMMA} -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopieer naar kijkvenster +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Verander kijkvenster STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopieer de locatie van het algemene scherm naar dit kijkvenster -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Plak van kijkvenster -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Plak de locatie van dit kijkvenster naar het algemene scherm +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Verander algemeen scherm +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Kopieer de locatie van dit kijkvenster naar het algemene scherm # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Spelopties @@ -922,6 +927,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Zuid-Afrikaanse STR_GAME_OPTIONS_CURRENCY_CUSTOM :Aangepast... STR_GAME_OPTIONS_CURRENCY_GEL :Georgische Lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Iraanse Rial (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Nieuwe Russische Roebel (RUB) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Wegvoertuigen @@ -1334,8 +1340,14 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Kleur van het t STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Groen STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Donker groen STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violet +STR_CONFIG_SETTING_SCROLLMODE :Bekijk scrollgedrag: {STRING} +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Gedrag tijdens het scrollen van de kaart +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Verplaats kijkvenster met RMB, muispositie staat vast +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Verplaats kaart met RMB, muispositie staat vast +STR_CONFIG_SETTING_SCROLLMODE_RMB :Verplaats kaart met RMB +STR_CONFIG_SETTING_SCROLLMODE_LMB :Verplaats kaart met LMB STR_CONFIG_SETTING_SMOOTH_SCROLLING :Vloeiend scrollen kijkvenster: {STRING} -STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Bepalen hoe de hoofdweergave schuift naar een specifieke positie bij het klikken op de minikaart of bij de afgifte van een opdracht om naar een specifiek object op de kaart. Indien ingeschakeld, de viewport scrollt soepel, als deze uitgeschakeld gaat u rechtstreeks naar de beoogde plek +STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Bepalen hoe de hoofdweergave naar een specifieke positie schuift bij het klikken op de minikaart of bij het uitvoeren van een commando om naar een specifiek object op de kaart te scrollen. Indien ingeschakeld, dan scrollt het kijkvenster soepel, als deze uitgeschakeld gaat u rechtstreeks naar de beoogde plek STR_CONFIG_SETTING_MEASURE_TOOLTIP :Toon dimensie-informatie bij het gebruik van diverse bouwgereedschappen: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Geef tegelafstanden en hoogteverschillen weer bij het slepen tijdens het bouwen STR_CONFIG_SETTING_LIVERIES :Laat alle voertuigkleuren zien: {STRING} @@ -2274,10 +2286,11 @@ STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Schakel STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Maak objecten onzichtbaar in plaats van transparant # Linkgraph legend window -STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Vracht Stroom Legenda +STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Vrachtstroomlegende STR_LINKGRAPH_LEGEND_ALL :{BLACK}Alle STR_LINKGRAPH_LEGEND_NONE :{BLACK}Geen STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Selecteer weer te geven bedrijven +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}ongebruikt @@ -2374,7 +2387,7 @@ STR_SELECT_BRIDGE_INFO :{GOLD}{STRING}, STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY} STR_BRIDGE_NAME_SUSPENSION_STEEL :Hangend, Staal STR_BRIDGE_NAME_GIRDER_STEEL :Koker, Staal -STR_BRIDGE_NAME_CANTILEVER_STEEL :Cantilever, Staal +STR_BRIDGE_NAME_CANTILEVER_STEEL :Vrijdragend, Staal STR_BRIDGE_NAME_SUSPENSION_CONCRETE :Hangend, Beton STR_BRIDGE_NAME_WOODEN :Hout STR_BRIDGE_NAME_CONCRETE :Beton @@ -2384,7 +2397,7 @@ STR_BRIDGE_TUBULAR_SILICON :Buis, Silicium # Road construction toolbar STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Bouw wegen -STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Bouw tramwegen +STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Bouw tramsporen STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Bouw weg. Ctrl schakelt tussen bouwen/verwijderen van de weg. Shift schakelt tussen bouwen/inschatting van de kosten STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Bouw tramrails. Ctrl schakelt tussen bouwen/verwijderen van tramrails. Shift schakelt tussen bouwen/inschatting van de kosten STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Bouw weg met de Autoroad-methode. Ctrl schakelt tussen bouwen/verwijderen van de weg. Shift schakelt tussen bouwen/inschatting van de kosten @@ -2450,7 +2463,7 @@ STR_STATION_BUILD_AIRPORT_LAYOUT_NAME :{BLACK}Layout { STR_AIRPORT_SMALL :Klein STR_AIRPORT_CITY :Stad -STR_AIRPORT_METRO :Hoofdstedelijk +STR_AIRPORT_METRO :Grootstedelijk STR_AIRPORT_INTERNATIONAL :Internationaal vliegveld STR_AIRPORT_COMMUTER :Pendel STR_AIRPORT_INTERCONTINENTAL :Intercontinentaal @@ -2572,21 +2585,21 @@ STR_LAND_AREA_INFORMATION_OWNER_N_A :Geen STR_LAND_AREA_INFORMATION_OWNER :{BLACK}Eigenaar: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_ROAD_OWNER :{BLACK}Eigenaar van weg: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Eigenaar van tramrails: {LTBLUE}{STRING} -STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Spoorweg eigenaar: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Eigenaar van spoorweg: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Gemeente: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Geen STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coördinaten: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Bouwjaar: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stationsklasse: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stationstype: {LTBLUE}{STRING} -STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Vliegveld klasse: {LTBLUE}{STRING} -STR_LAND_AREA_INFORMATION_AIRPORT_NAME :{BLACK}Vliegveld naam: {LTBLUE}{STRING} -STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Vliegveld tegel naam: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Vliegveldklasse: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_AIRPORT_NAME :{BLACK}Vliegveldnaam: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Vliegveldtegelnaam: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Geaccepteerde vracht: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) -STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Rail type: {LTBLUE}{STRING} -STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Spoor snelheidslimiet: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Spoortype: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Spoorsnelheidslimiet: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Snelheidslimiet weg: {LTBLUE}{VELOCITY} # Description of land area of different tiles @@ -2598,35 +2611,35 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Akkers STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Sneeuw STR_LAI_CLEAR_DESCRIPTION_DESERT :Woestijn -STR_LAI_RAIL_DESCRIPTION_TRACK :Spoorweg spoor -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Spoorweg spoor met blokseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Spoorweg spoor met voorseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Spoorweg spoor met exitseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Spoorweg spoor met combo-seinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Spoorweg spoor met routeseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Spoorweg spoor met eenrichtingsseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Spoorweg spoor met blok en voorseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Spoorweg spoor met blok en exitseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Spoorweg spoor met blok en combo-seinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Spoorweg spoor met blok en routeseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Spoorweg spoor met blok en eenrichtingsseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Spoorweg spoor met voor- en exitseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Spoorweg spoor met voor- en combo-seinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Spoorweg spoor met voor- en routeseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Spoorweg spoor met voor- en eenrichtingsseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Spoorweg spoor met exit- en combo-seinen +STR_LAI_RAIL_DESCRIPTION_TRACK :Spoor +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Spoor met blokseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Spoor met voorseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Spoor met uitgangsseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Spoor met combinatieseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Spoor met routeseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Spoor met eenrichtingsseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Spoor met blok- en voorseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Spoor met blok- en uitgangsseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Spoor met blok- en combinatieseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Spoor met blok- en routeseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Spoor met blok- en eenrichtingsseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Spoor met voor- en uitgangsseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Spoor met voor- en combinatieseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Spoor met voor- en routeseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Spoor met voor- en eenrichtingsseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Spoor met uitgangs- en combinatieseinen STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Spoorweg spoor met exit- en routeseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Spoorweg spoor met exit- en eenrichtingsseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Spoorweg spoor met combo- en routeseinen -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Spoorweg Spoor met combo- en eenrichtingssein -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Spoorweg spoor met route en eenrichtingssein -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Spoorweg trein depot +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Spoor met uitgangs- en eenrichtingsseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Spoor met combinatie- en routeseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Spoor met combinatie- en eenrichtingsseinen +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Spoor met route- en eenrichtingsseinen +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Spoorwegtreindepot STR_LAI_ROAD_DESCRIPTION_ROAD :Weg STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Weg met straatlantaarns STR_LAI_ROAD_DESCRIPTION_TREE_LINED_ROAD :Weg met bomenrij STR_LAI_ROAD_DESCRIPTION_ROAD_VEHICLE_DEPOT :Garage -STR_LAI_ROAD_DESCRIPTION_ROAD_RAIL_LEVEL_CROSSING :Gelijkvloerse overweg +STR_LAI_ROAD_DESCRIPTION_ROAD_RAIL_LEVEL_CROSSING :Gelijkvloerse kruising met weg/spoor STR_LAI_ROAD_DESCRIPTION_TRAMWAY :Tramrails # Houses come directly from their building names @@ -2657,21 +2670,21 @@ STR_LAI_WATER_DESCRIPTION_SHIP_DEPOT :Dok STR_LAI_TUNNEL_DESCRIPTION_RAILROAD :Spoortunnel STR_LAI_TUNNEL_DESCRIPTION_ROAD :Wegtunnel -STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_STEEL :Stalen hangbrug (spoor) -STR_LAI_BRIDGE_DESCRIPTION_RAIL_GIRDER_STEEL :Stalen kokerbrug (spoor) -STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL :Stalen cantileverbrug (spoor) -STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_CONCRETE :Hangbrug van gewapend beton (spoor) -STR_LAI_BRIDGE_DESCRIPTION_RAIL_WOODEN :Houten brug (spoor) -STR_LAI_BRIDGE_DESCRIPTION_RAIL_CONCRETE :Betonnen brug (spoor) -STR_LAI_BRIDGE_DESCRIPTION_RAIL_TUBULAR_STEEL :Buisvormige brug (spoor) +STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_STEEL :Stalen hangende spoorbrug +STR_LAI_BRIDGE_DESCRIPTION_RAIL_GIRDER_STEEL :Spoorbrug met stalen koker +STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL :Stalen vrijdragende spoorbrug +STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_CONCRETE :Hangende spoorbrug van gewapend beton +STR_LAI_BRIDGE_DESCRIPTION_RAIL_WOODEN :Houten spoorbrug +STR_LAI_BRIDGE_DESCRIPTION_RAIL_CONCRETE :Betonnen spoorbrug +STR_LAI_BRIDGE_DESCRIPTION_RAIL_TUBULAR_STEEL :Buisvormige spoorbrug -STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_STEEL :Stalen hangbrug (weg) -STR_LAI_BRIDGE_DESCRIPTION_ROAD_GIRDER_STEEL :Stalen kokerbrug (weg) -STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL :Stalen cantileverbrug (weg) -STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_CONCRETE :Hangbrug van gewapend beton (weg) -STR_LAI_BRIDGE_DESCRIPTION_ROAD_WOODEN :Houten brug (weg) -STR_LAI_BRIDGE_DESCRIPTION_ROAD_CONCRETE :Betonnen brug (weg) -STR_LAI_BRIDGE_DESCRIPTION_ROAD_TUBULAR_STEEL :Buisvormige brug (weg) +STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_STEEL :Stalen hangende wegbrug +STR_LAI_BRIDGE_DESCRIPTION_ROAD_GIRDER_STEEL :Wegbrug met stalen koker +STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL :Stalen vrijdragende wegbrug +STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_CONCRETE :Hangende wegbrug van gewapend beton +STR_LAI_BRIDGE_DESCRIPTION_ROAD_WOODEN :Houten wegbrug +STR_LAI_BRIDGE_DESCRIPTION_ROAD_CONCRETE :Betonnen wegbrug +STR_LAI_BRIDGE_DESCRIPTION_ROAD_TUBULAR_STEEL :Buisvormige wegbrug STR_LAI_BRIDGE_DESCRIPTION_AQUEDUCT :Aquaduct @@ -2683,13 +2696,56 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terrein in bedr # About OpenTTD window STR_ABOUT_OPENTTD :{WHITE}Over OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Originele copyright {COPYRIGHT} 1995 Chris Sawyer, alle rechten voorbehouden -STR_ABOUT_VERSION :{BLACK}OpenTTD versie {REV} +STR_ABOUT_VERSION :{BLACK}OpenTTD-versie {REV} STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Het OpenTTD-team # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Frame rate +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Simulatiesnelheid: {STRING} +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Aantal gesimuleerde gameticks per seconde. +STR_FRAMERATE_RATE_BLITTER :{WHITE}Graphics frame rate: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Aantal videoframes die weergegeven worden per seconde. +STR_FRAMERATE_SPEED_FACTOR :{WHITE}Huidige spelsnelheidsfactor: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Hoe snel het spel momenteel draait, vergeleken met de verwachte snelheid bij een normale simulatiesnelheid. +STR_FRAMERATE_CURRENT :{WHITE}Huidig +STR_FRAMERATE_AVERAGE :{WHITE}Gemiddelde +STR_FRAMERATE_DATA_POINTS :{WHITE}Gegevens gebaseerd op {COMMA} metingen +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE} frames/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} frames/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} frames/s +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{WHITE}Gamelooptotaal: +STR_FRAMERATE_GL_ECONOMY :{WHITE} Cargoafhandeling: +STR_FRAMERATE_GL_TRAINS :{WHITE} Treinticks: +STR_FRAMERATE_GL_ROADVEHS :{WHITE} Wegvoertuigticks: +STR_FRAMERATE_GL_SHIPS :{WHITE} Schipticks: +STR_FRAMERATE_GL_AIRCRAFT :{WHITE} Vliegtuigticks: +STR_FRAMERATE_GL_LANDSCAPE :{WHITE} Wereldticks: +STR_FRAMERATE_GL_LINKGRAPH :{WHITE} Link grafiekvertraging: +STR_FRAMERATE_DRAWING :{WHITE}Graphics weergeven: +STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Wereldkijkvensters: +STR_FRAMERATE_VIDEO :{WHITE}Video-output: +STR_FRAMERATE_SOUND :{WHITE}Geluid mixen: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Gameloop +STR_FRAMETIME_CAPTION_GL_ECONOMY :Cargoafhandeling +STR_FRAMETIME_CAPTION_GL_TRAINS :Treinticks +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Wegvoertuigticks +STR_FRAMETIME_CAPTION_GL_SHIPS :Schipticks +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Vliegtuigticks +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Wereldticks +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Link grafiekvertraging +STR_FRAMETIME_CAPTION_DRAWING :Graphics weergeven +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Wereldkijkvenster weergeven +STR_FRAMETIME_CAPTION_VIDEO :Video-output +STR_FRAMETIME_CAPTION_SOUND :Geluid mixen ############ End of leave-in-this-order @@ -2977,6 +3033,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Geef een STR_TOWN_DIRECTORY_CAPTION :{WHITE}Steden STR_TOWN_DIRECTORY_NONE :{ORANGE} Geen STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Groeistad){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Plaatsnamen - klik op naam om het scherm te centreren op de stad. Ctrl+klik opent een nieuw kijkvenster op de locatie van de stad STR_TOWN_POPULATION :{BLACK}Wereldbevolking: {COMMA} @@ -2984,6 +3041,7 @@ STR_TOWN_POPULATION :{BLACK}Wereldbe STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Groeistad) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Bevolking: {ORANGE}{COMMA}{BLACK} Huizen: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} vorige maand: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Vracht nodig voor groei van stad: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} noodzakelijk STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} noodzakelijk in de winter @@ -4230,6 +4288,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... deze STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... weg is in de verkeerde richting STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... doorrij haltes kunnen geen bochten hebben STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... doorrij haltes kunnen geen kruisingen hebben +STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... weg is eenrichtingsverkeer of geblokkeerd # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Kan deel van station niet weghalen... @@ -4481,6 +4540,8 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Originele gelui STR_BASESOUNDS_WIN_DESCRIPTION :Originele geluiden van de Transport Tycoon Deluxe Windows-versie. STR_BASESOUNDS_NONE_DESCRIPTION :Een geluidset zonder geluid. STR_BASEMUSIC_WIN_DESCRIPTION :Originele muziek van de Transport Tycoon Deluxe Windows-versie. +STR_BASEMUSIC_DOS_DESCRIPTION :Originele Transport Tycoon Deluxe DOS-editiemuziek. +STR_BASEMUSIC_TTO_DESCRIPTION :Originele Transport Tycoon (Original/World Editor) DOS-editiemuziek. STR_BASEMUSIC_NONE_DESCRIPTION :Een muziekset zonder muziek. ##id 0x2000 From a53e4d8fe518ddd79e11a40bf06c4b9113229c7e Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 9 Aug 2018 19:45:42 +0200 Subject: [PATCH 017/622] Update: Translations from eints dutch: 137 changes by mrLeopold --- src/lang/dutch.txt | 274 ++++++++++++++++++++++----------------------- 1 file changed, 137 insertions(+), 137 deletions(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index fd47910a68..df2388742f 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -98,7 +98,7 @@ STR_QUANTITY_NOTHING : STR_QUANTITY_PASSENGERS :{COMMA}{NBSP}passagier{P "" s} STR_QUANTITY_COAL :{WEIGHT_LONG} kolen STR_QUANTITY_MAIL :{COMMA}{NBSP}zak{P "" ken} post -STR_QUANTITY_OIL :{VOLUME_LONG} Vaten Olie +STR_QUANTITY_OIL :{VOLUME_LONG} Vaten olie STR_QUANTITY_LIVESTOCK :{COMMA}{NBSP}stuk{P "" s} vee STR_QUANTITY_GOODS :{COMMA}{NBSP}krat{P "" ten} goederen STR_QUANTITY_GRAIN :{WEIGHT_LONG} graan @@ -107,7 +107,7 @@ STR_QUANTITY_IRON_ORE :{WEIGHT_LONG} i STR_QUANTITY_STEEL :{WEIGHT_LONG} staal STR_QUANTITY_VALUABLES :{COMMA}{NBSP}zak{P "" ken} kostbaarheden STR_QUANTITY_COPPER_ORE :{WEIGHT_LONG} kopererts -STR_QUANTITY_MAIZE :{WEIGHT_LONG} mais +STR_QUANTITY_MAIZE :{WEIGHT_LONG} maïs STR_QUANTITY_FRUIT :{WEIGHT_LONG} fruit STR_QUANTITY_DIAMONDS :{COMMA}{NBSP}zak{P "" ken} diamanten STR_QUANTITY_FOOD :{WEIGHT_LONG} voedsel @@ -239,7 +239,7 @@ STR_BUTTON_RENAME :{BLACK}Hernoem STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Sluit venster STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Vensternaam - sleep om venster te verplaatsen STR_TOOLTIP_SHADE :{BLACK}Klap venster in - toon alleen de titelbalk -STR_TOOLTIP_DEBUG :{BLACK}Toon NewGRF debug informatie +STR_TOOLTIP_DEBUG :{BLACK}Toon NewGRF-debuginformatie STR_TOOLTIP_DEFSIZE :{BLACK}wijzig venster naar standaardgrootte. Ctrl+Klik om de huidige grootte als standaard op te slaan STR_TOOLTIP_STICKY :{BLACK}Markeer dit venster als niet-sluitbaar door de 'Sluit alle vensters'-knop. Ctrl+Klik om status als default op te slaan STR_TOOLTIP_RESIZE :{BLACK}Klik en sleep om de grootte van dit venster te veranderen @@ -324,10 +324,10 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Toon lij STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Toon financiële informatie over het bedrijf STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Toon algemene informatie over het bedrijf STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Toon verhaallijn -STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Geven doellijst +STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Geef doellijst weer STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Toon grafieken STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Toon bedrijfscompetitietabel -STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Betaal de bouw van nieuwe industrie of toon lijst van alle industrieën +STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Financier de bouw van nieuwe industrie of toon lijst van alle industrieën STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Toon lijst met treinen van het bedrijf. Ctrl+klik schakelt tussen lijst van groepen/voertuigen STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Toon lijst met wegvoertuigen van het bedrijf. Ctrl+klik schakelt tussen lijst van groepen/voertuigen STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Toon lijst met schepen van het bedrijf. Ctrl+klik schakelt tussen lijst van groepen/voertuigen @@ -340,8 +340,8 @@ STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Bouw hav STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Bouw vliegvelden STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Open de landschapsbalk om land te verhogen/verlagen, bomen te planten, etc. STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Toon geluid/muziekscherm -STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Toon laatste (nieuws)bericht, toon berichtinstellingen -STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Landinformatie, console, script-debug, screenshots, over OpenTTD +STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Toon laatst (nieuws)bericht, toon berichtinstellingen +STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Landinformatie, console, scriptdebug, screenshots, over OpenTTD STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Verwissel knoppenbalk # Extra tooltips for the scenario editor toolbar @@ -354,7 +354,7 @@ STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Klik om STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Toon kaart, stedenlijst STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Landschapsontwikkeling STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Stadsontwikkeling -STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Industrie-ontwikkeling +STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Industrieontwikkeling STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Wegenbouw STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant bomen. Shift schakelt tussen bouwen/inschatting van de kosten STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Plaats bord @@ -365,7 +365,7 @@ STR_SCENEDIT_FILE_MENU_SAVE_SCENARIO :Scenario opslaa STR_SCENEDIT_FILE_MENU_LOAD_SCENARIO :Scenario openen STR_SCENEDIT_FILE_MENU_SAVE_HEIGHTMAP :Hoogtekaart opslaan STR_SCENEDIT_FILE_MENU_LOAD_HEIGHTMAP :Laad hoogtekaart -STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Sluit scenario editor +STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Sluit scenario-editor STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Afsluiten ############ range for SE file menu starts @@ -373,14 +373,14 @@ STR_SCENEDIT_FILE_MENU_QUIT :Afsluiten ############ range for settings menu starts STR_SETTINGS_MENU_GAME_OPTIONS :Spelopties STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Instellingen -STR_SETTINGS_MENU_SCRIPT_SETTINGS :AI/Game script instellingen -STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF instellingen +STR_SETTINGS_MENU_SCRIPT_SETTINGS :AI/Spelscriptinstellingen +STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF-instellingen STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Doorzichtigheidsopties STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Toon plaatsnamen STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Toon stationsnamen STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Toon controlepostnamen STR_SETTINGS_MENU_SIGNS_DISPLAYED :Toon borden -STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Toon tegenstander's borden en namen +STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Toon borden en namen van tegenstanders STR_SETTINGS_MENU_FULL_ANIMATION :Alle animaties STR_SETTINGS_MENU_FULL_DETAIL :Alle details STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Transparante gebouwen @@ -398,7 +398,7 @@ STR_FILE_MENU_EXIT :Afsluiten # map menu STR_MAP_MENU_MAP_OF_WORLD :Kaart STR_MAP_MENU_EXTRA_VIEW_PORT :Extra kijkvenster -STR_MAP_MENU_LINGRAPH_LEGEND :Vracht Stroom Legenda +STR_MAP_MENU_LINGRAPH_LEGEND :Vrachtstroomlegende STR_MAP_MENU_SIGN_LIST :Bordenlijst ############ range for town menu starts @@ -422,7 +422,7 @@ STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Vrachtprijzen ############ range for company league menu starts STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Bedrijfscompetitietabel STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Gedetailleerde prestatiescore -STR_GRAPH_MENU_HIGHSCORE :Score tabel +STR_GRAPH_MENU_HIGHSCORE :Scoretabel ############ range ends here ############ range for industry menu starts @@ -434,8 +434,8 @@ STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Betaal nieuwe i ############ range for railway construction menu starts STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Bouw spoorwegen STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Bouw geëlektrificeerde spoorwegen -STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Bouw monorail-spoorwegen -STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Bouw magneetzweeftrein-spoorwegen +STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Bouw monorailspoorwegen +STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Bouw magneetzweeftreinspoorwegen ############ range ends here ############ range for road construction menu starts @@ -462,7 +462,7 @@ STR_TOOLBAR_SOUND_MUSIC :Geluid/muziek ############ range ends here ############ range for message menu starts -STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Laatste (nieuws)bericht +STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Laatst (nieuws)bericht STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Berichtengeschiedenis ############ range ends here @@ -633,10 +633,10 @@ STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Het aant STR_PERFORMANCE_DETAIL_CARGO_TOOLTIP :{BLACK}Aantal soorten vracht die in het laatste kwartaal zijn afgeleverd STR_PERFORMANCE_DETAIL_MONEY_TOOLTIP :{BLACK}Hoeveelheid geld op de bank STR_PERFORMANCE_DETAIL_LOAN_TOOLTIP :{BLACK}De hoeveelheid geld die dit bedrijf leent -STR_PERFORMANCE_DETAIL_TOTAL_TOOLTIP :{BLACK}Totaal aantal punten uit de mogelijke punten +STR_PERFORMANCE_DETAIL_TOTAL_TOOLTIP :{BLACK}Totaal aantal punten van de mogelijke punten # Music window -STR_MUSIC_JAZZ_JUKEBOX_CAPTION :{WHITE}Jazz-jukebox +STR_MUSIC_JAZZ_JUKEBOX_CAPTION :{WHITE}Jazzjukebox STR_MUSIC_PLAYLIST_ALL :{TINY_FONT}{BLACK}Alle STR_MUSIC_PLAYLIST_OLD_STYLE :{TINY_FONT}{BLACK}Oude Stijl STR_MUSIC_PLAYLIST_NEW_STYLE :{TINY_FONT}{BLACK}Nieuwe Stijl @@ -665,7 +665,7 @@ STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Gebruik STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Selecteer 'alle nummers'-programma STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Selecteer 'oude stijl-muziek'-programma STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Selecteer 'nieuwe stijl-muziek'-programma -STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Kies 'Ezy Street-stijl-muziek'-programma +STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Kies 'Ezy Street stylemuziek'-programma STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Selecteer 'Aangepast1'-programma STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Selecteer 'Aangepast2'-programma STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Programmashuffle aan/uit @@ -707,14 +707,14 @@ STR_SMALLMAP_TYPE_VEHICLES :Voertuigen STR_SMALLMAP_TYPE_INDUSTRIES :Industrieën STR_SMALLMAP_TYPE_ROUTEMAP :Vrachtstroom STR_SMALLMAP_TYPE_ROUTES :Routes -STR_SMALLMAP_TYPE_VEGETATION :Begroeiïng +STR_SMALLMAP_TYPE_VEGETATION :Begroeiing STR_SMALLMAP_TYPE_OWNERS :Eigenaren STR_SMALLMAP_TOOLTIP_SHOW_LAND_CONTOURS_ON_MAP :{BLACK}Toon landcontouren op de kaart STR_SMALLMAP_TOOLTIP_SHOW_VEHICLES_ON_MAP :{BLACK}Toon voertuigen op de kaart STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRIES_ON_MAP :{BLACK}Toon industrieën op de kaart STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Toon vrachtstroom op de kaart STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Toon transportroutes op de kaart -STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Toon begroeiïng op de kaart +STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Toon begroeiing op de kaart STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Toon landeigenaren op de kaart STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Klik op een industriesoort om deze weer te geven. Ctrl+klik verbergt alle andere industriesoorten behalve de geselecteerde. Nogmaals Ctrl+klik geeft opnieuw alle industriesoorten weer. STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Klik op een bedrijf om de bedrijfseigendommen weer te geven. Ctrl+klik verbergt alle andere bedrijven behalve de geselecteerde. Nogmaals Ctrl+klik geeft opnieuw alle bedrijven weer. @@ -739,7 +739,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_FIELDS :{TINY_FONT}{BLACK}Velden +STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Akkers STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Bomen STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Rotsen STR_SMALLMAP_LEGENDA_WATER :{TINY_FONT}{BLACK}Water @@ -767,7 +767,7 @@ STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Toon gee STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Toon alle vrachtsoorten op de kaart # Status bar messages -STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Toon laatste (nieuws)bericht +STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Toon laatst (nieuws)bericht STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * GEPAUZEERD * * STR_STATUSBAR_AUTOSAVE :{RED}AUTOMATISCH OPSLAAN @@ -846,7 +846,7 @@ STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}{VEHICLE STR_NEWS_VEHICLE_HAS_VOID_ORDER :{WHITE}{VEHICLE} heeft een lege order STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}{VEHICLE} heeft dubbele orders STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}{VEHICLE} heeft een ongeldig station in de orders -STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}{VEHICLE} heeft in de opdrachten een luchthaven waarvan de start-en landingsbaan is te kort +STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}{VEHICLE} heeft in de opdrachten een luchthaven waarvan de start-en landingsbaan te kort is STR_NEWS_VEHICLE_IS_GETTING_OLD :{WHITE}{VEHICLE} is oud aan het worden STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE} is erg oud aan het worden @@ -876,9 +876,9 @@ STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLAC STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subsidie uitgereikt aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt volgend jaar driedubbel betaald! STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subsidie uitgereikt aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt volgend jaar vierdubbel betaald! -STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Verkeerschaos in {TOWN}!{}{}Wegreparatie betaald door {STRING} zorgt voor 6 maanden van irritatie bij weggebruikers! -STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transport monopoly! -STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Lokale overheid van {TOWN} tekend contract met {STRING} voor een jaar exclusieve transportrechten! +STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Verkeerschaos in {TOWN}!{}{}Wegherstelling betaald door {STRING} zorgt voor 6 maanden van miserie bij weggebruikers! +STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transportmonopolie! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Lokale overheid van {TOWN} tekent contract met {STRING} voor een jaar exclusieve transportrechten! # Extra view window STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Kijkvenster {COMMA} @@ -1515,7 +1515,7 @@ STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Toon een berich STR_CONFIG_SETTING_NEWS_SUBSIDIES :Subsidies: {STRING} STR_CONFIG_SETTING_NEWS_SUBSIDIES_HELPTEXT :Toon een krant over subsidie gerelateerde gebeurtenissen STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION :Algemene informatie: {STRING} -STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION_HELPTEXT :Weergave krant over algemene gebeurtenissen, zoals de aankoop van exclusieve rechten of financiering van weg-reconstructie +STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION_HELPTEXT :Geef krant weer over algemene gebeurtenissen, zoals de aankoop van exclusieve rechten of financiering van wegherstelling STR_CONFIG_SETTING_NEWS_MESSAGES_OFF :Uit STR_CONFIG_SETTING_NEWS_MESSAGES_SUMMARY :Samengevat @@ -1523,7 +1523,7 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Volledig STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Kleurenfoto's komen in: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Jaar dat de krant aankondigt in kleur te gaan afdrukken. Voor dit jaar wordt zwart-wit gebruikt -STR_CONFIG_SETTING_STARTING_YEAR :Beginjaar: {STRING} +STR_CONFIG_SETTING_STARTING_YEAR :Startjaar: {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY :Vloeiende economie inschakelen (meer, kleinere veranderingen): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Wanneer ingeschakeld, industrie produktie verandert vaker en in kleinere stappen. Deze instelling heeft meestal geen effect, als de industrie soorten worden geleverd door een NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Sta het kopen van aandelen van andere bedrijven toe: {STRING} @@ -1741,7 +1741,7 @@ STR_INTRO_SCENARIO_EDITOR :{BLACK}Scenario STR_INTRO_MULTIPLAYER :{BLACK}Multiplayer STR_INTRO_GAME_OPTIONS :{BLACK}Spelopties -STR_INTRO_HIGHSCORE :{BLACK}Score tabel +STR_INTRO_HIGHSCORE :{BLACK}Scoretabel STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Instellingen STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF-instellingen STR_INTRO_ONLINE_CONTENT :{BLACK}Online inhoud zoeken @@ -1753,7 +1753,7 @@ STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Laad een STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Start een nieuw spel, gebruik een hoogtekaart als landschap STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Start een nieuw spel, gebaseerd op een scenario STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Maak een eigen spelwereld/scenario -STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Start een multiplayer spel +STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Start een multiplayerspel STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Kies gematigd klimaat STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Kies subarctisch klimaat @@ -1761,7 +1761,7 @@ STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Kies sub STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Kies speelgoedlandschap STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Toon spelopties -STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Toon score tabel +STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Toon scoretabel STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Scherminstellingen STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Toon NewGRF-instellingen STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Zoeken naar nieuwe en aangepaste inhoud om te downloaden @@ -1821,7 +1821,7 @@ STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Toon kle STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Toon kleurenschema's voor wegvoertuigen STR_LIVERY_SHIP_TOOLTIP :{BLACK}Toon kleurenschema's voor schepen STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Toon kleurenschema's voor vliegtuigen -STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Kies de hoofdkleur voor het geselecteerde schema. Ctrl+klik deze kleu bij alle schema's gebruiken +STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Kies de hoofdkleur voor het geselecteerde schema. Ctrl+klik zal deze kleur instellen voor elk schema STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Kies de tweede kleur voor het geselecteerde schema. Ctrl+klik om deze kleur in alle schema's te gebruiken STR_LIVERY_PANEL_TOOLTIP :{BLACK}Kies een kleurenschema om te wijzigen, of meerdere schema's met Ctrl+klik. Vink de keuzevakjes aan/uit om het gebruik van het schema aan/uit te zetten @@ -1829,8 +1829,8 @@ STR_LIVERY_DEFAULT :Standaard kleur STR_LIVERY_STEAM :Stoomlocomotief STR_LIVERY_DIESEL :Diesellocomotief STR_LIVERY_ELECTRIC :Elektrische locomotief -STR_LIVERY_MONORAIL :Monorail-locomotief -STR_LIVERY_MAGLEV :Zweeftrein-locomotief +STR_LIVERY_MONORAIL :Monoraillocomotief +STR_LIVERY_MAGLEV :Zweeftreinlocomotief STR_LIVERY_DMU :Dieseltreinstel STR_LIVERY_EMU :Elektrisch treinstel STR_LIVERY_PASSENGER_WAGON_STEAM :Passagierswagon (Stoom) @@ -1910,7 +1910,7 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Verander # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Openbaar -STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Kies tussen een openbaar (internet) en een niet openbaar (Local Area Network, LAN) spel +STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Kies tussen een openbaar (internet) en een niet-openbaar (Local Area Network, LAN) spel STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nee STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Ja STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spelersnaam: @@ -1964,10 +1964,10 @@ STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Vul je n STR_NETWORK_SERVER_LIST_ENTER_IP :{BLACK}Voer het IP-adres van de server in # Start new multiplayer server -STR_NETWORK_START_SERVER_CAPTION :{WHITE}Start nieuw multiplayer spel +STR_NETWORK_START_SERVER_CAPTION :{WHITE}Start nieuw multiplayerspel STR_NETWORK_START_SERVER_NEW_GAME_NAME :{BLACK}Spelnaam: -STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}De spelnaam wordt weergegeven aan andere spelers in het multiplayer-spelselectie menu +STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}De spelnaam wordt weergegeven aan andere spelers in het multiplayerspelselectiemenu STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Kies wachtwoord STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Bescherm je spel met een wachtwoord als je niet wilt dat deze algemeen toegankelijk is @@ -1985,7 +1985,7 @@ STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Beperk d STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Gesproken taal: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Andere spelers zullen weten welke taal er wordt gesproken op de server -STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Geef de naam van het netwerk spel +STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Geef de naam van het netwerkspel # Network game languages ############ Leave those lines in this order!! @@ -2021,7 +2021,7 @@ STR_NETWORK_LANG_UKRAINIAN :Oekraïens STR_NETWORK_LANG_AFRIKAANS :Afrikaans STR_NETWORK_LANG_CROATIAN :Kroatisch STR_NETWORK_LANG_CATALAN :Catalaans -STR_NETWORK_LANG_ESTONIAN :Ests +STR_NETWORK_LANG_ESTONIAN :Estisch STR_NETWORK_LANG_GALICIAN :Galiciaans STR_NETWORK_LANG_GREEK :Grieks STR_NETWORK_LANG_LATVIAN :Lets @@ -2035,7 +2035,7 @@ STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Een lijs STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}BEDRIJFSINFORMATIE STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Bedrijfsnaam: {WHITE}{STRING} -STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Begonnen in: {WHITE}{NUM} +STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}Gestart in: {WHITE}{NUM} STR_NETWORK_GAME_LOBBY_VALUE :{SILVER}Bedrijfswaarde: {WHITE}{CURRENCY_LONG} STR_NETWORK_GAME_LOBBY_CURRENT_BALANCE :{SILVER}Huidige kas: {WHITE}{CURRENCY_LONG} STR_NETWORK_GAME_LOBBY_LAST_YEARS_INCOME :{SILVER}Inkomen vorig jaar: {WHITE}{CURRENCY_LONG} @@ -2059,8 +2059,8 @@ STR_NETWORK_CONNECTING_CAPTION :{WHITE}Verbinde STR_NETWORK_CONNECTING_1 :{BLACK}(1/6) Verbinden... STR_NETWORK_CONNECTING_2 :{BLACK}(2/6) Inloggen... STR_NETWORK_CONNECTING_3 :{BLACK}(3/6) Wachten... -STR_NETWORK_CONNECTING_4 :{BLACK}(4/6) Downloaden kaart... -STR_NETWORK_CONNECTING_5 :{BLACK}(5/6) Verwerken gegevens... +STR_NETWORK_CONNECTING_4 :{BLACK}(4/6) Kaart downloaden... +STR_NETWORK_CONNECTING_5 :{BLACK}(5/6) Gegevens verwerken... STR_NETWORK_CONNECTING_6 :{BLACK}(6/6) Registreren... STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Spelinformatie ophalen... @@ -2120,20 +2120,20 @@ STR_NETWORK_CHAT_TO_COMPANY :[Team] Aan {STR STR_NETWORK_CHAT_CLIENT :[Privé] {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_TO_CLIENT :[Privé] Aan {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_ALL :[Iedereen] {STRING}: {WHITE}{STRING} -STR_NETWORK_CHAT_OSKTITLE :{BLACK}Geef de tekst voor de netwerk-chat +STR_NETWORK_CHAT_OSKTITLE :{BLACK}Geef tekst voor netwerkchat # Network messages STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Geen netwerkapparaten gevonden of gecompileerd zonder ENABLE_NETWORK STR_NETWORK_ERROR_NOSERVER :{WHITE}Kon geen enkel netwerkspel vinden STR_NETWORK_ERROR_NOCONNECTION :{WHITE}De server beantwoordde het verzoek niet -STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Kan geen verbinding maken, je hebt niet dezelfde NewGRF bestanden als de server +STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Kan geen verbinding maken, je hebt niet dezelfde NewGRF-bestanden als de server STR_NETWORK_ERROR_DESYNC :{WHITE}Synchronisatie van netwerkspel mislukt STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}Verbinding met netwerkspel kwijt STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}Kon opgeslagen spel niet laden STR_NETWORK_ERROR_SERVER_START :{WHITE}Kan server niet starten STR_NETWORK_ERROR_CLIENT_START :{WHITE}Kan geen verbinding maken STR_NETWORK_ERROR_TIMEOUT :{WHITE}Verbinding #{NUM} duurde te lang -STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Er is een protocolfout gemaakt en onze verbinding is gesloten +STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Er is een protocolfout gedetecteerd en de verbinding werd gesloten STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}De revisie van deze client komt niet overeen met de revisie van de server STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Ongeldig wachtwoord STR_NETWORK_ERROR_SERVER_FULL :{WHITE}De server is vol @@ -2142,9 +2142,9 @@ STR_NETWORK_ERROR_KICKED :{WHITE}Je bent STR_NETWORK_ERROR_CHEATER :{WHITE}Valsspelen is niet toegestaan op deze server STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Je stuurde te veel commando's naar de server STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Het invoeren van het wachtwoord duurde te lang -STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Het duurde jouw computer te lang totdat uw computer zich aanmeldde -STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}Het duurde jouw computer te lang om de kaart te downloaden -STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Het duurde jouw computer te lang om met de server te verbinden +STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Uw computer is te traag om de server bij te houden +STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}Uw computer deed er te lang over om de kaart te downloaden +STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Uw computer deed er te lang over om met de server te verbinden ############ Leave those lines in this order!! STR_NETWORK_ERROR_CLIENT_GENERAL :algemene fout @@ -2164,7 +2164,7 @@ STR_NETWORK_ERROR_CLIENT_CHEATER :probeerde vals STR_NETWORK_ERROR_CLIENT_SERVER_FULL :server is vol STR_NETWORK_ERROR_CLIENT_TOO_MANY_COMMANDS :stuurde te veel commando's STR_NETWORK_ERROR_CLIENT_TIMEOUT_PASSWORD :wachtwoord niet op tijd ontvangen -STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :algemene timeout +STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :algemene time-out STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :downloaden van de kaart duurde te lang STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :verwerken van de kaart duurde te lang ############ End of leave-in-this-order @@ -2179,12 +2179,12 @@ STR_NETWORK_SERVER_MESSAGE_GAME_PAUSED :Spel gepauzeerd STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Spel nog steeds gepauzeerd ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Spel nog steeds gepauzeerd ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Spel nog steeds gepauzeerd ({STRING}, {STRING}, {STRING}) -STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Spel is nog steeds gepauzeerd ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Spel nog steeds gepauzeerd ({STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Spel vervolgd ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :aantal spelers STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :spelers maken verbinding STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :handmatig -STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :spel script +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :spelscript ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :vertrekt STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} heeft zich bij het spel gevoegd @@ -2196,8 +2196,8 @@ STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} he STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} heeft zijn/haar naam gewijzigd naar {STRING} STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} gaf je bedrijf {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Je gaf {2:CURRENCY_LONG} aan {1:STRING} -STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}De server heeft de sessie gestopt -STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}De server wordt opnieuw gestart...{}Wacht aub... +STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}De server heeft de sessie gesloten +STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}De server wordt opnieuw gestart...{}Wacht alstublieft... # Content downloading window STR_CONTENT_TITLE :{WHITE}Download extra content @@ -2268,7 +2268,7 @@ STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE :{WHITE}... best STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}Kon gedownload bestand niet uitpakken STR_MISSING_GRAPHICS_SET_CAPTION :{WHITE}Ontbrekende graphics -STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD heeft graphics nodig om te kunnen werken, maar er konden er geen gevonden worden. Wilt u toestaan dat OpenTTD graphics downloadt en installeert? +STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD heeft graphics nodig om te kunnen werken, maar er konden er geen gevonden worden. Staat u toe dat OpenTTD deze graphics downloadt en installeert? STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Ja, download de graphics STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Nee, OpenTTD afsluiten @@ -2316,8 +2316,8 @@ STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Bouw ee # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Bouw spoorwegen STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Bouw geëlektrificeerde spoorwegen -STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Bouw monorail-spoorwegen -STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Bouw magneetzweeftrein-spoorwegen +STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Bouw monorailspoorwegen +STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Bouw magneetzweeftreinspoorwegen STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Plaats spoor. Ctrl schakelt tussen bouwen/verwijderen van het spoor. Shift schakelt tussen bouwen/inschatting van de kosten STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Bouw spoor met de Autorail-methode. Ctrl schakelt tussen bouwen/verwijderen van het spoor. Shift schakelt tussen bouwen/inschatting van de kosten @@ -2331,7 +2331,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Kies tus STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Verander spoortype. Shift schakelt tussen bouwen/inschatting van de kosten STR_RAIL_NAME_RAILROAD :Spoorweg -STR_RAIL_NAME_ELRAIL :Spoorweg met bovenleiding +STR_RAIL_NAME_ELRAIL :Geëlektrificeerde spoorweg STR_RAIL_NAME_MONORAIL :Monorail STR_RAIL_NAME_MAGLEV :Zweeftrein @@ -2368,9 +2368,9 @@ STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Uitgangs STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Combinatiesein (armsein){}Het combinatiesein gedraagt zich als zowel ingangs- als uitgangssein. Zo kun je grote netwerken van beginseinen maken STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Routesein (armsein){}Een routesein laat meer dan één trein tegelijk in een seinblok toe als de trein een route kan reserveren naar een veilige stopplaats. Routeseinen kunnen van achteren worden gepasseerd STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Eenrichtingsrouteseinen (armsein){}Een routesein laat meer dan één trein tegelijk in een seinblok toe als de trein een route kan reserveren naar een veilige stopplaats. Eenrichtingsrouteseinen kunnen niet van achteren worden gepasseerd -STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Standaard sein (elektrisch){}Seinen zijn nodig om te voorkomen dat treinen botsen bij netwerken met meer dan één trein +STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Standaardsein (elektrisch){}Seinen zijn nodig om te voorkomen dat treinen botsen bij netwerken met meer dan één trein STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Ingangssein (elektrisch){}Groen als er meer dan één groen uitgangssein is in de volgende sectie. Anders is deze rood -STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Uitgangssein (elektrisch){}Gedraagt zich hetzelfde als een standaard sein, maar is nodig om ingangs- & combinatie-seinen aan te sturen +STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Uitgangssein (elektrisch){}Gedraagt zich hetzelfde als een standaardsein, maar is nodig om ingangs- & combinatie-seinen aan te sturen STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Combinatiesein (elektrisch){}Het combinatiesein gedraagt zich als zowel ingangs- als uitgangssein. Zo kun je grote netwerken van beginseinen maken STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Routeseinen (elektrisch){}Een routesein laat meer dan één trein tegelijk op een seinblok toe als de trein een route kan reserveren naar een veilige stopplaats. Routeseinen kunnen van achteren worden gepasseerd STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Eenrichtingsrouteseinen (elektrisch){}Een routesein laat meer dan één trein tegelijk op een seinblok toe als de trein een route kan reserveren naar een veilige stopplaats. Eenrichtingsrouteseinen kunnen niet van achteren worden gepasseerd @@ -2381,7 +2381,7 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Vergroot # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Kies type spoorbrug -STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Kies type brug +STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Kies type wegbrug STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Brugkeuze - klik op de gewenste brug om die te bouwen STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY} @@ -2399,22 +2399,22 @@ STR_BRIDGE_TUBULAR_SILICON :Buis, Silicium STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Bouw wegen STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Bouw tramsporen STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Bouw weg. Ctrl schakelt tussen bouwen/verwijderen van de weg. Shift schakelt tussen bouwen/inschatting van de kosten -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Bouw tramrails. Ctrl schakelt tussen bouwen/verwijderen van tramrails. Shift schakelt tussen bouwen/inschatting van de kosten +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Bouw tramsporen. Ctrl schakelt tussen bouwen/verwijderen van tramsporen. Shift schakelt tussen bouwen/inschatting van de kosten STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Bouw weg met de Autoroad-methode. Ctrl schakelt tussen bouwen/verwijderen van de weg. Shift schakelt tussen bouwen/inschatting van de kosten -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Bouw tramrails met de Autotram-methode. Ctrl schakelt tussen bouwen/verwijderen van tramrails. Shift schakelt tussen bouwen/inschatting van de kosten +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Bouw tramsporen met de Autotram-methode. Ctrl schakelt tussen bouwen/verwijderen van tramrails. Shift schakelt tussen bouwen/inschatting van de kosten STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Bouw garage (voor het kopen en onderhouden van wegvoertuigen). Shift schakelt tussen bouwen/inschatting van de kosten STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Bouw tramdepot (voor het kopen en onderhouden van trams). Shift schakelt tussen bouwen/inschatting van de kosten STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Bouw bushalte. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Bouw passagiertramhalte. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Bouw passagierstramhalte. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Bouw vrachtwagenlaadhal. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Bouw vrachttramhalte. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Activeer/Deactiveer eenrichtingsverkeer -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Bouw viaduct. Shift schakelt tussen bouwen/inschatting van de kosten -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Bouw brug voor tramrails. Shift schakelt tussen bouwen/inschatting van de kosten +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Bouw wegbrug. Shift schakelt tussen bouwen/inschatting van de kosten +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Bouw brug voor tramsporen. Shift schakelt tussen bouwen/inschatting van de kosten STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Bouw wegtunnel. Shift schakelt tussen bouwen/inschatting van de kosten STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Bouw tramtunnel. Shift schakelt tussen bouwen/inschatting van de kosten STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Kies tussen bouwen en verwijderen bij wegenbouw -STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Kies tussen bouwen en verwijderen bij tramrailaanleg +STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Kies tussen bouwen en verwijderen bij tramspooraanleg # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Richting van garage @@ -2458,7 +2458,7 @@ STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Bouw vli # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Keuze van vliegveld STR_STATION_BUILD_AIRPORT_TOOLTIP :{BLACK}Kies grootte en type van vliegveld -STR_STATION_BUILD_AIRPORT_CLASS_LABEL :{BLACK}Vliegveld klasse +STR_STATION_BUILD_AIRPORT_CLASS_LABEL :{BLACK}Vliegveldklasse STR_STATION_BUILD_AIRPORT_LAYOUT_NAME :{BLACK}Layout {NUM} STR_AIRPORT_SMALL :Klein @@ -2493,11 +2493,11 @@ STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Bekijk h STR_OBJECT_BUILD_SIZE :{BLACK}Grootte: {GOLD}{NUM} x {NUM} tegels STR_OBJECT_CLASS_LTHS :Vuurtorens -STR_OBJECT_CLASS_TRNS :Zender +STR_OBJECT_CLASS_TRNS :Zendmasten # Tree planting window (last two for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Bomen -STR_PLANT_TREE_TOOLTIP :{BLACK}Kies een soort boom om te planten. Als de tegel al bomen bevat zullen er meer bomen van verschillende types bij komen, onafhankelijk van het geselecteerde type. +STR_PLANT_TREE_TOOLTIP :{BLACK}Kies een soort boom om te planten. Als de tegel al bomen bevat, zullen er meer bomen van verschillende types bijkomen, onafhankelijk van het geselecteerde type. STR_TREES_RANDOM_TYPE :{BLACK}Willekeurige soorten bomen STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plant bomen van willekeurige soort. Shift+klik wisselt tussen bouwen/toont verwachte kosten STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Willekeurige bomen @@ -2766,7 +2766,7 @@ STR_SAVELOAD_SAVE_BUTTON :{BLACK}Opslaan STR_SAVELOAD_SAVE_TOOLTIP :{BLACK}Sla het huidige spel op onder de gekozen naam STR_SAVELOAD_LOAD_BUTTON :{BLACK}Laad STR_SAVELOAD_LOAD_TOOLTIP :{BLACK}Laad het geselecteerde spel -STR_SAVELOAD_LOAD_HEIGHTMAP_TOOLTIP :{BLACK}Laad de geselecteerd hoogtekaart +STR_SAVELOAD_LOAD_HEIGHTMAP_TOOLTIP :{BLACK}Laad de geselecteerde hoogtekaart STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Spel details STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Geen informatie beschikbaar STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} @@ -2786,8 +2786,8 @@ STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Maximum STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Verhoog de maximum hoogte van bergen op de kaart met één STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Verklein de maximum hoogte van bergen op de kaart met één STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Hoogte van sneeuwgrens: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Verschuif de sneeuwgrens één omhoog -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Verschuif de sneeuwgrens één omlaag +STR_MAPGEN_SNOW_LINE_UP :{BLACK}Verhoog de sneeuwgrens met één +STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Verlaag de sneeuwgrens met één STR_MAPGEN_LAND_GENERATOR :{BLACK}Landgenerator: STR_MAPGEN_TREE_PLACER :{BLACK}Bosalgoritme: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Terreintype: @@ -2816,7 +2816,7 @@ STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Wijzig maximum kaarthoogte STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Verander hoogte van sneeuwgrens -STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Verander beginjaar +STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Verander startjaar # SE Map generation STR_SE_MAPGEN_CAPTION :{WHITE}Scenariotype @@ -2824,8 +2824,8 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Vlak lan STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Genereer een vlakke kaart STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Willekeurig land STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Hoogte van vlak land: -STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Maak de hoogte van vlak land één lager -STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Maak de hoogte van vlak land één hoger +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Verlaag de hoogte van vlak land met één +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Verhoog de hoogte van vlak land met één STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Verander hoogte van vlak land @@ -2848,11 +2848,11 @@ STR_GENERATION_PREPARING_GAME :{BLACK}Voorbere # NewGRF settings STR_NEWGRF_SETTINGS_CAPTION :{WHITE}NewGRF-instellingen -STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}Gedetaileerde NewGRF informatie -STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}Actieve NewGRF bestanden -STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}Inactieve NewGRF bestanden +STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}Gedetaileerde NewGRF-informatie +STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}Actieve NewGRF-bestanden +STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}Inactieve NewGRF-bestanden STR_NEWGRF_SETTINGS_SELECT_PRESET :{ORANGE}Kies voorkeur: -STR_NEWGRF_FILTER_TITLE :{ORANGE}Filter tekst: +STR_NEWGRF_FILTER_TITLE :{ORANGE}Filtertekst: STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}Laad de geselecteerde voorkeursinstelling STR_NEWGRF_SETTINGS_PRESET_SAVE :{BLACK}Bewaar voorkeursinstelling STR_NEWGRF_SETTINGS_PRESET_SAVE_TOOLTIP :{BLACK}Bewaar de huidige lijst als voorkeursinstelling @@ -2899,17 +2899,17 @@ STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Niet compa STR_SAVE_PRESET_CAPTION :{WHITE}Preset opslaan STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Lijst met beschikbare presets, Kies er één om deze te kopiëren naar de opslagnaam hieronder STR_SAVE_PRESET_TITLE :{BLACK}Voer een naam in voor de preset -STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Nu gekozen naam voor de preset opslag +STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Huidig gekozen naam voor de preset om op te slaan STR_SAVE_PRESET_CANCEL :{BLACK}Annuleren STR_SAVE_PRESET_CANCEL_TOOLTIP :{BLACK}Preset niet wijzigen STR_SAVE_PRESET_SAVE :{BLACK}Opslaan -STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Sla de huidige preset op naar de nu gekozen naam +STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Sla de huidige preset op naar de huidig gekozen naam # NewGRF parameters window -STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}NewGRF parameters wijzigen +STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}NewGRF-parameters wijzigen STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Sluiten STR_NEWGRF_PARAMETERS_RESET :{BLACK}Reset -STR_NEWGRF_PARAMETERS_RESET_TOOLTIP :{BLACK}Zet alle parameters naar de standaard waarde +STR_NEWGRF_PARAMETERS_RESET_TOOLTIP :{BLACK}Zet alle parameters naar de standaardwaarde STR_NEWGRF_PARAMETERS_DEFAULT_NAME :Parameter {NUM} STR_NEWGRF_PARAMETERS_SETTING :{STRING}: {ORANGE}{STRING} STR_NEWGRF_PARAMETERS_NUM_PARAM :{LTBLUE}Aantal parameters: {ORANGE}{NUM} @@ -2921,7 +2921,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Inspecte STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} bij {HEX} STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Object -STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Spoor type +STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Spoortype STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x parameter (hexadecimaal) @@ -2956,19 +2956,19 @@ STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} is o STR_NEWGRF_ERROR_INVALID_PARAMETER :Ongeldige parameter voor {1:STRING}: parameter {STRING} ({NUM}) STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} moet geladen zijn voor {STRING} STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} moet geladen zijn na {STRING} -STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} heeft OpenTTD versie {STRING} of beter nodig +STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} heeft OpenTTD-versie {STRING} of beter nodig STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :het GRF-bestand die het probeert te vertalen STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Er zijn te veel NewGRFs geladen STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Laden van {1:STRING} als statische NewGRF met {STRING} kan desynchronisatiefouten (desyncs) veroorzaken STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Onverwachte sprite (sprite {3:NUM}) -STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Onbekende Actie 0 eigenschap {4:HEX} (sprite {3:NUM}) +STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Onbekende Action 0-eigenschap {4:HEX} (sprite {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :Poging om ongeldig ID te gebruiken (sprite {3:NUM}) STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} bevat een ongeldige afbeelding. Alle ongeldige afbeeldingen worden getoond als een rood vraagteken (?) -STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Bevat meerdere acties 8 (sprite {3:NUM}) +STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Bevat meerdere Action 8-invoer (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Voorbij het einde van pseudo-sprite gelezen (sprite {3:NUM}) -STR_NEWGRF_ERROR_GRM_FAILED :Gevraagde GRF middelen niet beschikbaar (sprite {3:NUM}) +STR_NEWGRF_ERROR_GRM_FAILED :Gevraagde GRF-middelen niet beschikbaar (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} is uitgeschakeld door {STRING} -STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ongeldig/onbekend sprite lay-out-formaat (sprite {3:NUM}) +STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ongeldig/onbekend spritelay-outformaat (sprite {3:NUM}) # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Waarschuwing! @@ -2976,7 +2976,7 @@ STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Je staa STR_NEWGRF_DUPLICATE_GRFID :{WHITE}Kan bestand niet toevoegen: identieke GRF-ID STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Bijbehorend bestand niet gevonden (compatibele GRF geladen) -STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}Kan bestand niet toevoegen: NewGRF bestandslimiet bereikt +STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}Kan bestand niet toevoegen: NewGRF-bestandslimiet bereikt STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}Compatibele GRF(s) geladen voor ontbrekende bestanden STR_NEWGRF_DISABLED_WARNING :{WHITE}Missend(e) GRF-bestand(en) zijn uitgeschakeld @@ -2992,13 +2992,13 @@ STR_NEWGRF_LIST_MISSING :{RED}Ontbrekend # NewGRF 'it's broken' warnings STR_NEWGRF_BROKEN :{WHITE}Gedrag van NewGRF '{0:STRING}' zal waarschijnlijk desynchronisatiefouten (desyncs) en/of crashes veroorzaken STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Wagon '{1:ENGINE}' gewijzigde status van aandrijfeenheid wanneer niet in een depot -STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Het verandert de lengte van voertuig '{1:ENGINE}' terwijl het niet in een depot is +STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Het veranderde de lengte van voertuig '{1:ENGINE}' wanneer het niet in een depot is STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Het wijzigde voertuigcapaciteit voor '{1:ENGINE}' wanneer niet in een depot of ombouwen STR_BROKEN_VEHICLE_LENGTH :{WHITE}Trein '{VEHICLE}' behorend bij '{COMPANY}' heeft een ongeldige lengte. Het is waarschijnlijk veroorzaakt door problemen met NewGRF's. Het spel kan desynchroniseren of vastlopen STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' geeft onjuiste informatie -STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Vracht-/ombouwinformatie voor '{1:ENGINE}' wijkt af van aanschaflijst na het bouwen. Dit kan resulteren in problemen bij ombouwen door automatisch vernieuwen/vervangen -STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' heeft een eindeloze loop veroorzaakt in de productie-callback +STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Vracht- of ombouwinformatie voor '{1:ENGINE}' wijkt af van aanschaflijst na het bouwen. Dit kan resulteren in problemen bij ombouwen door automatisch vernieuwen/vervangen +STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' heeft een eindeloze loop veroorzaakt in de productiecallback STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback {1:HEX} gaf onbekend/ongeldig resultaat {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs @@ -3014,13 +3014,13 @@ STR_INVALID_VEHICLE : -STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Spel was opgeslagen in een versie zonder tram-ondersteuning. Alle trams zijn verwijderd +STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Spel was opgeslagen in een versie zonder tramondersteuning. Alle trams zijn verwijderd # Map generation messages STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Kaartmaken afgebroken...{}... geen geschikte dorpslocaties @@ -4164,13 +4164,13 @@ STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}Schaalwa STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Het aanpassen van de grootte van een bronkaart is niet aan te bevelen. Toch doorgaan? # Soundset messages -STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Alleen backup geluid is gevonden. Als je geluid wilt, installeer dan een geluiddsset via het downloadsysteem +STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Alleen back-upgeluid is gevonden. Als u geluid wilt, installeer dan een geluiddsset via het downloadsysteem # Screenshot related messages STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Grote schermafdruk STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}De schermafdruk heeft een resolutie van {COMMA} x {COMMA} pixels. De schermafdruk maken kan even duren. Verder gaan? -STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Schermprint succesvol opgeslagen als '{STRING}' +STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Schermafbeelding succesvol opgeslagen als '{STRING}' STR_ERROR_SCREENSHOT_FAILED :{WHITE}Schermprint mislukt! # Error message titles @@ -4367,7 +4367,7 @@ STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Kan sein STR_ERROR_THERE_IS_NO_RAILROAD_TRACK :{WHITE}...er is hier geen spoorlijn STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}...er zijn geen seinen -STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Kan railtype hier niet veranderen... +STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Kan spoortype hier niet veranderen... # Road construction errors STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Moet weg eerst weghalen @@ -4556,7 +4556,7 @@ STR_TOWN_BUILDING_NAME_HOTEL_1 :Hotel STR_TOWN_BUILDING_NAME_STATUE_1 :Standbeeld STR_TOWN_BUILDING_NAME_FOUNTAIN_1 :Fontein STR_TOWN_BUILDING_NAME_PARK_1 :Park -STR_TOWN_BUILDING_NAME_OFFICE_BLOCK_2 :Kantorenblok +STR_TOWN_BUILDING_NAME_OFFICE_BLOCK_2 :Kantoorgebouw STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1 :Winkels en kantoren STR_TOWN_BUILDING_NAME_MODERN_OFFICE_BUILDING_1 :Modern kantoorgebouw STR_TOWN_BUILDING_NAME_WAREHOUSE_1 :Warenhuis @@ -4577,7 +4577,7 @@ STR_TOWN_BUILDING_NAME_CINEMA_1 :Bioscoop STR_TOWN_BUILDING_NAME_SHOPPING_MALL_1 :Winkelcentrum STR_TOWN_BUILDING_NAME_IGLOO_1 :Iglo STR_TOWN_BUILDING_NAME_TEPEES_1 :Tepees -STR_TOWN_BUILDING_NAME_TEAPOT_HOUSE_1 :Theepothuis +STR_TOWN_BUILDING_NAME_TEAPOT_HOUSE_1 :Theehuis STR_TOWN_BUILDING_NAME_PIGGY_BANK_1 :Spaarvarken ##id 0x4800 @@ -4640,13 +4640,13 @@ STR_SV_STNAME_TRANSFER :{STRING} Transf STR_SV_STNAME_HALT :{STRING} Halte STR_SV_STNAME_VALLEY :{STRING} Vallei STR_SV_STNAME_HEIGHTS :{STRING} Hoogte -STR_SV_STNAME_WOODS :{STRING} Bossen +STR_SV_STNAME_WOODS :{STRING} Woud STR_SV_STNAME_LAKESIDE :{STRING} Meerkant STR_SV_STNAME_EXCHANGE :{STRING} Uitwisseling STR_SV_STNAME_AIRPORT :{STRING} Vliegveld STR_SV_STNAME_OILFIELD :{STRING} Olieveld STR_SV_STNAME_MINES :{STRING} Mijnen -STR_SV_STNAME_DOCKS :{STRING} Haven +STR_SV_STNAME_DOCKS :{STRING} Dokken STR_SV_STNAME_BUOY :{STRING} STR_SV_STNAME_WAYPOINT :{STRING} ##id 0x6020 From 50d930298dd99d20022c0f4a3bc080487f8afc17 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 11 Aug 2018 19:45:42 +0200 Subject: [PATCH 018/622] Update: Translations from eints croatian: 1 change by VoyagerOne --- src/lang/croatian.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index e00ed68af8..22a6dd09dd 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1023,6 +1023,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Južnoafrički STR_GAME_OPTIONS_CURRENCY_CUSTOM :Proizvoljno... STR_GAME_OPTIONS_CURRENCY_GEL :Gruzijski Lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Iranski Rial (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Nove ruske rublje (RUB) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Cestovna vozila From d839526365e66b0846366807e2e697358819751c Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 12 Aug 2018 08:45:38 +0100 Subject: [PATCH 019/622] Fix bf8d7df: Script/AI construction of rail track and waypoints (#6881) --- bin/ai/regression/tst_regression/main.nut | 58 ++++++++++++++++++++- bin/ai/regression/tst_regression/result.txt | 57 +++++++++++++++++++- src/script/api/script_rail.cpp | 22 ++++---- 3 files changed, 122 insertions(+), 15 deletions(-) diff --git a/bin/ai/regression/tst_regression/main.nut b/bin/ai/regression/tst_regression/main.nut index f575f53fff..d36db03da7 100644 --- a/bin/ai/regression/tst_regression/main.nut +++ b/bin/ai/regression/tst_regression/main.nut @@ -1018,7 +1018,36 @@ function Regression::Rail() print(" BuildRail(): " + AIRail.BuildRail(10002, 10003, 10006)); print(" HasTransportType(): " + AITile.HasTransportType(10005, AITile.TRANSPORT_RAIL)); print(" HasTransportType(): " + AITile.HasTransportType(10006, AITile.TRANSPORT_RAIL)); - print(" RemoveRail(): " + AIRail.RemoveRail(10005, 10004, 10001)); + print(" RemoveRail(): " + AIRail.RemoveRail(10006, 10005, 10002)); + print(" HasTransportType(): " + AITile.HasTransportType(10004, AITile.TRANSPORT_RAIL)); + print(" HasTransportType(): " + AITile.HasTransportType(10005, AITile.TRANSPORT_RAIL)); + print(" BuildRailTrack(): " + AIRail.BuildRailTrack(6200, AIRail.RAILTRACK_NE_SW)); + print(" RemoveRailTrack(): " + AIRail.RemoveRailTrack(6200, AIRail.RAILTRACK_NW_NE)); + print(" RemoveRailTrack(): " + AIRail.RemoveRailTrack(6200, AIRail.RAILTRACK_NE_SW)); + print(" BuildRail(): " + AIRail.BuildRail(6200, 6200 + 256, 6200 + (256 * 4))); + print(" HasTransportType(): " + AITile.HasTransportType(6200 + (256 * 3), AITile.TRANSPORT_RAIL)); + print(" HasTransportType(): " + AITile.HasTransportType(6200 + (256 * 4), AITile.TRANSPORT_RAIL)); + print(" RemoveRail(): " + AIRail.RemoveRail(6200 + (256 * 3), 6200 + (256 * 2), 6200 - 256)); + print(" HasTransportType(): " + AITile.HasTransportType(6200 + (256 * 3), AITile.TRANSPORT_RAIL)); + print(" HasTransportType(): " + AITile.HasTransportType(6200 + (256 * 4), AITile.TRANSPORT_RAIL)); + print(" BuildRailTrack(): " + AIRail.BuildRail(14706, 14705, 12907)); + print(" HasTransportType(): " + AITile.HasTransportType(13421, AITile.TRANSPORT_RAIL)); + print(" HasTransportType(): " + AITile.HasTransportType(14191, AITile.TRANSPORT_RAIL)); + print(" RemoveRail(): " + AIRail.RemoveRail(12907, 13163, 14706)); + print(" HasTransportType(): " + AITile.HasTransportType(13421, AITile.TRANSPORT_RAIL)); + print(" HasTransportType(): " + AITile.HasTransportType(14191, AITile.TRANSPORT_RAIL)); + print(" BuildRailTrack(): " + AIRail.BuildRailTrack(61533, AIRail.RAILTRACK_NW_SW)); + print(" BuildRailTrack(): " + AIRail.BuildRailTrack(61533, AIRail.RAILTRACK_NE_SE)); + print(" BuildRailTrack(): " + AIRail.BuildRailTrack(61533, AIRail.RAILTRACK_NW_NE)); + print(" BuildRailTrack(): " + AIRail.BuildRailTrack(61533, AIRail.RAILTRACK_SW_SE)); + print(" BuildRailTrack(): " + AIRail.BuildRailTrack(61533, AIRail.RAILTRACK_NE_SW)); + print(" DemolishTile(): " + AITile.DemolishTile(61533)); + print(" BuildRailTrack(): " + AIRail.BuildRailTrack(61533, AIRail.RAILTRACK_NE_SW)); + print(" BuildRailTrack(): " + AIRail.BuildRailTrack(61533, AIRail.RAILTRACK_NW_SE)); + print(" BuildRailTrack(): " + AIRail.BuildRailTrack(61533, AIRail.RAILTRACK_NW_NE)); + print(" BuildRailTrack(): " + AIRail.BuildRailTrack(61533, AIRail.RAILTRACK_SW_SE)); + print(" DemolishTile(): " + AITile.DemolishTile(61533)); + print(" BuildRailTrack(): " + AIRail.BuildRailTrack(61533, AIRail.RAILTRACK_NW_SE)); print(" Depot"); print(" IsRailTile(): " + AIRail.IsRailTile(33411)); @@ -1053,6 +1082,31 @@ function Regression::Rail() print(" IsRailStationTile(): " + AIRail.IsRailStationTile(7957)); print(" IsRailStationTile(): " + AIRail.IsRailStationTile(7958)); print(" IsRailStationTile(): " + AIRail.IsRailStationTile(7959)); + + print(" Waypoint"); + print(" BuildRailTrack(): " + AIRail.BuildRailTrack(12646, AIRail.RAILTRACK_NW_SE)); + print(" BuildRailTrack(): " + AIRail.BuildRailTrack(12648, AIRail.RAILTRACK_NE_SW)); + print(" BuildRailTrack(): " + AIRail.BuildRailTrack(12650, AIRail.RAILTRACK_NW_NE)); + print(" BuildRailWaypoint(): " + AIRail.BuildRailWaypoint(12644)); + print(" BuildRailWaypoint(): " + AIRail.BuildRailWaypoint(12646)); + print(" BuildRailWaypoint(): " + AIRail.BuildRailWaypoint(12648)); + print(" BuildRailWaypoint(): " + AIRail.BuildRailWaypoint(12650)); + print(" IsRailWaypointTile(): " + AIRail.IsRailWaypointTile(12644)); + print(" IsRailWaypointTile(): " + AIRail.IsRailWaypointTile(12646)); + print(" IsRailWaypointTile(): " + AIRail.IsRailWaypointTile(12648)); + print(" IsRailWaypointTile(): " + AIRail.IsRailWaypointTile(12650)); + print(" RemoveRailWaypointTileRectangle():" + AIRail.RemoveRailWaypointTileRectangle(12644, 12646, false)); + print(" RemoveRailWaypointTileRectangle():" + AIRail.RemoveRailWaypointTileRectangle(12648, 12650, true)); + print(" IsRailWaypointTile(): " + AIRail.IsRailWaypointTile(12644)); + print(" IsRailWaypointTile(): " + AIRail.IsRailWaypointTile(12646)); + print(" IsRailWaypointTile(): " + AIRail.IsRailWaypointTile(12648)); + print(" IsRailWaypointTile(): " + AIRail.IsRailWaypointTile(12650)); + print(" HasTransportType(): " + AITile.HasTransportType(12644, AITile.TRANSPORT_RAIL)); + print(" HasTransportType(): " + AITile.HasTransportType(12646, AITile.TRANSPORT_RAIL)); + print(" HasTransportType(): " + AITile.HasTransportType(12648, AITile.TRANSPORT_RAIL)); + print(" HasTransportType(): " + AITile.HasTransportType(12650, AITile.TRANSPORT_RAIL)); + print(" DemolishTile(): " + AITile.DemolishTile(12648)); + print(" DemolishTile(): " + AITile.DemolishTile(12650)); } function Regression::Road() @@ -1441,7 +1495,7 @@ function Regression::TileList() print(" " + i + " => " + list.GetValue(i)); } - list = AITileList_StationType(4, AIStation.STATION_BUS_STOP); + list = AITileList_StationType(6, AIStation.STATION_BUS_STOP); print(""); print("--TileList_StationType--"); print(" Count(): " + list.Count()); diff --git a/bin/ai/regression/tst_regression/result.txt b/bin/ai/regression/tst_regression/result.txt index c909e79322..f91a8780cd 100644 --- a/bin/ai/regression/tst_regression/result.txt +++ b/bin/ai/regression/tst_regression/result.txt @@ -7334,6 +7334,35 @@ ERROR: IsEnd() is invalid as Begin() is never called HasTransportType(): true HasTransportType(): false RemoveRail(): true + HasTransportType(): false + HasTransportType(): false + BuildRailTrack(): true + RemoveRailTrack(): false + RemoveRailTrack(): true + BuildRail(): true + HasTransportType(): true + HasTransportType(): false + RemoveRail(): true + HasTransportType(): true + HasTransportType(): false + BuildRailTrack(): true + HasTransportType(): true + HasTransportType(): true + RemoveRail(): true + HasTransportType(): false + HasTransportType(): false + BuildRailTrack(): false + BuildRailTrack(): false + BuildRailTrack(): true + BuildRailTrack(): true + BuildRailTrack(): false + DemolishTile(): true + BuildRailTrack(): true + BuildRailTrack(): false + BuildRailTrack(): false + BuildRailTrack(): false + DemolishTile(): true + BuildRailTrack(): true Depot IsRailTile(): false BuildRailDepot(): false @@ -7362,6 +7391,30 @@ ERROR: IsEnd() is invalid as Begin() is never called IsRailStationTile(): false IsRailStationTile(): false IsRailStationTile(): false + Waypoint + BuildRailTrack(): true + BuildRailTrack(): true + BuildRailTrack(): true + BuildRailWaypoint(): false + BuildRailWaypoint(): true + BuildRailWaypoint(): true + BuildRailWaypoint(): false + IsRailWaypointTile(): false + IsRailWaypointTile(): true + IsRailWaypointTile(): true + IsRailWaypointTile(): false + RemoveRailWaypointTileRectangle():true + RemoveRailWaypointTileRectangle():true + IsRailWaypointTile(): false + IsRailWaypointTile(): false + IsRailWaypointTile(): false + IsRailWaypointTile(): false + HasTransportType(): false + HasTransportType(): false + HasTransportType(): true + HasTransportType(): true + DemolishTile(): true + DemolishTile(): true --RailTypeList-- Count(): 1 @@ -7485,9 +7538,9 @@ ERROR: IsEnd() is invalid as Begin() is never called GetName(0): Look, a station GetLocation(1): 29253 GetLocation(1000): -1 - GetStationID(33411): 4 + GetStationID(33411): 6 GetStationID(34411): 65535 - GetStationID(33411): 4 + GetStationID(33411): 6 HasRoadType(3, TRAM): false HasRoadType(3, ROAD): false HasRoadType(33411, TRAM): false diff --git a/src/script/api/script_rail.cpp b/src/script/api/script_rail.cpp index 25ad2ec131..f7682cfd8f 100644 --- a/src/script/api/script_rail.cpp +++ b/src/script/api/script_rail.cpp @@ -204,7 +204,7 @@ EnforcePrecondition(false, GetRailTracks(tile) == RAILTRACK_NE_SW || GetRailTracks(tile) == RAILTRACK_NW_SE); EnforcePrecondition(false, IsRailTypeAvailable(GetCurrentRailType())); - return ScriptObject::DoCommand(tile, GetCurrentRailType() | (GetRailTracks(tile) == RAILTRACK_NE_SW ? AXIS_X : AXIS_Y) << 4 | 1 << 8 | 1 << 16, STAT_CLASS_WAYP | INVALID_STATION << 16, CMD_BUILD_RAIL_WAYPOINT); + return ScriptObject::DoCommand(tile, GetCurrentRailType() | (GetRailTracks(tile) == RAILTRACK_NE_SW ? AXIS_X : AXIS_Y) << 6 | 1 << 8 | 1 << 16, STAT_CLASS_WAYP | INVALID_STATION << 16, CMD_BUILD_RAIL_WAYPOINT); } /* static */ bool ScriptRail::RemoveRailWaypointTileRectangle(TileIndex tile, TileIndex tile2, bool keep_rail) @@ -288,16 +288,16 @@ static uint32 SimulateDrag(TileIndex from, TileIndex tile, TileIndex *to) int diag_offset = abs(abs((int)::TileX(*to) - (int)::TileX(tile)) - abs((int)::TileY(*to) - (int)::TileY(tile))); uint32 p2 = 0; if (::TileY(from) == ::TileY(*to)) { - p2 |= (TRACK_X << 4); + p2 |= (TRACK_X << 6); *to -= Clamp((int)::TileX(*to) - (int)::TileX(tile), -1, 1); } else if (::TileX(from) == ::TileX(*to)) { - p2 |= (TRACK_Y << 4); + p2 |= (TRACK_Y << 6); *to -= ::MapSizeX() * Clamp((int)::TileY(*to) - (int)::TileY(tile), -1, 1); } else if (::TileY(from) < ::TileY(tile)) { if (::TileX(*to) < ::TileX(tile)) { - p2 |= (TRACK_UPPER << 4); + p2 |= (TRACK_UPPER << 6); } else { - p2 |= (TRACK_LEFT << 4); + p2 |= (TRACK_LEFT << 6); } if (diag_offset != 0) { *to -= Clamp((int)::TileX(*to) - (int)::TileX(tile), -1, 1); @@ -306,9 +306,9 @@ static uint32 SimulateDrag(TileIndex from, TileIndex tile, TileIndex *to) } } else if (::TileY(from) > ::TileY(tile)) { if (::TileX(*to) < ::TileX(tile)) { - p2 |= (TRACK_RIGHT << 4); + p2 |= (TRACK_RIGHT << 6); } else { - p2 |= (TRACK_LOWER << 4); + p2 |= (TRACK_LOWER << 6); } if (diag_offset != 0) { *to -= Clamp((int)::TileX(*to) - (int)::TileX(tile), -1, 1); @@ -317,9 +317,9 @@ static uint32 SimulateDrag(TileIndex from, TileIndex tile, TileIndex *to) } } else if (::TileX(from) < ::TileX(tile)) { if (::TileY(*to) < ::TileY(tile)) { - p2 |= (TRACK_UPPER << 4); + p2 |= (TRACK_UPPER << 6); } else { - p2 |= (TRACK_RIGHT << 4); + p2 |= (TRACK_RIGHT << 6); } if (diag_offset == 0) { *to -= Clamp((int)::TileX(*to) - (int)::TileX(tile), -1, 1); @@ -328,9 +328,9 @@ static uint32 SimulateDrag(TileIndex from, TileIndex tile, TileIndex *to) } } else if (::TileX(from) > ::TileX(tile)) { if (::TileY(*to) < ::TileY(tile)) { - p2 |= (TRACK_LEFT << 4); + p2 |= (TRACK_LEFT << 6); } else { - p2 |= (TRACK_LOWER << 4); + p2 |= (TRACK_LOWER << 6); } if (diag_offset == 0) { *to -= Clamp((int)::TileX(*to) - (int)::TileX(tile), -1, 1); From df92a056dffd9fa2a765246da10442717f459c7f Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Tue, 14 Aug 2018 21:05:47 +0100 Subject: [PATCH 020/622] Fix #6875: Depot building cost does not include foundation build cost (#6883) --- bin/ai/regression/tst_regression/result.txt | 6 +++--- src/rail_cmd.cpp | 14 ++++++++------ src/road_cmd.cpp | 14 ++++++++------ 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/bin/ai/regression/tst_regression/result.txt b/bin/ai/regression/tst_regression/result.txt index f91a8780cd..4aa95d075c 100644 --- a/bin/ai/regression/tst_regression/result.txt +++ b/bin/ai/regression/tst_regression/result.txt @@ -7253,7 +7253,7 @@ ERROR: IsEnd() is invalid as Begin() is never called IsBuoyTile(): false IsLockTile(): false IsCanalTile(): false - GetBankBalance(): 479851 + GetBankBalance(): 479664 BuildWaterDepot(): true BuildDock(): true BuildBuoy(): true @@ -7266,7 +7266,7 @@ ERROR: IsEnd() is invalid as Begin() is never called IsBuoyTile(): true IsLockTile(): true IsCanalTile(): true - GetBankBalance(): 465257 + GetBankBalance(): 465070 --AIWaypointList(BUOY)-- Count(): 1 @@ -7285,7 +7285,7 @@ ERROR: IsEnd() is invalid as Begin() is never called IsBuoyTile(): false IsLockTile(): false IsCanalTile(): false - GetBankBalance(): 459862 + GetBankBalance(): 459675 BuildWaterDepot(): true BuildDock(): true diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index d21c1468ca..d5194e0c3b 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -967,6 +967,8 @@ CommandCost CmdBuildTrainDepot(TileIndex tile, DoCommandFlag flags, uint32 p1, u DiagDirection dir = Extract(p2); + CommandCost cost(EXPENSES_CONSTRUCTION); + /* Prohibit construction if * The tile is non-flat AND * 1) build-on-slopes is disabled @@ -974,14 +976,14 @@ CommandCost CmdBuildTrainDepot(TileIndex tile, DoCommandFlag flags, uint32 p1, u * 3) the exit points in the wrong direction */ - if (tileh != SLOPE_FLAT && ( - !_settings_game.construction.build_on_slopes || - !CanBuildDepotByTileh(dir, tileh) - )) { - return_cmd_error(STR_ERROR_FLAT_LAND_REQUIRED); + if (tileh != SLOPE_FLAT) { + if (!_settings_game.construction.build_on_slopes || !CanBuildDepotByTileh(dir, tileh)) { + return_cmd_error(STR_ERROR_FLAT_LAND_REQUIRED); + } + cost.AddCost(_price[PR_BUILD_FOUNDATION]); } - CommandCost cost = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); + cost.AddCost(DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR)); if (cost.Failed()) return cost; if (IsBridgeAbove(tile)) return_cmd_error(STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST); diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 5e432a2e6b..bdc8ce7f30 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -1017,15 +1017,17 @@ CommandCost CmdBuildRoadDepot(TileIndex tile, DoCommandFlag flags, uint32 p1, ui if (!IsValidRoadType(rt) || !ValParamRoadType(rt)) return CMD_ERROR; + CommandCost cost(EXPENSES_CONSTRUCTION); + Slope tileh = GetTileSlope(tile); - if (tileh != SLOPE_FLAT && ( - !_settings_game.construction.build_on_slopes || - !CanBuildDepotByTileh(dir, tileh) - )) { - return_cmd_error(STR_ERROR_FLAT_LAND_REQUIRED); + if (tileh != SLOPE_FLAT) { + if (!_settings_game.construction.build_on_slopes || !CanBuildDepotByTileh(dir, tileh)) { + return_cmd_error(STR_ERROR_FLAT_LAND_REQUIRED); + } + cost.AddCost(_price[PR_BUILD_FOUNDATION]); } - CommandCost cost = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); + cost.AddCost(DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR)); if (cost.Failed()) return cost; if (IsBridgeAbove(tile)) return_cmd_error(STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST); From 703e7f8fc78a7032b7a5315092604fb62f471cb8 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 17 Aug 2018 19:45:42 +0200 Subject: [PATCH 021/622] Update: Translations from eints spanish (mexican): 1 change by Absay --- src/lang/spanish_MX.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index fd2a926574..b1486affac 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -928,6 +928,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Rand sudafrican STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizada... STR_GAME_OPTIONS_CURRENCY_GEL :Lari georgiano (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Rial iraní (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Nuevo rublo ruso (RUR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vehículos de carretera From 6391d4927744407d6ea8b7336dad34565bc986d0 Mon Sep 17 00:00:00 2001 From: frosch Date: Tue, 14 Aug 2018 16:41:50 +0200 Subject: [PATCH 022/622] Fix: Variable 0x85 had no bounds checks. --- src/newgrf.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 4cd61b95cf..216bdc1901 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -5907,7 +5907,8 @@ static uint32 GetParamVal(byte param, uint32 *cond_val) /* Supported in Action 0x07 and 0x09, not 0x0D */ return 0; } else { - uint32 param_val = _ttdpatch_flags[*cond_val / 0x20]; + uint32 index = *cond_val / 0x20; + uint32 param_val = index < lengthof(_ttdpatch_flags) ? _ttdpatch_flags[index] : 0; *cond_val %= 0x20; return param_val; } From 4b0b4e06435b76e1cb40a8a65ccdc2307d48081d Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Mon, 13 Aug 2018 23:44:49 +0200 Subject: [PATCH 023/622] Feature: [NewGRF] Increase size of persistent storage to 256. --- src/newgrf.cpp | 2 ++ src/newgrf_storage.h | 4 ++-- src/saveload/industry_sl.cpp | 2 +- src/saveload/saveload.cpp | 3 ++- src/saveload/station_sl.cpp | 2 +- src/saveload/storage_sl.cpp | 3 ++- 6 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 216bdc1901..16a6c231f0 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -7898,6 +7898,8 @@ static void InitializeGRFSpecial() | ((_settings_game.vehicle.dynamic_engines ? 1 : 0) << 0x18) // dynamic engines | (1 << 0x1E) // variablerunningcosts | (1 << 0x1F); // any switch is on + + _ttdpatch_flags[4] = (1 << 0x00); // larger persistent storage } /** Reset and clear all NewGRF stations */ diff --git a/src/newgrf_storage.h b/src/newgrf_storage.h index ae9782d88c..a0c1558f8e 100644 --- a/src/newgrf_storage.h +++ b/src/newgrf_storage.h @@ -220,7 +220,7 @@ extern PersistentStoragePool _persistent_storage_pool; /** * Class for pooled persistent storage of data. */ -struct PersistentStorage : PersistentStorageArray, PersistentStoragePool::PoolItem<&_persistent_storage_pool> { +struct PersistentStorage : PersistentStorageArray, PersistentStoragePool::PoolItem<&_persistent_storage_pool> { /** We don't want GCC to zero our struct! It already is zeroed and has an index! */ PersistentStorage(const uint32 new_grfid, byte feature, TileIndex tile) { @@ -230,7 +230,7 @@ struct PersistentStorage : PersistentStorageArray, PersistentStorageP } }; -assert_compile(cpp_lengthof(OldPersistentStorage, storage) == cpp_lengthof(PersistentStorage, storage)); +assert_compile(cpp_lengthof(OldPersistentStorage, storage) <= cpp_lengthof(PersistentStorage, storage)); #define FOR_ALL_STORAGES_FROM(var, start) FOR_ALL_ITEMS_FROM(PersistentStorage, storage_index, var, start) #define FOR_ALL_STORAGES(var) FOR_ALL_STORAGES_FROM(var, 0) diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp index b28730e3c3..615e8e1522 100644 --- a/src/saveload/industry_sl.cpp +++ b/src/saveload/industry_sl.cpp @@ -101,7 +101,7 @@ static void Load_INDY() /* Store the old persistent storage. The GRFID will be added later. */ assert(PersistentStorage::CanAllocateItem()); i->psa = new PersistentStorage(0, 0, 0); - memcpy(i->psa->storage, _old_ind_persistent_storage.storage, sizeof(i->psa->storage)); + memcpy(i->psa->storage, _old_ind_persistent_storage.storage, sizeof(_old_ind_persistent_storage.storage)); } Industry::IncIndustryTypeCount(i->type); } diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index e065237693..f9c3efd758 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -268,8 +268,9 @@ * 198 * 199 * 200 #6805 Extend railtypes to 64, adding uint16 to map array. + * 201 #6885 Extend NewGRF persistant storages. */ -extern const uint16 SAVEGAME_VERSION = 200; ///< Current savegame version of OpenTTD. +extern const uint16 SAVEGAME_VERSION = 201; ///< Current savegame version of OpenTTD. SavegameType _savegame_type; ///< type of savegame we are loading FileToSaveLoad _file_to_saveload; ///< File to save or load in the openttd loop. diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index f01123da0a..670d6fcf06 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -538,7 +538,7 @@ static void Load_STNN() /* Store the old persistent storage. The GRFID will be added later. */ assert(PersistentStorage::CanAllocateItem()); st->airport.psa = new PersistentStorage(0, 0, 0); - memcpy(st->airport.psa->storage, _old_st_persistent_storage.storage, sizeof(st->airport.psa->storage)); + memcpy(st->airport.psa->storage, _old_st_persistent_storage.storage, sizeof(_old_st_persistent_storage.storage)); } for (CargoID i = 0; i < num_cargo; i++) { diff --git a/src/saveload/storage_sl.cpp b/src/saveload/storage_sl.cpp index 110df63a7c..04980c7c37 100644 --- a/src/saveload/storage_sl.cpp +++ b/src/saveload/storage_sl.cpp @@ -18,7 +18,8 @@ /** Description of the data to save and load in #PersistentStorage. */ static const SaveLoad _storage_desc[] = { SLE_CONDVAR(PersistentStorage, grfid, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDARR(PersistentStorage, storage, SLE_UINT32, 16, 161, SL_MAX_VERSION), + SLE_CONDARR(PersistentStorage, storage, SLE_UINT32, 16, 161, 200), + SLE_CONDARR(PersistentStorage, storage, SLE_UINT32, 256, 201, SL_MAX_VERSION), SLE_END() }; From 560b01f3071664357c2608c031bb8a4f86caaf26 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Mon, 3 Sep 2018 18:35:22 +0200 Subject: [PATCH 024/622] Fix: Check the search paths for standard MIDI files --- src/music/midifile.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/music/midifile.cpp b/src/music/midifile.cpp index 688538db9b..9506776ef4 100644 --- a/src/music/midifile.cpp +++ b/src/music/midifile.cpp @@ -1010,7 +1010,12 @@ bool MidiFile::WriteSMF(const char *filename) std::string MidiFile::GetSMFFile(const MusicSongInfo &song) { if (song.filetype == MTT_STANDARDMIDI) { - return std::string(song.filename); + char filename[MAX_PATH]; + if (FioFindFullPath(filename, lastof(filename), Subdirectory::BASESET_DIR, song.filename)) { + return std::string(filename); + } else { + return std::string(); + } } if (song.filetype != MTT_MPSMIDI) return std::string(); From bb086f92403aa70d5756c334df31a65f4b854e39 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Mon, 3 Sep 2018 18:43:55 +0200 Subject: [PATCH 025/622] Fix: Better "temp" path for decoded MPSMIDI files when source filename has no path separators --- src/music/midifile.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/music/midifile.cpp b/src/music/midifile.cpp index 9506776ef4..931be181a6 100644 --- a/src/music/midifile.cpp +++ b/src/music/midifile.cpp @@ -1020,16 +1020,18 @@ std::string MidiFile::GetSMFFile(const MusicSongInfo &song) if (song.filetype != MTT_MPSMIDI) return std::string(); - const char *lastpathsep = strrchr(song.filename, PATHSEPCHAR); - if (lastpathsep == NULL) { - lastpathsep = song.filename; - } - char basename[MAX_PATH]; { + const char *fnstart = strrchr(song.filename, PATHSEPCHAR); + if (fnstart == NULL) { + fnstart = song.filename; + } else { + fnstart++; + } + /* Remove all '.' characters from filename */ char *wp = basename; - for (const char *rp = lastpathsep + 1; *rp != '\0'; rp++) { + for (const char *rp = fnstart; *rp != '\0'; rp++) { if (*rp != '.') *wp++ = *rp; } *wp++ = '\0'; From 8137d14d33a70c143ae46fbae236c62e9823103b Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 6 Sep 2018 19:45:43 +0200 Subject: [PATCH 026/622] Update: Translations from eints russian: 1 change by Lone_Wolf --- src/lang/russian.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 742639720f..cea62d9bb9 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1071,6 +1071,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Южноафр STR_GAME_OPTIONS_CURRENCY_CUSTOM :Своя... STR_GAME_OPTIONS_CURRENCY_GEL :Грузинский лари (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Иранский риал (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Российский новый рубль (RUR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Движение автомобилей From 94961732a3667f9b2f38da4be5209b1259db6733 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 7 Sep 2018 19:45:44 +0200 Subject: [PATCH 027/622] Update: Translations from eints basque: 4 changes by Thadah --- src/lang/basque.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lang/basque.txt b/src/lang/basque.txt index cd97bf02cf..caef347956 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -869,7 +869,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Leihoa {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Leihora kopiatu STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK} Leiho nagusian ikusten dena leiho honetara kopiatu -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Leihotik kpiatutakoa itsatsi +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Aldatu ikuspen nagusia STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Leiho honetan ikusten dena leiho nagusian itsasi # Game options window @@ -2589,6 +2589,8 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window ############ Leave those lines in this order!! +STR_FRAMERATE_GL_TRAINS :{WHITE} Trenen tick-ak: +STR_FRAMERATE_GL_SHIPS :{WHITE} Itsasontzien tick-ak: ############ End of leave-in-this-order ############ Leave those lines in this order!! ############ End of leave-in-this-order @@ -3009,6 +3011,7 @@ STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING} STR_STATION_VIEW_GROUP :{BLACK}Taldekatu STR_STATION_VIEW_WAITING_STATION :Geltokia: Itxaroten STR_STATION_VIEW_WAITING_AMOUNT :Kopurua: Itxoiten +STR_STATION_VIEW_PLANNED_STATION :Geltokia: Antolatua STR_STATION_VIEW_FROM :{YELLOW}{CARGO_SHORT} {STATION}-tik STR_STATION_VIEW_VIA :{YELLOW}{CARGO_SHORT}{STATION}-tik STR_STATION_VIEW_TO :{YELLOW}{CARGO_SHORT}{STATION}-ra From ca5b68145ad6f9631b72635fdfa0ab3a1937b707 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Wed, 12 Sep 2018 08:19:06 +0100 Subject: [PATCH 028/622] Fix #6839: OLD_GM_DIR midi search path got lost (#6900) --- src/music/midifile.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/music/midifile.cpp b/src/music/midifile.cpp index 931be181a6..a2455358fe 100644 --- a/src/music/midifile.cpp +++ b/src/music/midifile.cpp @@ -1013,6 +1013,8 @@ std::string MidiFile::GetSMFFile(const MusicSongInfo &song) char filename[MAX_PATH]; if (FioFindFullPath(filename, lastof(filename), Subdirectory::BASESET_DIR, song.filename)) { return std::string(filename); + } else if (FioFindFullPath(filename, lastof(filename), Subdirectory::OLD_GM_DIR, song.filename)) { + return std::string(filename); } else { return std::string(); } From 1a73c3983863304bde1810913525ad0c4d07883c Mon Sep 17 00:00:00 2001 From: Samuel Cochran Date: Sun, 16 Sep 2018 18:10:26 +1000 Subject: [PATCH 029/622] Add: BACKSPACE can be mapped as a hotkey --- src/hotkeys.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp index 870e2cbea6..12bd827fa5 100644 --- a/src/hotkeys.cpp +++ b/src/hotkeys.cpp @@ -41,6 +41,7 @@ static const KeycodeNames _keycode_to_name[] = { {"GLOBAL", WKC_GLOBAL_HOTKEY}, {"ESC", WKC_ESC}, {"DEL", WKC_DELETE}, + {"BACKSPACE", WKC_BACKSPACE}, {"RETURN", WKC_RETURN}, {"BACKQUOTE", WKC_BACKQUOTE}, {"F1", WKC_F1}, From eed0da60a2442a5b8a243b97fbbf64f639680ce7 Mon Sep 17 00:00:00 2001 From: Max Maton Date: Sun, 16 Sep 2018 05:17:10 +0200 Subject: [PATCH 030/622] Fix #6622: Fixes empty company name in news when gamescript constructs a town --- src/lang/english.txt | 1 + src/town_cmd.cpp | 20 +++++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 0589ec4f11..6f3e5778a7 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -815,6 +815,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Manager) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{RAW_STRING} sponsored construction of new town {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}A new town called {TOWN} has been constructed! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}New {STRING} under construction near {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}New {STRING} being planted near {TOWN}! diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 92a3991ba9..6ebf4e2987 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -1798,15 +1798,21 @@ CommandCost CmdFoundTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 if (_game_mode != GM_EDITOR) { /* 't' can't be NULL since 'random' is false outside scenedit */ assert(!random); - char company_name[MAX_LENGTH_COMPANY_NAME_CHARS * MAX_CHAR_LENGTH]; - SetDParam(0, _current_company); - GetString(company_name, STR_COMPANY_NAME, lastof(company_name)); - char *cn = stredup(company_name); - SetDParamStr(0, cn); - SetDParam(1, t->index); + if (_current_company == OWNER_DEITY) { + SetDParam(0, t->index); + AddTileNewsItem(STR_NEWS_NEW_TOWN_UNSPONSORED, NT_INDUSTRY_OPEN, tile); + } else { + char company_name[MAX_LENGTH_COMPANY_NAME_CHARS * MAX_CHAR_LENGTH]; + SetDParam(0, _current_company); + GetString(company_name, STR_COMPANY_NAME, lastof(company_name)); - AddTileNewsItem(STR_NEWS_NEW_TOWN, NT_INDUSTRY_OPEN, tile, cn); + char *cn = stredup(company_name); + SetDParamStr(0, cn); + SetDParam(1, t->index); + + AddTileNewsItem(STR_NEWS_NEW_TOWN, NT_INDUSTRY_OPEN, tile, cn); + } AI::BroadcastNewEvent(new ScriptEventTownFounded(t->index)); Game::NewEvent(new ScriptEventTownFounded(t->index)); } From 59a1614ba0724bf5240b91d8cd2b90ff7eeb286c Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 19 Sep 2018 19:45:44 +0200 Subject: [PATCH 031/622] Update: Translations from eints czech: 27 changes by djst croatian: 1 change by VoyagerOne italian: 1 change by lorenzodv --- src/lang/croatian.txt | 1 + src/lang/czech.txt | 28 +++++++++++++++++++++++++++- src/lang/italian.txt | 1 + 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 22a6dd09dd..19f76b6570 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -911,6 +911,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Direktor) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}Tvrtka {STRING} sponzorira izgradnju novoga grada {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Sagrađen je novi grad {TOWN}! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Započela je izgradnja nove {STRING.gen} u blizini grada {TOWN}a! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Nova {STRING} trenutno se sadi blizu grada {TOWN}a! diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 6a9372de33..9e5e66037a 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -550,6 +550,7 @@ STR_ABOUT_MENU_SCREENSHOT :Screenshot STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Screenshot v plném přiblížení STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Screenshot ve výchozím přiblížení STR_ABOUT_MENU_GIANT_SCREENSHOT :Screenshot celé mapy +STR_ABOUT_MENU_SHOW_FRAMERATE :Zobrazit počet snímků za sekundu STR_ABOUT_MENU_ABOUT_OPENTTD :O 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Zarovnávání spritů STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Přepnout ohraničení @@ -737,6 +738,7 @@ STR_MUSIC_RULER_MARKER :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Hudba nedostupná STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Skladba STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Název @@ -762,6 +764,7 @@ STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLA STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Program - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Vymazat STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Vyprázdnit současný program (jen u Voleb 1 a 2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Změnit výběr hudby na jinou nainstalovanou sadu. STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Skladba se přidá do zvoleného programu (Volba 1 nebo 2) klepnutím na její název STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Hudební stopu odstraníš ze současného programu (pouze u vlastního) kliknutím na ni @@ -897,6 +900,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Prezident) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}Společnost {STRING} zaplatila výstavbu nového města {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Nové město {TOWN} bylo vystavěno! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Nov{G ý á é í é é á} {STRING.small} se staví poblíž města {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Nov{G ý á é í é é á} {STRING.small} se vysazuj{G 0 e e e í í í í} poblíž města {TOWN}! @@ -966,7 +970,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Pohled {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Nastavit jako pohled STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Nastavit současné zorné pole jako pohled -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Přejít na pohled +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Změnit hlavní pohled STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Nastavit pohled do zorného pole # Game options window @@ -1009,6 +1013,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Jihoafrický ra STR_GAME_OPTIONS_CURRENCY_CUSTOM :Vlastní... STR_GAME_OPTIONS_CURRENCY_GEL :Georgijské Lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Íránský Riál (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Ruský rubl (RUB) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Silniční vozidla jezdí @@ -2365,6 +2370,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Legenda STR_LINKGRAPH_LEGEND_ALL :{BLACK}Všechny STR_LINKGRAPH_LEGEND_NONE :{BLACK}Žádný STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Vybrat firmy, které mají být zobrazeny +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}nepoužívaný @@ -2780,9 +2786,24 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Tým OpenTTD # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Počet snímků za sekundu +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Počet snímků videa vykreslovaných za sekundu. +STR_FRAMERATE_SPEED_FACTOR :{WHITE}Aktuální činitel rychlosti hry: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Rychlost, kterou hra právě běží, v porovnání s očekávanou rychlostí při běžné rychlosti simulace. +STR_FRAMERATE_AVERAGE :{WHITE}Průměr +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} sním{P "ek" "ky" "ků"}/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} sním{P "ek" "ky" "ků"}/s +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GL_ECONOMY :{WHITE} Manipulace s nákladem: +STR_FRAMERATE_DRAWING :{WHITE}Vykreslování grafiky: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GL_ECONOMY :Manipulace s nákladem +STR_FRAMETIME_CAPTION_DRAWING :Vykreslování grafiky +STR_FRAMETIME_CAPTION_SOUND :Míchání zvuků ############ End of leave-in-this-order @@ -3070,6 +3091,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Zadej n STR_TOWN_DIRECTORY_CAPTION :{WHITE}Města STR_TOWN_DIRECTORY_NONE :{ORANGE}- Nic - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (velkoměsto){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Jména měst - pohled na město zaměříš kliknutím na jeho jméno. Při stisknutém Ctrl otevřeš nový pohled STR_TOWN_POPULATION :{BLACK}Populace světa: {COMMA} @@ -3077,6 +3099,7 @@ STR_TOWN_POPULATION :{BLACK}Populace STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (velkoměsto) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Populace: {ORANGE}{COMMA}{BLACK} Domů: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} minulý měsíc: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Množství doručeného nákladu potřebného pro rozvoj města: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{RED}Je potřeba {ORANGE}{STRING} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} vyžadováno v zimě @@ -4326,6 +4349,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... tato STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... silnice je otočena jiným směrem STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... průjezdné zastávky nemohou být v zatáčce STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... průjezdné zastávky nemohou být na křižovatce +STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... silnice je jednosměrná nebo uzavřená. # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Nelze odstranit část stanice... @@ -4584,6 +4608,8 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Původní sada STR_BASESOUNDS_WIN_DESCRIPTION :Původní sada zvuků Transport Tycoon Deluxe (verze pro Windows). STR_BASESOUNDS_NONE_DESCRIPTION :Prázdná sada zvuků. STR_BASEMUSIC_WIN_DESCRIPTION :Původní hudba Transport Tycoon Deluxe (verze pro Windows). +STR_BASEMUSIC_DOS_DESCRIPTION :Původní hudba Transport Tycoon Deluxe (verze pro DOS). +STR_BASEMUSIC_TTO_DESCRIPTION :Původní hudba Transport Tycoon (verze pro DOS). STR_BASEMUSIC_NONE_DESCRIPTION :Prázná hudební sada. ##id 0x2000 diff --git a/src/lang/italian.txt b/src/lang/italian.txt index a1eb67ae99..e9f3f33184 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -817,6 +817,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Presidente) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}La {STRING} finanzia la costruzione della nuova cittadina di {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}È stata fondata una nuova città chiamata {TOWN}! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Nuov{G o o a} {STRING} in costruzione vicino a {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Nuov{G 0 o o a} {STRING} piantat{G 0 o o a} vicino a {TOWN}! From 41fb7cb15e79e3abd3bfddec14048f026a2d62e5 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Thu, 20 Sep 2018 21:31:38 +0100 Subject: [PATCH 032/622] Fix #6892: [Script] CONFIG_RANDOM did not use the full parameter range (#6902) --- src/script/script_config.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/script_config.cpp b/src/script/script_config.cpp index a6e41476e8..3171e67d4f 100644 --- a/src/script/script_config.cpp +++ b/src/script/script_config.cpp @@ -36,7 +36,7 @@ void ScriptConfig::Change(const char *name, int version, bool force_exact_match, * for the Script that have the random flag to a random value. */ for (ScriptConfigItemList::const_iterator it = this->info->GetConfigList()->begin(); it != this->info->GetConfigList()->end(); it++) { if ((*it).flags & SCRIPTCONFIG_RANDOM) { - this->SetSetting((*it).name, InteractiveRandomRange((*it).max_value - (*it).min_value) + (*it).min_value); + this->SetSetting((*it).name, InteractiveRandomRange((*it).max_value + 1 - (*it).min_value) + (*it).min_value); } } this->AddRandomDeviation(); From fec44b0d09281f713da9040ab50b59e10213de2f Mon Sep 17 00:00:00 2001 From: Stefan Strogin Date: Thu, 20 Sep 2018 20:36:45 +0000 Subject: [PATCH 033/622] Fix #6854: Compilation with ICU 62 (#6912) --- src/gfx_layout.cpp | 18 +++++++++--------- src/gfx_layout.h | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index bb7efa2d72..6cef84e13f 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -121,14 +121,14 @@ le_bool Font::getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &poin * Wrapper for doing layouts with ICU. */ class ICUParagraphLayout : public AutoDeleteSmallVector, public ParagraphLayouter { - ParagraphLayout *p; ///< The actual ICU paragraph layout. + icu::ParagraphLayout *p; ///< The actual ICU paragraph layout. public: /** Visual run contains data about the bit of text with the same font. */ class ICUVisualRun : public ParagraphLayouter::VisualRun { - const ParagraphLayout::VisualRun *vr; ///< The actual ICU vr. + const icu::ParagraphLayout::VisualRun *vr; ///< The actual ICU vr. public: - ICUVisualRun(const ParagraphLayout::VisualRun *vr) : vr(vr) { } + ICUVisualRun(const icu::ParagraphLayout::VisualRun *vr) : vr(vr) { } const Font *GetFont() const { return (const Font*)vr->getFont(); } int GetGlyphCount() const { return vr->getGlyphCount(); } @@ -140,10 +140,10 @@ public: /** A single line worth of VisualRuns. */ class ICULine : public AutoDeleteSmallVector, public ParagraphLayouter::Line { - ParagraphLayout::Line *l; ///< The actual ICU line. + icu::ParagraphLayout::Line *l; ///< The actual ICU line. public: - ICULine(ParagraphLayout::Line *l) : l(l) + ICULine(icu::ParagraphLayout::Line *l) : l(l) { for (int i = 0; i < l->countRuns(); i++) { *this->Append() = new ICUVisualRun(l->getVisualRun(i)); @@ -163,13 +163,13 @@ public: } }; - ICUParagraphLayout(ParagraphLayout *p) : p(p) { } + ICUParagraphLayout(icu::ParagraphLayout *p) : p(p) { } ~ICUParagraphLayout() { delete p; } void Reflow() { p->reflow(); } ParagraphLayouter::Line *NextLine(int max_width) { - ParagraphLayout::Line *l = p->nextLine(max_width); + icu::ParagraphLayout::Line *l = p->nextLine(max_width); return l == NULL ? NULL : new ICULine(l); } }; @@ -196,7 +196,7 @@ public: } /* Fill ICU's FontRuns with the right data. */ - FontRuns runs(fontMapping.Length()); + icu::FontRuns runs(fontMapping.Length()); for (FontMap::iterator iter = fontMapping.Begin(); iter != fontMapping.End(); iter++) { runs.add(iter->second, iter->first); } @@ -204,7 +204,7 @@ public: LEErrorCode status = LE_NO_ERROR; /* ParagraphLayout does not copy "buff", so it must stay valid. * "runs" is copied according to the ICU source, but the documentation does not specify anything, so this might break somewhen. */ - ParagraphLayout *p = new ParagraphLayout(buff, length, &runs, NULL, NULL, NULL, _current_text_dir == TD_RTL ? UBIDI_DEFAULT_RTL : UBIDI_DEFAULT_LTR, false, status); + icu::ParagraphLayout *p = new icu::ParagraphLayout(buff, length, &runs, NULL, NULL, NULL, _current_text_dir == TD_RTL ? UBIDI_DEFAULT_RTL : UBIDI_DEFAULT_LTR, false, status); if (status != LE_NO_ERROR) { delete p; return NULL; diff --git a/src/gfx_layout.h b/src/gfx_layout.h index 45d79ae474..f6fc3b5c71 100644 --- a/src/gfx_layout.h +++ b/src/gfx_layout.h @@ -22,7 +22,7 @@ #ifdef WITH_ICU_LAYOUT #include "layout/ParagraphLayout.h" -#define ICU_FONTINSTANCE : public LEFontInstance +#define ICU_FONTINSTANCE : public icu::LEFontInstance #else /* WITH_ICU_LAYOUT */ #define ICU_FONTINSTANCE #endif /* WITH_ICU_LAYOUT */ From 060248a422a02e4ba7e50b0e4cd7dc30eea414fd Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 24 Sep 2018 19:45:43 +0200 Subject: [PATCH 034/622] Update: Translations from eints spanish (mexican): 2 changes by Absay --- src/lang/spanish_MX.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index b1486affac..cea55ce6b5 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -816,6 +816,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Presidente) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}¡{STRING} patrocina la creación del nuevo pueblo de {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}¡El nuevo pueblo de {TOWN} ha sido formado! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}¡Nuev{G o a} {STRING} en construcción cerca de {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}¡Nuev{G o a} {STRING} fundad{G o a} cerca de {TOWN}! @@ -1305,7 +1306,7 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Número de indu STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distancia máxima de refinerías de petróleo con los bordes del mapa: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Las refinerías de petróleo se construyen cerca del borde del mapa, el cual es costa en mapas con borde marítimo STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Nivel de inicio de nieve: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :En los mapas de clima Subártico, la elevación a la cual la nieve comienza. La nieve también afecta a la generación de industrias y a los requisitos de crecimiento de los pueblos +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :En los mapas de clima Subártico, la elevación a la cual la nieve comienza. La nieve también afecta la generación de industrias y los requisitos de crecimiento de los pueblos STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Irregularidad del terreno: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Solo TerraGenesis) Cantidad de colinas: los terrenos más planos tienen menos colinas, aunque suelen ser más extensas. Los terrenos más accidentados tienen múltiples colinas, lo cual puede resultar repetitivo STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Muy suave From 662dcc3c31bbdbf26b09c74fb29c4286c80de9c4 Mon Sep 17 00:00:00 2001 From: "Johannes E. Krause" Date: Sat, 29 Sep 2018 13:26:44 +0200 Subject: [PATCH 035/622] Fix #6920: Make 9.8m/s^2 a common constant for TE-calculation --- bin/ai/regression/tst_regression/result.txt | 6 +++--- src/engine.cpp | 4 ++-- src/ground_vehicle.cpp | 2 +- src/vehicle_type.h | 2 ++ 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/bin/ai/regression/tst_regression/result.txt b/bin/ai/regression/tst_regression/result.txt index 4aa95d075c..210cf2696a 100644 --- a/bin/ai/regression/tst_regression/result.txt +++ b/bin/ai/regression/tst_regression/result.txt @@ -1292,7 +1292,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRunningCost(): 820 GetPower(): 300 GetWeight(): 47 - GetMaxTractiveEffort(): 139 + GetMaxTractiveEffort(): 136 GetVehicleType(): 0 GetRailType(): 0 GetRoadType(): -1 @@ -1436,7 +1436,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRunningCost(): 1968 GetPower(): 1000 GetWeight(): 131 - GetMaxTractiveEffort(): 388 + GetMaxTractiveEffort(): 381 GetVehicleType(): 0 GetRailType(): 0 GetRoadType(): -1 @@ -1454,7 +1454,7 @@ ERROR: IsEnd() is invalid as Begin() is never called GetRunningCost(): 2296 GetPower(): 1200 GetWeight(): 162 - GetMaxTractiveEffort(): 480 + GetMaxTractiveEffort(): 471 GetVehicleType(): 0 GetRailType(): 0 GetRoadType(): -1 diff --git a/src/engine.cpp b/src/engine.cpp index ac2e8df0ec..cd96a149fb 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -431,9 +431,9 @@ uint Engine::GetDisplayMaxTractiveEffort() const /* Only trains and road vehicles have 'tractive effort'. */ switch (this->type) { case VEH_TRAIN: - return (10 * this->GetDisplayWeight() * GetEngineProperty(this->index, PROP_TRAIN_TRACTIVE_EFFORT, this->u.rail.tractive_effort)) / 256; + return (GROUND_ACCELERATION * this->GetDisplayWeight() * GetEngineProperty(this->index, PROP_TRAIN_TRACTIVE_EFFORT, this->u.rail.tractive_effort)) / 256 / 1000; case VEH_ROAD: - return (10 * this->GetDisplayWeight() * GetEngineProperty(this->index, PROP_ROADVEH_TRACTIVE_EFFORT, this->u.road.tractive_effort)) / 256; + return (GROUND_ACCELERATION * this->GetDisplayWeight() * GetEngineProperty(this->index, PROP_ROADVEH_TRACTIVE_EFFORT, this->u.road.tractive_effort)) / 256 / 1000; default: NOT_REACHED(); } diff --git a/src/ground_vehicle.cpp b/src/ground_vehicle.cpp index f8efd8e1aa..6fd8d77106 100644 --- a/src/ground_vehicle.cpp +++ b/src/ground_vehicle.cpp @@ -58,7 +58,7 @@ void GroundVehicle::PowerChanged() this->gcache.cached_air_drag = air_drag + 3 * air_drag * number_of_parts / 20; - max_te *= 9800; // Tractive effort in (tonnes * 1000 * 9.8 =) N. + max_te *= GROUND_ACCELERATION; // Tractive effort in (tonnes * 1000 * 9.8 =) N. max_te /= 256; // Tractive effort is a [0-255] coefficient. if (this->gcache.cached_power != total_power || this->gcache.cached_max_te != max_te) { /* Stop the vehicle if it has no power. */ diff --git a/src/vehicle_type.h b/src/vehicle_type.h index 0921b39e36..f3e7d535fd 100644 --- a/src/vehicle_type.h +++ b/src/vehicle_type.h @@ -17,6 +17,8 @@ /** The type all our vehicle IDs have. */ typedef uint32 VehicleID; +static const int GROUND_ACCELERATION = 9800; ///< Acceleration due to gravity, 9.8 m/s^2 + /** Available vehicle types. */ enum VehicleType { VEH_BEGIN, From 25a060b4ae9d7c6a145e7a8ca371fb2182826359 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 1 Oct 2018 19:45:43 +0200 Subject: [PATCH 036/622] Update: Translations from eints vietnamese: 2 changes by myquartz --- src/lang/vietnamese.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index c1643d0731..c06f1ff740 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -879,7 +879,7 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Cửa sổ {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Nhìn ở cửa sổ lớn STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Nhìn vị trí này ở cửa sổ lớn chính -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Chuyển về cửa sổ nhỏ +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Chuyển về cửa sổ chính STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Chuyển vị trí từ cửa sổ lớn về cửa sổ nhỏ # Game options window @@ -2688,6 +2688,7 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window ############ Leave those lines in this order!! +STR_FRAMERATE_VIDEO :Nguồn xuất hình: ############ End of leave-in-this-order ############ Leave those lines in this order!! ############ End of leave-in-this-order From 8a70101e7feea4d0f2f0d654767e17d8318a146b Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 2 Oct 2018 19:45:40 +0200 Subject: [PATCH 037/622] Update: Translations from eints vietnamese: 63 changes by myquartz --- src/lang/vietnamese.txt | 65 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index c06f1ff740..d8b838ee41 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -475,6 +475,7 @@ STR_ABOUT_MENU_SCREENSHOT :Ảnh chụp m STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Phóng to đầy đủ ảnh chụp màn hình STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Phóng to mặc định ảnh chụp màn hình STR_ABOUT_MENU_GIANT_SCREENSHOT :Ảnh màn hình toàn bản đồ +STR_ABOUT_MENU_SHOW_FRAMERATE :Hiển thị tốc độ khung hình STR_ABOUT_MENU_ABOUT_OPENTTD :Giới thiệu 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Trình điều chỉnh sprite STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Bật/tắt hiển thị khối nhà @@ -650,6 +651,7 @@ STR_MUSIC_RULER_MARKER :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Không sẵn có nhạc nền STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Bài Nhạc STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Tên @@ -670,11 +672,14 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Bật/t STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Hiện cửa số chọn bài nhạc # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Danh sách nhạc - '{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Bảng Bài Nhạc STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Chương Trình - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Xóa +STR_PLAYLIST_CHANGE_SET :{BLACK}Tập danh sách thay đổi STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Xóa chương trình đang chọn ("Tự chọn 1" và "Tự chọn 2") +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Thay đổi lựa chọn danh sách nhạc khác STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Click vào bài nhạc để thêm vào chương trình hiện tại (cho "Tự chọn 1" hay "Tự chọn 2") STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Click vào bài nhạc để xóa khỏi chương trình hiện tại (cho "Tự chọn 1" hay "Tự chọn 2") @@ -810,6 +815,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Giám Đốc) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} Tài trợ xây dựng Thị Xã mới {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Một đô thị mới vừa được xây dựng, có tên là {TOWN}! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}{STRING} mới đang được xây dựng gần {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}{STRING} được lên kế hoạch xây gần {TOWN}! @@ -877,10 +883,10 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC # Extra view window STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Cửa sổ {COMMA} -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Nhìn ở cửa sổ lớn +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Đổi khung nhìn STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Nhìn vị trí này ở cửa sổ lớn chính STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Chuyển về cửa sổ chính -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Chuyển vị trí từ cửa sổ lớn về cửa sổ nhỏ +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Sao chép vị trí từ cửa sổ này về cửa sổ lớn # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Cấu Hình Trò Chơi @@ -922,6 +928,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Rand Nam Phi (Z STR_GAME_OPTIONS_CURRENCY_CUSTOM :Tùy chọn... STR_GAME_OPTIONS_CURRENCY_GEL :Lari Georgia (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iran (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Đồng Rúp Nga mới (RUB) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Xe cộ @@ -1334,6 +1341,12 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Màu sắc củ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Lục STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Lục tối STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Tím +STR_CONFIG_SETTING_SCROLLMODE :Kiểu cuộn khung nhìn: {STRING} +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Hành xử khi kéo, cuộn bản đồ +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Kéo cuộn khung nhìn kiểu RMB, khoá vị trí con trỏ chuột +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Kéo cuộn kiểu RMB, khoá vị trí con trỏ chuột +STR_CONFIG_SETTING_SCROLLMODE_RMB :Kéo cuộn bản đồ kiểu RMB +STR_CONFIG_SETTING_SCROLLMODE_LMB :Kéo cuộn bản đồ kiểu LMB STR_CONFIG_SETTING_SMOOTH_SCROLLING :Cuộn uyển chuyển cửa sổ: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Điều khiển cách màn hình chính cuộn tới vị trí cụ thể khi nháy chuột vào bản đồ nhỏ hoặc khi gõ lệnh cuộn tới đối tượng trên bản đồ. Nếu bật, thì sẽ cuộn trượt, nếu tắt thì nhảy thẳng tới vị trí đó. STR_CONFIG_SETTING_MEASURE_TOOLTIP :Hiện bảng chú giải đo lường khi dùng các công cụ xây dựng: {STRING} @@ -2278,6 +2291,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Ghi chú STR_LINKGRAPH_LEGEND_ALL :{BLACK}Tất cả STR_LINKGRAPH_LEGEND_NONE :{BLACK}Không STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Lựa chọn công ty nào sẽ được hiển thị +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}không sử dụng @@ -2687,10 +2701,52 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Nhóm OpenTTD # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Tốc độ khung hình +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Tốc độ khung giả lập game: {STRING} +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Số nhịp đếm giả lập trong mỗi giây +STR_FRAMERATE_RATE_BLITTER :{WHITE}Tốc độ khung hình: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Số khu hình vẽ lại mỗi giây. +STR_FRAMERATE_SPEED_FACTOR :{WHITE}Chỉ số vận tốc game hiện tại: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Tốc độ chạy game hiện tại, so với tốc độ bình thường +STR_FRAMERATE_CURRENT :{WHITE}Hiện tại +STR_FRAMERATE_AVERAGE :{WHITE}Trung bình +STR_FRAMERATE_DATA_POINTS :{WHITE}Dữ liệu được tính theo số đo {COMMA} +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE} khung/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} khung/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} khung/s +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{WHITE}Tổng vòng lặp khung hình game: +STR_FRAMERATE_GL_ECONOMY :{WHITE} Xử lý bốc dỡ hàng: +STR_FRAMERATE_GL_TRAINS :{WHITE} Nhịp của tàu hoả: +STR_FRAMERATE_GL_ROADVEHS :{WHITE} Nhịp của xe ô-tô +STR_FRAMERATE_GL_SHIPS :{WHITE} Số nhịp của tàu thủy: +STR_FRAMERATE_GL_AIRCRAFT :{WHITE} Số nhịp của máy bay: +STR_FRAMERATE_GL_LANDSCAPE :{WHITE} Nhịp của bản đồ game: +STR_FRAMERATE_GL_LINKGRAPH :{WHITE} Độ trễ tính toán đồ thị: +STR_FRAMERATE_DRAWING :{WHITE}Cách vẽ đồ hoạ game: +STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Khung nhìn toàn bản đồ: STR_FRAMERATE_VIDEO :Nguồn xuất hình: +STR_FRAMERATE_SOUND :{WHITE}Trộn âm thanh: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Vòng lặp khung hình game +STR_FRAMETIME_CAPTION_GL_ECONOMY :Bốc dỡ hàng +STR_FRAMETIME_CAPTION_GL_TRAINS :Nhịp cho tàu hoả +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Số nhịp xe ôtô +STR_FRAMETIME_CAPTION_GL_SHIPS :Nhịp của tàu thủy +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Nhịp cho máy bay +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Nhịp của bản đồ +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Độ trễ tính toán đồ thị +STR_FRAMETIME_CAPTION_DRAWING :Cách vẽ đồ hoạ game +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Khung vẽ cả bản đồ game +STR_FRAMETIME_CAPTION_VIDEO :Ngõ xuất hình +STR_FRAMETIME_CAPTION_SOUND :Trộn âm thanh ############ End of leave-in-this-order @@ -2978,6 +3034,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Nhập t STR_TOWN_DIRECTORY_CAPTION :{WHITE}Đô Thị STR_TOWN_DIRECTORY_NONE :{ORANGE}- Không Có - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (đô thị){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Tên các đô thị - nháy vào tên để xem trung tâm đô thị. Ctrl+Click mở cửa sổ mới về vị trí đô thị STR_TOWN_POPULATION :{BLACK}Dân số thế giới: {COMMA} @@ -2985,6 +3042,7 @@ STR_TOWN_POPULATION :{BLACK}Dân s STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Thành Phố) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Dân số: {ORANGE}{COMMA}{BLACK} Toà nhà: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} tháng trước: {ORANGE}{COMMA}{BLACK} tối đa: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Hàng hoá cần để đô thị tăng trưởng: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} được yêu cầu STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} Yêu cầu trong mùa đông @@ -4231,6 +4289,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... đâ STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... đường quay mặt sai hướng STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... đi qua điểm dừng không thể đi qua góc STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... đi qua điểm dừng không thể có ngã rẽ +STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... đường 1 chiều hoặc bị chặn # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Không thể xoá bỏ một phần của ga... @@ -4482,6 +4541,8 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Âm thanh gốc STR_BASESOUNDS_WIN_DESCRIPTION :Âm thanh gốc từ phiên bản Transport Tycoon Deluxe trên Windows STR_BASESOUNDS_NONE_DESCRIPTION :Gói âm thanh này không có âm thanh nào. STR_BASEMUSIC_WIN_DESCRIPTION :Nhạc gốc từ phiên bản Transport Tycoon Deluxe trên Windows +STR_BASEMUSIC_DOS_DESCRIPTION :Nhạc của nguyên bản Transport Tycoon Deluxe cho DOS. +STR_BASEMUSIC_TTO_DESCRIPTION :Nhạc của nguyên bản Transport Tycoon (Original/World Editor) cho DOS. STR_BASEMUSIC_NONE_DESCRIPTION :Gói âm nhạc này không có nhạc nào. ##id 0x2000 From 9cf999bca7d6e1b53ffaf62c72a0abb65aa0211c Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 3 Oct 2018 19:45:41 +0200 Subject: [PATCH 038/622] Update: Translations from eints korean: 2 changes by telk5093 --- src/lang/korean.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index f7bb3cd59c..74f754876a 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -816,6 +816,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(사장) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING}은(는) 새로운 도시 {TOWN}을(를) 건설했습니다! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}{TOWN} - 새 도시가 생겼습니다! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}{1:TOWN} 근처에 새로운 {0:STRING}{G 0 "이" "가"} 건설되고 있습니다! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}새 {STRING}{G 0 "이" "가"} {TOWN} 근처에서 자라나고 있습니다! @@ -928,6 +929,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :남아프리카 STR_GAME_OPTIONS_CURRENCY_CUSTOM :사용자 설정... STR_GAME_OPTIONS_CURRENCY_GEL :그루지야 라리 (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :이란 리알 (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :신 러시아 루블 (RUB) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}차량 통행 방식 From fbfa4eb5920b10f57b9fc72730206f4a05c3638d Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 8 Oct 2018 19:45:44 +0200 Subject: [PATCH 039/622] Update: Translations from eints polish: 3 changes by xaxa --- src/lang/polish.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lang/polish.txt b/src/lang/polish.txt index efeb48dc9e..0b3f4ca1cb 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3072,13 +3072,16 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 Zespół OpenTTD # Framerate display window +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Liczba renderowanych klatek wideo na sekundę. STR_FRAMERATE_CURRENT :{WHITE}Obecny ############ Leave those lines in this order!! +STR_FRAMERATE_GL_LINKGRAPH :{WHITE} Opóźnienie wykresu połączeń: STR_FRAMERATE_VIDEO :{WHITE}Wyjście video: STR_FRAMERATE_SOUND :{WHITE}Miksowanie dźwięku: ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_VIDEO :Wyjście wideo +STR_FRAMETIME_CAPTION_SOUND :Miksowanie dźwięku ############ End of leave-in-this-order From e00908f5e900ac5314930b2775eb38f91a6c4abe Mon Sep 17 00:00:00 2001 From: Miguel Horta Date: Thu, 11 Oct 2018 00:33:37 +0100 Subject: [PATCH 040/622] Fix #6898: Replace atoi() with strtoul() Normalize type and parsing of generation_seed across all files Add assert_compile() to ensure correct type --- src/genworld.h | 4 ++-- src/genworld_gui.cpp | 2 +- src/openttd.cpp | 6 ++++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/genworld.h b/src/genworld.h index ea3faa15fc..1b1c806e09 100644 --- a/src/genworld.h +++ b/src/genworld.h @@ -22,7 +22,7 @@ enum LandscapeGenerator { LG_TERRAGENESIS = 1, ///< TerraGenesis Perlin landscape generator }; -static const uint GENERATE_NEW_SEED = UINT_MAX; ///< Create a new random seed +static const uint32 GENERATE_NEW_SEED = UINT32_MAX; ///< Create a new random seed /** Modes for GenerateWorld */ enum GenWorldMode { @@ -97,7 +97,7 @@ void SetGeneratingWorldProgress(GenWorldProgress cls, uint total); void IncreaseGeneratingWorldProgress(GenWorldProgress cls); void PrepareGenerateWorldProgress(); void ShowGenerateWorldProgress(); -void StartNewGameWithoutGUI(uint seed); +void StartNewGameWithoutGUI(uint32 seed); void ShowCreateScenario(); void StartScenarioEditor(); diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index 04eea8e660..b22ba5287e 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -870,7 +870,7 @@ void StartScenarioEditor() * Start a normal game without the GUI. * @param seed The seed of the new game. */ -void StartNewGameWithoutGUI(uint seed) +void StartNewGameWithoutGUI(uint32 seed) { /* GenerateWorld takes care of the possible GENERATE_NEW_SEED value in 'seed' */ _settings_newgame.game_creation.generation_seed = seed; diff --git a/src/openttd.cpp b/src/openttd.cpp index 510f00427e..a849a2ebd9 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -385,7 +385,7 @@ void OpenBrowser(const char *url) /** Callback structure of statements to be executed after the NewGRF scan. */ struct AfterNewGRFScan : NewGRFScanCallback { Year startyear; ///< The start year. - uint generation_seed; ///< Seed for the new game. + uint32 generation_seed; ///< Seed for the new game. char *dedicated_host; ///< Hostname for the dedicated server. uint16 dedicated_port; ///< Port for the dedicated server. char *network_conn; ///< Information about the server to connect to, or NULL. @@ -394,6 +394,8 @@ struct AfterNewGRFScan : NewGRFScanCallback { bool *save_config_ptr; ///< The pointer to the save config setting. bool save_config; ///< The save config setting. + assert_compile(sizeof(generation_seed) == sizeof(_settings_game.game_creation.generation_seed)); + /** * Create a new callback. * @param save_config_ptr Pointer to the save_config local variable which @@ -666,7 +668,7 @@ int openttd_main(int argc, char *argv[]) goto exit_noshutdown; } - case 'G': scanner->generation_seed = atoi(mgo.opt); break; + case 'G': scanner->generation_seed = strtoul(mgo.opt, NULL, 10); break; case 'c': free(_config_file); _config_file = stredup(mgo.opt); break; case 'x': scanner->save_config = false; break; case 'h': From 42b00c3b39c32dd063f9b3b88f76f9caa6935817 Mon Sep 17 00:00:00 2001 From: Miguel Horta Date: Sat, 13 Oct 2018 12:34:57 +0100 Subject: [PATCH 041/622] Fix #6938: Don't change company value to perform cost estimations (#6939) These meddling kids dared to play with magic, but the ancients texts weren't ready for that. Refactors logic to estimate costs that dated to even before OpenTTD 0.1; --- src/misc_gui.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index dd75410628..cb2e2d3180 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -193,11 +193,8 @@ public: StringID str = STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A; Company *c = Company::GetIfValid(_local_company); if (c != NULL) { - Money old_money = c->money; - c->money = INT64_MAX; assert(_current_company == _local_company); - CommandCost costclear = DoCommand(tile, 0, 0, DC_NONE, CMD_LANDSCAPE_CLEAR); - c->money = old_money; + CommandCost costclear = DoCommand(tile, 0, 0, DC_QUERY_COST, CMD_LANDSCAPE_CLEAR); if (costclear.Succeeded()) { Money cost = costclear.GetCost(); if (cost < 0) { From bddf25c36add1ba0dd1034ca9b662138f224f8d7 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 23 Oct 2018 19:45:44 +0200 Subject: [PATCH 042/622] Update: Translations from eints portuguese (brazilian): 66 changes by Tucalipe --- src/lang/brazilian_portuguese.txt | 74 +++++++++++++++++++++++++++---- 1 file changed, 66 insertions(+), 8 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index fd61397862..4d35f97672 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -33,7 +33,7 @@ STR_CARGO_PLURAL_COAL :{G=m}Carvão STR_CARGO_PLURAL_MAIL :{G=f}Correspondências STR_CARGO_PLURAL_OIL :{G=m}Petróleo STR_CARGO_PLURAL_LIVESTOCK :{G=m}Gado -STR_CARGO_PLURAL_GOODS :{G=f}Bens +STR_CARGO_PLURAL_GOODS :{G=m}Bens STR_CARGO_PLURAL_GRAIN :{G=m}Cereais STR_CARGO_PLURAL_WOOD :{G=f}Madeira STR_CARGO_PLURAL_IRON_ORE :{G=m}Minério de Ferro @@ -147,7 +147,7 @@ STR_ABBREV_MAIZE :{TINY_FONT}MI STR_ABBREV_FRUIT :{TINY_FONT}FT STR_ABBREV_DIAMONDS :{TINY_FONT}DM STR_ABBREV_FOOD :{TINY_FONT}AL -STR_ABBREV_PAPER :{TINY_FONT}PL +STR_ABBREV_PAPER :{TINY_FONT}PP STR_ABBREV_GOLD :{TINY_FONT}OU STR_ABBREV_WATER :{TINY_FONT}AG STR_ABBREV_WHEAT :{TINY_FONT}TG @@ -220,7 +220,7 @@ STR_UNITS_FORCE_IMPERIAL :{COMMA}{NBSP}lb STR_UNITS_FORCE_METRIC :{COMMA}{NBSP}kgf STR_UNITS_FORCE_SI :{COMMA}{NBSP}kN -STR_UNITS_HEIGHT_IMPERIAL :{COMMA}{NBSP}pés +STR_UNITS_HEIGHT_IMPERIAL :{COMMA}{NBSP}pé{P "" s} STR_UNITS_HEIGHT_METRIC :{COMMA}{NBSP}m STR_UNITS_HEIGHT_SI :{COMMA}{NBSP}m @@ -476,6 +476,7 @@ STR_ABOUT_MENU_SCREENSHOT :Captura de tela STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Ampliado em captura de tela STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Captura de tela em ampliação padrão STR_ABOUT_MENU_GIANT_SCREENSHOT :Captura de tela do mapa inteiro +STR_ABOUT_MENU_SHOW_FRAMERATE :Exibir taxa de quadros STR_ABOUT_MENU_ABOUT_OPENTTD :Sobre 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Alinhador de "sprites" STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Alternar caixas limítrofes @@ -651,6 +652,7 @@ STR_MUSIC_RULER_MARKER :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Nenhuma música disponível STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Faixa STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Título @@ -671,11 +673,14 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Alternar STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Exibir janela de seleção de faixas de música # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Programação Musical - '{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} '{STRING}' STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Índice de faixas STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Programa - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Limpar +STR_PLAYLIST_CHANGE_SET :{BLACK}Alterar set STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Limpar programa atual (apenas Personalizado 1 ou Personalizado 2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Altera a seleção de músicas para outro set instalado STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Clique na faixa de música para a adicionar ao programa atual (apenas Personalizado 1 ou Personalizado 2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Clique na faixa de música para remover do programa atual (apenas Personalizado 1 ou Personalizado 2) @@ -811,6 +816,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Gerente) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} patrocinou a construção da nova cidade {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Uma nova cidade, {TOWN}, foi construída! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Nov{G o a} {STRING} em construção próximo a {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Nov{G o a} {STRING} sendo plantada próximo a {TOWN}! @@ -878,10 +884,10 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC # Extra view window STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Janela {COMMA} -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Copiar para janela +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Alterar visualização STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copiar o local da tela principal para esta janela -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Colar da janela -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Colar a localização desta janela para a tela principal +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Colar da visualização principal +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Colar a localização desta janela para a visualização principal # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Opções do Jogo @@ -923,6 +929,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Rand Sul-Africa STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizado... STR_GAME_OPTIONS_CURRENCY_GEL :Lari da Georgia STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iraniano +STR_GAME_OPTIONS_CURRENCY_RUB :Novo Rublo Russo (RUB) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Automóveis @@ -1335,8 +1342,14 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Cor do terreno STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Verde STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Verde escuro STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violeta +STR_CONFIG_SETTING_SCROLLMODE :Comportamento de rolamento da janela: {STRING} +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Comportamento ao rolar o mapa +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Mover vista com BDM, posição do mouse travada +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Mover mapa com BDM, posição do mouse travada +STR_CONFIG_SETTING_SCROLLMODE_RMB :Mover mapa com BDM +STR_CONFIG_SETTING_SCROLLMODE_LMB :Move o mapa com BEM STR_CONFIG_SETTING_SMOOTH_SCROLLING :Suavizar rolamento da janela: {STRING} -STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controla como a janela principal rola para uma posição específica quando clicado no minimapa ou após localizar um objeto. Ativado torna o rolamento suave. Desativado torna o rolamento instanâneo +STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controla como a janela principal rola para uma posição específica quando clicado no minimapa ou após localizar um objeto. Ativado torna o rolamento suave. Desativado torna o rolamento instantâneo STR_CONFIG_SETTING_MEASURE_TOOLTIP :Exibe distâncias quando usar ferramentas de construção: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Exibe distâncias e diferenças de altitude quando clicando e arrastando enquanto constrói STR_CONFIG_SETTING_LIVERIES :Exibir cores avançadas: {STRING} @@ -2279,6 +2292,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Legenda STR_LINKGRAPH_LEGEND_ALL :{BLACK}Todas STR_LINKGRAPH_LEGEND_NONE :{BLACK}Nenhuma STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Selecione companhias a serem exibidas +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}não utilizado @@ -2688,9 +2702,48 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 A equipe do OpenTTD # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Taxa de quadros +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Taxa de simulação: {STRING} +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Número de tiques simulados por segundo +STR_FRAMERATE_RATE_BLITTER :{WHITE}Taxa de quadros: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Número de quadros renderizados por segundo. +STR_FRAMERATE_SPEED_FACTOR :{WHITE}Fator de velocidade do jogo atual: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Quão rápido o jogo está sendo executado, comparado com a velocidade esperada na simulação normal +STR_FRAMERATE_CURRENT :{WHITE}Atual +STR_FRAMERATE_AVERAGE :{WHITE}Médio +STR_FRAMERATE_DATA_POINTS :{WHITE}Dados baseados em {COMMA} medidas +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE} quadros/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} quadros/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} quadros/s +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GL_ECONOMY :{WHITE} Manuseio de carga: +STR_FRAMERATE_GL_TRAINS :{WHITE} Tiques de trem: +STR_FRAMERATE_GL_ROADVEHS :{WHITE} Tiques de automóveis: +STR_FRAMERATE_GL_SHIPS :{WHITE} Tiques de embarcação: +STR_FRAMERATE_GL_AIRCRAFT :{WHITE} Tiques de aeronave: +STR_FRAMERATE_GL_LANDSCAPE :{WHITE} Tiques do mundo: +STR_FRAMERATE_DRAWING :{WHITE}Renderizações de gráficos: +STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Visualizações do mundo: +STR_FRAMERATE_VIDEO :{WHITE}Saída de vídeo: +STR_FRAMERATE_SOUND :{WHITE}Mixagem de áudio: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GL_ECONOMY :Manuseio de carga +STR_FRAMETIME_CAPTION_GL_TRAINS :Tiques de trem +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Tiques de automóveis +STR_FRAMETIME_CAPTION_GL_SHIPS :Tiques de embarcação +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Tiques de aeronave: +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Tiques do mundo +STR_FRAMETIME_CAPTION_DRAWING :Renderizações de gráficos +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Renderização da janela principal +STR_FRAMETIME_CAPTION_VIDEO :Saída de vídeo +STR_FRAMETIME_CAPTION_SOUND :Mixagem de áudio ############ End of leave-in-this-order @@ -2978,6 +3031,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Coloque STR_TOWN_DIRECTORY_CAPTION :{WHITE}Cidades STR_TOWN_DIRECTORY_NONE :{ORANGE}- Nenhum - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Cidade){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Nomes das cidades - clique no nome para centralizar a visualização principal na cidade. Ctrl+Clique abre uma nova janela na localização da cidade STR_TOWN_POPULATION :{BLACK}População mundial: {COMMA} @@ -2985,6 +3039,7 @@ STR_TOWN_POPULATION :{BLACK}Populaç STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Cidade) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}População: {ORANGE}{COMMA}{BLACK} Casas: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} últ. mês: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Carga necessária para prover o crescimento: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} necessário(a) STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} necessário no inverno @@ -4231,6 +4286,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... é u STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... rua na direção errada STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... paradas "drive-thru" não podem ter esquinas STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... paradas "drive-thru" não podem ter junções +STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... rua é mão única ou está bloqueada # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Impossível remover parte da estação... @@ -4299,7 +4355,7 @@ STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Impossí STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Remova os semáforos antes STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Tipo de linha não apropriado STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Remova a ferrovia antes -STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Rua é mão única ou está bloqueado +STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Rua é mão única ou está bloqueada STR_ERROR_CROSSING_DISALLOWED :{WHITE}Cruzamentos de nível não são permitidos para esse tipo de trilho STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Impossível construir sinais aqui... STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Impossível construir ferrovia aqui... @@ -4482,6 +4538,8 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Sons Originais STR_BASESOUNDS_WIN_DESCRIPTION :Sons Originais do Transport Tycoon Deluxe, Edição Windows. STR_BASESOUNDS_NONE_DESCRIPTION :Um pacote de sons sem sons. STR_BASEMUSIC_WIN_DESCRIPTION :Música Original do Transport Tycoon Deluxe, Edição Windows +STR_BASEMUSIC_DOS_DESCRIPTION :Música Original do Transport Tycoon Deluxe DOS. +STR_BASEMUSIC_TTO_DESCRIPTION :Música Original do Transport Tycoon DOS STR_BASEMUSIC_NONE_DESCRIPTION :Um pacote de músicas sem músicas. ##id 0x2000 From eff09c43cd49819d1dbc9dfcb267cd274345097e Mon Sep 17 00:00:00 2001 From: Samu Date: Thu, 11 Oct 2018 01:01:34 +0100 Subject: [PATCH 043/622] Fix #4109: Add more water checks to the Oil Rig layout Prevents Oil Rig docking tile from becoming unreachable by ships when spawning next to each other. --- src/table/build_industry.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/table/build_industry.h b/src/table/build_industry.h index 5ae93bc7ed..a0783332ef 100644 --- a/src/table/build_industry.h +++ b/src/table/build_industry.h @@ -293,6 +293,19 @@ static const IndustryTileTable _tile_table_oil_rig_0[] = { MK(-2, -4, 255), MK(-3, -4, 255), MK(2, 0, 255), + MK(2, -1, 255), + MK(1, -1, 255), + MK(0, -1, 255), + MK(-1, -1, 255), + MK(-1, 0, 255), + MK(-1, 1, 255), + MK(-1, 2, 255), + MK(-1, 3, 255), + MK(0, 3, 255), + MK(1, 3, 255), + MK(2, 3, 255), + MK(2, 2, 255), + MK(2, 1, 255), MKEND }; From 47ff673664a14e250bf01af6f29c65abb1e0975e Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 26 Oct 2018 19:45:42 +0200 Subject: [PATCH 044/622] Update: Translations from eints finnish: 25 changes by ln --- src/lang/finnish.txt | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 65f7e27286..e6f07785f7 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -475,6 +475,7 @@ STR_ABOUT_MENU_SCREENSHOT :Kuvakaappaus STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Täysin lähennetty kuvakaappaus STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Kuvakaappaus oletuslähennystasolla STR_ABOUT_MENU_GIANT_SCREENSHOT :Koko kartan kuvakaappaus +STR_ABOUT_MENU_SHOW_FRAMERATE :Näytä kuvataajuus STR_ABOUT_MENU_ABOUT_OPENTTD :Tietoja OpenTTD:stä STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite-kohdistaja STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Reunat päälle/pois @@ -650,6 +651,7 @@ STR_MUSIC_RULER_MARKER :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Musiikkia ei ole saatavilla STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Raita STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Nimi @@ -810,6 +812,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(pääjohtaja) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} rahoitti uuden kaupungin, {TOWN}, rakentamista! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Uusi kaupunki {TOWN} rakennettu! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Uusi {STRING} rakennetaan kaupungin {TOWN} lähistölle! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Uusi {STRING} istutetaan kaupungin {TOWN} lähistölle! @@ -1334,6 +1337,10 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Maaston väri k STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Vihreä STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Tummanvihreä STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violetti +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Toiminta karttaa vieritettäessä +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Siirrä karttaa hiiren oikealla painikkeella, hiiren sijainti lukiten +STR_CONFIG_SETTING_SCROLLMODE_RMB :Siirrä karttaa hiiren oikealla painikkeella +STR_CONFIG_SETTING_SCROLLMODE_LMB :Siirrä karttaa hiiren vasemmalla painikkeella STR_CONFIG_SETTING_SMOOTH_SCROLLING :Näkymän tasainen vieritys: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Hallitse miten päänäkymä siirtyy valittuun paikkaan karttaa klikattaessa tai käytettäessä komentoa joka muuttaa näkymän sijaintia. Mikäli käytössä, päänäkymä siirtyy uuteen sijaintiin pehmeäesti, muutoin se hyppää suoraan valittuun sijaintiin STR_CONFIG_SETTING_MEASURE_TOOLTIP :Näytä mittauksen työkaluvihje, kun käytetään rakennustyökaluja: {STRING} @@ -1593,7 +1600,7 @@ STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :Tavallinen STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Nopea STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Erittäin nopea STR_CONFIG_SETTING_LARGER_TOWNS :Suurkaupunkien osuus: {STRING} -STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Suurkaupungiksi muuttuvien kaupunkien määrä, eli kaupungit jotka ovat suurempia ja kasvavat nopeammin +STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Suurkaupungiksi muuttuvien kaupunkien määrä, eli suurempana aloittavat ja nopeammin kasvavat kaupungit STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 / {COMMA} STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Ei yhtään STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Kasvukerroin alussa: {STRING} @@ -2278,6 +2285,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Rahtivir STR_LINKGRAPH_LEGEND_ALL :{BLACK}Kaikki STR_LINKGRAPH_LEGEND_NONE :{BLACK}Ei mitään STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Valitse näytettävät yhtiöt +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}käyttämätön @@ -2687,9 +2695,23 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD- STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 The OpenTTD team # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Kuvataajuus +STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Simulaationopeus: {STRING} +STR_FRAMERATE_RATE_BLITTER :{WHITE}Grafiikan kuvataajuus: {STRING} +STR_FRAMERATE_SPEED_FACTOR :{WHITE}Pelin nykyinen nopeuskerroin: {DECIMAL}× +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE} kuvaa/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} kuvaa/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} kuvaa/s +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_VIDEO :{WHITE}Videolähtö: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_VIDEO :Videolähtö ############ End of leave-in-this-order @@ -2977,6 +2999,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Syötä STR_TOWN_DIRECTORY_CAPTION :{WHITE}Kaupungit STR_TOWN_DIRECTORY_NONE :{ORANGE}- Ei mitään - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (suurkaup.){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Kaupunkien nimet - nimen klikkaaminen keskittää päänäkymän kaupunkiin. Ctrl+Klik avaa uuden näkymäikkunan kaupungin sijaintiin STR_TOWN_POPULATION :{BLACK}Maailman asukasluku: {COMMA} @@ -4229,6 +4252,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... kaup STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... tie on väärin päin STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... läpiajettavissa pysäkeissä ei voi olla mutkia STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... läpiajettavissa pysäkeissä ei voi olla risteyksiä +STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... tie on yksisuuntainen tai suljettu # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Aseman osaa ei voi poistaa... From 25ab9c1997f770f4a8a66bb3ad4b82ba87e3a977 Mon Sep 17 00:00:00 2001 From: Jindrich Makovicka Date: Sun, 16 Sep 2018 18:26:04 +0200 Subject: [PATCH 045/622] Codechange: Improve (un)zoom performance When zooming out with a high res display, there can be about 150k sprites to be sorted before displaying. With the O(n^2) complexity of the sprite sorter, this can take several seconds. This patch works around this by sorting the sprites by the xmin coordinate first using QSort, which later allows an early bailout out of the inner loop. This is enough to cut down the full unzoom time on a 4k display to a fraction of second. --- src/viewport.cpp | 20 +++++++++++++++++--- src/viewport_sprite_sorter_sse4.cpp | 25 ++++++++++++++++++++++--- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/src/viewport.cpp b/src/viewport.cpp index cb0b36f40f..6e7dfc4951 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -88,6 +88,7 @@ #include "command_func.h" #include "network/network_func.h" #include "framerate_type.h" +#include "core/sort_func.hpp" #include @@ -1379,11 +1380,22 @@ static bool ViewportSortParentSpritesChecker() return true; } +static int CDECL CompareParentSprites(ParentSpriteToDraw * const *psd, ParentSpriteToDraw * const *psd2) +{ + const ParentSpriteToDraw *ps = *psd; + const ParentSpriteToDraw *ps2 = *psd2; + return ps->xmin - ps2->xmin; +} + /** Sort parent sprites pointer array */ static void ViewportSortParentSprites(ParentSpriteToSortVector *psdv) { ParentSpriteToDraw **psdvend = psdv->End(); ParentSpriteToDraw **psd = psdv->Begin(); + + /* pre-sort by xmin in ascending order */ + QSortT(psd, psdvend - psd, CompareParentSprites); + while (psd != psdvend) { ParentSpriteToDraw *ps = *psd; @@ -1420,9 +1432,11 @@ static void ViewportSortParentSprites(ParentSpriteToSortVector *psdv) * I.e. every single order of X, Y, Z says ps2 is behind ps or they overlap. * That is: If one partial order says ps behind ps2, do not change the order. */ - if (ps->xmax < ps2->xmin || - ps->ymax < ps2->ymin || - ps->zmax < ps2->zmin) { + if (ps->xmax < ps2->xmin) { + /* all following sprites have xmin >= ps2->xmin */ + break; + } + if (ps->ymax < ps2->ymin || ps->zmax < ps2->zmin) { continue; } } diff --git a/src/viewport_sprite_sorter_sse4.cpp b/src/viewport_sprite_sorter_sse4.cpp index 05a7f8aa1c..e685fff572 100644 --- a/src/viewport_sprite_sorter_sse4.cpp +++ b/src/viewport_sprite_sorter_sse4.cpp @@ -15,6 +15,7 @@ #include "cpu.h" #include "smmintrin.h" #include "viewport_sprite_sorter.h" +#include "core/sort_func.hpp" #include "safeguards.h" @@ -25,12 +26,24 @@ #define LOAD_128 _mm_loadu_si128 #endif +static int CDECL CompareParentSprites(ParentSpriteToDraw * const *psd, ParentSpriteToDraw * const *psd2) +{ + const ParentSpriteToDraw *ps = *psd; + const ParentSpriteToDraw *ps2 = *psd2; + return ps->xmin - ps2->xmin; +} + /** Sort parent sprites pointer array using SSE4.1 optimizations. */ void ViewportSortParentSpritesSSE41(ParentSpriteToSortVector *psdv) { - const __m128i mask_ptest = _mm_setr_epi8(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0); + const __m128i mask_ptest = _mm_setr_epi8(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0); + const __m128i mask_ptest2 = _mm_setr_epi8(-1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); ParentSpriteToDraw ** const psdvend = psdv->End(); ParentSpriteToDraw **psd = psdv->Begin(); + + /* pre-sort by xmin in ascending order */ + QSortT(psd, psdvend - psd, CompareParentSprites); + while (psd != psdvend) { ParentSpriteToDraw * const ps = *psd; @@ -64,8 +77,14 @@ void ViewportSortParentSpritesSSE41(ParentSpriteToSortVector *psdv) __m128i ps1_max = LOAD_128((__m128i*) &ps->xmax); __m128i ps2_min = LOAD_128((__m128i*) &ps2->xmin); __m128i rslt1 = _mm_cmplt_epi32(ps1_max, ps2_min); - if (!_mm_testz_si128(mask_ptest, rslt1)) - continue; + if (!_mm_testz_si128(mask_ptest, rslt1)) { + if (!_mm_testz_si128(mask_ptest2, rslt1) /* ps->xmax < ps2->xmin */) { + /* all following sprites have xmin >= ps2->xmin */ + break; + } else { + continue; + } + } __m128i ps1_min = LOAD_128((__m128i*) &ps->xmin); __m128i ps2_max = LOAD_128((__m128i*) &ps2->xmax); From 50efaa2372cafe430f79ecc3361cb2450715417c Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sat, 27 Oct 2018 08:17:40 +0200 Subject: [PATCH 046/622] Fix e00908f: Visual C++ 2015 compile error Microsoft Visual C++ 2015 Update 3 (and possibly other versions) consider a struct member undefined in a static_assert in the struct body. Moving the static_assert to a member function solves the issue. --- src/openttd.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/openttd.cpp b/src/openttd.cpp index a849a2ebd9..3e11cf0386 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -394,8 +394,6 @@ struct AfterNewGRFScan : NewGRFScanCallback { bool *save_config_ptr; ///< The pointer to the save config setting. bool save_config; ///< The save config setting. - assert_compile(sizeof(generation_seed) == sizeof(_settings_game.game_creation.generation_seed)); - /** * Create a new callback. * @param save_config_ptr Pointer to the save_config local variable which @@ -407,6 +405,9 @@ struct AfterNewGRFScan : NewGRFScanCallback { join_server_password(NULL), join_company_password(NULL), save_config_ptr(save_config_ptr), save_config(true) { + /* Visual C++ 2015 fails compiling this line (AfterNewGRFScan::generation_seed undefined symbol) + * if it's placed outside a member function, directly in the struct body. */ + assert_compile(sizeof(generation_seed) == sizeof(_settings_game.game_creation.generation_seed)); } virtual void OnNewGRFsScanned() From 350395a6c2a7e5551421caf7c971f02084c50891 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Tue, 30 Oct 2018 15:56:34 +0100 Subject: [PATCH 047/622] Fix: Missing m8 data in console when using Query tool When map array 8 was added, the Query tool wasn't updated to also print the value there to the console, in debug builds. --- src/misc_gui.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index cb2e2d3180..df00459775 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -132,6 +132,7 @@ public: DEBUG(misc, LANDINFOD_LEVEL, "m5 = %#x", _m[tile].m5); DEBUG(misc, LANDINFOD_LEVEL, "m6 = %#x", _me[tile].m6); DEBUG(misc, LANDINFOD_LEVEL, "m7 = %#x", _me[tile].m7); + DEBUG(misc, LANDINFOD_LEVEL, "m8 = %#x", _me[tile].m8); #undef LANDINFOD_LEVEL } From f3dbb3f676c8f734de37ebbb1aa755c403483479 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Tue, 30 Oct 2018 15:54:08 +0100 Subject: [PATCH 048/622] Fix #6951: Ensure RailTypes bitfield is always treated as 64 bit Some compilers (like VC++ 2015) will otherwise narrow it in some contexts where it should not be. --- src/rail_type.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/rail_type.h b/src/rail_type.h index ebca7ec35d..2bd602a37e 100644 --- a/src/rail_type.h +++ b/src/rail_type.h @@ -47,9 +47,10 @@ template <> struct EnumPropsT : MakeEnumPropsT RailTypeByte; /** - * The different roadtypes we support, but then a bitmask of them + * The different railtypes we support, but then a bitmask of them. + * @note Must be treated as a uint64 type, narrowing it causes bit membership tests to give wrong results, as in bug #6951. */ -enum RailTypes { +enum RailTypes : uint64 { RAILTYPES_NONE = 0, ///< No rail types RAILTYPES_RAIL = 1 << RAILTYPE_RAIL, ///< Non-electrified rails RAILTYPES_ELECTRIC = 1 << RAILTYPE_ELECTRIC, ///< Electrified rails From b9273cbe07aa47daa8a9d2411062dfd7fead27de Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sat, 27 Oct 2018 18:39:15 +0100 Subject: [PATCH 049/622] Update: Doxyfile --- Doxyfile | 170 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 145 insertions(+), 25 deletions(-) diff --git a/Doxyfile b/Doxyfile index 58d7f0a89a..34a47a38c5 100644 --- a/Doxyfile +++ b/Doxyfile @@ -8,9 +8,14 @@ #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- +DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = OpenTTD +PROJECT_NUMBER = +PROJECT_BRIEF = +PROJECT_LOGO = OUTPUT_DIRECTORY = docs/source/ CREATE_SUBDIRS = NO +ALLOW_UNICODE_NAMES = NO OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES @@ -32,22 +37,42 @@ STRIP_FROM_PATH = ./ STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = YES +QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO INHERIT_DOCS = YES -DISTRIBUTE_GROUP_DOC = NO +SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 2 ALIASES = +TCL_SUBST = OPTIMIZE_OUTPUT_FOR_C = YES OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_OUTPUT_VHDL = NO +EXTENSION_MAPPING = +MARKDOWN_SUPPORT = YES +TOC_INCLUDE_HEADINGS = 0 +AUTOLINK_SUPPORT = YES +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +IDL_PROPERTY_SUPPORT = YES +DISTRIBUTE_GROUP_DOC = NO +GROUP_NESTED_COMPOUNDS = NO SUBGROUPING = YES +INLINE_GROUPED_CLASSES = NO +INLINE_SIMPLE_STRUCTS = NO +TYPEDEF_HIDES_STRUCT = NO +LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = NO EXTRACT_PRIVATE = YES +EXTRACT_PACKAGE = NO EXTRACT_STATIC = YES EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = YES +EXTRACT_ANON_NSPACES = NO HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO @@ -55,11 +80,17 @@ HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO CASE_SENSE_NAMES = YES HIDE_SCOPE_NAMES = NO +HIDE_COMPOUND_REFERENCE= NO SHOW_INCLUDE_FILES = YES +SHOW_GROUPED_MEMB_INC = NO +FORCE_LOCAL_INCLUDES = NO INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO +SORT_MEMBERS_CTORS_1ST = NO +SORT_GROUP_NAMES = NO SORT_BY_SCOPE_NAME = NO +STRICT_PROTO_MATCHING = NO GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES @@ -67,22 +98,27 @@ GENERATE_DEPRECATEDLIST= YES ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES -SHOW_DIRECTORIES = YES +SHOW_FILES = YES +SHOW_NAMESPACES = YES FILE_VERSION_FILTER = +LAYOUT_FILE = +CITE_BIB_FILES = #--------------------------------------------------------------------------- -# configuration options related to warning and progress messages +# Configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO +WARN_AS_ERROR = NO WARN_FORMAT = "$file:$line: $text" WARN_LOGFILE = #--------------------------------------------------------------------------- -# configuration options related to the input files +# Configuration options related to the input files #--------------------------------------------------------------------------- INPUT = ./src/ +INPUT_ENCODING = UTF-8 FILE_PATTERNS = *.c \ *.cc \ *.cxx \ @@ -93,31 +129,39 @@ FILE_PATTERNS = *.c \ RECURSIVE = YES EXCLUDE = EXCLUDE_SYMLINKS = NO -EXCLUDE_PATTERNS = */3rdparty */.svn */script/api +EXCLUDE_PATTERNS = */3rdparty \ + */.svn \ + */script/api +EXCLUDE_SYMBOLS = EXAMPLE_PATH = EXAMPLE_PATTERNS = * EXAMPLE_RECURSIVE = NO -IMAGE_PATH =./docs/ +IMAGE_PATH = ./docs/ INPUT_FILTER = FILTER_PATTERNS = FILTER_SOURCE_FILES = NO +FILTER_SOURCE_PATTERNS = +USE_MDFILE_AS_MAINPAGE = #--------------------------------------------------------------------------- -# configuration options related to source browsing +# Configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = YES INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = YES REFERENCES_RELATION = YES +REFERENCES_LINK_SOURCE = YES +SOURCE_TOOLTIPS = YES +USE_HTAGS = NO VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index +# Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = NO COLS_IN_ALPHA_INDEX = 5 IGNORE_PREFIX = #--------------------------------------------------------------------------- -# configuration options related to the HTML output +# Configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = html @@ -125,19 +169,58 @@ HTML_FILE_EXTENSION = .html HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = -HTML_ALIGN_MEMBERS = YES +HTML_EXTRA_STYLESHEET = +HTML_EXTRA_FILES = +HTML_COLORSTYLE_HUE = 220 +HTML_COLORSTYLE_SAT = 100 +HTML_COLORSTYLE_GAMMA = 80 +HTML_TIMESTAMP = NO +HTML_DYNAMIC_MENUS = YES +HTML_DYNAMIC_SECTIONS = NO +HTML_INDEX_NUM_ENTRIES = 100 +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_BUNDLE_ID = org.doxygen.Project +DOCSET_PUBLISHER_ID = org.doxygen.Publisher +DOCSET_PUBLISHER_NAME = Publisher GENERATE_HTMLHELP = YES CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO +CHM_INDEX_ENCODING = BINARY_TOC = NO TOC_EXPAND = YES +GENERATE_QHP = NO +QCH_FILE = +QHP_NAMESPACE = org.doxygen.Project +QHP_VIRTUAL_FOLDER = doc +QHP_CUST_FILTER_NAME = +QHP_CUST_FILTER_ATTRS = +QHP_SECT_FILTER_ATTRS = +QHG_LOCATION = +GENERATE_ECLIPSEHELP = NO +ECLIPSE_DOC_ID = org.doxygen.Project DISABLE_INDEX = NO -ENUM_VALUES_PER_LINE = 4 GENERATE_TREEVIEW = YES +ENUM_VALUES_PER_LINE = 4 TREEVIEW_WIDTH = 250 +EXT_LINKS_IN_WINDOW = NO +FORMULA_FONTSIZE = 10 +FORMULA_TRANSPARENT = YES +USE_MATHJAX = NO +MATHJAX_FORMAT = HTML-CSS +MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/ +MATHJAX_EXTENSIONS = +MATHJAX_CODEFILE = +SEARCHENGINE = NO +SERVER_BASED_SEARCH = NO +EXTERNAL_SEARCH = NO +SEARCHENGINE_URL = +SEARCHDATA_FILE = searchdata.xml +EXTERNAL_SEARCH_ID = +EXTRA_SEARCH_MAPPINGS = #--------------------------------------------------------------------------- -# configuration options related to the LaTeX output +# Configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = NO LATEX_OUTPUT = latex @@ -147,12 +230,18 @@ COMPACT_LATEX = NO PAPER_TYPE = a4wide EXTRA_PACKAGES = LATEX_HEADER = +LATEX_FOOTER = +LATEX_EXTRA_STYLESHEET = +LATEX_EXTRA_FILES = PDF_HYPERLINKS = NO USE_PDFLATEX = NO LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO +LATEX_SOURCE_CODE = NO +LATEX_BIB_STYLE = plain +LATEX_TIMESTAMP = NO #--------------------------------------------------------------------------- -# configuration options related to the RTF output +# Configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = rtf @@ -160,27 +249,33 @@ COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = +RTF_SOURCE_CODE = NO #--------------------------------------------------------------------------- -# configuration options related to the man page output +# Configuration options related to the man page output #--------------------------------------------------------------------------- GENERATE_MAN = NO MAN_OUTPUT = man MAN_EXTENSION = .3 +MAN_SUBDIR = MAN_LINKS = NO #--------------------------------------------------------------------------- -# configuration options related to the XML output +# Configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = NO XML_OUTPUT = xml -XML_SCHEMA = -XML_DTD = XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output +# Configuration options related to the DOCBOOK output +#--------------------------------------------------------------------------- +GENERATE_DOCBOOK = NO +DOCBOOK_OUTPUT = docbook +DOCBOOK_PROGRAMLISTING = NO +#--------------------------------------------------------------------------- +# Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- -# configuration options related to the Perl module output +# Configuration options related to the Perl module output #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO PERLMOD_LATEX = NO @@ -195,42 +290,67 @@ EXPAND_ONLY_PREDEF = YES SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = -PREDEFINED = ENABLE_NETWORK WITH_ZLIB WITH_LZO WITH_LZMA WITH_SDL WITH_PNG WITH_FONTCONFIG WITH_FREETYPE WITH_ICU_SORT WITH_ICU_LAYOUT UNICODE _UNICODE _GNU_SOURCE FINAL= +PREDEFINED = ENABLE_NETWORK \ + WITH_ZLIB \ + WITH_LZO \ + WITH_LZMA \ + WITH_SDL \ + WITH_PNG \ + WITH_FONTCONFIG \ + WITH_FREETYPE \ + WITH_ICU_SORT \ + WITH_ICU_LAYOUT \ + UNICODE \ + _UNICODE \ + _GNU_SOURCE \ + FINAL= EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- -# Configuration::additions related to external references +# Configuration options related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = objs/openttd.tag ALLEXTERNALS = NO EXTERNAL_GROUPS = YES +EXTERNAL_PAGES = YES PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES +MSCGEN_PATH = +DIA_PATH = HIDE_UNDOC_RELATIONS = YES HAVE_DOT = NO +DOT_NUM_THREADS = 0 +DOT_FONTNAME = Helvetica +DOT_FONTSIZE = 10 +DOT_FONTPATH = CLASS_GRAPH = YES COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES UML_LOOK = NO +UML_LIMIT_NUM_FIELDS = 10 TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES CALL_GRAPH = NO +CALLER_GRAPH = NO GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES DOT_IMAGE_FORMAT = png +INTERACTIVE_SVG = NO DOT_PATH = DOTFILE_DIRS = +MSCFILE_DIRS = +DIAFILE_DIRS = +PLANTUML_JAR_PATH = +PLANTUML_CFG_FILE = +PLANTUML_INCLUDE_PATH = +DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 1000 DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = NO GENERATE_LEGEND = YES DOT_CLEANUP = YES -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- -SEARCHENGINE = NO From f5b1115039e41d7f75f91e7355003f10dd01b352 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sun, 28 Oct 2018 02:17:36 +0000 Subject: [PATCH 050/622] Doc: Lots and lots of doxymentation fixes --- Doxyfile | 7 +++--- src/aircraft_cmd.cpp | 12 +++++----- src/autoreplace_cmd.cpp | 3 +-- src/autoreplace_gui.cpp | 2 +- src/blitter/32bpp_anim_sse4.cpp | 2 +- src/blitter/32bpp_anim_sse4.hpp | 2 +- src/blitter/32bpp_sse_type.h | 8 +++---- src/bridge_map.cpp | 4 ++-- src/cargopacket.cpp | 6 ++--- src/command.cpp | 1 - src/company_base.h | 2 +- src/company_cmd.cpp | 2 +- src/company_gui.cpp | 8 +------ src/console.cpp | 4 ++-- src/console_cmds.cpp | 8 +++---- src/core/smallmatrix_type.hpp | 12 +++++----- src/depend/depend.cpp | 36 ++++++++++++++--------------- src/dock_gui.cpp | 4 ++-- src/economy.cpp | 1 - src/engine.cpp | 2 +- src/error_gui.cpp | 2 +- src/fileio.cpp | 9 ++++---- src/fios_gui.cpp | 2 +- src/game/game_text.cpp | 2 +- src/gamelog.cpp | 6 ++--- src/gfx.cpp | 14 +++++------ src/gfx_type.h | 2 +- src/gfxinit.cpp | 2 +- src/goal_gui.cpp | 8 +++---- src/group_cmd.cpp | 2 +- src/group_gui.cpp | 12 +++++----- src/heightmap.cpp | 6 ++--- src/industry_cmd.cpp | 28 +++++++++++----------- src/industry_gui.cpp | 4 ++-- src/ini_type.h | 2 +- src/linkgraph/demands.cpp | 1 - src/linkgraph/demands.h | 2 +- src/linkgraph/flowmapper.cpp | 2 +- src/linkgraph/linkgraph.cpp | 2 -- src/linkgraph/linkgraph_gui.cpp | 2 +- src/linkgraph/mcf.cpp | 4 ++-- src/map_type.h | 2 +- src/misc/dbg_helpers.cpp | 6 ++--- src/misc/getoptdata.h | 2 +- src/misc_gui.cpp | 4 ++-- src/music/midifile.cpp | 4 ++-- src/music/music_driver.hpp | 2 +- src/network/network_content_gui.cpp | 2 +- src/network/network_server.cpp | 2 +- src/newgrf.cpp | 12 +++++----- src/newgrf_airport.cpp | 1 - src/newgrf_animation_base.h | 1 - src/newgrf_generic.cpp | 6 ++--- src/newgrf_gui.cpp | 4 ++-- src/newgrf_industries.cpp | 2 +- src/newgrf_industrytiles.cpp | 2 +- src/newgrf_object.cpp | 4 ++-- src/newgrf_railtype.cpp | 4 ++-- src/newgrf_spritegroup.cpp | 4 ++-- src/newgrf_station.cpp | 2 +- src/newgrf_text.cpp | 2 +- src/news_gui.cpp | 3 +-- src/object_gui.cpp | 5 +--- src/openttd.cpp | 4 ++-- src/order_cmd.cpp | 1 - src/os/windows/win32.cpp | 4 ++-- src/osk_gui.cpp | 4 ++-- src/pathfinder/npf/aystar.cpp | 2 +- src/pathfinder/npf/aystar.h | 8 +++---- src/pathfinder/yapf/nodelist.hpp | 2 +- src/rail.cpp | 2 +- src/rail.h | 2 +- src/road_func.h | 2 +- src/roadveh_cmd.cpp | 2 +- src/saveload/linkgraph_sl.cpp | 2 +- src/saveload/saveload.cpp | 2 +- src/saveload/saveload.h | 6 ++--- src/screenshot.cpp | 4 ++-- src/settings.cpp | 4 ++-- src/settings_type.h | 2 +- src/settingsgen/settingsgen.cpp | 7 +++--- src/ship_cmd.cpp | 2 +- src/smallmap_gui.cpp | 26 ++++++++++----------- src/station_base.h | 2 +- src/station_cmd.cpp | 8 +++---- src/station_gui.cpp | 1 - src/strgen/strgen_base.cpp | 2 +- src/string_base.h | 4 ++-- src/strings.cpp | 13 +++++------ src/textbuf.cpp | 1 - src/tile_map.cpp | 19 ++++++++------- src/tile_map.h | 2 +- src/tilematrix_type.hpp | 2 +- src/timetable_gui.cpp | 2 +- src/town_cmd.cpp | 10 ++++---- src/train_cmd.cpp | 32 ++++++++++++------------- src/tunnelbridge_cmd.cpp | 1 + src/vehicle.cpp | 4 ++-- src/vehicle_base.h | 4 ++-- src/vehicle_cmd.cpp | 4 ++-- src/vehicle_func.h | 2 +- src/vehicle_gui.cpp | 2 +- src/viewport_sprite_sorter_sse4.cpp | 2 +- src/widget.cpp | 12 +++++----- src/widget_type.h | 10 ++++---- src/widgets/cheat_widget.h | 2 +- src/widgets/dropdown.cpp | 3 +-- src/window.cpp | 7 +++--- 108 files changed, 265 insertions(+), 290 deletions(-) diff --git a/Doxyfile b/Doxyfile index 34a47a38c5..251b36be15 100644 --- a/Doxyfile +++ b/Doxyfile @@ -14,7 +14,7 @@ PROJECT_NUMBER = PROJECT_BRIEF = PROJECT_LOGO = OUTPUT_DIRECTORY = docs/source/ -CREATE_SUBDIRS = NO +CREATE_SUBDIRS = YES ALLOW_UNICODE_NAMES = NO OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES @@ -72,7 +72,7 @@ EXTRACT_PACKAGE = NO EXTRACT_STATIC = YES EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = YES -EXTRACT_ANON_NSPACES = NO +EXTRACT_ANON_NSPACES = YES HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO @@ -130,7 +130,6 @@ RECURSIVE = YES EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = */3rdparty \ - */.svn \ */script/api EXCLUDE_SYMBOLS = EXAMPLE_PATH = @@ -183,7 +182,7 @@ DOCSET_FEEDNAME = "Doxygen generated docs" DOCSET_BUNDLE_ID = org.doxygen.Project DOCSET_PUBLISHER_ID = org.doxygen.Publisher DOCSET_PUBLISHER_NAME = Publisher -GENERATE_HTMLHELP = YES +GENERATE_HTMLHELP = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index de8e0ee324..069351a511 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -248,7 +248,7 @@ void GetAircraftSpriteSize(EngineID engine, uint &width, uint &height, int &xoff * @param flags type of operation. * @param e the engine to build. * @param data unused. - * @param ret[out] the vehicle that has been built. + * @param[out] ret the vehicle that has been built. * @return the cost of this operation or an error. */ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **ret) @@ -694,9 +694,9 @@ int GetTileHeightBelowAircraft(const Vehicle *v) * When the maximum is reached the vehicle should consider descending. * When the minimum is reached the vehicle should consider ascending. * - * @param v The vehicle to get the flight levels for. - * @param [out] min_level The minimum bounds for flight level. - * @param [out] max_level The maximum bounds for flight level. + * @param v The vehicle to get the flight levels for. + * @param[out] min_level The minimum bounds for flight level. + * @param[out] max_level The maximum bounds for flight level. */ void GetAircraftFlightLevelBounds(const Vehicle *v, int *min_level, int *max_level) { @@ -728,7 +728,7 @@ void GetAircraftFlightLevelBounds(const Vehicle *v, int *min_level, int *max_lev /** * Gets the maximum 'flight level' for the holding pattern of the aircraft, - * in pixels 'z_pos' 0, depending on terrain below.. + * in pixels 'z_pos' 0, depending on terrain below. * * @param v The aircraft that may or may not need to decrease its altitude. * @return Maximal aircraft holding altitude, while in normal flight, in pixels. @@ -1889,7 +1889,7 @@ static bool FreeTerminal(Aircraft *v, byte i, byte last_terminal) /** * Get the number of terminals at the airport. - * @param afc Airport description. + * @param apc Airport description. * @return Number of terminals. */ static uint GetNumTerminals(const AirportFTAClass *apc) diff --git a/src/autoreplace_cmd.cpp b/src/autoreplace_cmd.cpp index 96eada7345..48f818c947 100644 --- a/src/autoreplace_cmd.cpp +++ b/src/autoreplace_cmd.cpp @@ -32,7 +32,6 @@ extern void ChangeVehicleViewWindow(VehicleID from_index, VehicleID to_index); * Figure out if two engines got at least one type of cargo in common (refitting if needed) * @param engine_a one of the EngineIDs * @param engine_b the other EngineID - * @param type the type of the engines * @return true if they can both carry the same type of cargo (or at least one of them got no capacity at all) */ static bool EnginesHaveCargoInCommon(EngineID engine_a, EngineID engine_b) @@ -237,7 +236,7 @@ static CargoID GetNewCargoTypeForReplace(Vehicle *v, EngineID engine_type, bool * @param v The vehicle to find a replacement for * @param c The vehicle's owner (it's faster to forward the pointer than refinding it) * @param always_replace Always replace, even if not old. - * @param [out] e the EngineID of the replacement. INVALID_ENGINE if no replacement is found + * @param[out] e the EngineID of the replacement. INVALID_ENGINE if no replacement is found * @return Error if the engine to build is not available */ static CommandCost GetNewEngineType(const Vehicle *v, const Company *c, bool always_replace, EngineID &e) diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index 1074d1dd78..eae0a378eb 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -81,7 +81,7 @@ class ReplaceVehicleWindow : public Window { EngineID sel_engine[2]; ///< Selected engine left and right. GUIEngineList engines[2]; ///< Left and right list of engines. bool replace_engines; ///< If \c true, engines are replaced, if \c false, wagons are replaced (only for trains). - bool reset_sel_engine; ///< Also reset #sel_engine while updating left and/or right (#update_left and/or #update_right) and no valid engine selected. + bool reset_sel_engine; ///< Also reset #sel_engine while updating left and/or right and no valid engine selected. GroupID sel_group; ///< Group selected to replace. int details_height; ///< Minimal needed height of the details panels (found so far). byte sort_criteria; ///< Criteria of sorting vehicles. diff --git a/src/blitter/32bpp_anim_sse4.cpp b/src/blitter/32bpp_anim_sse4.cpp index 219fb466bb..24d1d7531f 100644 --- a/src/blitter/32bpp_anim_sse4.cpp +++ b/src/blitter/32bpp_anim_sse4.cpp @@ -7,7 +7,7 @@ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . */ -/** @file 32bpp_sse4_anim.cpp Implementation of the SSE4 32 bpp blitter with animation support. */ +/** @file 32bpp_anim_sse4.cpp Implementation of the SSE4 32 bpp blitter with animation support. */ #ifdef WITH_SSE diff --git a/src/blitter/32bpp_anim_sse4.hpp b/src/blitter/32bpp_anim_sse4.hpp index 9d9ad5dd92..5ff1fb01be 100644 --- a/src/blitter/32bpp_anim_sse4.hpp +++ b/src/blitter/32bpp_anim_sse4.hpp @@ -7,7 +7,7 @@ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . */ -/** @file 32bpp_sse4_anim.hpp A SSE4 32 bpp blitter with animation support. */ +/** @file 32bpp_anim_sse4.hpp A SSE4 32 bpp blitter with animation support. */ #ifndef BLITTER_32BPP_SSE4_ANIM_HPP #define BLITTER_32BPP_SSE4_ANIM_HPP diff --git a/src/blitter/32bpp_sse_type.h b/src/blitter/32bpp_sse_type.h index b32d3c5abd..49c7a68c20 100644 --- a/src/blitter/32bpp_sse_type.h +++ b/src/blitter/32bpp_sse_type.h @@ -7,10 +7,10 @@ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . */ -/** @file 32bpp_sse_type.hpp Types related to SSE 32 bpp blitter. */ +/** @file 32bpp_sse_type.h Types related to SSE 32 bpp blitter. */ -#ifndef BLITTER_32BPP_SSE_TYPE_HPP -#define BLITTER_32BPP_SSE_TYPE_HPP +#ifndef BLITTER_32BPP_SSE_TYPE_H +#define BLITTER_32BPP_SSE_TYPE_H #ifdef WITH_SSE @@ -55,4 +55,4 @@ typedef union ALIGN(16) um128i { #define TRANSPARENT_NOM_BASE _mm_setr_epi16(256, 256, 256, 256, 256, 256, 256, 256) #endif /* WITH_SSE */ -#endif /* BLITTER_32BPP_SSE_TYPE_HPP */ +#endif /* BLITTER_32BPP_SSE_TYPE_H */ diff --git a/src/bridge_map.cpp b/src/bridge_map.cpp index d1e0d6024a..b738895065 100644 --- a/src/bridge_map.cpp +++ b/src/bridge_map.cpp @@ -56,7 +56,7 @@ TileIndex GetSouthernBridgeEnd(TileIndex t) /** * Starting at one bridge end finds the other bridge end - * @param t the bridge ramp tile to find the other bridge ramp for + * @param tile the bridge ramp tile to find the other bridge ramp for */ TileIndex GetOtherBridgeEnd(TileIndex tile) { @@ -66,7 +66,7 @@ TileIndex GetOtherBridgeEnd(TileIndex tile) /** * Get the height ('z') of a bridge. - * @param tile the bridge ramp tile to get the bridge height from + * @param t the bridge ramp tile to get the bridge height from * @return the height of the bridge. */ int GetBridgeHeight(TileIndex t) diff --git a/src/cargopacket.cpp b/src/cargopacket.cpp index 9b96be62eb..9e699d6f42 100644 --- a/src/cargopacket.cpp +++ b/src/cargopacket.cpp @@ -602,7 +602,7 @@ uint VehicleCargoList::Reassign#if expression - TOKEN_AND, ///< '&&' within #if expression - TOKEN_DEFINED, ///< 'defined' within #if expression - TOKEN_OPEN, ///< '(' within #if expression - TOKEN_CLOSE, ///< ')' within #if expression - TOKEN_NOT, ///< '!' within #if expression - TOKEN_ZERO, ///< '0' within #if expression - TOKEN_INCLUDE, ///< (#)include in code + TOKEN_DEFINE, ///< \c \#define in code + TOKEN_IF, ///< \c \#if in code + TOKEN_IFDEF, ///< \c \#ifdef in code + TOKEN_IFNDEF, ///< \c \#ifndef in code + TOKEN_ELIF, ///< \c \#elif in code + TOKEN_ELSE, ///< \c \#else in code + TOKEN_ENDIF, ///< \c \#endif in code + TOKEN_UNDEF, ///< \c \#undef in code + TOKEN_OR, ///< '||' within \c \#if expression + TOKEN_AND, ///< '&&' within \c \#if expression + TOKEN_DEFINED, ///< 'defined' within \c \#if expression + TOKEN_OPEN, ///< '(' within \c \#if expression + TOKEN_CLOSE, ///< ')' within \c \#if expression + TOKEN_NOT, ///< '!' within \c \#if expression + TOKEN_ZERO, ///< '0' within \c \#if expression + TOKEN_INCLUDE, ///< \c \#include in code }; /** Mapping from a C-style keyword representation to a Token. */ @@ -681,8 +681,8 @@ bool ExpressionOr(Lexer *lexer, StringSet *defines, bool verbose) /** Enumerator to tell how long to ignore 'stuff'. */ enum Ignore { NOT_IGNORE, ///< No ignoring. - IGNORE_UNTIL_ELSE, ///< Ignore till a #else is reached. - IGNORE_UNTIL_ENDIF, ///< Ignore till a #endif is reached. + IGNORE_UNTIL_ELSE, ///< Ignore till a \c \#else is reached. + IGNORE_UNTIL_ENDIF, ///< Ignore till a \c \#endif is reached. }; /** diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp index 79eaa89b14..f09720b357 100644 --- a/src/dock_gui.cpp +++ b/src/dock_gui.cpp @@ -56,8 +56,8 @@ void CcPlaySound_SPLAT_WATER(const CommandCost &result, TileIndex tile, uint32 p /** * Gets the other end of the aqueduct, if possible. - * @param tile_from The begin tile for the aqueduct. - * @param [out] tile_to The tile till where to show a selection for the aqueduct. + * @param tile_from The begin tile for the aqueduct. + * @param[out] tile_to The tile till where to show a selection for the aqueduct. * @return The other end of the aqueduct, or otherwise a tile in line with the aqueduct to cause the right error message. */ static TileIndex GetOtherAqueductEnd(TileIndex tile_from, TileIndex *tile_to = NULL) diff --git a/src/economy.cpp b/src/economy.cpp index fae71f3e42..98989971ca 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1242,7 +1242,6 @@ Money CargoPayment::PayTransfer(const CargoPacket *cp, uint count) /** * Prepare the vehicle to be unloaded. - * @param curr_station the station where the consist is at the moment * @param front_v the vehicle to be unloaded */ void PrepareUnload(Vehicle *front_v) diff --git a/src/engine.cpp b/src/engine.cpp index cd96a149fb..9f500e1cdf 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -573,7 +573,7 @@ static bool IsWagon(EngineID index) } /** - * Update #reliability of engine \a e, (if needed) update the engine GUIs. + * Update #Engine::reliability and (if needed) update the engine GUIs. * @param e %Engine to update. */ static void CalcEngineReliability(Engine *e) diff --git a/src/error_gui.cpp b/src/error_gui.cpp index c8c603afb3..1c59b7e8d0 100644 --- a/src/error_gui.cpp +++ b/src/error_gui.cpp @@ -425,7 +425,7 @@ void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel /** * Schedule a list of errors. * Note: This does not try to display the error now. This is useful if the window system is not yet running. - * @param data Error message datas; cleared afterwards + * @param datas Error message datas; cleared afterwards */ void ScheduleErrorMessage(ErrorList &datas) { diff --git a/src/fileio.cpp b/src/fileio.cpp index 3ad5be711d..5530965e96 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -347,7 +347,7 @@ char *FioGetFullPath(char *buf, const char *last, Searchpath sp, Subdirectory su /** * Find a path to the filename in one of the search directories. - * @param buf [out] Destination buffer for the path. + * @param[out] buf Destination buffer for the path. * @param last End of the destination buffer. * @param subdir Subdirectory to try. * @param filename Filename to look for. @@ -438,7 +438,7 @@ static FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath s /** * Opens a file from inside a tar archive. * @param entry The entry to open. - * @param filesize [out] If not \c NULL, size of the opened file. + * @param[out] filesize If not \c NULL, size of the opened file. * @return File handle of the opened file, or \c NULL if the file is not available. * @note The file is read from within the tar file, and may not return \c EOF after reading the whole file. */ @@ -460,7 +460,6 @@ FILE *FioFOpenFileTar(TarFileListEntry *entry, size_t *filesize) * Opens a OpenTTD file somewhere in a personal or global directory. * @param filename Name of the file to open. * @param subdir Subdirectory to open. - * @param filename Name of the file to open. * @return File handle of the opened file, or \c NULL if the file is not available. */ FILE *FioFOpenFile(const char *filename, const char *mode, Subdirectory subdir, size_t *filesize) @@ -632,7 +631,7 @@ static void SimplifyFileName(char *name) /** * Perform the scanning of a particular subdirectory. - * @param subdir The subdirectory to scan. + * @param sd The subdirectory to scan. * @return The number of found tar files. */ uint TarScanner::DoScan(Subdirectory sd) @@ -1303,7 +1302,7 @@ void SanitizeFilename(char *filename) /** * Load a file into memory. * @param filename Name of the file to load. - * @param lenp [out] Length of loaded data. + * @param[out] lenp Length of loaded data. * @param maxsize Maximum size to load. * @return Pointer to new memory containing the loaded data, or \c NULL if loading failed. * @note If \a maxsize less than the length of the file, loading fails. diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index f20cfd7927..9aa5277acf 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -201,7 +201,7 @@ static const TextColour _fios_colours[] = { /** * Sort the collected list save games prior to displaying it in the save/load gui. - * @param [inout] file_list List of save game files found in the directory. + * @param[in,out] file_list List of save game files found in the directory. */ static void SortSaveGameList(FileList &file_list) { diff --git a/src/game/game_text.cpp b/src/game/game_text.cpp index 42ced20083..a32e5b41d7 100644 --- a/src/game/game_text.cpp +++ b/src/game/game_text.cpp @@ -142,7 +142,7 @@ struct StringListReader : StringReader { /** * Create the reader. * @param data The data to fill during reading. - * @param file The file we are reading. + * @param strings The language strings we are reading. * @param master Are we reading the master file? * @param translation Are we reading a translation? */ diff --git a/src/gamelog.cpp b/src/gamelog.cpp index 400c0d22fb..621117f01b 100644 --- a/src/gamelog.cpp +++ b/src/gamelog.cpp @@ -771,9 +771,9 @@ void GamelogGRFUpdate(const GRFConfig *oldc, const GRFConfig *newc) * Get some basic information from the given gamelog. * @param gamelog_action Pointer to the gamelog to extract information from. * @param gamelog_actions Number of actions in the given gamelog. - * @param [out] last_ottd_rev OpenTTD NewGRF version from the binary that saved the savegame last. - * @param [out] ever_modified Max value of 'modified' from all binaries that ever saved this savegame. - * @param [out] removed_newgrfs Set to true if any NewGRFs have been removed. + * @param[out] last_ottd_rev OpenTTD NewGRF version from the binary that saved the savegame last. + * @param[out] ever_modified Max value of 'modified' from all binaries that ever saved this savegame. + * @param[out] removed_newgrfs Set to true if any NewGRFs have been removed. */ void GamelogInfo(LoggedAction *gamelog_action, uint gamelog_actions, uint32 *last_ottd_rev, byte *ever_modified, bool *removed_newgrfs) { diff --git a/src/gfx.cpp b/src/gfx.cpp index c9c36019ce..605ff7664b 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -703,8 +703,8 @@ Dimension GetStringBoundingBox(const char *str, FontSize start_fontsize) } /** - * Get bounding box of a string. Uses parameters set by #DParam if needed. - * Has the same restrictions as #GetStringBoundingBox(const char *str). + * Get bounding box of a string. Uses parameters set by #SetDParam if needed. + * Has the same restrictions as #GetStringBoundingBox(const char *str, FontSize start_fontsize). * @param strid String to examine. * @return Width and height of the bounding box for the string in pixels. */ @@ -761,7 +761,7 @@ void DrawCharCentered(WChar c, int x, int y, TextColour colour) /** * Get the size of a sprite. * @param sprid Sprite to examine. - * @param [out] offset Optionally returns the sprite position offset. + * @param[out] offset Optionally returns the sprite position offset. * @return Sprite size in pixels. * @note The size assumes (0, 0) as top-left coordinate and ignores any part of the sprite drawn at the left or above that position. */ @@ -1170,8 +1170,8 @@ byte GetDigitWidth(FontSize size) /** * Determine the broadest digits for guessing the maximum width of a n-digit number. - * @param [out] front Broadest digit, which is not 0. (Use this digit as first digit for numbers with more than one digit.) - * @param [out] next Broadest digit, including 0. (Use this digit for all digits, except the first one; or for numbers with only one digit.) + * @param[out] front Broadest digit, which is not 0. (Use this digit as first digit for numbers with more than one digit.) + * @param[out] next Broadest digit, including 0. (Use this digit for all digits, except the first one; or for numbers with only one digit.) * @param size Font of the digit */ void GetBroadestDigit(uint *front, uint *next, FontSize size) @@ -1635,8 +1635,8 @@ void SetAnimatedMouseCursor(const AnimCursor *table) * Update cursor position on mouse movement. * @param x New X position. * @param y New Y position. - * @param queued True, if the OS queues mouse warps after pending mouse movement events. - * False, if the warp applies instantaneous. + * @param queued_warp True, if the OS queues mouse warps after pending mouse movement events. + * False, if the warp applies instantaneous. * @return true, if the OS cursor position should be warped back to this->pos. */ bool CursorVars::UpdateCursorPosition(int x, int y, bool queued_warp) diff --git a/src/gfx_type.h b/src/gfx_type.h index ca9bf9fcef..4cfc149a86 100644 --- a/src/gfx_type.h +++ b/src/gfx_type.h @@ -189,7 +189,7 @@ union Colour { /** * Create a new colour. - * @param The colour in the correct packed format. + * @param data The colour in the correct packed format. */ Colour(uint data = 0) : data(data) { diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index f73027e91e..3613ce0d86 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -80,7 +80,7 @@ static uint LoadGrfFile(const char *filename, uint load_index, int file_index) /** * Load an old fashioned GRF file to replace already loaded sprites. * @param filename The name of the file to open. - * @param index_tlb The offsets of each of the sprites. + * @param index_tbl The offsets of each of the sprites. * @param file_index The Fio offset to load the file in. * @return The number of loaded sprites. */ diff --git a/src/goal_gui.cpp b/src/goal_gui.cpp index f98189d183..ee4d8170e1 100644 --- a/src/goal_gui.cpp +++ b/src/goal_gui.cpp @@ -101,7 +101,7 @@ struct GoalListWindow : public Window { /** * Handle clicking at a goal. - * @param s @Goal clicked at. + * @param s #Goal clicked at. */ void HandleClick(const Goal *s) { @@ -193,7 +193,7 @@ struct GoalListWindow : public Window { /** * Draws either the global goals or the company goal section. * This is a helper method for #DrawWidget. - * @param pos [inout] Vertical line number to draw. + * @param[in,out] pos Vertical line number to draw. * @param cap Number of lines to draw in the window. * @param x Left edge of the text line to draw. * @param y Vertical position of the top edge of the window. @@ -250,8 +250,8 @@ struct GoalListWindow : public Window { /** * Draws a given column of the goal list. * @param column Which column to draw. - * @wid Pointer to the goal list widget. - * @progress_col_width Width of the progress column. + * @param wid Pointer to the goal list widget. + * @param progress_col_width Width of the progress column. * @return max width of drawn text */ void DrawListColumn(GoalColumn column, NWidgetBase *wid, uint progress_col_width) const diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp index 12cce41f74..66d75fb44e 100644 --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -98,7 +98,7 @@ void GroupStatistics::Clear() } /** - * Update all caches after loading a game, changing NewGRF etc.. + * Update all caches after loading a game, changing NewGRF, etc. */ /* static */ void GroupStatistics::UpdateAfterLoad() { diff --git a/src/group_gui.cpp b/src/group_gui.cpp index d3e1eafbb9..aef934ccf5 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -977,11 +977,11 @@ static inline VehicleGroupWindow *FindVehicleGroupWindow(VehicleType vt, Owner o } /** - * Opens a 'Rename group' window for newly created group - * @param success did command succeed? - * @param tile unused - * @param p1 vehicle type - * @param p2 unused + * Opens a 'Rename group' window for newly created group. + * @param result Did command succeed? + * @param tile Unused. + * @param p1 Vehicle type. + * @param p2 Unused. * @see CmdCreateGroup */ void CcCreateGroup(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2) @@ -995,7 +995,7 @@ void CcCreateGroup(const CommandCost &result, TileIndex tile, uint32 p1, uint32 /** * Open rename window after adding a vehicle to a new group via drag and drop. - * @param success Did command succeed? + * @param result Did command succeed? * @param tile Unused. * @param p1 Unused. * @param p2 Bit 0-19: Vehicle ID. diff --git a/src/heightmap.cpp b/src/heightmap.cpp index 630dc69d7e..17bdbbf610 100644 --- a/src/heightmap.cpp +++ b/src/heightmap.cpp @@ -447,9 +447,9 @@ void FixSlopes() * Reads the heightmap with the correct file reader. * @param dft Type of image file. * @param filename Name of the file to load. - * @param [out] x Length of the image. - * @param [out] y Height of the image. - * @param [inout] map If not \c NULL, destination to store the loaded block of image data. + * @param[out] x Length of the image. + * @param[out] y Height of the image. + * @param[in,out] map If not \c NULL, destination to store the loaded block of image data. * @return Whether loading was successful. */ static bool ReadHeightMap(DetailedFileType dft, const char *filename, uint *x, uint *y, byte **map) diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 7d1a7e2e6a..ee55e490bd 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1323,7 +1323,7 @@ static CheckNewIndustryProc * const _check_new_industry_procs[CHECK_END] = { * Find a town for the industry, while checking for multiple industries in the same town. * @param tile Position of the industry to build. * @param type Industry type. - * @param [out] town Pointer to return town for the new industry, \c NULL is written if no good town can be found. + * @param[out] t Pointer to return town for the new industry, \c NULL is written if no good town can be found. * @return Succeeded or failed command. * * @pre \c *t != NULL @@ -1365,14 +1365,14 @@ bool IsSlopeRefused(Slope current, Slope refused) /** * Are the tiles of the industry free? - * @param tile Position to check. - * @param it Industry tiles table. - * @param itspec_index The index of the itsepc to build/fund - * @param type Type of the industry. - * @param initial_random_bits The random bits the industry is going to have after construction. - * @param founder Industry founder - * @param creation_type The circumstances the industry is created under. - * @param [out] custom_shape_check Perform custom check for the site. + * @param tile Position to check. + * @param it Industry tiles table. + * @param itspec_index The index of the itsepc to build/fund + * @param type Type of the industry. + * @param initial_random_bits The random bits the industry is going to have after construction. + * @param founder Industry founder + * @param creation_type The circumstances the industry is created under. + * @param[out] custom_shape_check Perform custom check for the site. * @return Failed or succeeded command. */ static CommandCost CheckIfIndustryTilesAreFree(TileIndex tile, const IndustryTileTable *it, uint itspec_index, int type, uint16 initial_random_bits, Owner founder, IndustryAvailabilityCallType creation_type, bool *custom_shape_check = NULL) @@ -1793,11 +1793,11 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, * @param flags of operations to conduct * @param indspec pointer to industry specifications * @param itspec_index the index of the itsepc to build/fund - * @param seed random seed (possibly) used by industries - * @param initial_random_bits The random bits the industry is going to have after construction. + * @param random_var8f random seed (possibly) used by industries + * @param random_initial_bits The random bits the industry is going to have after construction. * @param founder Founder of the industry * @param creation_type The circumstances the industry is created under. - * @param [out] ip Pointer to store newly created industry. + * @param[out] ip Pointer to store newly created industry. * @return Succeeded or failed command. * * @post \c *ip contains the newly created industry if all checks are successful and the \a flags request actual creation, else it contains \c NULL afterwards. @@ -1961,7 +1961,7 @@ static Industry *CreateNewIndustry(TileIndex tile, IndustryType type, IndustryAv /** * Compute the appearance probability for an industry during map creation. * @param it Industry type to compute. - * @param [out] force_at_least_one Returns whether at least one instance should be forced on map creation. + * @param[out] force_at_least_one Returns whether at least one instance should be forced on map creation. * @return Relative probability for the industry to appear. */ static uint32 GetScaledIndustryGenerationProbability(IndustryType it, bool *force_at_least_one) @@ -1986,7 +1986,7 @@ static uint32 GetScaledIndustryGenerationProbability(IndustryType it, bool *forc /** * Compute the probability for constructing a new industry during game play. * @param it Industry type to compute. - * @param [out] min_number Minimal number of industries that should exist at the map. + * @param[out] min_number Minimal number of industries that should exist at the map. * @return Relative probability for the industry to appear. */ static uint16 GetIndustryGamePlayProbability(IndustryType it, byte *min_number) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 2e06983af0..dd1f765a7d 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1580,7 +1580,7 @@ struct CargoesField { /** * Connect a cargo from an industry to the #CFT_CARGO column. * @param cargo Cargo to connect. - * @param produced Cargo is produced (if \c false, cargo is assumed to be accepted). + * @param producer Cargo is produced (if \c false, cargo is assumed to be accepted). * @return Horizontal connection index, or \c -1 if not accepted at all. */ int ConnectCargo(CargoID cargo, bool producer) @@ -1697,7 +1697,7 @@ struct CargoesField { /** * Draw the field. * @param xpos Position of the left edge. - * @param vpos Position of the top edge. + * @param ypos Position of the top edge. */ void Draw(int xpos, int ypos) const { diff --git a/src/ini_type.h b/src/ini_type.h index ce383b959c..9bd47fd4e5 100644 --- a/src/ini_type.h +++ b/src/ini_type.h @@ -70,7 +70,7 @@ struct IniLoadFile { * Open the INI file. * @param filename Name of the INI file. * @param subdir The subdir to load the file from. - * @param size [out] Size of the opened file. + * @param[out] size Size of the opened file. * @return File handle of the opened file, or \c NULL. */ virtual FILE *OpenFile(const char *filename, Subdirectory subdir, size_t *size) = 0; diff --git a/src/linkgraph/demands.cpp b/src/linkgraph/demands.cpp index f4afbabf0a..f1b714820b 100644 --- a/src/linkgraph/demands.cpp +++ b/src/linkgraph/demands.cpp @@ -115,7 +115,6 @@ public: * Check if there is any acceptance left for this node. In asymmetric distribution * nodes always accept as long as their demand > 0. * @param to The node to be checked. - * @param to_anno Unused. */ inline bool HasDemandLeft(const Node &to) { return to.Demand() > 0; } }; diff --git a/src/linkgraph/demands.h b/src/linkgraph/demands.h index c3d9dc7cda..8a639b8b15 100644 --- a/src/linkgraph/demands.h +++ b/src/linkgraph/demands.h @@ -30,7 +30,7 @@ public: /** * Call the demand calculator on the given component. - * @param graph Component to calculate the demands for. + * @param job Component to calculate the demands for. */ virtual void Run(LinkGraphJob &job) const { DemandCalculator c(job); } diff --git a/src/linkgraph/flowmapper.cpp b/src/linkgraph/flowmapper.cpp index 4b974a809e..b78b30335e 100644 --- a/src/linkgraph/flowmapper.cpp +++ b/src/linkgraph/flowmapper.cpp @@ -16,7 +16,7 @@ /** * Map the paths generated by the MCF solver into flows associated with nodes. - * @param component the link graph component to be used. + * @param job the link graph component to be used. */ void FlowMapper::Run(LinkGraphJob &job) const { diff --git a/src/linkgraph/linkgraph.cpp b/src/linkgraph/linkgraph.cpp index 50945d361f..34b3a4aa09 100644 --- a/src/linkgraph/linkgraph.cpp +++ b/src/linkgraph/linkgraph.cpp @@ -252,8 +252,6 @@ void LinkGraph::Node::RemoveEdge(NodeID to) * least the given capacity and usage, otherwise add the capacity and usage. * In any case set the respective update timestamp(s), according to the given * mode. - * @param from Start node of the edge. - * @param to End node of the edge. * @param capacity Capacity to be added/updated. * @param usage Usage to be added. * @param mode Update mode to be applied. diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index c91fa20588..30c4451ee7 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -425,7 +425,7 @@ LinkGraphLegendWindow::LinkGraphLegendWindow(WindowDesc *desc, int window_number /** * Set the overlay belonging to this menu and import its company/cargo settings. - * @params overlay New overlay for this menu. + * @param overlay New overlay for this menu. */ void LinkGraphLegendWindow::SetOverlay(LinkGraphOverlay *overlay) { this->overlay = overlay; diff --git a/src/linkgraph/mcf.cpp b/src/linkgraph/mcf.cpp index ecdf792afe..544584ef61 100644 --- a/src/linkgraph/mcf.cpp +++ b/src/linkgraph/mcf.cpp @@ -193,7 +193,7 @@ public: * Determines if an extension to the given Path with the given parameters is * better than this path. * @param base Other path. - * @param cap Capacity of the new edge to be added to base. + * @param free_cap Capacity of the new edge to be added to base. * @param dist Distance of the new edge. * @return True if base + the new edge would be better than the path associated * with this annotation. @@ -227,7 +227,7 @@ bool DistanceAnnotation::IsBetter(const DistanceAnnotation *base, uint cap, * Determines if an extension to the given Path with the given parameters is * better than this path. * @param base Other path. - * @param cap Capacity of the new edge to be added to base. + * @param free_cap Capacity of the new edge to be added to base. * @param dist Distance of the new edge. * @return True if base + the new edge would be better than the path associated * with this annotation. diff --git a/src/map_type.h b/src/map_type.h index 7af391b46c..0c57d37700 100644 --- a/src/map_type.h +++ b/src/map_type.h @@ -71,7 +71,7 @@ static const uint MAX_MAP_SIZE = 1 << MAX_MAP_SIZE_BITS; ///< Maximal map s * Approximation of the length of a straight track, relative to a diagonal * track (ie the size of a tile side). * - * #defined instead of const so it can + * \#defined instead of const so it can * stay integer. (no runtime float operations) Is this needed? * Watch out! There are _no_ brackets around here, to prevent intermediate * rounding! Be careful when using this! diff --git a/src/misc/dbg_helpers.cpp b/src/misc/dbg_helpers.cpp index a80230de1c..22ccfa3464 100644 --- a/src/misc/dbg_helpers.cpp +++ b/src/misc/dbg_helpers.cpp @@ -117,7 +117,7 @@ void DumpTarget::WriteIndent() } } -/** Write a line with indent at the beginning and at the end. */ +/** Write a line with indent at the beginning and \ at the end. */ void DumpTarget::WriteLine(const char *format, ...) { WriteIndent(); @@ -143,7 +143,7 @@ void DumpTarget::WriteTile(const char *name, TileIndex tile) } /** - * Open new structure (one level deeper than the current one) 'name = {'. + * Open new structure (one level deeper than the current one) 'name = {\'. */ void DumpTarget::BeginStruct(size_t type_id, const char *name, const void *ptr) { @@ -167,7 +167,7 @@ void DumpTarget::BeginStruct(size_t type_id, const char *name, const void *ptr) } /** - * Close structure '}'. + * Close structure '}\'. */ void DumpTarget::EndStruct() { diff --git a/src/misc/getoptdata.h b/src/misc/getoptdata.h index 5982f01fb8..4ce916aa1e 100644 --- a/src/misc/getoptdata.h +++ b/src/misc/getoptdata.h @@ -34,7 +34,7 @@ struct GetOptData { int numleft; ///< Number of arguments left in #argv. char **argv; ///< Remaining command line arguments. const OptionData *options; ///< Command line option descriptions. - char *cont; ///< Next call to #MyGetOpt should start here (in the middle of an argument). + char *cont; ///< Next call to #GetOpt should start here (in the middle of an argument). /** * Constructor of the data store. diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index df00459775..e23da4293c 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -732,7 +732,7 @@ struct TooltipsWindow : public Window * @param str String to be displayed * @param paramcount number of params to deal with * @param params (optional) up to 5 pieces of additional information that may be added to a tooltip - * @param use_left_mouse_button close the tooltip when the left (true) or right (false) mouse button is released + * @param close_tooltip when the left (true) or right (false) mouse button is released */ void GuiShowTooltips(Window *parent, StringID str, uint paramcount, const uint64 params[], TooltipCloseCondition close_tooltip) { @@ -1068,7 +1068,7 @@ void ShowQueryString(StringID str, StringID caption, uint maxsize, Window *paren */ struct QueryWindow : public Window { QueryCallbackProc *proc; ///< callback function executed on closing of popup. Window* points to parent, bool is true if 'yes' clicked, false otherwise - uint64 params[10]; ///< local copy of _decode_parameters + uint64 params[10]; ///< local copy of #_global_string_params StringID message; ///< message shown for query window StringID caption; ///< title of window diff --git a/src/music/midifile.cpp b/src/music/midifile.cpp index a2455358fe..91f83c529d 100644 --- a/src/music/midifile.cpp +++ b/src/music/midifile.cpp @@ -520,8 +520,8 @@ struct MpsMachine { /** * Construct a TTD DOS music format decoder. - * @param songdata Buffer of song data from CAT file, ownership remains with caller - * @param songdatalen Length of the data buffer in bytes + * @param data Buffer of song data from CAT file, ownership remains with caller + * @param length Length of the data buffer in bytes * @param target MidiFile object to add decoded data to */ MpsMachine(const byte *data, size_t length, MidiFile &target) diff --git a/src/music/music_driver.hpp b/src/music/music_driver.hpp index 10a99d2750..f4d3d7dd36 100644 --- a/src/music/music_driver.hpp +++ b/src/music/music_driver.hpp @@ -21,7 +21,7 @@ class MusicDriver : public Driver { public: /** * Play a particular song. - * @param filename The name of file with the song to play. + * @param song The information for the song to play. */ virtual void PlaySong(const MusicSongInfo &song) = 0; diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 4b1332c589..1df2fc82c4 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -519,7 +519,7 @@ public: * Create the content list window. * @param desc the window description to pass to Window's constructor. * @param select_all Whether the select all button is allowed or not. - * @param type the main type of content to display or #CONTENT_TYPE_END. + * @param types the main type of content to display or #CONTENT_TYPE_END. * When a type other than #CONTENT_TYPE_END is given, dependencies of * other types are only shown when content that depend on them are * selected. diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index c406b454d9..275b6200eb 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -2137,7 +2137,7 @@ bool NetworkCompanyHasClients(CompanyID company) /** - * Get the name of the client, if the user did not send it yet, Client # is used. + * Get the name of the client, if the user did not send it yet, Client ID is used. * @param client_name The variable to write the name to. * @param last The pointer to the last element of the destination buffer */ diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 16a6c231f0..9c5a406ca7 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -194,7 +194,7 @@ static GrfProcessingState _cur; /** * Helper to check whether an image index is valid for a particular NewGRF vehicle. - * @param The type of vehicle. + * @tparam T The type of vehicle. * @param image_index The image index to check. * @return True iff the image index is valid, or 0xFD (use new graphics). */ @@ -734,9 +734,9 @@ static void MapSpriteMappingRecolour(PalSpriteID *grf_sprite) * @param invert_action1_flag Set to true, if palette bit 15 means 'not from action 1'. * @param use_cur_spritesets Whether to use currently referenceable action 1 sets. * @param feature GrfSpecFeature to use spritesets from. - * @param [out] grf_sprite Read sprite and palette. - * @param [out] max_sprite_offset Optionally returns the number of sprites in the spriteset of the sprite. (0 if no spritset) - * @param [out] max_palette_offset Optionally returns the number of sprites in the spriteset of the palette. (0 if no spritset) + * @param[out] grf_sprite Read sprite and palette. + * @param[out] max_sprite_offset Optionally returns the number of sprites in the spriteset of the sprite. (0 if no spritset) + * @param[out] max_palette_offset Optionally returns the number of sprites in the spriteset of the palette. (0 if no spritset) * @return Read TileLayoutFlags. */ static TileLayoutFlags ReadSpriteLayoutSprite(ByteReader *buf, bool read_flags, bool invert_action1_flag, bool use_cur_spritesets, int feature, PalSpriteID *grf_sprite, uint16 *max_sprite_offset = NULL, uint16 *max_palette_offset = NULL) @@ -1845,7 +1845,7 @@ static ChangeInfoResult AircraftVehicleChangeInfo(uint engine, int numinfo, int /** * Define properties for stations - * @param stdid StationID of the first station tile. + * @param stid StationID of the first station tile. * @param numinfo Number of subsequent station tiles to change the property for. * @param prop The property to change. * @param buf The property value. @@ -2553,7 +2553,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt * @param gvid ID of the global variable. This is basically only checked for zerones. * @param numinfo Number of subsequent IDs to change the property for. * @param buf The property value. - * @param [in,out] translation_table Storage location for the translation table. + * @param[in,out] translation_table Storage location for the translation table. * @param name Name of the table for debug output. * @return ChangeInfoResult. */ diff --git a/src/newgrf_airport.cpp b/src/newgrf_airport.cpp index 0863d09861..6213097bd0 100644 --- a/src/newgrf_airport.cpp +++ b/src/newgrf_airport.cpp @@ -216,7 +216,6 @@ void AirportOverrideManager::SetEntitySpec(AirportSpec *as) /** * Store a value into the object's persistent storage. - * @param object Object that we want to query. * @param pos Position in the persistent storage to use. * @param value Value to store. */ diff --git a/src/newgrf_animation_base.h b/src/newgrf_animation_base.h index 7b94031fbd..791f3d691a 100644 --- a/src/newgrf_animation_base.h +++ b/src/newgrf_animation_base.h @@ -31,7 +31,6 @@ template wires, GetStationGfx(tile)); } -/** Wrapper for animation control, see #GetStationCallback. */ +/** Wrapper for animation control, see GetStationCallback. */ uint16 GetAnimStationCallback(CallbackID callback, uint32 param1, uint32 param2, const StationSpec *statspec, BaseStation *st, TileIndex tile, int extra_data) { return GetStationCallback(callback, param1, param2, statspec, st, tile); diff --git a/src/newgrf_text.cpp b/src/newgrf_text.cpp index eb4b11c5e0..b92b84355a 100644 --- a/src/newgrf_text.cpp +++ b/src/newgrf_text.cpp @@ -329,7 +329,7 @@ struct UnmappedChoiceList : ZeroedMemoryAllocator { * @param language_id The (NewGRF) language ID associated with this string. * @param allow_newlines Whether newlines are allowed in the string or not. * @param str The string to translate. - * @param [out] olen The length of the final string. + * @param[out] olen The length of the final string. * @param byte80 The control code to use as replacement for the 0x80-value. * @return The translated string. */ diff --git a/src/news_gui.cpp b/src/news_gui.cpp index 94cfaccf93..71a39eb3a9 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -494,7 +494,7 @@ struct NewsWindow : Window { private: /** - * Moves the window so #newtop is new 'top' coordinate. Makes screen dirty where needed. + * Moves the window to a new #top coordinate. Makes screen dirty where needed. * @param newtop new top coordinate */ void SetWindowTop(int newtop) @@ -962,7 +962,6 @@ void ShowLastNewsMessage() * @param y position of the string * @param colour the colour the string will be shown in * @param *ni NewsItem being printed - * @param maxw maximum width of string in pixels */ static void DrawNewsString(uint left, uint right, int y, TextColour colour, const NewsItem *ni) { diff --git a/src/object_gui.cpp b/src/object_gui.cpp index 57c45d09c9..8aabcfdc46 100644 --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -520,10 +520,7 @@ static WindowDesc _build_object_desc( _nested_build_object_widgets, lengthof(_nested_build_object_widgets) ); -/** - * Show our object picker. - * @param w The toolbar window we're associated with. - */ +/** Show our object picker. */ void ShowBuildObjectPicker() { /* Don't show the place object button when there are no objects to place. */ diff --git a/src/openttd.cpp b/src/openttd.cpp index 3e11cf0386..88739a9eac 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -989,9 +989,9 @@ static void MakeNewEditorWorld() * Load the specified savegame but on error do different things. * If loading fails due to corrupt savegame, bad version, etc. go back to * a previous correct state. In the menu for example load the intro game again. - * @param mode mode of loading, either SL_LOAD or SL_OLD_LOAD - * @param newgm switch to this mode of loading fails due to some unknown error * @param filename file to be loaded + * @param fop mode of loading, always SLO_LOAD + * @param newgm switch to this mode of loading fails due to some unknown error * @param subdir default directory to look for filename, set to 0 if not needed * @param lf Load filter to use, if NULL: use filename + subdir. */ diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index db812f6c53..12a5eec31a 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -1948,7 +1948,6 @@ void DeleteVehicleOrders(Vehicle *v, bool keep_orderlist, bool reset_order_indic * Clamp the service interval to the correct min/max. The actual min/max values * depend on whether it's in percent or days. * @param interval proposed service interval - * @param company_id the owner of the vehicle * @return Clamped service interval */ uint16 GetServiceIntervalClamped(uint interval, bool ispercent) diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp index 59b2fccac2..d2540ac345 100644 --- a/src/os/windows/win32.cpp +++ b/src/os/windows/win32.cpp @@ -625,11 +625,11 @@ char *convert_from_fs(const TCHAR *name, char *utf8_buf, size_t buflen) * Convert from OpenTTD's encoding to that of the environment in * UNICODE. OpenTTD encoding is UTF8, local is wide * @param name pointer to a valid string that will be converted - * @param utf16_buf pointer to a valid wide-char buffer that will receive the + * @param system_buf pointer to a valid wide-char buffer that will receive the * converted string * @param buflen length in wide characters of the receiving buffer * @param console_cp convert to the console encoding instead of the normal system encoding. - * @return pointer to utf16_buf. If conversion fails the string is of zero-length + * @return pointer to system_buf. If conversion fails the string is of zero-length */ TCHAR *convert_to_fs(const char *name, TCHAR *system_buf, size_t buflen, bool console_cp) { diff --git a/src/osk_gui.cpp b/src/osk_gui.cpp index 974e465f43..dc069d1686 100644 --- a/src/osk_gui.cpp +++ b/src/osk_gui.cpp @@ -437,9 +437,9 @@ void UpdateOSKOriginalText(const Window *parent, int button) /** * Check whether the OSK is opened for a specific editbox. - * @parent w Window to check for + * @param w Window to check for * @param button Editbox of \a w to check for - * @return true if the OSK is oppened for \a button. + * @return true if the OSK is opened for \a button. */ bool IsOSKOpenedFor(const Window *w, int button) { diff --git a/src/pathfinder/npf/aystar.cpp b/src/pathfinder/npf/aystar.cpp index 9ef2bca479..8bd63beb7b 100644 --- a/src/pathfinder/npf/aystar.cpp +++ b/src/pathfinder/npf/aystar.cpp @@ -156,7 +156,7 @@ void AyStar::CheckTile(AyStarNode *current, OpenListNode *parent) * his neighbour items. If they are valid, they are added to be checked too. * @return Possible values: * - #AYSTAR_EMPTY_OPENLIST : indicates all items are tested, and no path has been found. - * - #AYSTAR_LIMIT_REACHED : Indicates that the max_nodes limit has been reached. + * - #AYSTAR_LIMIT_REACHED : Indicates that the max_search_nodes limit has been reached. * - #AYSTAR_FOUND_END_NODE : indicates we found the end. Path_found now is true, and in path is the path found. * - #AYSTAR_STILL_BUSY : indicates we have done this tile, did not found the path yet, and have items left to try. */ diff --git a/src/pathfinder/npf/aystar.h b/src/pathfinder/npf/aystar.h index eaa70bf915..4ee9df3329 100644 --- a/src/pathfinder/npf/aystar.h +++ b/src/pathfinder/npf/aystar.h @@ -30,7 +30,7 @@ enum AystarStatus { AYSTAR_EMPTY_OPENLIST, ///< All items are tested, and no path has been found. AYSTAR_STILL_BUSY, ///< Some checking was done, but no path found yet, and there are still items left to try. AYSTAR_NO_PATH, ///< No path to the goal was found. - AYSTAR_LIMIT_REACHED, ///< The #max_nodes limit has been reached, aborting search. + AYSTAR_LIMIT_REACHED, ///< The #AyStar::max_search_nodes limit has been reached, aborting search. AYSTAR_DONE, ///< Not an end-tile, or wrong direction. }; @@ -93,9 +93,9 @@ typedef int32 AyStar_CalculateG(AyStar *aystar, AyStarNode *current, OpenListNod typedef int32 AyStar_CalculateH(AyStar *aystar, AyStarNode *current, OpenListNode *parent); /** - * This function requests the tiles around the current tile and put them in #tiles_around. - * #tiles_around is never reset, so if you are not using directions, just leave it alone. - * \warning Never add more tiles_around than memory allocated for it. + * This function requests the tiles around the current tile and put them in #neighbours. + * #neighbours is never reset, so if you are not using directions, just leave it alone. + * @warning Never add more #neighbours than memory allocated for it. */ typedef void AyStar_GetNeighbours(AyStar *aystar, OpenListNode *current); diff --git a/src/pathfinder/yapf/nodelist.hpp b/src/pathfinder/yapf/nodelist.hpp index e82f869f1e..87e65fd26e 100644 --- a/src/pathfinder/yapf/nodelist.hpp +++ b/src/pathfinder/yapf/nodelist.hpp @@ -25,7 +25,7 @@ template class CNodeList_HashTableT { public: typedef Titem_ Titem; ///< Make #Titem_ visible from outside of class. - typedef typename Titem_::Key Key; ///< Make Titem_::Key a property of #HashTable. + typedef typename Titem_::Key Key; ///< Make Titem_::Key a property of this class. typedef SmallArray CItemArray; ///< Type that we will use as item container. typedef CHashTableT COpenList; ///< How pointers to open nodes will be stored. typedef CHashTableT CClosedList; ///< How pointers to closed nodes will be stored. diff --git a/src/rail.cpp b/src/rail.cpp index d538064a23..1664f78e9a 100644 --- a/src/rail.cpp +++ b/src/rail.cpp @@ -251,7 +251,7 @@ RailTypes AddDateIntroducedRailTypes(RailTypes current, Date date) /** * Get the rail types the given company can build. - * @param c the company to get the rail types for. + * @param company the company to get the rail types for. * @return the rail types. */ RailTypes GetCompanyRailtypes(CompanyID company) diff --git a/src/rail.h b/src/rail.h index 1bc403d7fd..b7258d3016 100644 --- a/src/rail.h +++ b/src/rail.h @@ -239,7 +239,7 @@ public: * When #INVALID_DATE or a vehicle using this railtype gets introduced earlier, * the vehicle's introduction date will be used instead for this railtype. * The introduction at this date is furthermore limited by the - * #introduction_required_types. + * #introduction_required_railtypes. */ Date introduction_date; diff --git a/src/road_func.h b/src/road_func.h index c4af229d53..06be7c4aa0 100644 --- a/src/road_func.h +++ b/src/road_func.h @@ -39,7 +39,7 @@ static inline bool IsValidRoadType(RoadType rt) /** * Whether the given roadtype is valid. - * @param rt the roadtype to check for validness + * @param r the roadtype to check for validness * @return true if and only if valid */ static inline bool IsValidRoadBits(RoadBits r) diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index ed67a52211..207a3f23b2 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -255,7 +255,7 @@ void RoadVehUpdateCache(RoadVehicle *v, bool same_length) * @param flags type of operation. * @param e the engine to build. * @param data unused. - * @param ret[out] the vehicle that has been built. + * @param[out] ret the vehicle that has been built. * @return the cost of this operation or an error. */ CommandCost CmdBuildRoadVehicle(TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **ret) diff --git a/src/saveload/linkgraph_sl.cpp b/src/saveload/linkgraph_sl.cpp index a65f4fc8a5..6044316a47 100644 --- a/src/saveload/linkgraph_sl.cpp +++ b/src/saveload/linkgraph_sl.cpp @@ -132,7 +132,7 @@ static const SaveLoad _edge_desc[] = { /** * Save/load a link graph. - * @param comp Link graph to be saved or loaded. + * @param lg Link graph to be saved or loaded. */ void SaveLoad_LinkGraph(LinkGraph &lg) { diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index f9c3efd758..f23d13a086 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -2786,7 +2786,7 @@ SaveOrLoadResult LoadWithFilter(LoadFilter *reader) * Main Save or Load function where the high-level saveload functions are * handled. It opens the savegame, selects format and checks versions * @param filename The name of the savegame being created/loaded - * @param mode Save or load mode. Load can also be a TTD(Patch) game. Use #SL_LOAD, #SL_OLD_LOAD, #SL_LOAD_CHECK, or #SL_SAVE. + * @param fop Save or load mode. Load can also be a TTD(Patch) game. * @param sb The sub directory to save the savegame in * @param threaded True when threaded saving is allowed * @return Return the result of the action. #SL_OK, #SL_ERROR, or #SL_REINIT ("unload" the game) diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 3405f3351c..cca56ce07e 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -488,7 +488,7 @@ static inline bool SlIsObjectCurrentlyValid(uint16 version_from, uint16 version_ * Get the NumberType of a setting. This describes the integer type * as it is represented in memory * @param type VarType holding information about the variable-type - * @return return the SLE_VAR_* part of a variable-type description + * @return the SLE_VAR_* part of a variable-type description */ static inline VarType GetVarMemType(VarType type) { @@ -496,10 +496,10 @@ static inline VarType GetVarMemType(VarType type) } /** - * Get the #FileType of a setting. This describes the integer type + * Get the FileType of a setting. This describes the integer type * as it is represented in a savegame/file * @param type VarType holding information about the file-type - * @param return the SLE_FILE_* part of a variable-type description + * @return the SLE_FILE_* part of a variable-type description */ static inline VarType GetVarFileType(VarType type) { diff --git a/src/screenshot.cpp b/src/screenshot.cpp index 1e7a45645c..700a065669 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -708,7 +708,7 @@ static bool MakeSmallScreenshot(bool crashlog) /** * Configure a ViewPort for rendering (a part of) the map into a screenshot. * @param t Screenshot type - * @param [out] vp Result viewport + * @param[out] vp Result viewport */ void SetupScreenshotViewport(ScreenshotType t, ViewPort *vp) { @@ -764,7 +764,7 @@ static bool MakeLargeWorldScreenshot(ScreenshotType t) /** * Callback for generating a heightmap. Supports 8bpp grayscale only. * @param userdata Pointer to user data. - * @param buf Destination buffer. + * @param buffer Destination buffer. * @param y Line number of the first line to write. * @param pitch Number of pixels to write (1 byte for 8bpp, 4 bytes for 32bpp). @see Colour * @param n Number of lines to write. diff --git a/src/settings.cpp b/src/settings.cpp index d819450221..0dc1e24d45 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1459,7 +1459,7 @@ static int DecodeHexNibble(char c) * Parse a sequence of characters (supposedly hex digits) into a sequence of bytes. * After the hex number should be a \c '|' character. * @param pos First character to convert. - * @param dest [out] Output byte array to write the bytes. + * @param[out] dest Output byte array to write the bytes. * @param dest_size Number of bytes in \a dest. * @return Whether reading was successful. */ @@ -1748,7 +1748,7 @@ void SaveToConfig() /** * Get the list of known NewGrf presets. - * @param list[inout] Pointer to list for storing the preset names. + * @param[in,out] list Pointer to list for storing the preset names. */ void GetGRFPresetList(GRFPresetList *list) { diff --git a/src/settings_type.h b/src/settings_type.h index f9cc00f3a3..690f6d8036 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -99,7 +99,7 @@ struct GUISettings { bool smooth_scroll; ///< smooth scroll viewports bool measure_tooltip; ///< show a permanent tooltip when dragging tools byte liveries; ///< options for displaying company liveries, 0=none, 1=self, 2=all - bool prefer_teamchat; ///< choose the chat message target with , true=all clients, false=your team + bool prefer_teamchat; ///< choose the chat message target with \, true=all clients, false=your team uint8 advanced_vehicle_list; ///< use the "advanced" vehicle list uint8 loading_indicators; ///< show loading indicators uint8 default_rail_type; ///< the default rail type for the rail GUI diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp index dd92e2627b..44a3f6f265 100644 --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -205,7 +205,6 @@ static const char *DEFAULTS_GROUP_NAME = "defaults"; ///< Name of the group c /** * Load the INI file. * @param filename Name of the file to load. - * @param subdir The subdirectory to load from. * @return Loaded INI data. */ static IniLoadFile *LoadIniFile(const char *filename) @@ -413,12 +412,12 @@ static const OptionData _opts[] = { * After loading, the [pre-amble] group is copied verbatim if it exists. * * For every group with a name that matches a template name the template is written. - * It starts with a optional '#if' line if an 'if' item exists in the group. The item - * value is used as condition. Similarly, '#ifdef' and '#ifndef' lines are also written. + * It starts with a optional \c \#if line if an 'if' item exists in the group. The item + * value is used as condition. Similarly, \c \#ifdef and \c \#ifndef lines are also written. * Below the macro processor directives, the value of the template is written * at a line with its variables replaced by item values of the group being written. * If the group has no item for the variable, the [defaults] group is tried as fall back. - * Finally, '#endif' lines are written to match the macro processor lines. + * Finally, \c \#endif lines are written to match the macro processor lines. * * Last but not least, the [post-amble] group is copied verbatim. * diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index ca8bdfc8e7..e606afc0ce 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -654,7 +654,7 @@ bool Ship::Tick() * @param flags type of operation. * @param e the engine to build. * @param data unused. - * @param ret[out] the vehicle that has been built. + * @param[out] ret the vehicle that has been built. * @return the cost of this operation or an error. */ CommandCost CmdBuildShip(TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **ret) diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 7e3e759531..135d7491c1 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -416,7 +416,7 @@ static const byte _tiletype_importance[] = { /** * Return the colour a tile would be displayed with in the small map in mode "Contour". * @param tile The tile of which we would like to get the colour. - * @param t Effective tile type of the tile (see #GetTileColours). + * @param t Effective tile type of the tile (see #SmallMapWindow::GetTileColours). * @return The colour of tile in the small map in mode "Contour" */ static inline uint32 GetSmallMapContoursPixels(TileIndex tile, TileType t) @@ -429,7 +429,7 @@ static inline uint32 GetSmallMapContoursPixels(TileIndex tile, TileType t) * Return the colour a tile would be displayed with in the small map in mode "Vehicles". * * @param tile The tile of which we would like to get the colour. - * @param t Effective tile type of the tile (see #GetTileColours). + * @param t Effective tile type of the tile (see #SmallMapWindow::GetTileColours). * @return The colour of tile in the small map in mode "Vehicles" */ static inline uint32 GetSmallMapVehiclesPixels(TileIndex tile, TileType t) @@ -442,7 +442,7 @@ static inline uint32 GetSmallMapVehiclesPixels(TileIndex tile, TileType t) * Return the colour a tile would be displayed with in the small map in mode "Industries". * * @param tile The tile of which we would like to get the colour. - * @param t Effective tile type of the tile (see #GetTileColours). + * @param t Effective tile type of the tile (see #SmallMapWindow::GetTileColours). * @return The colour of tile in the small map in mode "Industries" */ static inline uint32 GetSmallMapIndustriesPixels(TileIndex tile, TileType t) @@ -455,7 +455,7 @@ static inline uint32 GetSmallMapIndustriesPixels(TileIndex tile, TileType t) * Return the colour a tile would be displayed with in the small map in mode "Routes". * * @param tile The tile of which we would like to get the colour. - * @param t Effective tile type of the tile (see #GetTileColours). + * @param t Effective tile type of the tile (see #SmallMapWindow::GetTileColours). * @return The colour of tile in the small map in mode "Routes" */ static inline uint32 GetSmallMapRoutesPixels(TileIndex tile, TileType t) @@ -488,7 +488,7 @@ static inline uint32 GetSmallMapRoutesPixels(TileIndex tile, TileType t) * Return the colour a tile would be displayed with in the small map in mode "link stats". * * @param tile The tile of which we would like to get the colour. - * @param t Effective tile type of the tile (see #GetTileColours). + * @param t Effective tile type of the tile (see #SmallMapWindow::GetTileColours). * @return The colour of tile in the small map in mode "link stats" */ static inline uint32 GetSmallMapLinkStatsPixels(TileIndex tile, TileType t) @@ -511,7 +511,7 @@ static const uint32 _vegetation_clear_bits[] = { * Return the colour a tile would be displayed with in the smallmap in mode "Vegetation". * * @param tile The tile of which we would like to get the colour. - * @param t Effective tile type of the tile (see #GetTileColours). + * @param t Effective tile type of the tile (see #SmallMapWindow::GetTileColours). * @return The colour of tile in the smallmap in mode "Vegetation" */ static inline uint32 GetSmallMapVegetationPixels(TileIndex tile, TileType t) @@ -538,7 +538,7 @@ static inline uint32 GetSmallMapVegetationPixels(TileIndex tile, TileType t) * Return the colour a tile would be displayed with in the small map in mode "Owner". * * @param tile The tile of which we would like to get the colour. - * @param t Effective tile type of the tile (see #GetTileColours). + * @param t Effective tile type of the tile (see #SmallMapWindow::GetTileColours). * @return The colour of tile in the small map in mode "Owner" */ static inline uint32 GetSmallMapOwnerPixels(TileIndex tile, TileType t) @@ -611,7 +611,7 @@ inline Point SmallMapWindow::RemapTile(int tile_x, int tile_y) const * that tile for a point in the smallmap. * @param px Horizontal coordinate of the pixel. * @param py Vertical coordinate of the pixel. - * @param sub[out] Pixel position at the tile (0..3). + * @param[out] sub Pixel position at the tile (0..3). * @param add_sub Add current #subscroll to the position. * @return Tile being displayed at the given position relative to #scroll_x and #scroll_y. * @note The #subscroll offset is already accounted for. @@ -641,11 +641,11 @@ inline Point SmallMapWindow::PixelToTile(int px, int py, int *sub, bool add_sub) /** * Compute base parameters of the smallmap such that tile (\a tx, \a ty) starts at pixel (\a x, \a y). - * @param tx Tile x coordinate. - * @param ty Tile y coordinate. - * @param x Non-negative horizontal position in the display where the tile starts. - * @param y Non-negative vertical position in the display where the tile starts. - * @param sub [out] Value of #subscroll needed. + * @param tx Tile x coordinate. + * @param ty Tile y coordinate. + * @param x Non-negative horizontal position in the display where the tile starts. + * @param y Non-negative vertical position in the display where the tile starts. + * @param[out] sub Value of #subscroll needed. * @return #scroll_x, #scroll_y values. */ Point SmallMapWindow::ComputeScroll(int tx, int ty, int x, int y, int *sub) diff --git a/src/station_base.h b/src/station_base.h index 5e16b0d548..086d4332c5 100644 --- a/src/station_base.h +++ b/src/station_base.h @@ -516,7 +516,7 @@ private: public: /** * Construct the iterator. - * @param ta Area, i.e. begin point and width/height of to-be-iterated area. + * @param st Station the airport is part of. */ AirportTileIterator(const Station *st) : OrthogonalTileIterator(st->airport), st(st) { diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 6dd7bb2fd9..ca5cbac8b7 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -662,7 +662,7 @@ static void UpdateStationSignCoord(BaseStation *st) /** * Common part of building various station parts and possibly attaching them to an existing one. - * @param [in,out] st Station to attach to + * @param[in,out] st Station to attach to * @param flags Command flags * @param reuse Whether to try to reuse a deleted station (gray sign) if possible * @param area Area occupied by the new part @@ -2624,9 +2624,9 @@ const DrawTileSprites *GetStationTileLayout(StationType st, byte gfx) * Check whether a sprite is a track sprite, which can be replaced by a non-track ground sprite and a rail overlay. * If the ground sprite is suitable, \a ground is replaced with the new non-track ground sprite, and \a overlay_offset * is set to the overlay to draw. - * @param ti Positional info for the tile to decide snowyness etc. May be NULL. - * @param [in,out] ground Groundsprite to draw. - * @param [out] overlay_offset Overlay to draw. + * @param ti Positional info for the tile to decide snowyness etc. May be NULL. + * @param[in,out] ground Groundsprite to draw. + * @param[out] overlay_offset Overlay to draw. * @return true if overlay can be drawn. */ bool SplitGroundSpriteForOverlay(const TileInfo *ti, SpriteID *ground, RailTrackOffset *overlay_offset) diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 52738ab13f..3f64b139ac 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -802,7 +802,6 @@ static const NWidgetPart _nested_station_view_widgets[] = { * @param left left most coordinate to draw on * @param right right most coordinate to draw on * @param y y coordinate - * @param width the width of the view */ static void DrawCargoIcons(CargoID i, uint waiting, int left, int right, int y) { diff --git a/src/strgen/strgen_base.cpp b/src/strgen/strgen_base.cpp index 385ca72b2a..8d46b1b271 100644 --- a/src/strgen/strgen_base.cpp +++ b/src/strgen/strgen_base.cpp @@ -85,7 +85,7 @@ void LangString::FreeTranslation() /** * Create a new string data container. - * @param max_strings The maximum number of strings. + * @param tabs The maximum number of strings. */ StringData::StringData(size_t tabs) : tabs(tabs), max_strings(tabs * TAB_SIZE) { diff --git a/src/string_base.h b/src/string_base.h index e1eaed3496..02856cf1c6 100644 --- a/src/string_base.h +++ b/src/string_base.h @@ -41,9 +41,9 @@ public: /** * Change the current string cursor. - * @param p New cursor position. + * @param pos New cursor position. * @return Actual new cursor position at the next valid character boundary. - * @pre p has to be inside the current string. + * @pre pos has to be inside the current string. */ virtual size_t SetCurPosition(size_t pos) = 0; diff --git a/src/strings.cpp b/src/strings.cpp index b793503187..1ff7e2aead 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -56,7 +56,7 @@ icu::Collator *_current_collator = NULL; ///< Collator for the language #endif /* WITH_ICU_SORT */ static uint64 _global_string_params_data[20]; ///< Global array of string parameters. To access, use #SetDParam. -static WChar _global_string_params_type[20]; ///< Type of parameters stored in #_decode_parameters +static WChar _global_string_params_type[20]; ///< Type of parameters stored in #_global_string_params StringParameters _global_string_params(_global_string_params_data, 20, _global_string_params_type); /** Reset the type array. */ @@ -760,11 +760,10 @@ uint ConvertDisplaySpeedToKmhishSpeed(uint speed) } /** * Parse most format codes within a string and write the result to a buffer. - * @param buff The buffer to write the final string to. - * @param str The original string with format codes. - * @param args Pointer to extra arguments used by various string codes. - * @param case_index - * @param last Pointer to just past the end of the buff array. + * @param buff The buffer to write the final string to. + * @param str_arg The original string with format codes. + * @param args Pointer to extra arguments used by various string codes. + * @param last Pointer to just past the end of the buff array. * @param dry_run True when the argt array is not yet initialized. */ static char *FormatString(char *buff, const char *str_arg, StringParameters *args, const char *last, uint case_index, bool game_script, bool dry_run) @@ -2003,7 +2002,7 @@ const char *GetCurrentLanguageIsoCode() /** * Check whether there are glyphs missing in the current language. - * @param Pointer to an address for storing the text pointer. + * @param[out] str Pointer to an address for storing the text pointer. * @return If glyphs are missing, return \c true, else return \c false. * @post If \c true is returned and str is not NULL, *str points to a string that is found to contain at least one missing glyph. */ diff --git a/src/textbuf.cpp b/src/textbuf.cpp index 3d219e916d..61e449d3ae 100644 --- a/src/textbuf.cpp +++ b/src/textbuf.cpp @@ -367,7 +367,6 @@ bool Textbuf::MovePos(uint16 keycode) /** * Initialize the textbuffer by supplying it the buffer to write into * and the maximum length of this buffer - * @param buf the buffer that will be holding the data for input * @param max_bytes maximum size in bytes, including terminating '\0' * @param max_chars maximum size in chars, including terminating '\0' */ diff --git a/src/tile_map.cpp b/src/tile_map.cpp index c566ad02cd..d73beeb886 100644 --- a/src/tile_map.cpp +++ b/src/tile_map.cpp @@ -70,11 +70,11 @@ uint TileHeightOutsideMap(int x, int y) /** * Get a tile's slope given the heigh of its four corners. - * @param hnorth The height at the northern corner in the same unit as TileHeight. - * @param hwest The height at the western corner in the same unit as TileHeight. - * @param heast The height at the eastern corner in the same unit as TileHeight. - * @param hsouth The height at the southern corner in the same unit as TileHeight. - * @param [out] h The lowest height of the four corners. + * @param hnorth The height at the northern corner in the same unit as TileHeight. + * @param hwest The height at the western corner in the same unit as TileHeight. + * @param heast The height at the eastern corner in the same unit as TileHeight. + * @param hsouth The height at the southern corner in the same unit as TileHeight. + * @param[out] h The lowest height of the four corners. * @return The slope. */ static Slope GetTileSlopeGivenHeight(int hnorth, int hwest, int heast, int hsouth, int *h) @@ -134,7 +134,8 @@ Slope GetTileSlope(TileIndex tile, int *h) /** * Return the slope of a given tile outside the map. * - * @param tile Tile outside the map to compute slope of. + * @param x X-coordinate of the tile outside to compute height of. + * @param y Y-coordinate of the tile outside to compute height of. * @param h If not \c NULL, pointer to storage of z height. * @return Slope of the tile outside map, except for the HALFTILE part. */ @@ -194,7 +195,8 @@ int GetTileZ(TileIndex tile) /** * Get bottom height of the tile outside map. * - * @param tile Tile outside the map to compute height of. + * @param x X-coordinate of the tile outside to compute height of. + * @param y Y-coordinate of the tile outside to compute height of. * @return Minimum height of the tile outside the map. */ int GetTilePixelZOutsideMap(int x, int y) @@ -229,7 +231,8 @@ int GetTileMaxZ(TileIndex t) * * @see Detailed description in header. * - * @param tile Tile outside to compute height of. + * @param x X-coordinate of the tile outside to compute height of. + * @param y Y-coordinate of the tile outside to compute height of. * @return Maximum height of the tile. */ int GetTileMaxPixelZOutsideMap(int x, int y) diff --git a/src/tile_map.h b/src/tile_map.h index 66726df610..7ee5727bea 100644 --- a/src/tile_map.h +++ b/src/tile_map.h @@ -293,7 +293,7 @@ int GetTilePixelZOutsideMap(int x, int y); /** * Get top height of the tile - * @param t Tile to compute height of + * @param tile Tile to compute height of * @return Maximum height of the tile */ static inline int GetTileMaxPixelZ(TileIndex tile) diff --git a/src/tilematrix_type.hpp b/src/tilematrix_type.hpp index 56f2541438..f9c7392b24 100644 --- a/src/tilematrix_type.hpp +++ b/src/tilematrix_type.hpp @@ -87,7 +87,7 @@ public: /** * Get the area of the matrix square that contains a specific tile. - * @param The tile to get the map area for. + * @param tile The tile to get the map area for. * @param extend Extend the area by this many squares on all sides. * @return Tile area containing the tile. */ diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp index 664dc80347..5dd45561f3 100644 --- a/src/timetable_gui.cpp +++ b/src/timetable_gui.cpp @@ -139,7 +139,7 @@ static void FillTimetableArrivalDepartureTable(const Vehicle *v, VehicleOrderID /** * Callback for when a time has been chosen to start the time table - * @param window the window related to the setting of the date + * @param w the window related to the setting of the date * @param date the actually chosen date */ static void ChangeTimetableStartCallback(const Window *w, Date date) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 6ebf4e2987..b8c102ef32 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -3145,7 +3145,7 @@ static void UpdateTownRating(Town *t) /** * Updates town grow counter after growth rate change. * Preserves relative house builting progress whenever it can. - * @param town The town to calculate grow counter for + * @param t The town to calculate grow counter for * @param prev_growth_rate Town growth rate before it changed (one that was used with grow counter to be updated) */ static void UpdateTownGrowCounter(Town *t, uint16 prev_growth_rate) @@ -3160,7 +3160,7 @@ static void UpdateTownGrowCounter(Town *t, uint16 prev_growth_rate) /** * Calculates amount of active stations in the range of town (HZB_TOWN_EDGE). - * @param town The town to calculate stations for + * @param t The town to calculate stations for * @returns Amount of active stations */ static int CountActiveStations(Town *t) @@ -3180,7 +3180,7 @@ static int CountActiveStations(Town *t) /** * Calculates town growth rate in normal conditions (custom growth rate not set). * If town growth speed is set to None(0) returns the same rate as if it was Normal(2). - * @param town The town to calculate growth rate for + * @param t The town to calculate growth rate for * @returns Calculated growth rate */ static uint GetNormalGrowthRate(Town *t) @@ -3203,7 +3203,7 @@ static uint GetNormalGrowthRate(Town *t) /** * Updates town growth rate. - * @param town The town to update growth rate for + * @param t The town to update growth rate for */ static void UpdateTownGrowthRate(Town *t) { @@ -3216,7 +3216,7 @@ static void UpdateTownGrowthRate(Town *t) /** * Updates town growth state (whether it is growing or not). - * @param town The town to update growth for + * @param t The town to update growth for */ static void UpdateTownGrowth(Town *t) { diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 60a7b2ca92..b1eeab1bd8 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -581,7 +581,7 @@ void GetTrainSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, * @param tile tile of the depot where rail-vehicle is built. * @param flags type of operation. * @param e the engine to build. - * @param ret[out] the vehicle that has been built. + * @param[out] ret the vehicle that has been built. * @return the cost of this operation or an error. */ static CommandCost CmdBuildRailWagon(TileIndex tile, DoCommandFlag flags, const Engine *e, Vehicle **ret) @@ -713,7 +713,7 @@ static void AddRearEngineToMultiheadedTrain(Train *v) * @param flags type of operation. * @param e the engine to build. * @param data bit 0 prevents any free cars from being added to the train. - * @param ret[out] the vehicle that has been built. + * @param[out] ret the vehicle that has been built. * @return the cost of this operation or an error. */ CommandCost CmdBuildRailVehicle(TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **ret) @@ -935,8 +935,8 @@ static void NormaliseSubtypes(Train *chain) * @note All vehicles are/were 'heads' of their chains. * @param original_dst The original destination chain. * @param dst The destination chain after constructing the train. - * @param original_dst The original source chain. - * @param dst The source chain after constructing the train. + * @param original_src The original source chain. + * @param src The source chain after constructing the train. * @return possible error of this command. */ static CommandCost CheckNewTrain(Train *original_dst, Train *dst, Train *original_src, Train *src) @@ -1054,8 +1054,8 @@ static CommandCost CheckTrainAttachment(Train *t) * @note All vehicles are/were 'heads' of their chains. * @param original_dst The original destination chain. * @param dst The destination chain after constructing the train. - * @param original_dst The original source chain. - * @param dst The source chain after constructing the train. + * @param original_src The original source chain. + * @param src The source chain after constructing the train. * @param check_limit Whether to check the vehicle limit. * @return possible error of this command. */ @@ -1511,8 +1511,8 @@ static void MarkTrainAsStuck(Train *v) * Swap the two up/down flags in two ways: * - Swap values of \a swap_flag1 and \a swap_flag2, and * - If going up previously (#GVF_GOINGUP_BIT set), the #GVF_GOINGDOWN_BIT is set, and vice versa. - * @param swap_flag1 [inout] First train flag. - * @param swap_flag2 [inout] Second train flag. + * @param[in,out] swap_flag1 First train flag. + * @param[in,out] swap_flag2 Second train flag. */ static void SwapTrainFlags(uint16 *swap_flag1, uint16 *swap_flag2) { @@ -2014,9 +2014,9 @@ static FindDepotData FindClosestTrainDepot(Train *v, int max_distance) /** * Locate the closest depot for this consist, and return the information to the caller. - * @param location [out] If not \c NULL and a depot is found, store its location in the given address. - * @param destination [out] If not \c NULL and a depot is found, store its index in the given address. - * @param reverse [out] If not \c NULL and a depot is found, store reversal information in the given address. + * @param[out] location If not \c NULL and a depot is found, store its location in the given address. + * @param[out] destination If not \c NULL and a depot is found, store its index in the given address. + * @param[out] reverse If not \c NULL and a depot is found, store reversal information in the given address. * @return A depot has been found. */ bool Train::FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse) @@ -2307,9 +2307,9 @@ static const byte _initial_tile_subcoord[6][4][3] = { * @param tile The tile the train is about to enter * @param enterdir Diagonal direction the train is coming from * @param tracks Usable tracks on the new tile - * @param path_found [out] Whether a path has been found or not. + * @param[out] path_found Whether a path has been found or not. * @param do_track_reservation Path reservation is requested - * @param dest [out] State and destination of the requested path + * @param[out] dest State and destination of the requested path * @return The best track the train should follow */ static Track DoTrainPathfind(const Train *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, bool do_track_reservation, PBSTileInfo *dest) @@ -2419,11 +2419,11 @@ static PBSTileInfo ExtendTrainReservation(const Train *v, TrackBits *new_tracks, * @param override_railtype Whether all physically compatible railtypes should be followed. * @return True if a path to a safe stopping tile could be reserved. */ -static bool TryReserveSafeTrack(const Train *v, TileIndex tile, Trackdir td, bool override_tailtype) +static bool TryReserveSafeTrack(const Train *v, TileIndex tile, Trackdir td, bool override_railtype) { switch (_settings_game.pf.pathfinder_for_trains) { - case VPF_NPF: return NPFTrainFindNearestSafeTile(v, tile, td, override_tailtype); - case VPF_YAPF: return YapfTrainFindNearestSafeTile(v, tile, td, override_tailtype); + case VPF_NPF: return NPFTrainFindNearestSafeTile(v, tile, td, override_railtype); + case VPF_YAPF: return YapfTrainFindNearestSafeTile(v, tile, td, override_railtype); default: NOT_REACHED(); } diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index ce14188fd0..27b3ea347e 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -204,6 +204,7 @@ static CommandCost CheckBridgeSlopeSouth(Axis axis, Slope *tileh, int *z) * Is a bridge of the specified type and length available? * @param bridge_type Wanted type of bridge. * @param bridge_len Wanted length of the bridge. + * @param flags Type of operation. * @return A succeeded (the requested bridge is available) or failed (it cannot be built) command. */ CommandCost CheckBridgeAvailability(BridgeType bridge_type, uint bridge_len, DoCommandFlag flags) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index ae826a50c0..9015396a8b 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -95,7 +95,7 @@ INSTANTIATE_POOL_METHODS(Vehicle) /** * Determine shared bounds of all sprites. - * @param [out] bounds Shared bounds. + * @param[out] bounds Shared bounds. */ void VehicleSpriteSeq::GetBounds(Rect *bounds) const { @@ -2859,7 +2859,7 @@ const uint16 &Vehicle::GetGroundVehicleFlags() const /** * Calculates the set of vehicles that will be affected by a given selection. - * @param set [inout] Set of affected vehicles. + * @param[in,out] set Set of affected vehicles. * @param v First vehicle of the selection. * @param num_vehicles Number of vehicles in the selection (not counting articulated parts). * @pre \a set must be empty. diff --git a/src/vehicle_base.h b/src/vehicle_base.h index 73f499c483..b2a2a5d7a4 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -324,7 +324,7 @@ public: uint16 load_unload_ticks; ///< Ticks to wait before starting next cycle. GroupID group_id; ///< Index of group Pool array - byte subtype; ///< subtype (Filled with values from #EffectVehicles/#TrainSubTypes/#AircraftSubTypes) + byte subtype; ///< subtype (Filled with values from #AircraftSubType/#DisasterSubType/#EffectVehicleType/#GroundVehicleSubtypeFlags) NewGRFCache grf_cache; ///< Cache of often used calculated NewGRF values VehicleCache vcache; ///< Cache of often used vehicle values. @@ -437,7 +437,7 @@ public: /** * Gets the sprite to show for the given direction * @param direction the direction the vehicle is facing - * @param [out] result Vehicle sprite sequence. + * @param[out] result Vehicle sprite sequence. */ virtual void GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const { result->Clear(); } diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 339365f780..17ffb53ac4 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -206,7 +206,7 @@ CommandCost CmdSellVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 * @param engine_type Which engine to refit * @param new_cid Cargo type we are refitting to. * @param new_subtype New cargo subtype. - * @param [out] auto_refit_allowed The refit is allowed as an auto-refit. + * @param[out] auto_refit_allowed The refit is allowed as an auto-refit. * @return Price for refitting */ static int GetRefitCostFactor(const Vehicle *v, EngineID engine_type, CargoID new_cid, byte new_subtype, bool *auto_refit_allowed) @@ -238,7 +238,7 @@ static int GetRefitCostFactor(const Vehicle *v, EngineID engine_type, CargoID ne * @param engine_type Which engine to refit * @param new_cid Cargo type we are refitting to. * @param new_subtype New cargo subtype. - * @param [out] auto_refit_allowed The refit is allowed as an auto-refit. + * @param[out] auto_refit_allowed The refit is allowed as an auto-refit. * @return Price for refitting */ static CommandCost GetRefitCost(const Vehicle *v, EngineID engine_type, CargoID new_cid, byte new_subtype, bool *auto_refit_allowed) diff --git a/src/vehicle_func.h b/src/vehicle_func.h index 9eb6b91219..17ec9e28da 100644 --- a/src/vehicle_func.h +++ b/src/vehicle_func.h @@ -31,7 +31,7 @@ static const Money VEHICLE_PROFIT_THRESHOLD = 10000; ///< Threshold for a /** * Helper to check whether an image index is valid for a particular vehicle. - * @param The type of vehicle. + * @tparam T The type of vehicle. * @param image_index The image index to check. * @return True iff the image index is valid. */ diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 667836f566..4926f7a4fc 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -681,7 +681,7 @@ struct RefitWindow : public Window { /** * Gets the #StringID to use for displaying capacity. - * @param Cargo and cargo subtype to check for capacity. + * @param option Cargo and cargo subtype to check for capacity. * @return INVALID_STRING_ID if there is no capacity. StringID to use in any other case. * @post String parameters have been set. */ diff --git a/src/viewport_sprite_sorter_sse4.cpp b/src/viewport_sprite_sorter_sse4.cpp index e685fff572..cd898f00e9 100644 --- a/src/viewport_sprite_sorter_sse4.cpp +++ b/src/viewport_sprite_sorter_sse4.cpp @@ -7,7 +7,7 @@ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . */ -/** @file viewport_sprite_sorter_sse.cpp Sprite sorter that uses SSE4.1. */ +/** @file viewport_sprite_sorter_sse4.cpp Sprite sorter that uses SSE4.1. */ #ifdef WITH_SSE diff --git a/src/widget.cpp b/src/widget.cpp index 4e411ada23..73190f5e67 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -755,7 +755,7 @@ NWidgetBase::NWidgetBase(WidgetType tp) : ZeroedMemoryAllocator() */ /** - * @fn void FillNestedArray(NWidgetBase **array, uint length) + * @fn void NWidgetBase::FillNestedArray(NWidgetBase **array, uint length) * Fill the Window::nested_array array with pointers to nested widgets in the tree. * @param array Base pointer of the array. * @param length Length of the array. @@ -1673,10 +1673,10 @@ NWidgetCore *NWidgetMatrix::GetWidgetFromPos(int x, int y) /** * Get the different offsets that are influenced by scrolling. - * @param [out] start_x The start position in columns (index of the left-most column, swapped in RTL). - * @param [out] start_y The start position in rows. - * @param [out] base_offs_x The base horizontal offset in pixels (X position of the column \a start_x). - * @param [out] base_offs_y The base vertical offset in pixels (Y position of the column \a start_y). + * @param[out] start_x The start position in columns (index of the left-most column, swapped in RTL). + * @param[out] start_y The start position in rows. + * @param[out] base_offs_x The base horizontal offset in pixels (X position of the column \a start_x). + * @param[out] base_offs_y The base vertical offset in pixels (Y position of the column \a start_y). */ void NWidgetMatrix::GetScrollOffsets(int &start_x, int &start_y, int &base_offs_x, int &base_offs_y) { @@ -2805,7 +2805,7 @@ NWidgetContainer *MakeNWidgets(const NWidgetPart *parts, int count, int *biggest * @param parts Array with parts of the widgets. * @param count Length of the \a parts array. * @param biggest_index Pointer to biggest nested widget index collected in the tree. - * @param [out] shade_select Pointer to the inserted shade selection widget (\c NULL if not unserted). + * @param[out] shade_select Pointer to the inserted shade selection widget (\c NULL if not unserted). * @return Root of the nested widget tree, a vertical container containing the entire GUI. * @ingroup NestedWidgetParts * @pre \c biggest_index != NULL diff --git a/src/widget_type.h b/src/widget_type.h index 163d45800e..33fb8bce08 100644 --- a/src/widget_type.h +++ b/src/widget_type.h @@ -257,7 +257,7 @@ enum NWidgetDisplay { NDB_SHADE_GREY = 3, ///< Shade viewport to grey-scale. NDB_SHADE_DIMMED = 4, ///< Display dimmed colours in the viewport. /* Button dropdown widget. */ - NDB_DROPDOWN_ACTIVE = 5, ///< Dropdown menu of the button dropdown widget is active. @see #NWID_BUTTON_DRPDOWN + NDB_DROPDOWN_ACTIVE = 5, ///< Dropdown menu of the button dropdown widget is active. @see #NWID_BUTTON_DROPDOWN /* Scrollbar widget. */ NDB_SCROLLBAR_UP = 6, ///< Up-button is lowered bit. NDB_SCROLLBAR_DOWN = 7, ///< Down-button is lowered bit. @@ -400,7 +400,7 @@ enum StackedZeroSizePlanes { * There are also a number of special planes (defined in #StackedZeroSizePlanes) that have zero size in one direction (and are stretchable in * the other direction) or have zero size in both directions. They are used to make all child planes of the widget disappear. * Unlike switching between the regular display planes (that all have the same size), switching from or to one of the zero-sized planes means that - * a #Windows::ReInit() is needed to re-initialize the window since its size changes. + * a #Window::ReInit() is needed to re-initialize the window since its size changes. */ class NWidgetStacked : public NWidgetContainer { public: @@ -567,7 +567,7 @@ private: * Nested widget to display a viewport in a window. * After initializing the nested widget tree, call #InitializeViewport(). After changing the window size, * call #UpdateViewportCoordinates() eg from Window::OnResize(). - * If the #display_flags field contains the #ND_NO_TRANSPARENCY bit, the viewport will disable transparency. + * If the #disp_flags field contains the #ND_NO_TRANSPARENCY bit, the viewport will disable transparency. * Shading to grey-scale is controlled with the #ND_SHADE_GREY bit (used for B&W news papers), the #ND_SHADE_DIMMED gives dimmed colours (for colour news papers). * @todo Class derives from #NWidgetCore, but does not use #colour, #widget_data, or #tool_tip. * @ingroup NestedWidgets @@ -1124,8 +1124,8 @@ static inline NWidgetPart NWidget(WidgetType tp, Colours col, int16 idx = -1) /** * Widget part function for starting a new horizontal container, vertical container, or spacer widget. - * @param tp Type of the new nested widget, #NWID_HORIZONTAL(_LTR), #NWID_VERTICAL, #NWID_SPACER, #NWID_SELECTION, and #NWID_MATRIX. - * @param cont_flags Flags for the containers (#NWID_HORIZONTAL(_LTR) and #NWID_VERTICAL). + * @param tp Type of the new nested widget, #NWID_HORIZONTAL, #NWID_VERTICAL, #NWID_SPACER, #NWID_SELECTION, and #NWID_MATRIX. + * @param cont_flags Flags for the containers (#NWID_HORIZONTAL and #NWID_VERTICAL). * @ingroup NestedWidgetParts */ static inline NWidgetPart NWidget(WidgetType tp, NWidContainerFlags cont_flags = NC_NONE) diff --git a/src/widgets/cheat_widget.h b/src/widgets/cheat_widget.h index 78758f7b11..3209cae239 100644 --- a/src/widgets/cheat_widget.h +++ b/src/widgets/cheat_widget.h @@ -12,7 +12,7 @@ #ifndef WIDGETS_CHEAT_WIDGET_H #define WIDGETS_CHEAT_WIDGET_H -/** Widgets of the #CheatWindow class.. */ +/** Widgets of the #CheatWindow class. */ enum CheatWidgets { WID_C_PANEL, ///< Panel where all cheats are shown in. }; diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp index d4c229cb1f..f8ddf55695 100644 --- a/src/widgets/dropdown.cpp +++ b/src/widgets/dropdown.cpp @@ -111,7 +111,6 @@ struct DropdownWindow : Window { * @param size Size of the dropdown menu window. * @param wi_colour Colour of the parent widget. * @param scroll Dropdown menu has a scrollbar. - * @param widget Widgets of the dropdown menu window. */ DropdownWindow(Window *parent, const DropDownList *list, int selected, int button, bool instant_close, const Point &position, const Dimension &size, Colours wi_colour, bool scroll) : Window(&_dropdown_desc) @@ -182,7 +181,7 @@ struct DropdownWindow : Window { /** * Find the dropdown item under the cursor. - * @param value [out] Selected item, if function returns \c true. + * @param[out] value Selected item, if function returns \c true. * @return Cursor points to a dropdown item. */ bool GetDropDownItem(int &value) diff --git a/src/window.cpp b/src/window.cpp index d46447d52e..d7911bfa40 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -49,7 +49,7 @@ enum ViewportAutoscrolling { }; static Point _drag_delta; ///< delta between mouse cursor and upper left corner of dragged window -static Window *_mouseover_last_w = NULL; ///< Window of the last #MOUSEOVER event. +static Window *_mouseover_last_w = NULL; ///< Window of the last OnMouseOver event. static Window *_last_scroll_window = NULL; ///< Window of the last scroll event. /** List of windows opened at the screen sorted from the front. */ @@ -1115,7 +1115,7 @@ Window *FindWindowById(WindowClass cls, WindowNumber number) /** * Find any window by its class. Useful when searching for a window that uses - * the window number as a #WindowType, like #WC_SEND_NETWORK_MSG. + * the window number as a #WindowClass, like #WC_SEND_NETWORK_MSG. * @param cls Window class * @return Pointer to the found window, or \c NULL if not available */ @@ -1430,7 +1430,6 @@ static void BringWindowToFront(Window *w) /** * Initializes the data (except the position and initial size) of a new Window. - * @param desc Window description. * @param window_number Number being assigned to the new window * @return Window pointer of the newly created window * @pre If nested widgets are used (\a widget is \c NULL), #nested_root and #nested_array_size must be initialized. @@ -2000,7 +1999,7 @@ static void HandleMouseOver() { Window *w = FindWindowFromPt(_cursor.pos.x, _cursor.pos.y); - /* We changed window, put a MOUSEOVER event to the last window */ + /* We changed window, put an OnMouseOver event to the last window */ if (_mouseover_last_w != NULL && _mouseover_last_w != w) { /* Reset mouse-over coordinates of previous window */ Point pt = { -1, -1 }; From e0c0394e373d2f3326383e79d7fcb9f4e288ae02 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sun, 14 Oct 2018 18:17:09 +0100 Subject: [PATCH 051/622] Fix: Remove various dead or unnecessary assignments --- src/gfx_layout.cpp | 9 ++++----- src/industry_gui.cpp | 1 - src/newgrf.cpp | 4 ---- src/saveload/oldloader.cpp | 2 +- src/script/script_info_dummy.cpp | 2 +- src/string.cpp | 2 +- src/strings.cpp | 3 +-- 7 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index 6cef84e13f..c493e69c35 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -498,11 +498,6 @@ const ParagraphLayouter::Line *FallbackParagraphLayout::NextLine(int max_width) return l; } - const WChar *begin = this->buffer; - const WChar *last_space = NULL; - const WChar *last_char = begin; - int width = 0; - int offset = this->buffer - this->buffer_begin; FontMap::iterator iter = this->runs.Begin(); while (iter->first <= offset) { @@ -513,6 +508,10 @@ const ParagraphLayouter::Line *FallbackParagraphLayout::NextLine(int max_width) const FontCache *fc = iter->second->fc; const WChar *next_run = this->buffer_begin + iter->first; + const WChar *begin = this->buffer; + const WChar *last_space = NULL; + const WChar *last_char; + int width = 0; for (;;) { WChar c = *this->buffer; last_char = this->buffer; diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index dd1f765a7d..9108c4e7a7 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -508,7 +508,6 @@ public: y += FONT_HEIGHT_NORMAL; /* Get the additional purchase info text, if it has not already been queried. */ - str = STR_NULL; if (HasBit(indsp->callback_mask, CBM_IND_FUND_MORE_TEXT)) { uint16 callback_res = GetIndustryCallback(CBID_INDUSTRY_FUND_MORE_TEXT, 0, 0, NULL, this->selected_type, INVALID_TILE); if (callback_res != CALLBACK_FAILED && callback_res != 0x400) { diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 9c5a406ca7..93b28a1bcb 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -3472,8 +3472,6 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, } else { /* Declared as been valid, can be used */ itt[k].gfx = tempid; - size = k + 1; - copy_from = itt; } } else if (itt[k].gfx == 0xFF) { itt[k].ti.x = (int8)GB(itt[k].ti.x, 0, 8); @@ -3787,8 +3785,6 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B } else { /* Declared as been valid, can be used */ att[k].gfx = tempid; - size = k + 1; - copy_from = att; } } else if (att[k].gfx == 0xFF) { att[k].ti.x = (int8)GB(att[k].ti.x, 0, 8); diff --git a/src/saveload/oldloader.cpp b/src/saveload/oldloader.cpp index 13ee0e5b06..e0ad0e732a 100644 --- a/src/saveload/oldloader.cpp +++ b/src/saveload/oldloader.cpp @@ -265,7 +265,7 @@ static SavegameType DetermineOldSavegameType(FILE *f, char *title, const char *l case SGT_TTD: title = strecpy(title, "(TTD) ", last); break; default: title = strecpy(title, "(broken) ", last); break; } - title = strecpy(title, temp, last); + strecpy(title, temp, last); } return type; diff --git a/src/script/script_info_dummy.cpp b/src/script/script_info_dummy.cpp index e11c631512..53860386c1 100644 --- a/src/script/script_info_dummy.cpp +++ b/src/script/script_info_dummy.cpp @@ -92,7 +92,7 @@ void Script_CreateDummy(HSQUIRRELVM vm, StringID string, const char *type) p = newline + 1; } while (newline != NULL); - dp = strecpy(dp, " }\n}\n", lastof(dummy_script)); + strecpy(dp, " }\n}\n", lastof(dummy_script)); /* 3) We translate the error message in the character format that Squirrel wants. * We can use the fact that the wchar string printing also uses %s to print diff --git a/src/string.cpp b/src/string.cpp index 4c714a2e02..521d96c4ac 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -170,7 +170,7 @@ void str_fix_scc_encoded(char *str, const char *last) if ((len == 0 && str + 4 > last) || str + len > last) break; WChar c; - len = Utf8Decode(&c, str); + Utf8Decode(&c, str); if (c == '\0') break; if (c == 0xE028 || c == 0xE02A) { diff --git a/src/strings.cpp b/src/strings.cpp index 1ff7e2aead..8ec9844b69 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -818,7 +818,6 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg sub_args.ClearTypeInformation(); memset(sub_args_need_free, 0, sizeof(sub_args_need_free)); - const char *s = str; char *p; uint32 stringid = strtoul(str, &p, 16); if (*p != ':' && *p != '\0') { @@ -837,7 +836,7 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg int i = 0; while (*p != '\0' && i < 20) { uint64 param; - s = ++p; + const char *s = ++p; /* Find the next value */ bool instring = false; From 52ed3bcbaa88717ab50f71150ed9fc0b6af4715a Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sun, 14 Oct 2018 19:31:14 +0100 Subject: [PATCH 052/622] Remove: A few bits of dead code --- src/music_gui.cpp | 1 - src/news_type.h | 13 ------------- src/rail_cmd.cpp | 4 +--- src/string.cpp | 3 +-- src/viewport.cpp | 1 - src/water_cmd.cpp | 4 ++-- 6 files changed, 4 insertions(+), 22 deletions(-) diff --git a/src/music_gui.cpp b/src/music_gui.cpp index e7552fe02f..7bf08fd1dc 100644 --- a/src/music_gui.cpp +++ b/src/music_gui.cpp @@ -592,7 +592,6 @@ struct MusicTrackSelectionWindow : public Window { break; default: NOT_REACHED(); - break; } } }; diff --git a/src/news_type.h b/src/news_type.h index fee7ae38e3..cad15ecbef 100644 --- a/src/news_type.h +++ b/src/news_type.h @@ -17,19 +17,6 @@ #include "strings_type.h" #include "sound_type.h" -/** Constants in the message options window. */ -enum MessageOptionsSpace { - MOS_WIDG_PER_SETTING = 4, ///< Number of widgets needed for each news category, starting at widget #WID_MO_START_OPTION. - - MOS_LEFT_EDGE = 6, ///< Number of pixels between left edge of the window and the options buttons column. - MOS_COLUMN_SPACING = 4, ///< Number of pixels between the buttons and the description columns. - MOS_RIGHT_EDGE = 6, ///< Number of pixels between right edge of the window and the options descriptions column. - MOS_BUTTON_SPACE = 10, ///< Additional space in the button with the option value (for better looks). - - MOS_ABOVE_GLOBAL_SETTINGS = 6, ///< Number of vertical pixels between the categories and the global options. - MOS_BOTTOM_EDGE = 6, ///< Number of pixels between bottom edge of the window and bottom of the global options. -}; - /** * Type of news. */ diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index d5194e0c3b..a0fd968cc6 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -2897,11 +2897,9 @@ int TicksToLeaveDepot(const Train *v) case DIAGDIR_NE: return ((int)(v->x_pos & 0x0F) - ((_fractcoords_enter[dir] & 0x0F) - (length + 1))); case DIAGDIR_SE: return -((int)(v->y_pos & 0x0F) - ((_fractcoords_enter[dir] >> 4) + (length + 1))); case DIAGDIR_SW: return -((int)(v->x_pos & 0x0F) - ((_fractcoords_enter[dir] & 0x0F) + (length + 1))); - default: case DIAGDIR_NW: return ((int)(v->y_pos & 0x0F) - ((_fractcoords_enter[dir] >> 4) - (length + 1))); + default: NOT_REACHED(); } - - return 0; // make compilers happy } /** diff --git a/src/string.cpp b/src/string.cpp index 521d96c4ac..66140b7d4a 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -351,9 +351,8 @@ bool IsValidChar(WChar key, CharSetFilter afilter) case CS_NUMERAL_SPACE: return (key >= '0' && key <= '9') || key == ' '; case CS_ALPHA: return IsPrintable(key) && !(key >= '0' && key <= '9'); case CS_HEXADECIMAL: return (key >= '0' && key <= '9') || (key >= 'a' && key <= 'f') || (key >= 'A' && key <= 'F'); + default: NOT_REACHED(); } - - return false; } #ifdef WIN32 diff --git a/src/viewport.cpp b/src/viewport.cpp index 6e7dfc4951..13f87de1da 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -2445,7 +2445,6 @@ void UpdateTileSelection() break; default: NOT_REACHED(); - break; } _thd.new_pos.x = x1 & ~TILE_UNIT_MASK; _thd.new_pos.y = y1 & ~TILE_UNIT_MASK; diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index 737257a823..31dafe57fa 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -895,7 +895,7 @@ static void GetTileDesc_Water(TileIndex tile, TileDesc *td) case WATER_CLASS_SEA: td->str = STR_LAI_WATER_DESCRIPTION_WATER; break; case WATER_CLASS_CANAL: td->str = STR_LAI_WATER_DESCRIPTION_CANAL; break; case WATER_CLASS_RIVER: td->str = STR_LAI_WATER_DESCRIPTION_RIVER; break; - default: NOT_REACHED(); break; + default: NOT_REACHED(); } break; case WATER_TILE_COAST: td->str = STR_LAI_WATER_DESCRIPTION_COAST_OR_RIVERBANK; break; @@ -904,7 +904,7 @@ static void GetTileDesc_Water(TileIndex tile, TileDesc *td) td->str = STR_LAI_WATER_DESCRIPTION_SHIP_DEPOT; td->build_date = Depot::GetByTile(tile)->build_date; break; - default: NOT_REACHED(); break; + default: NOT_REACHED(); } td->owner[0] = GetTileOwner(tile); From b5028efc1fa862073c908c435f84098ccd246fdc Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sun, 14 Oct 2018 23:36:14 +0100 Subject: [PATCH 053/622] Fix: Protect against a few out of bounds or uninitialised usage errors --- src/newgrf_spritegroup.cpp | 1 + src/pathfinder/opf/opf_ship.cpp | 3 ++- src/pathfinder/yapf/yapf_rail.cpp | 2 ++ src/road_map.h | 1 + src/settingsgen/settingsgen.cpp | 5 ++++- src/strgen/strgen.cpp | 5 ++++- src/town_cmd.cpp | 2 +- src/track_func.h | 2 +- src/window.cpp | 3 +++ 9 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/newgrf_spritegroup.cpp b/src/newgrf_spritegroup.cpp index 086cbf3461..59b845f106 100644 --- a/src/newgrf_spritegroup.cpp +++ b/src/newgrf_spritegroup.cpp @@ -154,6 +154,7 @@ static uint32 RotateRight(uint32 val, uint32 rot) { /* Do not rotate more than necessary */ rot %= 32; + assert(rot > 0); return (val >> rot) | (val << (32 - rot)); } diff --git a/src/pathfinder/opf/opf_ship.cpp b/src/pathfinder/opf/opf_ship.cpp index 1a866337c7..c993f82033 100644 --- a/src/pathfinder/opf/opf_ship.cpp +++ b/src/pathfinder/opf/opf_ship.cpp @@ -145,6 +145,7 @@ static uint FindShipTrack(const Ship *v, TileIndex tile, DiagDirection dir, Trac Track best_track = INVALID_TRACK; + assert(bits != TRACK_BIT_NONE); do { Track i = RemoveFirstTrack(&bits); @@ -176,7 +177,7 @@ good:; best_length = pfs.best_length; bad:; - } while (bits != 0); + } while (bits != TRACK_BIT_NONE); *track = best_track; return best_bird_dist; diff --git a/src/pathfinder/yapf/yapf_rail.cpp b/src/pathfinder/yapf/yapf_rail.cpp index dccee36860..d3f8e8aeee 100644 --- a/src/pathfinder/yapf/yapf_rail.cpp +++ b/src/pathfinder/yapf/yapf_rail.cpp @@ -28,6 +28,8 @@ template void DumpState(Tpf &pf1, Tpf &pf2) pf2.DumpBase(dmp2); FILE *f1 = fopen("yapf1.txt", "wt"); FILE *f2 = fopen("yapf2.txt", "wt"); + assert(f1 != NULL); + assert(f2 != NULL); fwrite(dmp1.m_out.Data(), 1, dmp1.m_out.Size(), f1); fwrite(dmp2.m_out.Data(), 1, dmp2.m_out.Size(), f2); fclose(f1); diff --git a/src/road_map.h b/src/road_map.h index 5b3e6b0900..49526d37f2 100644 --- a/src/road_map.h +++ b/src/road_map.h @@ -449,6 +449,7 @@ enum Roadside { ROADSIDE_GRASS = 1, ///< Road on grass ROADSIDE_PAVED = 2, ///< Road with paved sidewalks ROADSIDE_STREET_LIGHTS = 3, ///< Road with street lights on paved sidewalks + // 4 is unused for historical reasons ROADSIDE_TREES = 5, ///< Road with trees on paved sidewalks ROADSIDE_GRASS_ROAD_WORKS = 6, ///< Road on grass with road works ROADSIDE_PAVED_ROAD_WORKS = 7, ///< Road with sidewalks and road works diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp index 44a3f6f265..ac6db6581c 100644 --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -371,7 +371,10 @@ static bool CompareFiles(const char *n1, const char *n2) if (f2 == NULL) return false; FILE *f1 = fopen(n1, "rb"); - if (f1 == NULL) error("can't open %s", n1); + if (f1 == NULL) { + fclose(f2); + error("can't open %s", n1); + } size_t l1, l2; do { diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp index fa29424658..c231717dac 100644 --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -215,7 +215,10 @@ bool CompareFiles(const char *n1, const char *n2) if (f2 == NULL) return false; FILE *f1 = fopen(n1, "rb"); - if (f1 == NULL) error("can't open %s", n1); + if (f1 == NULL) { + fclose(f2); + error("can't open %s", n1); + } size_t l1, l2; do { diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index b8c102ef32..927651864f 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -719,7 +719,7 @@ void UpdateTownCargoTotal(Town *t) static void UpdateTownCargoes(Town *t, TileIndex start, bool update_total = true) { CargoArray accepted, produced; - CargoTypes dummy; + CargoTypes dummy = 0; /* Gather acceptance for all houses in an area around the start tile. * The area is composed of the square the tile is in, extended one square in all diff --git a/src/track_func.h b/src/track_func.h index 8e2056265e..a55d6d8f20 100644 --- a/src/track_func.h +++ b/src/track_func.h @@ -61,7 +61,7 @@ static inline bool IsValidTrackdirForRoadVehicle(Trackdir trackdir) */ static inline bool IsValidTrackdir(Trackdir trackdir) { - return (1 << trackdir & TRACKDIR_BIT_MASK) != TRACKDIR_BIT_NONE; + return trackdir != INVALID_TRACKDIR && ((1 << trackdir & TRACKDIR_BIT_MASK) != TRACKDIR_BIT_NONE); } /** diff --git a/src/window.cpp b/src/window.cpp index d7911bfa40..cd8769e277 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -938,6 +938,8 @@ static void DrawOverlappedWindow(Window *w, int left, int top, int right, int bo void DrawOverlappedWindowForAll(int left, int top, int right, int bottom) { Window *w; + + DrawPixelInfo *old_dpi = _cur_dpi; DrawPixelInfo bk; _cur_dpi = &bk; @@ -951,6 +953,7 @@ void DrawOverlappedWindowForAll(int left, int top, int right, int bottom) DrawOverlappedWindow(w, max(left, w->left), max(top, w->top), min(right, w->left + w->width), min(bottom, w->top + w->height)); } } + _cur_dpi = old_dpi; } /** From ca5f73b196fc81185c2d08ad69fe9cd478fc0669 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Wed, 17 Oct 2018 20:51:47 +0100 Subject: [PATCH 054/622] Codechange: Turn a define into a constant --- src/window.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/window.cpp b/src/window.cpp index cd8769e277..5b9dad6777 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -2751,18 +2751,17 @@ static void HandleAutoscroll() y -= vp->top; /* here allows scrolling in both x and y axis */ -#define scrollspeed 3 + static const int SCROLLSPEED = 3; if (x - 15 < 0) { - w->viewport->dest_scrollpos_x += ScaleByZoom((x - 15) * scrollspeed, vp->zoom); + w->viewport->dest_scrollpos_x += ScaleByZoom((x - 15) * SCROLLSPEED, vp->zoom); } else if (15 - (vp->width - x) > 0) { - w->viewport->dest_scrollpos_x += ScaleByZoom((15 - (vp->width - x)) * scrollspeed, vp->zoom); + w->viewport->dest_scrollpos_x += ScaleByZoom((15 - (vp->width - x)) * SCROLLSPEED, vp->zoom); } if (y - 15 < 0) { - w->viewport->dest_scrollpos_y += ScaleByZoom((y - 15) * scrollspeed, vp->zoom); + w->viewport->dest_scrollpos_y += ScaleByZoom((y - 15) * SCROLLSPEED, vp->zoom); } else if (15 - (vp->height - y) > 0) { - w->viewport->dest_scrollpos_y += ScaleByZoom((15 - (vp->height - y)) * scrollspeed, vp->zoom); + w->viewport->dest_scrollpos_y += ScaleByZoom((15 - (vp->height - y)) * SCROLLSPEED, vp->zoom); } -#undef scrollspeed } enum MouseClick { From 1778b2d66ec21e544e56e5aaaee816cf8fc955af Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Wed, 17 Oct 2018 20:52:16 +0100 Subject: [PATCH 055/622] Codechange: Merge some duplicated functions --- src/tunnelbridge_cmd.cpp | 47 +++++++++++++++------------------------- 1 file changed, 17 insertions(+), 30 deletions(-) diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index 27b3ea347e..297a01d30a 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -159,40 +159,27 @@ static inline const PalSpriteID *GetBridgeSpriteTable(int index, BridgePieces ta /** - * Determines the foundation for the north bridge head, and tests if the resulting slope is valid. + * Determines the foundation for the bridge head, and tests if the resulting slope is valid. * + * @param bridge_piece Direction of the bridge head. * @param axis Axis of the bridge * @param tileh Slope of the tile under the north bridge head; returns slope on top of foundation * @param z TileZ corresponding to tileh, gets modified as well * @return Error or cost for bridge foundation */ -static CommandCost CheckBridgeSlopeNorth(Axis axis, Slope *tileh, int *z) +static CommandCost CheckBridgeSlope(BridgePieces bridge_piece, Axis axis, Slope *tileh, int *z) { + assert(bridge_piece == BRIDGE_PIECE_NORTH || bridge_piece == BRIDGE_PIECE_SOUTH); + Foundation f = GetBridgeFoundation(*tileh, axis); *z += ApplyFoundationToSlope(f, tileh); - Slope valid_inclined = (axis == AXIS_X ? SLOPE_NE : SLOPE_NW); - if ((*tileh != SLOPE_FLAT) && (*tileh != valid_inclined)) return CMD_ERROR; - - if (f == FOUNDATION_NONE) return CommandCost(); - - return CommandCost(EXPENSES_CONSTRUCTION, _price[PR_BUILD_FOUNDATION]); -} - -/** - * Determines the foundation for the south bridge head, and tests if the resulting slope is valid. - * - * @param axis Axis of the bridge - * @param tileh Slope of the tile under the south bridge head; returns slope on top of foundation - * @param z TileZ corresponding to tileh, gets modified as well - * @return Error or cost for bridge foundation - */ -static CommandCost CheckBridgeSlopeSouth(Axis axis, Slope *tileh, int *z) -{ - Foundation f = GetBridgeFoundation(*tileh, axis); - *z += ApplyFoundationToSlope(f, tileh); - - Slope valid_inclined = (axis == AXIS_X ? SLOPE_SW : SLOPE_SE); + Slope valid_inclined; + if (bridge_piece == BRIDGE_PIECE_NORTH) { + valid_inclined = (axis == AXIS_X ? SLOPE_NE : SLOPE_NW); + } else { + valid_inclined = (axis == AXIS_X ? SLOPE_SW : SLOPE_SE); + } if ((*tileh != SLOPE_FLAT) && (*tileh != valid_inclined)) return CMD_ERROR; if (f == FOUNDATION_NONE) return CommandCost(); @@ -316,8 +303,8 @@ CommandCost CmdBuildBridge(TileIndex end_tile, DoCommandFlag flags, uint32 p1, u Slope tileh_end = GetTileSlope(tile_end, &z_end); bool pbs_reservation = false; - CommandCost terraform_cost_north = CheckBridgeSlopeNorth(direction, &tileh_start, &z_start); - CommandCost terraform_cost_south = CheckBridgeSlopeSouth(direction, &tileh_end, &z_end); + CommandCost terraform_cost_north = CheckBridgeSlope(BRIDGE_PIECE_NORTH, direction, &tileh_start, &z_start); + CommandCost terraform_cost_south = CheckBridgeSlope(BRIDGE_PIECE_SOUTH, direction, &tileh_end, &z_end); /* Aqueducts can't be built of flat land. */ if (transport_type == TRANSPORT_WATER && (tileh_start == SLOPE_FLAT || tileh_end == SLOPE_FLAT)) return_cmd_error(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION); @@ -1900,11 +1887,11 @@ static CommandCost TerraformTile_TunnelBridge(TileIndex tile, DoCommandFlag flag /* Check if new slope is valid for bridges in general (so we can safely call GetBridgeFoundation()) */ if ((direction == DIAGDIR_NW) || (direction == DIAGDIR_NE)) { - CheckBridgeSlopeSouth(axis, &tileh_old, &z_old); - res = CheckBridgeSlopeSouth(axis, &tileh_new, &z_new); + CheckBridgeSlope(BRIDGE_PIECE_SOUTH, axis, &tileh_old, &z_old); + res = CheckBridgeSlope(BRIDGE_PIECE_SOUTH, axis, &tileh_new, &z_new); } else { - CheckBridgeSlopeNorth(axis, &tileh_old, &z_old); - res = CheckBridgeSlopeNorth(axis, &tileh_new, &z_new); + CheckBridgeSlope(BRIDGE_PIECE_NORTH, axis, &tileh_old, &z_old); + res = CheckBridgeSlope(BRIDGE_PIECE_NORTH, axis, &tileh_new, &z_new); } /* Surface slope is valid and remains unchanged? */ From bb7353c02afd7ff04c4a71cc2b114ed8a6136994 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sat, 27 Oct 2018 18:13:42 +0100 Subject: [PATCH 056/622] Codechange: Some more null checks --- src/pathfinder/follow_track.hpp | 8 ++++++-- src/train_cmd.cpp | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/pathfinder/follow_track.hpp b/src/pathfinder/follow_track.hpp index 70f148de38..0aec3951ed 100644 --- a/src/pathfinder/follow_track.hpp +++ b/src/pathfinder/follow_track.hpp @@ -124,8 +124,12 @@ struct CFollowTrackT m_old_tile = old_tile; m_old_td = old_td; m_err = EC_NONE; - assert(((TrackStatusToTrackdirBits(GetTileTrackStatus(m_old_tile, TT(), IsRoadTT() ? RoadVehicle::From(m_veh)->compatible_roadtypes : 0)) & TrackdirToTrackdirBits(m_old_td)) != 0) || - (IsTram() && GetSingleTramBit(m_old_tile) != INVALID_DIAGDIR)); // Disable the assertion for single tram bits + assert( + ((TrackStatusToTrackdirBits( + GetTileTrackStatus(m_old_tile, TT(), (IsRoadTT() && m_veh != NULL) ? RoadVehicle::From(m_veh)->compatible_roadtypes : 0) + ) & TrackdirToTrackdirBits(m_old_td)) != 0) || + (IsTram() && GetSingleTramBit(m_old_tile) != INVALID_DIAGDIR) // Disable the assertion for single tram bits + ); m_exitdir = TrackdirToExitdir(m_old_td); if (ForcedReverse()) return true; if (!CanExitOldTile()) return false; diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index b1eeab1bd8..0672ac2093 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -874,7 +874,7 @@ static void RemoveFromConsist(Train *part, bool chain = false) static void InsertInConsist(Train *dst, Train *chain) { /* We do not want to add something in the middle of an articulated part. */ - assert(dst->Next() == NULL || !dst->Next()->IsArticulatedPart()); + assert(dst != NULL && (dst->Next() == NULL || !dst->Next()->IsArticulatedPart())); chain->Last()->SetNext(dst->Next()); dst->SetNext(chain); From 264e60529fb632ffbdd5d19a91d9b2dd03e97428 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Wed, 31 Oct 2018 11:45:23 +0000 Subject: [PATCH 057/622] Change: Gradually slow down aircraft speed on breakdown (#6932) --- src/aircraft_cmd.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 069351a511..fe8cf927d0 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -635,6 +635,12 @@ static int UpdateAircraftSpeed(Aircraft *v, uint speed_limit = SPEED_LIMIT_NONE, * and take-off speeds being too low. */ speed_limit *= _settings_game.vehicle.plane_speed; + /* adjust speed for broken vehicles */ + if (v->vehstatus & VS_AIRCRAFT_BROKEN) { + if (SPEED_LIMIT_BROKEN < speed_limit) hard_limit = false; + speed_limit = min(speed_limit, SPEED_LIMIT_BROKEN); + } + if (v->vcache.cached_max_speed < speed_limit) { if (v->cur_speed < speed_limit) hard_limit = false; speed_limit = v->vcache.cached_max_speed; @@ -654,9 +660,6 @@ static int UpdateAircraftSpeed(Aircraft *v, uint speed_limit = SPEED_LIMIT_NONE, spd = min(v->cur_speed + (spd >> 8) + (v->subspeed < t), speed_limit); - /* adjust speed for broken vehicles */ - if (v->vehstatus & VS_AIRCRAFT_BROKEN) spd = min(spd, SPEED_LIMIT_BROKEN); - /* updates statusbar only if speed have changed to save CPU time */ if (spd != v->cur_speed) { v->cur_speed = spd; From b3dc90af58474e08971c9c70e0cd62bd1ed4dd88 Mon Sep 17 00:00:00 2001 From: Alexander Weiss Date: Wed, 31 Oct 2018 12:51:10 +0100 Subject: [PATCH 058/622] Change: Clone tool in depot window now behaves like clone button in vehicle window. Keep the tool active when share-cloning. Open the vehicle GUI when copy-cloning. (#6754) --- src/depot_gui.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index 14461d8817..39accd65f1 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -908,9 +908,16 @@ struct DepotWindow : Window { */ virtual bool OnVehicleSelect(const Vehicle *v) { - if (DoCommandP(this->window_number, v->index, _ctrl_pressed ? 1 : 0, CMD_CLONE_VEHICLE | CMD_MSG(STR_ERROR_CAN_T_BUY_TRAIN + v->type), CcCloneVehicle)) { - ResetObjectToPlace(); + if (_ctrl_pressed) { + /* Share-clone, do not open new viewport, and keep tool active */ + DoCommandP(this->window_number, v->index, 1, CMD_CLONE_VEHICLE | CMD_MSG(STR_ERROR_CAN_T_BUY_TRAIN + v->type), NULL); + } else { + /* Copy-clone, open viewport for new vehicle, and deselect the tool (assume player wants to changs things on new vehicle) */ + if (DoCommandP(this->window_number, v->index, 0, CMD_CLONE_VEHICLE | CMD_MSG(STR_ERROR_CAN_T_BUY_TRAIN + v->type), CcCloneVehicle)) { + ResetObjectToPlace(); + } } + return true; } From 18ca3e8660f90737d672b6780301ff4b998df56f Mon Sep 17 00:00:00 2001 From: frosch Date: Wed, 31 Oct 2018 13:07:51 +0100 Subject: [PATCH 059/622] Fix: [NewGRF] Make VA2 operator 11 (ror) behave well-defined when rotating by 0 bits. --- src/core/bitmath_func.hpp | 2 ++ src/newgrf_spritegroup.cpp | 18 +----------------- 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/src/core/bitmath_func.hpp b/src/core/bitmath_func.hpp index 31e679b005..fd05aa3f59 100644 --- a/src/core/bitmath_func.hpp +++ b/src/core/bitmath_func.hpp @@ -302,6 +302,7 @@ static inline bool HasAtMostOneBit(T value) template static inline T ROL(const T x, const uint8 n) { + if (n == 0) return x; return (T)(x << n | x >> (sizeof(x) * 8 - n)); } @@ -317,6 +318,7 @@ static inline T ROL(const T x, const uint8 n) template static inline T ROR(const T x, const uint8 n) { + if (n == 0) return x; return (T)(x >> n | x << (sizeof(x) * 8 - n)); } diff --git a/src/newgrf_spritegroup.cpp b/src/newgrf_spritegroup.cpp index 59b845f106..1bcb4a0359 100644 --- a/src/newgrf_spritegroup.cpp +++ b/src/newgrf_spritegroup.cpp @@ -144,22 +144,6 @@ static inline uint32 GetVariable(const ResolverObject &object, ScopeResolver *sc return &this->default_scope; } -/** - * Rotate val rot times to the right - * @param val the value to rotate - * @param rot the amount of times to rotate - * @return the rotated value - */ -static uint32 RotateRight(uint32 val, uint32 rot) -{ - /* Do not rotate more than necessary */ - rot %= 32; - assert(rot > 0); - - return (val >> rot) | (val << (32 - rot)); -} - - /* Evaluate an adjustment for a variable of the given size. * U is the unsigned type and S is the signed type to use. */ template @@ -192,7 +176,7 @@ static U EvalAdjustT(const DeterministicSpriteGroupAdjust *adjust, ScopeResolver case DSGA_OP_STO: _temp_store.StoreValue((U)value, (S)last_value); return last_value; case DSGA_OP_RST: return value; case DSGA_OP_STOP: scope->StorePSA((U)value, (S)last_value); return last_value; - case DSGA_OP_ROR: return RotateRight(last_value, value); + case DSGA_OP_ROR: return ROR((U)last_value, (U)value & 0x1F); // mask 'value' to 5 bits, which should behave the same on all architectures. case DSGA_OP_SCMP: return ((S)last_value == (S)value) ? 1 : ((S)last_value < (S)value ? 0 : 2); case DSGA_OP_UCMP: return ((U)last_value == (U)value) ? 1 : ((U)last_value < (U)value ? 0 : 2); case DSGA_OP_SHL: return (uint32)(U)last_value << ((U)value & 0x1F); // Same behaviour as in ParamSet, mask 'value' to 5 bits, which should behave the same on all architectures. From 5029cd6f28e576558d4e9304093db6e9e1216f15 Mon Sep 17 00:00:00 2001 From: Joost Hopmans Date: Wed, 20 Jun 2018 12:17:05 +0200 Subject: [PATCH 060/622] Fix: Only possible to build station next to competitors by using CTRL+click Fix by checking only for stations owned by the current company when inspecting if there are multiple adjoining stations to the one being built. When building next to 2 or more owned stations we don't know which station should be extended. For other companies' stations that's not a problem since our station won't merge with theirs anyway. Calling to BuildStationPart should never have another company's station as a parameter to attach to unless the client is malicious, so just returning a generic error in that case. --- src/station_cmd.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index ca5cbac8b7..16f135df25 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -89,25 +89,25 @@ bool IsHangar(TileIndex t) } /** - * Look for a station around the given tile area. + * Look for a station owned by the given company around the given tile area. * @param ta the area to search over - * @param closest_station the closest station found so far + * @param closest_station the closest owned station found so far + * @param company the company whose stations to look for * @param st to 'return' the found station * @return Succeeded command (if zero or one station found) or failed command (for two or more stations found). */ template -CommandCost GetStationAround(TileArea ta, StationID closest_station, T **st) +CommandCost GetStationAround(TileArea ta, StationID closest_station, CompanyID company, T **st) { ta.tile -= TileDiffXY(1, 1); ta.w += 2; ta.h += 2; - /* check around to see if there's any stations there */ + /* check around to see if there are any stations there owned by the company */ TILE_AREA_LOOP(tile_cur, ta) { if (IsTileType(tile_cur, MP_STATION)) { StationID t = GetStationIndex(tile_cur); - if (!T::IsValidID(t)) continue; - + if (!T::IsValidID(t) || Station::Get(t)->owner != company) continue; if (closest_station == INVALID_STATION) { closest_station = t; } else if (closest_station != t) { @@ -676,7 +676,7 @@ static CommandCost BuildStationPart(Station **st, DoCommandFlag flags, bool reus if (*st != NULL) { if ((*st)->owner != _current_company) { - return_cmd_error(STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION); + return_cmd_error(CMD_ERROR); } CommandCost ret = (*st)->rect.BeforeAddRect(area.tile, area.w, area.h, StationRect::ADD_TEST); @@ -1105,8 +1105,8 @@ CommandCost FindJoiningBaseStation(StationID existing_station, StationID station } if (check_surrounding) { - /* Make sure there are no similar stations around us. */ - CommandCost ret = GetStationAround(ta, existing_station, st); + /* Make sure there is no more than one other station around us that is owned by us. */ + CommandCost ret = GetStationAround(ta, existing_station, _current_company, st); if (ret.Failed()) return ret; } From b3b89257f745481db211fbc0bb185660528ec00c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskari=20Lepp=C3=A4aho?= Date: Wed, 31 Oct 2018 19:48:37 +0200 Subject: [PATCH 061/622] Remove: Unused string "STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION" --- src/lang/afrikaans.txt | 1 - src/lang/arabic_egypt.txt | 1 - src/lang/basque.txt | 1 - src/lang/belarusian.txt | 1 - src/lang/brazilian_portuguese.txt | 1 - src/lang/bulgarian.txt | 1 - src/lang/catalan.txt | 1 - src/lang/croatian.txt | 1 - src/lang/czech.txt | 1 - src/lang/danish.txt | 1 - src/lang/dutch.txt | 1 - src/lang/english.txt | 1 - src/lang/english_AU.txt | 1 - src/lang/english_US.txt | 1 - src/lang/esperanto.txt | 1 - src/lang/estonian.txt | 1 - src/lang/faroese.txt | 1 - src/lang/finnish.txt | 1 - src/lang/french.txt | 1 - src/lang/gaelic.txt | 1 - src/lang/galician.txt | 1 - src/lang/german.txt | 1 - src/lang/greek.txt | 1 - src/lang/hebrew.txt | 1 - src/lang/hungarian.txt | 1 - src/lang/icelandic.txt | 1 - src/lang/indonesian.txt | 1 - src/lang/irish.txt | 1 - src/lang/italian.txt | 1 - src/lang/japanese.txt | 1 - src/lang/korean.txt | 1 - src/lang/latin.txt | 1 - src/lang/latvian.txt | 1 - src/lang/lithuanian.txt | 1 - src/lang/luxembourgish.txt | 1 - src/lang/malay.txt | 1 - src/lang/norwegian_bokmal.txt | 1 - src/lang/norwegian_nynorsk.txt | 1 - src/lang/polish.txt | 1 - src/lang/portuguese.txt | 1 - src/lang/romanian.txt | 1 - src/lang/russian.txt | 1 - src/lang/serbian.txt | 1 - src/lang/simplified_chinese.txt | 1 - src/lang/slovak.txt | 1 - src/lang/slovenian.txt | 1 - src/lang/spanish.txt | 1 - src/lang/spanish_MX.txt | 1 - src/lang/swedish.txt | 1 - src/lang/tamil.txt | 1 - src/lang/thai.txt | 1 - src/lang/traditional_chinese.txt | 1 - src/lang/turkish.txt | 1 - src/lang/ukrainian.txt | 1 - src/lang/unfinished/frisian.txt | 1 - src/lang/unfinished/persian.txt | 1 - src/lang/vietnamese.txt | 1 - src/lang/welsh.txt | 1 - src/script/api/ai/ai_station.hpp.sq | 1 - src/script/api/game/game_station.hpp.sq | 1 - src/script/api/script_station.hpp | 2 +- 61 files changed, 1 insertion(+), 61 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index b888e37992..d1e96d41d7 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -4204,7 +4204,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Te veel STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Te veel treinstasie deele STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Te veel bushalte STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Te veel vragmotor stasies -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Te naby aan 'n ander stasie/laai area STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Te naby aan 'n ander werf STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Te naby aan 'n ander lughawe STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Stasie kan nie hernoem word nie... diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index e0a7eb3a0a..8c4c06b55b 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -3667,7 +3667,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}يوجد STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}يوجد الكثير من قطاعات محطه السكه الحديديه STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}يوجد الكثير من محطات الحافلات STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}يوجد الكثير من محطات الشاحنات -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}قريب للغايه من محطه اخرى STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}قريب للغايه من مَرسَى اخر STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}قريب للغايه من مطار اخر STR_ERROR_CAN_T_RENAME_STATION :{WHITE}تعذر إعاده تسميه المحطه... diff --git a/src/lang/basque.txt b/src/lang/basque.txt index caef347956..d5511050b1 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -4076,7 +4076,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Geltoki STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Tren geltoki zati gehiegi STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Autobus geltoki gehiegi STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Kamioi geltoki gehiegi -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Geltoki batetik hurbilegi STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Kai batetik hurbilegi STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Aireportu batetik hurbilegi STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Ezinda geltokia berrizendatu... diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 52f7821d93..819bce4a2b 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -4588,7 +4588,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Зана STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Занадта вялікая чыгуначная станцыя STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Занадта шмат аўтобусных прыпынкаў STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Занадта шмат грузавых тэрмiналаў -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Занадта блізка да іншай станцыі STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Занадта блізка да іншай прыстані STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Занадта блізка да іншага аэрапорта STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Немагчыма перайменаваць станцыю... diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 4d35f97672..5c943e651e 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -4278,7 +4278,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Estaçõ STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}A estação já tem muitas partes STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Estações de ônibus demais STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Áreas de carga demais -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Muito perto de outra estação/local de carga STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Muito perto de outra doca STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Muito perto de outro aeroporto STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Impossível renomear a estação... diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 818bc8b8e0..d085371987 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -4133,7 +4133,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Твър STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Твърде много части на гара STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Твърде много автобусни спирки STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Твърде много гари за камиони -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Твърде близо до друга гара/товарна платформа STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Прекалено близо до друг док STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Прекалено близо до друго летище STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Станцията не може да бъде преименувана... diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 54f7aac651..cc641141af 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -4280,7 +4280,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Massa es STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Hi ha massa parts d'estacions de tren STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Massa parades d'autobús STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Masses estacions de càrrega -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Massa prop d'una altra estació/àrea de càrrega STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Massa prop d'un altre moll STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Massa prop d'un altre aeroport STR_ERROR_CAN_T_RENAME_STATION :{WHITE}No es pot canviar el nom de l'estació... diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 19f76b6570..3bb0edf419 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -4377,7 +4377,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Previše STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Previše dijelova željezničke postaje STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Previše autobusnih postaja STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Previše kamionskih postaja -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Preblizu drugoj postaji/terminalu STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Preblizu drugom pristaništu STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Preblizu drugoj zračnoj luci STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Nije moguće preimenovati postaju... diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 9e5e66037a..5512bc616d 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -4341,7 +4341,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Příli STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Příliš mnoho staničních částí STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Příliš mnoho autobusových zastávek STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Příliš mnoho zastávek nákladních automobilů -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Příliš blízko k jinému nádraží nebo nákladové rampě STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Příliš blízko k jinému doku STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Příliš blízko k jinému letišti STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Nelze přejmenovat stanici... diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 4b9ea6bf56..813a496d15 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -4228,7 +4228,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}For mang STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Banegården er i for mange dele STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}For mange busterminaler STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}For mange fragtcentraler -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}For tæt på en anden station/fragtcentral STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}For tæt på en anden havn STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}For tæt på en anden lufthavn STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Kan ikke omdøbe stationen... diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index df2388742f..4598851f64 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -4280,7 +4280,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Te veel STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Te veel treinstationsdelen STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Te veel bushaltes STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Te veel vrachtwagenlaadstations -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Te dicht bij een ander (laad)station STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Te dicht bij een andere haven STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Te dicht bij een ander vliegveld STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Kan stationsnaam niet veranderen... diff --git a/src/lang/english.txt b/src/lang/english.txt index 6f3e5778a7..d33afbfaa5 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -4281,7 +4281,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Too many STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Too many railway station parts STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Too many bus stops STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Too many lorry stations -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Too close to another station/loading area STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Too close to another dock STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Too close to another airport STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Can't rename station... diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 52ff246da3..8e001d956a 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -4153,7 +4153,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Too many STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Too many railway station parts STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Too many bus stops STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Too many Truck stations -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Too close to another station/loading area STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Too close to another dock STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Too close to another airport STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Can't rename station... diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 6126be2e85..b93ecb6836 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -4235,7 +4235,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Too many STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Too many railroad station parts STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Too many bus stops STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Too many truck stations -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Too close to another station/loading area STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Too close to another dock STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Too close to another airport STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Can't rename station... diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 8b445cb735..49149b638f 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -3579,7 +3579,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Tro da s STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Tro da partoj de stacidomo STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Tro da bushaltejoj STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Tro da ŝarĝaŭtaj stacioj -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Tro proksime al alia stacioj/ŝarĝejoj STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Tro proksime al alia haveno STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Tro proksime al alia flughaveno STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Ne povas alinomi stacion... diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 80c27eebf6..771994978b 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -4261,7 +4261,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Liiga pa STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Liiga palju raudteejaama osasid STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Liiga palju bussipeatusi STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Liiga palju laadimisplatvorme -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Mõnele teisele jaamale liiga lähedal STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Liiga lähedal teisele dokile STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Liiga lähedal teisele lennuväljale STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Jaama nime ei saa vahetada... diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 2eb53ca217..ae2729c216 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -3723,7 +3723,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Ov nógv STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Ov nógvir tok støð deilir STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Ov nógvir buss steðgir STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Ov nógvar lastbila støðir -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Ov tætt við eina aðra støð/lessi øki STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Ov tætt við eina aðra havn STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Ov tætt við eina aðra floghavn STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Kann ikki navngeva støð... diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index e6f07785f7..1de667ab0c 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -4244,7 +4244,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Liian mo STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Rautatieasema on jakautunut liian moneen osaan STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Liian monta linja-autopysäkkiä. STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Liian monta lastauslaituria. -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Liian lähellä toista asemaa tai lastausaluetta. STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Liian lähellä toista satamaa. STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Liian lähellä toista lentokenttää. STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Asemaa ei voi nimetä uudelleen. diff --git a/src/lang/french.txt b/src/lang/french.txt index 3f5daf4a9d..b7729e5067 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -4281,7 +4281,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Trop de STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Trop de parties de gare STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Trop d'arrêts d'autobus STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Trop d'aires de chargement -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Trop près d'une autre gare STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Trop près d'un autre port STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Trop près d'un autre aéroport STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Impossible de renommer la gare... diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 5264ba8b29..139d775cd3 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -4463,7 +4463,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Cus stè STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Cus pàirtean dhe stèisean-rèile STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Gus stèiseanan bus STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Tha cus ionadan-luchdaidh nan làraidh ann -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Ro fhaisg air stèisean/ionad-luchdaidh eile STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Ro fhaisg air port eile STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Ro fhaisg air port-adhair eile STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Cha ghabh ainm an stèisein atharrachadh... diff --git a/src/lang/galician.txt b/src/lang/galician.txt index fbd6330025..a40620073f 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -4223,7 +4223,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Demasiad STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Demasiadas partes de estación de tren STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Demasiadas paradas de autobús STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Demasiadas estacións de camións -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Demasiado preto doutra estación ou área de carga STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Demasiado preto doutro peirao STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Demasiado preto doutro aeroporto STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Non se pode renomear a estación... diff --git a/src/lang/german.txt b/src/lang/german.txt index cd7eb37d8a..cd117258b4 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -4223,7 +4223,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Zu viele STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Zu viele Bahnsteigteile STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Zu viele Bushaltestellen STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Zu viele Lkw-Ladeplätze -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Stationen liegen zu dicht beisammen STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Zu dicht an einem anderen Hafen STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Zu dicht an einem anderen Flughafen STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Station kann nicht umbenannt werden... diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 909e180b23..5b5cd91621 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -4372,7 +4372,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Πάρα STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Πάρα πολλά κομμάτια σιδηροδρομικού σταθμού STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Πάρα πολλές στάσεις λεωφορείου STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Πάρα πολλοί σταθμοί φορτηγών -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Πολύ κοντά σε άλλη περιοχή σταθμού/φόρτωσης STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Πολύ κοντά σε άλλη αποβάθρα STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Πολύ κοντά σε άλλο αεροδρόμιο STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Δεν μπορεί να μετονομαστεί ο σταθμός... diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index ddd112678d..8f15c95ef6 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -4256,7 +4256,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}יותר STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}התחנה מורכבת מיותר מידי חלקים STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}יותר מידי תחנות אוטובוס STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}יותר מידי תחנות משאיות -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}קרוב מידי לתחנה או איזור טעינה אחרים STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}יותר מידי קרוב למזח אחר STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}קרוב מידי לשדה תעופה אחר STR_ERROR_CAN_T_RENAME_STATION :{WHITE}לא ניתן לשנות שם תחנה... diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 886b2def52..f9f2e19a2b 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -4286,7 +4286,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Túl sok STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Túl sok vasútállomás-rész STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Túl sok buszmegálló STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Túl sok a teherautó-rakodóhely -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Túl közel van egy másik állomáshoz/rakodóhelyhez STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Túl közel van egy másik kikötőhöz STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Túl közel van egy másik repülőtérhez STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Nem nevezheted át az állomást... diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 6d8a4bae6c..31c6ff796b 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -3966,7 +3966,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Of marga STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Of margir hlutar af lestarstöðvum STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Of margar strætisvagnastöðvar STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Of margar vörubílastöðvar -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Of nálægt annarri stöð/lestunarsvæði STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Of nálægt annarri bryggju STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Of nálægt öðrum flugvelli STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Get ekki endurnefnt stöð... diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index f3300c711f..c715b2043e 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -4203,7 +4203,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Terlalu STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Terlalu banyak bag. stasiun STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Terlalu banyak pemberhentian Bus STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Terlalu banyak terminal truk -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Terlalu dekat dengan stasiun/area bongkar muat lainnya STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Terlalu dekat dengan dok/galangan kapal lainnya STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Terlalu dekat dengan bandara lainnya STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Tidak dapat mengganti nama stasiun... diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 47f1e7e981..0ea266d541 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -4203,7 +4203,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}An iomar STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}An iomarca codanna stáisiún iarnróid STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}An iomarca stadanna bus STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}An iomarca stáisiúin leoraithe -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Roghearr do stáisiún/limistéar lódála eile STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Roghearr do dug eile STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Roghearr d'aerfort eile STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Ní féidir an stáisiún a athainmniú... diff --git a/src/lang/italian.txt b/src/lang/italian.txt index e9f3f33184..f456797bf8 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -4311,7 +4311,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Troppe s STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Stazione composta da troppe parti STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Troppe stazioni degli autobus STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Troppe aree di carico per camion -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Troppo vicino ad un'altra stazione/area di carico STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Troppo vicino ad un altro molo STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Troppo vicino ad un altro aeroporto STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Impossibile rinominare la stazione... diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 8c3af735f4..c1b2fb1e75 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -4206,7 +4206,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}停留 STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}駅の部分が多すぎます STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}バス停が多すぎます STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}荷役所が多すぎます -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}他の停留施設に近すぎます STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}他の埠頭に近すぎます STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}他の空港に近すぎます STR_ERROR_CAN_T_RENAME_STATION :{WHITE}駅名を変更できません diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 74f754876a..249189ebb0 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -4282,7 +4282,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}역이 STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}철도역 조각이 너무 많습니다 STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}버스 정류장이 너무 많습니다 STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}트럭 적하장이 너무 많습니다 -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}다른 역과 너무 가깝습니다! STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}다른 항구와 너무 가깝습니다! STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}다른 공항과 너무 가깝습니다! STR_ERROR_CAN_T_RENAME_STATION :{WHITE}역 이름을 바꿀 수 없습니다... diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 9c2834da02..9fa9f87293 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -4438,7 +4438,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Nimis st STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Nimis partes stationum ferriviariarum adsunt STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Nimis stationes laophoricae adsunt STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Nimis stationes autoplaustricae adsunt -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Nimis prope aliam stationem STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Nimis prope aliud navale STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Nimis prope alium aeroportum STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Non licet stationem renominare... diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 015689bdfb..20c9d32f10 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -4131,7 +4131,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Pārāk STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Pārāk daudz dzelzceļa stacijas daļu STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Pārāk daudz autobusu pieturvietu STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Pārāk daudz kravas automobiļu staciju -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Pārāk tuvu citai stacijai/iekraušanas zonai STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Pārāk tuvu citai piestātnei STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Pārāk tuvu citai lidostai STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Nevar pārdēvēt staciju... diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 5b8a103696..163c90c70d 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -4478,7 +4478,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Per daug STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Perdaug traukinių stoties dalių STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Per daug autobusų stotelių STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Per daug sunkvežimių pakrovimo aikstelių -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Per arti kitos stotelės STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Per arti kitos prieplaukos STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Per arti kito oro uosto STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Stotelės pervardinti negalima... diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index c4978c0b88..60ffaf64a3 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -4222,7 +4222,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Ze vill STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Ze vill Garesdeeler STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Ze vill Busarrêten STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Ze vill Camionsgaren -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Ze noo un enger aanerer Gare/Luedstatioun STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Ze noo un engem aanerem Hafen STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Ze noo un engem aaneren Fluchhafen STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Kann d'Statioun net ëmbenennen... diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 1aa657c22c..e5ba9a2dc0 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -3878,7 +3878,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Terlampa STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Terlampau banyak bahagian-bahagian stesen keretapi STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Terlampau banyak stesen bas STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Terlampau banyak ruang punggah lori -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Terlalu hampir dengan stesen/kawasan muatan lain STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Terlalu hampir dengan pelabuhan lain STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Terlalu hampir dengan lapangan terbang lain STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Nama stesen tidak dapat ditukar... diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index fcb3f7afe9..65c4e10c7f 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -4227,7 +4227,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}For mang STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}For mange enkeltdeler på jernbanestasjonen STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}For mange bussholdeplasser STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}For mange lasteterminaler -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}For nærme en annen stasjon/lasteterminal STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}For nærme enn annen havn STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}For nærme en annen flyplass STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Kan ikke endre stasjonens navn... diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index aa53408bea..93db95f84b 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -4119,7 +4119,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}For mang STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}For mange togstasjon-delar STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}For mange busshaldeplassar STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}For mange lasteterminalar -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}For nær ein annan jernbanestasjon/lasteterminal STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}For nær ei anna hamn STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}For nær ein annan flyplass STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Kan ikkje endre namnet på stasjonen... diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 0b3f4ca1cb..965c08cb42 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -4621,7 +4621,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Za duzo STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Za dużo części stacji kolejowej STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Zbyt wiele przystanków autobusowych STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Zbyt wiele stacji załadunku ciężarówek -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Zbyt blisko innej stacji/strefy załadunku STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Zbyt blisko innego portu STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Zbyt blisko innego lotniska STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Nie można zmienić nazwy stacji... diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index b071b9c185..a116b64f42 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -4223,7 +4223,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Demasiad STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Demasiadas partes na estação ferroviária STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Demasiadas paragens de autocarro STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Demasiadas estações de carga -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Muito junto de uma estação/local de carga STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Muito perto de outra doca STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Demasiado perto de outro aeroporto STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Não pode alterar o nome da estação... diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 2693346136..6b891bb7e8 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -4157,7 +4157,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Prea mul STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Staţia are prea multe componente STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Prea multe staţii de autobuz STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Prea multe staţii de camion -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Prea aproape de altă staţie STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Prea aproape de alt port STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Prea aproape de un alt aeroport STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Nu se poate redenumi staţia... diff --git a/src/lang/russian.txt b/src/lang/russian.txt index cea62d9bb9..542c1384a4 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -4435,7 +4435,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Слиш STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Слишком большая ж/д станция STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Слишком много автобусных остановок STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Слишком много грузовых терминалов -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Слишком близко к другой станции STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Слишком близко к другой пристани STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Слишком близко к другому аэропорту STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Невозможно переименовать станцию... diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index eeaa8a4141..d253ac97ed 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -4445,7 +4445,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Previše STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Previše delova železničke stanice STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Previše autobuskih stanica STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Previše tovarnih stanica -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Previše je blizu druge stanice STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Previše je blizu drugog pristaništa STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Previše je blizu drugog aerodroma STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Ova stanica ne može biti preimenovana... diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 7675bed2b6..f486a6b9a0 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -4216,7 +4216,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}车站 STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}分体站台太多 STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}公共汽车站过多 STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}汽车货场过多 -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}距离另一车站过近 STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}距离另一码头过近 STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}距离另一机场过近 STR_ERROR_CAN_T_RENAME_STATION :{WHITE}不能重命名车站 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index c313e497a6..b828879d48 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -4271,7 +4271,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Príliš STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Veľa častí vlakovej stanice STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Príliš veľa autobusových zastávok STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Príliš veľa zastávok nákladných automobilov -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Príliš blízko inej stanice/vykládky STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Príliš blízko iného prístavu STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Príliš blízko iného letiska STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Stanica sa nedá premenovať... diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 122dd10ff1..0704d6e95b 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -4358,7 +4358,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Preveč STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Preveč delov železniške postaje STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Preveč avtobusnih postaj STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Preveč tovornih postaj -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Preblizu druge postaje STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Preblizu drugemu pristanišču STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Preblizu sosednjemu letališču STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Ni mogoče preimenovati postaje diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index d0deb739eb..3756395ced 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -4223,7 +4223,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Demasiad STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Demasiadas partes de estación de tren STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Demasiadas paradas de autobús STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Demasiadas paradas de camión -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Demasiado cerca de otra estación/zona de carga STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Demasiado cerca de otro muelle STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Demasiado cerca de otro aeropuerto STR_ERROR_CAN_T_RENAME_STATION :{WHITE}No se puede renombrar estación... diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index cea55ce6b5..2a4e930a79 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -4282,7 +4282,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Demasiad STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Demasiadas partes de estación de tren STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Demasiadas paradas de autobuses STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Demasiadas estaciones de camiones -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Demasiado cerca de otra estación o zona de carga STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Demasiado cerca de otro muelle STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Demasiado cerca de otro aeropuerto STR_ERROR_CAN_T_RENAME_STATION :{WHITE}No se puede cambiar nombre de la estación... diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 051b13271c..1e9fe336a7 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -4222,7 +4222,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}För må STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}För många delar på järnvägsstationen STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}För många busshållplatser STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}För många lastbryggor -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}För nära en annan station/hållplats STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}För nära en annan hamn STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}För nära en annan flygplats STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Kan inte byta namn på station... diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 9c623a3619..d123db86e1 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -3757,7 +3757,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}மி STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}மிக அதிகமான இரயில்வே நிலைய பாகங்கள் STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}மிக அதிகமான பேருந்து நிறுத்தங்கள் STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}மிக அதிகமான லாரி நிலையங்கள் -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}மற்றொரு நிலையத்திற்கு மிக அருகில் உள்ளது STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}மற்றொரு துறைமுகத்திற்கு மிக அருகில் உள்ளது STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}மற்றொரு விமான நிலையத்தின் அருகாமையில் உள்ளது STR_ERROR_CAN_T_RENAME_STATION :{WHITE}நிறுத்தத்தின் பெயரை மாற்ற இயலாது... diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 7bb1e09c72..878b9c26c5 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -4116,7 +4116,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}มี STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}ชิ้นส่วนสถานีมากเกินไป STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}ป้ายรถเมล์มากเกินไป STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}มีจุดขนถ่ายสินค้ามากเกินไป -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}ใกล้กับสถานี/จุดขนถ่ายสินค้าอื่นเกินไป STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}ใกล้กับท่าเทียบเรืออื่นมากเกินไป STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}ใกล้กับท่าอากาศยานอื่นมากเกินไป STR_ERROR_CAN_T_RENAME_STATION :{WHITE}ไม่สามารถเปลี่ยนชื่อได้... diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index f72e44e5fe..e837d1efef 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -4203,7 +4203,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}太多 STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}太多火車站元件 STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}太多公車站 STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}太多貨運站 -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}太接近另一個車站/載貨區 STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}太接近另一個碼頭 STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}太接近另一個機場 STR_ERROR_CAN_T_RENAME_STATION :{WHITE}無法修改車站名稱... diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index b820385ef9..c7b456f68d 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -4223,7 +4223,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Haritada STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Çok fazla demiryolu istasyon parçası var STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Çok fazla durak var STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Çok fazla kamyon yükleme yeri var -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Başka bir istasyona çok yakın STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Başka bir limana çok yakın STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Başka bir havalimanına çok yakın STR_ERROR_CAN_T_RENAME_STATION :{WHITE}İsim değiştirilemiyor... diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index ac77f0cead..d4f33017f1 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -4334,7 +4334,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Дуже STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Забагато частин залізничної станції STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Дуже багато зупинок STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Дуже багато вантажних станцій -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Дуже близько до іншої станції STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Дуже близько до іншого порту STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Дуже близько до іншого аеропорту STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Неможливо перейменувати станцію... diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index 0a9968ddf4..624eec2f33 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -3756,7 +3756,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Te folle STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Te folle stasjonsdielen STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Te folle bushaltes STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Te folle frachtstasjons -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Te ticht by in oar stasjon STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Te ticht by in oare haven STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Te ticht by in oar fleanfjild STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Kin namme fan stasjon net feroarje diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index 30ad05666c..231f11af81 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -3412,7 +3412,6 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}نمی STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}ایستگاه زیادی پراکنده شده است STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}تعداد محوطه های بارگیری/ایستگاه بسیار زیاد شده -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}به محوطه ی بارگیری/ایستگاه دیگری بسیار نزدیک است STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}به بندر دیگری بسییار نزدیک است STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}به فرودگاه دیگری بسیار نزدیک شده STR_ERROR_CAN_T_RENAME_STATION :{WHITE}نام این ایستگاه را نمی شود تغییر داد diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index d8b838ee41..61a15d3681 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -4281,7 +4281,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Quá nhi STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Quá nhiều mảnh của ga tàu hoả STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Quá nhiều điểm đừng xe buýt STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Quá nhiều trạm bốc dỡ hàng xe tải -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Quá sát với một bến khác STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Quá sát với hải cảng khác STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Quá sát với sân bay khác STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Không thể đổi tên ga, bến,cảng... diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index c5652db878..9561354fb0 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -4222,7 +4222,6 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Gormod o STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Mae gan yr orsaf ormod o rannau STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Gormod o arosfannau bysus STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Gormod o orsafoedd lorïau -STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION :{WHITE}Rhy agos i orsaf/ardal lwytho STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Rhy agos i ddoc arall STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Rhy agos i faes awyr arall STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Methu ailenwi gorsaf... diff --git a/src/script/api/ai/ai_station.hpp.sq b/src/script/api/ai/ai_station.hpp.sq index af7012d354..1850c1e740 100644 --- a/src/script/api/ai/ai_station.hpp.sq +++ b/src/script/api/ai/ai_station.hpp.sq @@ -33,7 +33,6 @@ void SQAIStation_Register(Squirrel *engine) SQAIStation.DefSQConst(engine, ScriptStation::STATION_ANY, "STATION_ANY"); ScriptError::RegisterErrorMap(STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT, ScriptStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION); - ScriptError::RegisterErrorMap(STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION, ScriptStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION); ScriptError::RegisterErrorMap(STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK, ScriptStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION); ScriptError::RegisterErrorMap(STR_ERROR_TOO_MANY_STATIONS_LOADING, ScriptStation::ERR_STATION_TOO_MANY_STATIONS); ScriptError::RegisterErrorMap(STR_ERROR_TOO_MANY_TRUCK_STOPS, ScriptStation::ERR_STATION_TOO_MANY_STATIONS); diff --git a/src/script/api/game/game_station.hpp.sq b/src/script/api/game/game_station.hpp.sq index e3a7425caa..4c2f63b384 100644 --- a/src/script/api/game/game_station.hpp.sq +++ b/src/script/api/game/game_station.hpp.sq @@ -33,7 +33,6 @@ void SQGSStation_Register(Squirrel *engine) SQGSStation.DefSQConst(engine, ScriptStation::STATION_ANY, "STATION_ANY"); ScriptError::RegisterErrorMap(STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT, ScriptStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION); - ScriptError::RegisterErrorMap(STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION, ScriptStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION); ScriptError::RegisterErrorMap(STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK, ScriptStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION); ScriptError::RegisterErrorMap(STR_ERROR_TOO_MANY_STATIONS_LOADING, ScriptStation::ERR_STATION_TOO_MANY_STATIONS); ScriptError::RegisterErrorMap(STR_ERROR_TOO_MANY_TRUCK_STOPS, ScriptStation::ERR_STATION_TOO_MANY_STATIONS); diff --git a/src/script/api/script_station.hpp b/src/script/api/script_station.hpp index 8561cd9bdd..42ea412d08 100644 --- a/src/script/api/script_station.hpp +++ b/src/script/api/script_station.hpp @@ -30,7 +30,7 @@ public: ERR_STATION_BASE = ScriptError::ERR_CAT_STATION << ScriptError::ERR_CAT_BIT_SIZE, /** The station is build too close to another station, airport or dock */ - ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION, // [STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT, STR_ERROR_TOO_CLOSE_TO_ANOTHER_STATION, STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK] + ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION, // [STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT, STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK] /** There are too many stations, airports and docks in the game */ ERR_STATION_TOO_MANY_STATIONS, // [STR_ERROR_TOO_MANY_STATIONS_LOADING, STR_ERROR_TOO_MANY_TRUCK_STOPS, STR_ERROR_TOO_MANY_BUS_STOPS] From 4703cd433d18c8c6d144a0e279891cf039add6e1 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Sun, 30 Sep 2018 19:34:40 +0100 Subject: [PATCH 062/622] Fix #6460: [AI] Add start_date parameter for Random AIs on new game --- src/openttd.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/openttd.cpp b/src/openttd.cpp index 88739a9eac..03c8aa2869 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -365,6 +365,9 @@ void MakeNewgameSettingsLive() _settings_game.ai_config[c] = NULL; if (_settings_newgame.ai_config[c] != NULL) { _settings_game.ai_config[c] = new AIConfig(_settings_newgame.ai_config[c]); + if (!AIConfig::GetConfig(c, AIConfig::SSS_FORCE_GAME)->HasScript()) { + AIConfig::GetConfig(c, AIConfig::SSS_FORCE_GAME)->Change(NULL); + } } } _settings_game.game_config = NULL; From 1e68b9b3e6487c8c95c5d8dac89c04ea06d1d9b5 Mon Sep 17 00:00:00 2001 From: Samu Date: Fri, 14 Sep 2018 13:03:52 +0100 Subject: [PATCH 063/622] Add: AI/GS GetMonthlyMaintenanceCost (#6897) API addition which allows AI/GS scripts to retrieve the monthly maintenance cost of an airport type. --- src/script/api/ai/ai_airport.hpp.sq | 1 + src/script/api/ai_changelog.hpp | 2 ++ src/script/api/game/game_airport.hpp.sq | 1 + src/script/api/game_changelog.hpp | 1 + src/script/api/script_airport.cpp | 7 +++++++ src/script/api/script_airport.hpp | 8 ++++++++ 6 files changed, 20 insertions(+) diff --git a/src/script/api/ai/ai_airport.hpp.sq b/src/script/api/ai/ai_airport.hpp.sq index 63ee130981..89e7ba1258 100644 --- a/src/script/api/ai/ai_airport.hpp.sq +++ b/src/script/api/ai/ai_airport.hpp.sq @@ -52,6 +52,7 @@ void SQAIAirport_Register(Squirrel *engine) SQAIAirport.DefSQStaticMethod(engine, &ScriptAirport::GetNoiseLevelIncrease, "GetNoiseLevelIncrease", 3, ".ii"); SQAIAirport.DefSQStaticMethod(engine, &ScriptAirport::GetNearestTown, "GetNearestTown", 3, ".ii"); SQAIAirport.DefSQStaticMethod(engine, &ScriptAirport::GetMaintenanceCostFactor, "GetMaintenanceCostFactor", 2, ".i"); + SQAIAirport.DefSQStaticMethod(engine, &ScriptAirport::GetMonthlyMaintenanceCost, "GetMonthlyMaintenanceCost", 2, ".i"); SQAIAirport.PostRegister(engine); } diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index 25e8b3e378..ecb015ed4d 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -18,6 +18,8 @@ * \b 1.9.0 * * 1.9.0 is not yet released. The following changes are not set in stone yet. + * API additions: + * \li AIAirport::GetMonthlyMaintenanceCost * * \b 1.8.0 * diff --git a/src/script/api/game/game_airport.hpp.sq b/src/script/api/game/game_airport.hpp.sq index cfa99ba377..d8f3a2a64c 100644 --- a/src/script/api/game/game_airport.hpp.sq +++ b/src/script/api/game/game_airport.hpp.sq @@ -52,6 +52,7 @@ void SQGSAirport_Register(Squirrel *engine) SQGSAirport.DefSQStaticMethod(engine, &ScriptAirport::GetNoiseLevelIncrease, "GetNoiseLevelIncrease", 3, ".ii"); SQGSAirport.DefSQStaticMethod(engine, &ScriptAirport::GetNearestTown, "GetNearestTown", 3, ".ii"); SQGSAirport.DefSQStaticMethod(engine, &ScriptAirport::GetMaintenanceCostFactor, "GetMaintenanceCostFactor", 2, ".i"); + SQGSAirport.DefSQStaticMethod(engine, &ScriptAirport::GetMonthlyMaintenanceCost, "GetMonthlyMaintenanceCost", 2, ".i"); SQGSAirport.PostRegister(engine); } diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index 390c1f31ff..7aad75b442 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -19,6 +19,7 @@ * * 1.9.0 is not yet released. The following changes are not set in stone yet. * API additions: + * \li GSAirport::GetMonthlyMaintenanceCost * \li GSClient * \li GSClientList * \li GSClientList_Company diff --git a/src/script/api/script_airport.cpp b/src/script/api/script_airport.cpp index edb912609e..8e19d257df 100644 --- a/src/script/api/script_airport.cpp +++ b/src/script/api/script_airport.cpp @@ -163,3 +163,10 @@ return AirportSpec::Get(type)->maintenance_cost; } + +/* static */ Money ScriptAirport::GetMonthlyMaintenanceCost(AirportType type) +{ + if (!IsAirportInformationAvailable(type)) return -1; + + return (int64)GetMaintenanceCostFactor(type) * _price[PR_INFRASTRUCTURE_AIRPORT] >> 3; +} diff --git a/src/script/api/script_airport.hpp b/src/script/api/script_airport.hpp index e4c0a217d2..6073a2bdd6 100644 --- a/src/script/api/script_airport.hpp +++ b/src/script/api/script_airport.hpp @@ -201,6 +201,14 @@ public: * @return Maintenance cost factor of the airport type. */ static uint16 GetMaintenanceCostFactor(AirportType type); + + /** + * Get the monthly maintenance cost of an airport type. + * @param type The airport type to get the monthly maintenance cost of. + * @pre IsAirportInformationAvailable(type) + * @return Monthly maintenance cost of the airport type. + */ + static Money GetMonthlyMaintenanceCost(AirportType type); }; #endif /* SCRIPT_AIRPORT_HPP */ From 0c619b7c4b9af55d5191a2410e0fb6091c72ccc8 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Wed, 12 Sep 2018 00:06:31 +0100 Subject: [PATCH 064/622] Add: Fluidsynth music driver support (jmak) --- config.lib | 16 ++++ configure | 1 + source.list | 4 + src/music/fluidsynth.cpp | 157 +++++++++++++++++++++++++++++++++++++++ src/music/fluidsynth.h | 41 ++++++++++ 5 files changed, 219 insertions(+) create mode 100644 src/music/fluidsynth.cpp create mode 100644 src/music/fluidsynth.h diff --git a/config.lib b/config.lib index 07bb45299b..0fe2ccd9f0 100644 --- a/config.lib +++ b/config.lib @@ -83,6 +83,7 @@ set_default() { with_midi="" with_midi_arg="" with_libtimidity="1" + with_fluidsynth="1" with_freetype="1" with_fontconfig="1" with_icu_layout="1" @@ -160,6 +161,7 @@ set_default() { with_midi with_midi_arg with_libtimidity + with_fluidsynth with_freetype with_fontconfig with_icu_layout @@ -372,6 +374,9 @@ detect_params() { --without-libtimidity) with_libtimidity="0";; --with-libtimidity=*) with_libtimidity="$optarg";; + --with-fluidsynth) with_fluidsynth="2";; + --without-fluidsynth) with_fluidsynth="0";; + --with-freetype) with_freetype="2";; --without-freetype) with_freetype="0";; --with-freetype=*) with_freetype="$optarg";; @@ -890,6 +895,7 @@ check_params() { detect_icu_layout detect_icu_sort detect_libtimidity + detect_fluidsynth if [ "$with_direct_music" != "0" ]; then if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then @@ -1839,6 +1845,11 @@ make_cflags_and_ldflags() { fi fi + if [ -n "$fluidsynth" ]; then + LIBS="$LIBS -lfluidsynth" + CFLAGS="$CFLAGS -DFLUIDSYNTH" + fi + if [ "$with_iconv" != "0" ]; then CFLAGS="$CFLAGS -DWITH_ICONV" if [ "$link_to_iconv" = "yes" ]; then @@ -2775,6 +2786,10 @@ detect_libtimidity() { detect_pkg_config "$with_libtimidity" "libtimidity" "libtimidity_config" "0.1" "1" } +detect_fluidsynth() { + detect_library "$with_fluidsynth" "fluidsynth" "" "" "fluidsynth.h" +} + detect_pkg_config() { # $1 - config-param ($with_lzma value) # $2 - package name ('liblzma') @@ -3543,6 +3558,7 @@ showhelp() { echo " midi-player" echo " --with-libtimidity[=\"pkg-config libtimidity\"]" echo " enables libtimidity support" + echo " --with-fluidsynth enables fluidsynth support" echo " --with-allegro[=\"pkg-config allegro\"]" echo " enables Allegro video driver support" echo " --with-cocoa enables COCOA video driver (OSX ONLY)" diff --git a/configure b/configure index 7ca36480d3..afc1de51b4 100755 --- a/configure +++ b/configure @@ -125,6 +125,7 @@ AWKCOMMAND=' if ($0 == "MSVC" && "'$os'" != "MSVC") { next; } if ($0 == "DIRECTMUSIC" && "'$with_direct_music'" == "0") { next; } if ($0 == "LIBTIMIDITY" && "'$libtimidity'" == "" ) { next; } + if ($0 == "FLUIDSYNTH" && "'$fluidsynth'" == "" ) { next; } if ($0 == "HAVE_THREAD" && "'$with_threads'" == "0") { next; } if ($0 == "SSE" && "'$with_sse'" != "1") { next; } diff --git a/source.list b/source.list index 5dec0e8617..7b31df91bb 100644 --- a/source.list +++ b/source.list @@ -407,6 +407,7 @@ music/bemidi.h music/cocoa_m.h music/extmidi.h music/libtimidity.h +music/fluidsynth.h music/os2_m.h music/qtmidi.h os/macosx/macos.h @@ -1127,6 +1128,9 @@ music/midifile.cpp #if LIBTIMIDITY music/libtimidity.cpp #end +#if FLUIDSYNTH + music/fluidsynth.cpp +#end #end # Sound diff --git a/src/music/fluidsynth.cpp b/src/music/fluidsynth.cpp new file mode 100644 index 0000000000..63be1dd99c --- /dev/null +++ b/src/music/fluidsynth.cpp @@ -0,0 +1,157 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file fluidsynth.cpp Playing music via the fluidsynth library. */ + +#include "../stdafx.h" +#include "../openttd.h" +#include "../sound_type.h" +#include "../debug.h" +#include "fluidsynth.h" +#include "midifile.hpp" +#include + +static struct { + fluid_settings_t* settings; ///< FluidSynth settings handle + fluid_synth_t* synth; ///< FluidSynth synthesizer handle + fluid_audio_driver_t* adriver; ///< FluidSynth audio driver handle + fluid_player_t* player; ///< FluidSynth MIDI player handle +} _midi; ///< Metadata about the midi we're playing. + +/** Factory for the FluidSynth driver. */ +static FMusicDriver_FluidSynth iFMusicDriver_FluidSynth; + +/** List of sound fonts to try by default. */ +static const char *default_sf[] = { + /* Debian/Ubuntu/OpenSUSE preferred */ + "/usr/share/sounds/sf2/FluidR3_GM.sf2", + + /* RedHat/Fedora/Arch preferred */ + "/usr/share/soundfonts/FluidR3_GM.sf2", + + /* Debian/Ubuntu/OpenSUSE alternatives */ + "/usr/share/sounds/sf2/TimGM6mb.sf2", + "/usr/share/sounds/sf2/FluidR3_GS.sf2", + + NULL +}; + +const char *MusicDriver_FluidSynth::Start(const char * const *param) +{ + const char *driver_name = GetDriverParam(param, "driver"); + const char *sfont_name = GetDriverParam(param, "soundfont"); + int sfont_id; + + if (!driver_name) driver_name = "alsa"; + + DEBUG(driver, 1, "Fluidsynth: driver %s, sf %s", driver_name, sfont_name); + + /* Create the settings. */ + _midi.settings = new_fluid_settings(); + if (!_midi.settings) return "Could not create midi settings"; + + if (fluid_settings_setstr(_midi.settings, "audio.driver", driver_name) != 1) { + return "Could not set audio driver name"; + } + + /* Create the synthesizer. */ + _midi.synth = new_fluid_synth(_midi.settings); + if (!_midi.synth) return "Could not open synth"; + + /* Create the audio driver. The synthesizer starts playing as soon + as the driver is created. */ + _midi.adriver = new_fluid_audio_driver(_midi.settings, _midi.synth); + if (!_midi.adriver) return "Could not open audio driver"; + + /* Load a SoundFont and reset presets (so that new instruments + * get used from the SoundFont) */ + if (!sfont_name) { + int i; + sfont_id = FLUID_FAILED; + for (i = 0; default_sf[i]; i++) { + if (!fluid_is_soundfont(default_sf[i])) continue; + sfont_id = fluid_synth_sfload(_midi.synth, default_sf[i], 1); + if (sfont_id != FLUID_FAILED) break; + } + if (sfont_id == FLUID_FAILED) return "Could not open any sound font"; + } else { + sfont_id = fluid_synth_sfload(_midi.synth, sfont_name, 1); + if (sfont_id == FLUID_FAILED) return "Could not open sound font"; + } + + _midi.player = NULL; + + return NULL; +} + +void MusicDriver_FluidSynth::Stop() +{ + this->StopSong(); + delete_fluid_audio_driver(_midi.adriver); + delete_fluid_synth(_midi.synth); + delete_fluid_settings(_midi.settings); +} + +void MusicDriver_FluidSynth::PlaySong(const MusicSongInfo &song) +{ + std::string filename = MidiFile::GetSMFFile(song); + + this->StopSong(); + + if (filename.empty()) { + return; + } + + _midi.player = new_fluid_player(_midi.synth); + if (!_midi.player) { + DEBUG(driver, 0, "Could not create midi player"); + return; + } + + if (fluid_player_add(_midi.player, filename.c_str()) != FLUID_OK) { + DEBUG(driver, 0, "Could not open music file"); + delete_fluid_player(_midi.player); + _midi.player = NULL; + return; + } + if (fluid_player_play(_midi.player) != FLUID_OK) { + DEBUG(driver, 0, "Could not start midi player"); + delete_fluid_player(_midi.player); + _midi.player = NULL; + return; + } +} + +void MusicDriver_FluidSynth::StopSong() +{ + if (!_midi.player) return; + + fluid_player_stop(_midi.player); + if (fluid_player_join(_midi.player) != FLUID_OK) { + DEBUG(driver, 0, "Could not join player"); + } + delete_fluid_player(_midi.player); + fluid_synth_system_reset(_midi.synth); + _midi.player = NULL; +} + +bool MusicDriver_FluidSynth::IsSongPlaying() +{ + if (!_midi.player) return false; + + return fluid_player_get_status(_midi.player) == FLUID_PLAYER_PLAYING; +} + +void MusicDriver_FluidSynth::SetVolume(byte vol) +{ + /* Allowed range of synth.gain is 0.0 to 10.0 */ + if (fluid_settings_setnum(_midi.settings, "synth.gain", 1.0 * vol / 128.0) != 1) { + DEBUG(driver, 0, "Could not set volume"); + } +} diff --git a/src/music/fluidsynth.h b/src/music/fluidsynth.h new file mode 100644 index 0000000000..171128a8e9 --- /dev/null +++ b/src/music/fluidsynth.h @@ -0,0 +1,41 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file fluidsynth.h Base for FluidSynth music playback. */ + +#ifndef MUSIC_FLUIDSYNTH_H +#define MUSIC_FLUIDSYNTH_H + +#include "music_driver.hpp" + +/** Music driver making use of FluidSynth. */ +class MusicDriver_FluidSynth : public MusicDriver { +public: + /* virtual */ const char *Start(const char * const *param); + + /* virtual */ void Stop(); + + /* virtual */ void PlaySong(const MusicSongInfo &song); + + /* virtual */ void StopSong(); + + /* virtual */ bool IsSongPlaying(); + + /* virtual */ void SetVolume(byte vol); + /* virtual */ const char *GetName() const { return "fluidsynth"; } +}; + +/** Factory for the fluidsynth driver. */ +class FMusicDriver_FluidSynth : public DriverFactoryBase { +public: + FMusicDriver_FluidSynth() : DriverFactoryBase(Driver::DT_MUSIC, 5, "fluidsynth", "FluidSynth MIDI Driver") {} + /* virtual */ Driver *CreateInstance() const { return new MusicDriver_FluidSynth(); } +}; + +#endif /* MUSIC_FLUIDSYNTH_H */ From 81b2ddd0ab4f2f993f291427c86b009358ba465f Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Thu, 1 Nov 2018 22:44:27 +0100 Subject: [PATCH 065/622] Fix: Fluidsynth should not be added to VC project files --- projects/generate | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/generate b/projects/generate index 28fd255527..4351337a25 100755 --- a/projects/generate +++ b/projects/generate @@ -74,6 +74,7 @@ enable_dedicated="0" enable_ai="1" with_cocoa="0" enable_directmusic="1" +enable_fluidsynth="0" with_threads="1" file_prefix="..\\\\src\\\\" @@ -132,6 +133,7 @@ load_main_data() { "'$os'" != "CYGWIN" && "'$os'" != "MSVC" ) { next; } if ($0 == "MSVC" && "'$os'" != "MSVC") { next; } if ($0 == "DIRECTMUSIC" && "'$enable_directmusic'" != "1") { next; } + if ($0 == "FLUIDSYNTH" && "'$enable_fluidsynth'" != "1") { next; } if ($0 == "LIBTIMIDITY" && "'$libtimidity'" == "" ) { next; } if ($0 == "HAVE_THREAD" && "'$with_threads'" == "0") { next; } From 32b9ee7063b79ae6621762db2a006d6ed267502f Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 3 Nov 2018 19:45:42 +0100 Subject: [PATCH 066/622] Update: Translations from eints latvian: 3 changes by krixis02 --- src/lang/latvian.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 20c9d32f10..4f723b5a88 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1274,6 +1274,7 @@ STR_CONFIG_SETTING_LANDSCAPE :Ainava: {STRING STR_CONFIG_SETTING_LAND_GENERATOR :Zemes radītājs: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Sākotnējais STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Tikai TerraGenesis) Ainavas kalnainība STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maksimālais attālums no kartes malas naftas pārstrādes rūpnīcām: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Naftas pārstrādes rūpnīcas ir būvējamas tikai kartes malu tuvumā, salu kartēm tas ir pie krasta STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Sniega līnijas augstums: {STRING} @@ -2629,6 +2630,7 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window STR_FRAMERATE_SPEED_FACTOR :{WHITE}pašreizējās spēles ātruma pakāpe: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Cik ātri spēle šobrīd iet salīdzinot ar standarta ātrumu. ############ Leave those lines in this order!! ############ End of leave-in-this-order ############ Leave those lines in this order!! @@ -3224,6 +3226,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Iepriek STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} (aizvests {COMMA}%) STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrēt galveno skatu uz ražotni. Ctrl+klikšķis atvērs skatu uz ražotni jaunā skatlaukā STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ražošanas līmenis: {YELLOW}{COMMA}% +STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Nozare ir paziņojusi par nenovēršamu slēgšanu! ############ range for requires starts STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Nepieciešams: {YELLOW}{STRING}{STRING} From 8859381d301a60169e167431c97cb084b7730ead Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Wed, 25 Jul 2018 19:20:17 +0200 Subject: [PATCH 067/622] Add: Industries can produce and accept up to 16 different cargoes --- src/economy.cpp | 11 ++++--- src/industry.h | 29 ++++++++-------- src/industry_cmd.cpp | 52 +++++++++++++---------------- src/industry_gui.cpp | 17 +++++++--- src/industrytype.h | 62 +++++++++++++++++++---------------- src/newgrf_industries.cpp | 7 +++- src/saveload/afterload.cpp | 21 ++++++++++++ src/saveload/industry_sl.cpp | 30 +++++++++++------ src/saveload/saveload.cpp | 3 +- src/subsidy.cpp | 31 ++++++++++-------- src/table/build_industry.h | 10 ++++-- src/table/newgrf_debug_data.h | 8 ++--- 12 files changed, 165 insertions(+), 116 deletions(-) diff --git a/src/economy.cpp b/src/economy.cpp index 98989971ca..b42dc33014 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1147,14 +1147,15 @@ static void TriggerIndustryProduction(Industry *i) SetWindowDirty(WC_INDUSTRY_VIEW, i->index); } } else { - for (uint cargo_index = 0; cargo_index < lengthof(i->incoming_cargo_waiting); cargo_index++) { - uint cargo_waiting = i->incoming_cargo_waiting[cargo_index]; + for (uint ci_in = 0; ci_in < lengthof(i->incoming_cargo_waiting); ci_in++) { + uint cargo_waiting = i->incoming_cargo_waiting[ci_in]; if (cargo_waiting == 0) continue; - i->produced_cargo_waiting[0] = min(i->produced_cargo_waiting[0] + (cargo_waiting * indspec->input_cargo_multiplier[cargo_index][0] / 256), 0xFFFF); - i->produced_cargo_waiting[1] = min(i->produced_cargo_waiting[1] + (cargo_waiting * indspec->input_cargo_multiplier[cargo_index][1] / 256), 0xFFFF); + for (uint ci_out = 0; ci_out < lengthof(i->produced_cargo_waiting), ci_out++) { + i->produced_cargo_waiting[ci_out] = min(i->produced_cargo_waiting[ci_out] + (cargo_waiting * indspec->input_cargo_multiplier[ci_in][ci_out] / 256), 0xFFFF); + } - i->incoming_cargo_waiting[cargo_index] = 0; + i->incoming_cargo_waiting[ci_in] = 0; } } diff --git a/src/industry.h b/src/industry.h index 9b185efc4b..42cf3aff2f 100644 --- a/src/industry.h +++ b/src/industry.h @@ -15,6 +15,7 @@ #include "newgrf_storage.h" #include "subsidy_type.h" #include "industry_map.h" +#include "industrytype.h" #include "tilearea_type.h" @@ -37,20 +38,20 @@ enum ProductionLevels { * Defines the internal data of a functional industry. */ struct Industry : IndustryPool::PoolItem<&_industry_pool> { - TileArea location; ///< Location of the industry - Town *town; ///< Nearest town - CargoID produced_cargo[2]; ///< 2 production cargo slots - uint16 produced_cargo_waiting[2]; ///< amount of cargo produced per cargo - uint16 incoming_cargo_waiting[3]; ///< incoming cargo waiting to be processed - byte production_rate[2]; ///< production rate for each cargo - byte prod_level; ///< general production level - CargoID accepts_cargo[3]; ///< 3 input cargo slots - uint16 this_month_production[2]; ///< stats of this month's production per cargo - uint16 this_month_transported[2]; ///< stats of this month's transport per cargo - byte last_month_pct_transported[2]; ///< percentage transported per cargo in the last full month - uint16 last_month_production[2]; ///< total units produced per cargo in the last full month - uint16 last_month_transported[2]; ///< total units transported per cargo in the last full month - uint16 counter; ///< used for animation and/or production (if available cargo) + TileArea location; ///< Location of the industry + Town *town; ///< Nearest town + CargoID produced_cargo[INDUSTRY_NUM_OUTPUTS]; ///< 16 production cargo slots + uint16 produced_cargo_waiting[INDUSTRY_NUM_OUTPUTS]; ///< amount of cargo produced per cargo + uint16 incoming_cargo_waiting[INDUSTRY_NUM_INPUTS]; ///< incoming cargo waiting to be processed + byte production_rate[INDUSTRY_NUM_OUTPUTS]; ///< production rate for each cargo + byte prod_level; ///< general production level + CargoID accepts_cargo[INDUSTRY_NUM_INPUTS]; ///< 16 input cargo slots + uint16 this_month_production[INDUSTRY_NUM_OUTPUTS]; ///< stats of this month's production per cargo + uint16 this_month_transported[INDUSTRY_NUM_OUTPUTS]; ///< stats of this month's transport per cargo + byte last_month_pct_transported[INDUSTRY_NUM_OUTPUTS]; ///< percentage transported per cargo in the last full month + uint16 last_month_production[INDUSTRY_NUM_OUTPUTS]; ///< total units produced per cargo in the last full month + uint16 last_month_transported[INDUSTRY_NUM_OUTPUTS]; ///< total units transported per cargo in the last full month + uint16 counter; ///< used for animation and/or production (if available cargo) IndustryType type; ///< type of industry. OwnerByte owner; ///< owner of the industry. Which SHOULD always be (imho) OWNER_NONE diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index ee55e490bd..a30fea6d1f 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1118,8 +1118,9 @@ static void ProduceIndustryGoods(Industry *i) if (HasBit(indsp->callback_mask, CBM_IND_PRODUCTION_256_TICKS)) IndustryProductionCallback(i, 1); IndustryBehaviour indbehav = indsp->behaviour; - i->produced_cargo_waiting[0] = min(0xffff, i->produced_cargo_waiting[0] + i->production_rate[0]); - i->produced_cargo_waiting[1] = min(0xffff, i->produced_cargo_waiting[1] + i->production_rate[1]); + for (size_t j = 0; j < lengthof(i->produced_cargo_waiting); j++) { + i->produced_cargo_waiting[j] = min(0xffff, i->produced_cargo_waiting[j] + i->production_rate[j]); + } if ((indbehav & INDUSTRYBEH_PLANT_FIELDS) != 0) { uint16 cb_res = CALLBACK_FAILED; @@ -1648,18 +1649,22 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, i->type = type; Industry::IncIndustryTypeCount(type); - i->produced_cargo[0] = indspec->produced_cargo[0]; - i->produced_cargo[1] = indspec->produced_cargo[1]; - i->accepts_cargo[0] = indspec->accepts_cargo[0]; - i->accepts_cargo[1] = indspec->accepts_cargo[1]; - i->accepts_cargo[2] = indspec->accepts_cargo[2]; - i->production_rate[0] = indspec->production_rate[0]; - i->production_rate[1] = indspec->production_rate[1]; + MemCpyT(i->produced_cargo, indspec->produced_cargo, lengthof(i->produced_cargo)); + MemCpyT(i->production_rate, indspec->production_rate, lengthof(i->production_rate)); + MemCpyT(i->accepts_cargo, indspec->accepts_cargo, lengthof(i->accepts_cargo)); + + MemSetT(i->produced_cargo_waiting, 0, lengthof(i->produced_cargo_waiting)); + MemSetT(i->this_month_production, 0, lengthof(i->this_month_production)); + MemSetT(i->this_month_transported, 0, lengthof(i->this_month_transported)); + MemSetT(i->last_month_pct_transported, 0, lengthof(i->last_month_pct_transported)); + MemSetT(i->last_month_transported, 0, lengthof(i->last_month_transported)); + MemSetT(i->incoming_cargo_waiting, 0, lengthof(i->incoming_cargo_waiting)); /* don't use smooth economy for industries using production related callbacks */ if (indspec->UsesSmoothEconomy()) { - i->production_rate[0] = min((RandomRange(256) + 128) * i->production_rate[0] >> 8, 255); - i->production_rate[1] = min((RandomRange(256) + 128) * i->production_rate[1] >> 8, 255); + for (size_t ci = 0; ci < lengthof(i->production_rate); ci++) { + i->production_rate[ci] = min((RandomRange(256) + 128) * i->production_rate[ci] >> 8, 255); + } } i->town = t; @@ -1669,19 +1674,6 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, i->random_colour = GB(r, 0, 4); i->counter = GB(r, 4, 12); i->random = initial_random_bits; - i->produced_cargo_waiting[0] = 0; - i->produced_cargo_waiting[1] = 0; - i->incoming_cargo_waiting[0] = 0; - i->incoming_cargo_waiting[1] = 0; - i->incoming_cargo_waiting[2] = 0; - i->this_month_production[0] = 0; - i->this_month_production[1] = 0; - i->this_month_transported[0] = 0; - i->this_month_transported[1] = 0; - i->last_month_pct_transported[0] = 0; - i->last_month_pct_transported[1] = 0; - i->last_month_transported[0] = 0; - i->last_month_transported[1] = 0; i->was_cargo_delivered = false; i->last_prod_year = _cur_year; i->founder = founder; @@ -1712,10 +1704,9 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, } if (_generating_world) { - i->last_month_production[0] = i->production_rate[0] * 8; - i->last_month_production[1] = i->production_rate[1] * 8; - } else { - i->last_month_production[0] = i->last_month_production[1] = 0; + for (size_t ci = 0; ci < lengthof(i->last_month_production); ci++) { + i->last_month_production[ci] = i->production_rate[ci] * 8; + } } if (HasBit(indspec->callback_mask, CBM_IND_DECIDE_COLOUR)) { @@ -2194,8 +2185,9 @@ void Industry::RecomputeProductionMultipliers() assert(!indspec->UsesSmoothEconomy()); /* Rates are rounded up, so e.g. oilrig always produces some passengers */ - this->production_rate[0] = min(CeilDiv(indspec->production_rate[0] * this->prod_level, PRODLEVEL_DEFAULT), 0xFF); - this->production_rate[1] = min(CeilDiv(indspec->production_rate[1] * this->prod_level, PRODLEVEL_DEFAULT), 0xFF); + for (size_t i = 0; i < lengthof(this->production_rate); i++) { + this->production_rate[i] = min(CeilDiv(indspec->production_rate[i] * this->prod_level, PRODLEVEL_DEFAULT), 0xFF); + } } diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 9108c4e7a7..1229fec337 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -358,7 +358,7 @@ public: const IndustrySpec *indsp = GetIndustrySpec(this->index[i]); - CargoSuffix cargo_suffix[3]; + CargoSuffix cargo_suffix[lengthof(indsp->accepts_cargo)]; GetAllCargoSuffixes(0, CST_FUND, NULL, this->index[i], indsp, indsp->accepts_cargo, cargo_suffix); StringID str = STR_INDUSTRY_VIEW_REQUIRES_CARGO; byte p = 0; @@ -477,7 +477,7 @@ public: } /* Draw the accepted cargoes, if any. Otherwise, will print "Nothing". */ - CargoSuffix cargo_suffix[3]; + CargoSuffix cargo_suffix[lengthof(indsp->accepts_cargo)]; GetAllCargoSuffixes(0, CST_FUND, NULL, this->selected_type, indsp, indsp->accepts_cargo, cargo_suffix); StringID str = STR_INDUSTRY_VIEW_REQUIRES_CARGO; byte p = 0; @@ -683,8 +683,15 @@ static void UpdateIndustryProduction(Industry *i); static inline bool IsProductionAlterable(const Industry *i) { const IndustrySpec *is = GetIndustrySpec(i->type); + bool has_prod = false; + for (size_t j = 0; j < lengthof(is->production_rate); j++) { + if (is->production_rate[j] != 0) { + has_prod = true; + break; + } + } return ((_game_mode == GM_EDITOR || _cheats.setup_prod.value) && - (is->production_rate[0] != 0 || is->production_rate[1] != 0 || is->IsRawIndustry()) && + (has_prod || is->IsRawIndustry()) && !_networking); } @@ -763,7 +770,7 @@ public: y += 2 * FONT_HEIGHT_NORMAL; } - CargoSuffix cargo_suffix[3]; + CargoSuffix cargo_suffix[lengthof(i->accepts_cargo)]; GetAllCargoSuffixes(0, CST_VIEW, i, i->type, ind, i->accepts_cargo, cargo_suffix); bool stockpiling = HasBit(ind->callback_mask, CBM_IND_PRODUCTION_CARGO_ARRIVAL) || HasBit(ind->callback_mask, CBM_IND_PRODUCTION_256_TICKS); @@ -1514,7 +1521,7 @@ enum CargoesFieldType { CFT_HEADER, ///< Header text. }; -static const uint MAX_CARGOES = 3; ///< Maximum number of cargoes carried in a #CFT_CARGO field in #CargoesField. +static const uint MAX_CARGOES = 16; ///< Maximum number of cargoes carried in a #CFT_CARGO field in #CargoesField. /** Data about a single field in the #IndustryCargoesWindow panel. */ struct CargoesField { diff --git a/src/industrytype.h b/src/industrytype.h index 03b6c79736..da09a6d9bd 100644 --- a/src/industrytype.h +++ b/src/industrytype.h @@ -95,45 +95,48 @@ struct IndustryTileTable { IndustryGfx gfx; }; +const int INDUSTRY_NUM_INPUTS = 16; ///< Number of cargo types an industry can accept +const int INDUSTRY_NUM_OUTPUTS = 16; ///< Number of cargo types an industry can produce + /** * Defines the data structure for constructing industry. */ struct IndustrySpec { - const IndustryTileTable * const *table;///< List of the tiles composing the industry - byte num_table; ///< Number of elements in the table - uint8 cost_multiplier; ///< Base construction cost multiplier. - uint32 removal_cost_multiplier; ///< Base removal cost multiplier. - uint32 prospecting_chance; ///< Chance prospecting succeeds - IndustryType conflicting[3]; ///< Industries this industry cannot be close to - byte check_proc; ///< Index to a procedure to check for conflicting circumstances - CargoID produced_cargo[2]; - byte production_rate[2]; + const IndustryTileTable * const *table; ///< List of the tiles composing the industry + byte num_table; ///< Number of elements in the table + uint8 cost_multiplier; ///< Base construction cost multiplier. + uint32 removal_cost_multiplier; ///< Base removal cost multiplier. + uint32 prospecting_chance; ///< Chance prospecting succeeds + IndustryType conflicting[3]; ///< Industries this industry cannot be close to + byte check_proc; ///< Index to a procedure to check for conflicting circumstances + CargoID produced_cargo[INDUSTRY_NUM_OUTPUTS]; + byte production_rate[INDUSTRY_NUM_OUTPUTS]; /** * minimum amount of cargo transported to the stations. * If the waiting cargo is less than this number, no cargo is moved to it. */ byte minimal_cargo; - CargoID accepts_cargo[3]; ///< 3 accepted cargoes. - uint16 input_cargo_multiplier[3][2]; ///< Input cargo multipliers (multiply amount of incoming cargo for the produced cargoes) - IndustryLifeType life_type; ///< This is also known as Industry production flag, in newgrf specs - byte climate_availability; ///< Bitmask, giving landscape enums as bit position - IndustryBehaviour behaviour; ///< How this industry will behave, and how others entities can use it - byte map_colour; ///< colour used for the small map - StringID name; ///< Displayed name of the industry - StringID new_industry_text; ///< Message appearing when the industry is built - StringID closure_text; ///< Message appearing when the industry closes - StringID production_up_text; ///< Message appearing when the industry's production is increasing - StringID production_down_text; ///< Message appearing when the industry's production is decreasing - StringID station_name; ///< Default name for nearby station - byte appear_ingame[NUM_LANDSCAPE]; ///< Probability of appearance in game - byte appear_creation[NUM_LANDSCAPE]; ///< Probability of appearance during map creation - uint8 number_of_sounds; ///< Number of sounds available in the sounds array - const uint8 *random_sounds; ///< array of random sounds. + CargoID accepts_cargo[INDUSTRY_NUM_INPUTS]; ///< 16 accepted cargoes. + uint16 input_cargo_multiplier[INDUSTRY_NUM_INPUTS][INDUSTRY_NUM_OUTPUTS]; ///< Input cargo multipliers (multiply amount of incoming cargo for the produced cargoes) + IndustryLifeType life_type; ///< This is also known as Industry production flag, in newgrf specs + byte climate_availability; ///< Bitmask, giving landscape enums as bit position + IndustryBehaviour behaviour; ///< How this industry will behave, and how others entities can use it + byte map_colour; ///< colour used for the small map + StringID name; ///< Displayed name of the industry + StringID new_industry_text; ///< Message appearing when the industry is built + StringID closure_text; ///< Message appearing when the industry closes + StringID production_up_text; ///< Message appearing when the industry's production is increasing + StringID production_down_text; ///< Message appearing when the industry's production is decreasing + StringID station_name; ///< Default name for nearby station + byte appear_ingame[NUM_LANDSCAPE]; ///< Probability of appearance in game + byte appear_creation[NUM_LANDSCAPE]; ///< Probability of appearance during map creation + uint8 number_of_sounds; ///< Number of sounds available in the sounds array + const uint8 *random_sounds; ///< array of random sounds. /* Newgrf data */ - uint16 callback_mask; ///< Bitmask of industry callbacks that have to be called - uint8 cleanup_flag; ///< flags indicating which data should be freed upon cleaning up - bool enabled; ///< entity still available (by default true).newgrf can disable it, though - GRFFileProps grf_prop; ///< properties related to the grf file + uint16 callback_mask; ///< Bitmask of industry callbacks that have to be called + uint8 cleanup_flag; ///< flags indicating which data should be freed upon cleaning up + bool enabled; ///< entity still available (by default true).newgrf can disable it, though + GRFFileProps grf_prop; ///< properties related to the grf file bool IsRawIndustry() const; bool IsProcessingIndustry() const; @@ -144,6 +147,7 @@ struct IndustrySpec { /** * Defines the data structure of each individual tile of an industry. + * @note A tile can at most accept 3 types of cargo, even if an industry as a whole can accept more types. */ struct IndustryTileSpec { CargoID accepts_cargo[3]; ///< Cargo accepted by this tile diff --git a/src/newgrf_industries.cpp b/src/newgrf_industries.cpp index bf003fb6f4..c3ddda79aa 100644 --- a/src/newgrf_industries.cpp +++ b/src/newgrf_industries.cpp @@ -602,7 +602,12 @@ void IndustryProductionCallback(Industry *ind, int reason) */ bool IndustryTemporarilyRefusesCargo(Industry *ind, CargoID cargo_type) { - assert(cargo_type == ind->accepts_cargo[0] || cargo_type == ind->accepts_cargo[1] || cargo_type == ind->accepts_cargo[2]); + assert( + cargo_type == ind->accepts_cargo[0] || cargo_type == ind->accepts_cargo[1] || cargo_type == ind->accepts_cargo[2] || cargo_type == ind->accepts_cargo[3] || + cargo_type == ind->accepts_cargo[4] || cargo_type == ind->accepts_cargo[5] || cargo_type == ind->accepts_cargo[6] || cargo_type == ind->accepts_cargo[7] || + cargo_type == ind->accepts_cargo[8] || cargo_type == ind->accepts_cargo[9] || cargo_type == ind->accepts_cargo[10] || cargo_type == ind->accepts_cargo[11] || + cargo_type == ind->accepts_cargo[12] || cargo_type == ind->accepts_cargo[13] || cargo_type == ind->accepts_cargo[14] || cargo_type == ind->accepts_cargo[15] + ); const IndustrySpec *indspec = GetIndustrySpec(ind->type); if (HasBit(indspec->callback_mask, CBM_IND_REFUSE_CARGO)) { diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index cca9ad328a..1529aca2bc 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -3015,6 +3015,27 @@ bool AfterLoadGame() } } + if (IsSavegameVersionBefore(202)) { + /* Make sure added industry cargo slots are cleared */ + Industry *i; + FOR_ALL_INDUSTRIES(i) { + for (size_t ci = 2; ci < lengthof(i->produced_cargo); ci++) { + i->produced_cargo[ci] = CT_INVALID; + i->produced_cargo_waiting[ci] = 0; + i->production_rate[ci] = 0; + i->last_month_production[ci] = 0; + i->last_month_transported[ci] = 0; + i->last_month_pct_transported[ci] = 0; + i->this_month_production[ci] = 0; + i->this_month_transported[ci] = 0; + } + for (size_t ci = 3; ci < lengthof(i->accepts_cargo); ci++) { + i->accepts_cargo[ci] = CT_INVALID; + i->incoming_cargo_waiting[ci] = 0; + } + } + } + /* Station acceptance is some kind of cache */ if (IsSavegameVersionBefore(127)) { Station *st; diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp index 615e8e1522..9727e4e512 100644 --- a/src/saveload/industry_sl.cpp +++ b/src/saveload/industry_sl.cpp @@ -26,18 +26,28 @@ static const SaveLoad _industry_desc[] = { SLE_VAR(Industry, location.h, SLE_FILE_U8 | SLE_VAR_U16), SLE_REF(Industry, town, REF_TOWN), SLE_CONDNULL( 2, 0, 60), ///< used to be industry's produced_cargo - SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 2, 78, SL_MAX_VERSION), - SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 3, 70, SL_MAX_VERSION), - SLE_ARR(Industry, produced_cargo_waiting, SLE_UINT16, 2), - SLE_ARR(Industry, production_rate, SLE_UINT8, 2), + SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 2, 78, 201), + SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 16, 202, SL_MAX_VERSION), + SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 3, 70, 201), + SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 16, 202, SL_MAX_VERSION), + SLE_CONDARR(Industry, produced_cargo_waiting, SLE_UINT16, 2, 0, 201), + SLE_CONDARR(Industry, produced_cargo_waiting, SLE_UINT16, 16, 202, SL_MAX_VERSION), + SLE_CONDARR(Industry, production_rate, SLE_UINT8, 2, 0, 201), + SLE_CONDARR(Industry, production_rate, SLE_UINT8, 16, 202, SL_MAX_VERSION), SLE_CONDNULL( 3, 0, 60), ///< used to be industry's accepts_cargo - SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 3, 78, SL_MAX_VERSION), + SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 3, 78, 201), + SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 16, 202, SL_MAX_VERSION), SLE_VAR(Industry, prod_level, SLE_UINT8), - SLE_ARR(Industry, this_month_production, SLE_UINT16, 2), - SLE_ARR(Industry, this_month_transported, SLE_UINT16, 2), - SLE_ARR(Industry, last_month_pct_transported, SLE_UINT8, 2), - SLE_ARR(Industry, last_month_production, SLE_UINT16, 2), - SLE_ARR(Industry, last_month_transported, SLE_UINT16, 2), + SLE_CONDARR(Industry, this_month_production, SLE_UINT16, 2, 0, 201), + SLE_CONDARR(Industry, this_month_production, SLE_UINT16, 16, 202, SL_MAX_VERSION), + SLE_CONDARR(Industry, this_month_transported, SLE_UINT16, 2, 0, 201), + SLE_CONDARR(Industry, this_month_transported, SLE_UINT16, 16, 202, SL_MAX_VERSION), + SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8, 2, 0, 201), + SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8, 16, 202, SL_MAX_VERSION), + SLE_CONDARR(Industry, last_month_production, SLE_UINT16, 2, 0, 201), + SLE_CONDARR(Industry, last_month_production, SLE_UINT16, 16, 202, SL_MAX_VERSION), + SLE_CONDARR(Industry, last_month_transported, SLE_UINT16, 2, 0, 201), + SLE_CONDARR(Industry, last_month_transported, SLE_UINT16, 16, 202, SL_MAX_VERSION), SLE_VAR(Industry, counter, SLE_UINT16), diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index f23d13a086..8cf5ee36b6 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -269,8 +269,9 @@ * 199 * 200 #6805 Extend railtypes to 64, adding uint16 to map array. * 201 #6885 Extend NewGRF persistant storages. + * 202 #6867 Increase industry cargo slots to 16 in, 16 out */ -extern const uint16 SAVEGAME_VERSION = 201; ///< Current savegame version of OpenTTD. +extern const uint16 SAVEGAME_VERSION = 202; ///< Current savegame version of OpenTTD. SavegameType _savegame_type; ///< type of savegame we are loading FileToSaveLoad _file_to_saveload; ///< File to save or load in the openttd loop. diff --git a/src/subsidy.cpp b/src/subsidy.cpp index bd2ed07be5..fa327efa92 100644 --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -383,15 +383,21 @@ bool FindSubsidyIndustryCargoRoute() CargoID cid; /* Randomize cargo type */ - if (src_ind->produced_cargo[1] != CT_INVALID && HasBit(Random(), 0)) { - cid = src_ind->produced_cargo[1]; - trans = src_ind->last_month_pct_transported[1]; - total = src_ind->last_month_production[1]; - } else { - cid = src_ind->produced_cargo[0]; - trans = src_ind->last_month_pct_transported[0]; - total = src_ind->last_month_production[0]; + int num_cargos = 0; + for (size_t ci = 0; ci < lengthof(src_ind->produced_cargo); ci++) { + if (src_ind->produced_cargo[ci] != CT_INVALID) num_cargos++; } + if (num_cargos == 0) return false; // industry produces nothing + int cargo_num = RandomRange(num_cargos) + 1; + int cargo_index; + for (cargo_index = 0; cargo_index < lengthof(src_ind->produced_cargo); cargo_index++) { + if (src_ind->produced_cargo[cargo_index] != CT_INVALID) cargo_num--; + if (cargo_num == 0) break; + } + assert(cargo_num == 0); // indicates loop didn't break as intended + cid = src_ind->produced_cargo[cargo_index]; + trans = src_ind->last_month_pct_transported[cargo_index]; + total = src_ind->last_month_production[cargo_index]; /* Quit if no production in this industry * or if the pct transported is already large enough @@ -435,14 +441,11 @@ bool FindSubsidyCargoDestination(CargoID cid, SourceType src_type, SourceID src) case ST_INDUSTRY: { /* Select a random industry. */ const Industry *dst_ind = Industry::GetRandom(); + if (dst_ind == NULL) return false; /* The industry must accept the cargo */ - if (dst_ind == NULL || - (cid != dst_ind->accepts_cargo[0] && - cid != dst_ind->accepts_cargo[1] && - cid != dst_ind->accepts_cargo[2])) { - return false; - } + bool valid = std::find(dst_ind->accepts_cargo, endof(dst_ind->accepts_cargo), cid) != endof(dst_ind->accepts_cargo); + if (!valid) return false; dst = dst_ind->index; break; diff --git a/src/table/build_industry.h b/src/table/build_industry.h index a0783332ef..62264eb6f8 100644 --- a/src/table/build_industry.h +++ b/src/table/build_industry.h @@ -1195,8 +1195,12 @@ enum IndustryTypes { #define MI(tbl, sndc, snd, d, pc, ai1, ai2, ai3, ai4, ag1, ag2, ag3, ag4, col, \ c1, c2, c3, proc, p1, r1, p2, r2, m, a1, im1, a2, im2, a3, im3, pr, clim, bev, in, intx, s1, s2, s3) \ - {tbl, lengthof(tbl), d, 0, pc, {c1, c2, c3}, proc, {p1, p2}, {r1, r2}, m, \ - {a1, a2, a3}, {{im1, 0}, {im2, 0}, {im3, 0}}, pr, clim, bev, col, in, intx, s1, s2, s3, STR_UNDEFINED, {ai1, ai2, ai3, ai4}, {ag1, ag2, ag3, ag4}, \ + {tbl, lengthof(tbl), d, 0, pc, {c1, c2, c3}, proc, \ + {p1, p2, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID}, \ + {r1, r2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, m, \ + {a1, a2, a3, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID}, \ + {{im1, 0}, {im2, 0}, {im3, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, \ + pr, clim, bev, col, in, intx, s1, s2, s3, STR_UNDEFINED, {ai1, ai2, ai3, ai4}, {ag1, ag2, ag3, ag4}, \ sndc, snd, 0, 0, true, GRFFileProps(INVALID_INDUSTRYTYPE)} /* Format: tile table count and sounds table @@ -1594,7 +1598,7 @@ static const IndustrySpec _origin_industry_specs[NEW_INDUSTRYOFFSET] = { * @param a2 next frame of animation * @param a3 chooses between animation or construction state */ -#define MT(ca1, c1, ca2, c2, ca3, c3, sl, a1, a2, a3) {{c1, c2, c3}, {ca1, ca2, ca3}, sl, a1, a2, a3, 0, {0, ANIM_STATUS_NO_ANIMATION, 2, 0}, INDTILE_SPECIAL_NONE, true, GRFFileProps(INVALID_INDUSTRYTILE)} +#define MT(ca1, c1, ca2, c2, ca3, c3, sl, a1, a2, a3) {{c1, c2, c3, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID}, {ca1, ca2, ca3}, sl, a1, a2, a3, 0, {0, ANIM_STATUS_NO_ANIMATION, 2, 0}, INDTILE_SPECIAL_NONE, true, GRFFileProps(INVALID_INDUSTRYTILE)} static const IndustryTileSpec _origin_industry_tile_specs[NEW_INDUSTRYTILEOFFSET] = { /* Coal Mine */ MT(0, CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, SLOPE_STEEP, INDUSTRYTILE_NOANIM, INDUSTRYTILE_NOANIM, false), diff --git a/src/table/newgrf_debug_data.h b/src/table/newgrf_debug_data.h index afe19bbedb..a6aa716166 100644 --- a/src/table/newgrf_debug_data.h +++ b/src/table/newgrf_debug_data.h @@ -272,10 +272,10 @@ static const NIFeature _nif_industrytile = { /*** NewGRF industries ***/ static const NIProperty _nip_industries[] = { - NIP(0x10, Industry, produced_cargo[0], NIT_CARGO, "produced cargo 0"), - NIP(0x10, Industry, produced_cargo[1], NIT_CARGO, "produced cargo 1"), - NIP(0x11, Industry, accepts_cargo[0], NIT_CARGO, "accepted cargo 0"), - NIP(0x11, Industry, accepts_cargo[1], NIT_CARGO, "accepted cargo 1"), + NIP(0x10, Industry, produced_cargo[0], NIT_CARGO, "produced cargo 0"), + NIP(0x10, Industry, produced_cargo[1], NIT_CARGO, "produced cargo 1"), + NIP(0x11, Industry, accepts_cargo[0], NIT_CARGO, "accepted cargo 0"), + NIP(0x11, Industry, accepts_cargo[1], NIT_CARGO, "accepted cargo 1"), NIP(0x11, Industry, accepts_cargo[2], NIT_CARGO, "accepted cargo 2"), NIP_END() }; From e66cec8f86357918c58b20bd3cc67330f277a5e1 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Thu, 26 Jul 2018 19:29:54 +0200 Subject: [PATCH 068/622] Add: NewGRF support for 16-in-16-out industries --- src/economy.cpp | 4 +- src/industry.h | 19 +++- src/industry_cmd.cpp | 75 ++++++++++++---- src/industry_gui.cpp | 64 ++++++++++---- src/industry_type.h | 4 + src/industrytype.h | 9 +- src/lang/english.txt | 2 + src/newgrf.cpp | 159 ++++++++++++++++++++++++++++++++-- src/newgrf_industries.cpp | 66 +++++++++++--- src/newgrf_spritegroup.h | 10 ++- src/saveload/afterload.cpp | 9 ++ src/saveload/industry_sl.cpp | 3 +- src/subsidy.cpp | 6 +- src/table/newgrf_debug_data.h | 37 ++++++-- 14 files changed, 392 insertions(+), 75 deletions(-) diff --git a/src/economy.cpp b/src/economy.cpp index b42dc33014..ad9895ba9c 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1062,6 +1062,7 @@ static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint n uint amount = min(num_pieces, 0xFFFFU - ind->incoming_cargo_waiting[cargo_index]); ind->incoming_cargo_waiting[cargo_index] += amount; + ind->last_cargo_accepted_at[cargo_index] = _date; num_pieces -= amount; accepted += amount; } @@ -1138,7 +1139,6 @@ static void TriggerIndustryProduction(Industry *i) uint16 callback = indspec->callback_mask; i->was_cargo_delivered = true; - i->last_cargo_accepted_at = _date; if (HasBit(callback, CBM_IND_PRODUCTION_CARGO_ARRIVAL) || HasBit(callback, CBM_IND_PRODUCTION_256_TICKS)) { if (HasBit(callback, CBM_IND_PRODUCTION_CARGO_ARRIVAL)) { @@ -1151,7 +1151,7 @@ static void TriggerIndustryProduction(Industry *i) uint cargo_waiting = i->incoming_cargo_waiting[ci_in]; if (cargo_waiting == 0) continue; - for (uint ci_out = 0; ci_out < lengthof(i->produced_cargo_waiting), ci_out++) { + for (uint ci_out = 0; ci_out < lengthof(i->produced_cargo_waiting); ci_out++) { i->produced_cargo_waiting[ci_out] = min(i->produced_cargo_waiting[ci_out] + (cargo_waiting * indspec->input_cargo_multiplier[ci_in][ci_out] / 256), 0xFFFF); } diff --git a/src/industry.h b/src/industry.h index 42cf3aff2f..af0208b3cc 100644 --- a/src/industry.h +++ b/src/industry.h @@ -12,6 +12,7 @@ #ifndef INDUSTRY_H #define INDUSTRY_H +#include #include "newgrf_storage.h" #include "subsidy_type.h" #include "industry_map.h" @@ -64,7 +65,7 @@ struct Industry : IndustryPool::PoolItem<&_industry_pool> { OwnerByte founder; ///< Founder of the industry Date construction_date; ///< Date of the construction of the industry uint8 construction_type; ///< Way the industry was constructed (@see IndustryConstructionType) - Date last_cargo_accepted_at; ///< Last day cargo was accepted by this industry + Date last_cargo_accepted_at[INDUSTRY_NUM_INPUTS]; ///< Last day each cargo type was accepted by this industry byte selected_layout; ///< Which tile layout was used when creating the industry uint16 random; ///< Random value used for randomisation of all kinds of things @@ -86,6 +87,22 @@ struct Industry : IndustryPool::PoolItem<&_industry_pool> { return IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == this->index; } + inline int GetCargoProducedIndex(CargoID cargo) const + { + if (cargo == CT_INVALID) return -1; + const CargoID *pos = std::find(this->produced_cargo, endof(this->produced_cargo), cargo); + if (pos == endof(this->produced_cargo)) return -1; + return pos - this->produced_cargo; + } + + inline int GetCargoAcceptedIndex(CargoID cargo) const + { + if (cargo == CT_INVALID) return -1; + const CargoID *pos = std::find(this->accepts_cargo, endof(this->accepts_cargo), cargo); + if (pos == endof(this->accepts_cargo)) return -1; + return pos - this->accepts_cargo; + } + /** * Get the industry of the given tile * @param tile the tile to get the industry from diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index a30fea6d1f..d918ef16bd 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -394,35 +394,49 @@ static void AddAcceptedCargo_Industry(TileIndex tile, CargoArray &acceptance, Ca { IndustryGfx gfx = GetIndustryGfx(tile); const IndustryTileSpec *itspec = GetIndustryTileSpec(gfx); + const Industry *ind = Industry::GetByTile(tile); - /* When we have to use a callback, we put our data in the next two variables */ - CargoID raw_accepts_cargo[lengthof(itspec->accepts_cargo)]; - uint8 raw_cargo_acceptance[lengthof(itspec->acceptance)]; + /* Starting point for acceptance */ + CargoID accepts_cargo[lengthof(itspec->accepts_cargo)]; + int8 cargo_acceptance[lengthof(itspec->acceptance)]; + MemCpyT(accepts_cargo, itspec->accepts_cargo, lengthof(accepts_cargo)); + MemCpyT(cargo_acceptance, itspec->acceptance, lengthof(cargo_acceptance)); - /* And then these will always point to a same sized array with the required data */ - const CargoID *accepts_cargo = itspec->accepts_cargo; - const uint8 *cargo_acceptance = itspec->acceptance; + if (itspec->special_flags & INDTILE_SPECIAL_ACCEPTS_ALL_CARGO) { + /* Copy all accepted cargoes from industry itself */ + for (uint i = 0; i < lengthof(ind->accepts_cargo); i++) { + CargoID *pos = std::find(accepts_cargo, endof(accepts_cargo), ind->accepts_cargo[i]); + if (pos == endof(accepts_cargo)) { + /* Not found, insert */ + pos = std::find(accepts_cargo, endof(accepts_cargo), CT_INVALID); + if (pos == endof(accepts_cargo)) continue; // nowhere to place, give up on this one + *pos = ind->accepts_cargo[i]; + } + cargo_acceptance[pos - accepts_cargo] += 8; + } + } if (HasBit(itspec->callback_mask, CBM_INDT_ACCEPT_CARGO)) { + /* Try callback for accepts list, if success override all existing accepts */ uint16 res = GetIndustryTileCallback(CBID_INDTILE_ACCEPT_CARGO, 0, 0, gfx, Industry::GetByTile(tile), tile); if (res != CALLBACK_FAILED) { - accepts_cargo = raw_accepts_cargo; - for (uint i = 0; i < lengthof(itspec->accepts_cargo); i++) raw_accepts_cargo[i] = GetCargoTranslation(GB(res, i * 5, 5), itspec->grf_prop.grffile); + MemSetT(accepts_cargo, CT_INVALID, lengthof(accepts_cargo)); + for (uint i = 0; i < 3; i++) accepts_cargo[i] = GetCargoTranslation(GB(res, i * 5, 5), itspec->grf_prop.grffile); } } if (HasBit(itspec->callback_mask, CBM_INDT_CARGO_ACCEPTANCE)) { + /* Try callback for acceptance list, if success override all existing acceptance */ uint16 res = GetIndustryTileCallback(CBID_INDTILE_CARGO_ACCEPTANCE, 0, 0, gfx, Industry::GetByTile(tile), tile); if (res != CALLBACK_FAILED) { - cargo_acceptance = raw_cargo_acceptance; - for (uint i = 0; i < lengthof(itspec->accepts_cargo); i++) raw_cargo_acceptance[i] = GB(res, i * 4, 4); + MemSetT(cargo_acceptance, 0, lengthof(cargo_acceptance)); + for (uint i = 0; i < 3; i++) cargo_acceptance[i] = GB(res, i * 4, 4); } } - const Industry *ind = Industry::GetByTile(tile); for (byte i = 0; i < lengthof(itspec->accepts_cargo); i++) { CargoID a = accepts_cargo[i]; - if (a == CT_INVALID || cargo_acceptance[i] == 0) continue; // work only with valid cargoes + if (a == CT_INVALID || cargo_acceptance[i] <= 0) continue; // work only with valid cargoes /* Add accepted cargo */ acceptance[a] += cargo_acceptance[i]; @@ -1659,6 +1673,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, MemSetT(i->last_month_pct_transported, 0, lengthof(i->last_month_pct_transported)); MemSetT(i->last_month_transported, 0, lengthof(i->last_month_transported)); MemSetT(i->incoming_cargo_waiting, 0, lengthof(i->incoming_cargo_waiting)); + MemSetT(i->last_cargo_accepted_at, 0, lengthof(i->last_cargo_accepted_at)); /* don't use smooth economy for industries using production related callbacks */ if (indspec->UsesSmoothEconomy()) { @@ -1718,28 +1733,56 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, } if (HasBit(indspec->callback_mask, CBM_IND_INPUT_CARGO_TYPES)) { + /* Clear all input cargo types */ for (uint j = 0; j < lengthof(i->accepts_cargo); j++) i->accepts_cargo[j] = CT_INVALID; - for (uint j = 0; j < lengthof(i->accepts_cargo); j++) { + /* Query actual types */ + uint maxcargoes = (indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED) ? lengthof(i->accepts_cargo) : 3; + for (uint j = 0; j < maxcargoes; j++) { uint16 res = GetIndustryCallback(CBID_INDUSTRY_INPUT_CARGO_TYPES, j, 0, i, type, INVALID_TILE); if (res == CALLBACK_FAILED || GB(res, 0, 8) == CT_INVALID) break; if (indspec->grf_prop.grffile->grf_version >= 8 && res >= 0x100) { ErrorUnknownCallbackResult(indspec->grf_prop.grffile->grfid, CBID_INDUSTRY_INPUT_CARGO_TYPES, res); break; } - i->accepts_cargo[j] = GetCargoTranslation(GB(res, 0, 8), indspec->grf_prop.grffile); + CargoID cargo = GetCargoTranslation(GB(res, 0, 8), indspec->grf_prop.grffile); + if (std::find(indspec->accepts_cargo, endof(indspec->accepts_cargo), cargo) == endof(indspec->accepts_cargo)) { + /* Cargo not in spec, error in NewGRF */ + ErrorUnknownCallbackResult(indspec->grf_prop.grffile->grfid, CBID_INDUSTRY_INPUT_CARGO_TYPES, res); + break; + } + if (std::find(i->accepts_cargo, i->accepts_cargo + j, cargo) != i->accepts_cargo + j) { + /* Duplicate cargo */ + ErrorUnknownCallbackResult(indspec->grf_prop.grffile->grfid, CBID_INDUSTRY_INPUT_CARGO_TYPES, res); + break; + } + i->accepts_cargo[j] = cargo; } } if (HasBit(indspec->callback_mask, CBM_IND_OUTPUT_CARGO_TYPES)) { + /* Clear all output cargo types */ for (uint j = 0; j < lengthof(i->produced_cargo); j++) i->produced_cargo[j] = CT_INVALID; - for (uint j = 0; j < lengthof(i->produced_cargo); j++) { + /* Query actual types */ + uint maxcargoes = (indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED) ? lengthof(i->produced_cargo) : 2; + for (uint j = 0; j < maxcargoes; j++) { uint16 res = GetIndustryCallback(CBID_INDUSTRY_OUTPUT_CARGO_TYPES, j, 0, i, type, INVALID_TILE); if (res == CALLBACK_FAILED || GB(res, 0, 8) == CT_INVALID) break; if (indspec->grf_prop.grffile->grf_version >= 8 && res >= 0x100) { ErrorUnknownCallbackResult(indspec->grf_prop.grffile->grfid, CBID_INDUSTRY_OUTPUT_CARGO_TYPES, res); break; } - i->produced_cargo[j] = GetCargoTranslation(GB(res, 0, 8), indspec->grf_prop.grffile); + CargoID cargo = GetCargoTranslation(GB(res, 0, 8), indspec->grf_prop.grffile); + if (std::find(indspec->produced_cargo, endof(indspec->produced_cargo), cargo) == endof(indspec->produced_cargo)) { + /* Cargo not in spec, error in NewGRF */ + ErrorUnknownCallbackResult(indspec->grf_prop.grffile->grfid, CBID_INDUSTRY_OUTPUT_CARGO_TYPES, res); + break; + } + if (std::find(i->produced_cargo, i->produced_cargo + j, cargo) != i->produced_cargo + j) { + /* Duplicate cargo */ + ErrorUnknownCallbackResult(indspec->grf_prop.grffile->grfid, CBID_INDUSTRY_OUTPUT_CARGO_TYPES, res); + break; + } + i->produced_cargo[j] = cargo; } } diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 1229fec337..d54fb41c1c 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -74,12 +74,7 @@ static void ShowIndustryCargoesWindow(IndustryType id); /** * Gets the string to display after the cargo name (using callback 37) - * @param cargo the cargo for which the suffix is requested - * - 00 - first accepted cargo type - * - 01 - second accepted cargo type - * - 02 - third accepted cargo type - * - 03 - first produced cargo type - * - 04 - second produced cargo type + * @param cargo the cargo for which the suffix is requested, meaning depends on presence of flag 18 in prop 1A * @param cst the cargo suffix type (for which window is it requested). @see CargoSuffixType * @param ind the industry (NULL if in fund window) * @param ind_type the industry type @@ -134,9 +129,14 @@ static void GetCargoSuffix(uint cargo, CargoSuffixType cst, const Industry *ind, } } +enum CargoSuffixInOut { + CARGOSUFFIX_OUT = 0, + CARGOSUFFIX_IN = 1, +}; + /** * Gets all strings to display after the cargoes of industries (using callback 37) - * @param cb_offset The offset for the cargo used in cb37, 0 for accepted cargoes, 3 for produced cargoes + * @param use_input get suffixes for output cargoes or input cargoes? * @param cst the cargo suffix type (for which window is it requested). @see CargoSuffixType * @param ind the industry (NULL if in fund window) * @param ind_type the industry type @@ -145,14 +145,40 @@ static void GetCargoSuffix(uint cargo, CargoSuffixType cst, const Industry *ind, * @param suffixes is filled with the suffixes */ template -static inline void GetAllCargoSuffixes(uint cb_offset, CargoSuffixType cst, const Industry *ind, IndustryType ind_type, const IndustrySpec *indspec, const TC &cargoes, TS &suffixes) +static inline void GetAllCargoSuffixes(CargoSuffixInOut use_input, CargoSuffixType cst, const Industry *ind, IndustryType ind_type, const IndustrySpec *indspec, const TC &cargoes, TS &suffixes) { assert_compile(lengthof(cargoes) <= lengthof(suffixes)); - for (uint j = 0; j < lengthof(cargoes); j++) { - if (cargoes[j] != CT_INVALID) { - GetCargoSuffix(cb_offset + j, cst, ind, ind_type, indspec, suffixes[j]); - } else { + + if (indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED) { + /* Reworked behaviour with new many-in-many-out scheme */ + for (uint j = 0; j < lengthof(suffixes); j++) { + if (cargoes[j] != CT_INVALID) { + byte local_id = indspec->grf_prop.grffile->cargo_map[cargoes[j]]; // should we check the value for valid? + uint cargotype = local_id << 16 | use_input; + GetCargoSuffix(cargotype, cst, ind, ind_type, indspec, suffixes[j]); + } else { + suffixes[j].text[0] = '\0'; + suffixes[j].display = CSD_CARGO; + } + } + } else { + /* Compatible behaviour with old 3-in-2-out scheme */ + for (uint j = 0; j < lengthof(suffixes); j++) { suffixes[j].text[0] = '\0'; + suffixes[j].display = CSD_CARGO; + } + switch (use_input) { + case CARGOSUFFIX_OUT: + if (cargoes[0] != CT_INVALID) GetCargoSuffix(3, cst, ind, ind_type, indspec, suffixes[0]); + if (cargoes[1] != CT_INVALID) GetCargoSuffix(4, cst, ind, ind_type, indspec, suffixes[1]); + break; + case CARGOSUFFIX_IN: + if (cargoes[0] != CT_INVALID) GetCargoSuffix(0, cst, ind, ind_type, indspec, suffixes[0]); + if (cargoes[1] != CT_INVALID) GetCargoSuffix(1, cst, ind, ind_type, indspec, suffixes[1]); + if (cargoes[2] != CT_INVALID) GetCargoSuffix(2, cst, ind, ind_type, indspec, suffixes[2]); + break; + default: + NOT_REACHED(); } } } @@ -359,7 +385,7 @@ public: const IndustrySpec *indsp = GetIndustrySpec(this->index[i]); CargoSuffix cargo_suffix[lengthof(indsp->accepts_cargo)]; - GetAllCargoSuffixes(0, CST_FUND, NULL, this->index[i], indsp, indsp->accepts_cargo, cargo_suffix); + GetAllCargoSuffixes(CARGOSUFFIX_IN, CST_FUND, NULL, this->index[i], indsp, indsp->accepts_cargo, cargo_suffix); StringID str = STR_INDUSTRY_VIEW_REQUIRES_CARGO; byte p = 0; SetDParam(0, STR_JUST_NOTHING); @@ -373,7 +399,7 @@ public: d = maxdim(d, GetStringBoundingBox(str)); /* Draw the produced cargoes, if any. Otherwise, will print "Nothing". */ - GetAllCargoSuffixes(3, CST_FUND, NULL, this->index[i], indsp, indsp->produced_cargo, cargo_suffix); + GetAllCargoSuffixes(CARGOSUFFIX_OUT, CST_FUND, NULL, this->index[i], indsp, indsp->produced_cargo, cargo_suffix); str = STR_INDUSTRY_VIEW_PRODUCES_CARGO; p = 0; SetDParam(0, STR_JUST_NOTHING); @@ -478,7 +504,7 @@ public: /* Draw the accepted cargoes, if any. Otherwise, will print "Nothing". */ CargoSuffix cargo_suffix[lengthof(indsp->accepts_cargo)]; - GetAllCargoSuffixes(0, CST_FUND, NULL, this->selected_type, indsp, indsp->accepts_cargo, cargo_suffix); + GetAllCargoSuffixes(CARGOSUFFIX_IN, CST_FUND, NULL, this->selected_type, indsp, indsp->accepts_cargo, cargo_suffix); StringID str = STR_INDUSTRY_VIEW_REQUIRES_CARGO; byte p = 0; SetDParam(0, STR_JUST_NOTHING); @@ -493,7 +519,7 @@ public: y += FONT_HEIGHT_NORMAL; /* Draw the produced cargoes, if any. Otherwise, will print "Nothing". */ - GetAllCargoSuffixes(3, CST_FUND, NULL, this->selected_type, indsp, indsp->produced_cargo, cargo_suffix); + GetAllCargoSuffixes(CARGOSUFFIX_OUT, CST_FUND, NULL, this->selected_type, indsp, indsp->produced_cargo, cargo_suffix); str = STR_INDUSTRY_VIEW_PRODUCES_CARGO; p = 0; SetDParam(0, STR_JUST_NOTHING); @@ -771,7 +797,7 @@ public: } CargoSuffix cargo_suffix[lengthof(i->accepts_cargo)]; - GetAllCargoSuffixes(0, CST_VIEW, i, i->type, ind, i->accepts_cargo, cargo_suffix); + GetAllCargoSuffixes(CARGOSUFFIX_IN, CST_VIEW, i, i->type, ind, i->accepts_cargo, cargo_suffix); bool stockpiling = HasBit(ind->callback_mask, CBM_IND_PRODUCTION_CARGO_ARRIVAL) || HasBit(ind->callback_mask, CBM_IND_PRODUCTION_256_TICKS); uint left_side = left + WD_FRAMERECT_LEFT * 4; // Indent accepted cargoes. @@ -810,7 +836,7 @@ public: y += FONT_HEIGHT_NORMAL; } - GetAllCargoSuffixes(3, CST_VIEW, i, i->type, ind, i->produced_cargo, cargo_suffix); + GetAllCargoSuffixes(CARGOSUFFIX_OUT, CST_VIEW, i, i->type, ind, i->produced_cargo, cargo_suffix); first = true; for (byte j = 0; j < lengthof(i->produced_cargo); j++) { if (i->produced_cargo[j] == CT_INVALID) continue; @@ -1262,7 +1288,7 @@ protected: SetDParam(p++, i->index); static CargoSuffix cargo_suffix[lengthof(i->produced_cargo)]; - GetAllCargoSuffixes(3, CST_DIR, i, i->type, indsp, i->produced_cargo, cargo_suffix); + GetAllCargoSuffixes(CARGOSUFFIX_OUT, CST_DIR, i, i->type, indsp, i->produced_cargo, cargo_suffix); /* Industry productions */ for (byte j = 0; j < lengthof(i->produced_cargo); j++) { diff --git a/src/industry_type.h b/src/industry_type.h index 6234f7b114..9a8a469017 100644 --- a/src/industry_type.h +++ b/src/industry_type.h @@ -37,6 +37,10 @@ static const IndustryGfx INVALID_INDUSTRYTILE = NUM_INDUSTRYTILES; ///< one a static const int INDUSTRY_COMPLETED = 3; ///< final stage of industry construction. +static const int INDUSTRY_NUM_INPUTS = 16; ///< Number of cargo types an industry can accept +static const int INDUSTRY_NUM_OUTPUTS = 16; ///< Number of cargo types an industry can produce + + void CheckIndustries(); #endif /* INDUSTRY_TYPE_H */ diff --git a/src/industrytype.h b/src/industrytype.h index da09a6d9bd..cd451fa777 100644 --- a/src/industrytype.h +++ b/src/industrytype.h @@ -80,6 +80,7 @@ enum IndustryBehaviour { INDUSTRYBEH_PRODCALLBACK_RANDOM = 1 << 15, ///< Production callback needs random bits in var 10 INDUSTRYBEH_NOBUILT_MAPCREATION = 1 << 16, ///< Do not force one instance of this type to appear on map generation INDUSTRYBEH_CANCLOSE_LASTINSTANCE = 1 << 17, ///< Allow closing down the last instance of this type + INDUSTRYBEH_CARGOTYPES_UNLIMITED = 1 << 18, ///< Allow produced/accepted cargoes callbacks to supply more than 2 and 3 types }; DECLARE_ENUM_AS_BIT_SET(IndustryBehaviour) @@ -87,6 +88,7 @@ DECLARE_ENUM_AS_BIT_SET(IndustryBehaviour) enum IndustryTileSpecialFlags { INDTILE_SPECIAL_NONE = 0, INDTILE_SPECIAL_NEXTFRAME_RANDOMBITS = 1 << 0, ///< Callback 0x26 needs random bits + INDTILE_SPECIAL_ACCEPTS_ALL_CARGO = 1 << 1, ///< Tile always accepts all cargoes the associated industry accepts }; DECLARE_ENUM_AS_BIT_SET(IndustryTileSpecialFlags) @@ -95,9 +97,6 @@ struct IndustryTileTable { IndustryGfx gfx; }; -const int INDUSTRY_NUM_INPUTS = 16; ///< Number of cargo types an industry can accept -const int INDUSTRY_NUM_OUTPUTS = 16; ///< Number of cargo types an industry can produce - /** * Defines the data structure for constructing industry. */ @@ -150,8 +149,8 @@ struct IndustrySpec { * @note A tile can at most accept 3 types of cargo, even if an industry as a whole can accept more types. */ struct IndustryTileSpec { - CargoID accepts_cargo[3]; ///< Cargo accepted by this tile - uint8 acceptance[3]; ///< Level of acceptance per cargo type + CargoID accepts_cargo[INDUSTRY_NUM_INPUTS]; ///< Cargo accepted by this tile + int8 acceptance[INDUSTRY_NUM_INPUTS]; ///< Level of acceptance per cargo type (signed, may be negative!) Slope slopes_refused; ///< slope pattern on which this tile cannot be built byte anim_production; ///< Animation frame to start when goods are produced byte anim_next; ///< Next frame in an animation diff --git a/src/lang/english.txt b/src/lang/english.txt index d33afbfaa5..cb04a5cbd9 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2970,6 +2970,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Read past end o STR_NEWGRF_ERROR_GRM_FAILED :Requested GRF resources not available (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:RAW_STRING} was disabled by {2:RAW_STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Invalid/unknown sprite layout format (sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Too many elements in property value list (sprite {3:NUM}, property {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Invalid industry production callback (sprite {3:NUM}, "{1:RAW_STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Caution! diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 93b28a1bcb..57dcb41ca5 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -3083,6 +3083,10 @@ static ChangeInfoResult IgnoreIndustryTileProperty(int prop, ByteReader *buf) buf->ReadWord(); break; + case 0x13: + buf->Skip(buf->ReadByte() * 2); + break; + default: ret = CIR_UNKNOWN; break; @@ -3172,7 +3176,7 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr case 0x0C: { uint16 acctp = buf->ReadWord(); tsp->accepts_cargo[prop - 0x0A] = GetCargoTranslation(GB(acctp, 0, 8), _cur.grffile); - tsp->acceptance[prop - 0x0A] = GB(acctp, 8, 8); + tsp->acceptance[prop - 0x0A] = Clamp(GB(acctp, 8, 8), 0, 16); break; } @@ -3201,6 +3205,26 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr tsp->special_flags = (IndustryTileSpecialFlags)buf->ReadByte(); break; + case 0x13: { // variable length cargo acceptance + byte num_cargoes = buf->ReadByte(); + if (num_cargoes > lengthof(tsp->acceptance)) { + GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); + error->param_value[1] = prop; + return CIR_DISABLED; + } + for (uint i = 0; i < lengthof(tsp->acceptance); i++) { + if (i < num_cargoes) { + tsp->accepts_cargo[i] = GetCargoTranslation(buf->ReadByte(), _cur.grffile); + /* Tile acceptance can be negative to counteract the INDTILE_SPECIAL_ACCEPTS_ALL_CARGO flag */ + tsp->acceptance[i] = (int8)buf->ReadByte(); + } else { + tsp->accepts_cargo[i] = CT_INVALID; + tsp->acceptance[i] = 0; + } + } + break; + } + default: ret = CIR_UNKNOWN; break; @@ -3280,11 +3304,17 @@ static ChangeInfoResult IgnoreIndustryProperty(int prop, ByteReader *buf) for (byte j = 0; j < 3; j++) buf->ReadByte(); break; - case 0x15: { - byte number_of_sounds = buf->ReadByte(); - for (uint8 j = 0; j < number_of_sounds; j++) { - buf->ReadByte(); - } + case 0x15: + case 0x25: + case 0x26: + case 0x27: + buf->Skip(buf->ReadByte()); + break; + + case 0x28: { + int num_inputs = buf->ReadByte(); + int num_outputs = buf->ReadByte(); + buf->Skip(num_inputs * num_outputs * 2); break; } @@ -3642,6 +3672,77 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, break; } + case 0x25: { // variable length produced cargoes + byte num_cargoes = buf->ReadByte(); + if (num_cargoes > lengthof(indsp->produced_cargo)) { + GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); + error->param_value[1] = prop; + return CIR_DISABLED; + } + for (uint i = 0; i < lengthof(indsp->produced_cargo); i++) { + if (i < num_cargoes) { + CargoID cargo = GetCargoTranslation(buf->ReadByte(), _cur.grffile); + indsp->produced_cargo[i] = cargo; + } else { + indsp->produced_cargo[i] = CT_INVALID; + } + } + break; + } + + case 0x26: { // variable length accepted cargoes + byte num_cargoes = buf->ReadByte(); + if (num_cargoes > lengthof(indsp->accepts_cargo)) { + GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); + error->param_value[1] = prop; + return CIR_DISABLED; + } + for (uint i = 0; i < lengthof(indsp->accepts_cargo); i++) { + if (i < num_cargoes) { + CargoID cargo = GetCargoTranslation(buf->ReadByte(), _cur.grffile); + indsp->accepts_cargo[i] = cargo; + } else { + indsp->accepts_cargo[i] = CT_INVALID; + } + } + break; + } + + case 0x27: { // variable length production rates + byte num_cargoes = buf->ReadByte(); + if (num_cargoes > lengthof(indsp->production_rate)) { + GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); + error->param_value[1] = prop; + return CIR_DISABLED; + } + for (uint i = 0; i < lengthof(indsp->production_rate); i++) { + if (i < num_cargoes) { + indsp->production_rate[i] = buf->ReadByte(); + } else { + indsp->production_rate[i] = 0; + } + } + break; + } + + case 0x28: { // variable size input/output production multiplier table + byte num_inputs = buf->ReadByte(); + byte num_outputs = buf->ReadByte(); + if (num_inputs > lengthof(indsp->accepts_cargo) || num_outputs > lengthof(indsp->produced_cargo)) { + GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); + error->param_value[1] = prop; + return CIR_DISABLED; + } + for (uint i = 0; i < lengthof(indsp->accepts_cargo); i++) { + for (uint j = 0; j < lengthof(indsp->produced_cargo); j++) { + uint16 mult = 0; + if (i < num_inputs && j < num_outputs) mult = buf->ReadWord(); + indsp->input_cargo_multiplier[i][j] = mult; + } + } + break; + } + default: ret = CIR_UNKNOWN; break; @@ -4839,7 +4940,7 @@ static void NewSpriteGroup(ByteReader *buf) } case GSF_INDUSTRIES: { - if (type > 1) { + if (type > 2) { grfmsg(1, "NewSpriteGroup: Unsupported industry production version %d, skipping", type); break; } @@ -4849,21 +4950,63 @@ static void NewSpriteGroup(ByteReader *buf) act_group = group; group->version = type; if (type == 0) { + group->num_input = 3; for (uint i = 0; i < 3; i++) { group->subtract_input[i] = (int16)buf->ReadWord(); // signed } + group->num_output = 2; for (uint i = 0; i < 2; i++) { group->add_output[i] = buf->ReadWord(); // unsigned } group->again = buf->ReadByte(); - } else { + } else if (type == 1) { + group->num_input = 3; for (uint i = 0; i < 3; i++) { group->subtract_input[i] = buf->ReadByte(); } + group->num_output = 2; for (uint i = 0; i < 2; i++) { group->add_output[i] = buf->ReadByte(); } group->again = buf->ReadByte(); + } else if (type == 2) { + group->num_input = buf->ReadByte(); + if (group->num_input > lengthof(group->subtract_input)) { + GRFError *error = DisableGrf(STR_NEWGRF_ERROR_INDPROD_CALLBACK); + error->data = stredup("too many inputs (max 16)"); + return; + } + for (uint i = 0; i < group->num_input; i++) { + byte rawcargo = buf->ReadByte(); + CargoID cargo = GetCargoTranslation(rawcargo, _cur.grffile); + if (std::find(group->cargo_input, group->cargo_input + i, cargo) != group->cargo_input + i) { + GRFError *error = DisableGrf(STR_NEWGRF_ERROR_INDPROD_CALLBACK); + error->data = stredup("duplicate input cargo"); + return; + } + group->cargo_input[i] = cargo; + group->subtract_input[i] = buf->ReadByte(); + } + group->num_output = buf->ReadByte(); + if (group->num_output > lengthof(group->add_output)) { + GRFError *error = DisableGrf(STR_NEWGRF_ERROR_INDPROD_CALLBACK); + error->data = stredup("too many outputs (max 16)"); + return; + } + for (uint i = 0; i < group->num_output; i++) { + byte rawcargo = buf->ReadByte(); + CargoID cargo = GetCargoTranslation(rawcargo, _cur.grffile); + if (std::find(group->cargo_output, group->cargo_output + i, cargo) != group->cargo_output + i) { + GRFError *error = DisableGrf(STR_NEWGRF_ERROR_INDPROD_CALLBACK); + error->data = stredup("duplicate output cargo"); + return; + } + group->cargo_output[i] = cargo; + group->add_output[i] = buf->ReadByte(); + } + group->again = buf->ReadByte(); + } else { + NOT_REACHED(); } break; } diff --git a/src/newgrf_industries.cpp b/src/newgrf_industries.cpp index c3ddda79aa..de388c0234 100644 --- a/src/newgrf_industries.cpp +++ b/src/newgrf_industries.cpp @@ -304,6 +304,33 @@ static uint32 GetCountAndDistanceOfClosestInstance(byte param_setID, byte layout return GetCountAndDistanceOfClosestInstance(parameter, layout_filter, town_filter, this->industry); } + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: { + CargoID cargo = GetCargoTranslation(parameter, this->ro.grffile); + int index = this->industry->GetCargoProducedIndex(cargo); + if (index < 0) return 0; // invalid cargo + if (variable == 0x69) return this->industry->produced_cargo_waiting[index]; + if (variable == 0x6A) return this->industry->this_month_production[index]; + if (variable == 0x6B) return this->industry->this_month_transported[index]; + if (variable == 0x6C) return this->industry->last_month_production[index]; + if (variable == 0x6D) return this->industry->last_month_transported[index]; + NOT_REACHED(); + } + + + case 0x6E: + case 0x6F: { + CargoID cargo = GetCargoTranslation(parameter, this->ro.grffile); + int index = this->industry->GetCargoAcceptedIndex(cargo); + if (index < 0) return 0; // invalid cargo + if (variable == 0x6E) return this->industry->last_cargo_accepted_at[index]; + if (variable == 0x6F) return this->industry->incoming_cargo_waiting[index]; + NOT_REACHED(); + } + /* Get a variable from the persistent storage */ case 0x7C: return (this->industry->psa != NULL) ? this->industry->psa->GetValue(parameter) : 0; @@ -364,7 +391,10 @@ static uint32 GetCountAndDistanceOfClosestInstance(byte param_setID, byte layout case 0xB0: return Clamp(this->industry->construction_date - DAYS_TILL_ORIGINAL_BASE_YEAR, 0, 65535); // Date when built since 1920 (in days) case 0xB3: return this->industry->construction_type; // Construction type - case 0xB4: return Clamp(this->industry->last_cargo_accepted_at - DAYS_TILL_ORIGINAL_BASE_YEAR, 0, 65535); // Date last cargo accepted since 1920 (in days) + case 0xB4: { + Date *latest = std::max_element(this->industry->last_cargo_accepted_at, endof(this->industry->last_cargo_accepted_at)); + return Clamp((*latest) - DAYS_TILL_ORIGINAL_BASE_YEAR, 0, 65535); // Date last cargo accepted since 1920 (in days) + } } DEBUG(grf, 1, "Unhandled industry variable 0x%X", variable); @@ -575,13 +605,28 @@ void IndustryProductionCallback(Industry *ind, int reason) if (tgroup == NULL || tgroup->type != SGT_INDUSTRY_PRODUCTION) break; const IndustryProductionSpriteGroup *group = (const IndustryProductionSpriteGroup *)tgroup; - bool deref = (group->version == 1); + bool deref = (group->version >= 1); - for (uint i = 0; i < 3; i++) { - ind->incoming_cargo_waiting[i] = Clamp(ind->incoming_cargo_waiting[i] - DerefIndProd(group->subtract_input[i], deref) * multiplier, 0, 0xFFFF); - } - for (uint i = 0; i < 2; i++) { - ind->produced_cargo_waiting[i] = Clamp(ind->produced_cargo_waiting[i] + max(DerefIndProd(group->add_output[i], deref), 0) * multiplier, 0, 0xFFFF); + if (group->version < 2) { + /* Callback parameters map directly to industry cargo slot indices */ + for (uint i = 0; i < group->num_input; i++) { + ind->incoming_cargo_waiting[i] = Clamp(ind->incoming_cargo_waiting[i] - DerefIndProd(group->subtract_input[i], deref) * multiplier, 0, 0xFFFF); + } + for (uint i = 0; i < group->num_output; i++) { + ind->produced_cargo_waiting[i] = Clamp(ind->produced_cargo_waiting[i] + max(DerefIndProd(group->add_output[i], deref), 0) * multiplier, 0, 0xFFFF); + } + } else { + /* Callback receives list of cargos to apply for, which need to have their cargo slots in industry looked up */ + for (uint i = 0; i < group->num_input; i++) { + int cargo_index = ind->GetCargoAcceptedIndex(group->cargo_input[i]); + if (cargo_index < 0) continue; + ind->incoming_cargo_waiting[cargo_index] = Clamp(ind->incoming_cargo_waiting[cargo_index] - DerefIndProd(group->subtract_input[i], deref) * multiplier, 0, 0xFFFF); + } + for (uint i = 0; i < group->num_output; i++) { + int cargo_index = ind->GetCargoProducedIndex(group->cargo_output[i]); + if (cargo_index < 0) continue; + ind->produced_cargo_waiting[cargo_index] = Clamp(ind->produced_cargo_waiting[cargo_index] + max(DerefIndProd(group->add_output[i], deref), 0) * multiplier, 0, 0xFFFF); + } } int32 again = DerefIndProd(group->again, deref); @@ -602,12 +647,7 @@ void IndustryProductionCallback(Industry *ind, int reason) */ bool IndustryTemporarilyRefusesCargo(Industry *ind, CargoID cargo_type) { - assert( - cargo_type == ind->accepts_cargo[0] || cargo_type == ind->accepts_cargo[1] || cargo_type == ind->accepts_cargo[2] || cargo_type == ind->accepts_cargo[3] || - cargo_type == ind->accepts_cargo[4] || cargo_type == ind->accepts_cargo[5] || cargo_type == ind->accepts_cargo[6] || cargo_type == ind->accepts_cargo[7] || - cargo_type == ind->accepts_cargo[8] || cargo_type == ind->accepts_cargo[9] || cargo_type == ind->accepts_cargo[10] || cargo_type == ind->accepts_cargo[11] || - cargo_type == ind->accepts_cargo[12] || cargo_type == ind->accepts_cargo[13] || cargo_type == ind->accepts_cargo[14] || cargo_type == ind->accepts_cargo[15] - ); + assert(std::find(ind->accepts_cargo, endof(ind->accepts_cargo), cargo_type) != endof(ind->accepts_cargo)); const IndustrySpec *indspec = GetIndustrySpec(ind->type); if (HasBit(indspec->callback_mask, CBM_IND_REFUSE_CARGO)) { diff --git a/src/newgrf_spritegroup.h b/src/newgrf_spritegroup.h index 6adf7c2ac8..6f038fd138 100644 --- a/src/newgrf_spritegroup.h +++ b/src/newgrf_spritegroup.h @@ -15,6 +15,7 @@ #include "town_type.h" #include "engine_type.h" #include "house_type.h" +#include "industry_type.h" #include "newgrf_callbacks.h" #include "newgrf_generic.h" @@ -277,9 +278,14 @@ struct IndustryProductionSpriteGroup : SpriteGroup { IndustryProductionSpriteGroup() : SpriteGroup(SGT_INDUSTRY_PRODUCTION) {} uint8 version; - int16 subtract_input[3]; // signed - uint16 add_output[2]; // unsigned + uint8 num_input; ///< How many subtract_input values are valid + int16 subtract_input[INDUSTRY_NUM_INPUTS]; ///< Take this much of the input cargo (can be negative, is indirect in cb version 1+) + CargoID cargo_input[INDUSTRY_NUM_INPUTS]; ///< Which input cargoes to take from (only cb version 2) + uint8 num_output; ///< How many add_output values are valid + uint16 add_output[INDUSTRY_NUM_OUTPUTS]; ///< Add this much output cargo when successful (unsigned, is indirect in cb version 1+) + CargoID cargo_output[INDUSTRY_NUM_OUTPUTS]; ///< Which output cargoes to add to (only cb version 2) uint8 again; + }; /** diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 1529aca2bc..077f86bf62 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -3033,6 +3033,15 @@ bool AfterLoadGame() i->accepts_cargo[ci] = CT_INVALID; i->incoming_cargo_waiting[ci] = 0; } + /* Make sure last_cargo_accepted_at is copied to elements for every valid input cargo. + * The loading routine should put the original singular value into the first array element. */ + for (size_t ci = 0; ci < lengthof(i->accepts_cargo); ci++) { + if (i->accepts_cargo[ci] != CT_INVALID) { + i->last_cargo_accepted_at[ci] = i->last_cargo_accepted_at[0]; + } else { + i->last_cargo_accepted_at[ci] = 0; + } + } } } diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp index 9727e4e512..a9c84e62ab 100644 --- a/src/saveload/industry_sl.cpp +++ b/src/saveload/industry_sl.cpp @@ -61,7 +61,8 @@ static const SaveLoad _industry_desc[] = { SLE_CONDVAR(Industry, founder, SLE_UINT8, 70, SL_MAX_VERSION), SLE_CONDVAR(Industry, construction_date, SLE_INT32, 70, SL_MAX_VERSION), SLE_CONDVAR(Industry, construction_type, SLE_UINT8, 70, SL_MAX_VERSION), - SLE_CONDVAR(Industry, last_cargo_accepted_at, SLE_INT32, 70, SL_MAX_VERSION), + SLE_CONDVAR(Industry, last_cargo_accepted_at[0], SLE_INT32, 70, 201), + SLE_CONDARR(Industry, last_cargo_accepted_at, SLE_INT32, 16, 202, SL_MAX_VERSION), SLE_CONDVAR(Industry, selected_layout, SLE_UINT8, 73, SL_MAX_VERSION), SLEG_CONDARR(_old_ind_persistent_storage.storage, SLE_UINT32, 16, 76, 160), diff --git a/src/subsidy.cpp b/src/subsidy.cpp index fa327efa92..d1fda0f0ac 100644 --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -384,12 +384,12 @@ bool FindSubsidyIndustryCargoRoute() /* Randomize cargo type */ int num_cargos = 0; - for (size_t ci = 0; ci < lengthof(src_ind->produced_cargo); ci++) { - if (src_ind->produced_cargo[ci] != CT_INVALID) num_cargos++; + uint cargo_index; + for (cargo_index = 0; cargo_index < lengthof(src_ind->produced_cargo); cargo_index++) { + if (src_ind->produced_cargo[cargo_index] != CT_INVALID) num_cargos++; } if (num_cargos == 0) return false; // industry produces nothing int cargo_num = RandomRange(num_cargos) + 1; - int cargo_index; for (cargo_index = 0; cargo_index < lengthof(src_ind->produced_cargo); cargo_index++) { if (src_ind->produced_cargo[cargo_index] != CT_INVALID) cargo_num--; if (cargo_num == 0) break; diff --git a/src/table/newgrf_debug_data.h b/src/table/newgrf_debug_data.h index a6aa716166..19b411fed0 100644 --- a/src/table/newgrf_debug_data.h +++ b/src/table/newgrf_debug_data.h @@ -272,11 +272,38 @@ static const NIFeature _nif_industrytile = { /*** NewGRF industries ***/ static const NIProperty _nip_industries[] = { - NIP(0x10, Industry, produced_cargo[0], NIT_CARGO, "produced cargo 0"), - NIP(0x10, Industry, produced_cargo[1], NIT_CARGO, "produced cargo 1"), - NIP(0x11, Industry, accepts_cargo[0], NIT_CARGO, "accepted cargo 0"), - NIP(0x11, Industry, accepts_cargo[1], NIT_CARGO, "accepted cargo 1"), - NIP(0x11, Industry, accepts_cargo[2], NIT_CARGO, "accepted cargo 2"), + NIP(0x25, Industry, produced_cargo[ 0], NIT_CARGO, "produced cargo 0"), + NIP(0x25, Industry, produced_cargo[ 1], NIT_CARGO, "produced cargo 1"), + NIP(0x25, Industry, produced_cargo[ 2], NIT_CARGO, "produced cargo 2"), + NIP(0x25, Industry, produced_cargo[ 3], NIT_CARGO, "produced cargo 3"), + NIP(0x25, Industry, produced_cargo[ 4], NIT_CARGO, "produced cargo 4"), + NIP(0x25, Industry, produced_cargo[ 5], NIT_CARGO, "produced cargo 5"), + NIP(0x25, Industry, produced_cargo[ 6], NIT_CARGO, "produced cargo 6"), + NIP(0x25, Industry, produced_cargo[ 7], NIT_CARGO, "produced cargo 7"), + NIP(0x25, Industry, produced_cargo[ 8], NIT_CARGO, "produced cargo 8"), + NIP(0x25, Industry, produced_cargo[ 9], NIT_CARGO, "produced cargo 9"), + NIP(0x25, Industry, produced_cargo[10], NIT_CARGO, "produced cargo 10"), + NIP(0x25, Industry, produced_cargo[11], NIT_CARGO, "produced cargo 11"), + NIP(0x25, Industry, produced_cargo[12], NIT_CARGO, "produced cargo 12"), + NIP(0x25, Industry, produced_cargo[13], NIT_CARGO, "produced cargo 13"), + NIP(0x25, Industry, produced_cargo[14], NIT_CARGO, "produced cargo 14"), + NIP(0x25, Industry, produced_cargo[15], NIT_CARGO, "produced cargo 15"), + NIP(0x26, Industry, accepts_cargo[ 0], NIT_CARGO, "accepted cargo 0"), + NIP(0x26, Industry, accepts_cargo[ 1], NIT_CARGO, "accepted cargo 1"), + NIP(0x26, Industry, accepts_cargo[ 2], NIT_CARGO, "accepted cargo 2"), + NIP(0x26, Industry, accepts_cargo[ 3], NIT_CARGO, "accepted cargo 3"), + NIP(0x26, Industry, accepts_cargo[ 4], NIT_CARGO, "accepted cargo 4"), + NIP(0x26, Industry, accepts_cargo[ 5], NIT_CARGO, "accepted cargo 5"), + NIP(0x26, Industry, accepts_cargo[ 6], NIT_CARGO, "accepted cargo 6"), + NIP(0x26, Industry, accepts_cargo[ 7], NIT_CARGO, "accepted cargo 7"), + NIP(0x26, Industry, accepts_cargo[ 8], NIT_CARGO, "accepted cargo 8"), + NIP(0x26, Industry, accepts_cargo[ 9], NIT_CARGO, "accepted cargo 9"), + NIP(0x26, Industry, accepts_cargo[10], NIT_CARGO, "accepted cargo 10"), + NIP(0x26, Industry, accepts_cargo[11], NIT_CARGO, "accepted cargo 11"), + NIP(0x26, Industry, accepts_cargo[12], NIT_CARGO, "accepted cargo 12"), + NIP(0x26, Industry, accepts_cargo[13], NIT_CARGO, "accepted cargo 13"), + NIP(0x26, Industry, accepts_cargo[14], NIT_CARGO, "accepted cargo 14"), + NIP(0x26, Industry, accepts_cargo[15], NIT_CARGO, "accepted cargo 15"), NIP_END() }; From 9b560eaa518124398129f19b58735c73f9677ce0 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Thu, 26 Jul 2018 23:09:35 +0200 Subject: [PATCH 069/622] Fix: Industry chain window layout no more unnecessarily large when the number of cargoes in/out isn't large either --- src/cargo_type.h | 5 ++++ src/industry_gui.cpp | 59 +++++++++++++++++++++++++------------------- 2 files changed, 38 insertions(+), 26 deletions(-) diff --git a/src/cargo_type.h b/src/cargo_type.h index 1eca0edff6..79d1c84f46 100644 --- a/src/cargo_type.h +++ b/src/cargo_type.h @@ -70,6 +70,11 @@ enum CargoType { CT_INVALID = 0xFF, ///< Invalid cargo type. }; +/** Test whether cargo type is not CT_INVALID */ +inline bool IsCargoTypeValid(CargoType t) { return t != CT_INVALID; } +/** Test whether cargo type is not CT_INVALID */ +inline bool IsCargoIDValid(CargoID t) { return t != CT_INVALID; } + typedef uint64 CargoTypes; static const CargoTypes ALL_CARGOTYPES = (CargoTypes)UINT64_MAX; diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index d54fb41c1c..98c9edda21 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1555,7 +1555,6 @@ struct CargoesField { static const int HOR_CARGO_BORDER_SPACE; static const int CARGO_STUB_WIDTH; static const int HOR_CARGO_WIDTH, HOR_CARGO_SPACE; - static const int CARGO_FIELD_WIDTH; static const int VERT_CARGO_SPACE, VERT_CARGO_EDGE; static const int BLOB_DISTANCE, BLOB_WIDTH, BLOB_HEIGHT; @@ -1563,7 +1562,9 @@ struct CargoesField { static const int CARGO_LINE_COLOUR; static int small_height, normal_height; + static int cargo_field_width; static int industry_width; + static uint max_cargoes; CargoesFieldType type; ///< Type of field. union { @@ -1716,13 +1717,12 @@ struct CargoesField { int GetCargoBase(int xpos) const { assert(this->type == CFT_CARGO); + int n = this->u.cargo.num_cargoes; - switch (this->u.cargo.num_cargoes) { - case 0: return xpos + CARGO_FIELD_WIDTH / 2; - case 1: return xpos + CARGO_FIELD_WIDTH / 2 - HOR_CARGO_WIDTH / 2; - case 2: return xpos + CARGO_FIELD_WIDTH / 2 - HOR_CARGO_WIDTH - HOR_CARGO_SPACE / 2; - case 3: return xpos + CARGO_FIELD_WIDTH / 2 - HOR_CARGO_WIDTH - HOR_CARGO_SPACE - HOR_CARGO_WIDTH / 2; - default: NOT_REACHED(); + if (n % 2 == 0) { + return xpos + cargo_field_width / 2 - (HOR_CARGO_WIDTH + HOR_CARGO_SPACE / 2) * (n / 2); + } else { + return xpos + cargo_field_width / 2 - HOR_CARGO_WIDTH / 2 - (HOR_CARGO_WIDTH + HOR_CARGO_SPACE) * (n / 2); } } @@ -1781,7 +1781,7 @@ struct CargoesField { other_left = this->u.industry.other_accepted; } ypos1 += VERT_CARGO_EDGE; - for (uint i = 0; i < MAX_CARGOES; i++) { + for (uint i = 0; i < CargoesField::max_cargoes; i++) { if (other_right[i] != INVALID_CARGO) { const CargoSpec *csp = CargoSpec::Get(other_right[i]); int xp = xpos + industry_width + CARGO_STUB_WIDTH; @@ -1846,7 +1846,7 @@ struct CargoesField { DrawHorConnection(lf + dx - 1, lf + HOR_CARGO_SPACE - 1, ypos, csp); dx = 1; } - DrawHorConnection(cargo_base + col * HOR_CARGO_SPACE + (col + 1) * HOR_CARGO_WIDTH - 1 + dx, xpos + CARGO_FIELD_WIDTH - 1, ypos, csp); + DrawHorConnection(cargo_base + col * HOR_CARGO_SPACE + (col + 1) * HOR_CARGO_WIDTH - 1 + dx, xpos + CargoesField::cargo_field_width - 1, ypos, csp); } ypos += FONT_HEIGHT_NORMAL + VERT_CARGO_SPACE; } @@ -1968,9 +1968,11 @@ private: assert_compile(MAX_CARGOES >= cpp_lengthof(IndustrySpec, produced_cargo)); assert_compile(MAX_CARGOES >= cpp_lengthof(IndustrySpec, accepts_cargo)); -int CargoesField::small_height; ///< Height of the header row. -int CargoesField::normal_height; ///< Height of the non-header rows. -int CargoesField::industry_width; ///< Width of an industry field. +int CargoesField::small_height; ///< Height of the header row. +int CargoesField::normal_height; ///< Height of the non-header rows. +int CargoesField::industry_width; ///< Width of an industry field. +int CargoesField::cargo_field_width; ///< Width of a cargo field. +uint CargoesField::max_cargoes; ///< Largest number of cargoes actually on any industry. const int CargoesField::VERT_INTER_INDUSTRY_SPACE = 6; ///< Amount of space between two industries in a column. const int CargoesField::HOR_CARGO_BORDER_SPACE = 15; ///< Amount of space between the left/right edge of a #CFT_CARGO field, and the left/right most vertical cargo. @@ -1984,9 +1986,6 @@ const int CargoesField::BLOB_DISTANCE = 5; ///< Distance of the industry legend const int CargoesField::BLOB_WIDTH = 12; ///< Width of the industry legend colour, including border. const int CargoesField::BLOB_HEIGHT = 9; ///< Height of the industry legend colour, including border -/** Width of a #CFT_CARGO field. */ -const int CargoesField::CARGO_FIELD_WIDTH = HOR_CARGO_BORDER_SPACE * 2 + HOR_CARGO_WIDTH * MAX_CARGOES + HOR_CARGO_SPACE * (MAX_CARGOES - 1); - const int CargoesField::INDUSTRY_LINE_COLOUR = PC_YELLOW; ///< Line colour of the industry type box. const int CargoesField::CARGO_LINE_COLOUR = PC_YELLOW; ///< Line colour around the cargo. @@ -2011,13 +2010,14 @@ struct CargoesRow { int other_count = 0; const IndustrySpec *indsp = GetIndustrySpec(ind_fld->u.industry.ind_type); - for (uint i = 0; i < lengthof(indsp->produced_cargo); i++) { + assert(CargoesField::max_cargoes <= lengthof(indsp->produced_cargo)); + for (uint i = 0; i < CargoesField::max_cargoes; i++) { int col = cargo_fld->ConnectCargo(indsp->produced_cargo[i], true); if (col < 0) others[other_count++] = indsp->produced_cargo[i]; } /* Allocate other cargoes in the empty holes of the horizontal cargo connections. */ - for (uint i = 0; i < MAX_CARGOES && other_count > 0; i++) { + for (uint i = 0; i < CargoesField::max_cargoes && other_count > 0; i++) { if (cargo_fld->u.cargo.supp_cargoes[i] == INVALID_CARGO) ind_fld->u.industry.other_produced[i] = others[--other_count]; } } else { @@ -2068,13 +2068,14 @@ struct CargoesRow { int other_count = 0; const IndustrySpec *indsp = GetIndustrySpec(ind_fld->u.industry.ind_type); - for (uint i = 0; i < lengthof(indsp->accepts_cargo); i++) { + assert(CargoesField::max_cargoes <= lengthof(indsp->accepts_cargo)); + for (uint i = 0; i < CargoesField::max_cargoes; i++) { int col = cargo_fld->ConnectCargo(indsp->accepts_cargo[i], false); if (col < 0) others[other_count++] = indsp->accepts_cargo[i]; } /* Allocate other cargoes in the empty holes of the horizontal cargo connections. */ - for (uint i = 0; i < MAX_CARGOES && other_count > 0; i++) { + for (uint i = 0; i < CargoesField::max_cargoes && other_count > 0; i++) { if (cargo_fld->u.cargo.cust_cargoes[i] == INVALID_CARGO) ind_fld->u.industry.other_accepted[i] = others[--other_count]; } } else { @@ -2157,10 +2158,13 @@ struct IndustryCargoesWindow : public Window { /* Decide about the size of the box holding the text of an industry type. */ this->ind_textsize.width = 0; this->ind_textsize.height = 0; + CargoesField::max_cargoes = 0; for (IndustryType it = 0; it < NUM_INDUSTRYTYPES; it++) { const IndustrySpec *indsp = GetIndustrySpec(it); if (!indsp->enabled) continue; this->ind_textsize = maxdim(this->ind_textsize, GetStringBoundingBox(indsp->name)); + CargoesField::max_cargoes = max(CargoesField::max_cargoes, std::count_if(indsp->accepts_cargo, endof(indsp->accepts_cargo), IsCargoIDValid)); + CargoesField::max_cargoes = max(CargoesField::max_cargoes, std::count_if(indsp->produced_cargo, endof(indsp->produced_cargo), IsCargoIDValid)); } d.width = max(d.width, this->ind_textsize.width); d.height = this->ind_textsize.height; @@ -2179,18 +2183,21 @@ struct IndustryCargoesWindow : public Window { d.width += 2 * HOR_TEXT_PADDING; /* Ensure the height is enough for the industry type text, for the horizontal connections, and for the cargo labels. */ - uint min_ind_height = CargoesField::VERT_CARGO_EDGE * 2 + MAX_CARGOES * FONT_HEIGHT_NORMAL + (MAX_CARGOES - 1) * CargoesField::VERT_CARGO_SPACE; + uint min_ind_height = CargoesField::VERT_CARGO_EDGE * 2 + CargoesField::max_cargoes * FONT_HEIGHT_NORMAL + (CargoesField::max_cargoes - 1) * CargoesField::VERT_CARGO_SPACE; d.height = max(d.height + 2 * VERT_TEXT_PADDING, min_ind_height); CargoesField::industry_width = d.width; CargoesField::normal_height = d.height + CargoesField::VERT_INTER_INDUSTRY_SPACE; + + /* Width of a #CFT_CARGO field. */ + CargoesField::cargo_field_width = CargoesField::HOR_CARGO_BORDER_SPACE * 2 + CargoesField::HOR_CARGO_WIDTH * CargoesField::max_cargoes + CargoesField::HOR_CARGO_SPACE * (CargoesField::max_cargoes - 1); } virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) { switch (widget) { case WID_IC_PANEL: - size->width = WD_FRAMETEXT_LEFT + CargoesField::industry_width * 3 + CargoesField::CARGO_FIELD_WIDTH * 2 + WD_FRAMETEXT_RIGHT; + size->width = WD_FRAMETEXT_LEFT + CargoesField::industry_width * 3 + CargoesField::cargo_field_width * 2 + WD_FRAMETEXT_RIGHT; break; case WID_IC_IND_DROPDOWN: @@ -2551,7 +2558,7 @@ struct IndustryCargoesWindow : public Window { _cur_dpi = &tmp_dpi; int left_pos = WD_FRAMERECT_LEFT; - if (this->ind_cargo >= NUM_INDUSTRYTYPES) left_pos += (CargoesField::industry_width + CargoesField::CARGO_FIELD_WIDTH) / 2; + if (this->ind_cargo >= NUM_INDUSTRYTYPES) left_pos += (CargoesField::industry_width + CargoesField::cargo_field_width) / 2; int last_column = (this->ind_cargo < NUM_INDUSTRYTYPES) ? 4 : 2; const NWidgetBase *nwp = this->GetWidget(WID_IC_PANEL); @@ -2570,7 +2577,7 @@ struct IndustryCargoesWindow : public Window { } while (col >= 0 && col <= last_column) { this->fields[i].columns[col].Draw(xpos, vpos); - xpos += (col & 1) ? CargoesField::CARGO_FIELD_WIDTH : CargoesField::industry_width; + xpos += (col & 1) ? CargoesField::cargo_field_width : CargoesField::industry_width; col += dir; } } @@ -2602,11 +2609,11 @@ struct IndustryCargoesWindow : public Window { vpos = pt.y - vpos - row * CargoesField::normal_height; // Position in the row + 1 field row++; // rebase row to match index of this->fields. - int xpos = 2 * WD_FRAMERECT_LEFT + ((this->ind_cargo < NUM_INDUSTRYTYPES) ? 0 : (CargoesField::industry_width + CargoesField::CARGO_FIELD_WIDTH) / 2); + int xpos = 2 * WD_FRAMERECT_LEFT + ((this->ind_cargo < NUM_INDUSTRYTYPES) ? 0 : (CargoesField::industry_width + CargoesField::cargo_field_width) / 2); if (pt.x < xpos) return false; int column; for (column = 0; column <= 5; column++) { - int width = (column & 1) ? CargoesField::CARGO_FIELD_WIDTH : CargoesField::industry_width; + int width = (column & 1) ? CargoesField::cargo_field_width : CargoesField::industry_width; if (pt.x < xpos + width) break; xpos += width; } @@ -2619,7 +2626,7 @@ struct IndustryCargoesWindow : public Window { xy->y = vpos; if (_current_text_dir == TD_RTL) { fieldxy->x = num_columns - column; - xy->x = ((column & 1) ? CargoesField::CARGO_FIELD_WIDTH : CargoesField::industry_width) - xpos; + xy->x = ((column & 1) ? CargoesField::cargo_field_width : CargoesField::industry_width) - xpos; } else { fieldxy->x = column; xy->x = xpos; From ccd9d77b94031d93dd61635224ed845b18300970 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 4 Nov 2018 19:45:42 +0100 Subject: [PATCH 070/622] Update: Translations from eints italian: 2 changes by lorenzodv --- src/lang/italian.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lang/italian.txt b/src/lang/italian.txt index f456797bf8..9ad7024496 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -3000,6 +3000,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Lettura oltre l STR_NEWGRF_ERROR_GRM_FAILED :Risorsa GRF richiesta non disponibile (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} è stato disabilitato da {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formato di layout dello sprite sconosciuto o non valido (sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Troppi elementi nella lista valori di una proprietà (sprite {3:NUM}, proprietà {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Callback di produzione industria non valido (sprite {3:NUM}, "{1:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Attenzione! From 4ba73dac9599a92f5c228a156e0f2d1e22f275ea Mon Sep 17 00:00:00 2001 From: Greg-21 <34160838+Greg-21@users.noreply.github.com> Date: Tue, 6 Nov 2018 00:38:42 +0100 Subject: [PATCH 071/622] Doc: Changed several files to unificate them... (#6964) ...with those from release 1.8 branch. --- os/debian/changelog | 13 ++++++++++++- src/script/api/ai_changelog.hpp | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/os/debian/changelog b/os/debian/changelog index ce2582128c..bb57ca39e8 100644 --- a/os/debian/changelog +++ b/os/debian/changelog @@ -1,3 +1,15 @@ +openttd (1.8.0-0) unstable; urgency=low + + * New upstream release 1.8.0 + + -- OpenTTD Sun, 01 Apr 2018 14:00:00 +0200 + +openttd (1.8.0~RC1-0) unstable; urgency=low + + * New upstream release 1.8.0-RC1 + + -- OpenTTD Wed, 21 Mar 2018 21:00:00 +0100 + openttd (1.7.2-0) unstable; urgency=low * New upstream release 1.7.2 @@ -1002,4 +1014,3 @@ openttd (0.3.5-1) unstable; urgency=low * Initial Release. -- Matthijs Kooijman Fri, 24 Dec 2004 02:58:47 +0100 - diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index ecb015ed4d..03e9831a11 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -23,7 +23,7 @@ * * \b 1.8.0 * - * 1.8.0 is not yet released. The following changes are not set in stone yet. + * No changes * * \b 1.7.0 - 1.7.2 * From 16cc482d57932228036248d4c6eef530ac54571d Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 8 Nov 2018 19:45:43 +0100 Subject: [PATCH 072/622] Update: Translations from eints croatian: 2 changes by VoyagerOne --- src/lang/croatian.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 3bb0edf419..a1c9dd86d0 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -3066,6 +3066,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Pročitaj nakon STR_NEWGRF_ERROR_GRM_FAILED :Zatraženi GRF resursi nisu dostupni (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} je isključen od strane {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Pogrešan/nepoznat format raspored sprite-a (sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Previše elemenata na listi postavki varijabli (sprite {3:NUM}, postavka {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Pogrešna callback funkcija za industrijsku proizvodnju (sprite {3:NUM}, "{1:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Oprez! From 6950ea0ba73be1b5af8e244ff4fdfe246a911a6f Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 12 Nov 2018 19:45:40 +0100 Subject: [PATCH 073/622] Update: Translations from eints indonesian: 18 changes by UseYourIllusion --- src/lang/indonesian.txt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index c715b2043e..b740019a15 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -650,6 +650,7 @@ STR_MUSIC_RULER_MARKER :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Tidak ada musik yang tersedia STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Track STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Titel @@ -810,6 +811,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Pimpinan) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} menjadi sponsor pembangunan kota baru {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Kota baru yang bernama {TOWN} baru dibuatkan! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Ada pembangunan {STRING} baru di dekat {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}{STRING} baru sedang ditanam di dekat {TOWN}! @@ -2685,9 +2687,20 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Tim OpenTTD # Framerate display window +STR_FRAMERATE_CURRENT :{WHITE}Sekarang +STR_FRAMERATE_DATA_POINTS :{WHITE}Data tergantung oleh ukuran {COMMA} +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GL_TRAINS :{WHITE} Titik kereta: +STR_FRAMERATE_GL_SHIPS :{WHITE} Titik kapal: +STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Viewport dunia: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Titik kendaraan +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Titik pesawat +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Titik dunia ############ End of leave-in-this-order @@ -3288,6 +3301,7 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Membutuh STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Membutuhkan: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} ############ range for requires ends +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Membutuhkan: ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Menghasilkan: {YELLOW}{STRING}{STRING} @@ -3357,6 +3371,7 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Jual semua STR_GROUP_RENAME_CAPTION :{BLACK}Ubah nama kelompok STR_GROUP_PROFIT_THIS_YEAR :Keuntungan tahun ini: +STR_GROUP_PROFIT_LAST_YEAR :Keuntungan tahun lalu: # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Kereta Baru @@ -3389,6 +3404,7 @@ STR_PURCHASE_INFO_ALL_TYPES :Semua jenis kar STR_PURCHASE_INFO_ALL_BUT :Semua tapi tidak untuk {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Traksi Maks.: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Jangkauan: {GOLD}{COMMA} kotak +STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Jenis pesawat: {GOLD}{STRING} STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Daftar pilihan kereta - klik pada kereta untuk menampilkan informasi STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Daftar pilihan kendaraan - klik pada kendaraan untuk menampilkan informasi @@ -3523,6 +3539,7 @@ STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :lokomotif magle STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Biaya: {CURRENCY_LONG} Berat: {WEIGHT_SHORT}{}Kecepatan: {VELOCITY} Daya: {POWER}{}Biaya ops.: {CURRENCY_LONG}/thn{}Kapasitas: {CARGO_LONG} STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Biaya: {CURRENCY_LONG} Berat: {WEIGHT_SHORT}{}Kecepatan: {VELOCITY} Power: {POWER} Max. T.E.: {6:FORCE}{}Biaya Operasional: {4:CURRENCY_LONG}/yr{}Kapasitas: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Biaya: {CURRENCY_LONG} Kec. Max: {VELOCITY}{}Kapasitas: {CARGO_LONG}{}Bea Berjalan: {CURRENCY_LONG}/thn +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Biaya: {CURRENCY_LONG} Kec. Max.: {VELOCITY}{}Jenis pesawat: {STRING}{}Kapasitas: {CARGO_LONG}{}Biaya operasi: {CURRENCY_LONG}/thn # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Ganti {STRING} - {STRING} @@ -4461,6 +4478,7 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Efek suara oris STR_BASESOUNDS_WIN_DESCRIPTION :Efek suara orisinil Transport Tycoon Deluxe versi Windows. STR_BASESOUNDS_NONE_DESCRIPTION :Paket efek suara tanpa suara apapun. STR_BASEMUSIC_WIN_DESCRIPTION :Musik pengiring orisinil Transport Tycoon Deluxe versi Windows. +STR_BASEMUSIC_DOS_DESCRIPTION :Musik orisinil Transport Tycoon Deluxe versi DOS. STR_BASEMUSIC_NONE_DESCRIPTION :Paket musik tanpa musik sungguhan. ##id 0x2000 From 71cda6ca1dbe749ce3609d1ec6073a6a0f18b660 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 13 Nov 2018 19:45:42 +0100 Subject: [PATCH 074/622] Update: Translations from eints spanish: 10 changes by SilverSurferZzZ --- src/lang/spanish.txt | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 3756395ced..1ba5d1ca98 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -574,7 +574,7 @@ STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Gráfico STR_GRAPH_INCOME_CAPTION :{WHITE}Gráfico de Ingresos STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Unidades de carga entregadas STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Calificaciones de actuación de empresas (tasa máxima=1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Valores de las empresas +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Valor de la empresa STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Tasas de pago por carga STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}Días en tránsito @@ -878,10 +878,10 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC # Extra view window STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vista {COMMA} -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Copiar punto de vista +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Cambiar punto de vista STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copia la localización de la vista principal a este punto de vista -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Pegar punto de vista -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Pega la localización de este punto de vista a la principal +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Cambiar vista principal +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Copia la localización de este punto de vista en la vista principal # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Opciones del juego @@ -2688,6 +2688,9 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 El equipo OpenTTD # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Fotogramas por segundo - FPS +STR_FRAMERATE_CURRENT :{WHITE}Actual +STR_FRAMERATE_AVERAGE :{WHITE}Medio ############ Leave those lines in this order!! ############ End of leave-in-this-order ############ Leave those lines in this order!! @@ -2782,7 +2785,7 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}¿Desea STR_GENERATION_PROGRESS :{WHITE}{NUM}% completado STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generación de mundo -STR_GENERATION_RIVER_GENERATION :{BLACK}Generación de Ríos +STR_GENERATION_RIVER_GENERATION :{BLACK}Generación de ríos STR_GENERATION_TREE_GENERATION :{BLACK}Generación de árboles STR_GENERATION_OBJECT_GENERATION :{BLACK}Generación de inamovibles STR_GENERATION_CLEARING_TILES :{BLACK}Generación de áreas ásperas o rocosas @@ -2978,6 +2981,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Introduc STR_TOWN_DIRECTORY_CAPTION :{WHITE}Municipios STR_TOWN_DIRECTORY_NONE :{ORANGE}- Ninguna - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Ciudad){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Nombres de los municipios - click sobre un nombre para centrar la vista principal en él. Ctrl+Click abre una ventana de visualización en dicha posición STR_TOWN_POPULATION :{BLACK}Población mundial: {COMMA} @@ -2985,6 +2989,7 @@ STR_TOWN_POPULATION :{BLACK}Poblaci STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Ciudad) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Habitantes: {ORANGE}{COMMA}{BLACK} Casas: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} último mes: {ORANGE}{COMMA}{BLACK} máx: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Carga necesaria para crecimiento del municipio: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} requeridos STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} requerido en invierno From 278a705bbbd378a4c05a795b42028ba440a8bd49 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 14 Nov 2018 19:45:40 +0100 Subject: [PATCH 075/622] Update: Translations from eints indonesian: 41 changes by UseYourIllusion --- src/lang/indonesian.txt | 49 ++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index b740019a15..f0d8efc7a8 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -671,10 +671,12 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Acak/Uru STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Tampilkan jendela pemilihan judul musik # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Program Musik - '{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Daftar rel STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Program - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Kosong +STR_PLAYLIST_CHANGE_SET :{BLACK}Gantikan set STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Hapus program saat ini (hanya Bebas 1 atau Bebas 2) STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klik pada musik track untuk menambah pada program sekarang (hanya Bebas 1 atau Bebas 2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klik pada track musik untuk menghapusnya dari program saat ini. (Bebas 1 atau Bebas 2 saja) @@ -897,7 +899,7 @@ STR_GAME_OPTIONS_CURRENCY_JPY :Yen Jepang (JPY STR_GAME_OPTIONS_CURRENCY_ATS :Shilling Austria (ATS) STR_GAME_OPTIONS_CURRENCY_BEF :Franc Belgia (BEF) STR_GAME_OPTIONS_CURRENCY_CHF :Franc Swiss (CHF) -STR_GAME_OPTIONS_CURRENCY_CZK :Koruna Czech (CZK) +STR_GAME_OPTIONS_CURRENCY_CZK :Koruna Ceko (CZK) STR_GAME_OPTIONS_CURRENCY_DEM :Deutschmark (DEM) STR_GAME_OPTIONS_CURRENCY_DKK :Krone Denmark (DKK) STR_GAME_OPTIONS_CURRENCY_ESP :Peseta Spanyol (ESP) @@ -911,7 +913,7 @@ STR_GAME_OPTIONS_CURRENCY_NLG :Dutch Guilder ( STR_GAME_OPTIONS_CURRENCY_NOK :Krone Norwegia (NOK) STR_GAME_OPTIONS_CURRENCY_PLN :Zloty Polandia (PLN) STR_GAME_OPTIONS_CURRENCY_RON :Leu Romania (RON) -STR_GAME_OPTIONS_CURRENCY_RUR :Rubles Rusia (RUR) +STR_GAME_OPTIONS_CURRENCY_RUR :Rubel Rusia (RUR) STR_GAME_OPTIONS_CURRENCY_SIT :Tolar Slovenia (SIT) STR_GAME_OPTIONS_CURRENCY_SEK :Krona Swedia (SEK) STR_GAME_OPTIONS_CURRENCY_TRY :Lira Turki (TRY) @@ -924,6 +926,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Rand Afrika Sel STR_GAME_OPTIONS_CURRENCY_CUSTOM :Atur sendiri... STR_GAME_OPTIONS_CURRENCY_GEL :Lari Georgia (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iran (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Rubel Rusia Baru (RUB) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Kendaraan jalan raya @@ -940,7 +943,7 @@ STR_GAME_OPTIONS_TOWN_NAME_FRENCH :Perancis STR_GAME_OPTIONS_TOWN_NAME_GERMAN :Jerman STR_GAME_OPTIONS_TOWN_NAME_ADDITIONAL_ENGLISH :Inggris (Tambahan) STR_GAME_OPTIONS_TOWN_NAME_LATIN_AMERICAN :Amerika-Latin -STR_GAME_OPTIONS_TOWN_NAME_SILLY :Silly +STR_GAME_OPTIONS_TOWN_NAME_SILLY :Lucu STR_GAME_OPTIONS_TOWN_NAME_SWEDISH :Swedia STR_GAME_OPTIONS_TOWN_NAME_DUTCH :Belanda STR_GAME_OPTIONS_TOWN_NAME_FINNISH :Finlandia @@ -950,7 +953,7 @@ STR_GAME_OPTIONS_TOWN_NAME_NORWEGIAN :Norwegia STR_GAME_OPTIONS_TOWN_NAME_HUNGARIAN :Hungaria STR_GAME_OPTIONS_TOWN_NAME_AUSTRIAN :Austria STR_GAME_OPTIONS_TOWN_NAME_ROMANIAN :Romania -STR_GAME_OPTIONS_TOWN_NAME_CZECH :Czechnya +STR_GAME_OPTIONS_TOWN_NAME_CZECH :Ceko STR_GAME_OPTIONS_TOWN_NAME_SWISS :Swiss STR_GAME_OPTIONS_TOWN_NAME_DANISH :Denmark STR_GAME_OPTIONS_TOWN_NAME_TURKISH :Turki @@ -1336,6 +1339,10 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Warna daratan d STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Hijau STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Hijau Gelap STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violet +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Kelakuan waktu menggerakkan peta +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Gerakan viewport memakai tombol kanan tetikus, posisi tetikus terkunci +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Gerakan peta memakai tombol kanan tetikus, posisi tetikus terkunci +STR_CONFIG_SETTING_SCROLLMODE_RMB :Gerakan peta memakai tombol kanan tetikus STR_CONFIG_SETTING_SMOOTH_SCROLLING :Pergeseran pandangan viewport secara halus: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Menyetel bagaimana tampilan utama menggeser posisi di peta kecil. Jika dinyalakan, peta akan bergeser secara halus. Jika dimatikan, peta langsung menuju tempat yang di klik STR_CONFIG_SETTING_MEASURE_TOOLTIP :Tampilkan ukuran ketika menggunakan alat pembangun: {STRING} @@ -1984,7 +1991,7 @@ STR_NETWORK_LANG_FRENCH :Perancis STR_NETWORK_LANG_BRAZILIAN :Brazil STR_NETWORK_LANG_BULGARIAN :Bulgaria STR_NETWORK_LANG_CHINESE :China -STR_NETWORK_LANG_CZECH :Czech +STR_NETWORK_LANG_CZECH :Ceko STR_NETWORK_LANG_DANISH :Denmark STR_NETWORK_LANG_DUTCH :Belanda STR_NETWORK_LANG_ESPERANTO :Esperanto @@ -1999,7 +2006,7 @@ STR_NETWORK_LANG_NORWEGIAN :Norwegia STR_NETWORK_LANG_POLISH :Polandia STR_NETWORK_LANG_PORTUGUESE :Portugis STR_NETWORK_LANG_ROMANIAN :Rumania -STR_NETWORK_LANG_RUSSIAN :Russia +STR_NETWORK_LANG_RUSSIAN :Rusia STR_NETWORK_LANG_SLOVAK :Slovakia STR_NETWORK_LANG_SLOVENIAN :Slovenia STR_NETWORK_LANG_SPANISH :Spanyol @@ -2278,6 +2285,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Legenda STR_LINKGRAPH_LEGEND_ALL :{BLACK}Semua STR_LINKGRAPH_LEGEND_NONE :{BLACK}Tidak ada STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Pilih perusahaan yang akan ditampilkan +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}tak terpakai @@ -2687,20 +2695,34 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Tim OpenTTD # Framerate display window +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Rata simulasi: {STRING} +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Beberapa cepat permainan lagi berjalan, dibanding dengan kecepatan diharapkan memakai rata simulasi biasa. STR_FRAMERATE_CURRENT :{WHITE}Sekarang STR_FRAMERATE_DATA_POINTS :{WHITE}Data tergantung oleh ukuran {COMMA} +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GL_ECONOMY :{WHITE} Penanganan kargo: STR_FRAMERATE_GL_TRAINS :{WHITE} Titik kereta: +STR_FRAMERATE_GL_ROADVEHS :{WHITE} Titik kendaraan: STR_FRAMERATE_GL_SHIPS :{WHITE} Titik kapal: +STR_FRAMERATE_GL_AIRCRAFT :{WHITE} Titik pesawat: +STR_FRAMERATE_GL_LANDSCAPE :{WHITE} Titik dunia: STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Viewport dunia: +STR_FRAMERATE_SOUND :{WHITE}Mixing suara: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GL_ECONOMY :Penanganan kargo +STR_FRAMETIME_CAPTION_GL_TRAINS :Titik kereta STR_FRAMETIME_CAPTION_GL_ROADVEHS :Titik kendaraan +STR_FRAMETIME_CAPTION_GL_SHIPS :Titik kapal STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Titik pesawat STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Titik dunia +STR_FRAMETIME_CAPTION_SOUND :Mixing suara ############ End of leave-in-this-order @@ -2991,6 +3013,7 @@ STR_TOWN_POPULATION :{BLACK}Populasi STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (City) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Populasi: {ORANGE}{COMMA}{BLACK} Rumah: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} bulan lalu: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Kargo untuk pertumbuhan kota: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{RED} Butuh {ORANGE}{STRING} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} dibutuhkan saat musim dingin @@ -3302,6 +3325,7 @@ STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Membutuh ############ range for requires ends STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Membutuhkan: +STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} menunggu{STRING} ############ range for produces starts STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Menghasilkan: {YELLOW}{STRING}{STRING} @@ -3372,6 +3396,8 @@ STR_GROUP_RENAME_CAPTION :{BLACK}Ubah nam STR_GROUP_PROFIT_THIS_YEAR :Keuntungan tahun ini: STR_GROUP_PROFIT_LAST_YEAR :Keuntungan tahun lalu: +STR_GROUP_OCCUPANCY :Penggunaan sekarang: +STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Kereta Baru @@ -3379,7 +3405,7 @@ STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Kereta listrik STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Monorel Baru STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Maglev Baru -STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Semua Kereta +STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Kereta Baru STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Kendaraan Baru STR_BUY_VEHICLE_SHIP_CAPTION :Kapal Baru STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Buat Pesawat @@ -3539,7 +3565,10 @@ STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :lokomotif magle STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Biaya: {CURRENCY_LONG} Berat: {WEIGHT_SHORT}{}Kecepatan: {VELOCITY} Daya: {POWER}{}Biaya ops.: {CURRENCY_LONG}/thn{}Kapasitas: {CARGO_LONG} STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Biaya: {CURRENCY_LONG} Berat: {WEIGHT_SHORT}{}Kecepatan: {VELOCITY} Power: {POWER} Max. T.E.: {6:FORCE}{}Biaya Operasional: {4:CURRENCY_LONG}/yr{}Kapasitas: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Biaya: {CURRENCY_LONG} Kec. Max: {VELOCITY}{}Kapasitas: {CARGO_LONG}{}Bea Berjalan: {CURRENCY_LONG}/thn +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Biaya: {CURRENCY_LONG} Kec. Max.: {VELOCITY}{}Jenis pesawat: {STRING}{}Kapasitas: {CARGO_LONG}, {CARGO_LONG}{}Biaya operasi: {CURRENCY_LONG}/thn STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Biaya: {CURRENCY_LONG} Kec. Max.: {VELOCITY}{}Jenis pesawat: {STRING}{}Kapasitas: {CARGO_LONG}{}Biaya operasi: {CURRENCY_LONG}/thn +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Biaya: {CURRENCY_LONG} Kec. Max.: {VELOCITY}{}Jenis pesawat: {STRING} Jangkauan: {COMMA} ubin{}Kapasitas: {CARGO_LONG}, {CARGO_LONG}{}Biaya Operasi: {CURRENCY_LONG}/thn +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Biaya: {CURRENCY_LONG} Kec. Max.: {VELOCITY}{}Jenis pesawat: {STRING} Jangkauan: {COMMA} ubin{}Kapasitas: {CARGO_LONG}{}Biaya operasi: {CURRENCY_LONG}/thn # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Ganti {STRING} - {STRING} @@ -3569,6 +3598,7 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Tekan un STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Pindah tampilan penggantian lokomitif atau gerbong STR_REPLACE_ENGINES :Lokomotif STR_REPLACE_WAGONS :Gerbong +STR_REPLACE_ALL_RAILTYPE :Semua kereta STR_REPLACE_HELP_RAILTYPE :{BLACK}Pilih jenis kereta yang anda inginkan untuk diganti STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Menampilkan kendaraan terpilih di sisi kiri yang akan diganti, jika ada @@ -3662,6 +3692,7 @@ STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} ta STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Kec. Max: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Kecepatan Maks.: {LTBLUE}{VELOCITY} {BLACK}Jenis pesawat: {LTBLUE}{STRING} +STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Kec. max.: {LTBLUE}{VELOCITY} {BLACK}Jenis pesawat: {LTBLUE}{STRING} {BLACK}Jangkauan: {LTBLUE}{COMMA} ubin STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Berat: {LTBLUE}{WEIGHT_SHORT} {BLACK}Tenaga: {LTBLUE}{POWER}{BLACK} Kec. Max: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Berat: {LTBLUE}{WEIGHT_SHORT} {BLACK}Tenaga: {LTBLUE}{POWER}{BLACK} Kec. Max: {LTBLUE}{VELOCITY} {BLACK}Max. T.E.: {LTBLUE}{FORCE} @@ -4227,6 +4258,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... jala STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... menghadap pada arah yang salah STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... terminal lintas-lalu tak bisa memiliki sudut STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... terminal lintas-lalu tak bisa memiliki simpangan +STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... jalannya satu arah atau terhalang # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Tidak dapat menghapus bagian dari stasiun... @@ -4295,7 +4327,7 @@ STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Kombinas STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Sinyal harus dihancurkan dulu STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Tidak tersedia rel yang sesuai STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Harus membongkar rel terlebih dahulu -STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Jalan satu arah atau ada yang menghalangi +STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Jalannya satu arah atau terhalang STR_ERROR_CROSSING_DISALLOWED :{WHITE}Perlintasan tingkat tidak diperbolehkan pada tipe rel ini STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Tidak dapat membangun sinyal disini STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Tidak dapat membangun jalur rel disini @@ -4479,6 +4511,7 @@ STR_BASESOUNDS_WIN_DESCRIPTION :Efek suara oris STR_BASESOUNDS_NONE_DESCRIPTION :Paket efek suara tanpa suara apapun. STR_BASEMUSIC_WIN_DESCRIPTION :Musik pengiring orisinil Transport Tycoon Deluxe versi Windows. STR_BASEMUSIC_DOS_DESCRIPTION :Musik orisinil Transport Tycoon Deluxe versi DOS. +STR_BASEMUSIC_TTO_DESCRIPTION :Musik orisinil Transport Tycoon (Orisinil/Editor Dunia) versi DOS. STR_BASEMUSIC_NONE_DESCRIPTION :Paket musik tanpa musik sungguhan. ##id 0x2000 From 6accbf9afc6b787f695a535946c45fb91c263a81 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Thu, 15 Nov 2018 23:14:21 +0000 Subject: [PATCH 076/622] Fix #6969: Account for BOM when reading script files --- src/script/squirrel.cpp | 129 +++++++++++++++++++++------------------- 1 file changed, 69 insertions(+), 60 deletions(-) diff --git a/src/script/squirrel.cpp b/src/script/squirrel.cpp index e38067480d..d11e85bee8 100644 --- a/src/script/squirrel.cpp +++ b/src/script/squirrel.cpp @@ -432,13 +432,8 @@ static SQInteger _io_file_read(SQUserPointer file, SQUserPointer buf, SQInteger SQRESULT Squirrel::LoadFile(HSQUIRRELVM vm, const char *filename, SQBool printerror) { - size_t size; FILE *file; - SQInteger ret; - unsigned short us; - unsigned char uc; - SQLEXREADFUNC func; - + size_t size; if (strncmp(this->GetAPIName(), "AI", 2) == 0) { file = FioFOpenFile(filename, "rb", AI_DIR, &size); if (file == NULL) file = FioFOpenFile(filename, "rb", AI_LIBRARY_DIR, &size); @@ -449,61 +444,75 @@ SQRESULT Squirrel::LoadFile(HSQUIRRELVM vm, const char *filename, SQBool printer NOT_REACHED(); } - if (file != NULL) { - SQFile f(file, size); - ret = fread(&us, 1, sizeof(us), file); - /* Most likely an empty file */ - if (ret != 2) us = 0; - - switch (us) { - case SQ_BYTECODE_STREAM_TAG: { // BYTECODE - if (fseek(file, -2, SEEK_CUR) < 0) { - FioFCloseFile(file); - return sq_throwerror(vm, "cannot seek the file"); - } - if (SQ_SUCCEEDED(sq_readclosure(vm, _io_file_read, &f))) { - FioFCloseFile(file); - return SQ_OK; - } - FioFCloseFile(file); - return sq_throwerror(vm, "Couldn't read bytecode"); - } - case 0xFFFE: - /* Either this file is encoded as big-endian and we're on a little-endian - * machine, or this file is encoded as little-endian and we're on a big-endian - * machine. Either way, swap the bytes of every word we read. */ - func = _io_file_lexfeed_UCS2_swap; - break; - case 0xFEFF: func = _io_file_lexfeed_UCS2_no_swap; break; - case 0xBBEF: // UTF-8 - case 0xEFBB: // UTF-8 on big-endian machine - if (fread(&uc, 1, sizeof(uc), file) == 0) { - FioFCloseFile(file); - return sq_throwerror(vm, "I/O error"); - } - if (uc != 0xBF) { - FioFCloseFile(file); - return sq_throwerror(vm, "Unrecognized encoding"); - } - func = _io_file_lexfeed_UTF8; - break; - default: // ASCII - func = _io_file_lexfeed_ASCII; - if (fseek(file, -2, SEEK_CUR) < 0) { - FioFCloseFile(file); - return sq_throwerror(vm, "cannot seek the file"); - } - break; - } - - if (SQ_SUCCEEDED(sq_compile(vm, func, &f, filename, printerror))) { - FioFCloseFile(file); - return SQ_OK; - } - FioFCloseFile(file); - return SQ_ERROR; + if (file == NULL) { + return sq_throwerror(vm, "cannot open the file"); } - return sq_throwerror(vm, "cannot open the file"); + unsigned short bom = 0; + if (size >= 2) { + fread(&bom, 1, sizeof(bom), file); // Inside tar, no point checking return value of fread + } + + SQLEXREADFUNC func; + switch (bom) { + case SQ_BYTECODE_STREAM_TAG: { // BYTECODE + if (fseek(file, -2, SEEK_CUR) < 0) { + FioFCloseFile(file); + return sq_throwerror(vm, "cannot seek the file"); + } + + SQFile f(file, size); + if (SQ_SUCCEEDED(sq_readclosure(vm, _io_file_read, &f))) { + FioFCloseFile(file); + return SQ_OK; + } + FioFCloseFile(file); + return sq_throwerror(vm, "Couldn't read bytecode"); + } + case 0xFFFE: + /* Either this file is encoded as big-endian and we're on a little-endian + * machine, or this file is encoded as little-endian and we're on a big-endian + * machine. Either way, swap the bytes of every word we read. */ + func = _io_file_lexfeed_UCS2_swap; + size -= 2; // Skip BOM + break; + case 0xFEFF: + func = _io_file_lexfeed_UCS2_no_swap; + size -= 2; // Skip BOM + break; + case 0xBBEF: // UTF-8 + case 0xEFBB: { // UTF-8 on big-endian machine + /* Similarly, check the file is actually big enough to finish checking BOM */ + if (size < 3) { + FioFCloseFile(file); + return sq_throwerror(vm, "I/O error"); + } + unsigned char uc; + fread(&uc, 1, sizeof(uc), file); + if (uc != 0xBF) { + FioFCloseFile(file); + return sq_throwerror(vm, "Unrecognized encoding"); + } + func = _io_file_lexfeed_UTF8; + size -= 3; // Skip BOM + break; + } + default: // ASCII + func = _io_file_lexfeed_ASCII; + /* Account for when we might not have fread'd earlier */ + if (size >= 2 && fseek(file, -2, SEEK_CUR) < 0) { + FioFCloseFile(file); + return sq_throwerror(vm, "cannot seek the file"); + } + break; + } + + SQFile f(file, size); + if (SQ_SUCCEEDED(sq_compile(vm, func, &f, filename, printerror))) { + FioFCloseFile(file); + return SQ_OK; + } + FioFCloseFile(file); + return SQ_ERROR; } bool Squirrel::LoadScript(HSQUIRRELVM vm, const char *script, bool in_root) From 68e6b5531a85788edef87140db33fee821df02a6 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sat, 17 Nov 2018 20:36:05 +0100 Subject: [PATCH 077/622] Update: Developer credits --- README.md | 1 + src/misc_gui.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/README.md b/README.md index 7ab63c9f4c..83e1097bbe 100644 --- a/README.md +++ b/README.md @@ -782,6 +782,7 @@ terms for Bootstrap documentation. - Christoph Elsenhans (frosch) - General coding (since 0.6) - Loïc Guilloux (glx) - Windows Expert (since 0.4.5) - Michael Lutz (michi_cc) - Path based signals (since 0.7) +- Niels Martin Hansen (nielsm) - Music system, general coding (since 1.9) - Owen Rudge (orudge) - Forum host, OS/2 port (since 0.1) - Peter Nelson (peter1138) - Spiritual descendant from newGRF gods (since 0.4.5) - Ingo von Borstel (planetmaker) - General coding, Support (since 1.1) diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index e23da4293c..b122d172d1 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -399,6 +399,7 @@ static const char * const _credits[] = { " Christoph Elsenhans (frosch) - General coding (since 0.6)", " Lo\xC3\xAF""c Guilloux (glx) - General / Windows Expert (since 0.4.5)", " Michael Lutz (michi_cc) - Path based signals (since 0.7)", + " Niels Martin Hansen (nielsm) - Music system, general coding (since 1.9)", " Owen Rudge (orudge) - Forum host, OS/2 port (since 0.1)", " Peter Nelson (peter1138) - Spiritual descendant from NewGRF gods (since 0.4.5)", " Ingo von Borstel (planetmaker) - General, Support (since 1.1)", From 1a1204472e4d047de824686e9f606d7c832ec698 Mon Sep 17 00:00:00 2001 From: frosch Date: Thu, 15 Nov 2018 23:12:37 +0100 Subject: [PATCH 078/622] Revert: Sprite sorting optimisation sorted incorrectly. This reverts commit 25ab9c1997f770f4a8a66bb3ad4b82ba87e3a977. --- src/viewport.cpp | 20 +++----------------- src/viewport_sprite_sorter_sse4.cpp | 25 +++---------------------- 2 files changed, 6 insertions(+), 39 deletions(-) diff --git a/src/viewport.cpp b/src/viewport.cpp index 13f87de1da..350bb92381 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -88,7 +88,6 @@ #include "command_func.h" #include "network/network_func.h" #include "framerate_type.h" -#include "core/sort_func.hpp" #include @@ -1380,22 +1379,11 @@ static bool ViewportSortParentSpritesChecker() return true; } -static int CDECL CompareParentSprites(ParentSpriteToDraw * const *psd, ParentSpriteToDraw * const *psd2) -{ - const ParentSpriteToDraw *ps = *psd; - const ParentSpriteToDraw *ps2 = *psd2; - return ps->xmin - ps2->xmin; -} - /** Sort parent sprites pointer array */ static void ViewportSortParentSprites(ParentSpriteToSortVector *psdv) { ParentSpriteToDraw **psdvend = psdv->End(); ParentSpriteToDraw **psd = psdv->Begin(); - - /* pre-sort by xmin in ascending order */ - QSortT(psd, psdvend - psd, CompareParentSprites); - while (psd != psdvend) { ParentSpriteToDraw *ps = *psd; @@ -1432,11 +1420,9 @@ static void ViewportSortParentSprites(ParentSpriteToSortVector *psdv) * I.e. every single order of X, Y, Z says ps2 is behind ps or they overlap. * That is: If one partial order says ps behind ps2, do not change the order. */ - if (ps->xmax < ps2->xmin) { - /* all following sprites have xmin >= ps2->xmin */ - break; - } - if (ps->ymax < ps2->ymin || ps->zmax < ps2->zmin) { + if (ps->xmax < ps2->xmin || + ps->ymax < ps2->ymin || + ps->zmax < ps2->zmin) { continue; } } diff --git a/src/viewport_sprite_sorter_sse4.cpp b/src/viewport_sprite_sorter_sse4.cpp index cd898f00e9..fb78c51c86 100644 --- a/src/viewport_sprite_sorter_sse4.cpp +++ b/src/viewport_sprite_sorter_sse4.cpp @@ -15,7 +15,6 @@ #include "cpu.h" #include "smmintrin.h" #include "viewport_sprite_sorter.h" -#include "core/sort_func.hpp" #include "safeguards.h" @@ -26,24 +25,12 @@ #define LOAD_128 _mm_loadu_si128 #endif -static int CDECL CompareParentSprites(ParentSpriteToDraw * const *psd, ParentSpriteToDraw * const *psd2) -{ - const ParentSpriteToDraw *ps = *psd; - const ParentSpriteToDraw *ps2 = *psd2; - return ps->xmin - ps2->xmin; -} - /** Sort parent sprites pointer array using SSE4.1 optimizations. */ void ViewportSortParentSpritesSSE41(ParentSpriteToSortVector *psdv) { - const __m128i mask_ptest = _mm_setr_epi8(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0); - const __m128i mask_ptest2 = _mm_setr_epi8(-1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + const __m128i mask_ptest = _mm_setr_epi8(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0); ParentSpriteToDraw ** const psdvend = psdv->End(); ParentSpriteToDraw **psd = psdv->Begin(); - - /* pre-sort by xmin in ascending order */ - QSortT(psd, psdvend - psd, CompareParentSprites); - while (psd != psdvend) { ParentSpriteToDraw * const ps = *psd; @@ -77,14 +64,8 @@ void ViewportSortParentSpritesSSE41(ParentSpriteToSortVector *psdv) __m128i ps1_max = LOAD_128((__m128i*) &ps->xmax); __m128i ps2_min = LOAD_128((__m128i*) &ps2->xmin); __m128i rslt1 = _mm_cmplt_epi32(ps1_max, ps2_min); - if (!_mm_testz_si128(mask_ptest, rslt1)) { - if (!_mm_testz_si128(mask_ptest2, rslt1) /* ps->xmax < ps2->xmin */) { - /* all following sprites have xmin >= ps2->xmin */ - break; - } else { - continue; - } - } + if (!_mm_testz_si128(mask_ptest, rslt1)) + continue; __m128i ps1_min = LOAD_128((__m128i*) &ps->xmin); __m128i ps2_max = LOAD_128((__m128i*) &ps2->xmax); From 86bea59962325ebda3394975c6679b673fa8e52c Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sun, 18 Nov 2018 15:24:34 +0100 Subject: [PATCH 079/622] Update: Add missing newline at end of some project files --- projects/generate_vs140.vcxproj | 2 +- projects/settingsgen_vs100.vcxproj | 2 +- projects/settingsgen_vs140.vcxproj | 2 +- projects/strgen_vs140.vcxproj | 2 +- projects/version_vs100.vcxproj | 2 +- projects/version_vs140.vcxproj | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/projects/generate_vs140.vcxproj b/projects/generate_vs140.vcxproj index 67b1b7712c..e505315153 100644 --- a/projects/generate_vs140.vcxproj +++ b/projects/generate_vs140.vcxproj @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/projects/settingsgen_vs100.vcxproj b/projects/settingsgen_vs100.vcxproj index 30454d81f8..b7a379034d 100644 --- a/projects/settingsgen_vs100.vcxproj +++ b/projects/settingsgen_vs100.vcxproj @@ -78,4 +78,4 @@ - \ No newline at end of file + diff --git a/projects/settingsgen_vs140.vcxproj b/projects/settingsgen_vs140.vcxproj index fc6d079e8e..12ce280f3a 100644 --- a/projects/settingsgen_vs140.vcxproj +++ b/projects/settingsgen_vs140.vcxproj @@ -80,4 +80,4 @@ - \ No newline at end of file + diff --git a/projects/strgen_vs140.vcxproj b/projects/strgen_vs140.vcxproj index ebf56a4daf..b972d873eb 100644 --- a/projects/strgen_vs140.vcxproj +++ b/projects/strgen_vs140.vcxproj @@ -92,4 +92,4 @@ - \ No newline at end of file + diff --git a/projects/version_vs100.vcxproj b/projects/version_vs100.vcxproj index 008e6dd665..689a8bd664 100644 --- a/projects/version_vs100.vcxproj +++ b/projects/version_vs100.vcxproj @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/projects/version_vs140.vcxproj b/projects/version_vs140.vcxproj index baf374bca0..6e71a88201 100644 --- a/projects/version_vs140.vcxproj +++ b/projects/version_vs140.vcxproj @@ -39,4 +39,4 @@ - \ No newline at end of file + From 476643bfa521325cfe46082ab5663a07f1da6f43 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Thu, 1 Nov 2018 22:47:09 +0100 Subject: [PATCH 080/622] Remove: Visual Studio project files for earlier than 2015 --- projects/generate | 34 - projects/generate.vbs | 35 - projects/generate_vs100.vcxproj | 42 - projects/generate_vs80.vcproj | 39 - projects/generate_vs90.vcproj | 40 - projects/langs_vs100.vcxproj | 390 -- projects/langs_vs100.vcxproj.filters | 176 - projects/langs_vs100.vcxproj.filters.in | 12 - projects/langs_vs100.vcxproj.in | 61 - projects/langs_vs80.vcproj | 895 ---- projects/langs_vs80.vcproj.in | 71 - projects/langs_vs90.vcproj | 896 ---- projects/langs_vs90.vcproj.in | 72 - projects/openttd_vs100.sln | 91 - projects/openttd_vs100.vcxproj | 1334 ------ projects/openttd_vs100.vcxproj.filters | 3098 ------------- projects/openttd_vs100.vcxproj.filters.in | 13 - projects/openttd_vs100.vcxproj.in | 339 -- projects/openttd_vs80.sln | 95 - projects/openttd_vs80.vcproj | 4569 -------------------- projects/openttd_vs80.vcproj.in | 454 -- projects/openttd_vs80.vcproj.user | 37 - projects/openttd_vs90.sln | 95 - projects/openttd_vs90.vcproj | 4566 ------------------- projects/openttd_vs90.vcproj.in | 451 -- projects/openttd_vs90.vcproj.user | 37 - projects/settings_vs100.vcxproj | 54 - projects/settings_vs100.vcxproj.filters | 35 - projects/settings_vs100.vcxproj.filters.in | 15 - projects/settings_vs100.vcxproj.in | 48 - projects/settings_vs80.vcproj | 87 - projects/settings_vs80.vcproj.in | 60 - projects/settings_vs90.vcproj | 88 - projects/settings_vs90.vcproj.in | 61 - projects/settingsgen_vs100.vcxproj | 81 - projects/settingsgen_vs100.vcxproj.filters | 32 - projects/settingsgen_vs80.vcproj | 143 - projects/settingsgen_vs90.vcproj | 142 - projects/strgen_vs100.vcxproj | 94 - projects/strgen_vs100.vcxproj.filters | 35 - projects/strgen_vs80.vcproj | 168 - projects/strgen_vs90.vcproj | 168 - projects/version_vs100.vcxproj | 42 - projects/version_vs80.vcproj | 48 - projects/version_vs90.vcproj | 49 - 45 files changed, 19392 deletions(-) delete mode 100644 projects/generate_vs100.vcxproj delete mode 100644 projects/generate_vs80.vcproj delete mode 100644 projects/generate_vs90.vcproj delete mode 100644 projects/langs_vs100.vcxproj delete mode 100644 projects/langs_vs100.vcxproj.filters delete mode 100644 projects/langs_vs100.vcxproj.filters.in delete mode 100644 projects/langs_vs100.vcxproj.in delete mode 100644 projects/langs_vs80.vcproj delete mode 100644 projects/langs_vs80.vcproj.in delete mode 100644 projects/langs_vs90.vcproj delete mode 100644 projects/langs_vs90.vcproj.in delete mode 100644 projects/openttd_vs100.sln delete mode 100644 projects/openttd_vs100.vcxproj delete mode 100644 projects/openttd_vs100.vcxproj.filters delete mode 100644 projects/openttd_vs100.vcxproj.filters.in delete mode 100644 projects/openttd_vs100.vcxproj.in delete mode 100644 projects/openttd_vs80.sln delete mode 100644 projects/openttd_vs80.vcproj delete mode 100644 projects/openttd_vs80.vcproj.in delete mode 100644 projects/openttd_vs80.vcproj.user delete mode 100644 projects/openttd_vs90.sln delete mode 100644 projects/openttd_vs90.vcproj delete mode 100644 projects/openttd_vs90.vcproj.in delete mode 100644 projects/openttd_vs90.vcproj.user delete mode 100644 projects/settings_vs100.vcxproj delete mode 100644 projects/settings_vs100.vcxproj.filters delete mode 100644 projects/settings_vs100.vcxproj.filters.in delete mode 100644 projects/settings_vs100.vcxproj.in delete mode 100644 projects/settings_vs80.vcproj delete mode 100644 projects/settings_vs80.vcproj.in delete mode 100644 projects/settings_vs90.vcproj delete mode 100644 projects/settings_vs90.vcproj.in delete mode 100644 projects/settingsgen_vs100.vcxproj delete mode 100644 projects/settingsgen_vs100.vcxproj.filters delete mode 100644 projects/settingsgen_vs80.vcproj delete mode 100644 projects/settingsgen_vs90.vcproj delete mode 100644 projects/strgen_vs100.vcxproj delete mode 100644 projects/strgen_vs100.vcxproj.filters delete mode 100644 projects/strgen_vs80.vcproj delete mode 100644 projects/strgen_vs90.vcproj delete mode 100644 projects/version_vs100.vcxproj delete mode 100644 projects/version_vs80.vcproj delete mode 100644 projects/version_vs90.vcproj diff --git a/projects/generate b/projects/generate index 4351337a25..af59a83fb2 100755 --- a/projects/generate +++ b/projects/generate @@ -40,28 +40,6 @@ fi # generate_vs140.vcxproj is for MSVC 2015 # version_vs140.vcxproj is for MSVC 2015 -# openttd_vs100.sln is for MSVC 2010 -# openttd_vs100.vcxproj is for MSVC 2010 -# openttd_vs100.vcxproj.filters is for MSVC 2010 -# langs_vs100.vcxproj is for MSVC 2010 -# strgen_vs100.vcxproj is for MSVC 2010 -# strgen_vs100.vcxproj.filters is for MSVC 2010 -# generate_vs100.vcxproj is for MSVC 2010 -# version_vs100.vcxproj is for MSVC 2010 - -# openttd_vs90.sln is for MSVC 2008 -# openttd_vs90.vcproj is for MSVC 2008 -# langs_vs90.vcproj is for MSVC 2008 -# strgen_vs90.vcproj is for MSVC 2008 -# generate_vs90.vcproj is for MSVC 2008 -# version_vs90.vcproj is for MSVC 2008 - -# openttd_vs80.sln is for MSVC 2005 -# openttd_vs80.vcproj is for MSVC 2005 -# langs_vs80.vcproj is for MSVC 2005 -# strgen_vs80.vcproj is for MSVC 2005 -# generate_vs80.vcproj is for MSVC 2005 -# version_vs80.vcproj is for MSVC 2005 @@ -322,26 +300,14 @@ settingscommand=`echo "$settings" | grep "^#3" | sed "s~#3~~g"` settingsvcxproj=`echo "$settings" | grep "^#2" | sed "s~#2~~g"` settings=`echo "$settings" | grep "^#1" | sed "s~#1~~g"` -generate "$openttd" "openttd_vs80.vcproj" -generate "$openttd" "openttd_vs90.vcproj" -generate "$openttdvcxproj" "openttd_vs100.vcxproj" -generate "$openttdfiles" "openttd_vs100.vcxproj.filters" "$openttdfilters" generate "$openttdvcxproj" "openttd_vs140.vcxproj" generate "$openttdfiles" "openttd_vs140.vcxproj.filters" "$openttdfilters" generate "$openttdvcxproj" "openttd_vs141.vcxproj" generate "$openttdfiles" "openttd_vs141.vcxproj.filters" "$openttdfilters" -generate "$lang" "langs_vs80.vcproj" -generate "$lang" "langs_vs90.vcproj" -generate "$langvcxproj" "langs_vs100.vcxproj" -generate "$langfiles" "langs_vs100.vcxproj.filters" generate "$langvcxproj" "langs_vs140.vcxproj" generate "$langfiles" "langs_vs140.vcxproj.filters" generate "$langvcxproj" "langs_vs141.vcxproj" generate "$langfiles" "langs_vs141.vcxproj.filters" -generate "$settings" "settings_vs80.vcproj" "$settingscommand" -generate "$settings" "settings_vs90.vcproj" "$settingscommand" -generate "$settingsvcxproj" "settings_vs100.vcxproj" "$settingscommand" -generate "$settingsfiles" "settings_vs100.vcxproj.filters" generate "$settingsvcxproj" "settings_vs140.vcxproj" "$settingscommand" generate "$settingsfiles" "settings_vs140.vcxproj.filters" generate "$settingsvcxproj" "settings_vs141.vcxproj" "$settingscommand" diff --git a/projects/generate.vbs b/projects/generate.vbs index a2f4679a69..5439ed7c0d 100755 --- a/projects/generate.vbs +++ b/projects/generate.vbs @@ -28,29 +28,6 @@ Set FSO = CreateObject("Scripting.FileSystemObject") ' generate_vs140.vcxproj is for MSVC 2015 ' version_vs140.vcxproj is for MSVC 2015 -' openttd_vs100.sln is for MSVC 2010 -' openttd_vs100.vcxproj is for MSVC 2010 -' openttd_vs100.vcxproj.filters is for MSVC 2010 -' langs_vs100.vcxproj is for MSVC 2010 -' strgen_vs100.vcxproj is for MSVC 2010 -' strgen_vs100.vcxproj.filters is for MSVC 2010 -' generate_vs100.vcxproj is for MSVC 2010 -' version_vs100.vcxproj is for MSVC 2010 - -' openttd_vs90.sln is for MSVC 2008 -' openttd_vs90.vcproj is for MSVC 2008 -' langs_vs90.vcproj is for MSVC 2008 -' strgen_vs90.vcproj is for MSVC 2008 -' generate_vs90.vcproj is for MSVC 2008 -' version_vs90.vcproj is for MSVC 2008 - -' openttd_vs80.sln is for MSVC 2005 -' openttd_vs80.vcproj is for MSVC 2005 -' langs_vs80.vcproj is for MSVC 2005 -' strgen_vs80.vcproj is for MSVC 2005 -' generate_vs80.vcproj is for MSVC 2005 -' version_vs80.vcproj is for MSVC 2005 - Sub safety_check(filename) Dim file, line, regexp, list @@ -383,10 +360,6 @@ headers_check ROOT_DIR & "/source.list", ROOT_DIR & "\src\" ' Backslashes needed Dim openttd, openttdvcxproj, openttdfilters, openttdfiles openttd = load_main_data(ROOT_DIR & "/source.list", openttdvcxproj, openttdfilters, openttdfiles) -generate openttd, ROOT_DIR & "/projects/openttd_vs80.vcproj", Null -generate openttd, ROOT_DIR & "/projects/openttd_vs90.vcproj", Null -generate openttdvcxproj, ROOT_DIR & "/projects/openttd_vs100.vcxproj", Null -generate openttdfiles, ROOT_DIR & "/projects/openttd_vs100.vcxproj.filters", openttdfilters generate openttdvcxproj, ROOT_DIR & "/projects/openttd_vs140.vcxproj", Null generate openttdfiles, ROOT_DIR & "/projects/openttd_vs140.vcxproj.filters", openttdfilters generate openttdvcxproj, ROOT_DIR & "/projects/openttd_vs141.vcxproj", Null @@ -394,10 +367,6 @@ generate openttdfiles, ROOT_DIR & "/projects/openttd_vs141.vcxproj.filters", ope Dim lang, langvcxproj, langfiles lang = load_lang_data(ROOT_DIR & "/src/lang", langvcxproj, langfiles) -generate lang, ROOT_DIR & "/projects/langs_vs80.vcproj", Null -generate lang, ROOT_DIR & "/projects/langs_vs90.vcproj", Null -generate langvcxproj, ROOT_DIR & "/projects/langs_vs100.vcxproj", Null -generate langfiles, ROOT_DIR & "/projects/langs_vs100.vcxproj.filters", Null generate langvcxproj, ROOT_DIR & "/projects/langs_vs140.vcxproj", Null generate langfiles, ROOT_DIR & "/projects/langs_vs140.vcxproj.filters", Null generate langvcxproj, ROOT_DIR & "/projects/langs_vs141.vcxproj", Null @@ -405,10 +374,6 @@ generate langfiles, ROOT_DIR & "/projects/langs_vs141.vcxproj.filters", Null Dim settings, settingsvcxproj, settingscommand, settingsfiles settings = load_settings_data(ROOT_DIR & "/src/table", settingsvcxproj, settingscommand, settingsfiles) -generate settings, ROOT_DIR & "/projects/settings_vs80.vcproj", settingscommand -generate settings, ROOT_DIR & "/projects/settings_vs90.vcproj", settingscommand -generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs100.vcxproj", settingscommand -generate settingsfiles, ROOT_DIR & "/projects/settings_vs100.vcxproj.filters", Null generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs140.vcxproj", settingscommand generate settingsfiles, ROOT_DIR & "/projects/settings_vs140.vcxproj.filters", Null generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs141.vcxproj", settingscommand diff --git a/projects/generate_vs100.vcxproj b/projects/generate_vs100.vcxproj deleted file mode 100644 index 4417308e60..0000000000 --- a/projects/generate_vs100.vcxproj +++ /dev/null @@ -1,42 +0,0 @@ - - - - - Debug - Win32 - - - - generate - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34} - generate - - - - Utility - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - - - - - - Document - Running %27generate.vbs%27 ... - cscript "$(ProjectDir)generate.vbs" - %(FullPath);%(AdditionalInputs) - $(SolutionDir)openttd_vs80.vcproj;$(SolutionDir)openttd_vs90.vcproj;$(SolutionDir)openttd_vs100.vcxproj;$(SolutionDir)openttd_vs100.vcxproj.filters;$(SolutionDir)langs_vs80.vcproj;$(SolutionDir)langs_vs90.vcproj;$(SolutionDir)langs_vs100.vcxproj;%(Outputs) - - - - - - diff --git a/projects/generate_vs80.vcproj b/projects/generate_vs80.vcproj deleted file mode 100644 index bc0b6c44c7..0000000000 --- a/projects/generate_vs80.vcproj +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/projects/generate_vs90.vcproj b/projects/generate_vs90.vcproj deleted file mode 100644 index dc7b3e2f56..0000000000 --- a/projects/generate_vs90.vcproj +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/projects/langs_vs100.vcxproj b/projects/langs_vs100.vcxproj deleted file mode 100644 index 88cce9e105..0000000000 --- a/projects/langs_vs100.vcxproj +++ /dev/null @@ -1,390 +0,0 @@ - - - - - Debug - Win32 - - - - langs - {0F066B23-18DF-4284-8265-F4A5E7E3B966} - langs - MakeFileProj - - - - Utility - false - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\bin\lang\ - ..\objs\langs\ - - - - Generating strings.h - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table - - - ./langs.tlb - - - - - - - Generating english language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english.lng;%(Outputs) - - - Generating afrikaans language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\afrikaans.lng;%(Outputs) - - - Generating arabic_egypt language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\arabic_egypt.lng;%(Outputs) - - - Generating basque language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\basque.lng;%(Outputs) - - - Generating belarusian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\belarusian.lng;%(Outputs) - - - Generating brazilian_portuguese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\brazilian_portuguese.lng;%(Outputs) - - - Generating bulgarian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\bulgarian.lng;%(Outputs) - - - Generating catalan language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\catalan.lng;%(Outputs) - - - Generating croatian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\croatian.lng;%(Outputs) - - - Generating czech language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\czech.lng;%(Outputs) - - - Generating danish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\danish.lng;%(Outputs) - - - Generating dutch language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\dutch.lng;%(Outputs) - - - Generating english_AU language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english_AU.lng;%(Outputs) - - - Generating english_US language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english_US.lng;%(Outputs) - - - Generating esperanto language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\esperanto.lng;%(Outputs) - - - Generating estonian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\estonian.lng;%(Outputs) - - - Generating faroese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\faroese.lng;%(Outputs) - - - Generating finnish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\finnish.lng;%(Outputs) - - - Generating french language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\french.lng;%(Outputs) - - - Generating gaelic language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\gaelic.lng;%(Outputs) - - - Generating galician language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\galician.lng;%(Outputs) - - - Generating german language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\german.lng;%(Outputs) - - - Generating greek language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\greek.lng;%(Outputs) - - - Generating hebrew language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\hebrew.lng;%(Outputs) - - - Generating hungarian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\hungarian.lng;%(Outputs) - - - Generating icelandic language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\icelandic.lng;%(Outputs) - - - Generating indonesian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\indonesian.lng;%(Outputs) - - - Generating irish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\irish.lng;%(Outputs) - - - Generating italian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\italian.lng;%(Outputs) - - - Generating japanese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\japanese.lng;%(Outputs) - - - Generating korean language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\korean.lng;%(Outputs) - - - Generating latin language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\latin.lng;%(Outputs) - - - Generating latvian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\latvian.lng;%(Outputs) - - - Generating lithuanian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\lithuanian.lng;%(Outputs) - - - Generating luxembourgish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\luxembourgish.lng;%(Outputs) - - - Generating malay language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\malay.lng;%(Outputs) - - - Generating norwegian_bokmal language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\norwegian_bokmal.lng;%(Outputs) - - - Generating norwegian_nynorsk language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\norwegian_nynorsk.lng;%(Outputs) - - - Generating polish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\polish.lng;%(Outputs) - - - Generating portuguese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\portuguese.lng;%(Outputs) - - - Generating romanian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\romanian.lng;%(Outputs) - - - Generating russian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\russian.lng;%(Outputs) - - - Generating serbian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\serbian.lng;%(Outputs) - - - Generating simplified_chinese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\simplified_chinese.lng;%(Outputs) - - - Generating slovak language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\slovak.lng;%(Outputs) - - - Generating slovenian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\slovenian.lng;%(Outputs) - - - Generating spanish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\spanish.lng;%(Outputs) - - - Generating spanish_MX language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\spanish_MX.lng;%(Outputs) - - - Generating swedish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\swedish.lng;%(Outputs) - - - Generating tamil language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\tamil.lng;%(Outputs) - - - Generating thai language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\thai.lng;%(Outputs) - - - Generating traditional_chinese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\traditional_chinese.lng;%(Outputs) - - - Generating turkish language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\turkish.lng;%(Outputs) - - - Generating ukrainian language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\ukrainian.lng;%(Outputs) - - - Generating vietnamese language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\vietnamese.lng;%(Outputs) - - - Generating welsh language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\welsh.lng;%(Outputs) - - - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - - - - diff --git a/projects/langs_vs100.vcxproj.filters b/projects/langs_vs100.vcxproj.filters deleted file mode 100644 index bf5257ec82..0000000000 --- a/projects/langs_vs100.vcxproj.filters +++ /dev/null @@ -1,176 +0,0 @@ - - - - - {2a164580-9033-4a01-974b-b21da507efda} - - - - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - Translations - - - diff --git a/projects/langs_vs100.vcxproj.filters.in b/projects/langs_vs100.vcxproj.filters.in deleted file mode 100644 index 0d60ee9595..0000000000 --- a/projects/langs_vs100.vcxproj.filters.in +++ /dev/null @@ -1,12 +0,0 @@ - - - - - {2a164580-9033-4a01-974b-b21da507efda} - - - - -!!FILES!! - - diff --git a/projects/langs_vs100.vcxproj.in b/projects/langs_vs100.vcxproj.in deleted file mode 100644 index 5bfec8bf0f..0000000000 --- a/projects/langs_vs100.vcxproj.in +++ /dev/null @@ -1,61 +0,0 @@ - - - - - Debug - Win32 - - - - langs - {0F066B23-18DF-4284-8265-F4A5E7E3B966} - langs - MakeFileProj - - - - Utility - false - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\bin\lang\ - ..\objs\langs\ - - - - Generating strings.h - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table - - - ./langs.tlb - - - - - - - Generating english language file - ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" - ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) - ..\bin\lang\english.lng;%(Outputs) - -!!FILES!! - - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - - - - diff --git a/projects/langs_vs80.vcproj b/projects/langs_vs80.vcproj deleted file mode 100644 index 909613b59b..0000000000 --- a/projects/langs_vs80.vcproj +++ /dev/null @@ -1,895 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/langs_vs80.vcproj.in b/projects/langs_vs80.vcproj.in deleted file mode 100644 index 548a0b0179..0000000000 --- a/projects/langs_vs80.vcproj.in +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -!!FILES!! - - - - - diff --git a/projects/langs_vs90.vcproj b/projects/langs_vs90.vcproj deleted file mode 100644 index 583e0f9a5d..0000000000 --- a/projects/langs_vs90.vcproj +++ /dev/null @@ -1,896 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/langs_vs90.vcproj.in b/projects/langs_vs90.vcproj.in deleted file mode 100644 index f03b231fc3..0000000000 --- a/projects/langs_vs90.vcproj.in +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -!!FILES!! - - - - - diff --git a/projects/openttd_vs100.sln b/projects/openttd_vs100.sln deleted file mode 100644 index a2ec939d30..0000000000 --- a/projects/openttd_vs100.sln +++ /dev/null @@ -1,91 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual C++ Express 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs100.vcxproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}" - ProjectSection(ProjectDependencies) = postProject - {0817F629-589E-4A3B-B81A-8647BC571E35} = {0817F629-589E-4A3B-B81A-8647BC571E35} - {E9548DE9-F089-49B7-93A6-30BE2CC311C7} = {E9548DE9-F089-49B7-93A6-30BE2CC311C7} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs100.vcxproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "langs", "langs_vs100.vcxproj", "{0F066B23-18DF-4284-8265-F4A5E7E3B966}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "version", "version_vs100.vcxproj", "{1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs100.vcxproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs100.vcxproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}" - ProjectSection(ProjectDependencies) = postProject - {E9548DE9-F089-49B7-93A6-30BE2CC311C7} = {E9548DE9-F089-49B7-93A6-30BE2CC311C7} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs100.vcxproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.ActiveCfg = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.Build.0 = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.ActiveCfg = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.Build.0 = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.ActiveCfg = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.Build.0 = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.ActiveCfg = Release|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.Build.0 = Release|x64 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.Build.0 = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|x64.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.Build.0 = Debug|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection -EndGlobal diff --git a/projects/openttd_vs100.vcxproj b/projects/openttd_vs100.vcxproj deleted file mode 100644 index e400081df7..0000000000 --- a/projects/openttd_vs100.vcxproj +++ /dev/null @@ -1,1334 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - openttd - {668328A0-B40E-4CDB-BD72-D0064424414A} - openttd - - - - Application - false - Unicode - - - Application - false - Unicode - true - - - Application - false - Unicode - - - Application - false - Unicode - true - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(ProjectDir)..\bin - - - - .\Release/openttd.tlb - - - - - /MP /J %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - 4Bytes - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - false - - - MachineX86 - true - - - dpi_aware.manifest;os_versions.manifest - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - .\Debug/openttd.tlb - - - - - /MP %(AdditionalOptions) - Disabled - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - EditAndContinue - FastCall - Default - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - false - - - MachineX86 - - - dpi_aware.manifest;os_versions.manifest - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Release/openttd.tlb - - - - - /MP /J %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - Default - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - MachineX64 - true - - - dpi_aware.manifest;os_versions.manifest - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Debug/openttd.tlb - - - - - /MP %(AdditionalOptions) - Disabled - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - - - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - Cdecl - Default - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - MachineX64 - - - dpi_aware.manifest;os_versions.manifest - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {0f066b23-18df-4284-8265-f4a5e7e3b966} - false - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} - false - - - - diff --git a/projects/openttd_vs100.vcxproj.filters b/projects/openttd_vs100.vcxproj.filters deleted file mode 100644 index 47f431e556..0000000000 --- a/projects/openttd_vs100.vcxproj.filters +++ /dev/null @@ -1,3098 +0,0 @@ - - - - - {c76ff9f1-1e62-46d8-8d55-000000000000} - - - {c76ff9f1-1e62-46d8-8d55-000000000001} - - - {c76ff9f1-1e62-46d8-8d55-000000000002} - - - {c76ff9f1-1e62-46d8-8d55-000000000003} - - - {c76ff9f1-1e62-46d8-8d55-000000000004} - - - {c76ff9f1-1e62-46d8-8d55-000000000005} - - - {c76ff9f1-1e62-46d8-8d55-000000000006} - - - {c76ff9f1-1e62-46d8-8d55-000000000007} - - - {c76ff9f1-1e62-46d8-8d55-000000000008} - - - {c76ff9f1-1e62-46d8-8d55-000000000009} - - - {c76ff9f1-1e62-46d8-8d55-000000000010} - - - {c76ff9f1-1e62-46d8-8d55-000000000011} - - - {c76ff9f1-1e62-46d8-8d55-000000000012} - - - {c76ff9f1-1e62-46d8-8d55-000000000013} - - - {c76ff9f1-1e62-46d8-8d55-000000000014} - - - {c76ff9f1-1e62-46d8-8d55-000000000015} - - - {c76ff9f1-1e62-46d8-8d55-000000000016} - - - {c76ff9f1-1e62-46d8-8d55-000000000017} - - - {c76ff9f1-1e62-46d8-8d55-000000000018} - - - {c76ff9f1-1e62-46d8-8d55-000000000019} - - - {c76ff9f1-1e62-46d8-8d55-000000000020} - - - {c76ff9f1-1e62-46d8-8d55-000000000021} - - - {c76ff9f1-1e62-46d8-8d55-000000000022} - - - {c76ff9f1-1e62-46d8-8d55-000000000023} - - - {c76ff9f1-1e62-46d8-8d55-000000000024} - - - {c76ff9f1-1e62-46d8-8d55-000000000025} - - - {c76ff9f1-1e62-46d8-8d55-000000000026} - - - {c76ff9f1-1e62-46d8-8d55-000000000027} - - - {c76ff9f1-1e62-46d8-8d55-000000000028} - - - {c76ff9f1-1e62-46d8-8d55-000000000029} - - - {c76ff9f1-1e62-46d8-8d55-000000000030} - - - {c76ff9f1-1e62-46d8-8d55-000000000031} - - - {c76ff9f1-1e62-46d8-8d55-000000000032} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - Core Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - GUI Source Code - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Widgets - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Command handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Save/Load handlers - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - Tables - - - MD5 - - - MD5 - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Script - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - Squirrel headers - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI Core - - - AI API - - - Game API - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Game Core - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Script API Implementation - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Blitters - - - Drivers - - - Drivers - - - Drivers - - - Sprite loaders - - - Sprite loaders - - - Sprite loaders - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - NewGRF - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Map Accessors - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Misc - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Network Core - - - Pathfinder - - - Pathfinder - - - Pathfinder - - - Pathfinder - - - Pathfinder - - - Pathfinder - - - NPF - - - NPF - - - NPF - - - NPF - - - NPF - - - NPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - YAPF - - - Video - - - Video - - - Video - - - Video - - - Music - - - Music - - - Music - - - Music - - - Sound - - - Sound - - - Sound - - - Sound - - - Windows files - - - Windows files - - - Windows files - - - Windows files - - - Threading - - - Threading - - - - - - - diff --git a/projects/openttd_vs100.vcxproj.filters.in b/projects/openttd_vs100.vcxproj.filters.in deleted file mode 100644 index 126bd61459..0000000000 --- a/projects/openttd_vs100.vcxproj.filters.in +++ /dev/null @@ -1,13 +0,0 @@ - - - -!!FILTERS!! - - -!!FILES!! - - - - - - diff --git a/projects/openttd_vs100.vcxproj.in b/projects/openttd_vs100.vcxproj.in deleted file mode 100644 index b2eb33d316..0000000000 --- a/projects/openttd_vs100.vcxproj.in +++ /dev/null @@ -1,339 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - openttd - {668328A0-B40E-4CDB-BD72-D0064424414A} - openttd - - - - Application - false - Unicode - - - Application - false - Unicode - true - - - Application - false - Unicode - - - Application - false - Unicode - true - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - false - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - AllRules.ruleset - - - $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ - $(ProjectDir)..\bin - - - - .\Release/openttd.tlb - - - - - /MP /J %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - 4Bytes - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - false - - - MachineX86 - true - - - dpi_aware.manifest;os_versions.manifest - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - .\Debug/openttd.tlb - - - - - /MP %(AdditionalOptions) - Disabled - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - EditAndContinue - FastCall - Default - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - false - - - MachineX86 - - - dpi_aware.manifest;os_versions.manifest - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Release/openttd.tlb - - - - - /MP /J %(AdditionalOptions) - Full - AnySuitable - true - Size - true - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) - true - Sync - MultiThreaded - Default - false - true - - - - - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - FastCall - Default - - - NDEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) - true - %(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - true - MachineX64 - true - - - dpi_aware.manifest;os_versions.manifest - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - - - X64 - .\Debug/openttd.tlb - - - - - /MP %(AdditionalOptions) - Disabled - ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebug - - - - - - - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - false - true - ProgramDatabase - Cdecl - Default - - - _DEBUG;%(PreprocessorDefinitions) - 0x0809 - - - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) - true - LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) - true - Windows - 1048576 - 1048576 - MachineX64 - - - dpi_aware.manifest;os_versions.manifest - - - copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" - - - -!!FILES!! - - - - - - - - {0f066b23-18df-4284-8265-f4a5e7e3b966} - false - - - {a133a442-bd0a-4ade-b117-ad7545e4bdd1} - false - - - {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} - false - - - - diff --git a/projects/openttd_vs80.sln b/projects/openttd_vs80.sln deleted file mode 100644 index 9e6dd1219d..0000000000 --- a/projects/openttd_vs80.sln +++ /dev/null @@ -1,95 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual C++ Express 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs80.vcproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}" - ProjectSection(ProjectDependencies) = postProject - {0F066B23-18DF-4284-8265-F4A5E7E3B966} = {0F066B23-18DF-4284-8265-F4A5E7E3B966} - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC} = {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC} - {0817F629-589E-4A3B-B81A-8647BC571E35} = {0817F629-589E-4A3B-B81A-8647BC571E35} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs80.vcproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "langs", "langs_vs80.vcproj", "{0F066B23-18DF-4284-8265-F4A5E7E3B966}" - ProjectSection(ProjectDependencies) = postProject - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1} = {A133A442-BD0A-4ADE-B117-AD7545E4BDD1} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "version", "version_vs80.vcproj", "{1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs80.vcproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs80.vcproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}" - ProjectSection(ProjectDependencies) = postProject - {E9548DE9-F089-49B7-93A6-30BE2CC311C7} = {E9548DE9-F089-49B7-93A6-30BE2CC311C7} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings_gen", "settingsgen_vs80.vcproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.ActiveCfg = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.Build.0 = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.ActiveCfg = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.Build.0 = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.ActiveCfg = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.Build.0 = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.ActiveCfg = Release|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.Build.0 = Release|x64 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.Build.0 = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|x64.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.Build.0 = Debug|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection -EndGlobal diff --git a/projects/openttd_vs80.vcproj b/projects/openttd_vs80.vcproj deleted file mode 100644 index c5e41e9251..0000000000 --- a/projects/openttd_vs80.vcproj +++ /dev/null @@ -1,4569 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/openttd_vs80.vcproj.in b/projects/openttd_vs80.vcproj.in deleted file mode 100644 index 3363d0d019..0000000000 --- a/projects/openttd_vs80.vcproj.in +++ /dev/null @@ -1,454 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -!!FILES!! - - - - - - - - diff --git a/projects/openttd_vs80.vcproj.user b/projects/openttd_vs80.vcproj.user deleted file mode 100644 index 2d523a7cef..0000000000 --- a/projects/openttd_vs80.vcproj.user +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/projects/openttd_vs90.sln b/projects/openttd_vs90.sln deleted file mode 100644 index a33f315d30..0000000000 --- a/projects/openttd_vs90.sln +++ /dev/null @@ -1,95 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual C++ Express 2008 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs90.vcproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}" - ProjectSection(ProjectDependencies) = postProject - {0F066B23-18DF-4284-8265-F4A5E7E3B966} = {0F066B23-18DF-4284-8265-F4A5E7E3B966} - {0817F629-589E-4A3B-B81A-8647BC571E35} = {0817F629-589E-4A3B-B81A-8647BC571E35} - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC} = {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs90.vcproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "langs", "langs_vs90.vcproj", "{0F066B23-18DF-4284-8265-F4A5E7E3B966}" - ProjectSection(ProjectDependencies) = postProject - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1} = {A133A442-BD0A-4ADE-B117-AD7545E4BDD1} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "version", "version_vs90.vcproj", "{1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs90.vcproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs90.vcproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}" - ProjectSection(ProjectDependencies) = postProject - {E9548DE9-F089-49B7-93A6-30BE2CC311C7} = {E9548DE9-F089-49B7-93A6-30BE2CC311C7} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs90.vcproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.ActiveCfg = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.Build.0 = Debug|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.ActiveCfg = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.Build.0 = Debug|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.ActiveCfg = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.Build.0 = Release|Win32 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.ActiveCfg = Release|x64 - {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.Build.0 = Release|x64 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.Build.0 = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.ActiveCfg = Debug|Win32 - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.Build.0 = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.ActiveCfg = Debug|Win32 - {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.Build.0 = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.ActiveCfg = Debug|Win32 - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.Build.0 = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|x64.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|Win32.ActiveCfg = Debug|Win32 - {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.Build.0 = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.ActiveCfg = Debug|Win32 - {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.Build.0 = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.ActiveCfg = Debug|Win32 - {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.Build.0 = Debug|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection -EndGlobal diff --git a/projects/openttd_vs90.vcproj b/projects/openttd_vs90.vcproj deleted file mode 100644 index d2e5744a2f..0000000000 --- a/projects/openttd_vs90.vcproj +++ /dev/null @@ -1,4566 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/openttd_vs90.vcproj.in b/projects/openttd_vs90.vcproj.in deleted file mode 100644 index b2d3fdeb9c..0000000000 --- a/projects/openttd_vs90.vcproj.in +++ /dev/null @@ -1,451 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -!!FILES!! - - - - - - - - diff --git a/projects/openttd_vs90.vcproj.user b/projects/openttd_vs90.vcproj.user deleted file mode 100644 index b49492a503..0000000000 --- a/projects/openttd_vs90.vcproj.user +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/projects/settings_vs100.vcxproj b/projects/settings_vs100.vcxproj deleted file mode 100644 index 61b289757a..0000000000 --- a/projects/settings_vs100.vcxproj +++ /dev/null @@ -1,54 +0,0 @@ - - - - - Debug - Win32 - - - - settings - {0817F629-589E-4A3B-B81A-8647BC571E35} - settings - - - - Makefile - - - - - - - - - -..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble ..\src\table\company_settings.ini ..\src\table\currency_settings.ini ..\src\table\gameopt_settings.ini ..\src\table\misc_settings.ini ..\src\table\settings.ini ..\src\table\win32_settings.ini ..\src\table\window_settings.ini - - - - <_ProjectFileVersion>10.0.30319.1 - ..\objs\settings\table\ - ..\objs\settings\table\ - $(SettingsCommandLine) - $(SettingsCommandLine) - del ..\objs\settings\table\settings.h - ..\objs\settings\table\settings.h - - - - - - - - - - - - - - - - - - diff --git a/projects/settings_vs100.vcxproj.filters b/projects/settings_vs100.vcxproj.filters deleted file mode 100644 index 8caf9fa0a6..0000000000 --- a/projects/settings_vs100.vcxproj.filters +++ /dev/null @@ -1,35 +0,0 @@ - - - - - {21deca6c-8df4-4f34-9dad-17d7781cd5a0} - - - - - INI - - - INI - - - INI - - - INI - - - INI - - - INI - - - INI - - - - - - - diff --git a/projects/settings_vs100.vcxproj.filters.in b/projects/settings_vs100.vcxproj.filters.in deleted file mode 100644 index 08f90670d2..0000000000 --- a/projects/settings_vs100.vcxproj.filters.in +++ /dev/null @@ -1,15 +0,0 @@ - - - - - {21deca6c-8df4-4f34-9dad-17d7781cd5a0} - - - -!!FILES!! - - - - - - diff --git a/projects/settings_vs100.vcxproj.in b/projects/settings_vs100.vcxproj.in deleted file mode 100644 index 46064b53cf..0000000000 --- a/projects/settings_vs100.vcxproj.in +++ /dev/null @@ -1,48 +0,0 @@ - - - - - Debug - Win32 - - - - settings - {0817F629-589E-4A3B-B81A-8647BC571E35} - settings - - - - Makefile - - - - - - - - - -!!FILTERS!! - - - - <_ProjectFileVersion>10.0.30319.1 - ..\objs\settings\table\ - ..\objs\settings\table\ - $(SettingsCommandLine) - $(SettingsCommandLine) - del ..\objs\settings\table\settings.h - ..\objs\settings\table\settings.h - - -!!FILES!! - - - - - - - - - diff --git a/projects/settings_vs80.vcproj b/projects/settings_vs80.vcproj deleted file mode 100644 index 0084dcbc57..0000000000 --- a/projects/settings_vs80.vcproj +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/settings_vs80.vcproj.in b/projects/settings_vs80.vcproj.in deleted file mode 100644 index a0f10fb096..0000000000 --- a/projects/settings_vs80.vcproj.in +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - -!!FILES!! - - - - - - - - - diff --git a/projects/settings_vs90.vcproj b/projects/settings_vs90.vcproj deleted file mode 100644 index 4361e8df54..0000000000 --- a/projects/settings_vs90.vcproj +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/settings_vs90.vcproj.in b/projects/settings_vs90.vcproj.in deleted file mode 100644 index a342e2b327..0000000000 --- a/projects/settings_vs90.vcproj.in +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - -!!FILES!! - - - - - - - - - diff --git a/projects/settingsgen_vs100.vcxproj b/projects/settingsgen_vs100.vcxproj deleted file mode 100644 index b7a379034d..0000000000 --- a/projects/settingsgen_vs100.vcxproj +++ /dev/null @@ -1,81 +0,0 @@ - - - - - Debug - Win32 - - - - settingsgen - {E9548DE9-F089-49B7-93A6-30BE2CC311C7} - settings - - - - Application - MultiByte - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\objs\settings\ - ..\objs\settings\ - settings_gen - - - - - - - - %(Inputs) - - - MinSpace - Size - SETTINGSGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - All - $(IntDir)$(TargetName).pdb - Level3 - true - ProgramDatabase - MultiThreadedDebug - - - $(OutDir)settings_gen.exe - true - false - - - Console - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/settingsgen_vs100.vcxproj.filters b/projects/settingsgen_vs100.vcxproj.filters deleted file mode 100644 index c8afe0c8ed..0000000000 --- a/projects/settingsgen_vs100.vcxproj.filters +++ /dev/null @@ -1,32 +0,0 @@ - - - - - {a4678737-b3b3-4be5-9db1-fa6ccd164c59} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - - - - - - diff --git a/projects/settingsgen_vs80.vcproj b/projects/settingsgen_vs80.vcproj deleted file mode 100644 index 7568ce9748..0000000000 --- a/projects/settingsgen_vs80.vcproj +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/settingsgen_vs90.vcproj b/projects/settingsgen_vs90.vcproj deleted file mode 100644 index 015ddd2af5..0000000000 --- a/projects/settingsgen_vs90.vcproj +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/strgen_vs100.vcxproj b/projects/strgen_vs100.vcxproj deleted file mode 100644 index 7a43b4debb..0000000000 --- a/projects/strgen_vs100.vcxproj +++ /dev/null @@ -1,94 +0,0 @@ - - - - - Debug - Win32 - - - - strgen - {A133A442-BD0A-4ADE-B117-AD7545E4BDD1} - strgen - - - - Application - false - MultiByte - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(SolutionDir)..\objs\strgen\ - $(SolutionDir)..\objs\strgen\ - false - AllRules.ruleset - - - - - - .\Debug/strgen.tlb - - - - - /MP %(AdditionalOptions) - MinSpace - Size - STRGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - Default - MultiThreadedDebug - - - All - $(IntDir) - $(IntDir) - $(IntDir)$(TargetName).pdb - Level3 - true - true - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x041d - - - true - true - $(IntDir)strgen.pdb - Console - false - - - MachineX86 - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/strgen_vs100.vcxproj.filters b/projects/strgen_vs100.vcxproj.filters deleted file mode 100644 index 58864ee691..0000000000 --- a/projects/strgen_vs100.vcxproj.filters +++ /dev/null @@ -1,35 +0,0 @@ - - - - - {5894294c-d4dc-41f0-be31-e56cff4e0405} - cpp;c;cxx;rc;def;r;odl;idl;hpj;bat - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - - - - - - - - diff --git a/projects/strgen_vs80.vcproj b/projects/strgen_vs80.vcproj deleted file mode 100644 index 4450279303..0000000000 --- a/projects/strgen_vs80.vcproj +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/strgen_vs90.vcproj b/projects/strgen_vs90.vcproj deleted file mode 100644 index ca194e078f..0000000000 --- a/projects/strgen_vs90.vcproj +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/version_vs100.vcxproj b/projects/version_vs100.vcxproj deleted file mode 100644 index 689a8bd664..0000000000 --- a/projects/version_vs100.vcxproj +++ /dev/null @@ -1,42 +0,0 @@ - - - - - Debug - Win32 - - - - version - {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC} - version - - - - Makefile - MultiByte - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(SolutionDir)..\objs\version\ - $(SolutionDir)..\objs\version\ - cscript "$(ProjectDir)/determineversion.vbs" - cscript "$(ProjectDir)/determineversion.vbs" - ..\src\rev.cpp - del ..\src\rev.cpp - - - - - - - - - diff --git a/projects/version_vs80.vcproj b/projects/version_vs80.vcproj deleted file mode 100644 index 4b1660b69d..0000000000 --- a/projects/version_vs80.vcproj +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/version_vs90.vcproj b/projects/version_vs90.vcproj deleted file mode 100644 index 3c3d58a692..0000000000 --- a/projects/version_vs90.vcproj +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - From 16a36dffa0ccd7753de0100ee320a4982bb1945c Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 21 Nov 2018 19:45:42 +0100 Subject: [PATCH 081/622] Update: Translations from eints spanish: 2 changes by SilverSurferZzZ --- src/lang/spanish.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 1ba5d1ca98..6fa26fb26e 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -476,6 +476,7 @@ STR_ABOUT_MENU_SCREENSHOT :Captura de pant STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Captura con zoom de cerca STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Captura con zoom por defecto STR_ABOUT_MENU_GIANT_SCREENSHOT :Captura de mapa completo +STR_ABOUT_MENU_SHOW_FRAMERATE :Mostrar fotogramas por segundo - FPS STR_ABOUT_MENU_ABOUT_OPENTTD :Acerca de 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Alineador de sprites STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Activar cajas delimitadoras @@ -651,6 +652,7 @@ STR_MUSIC_RULER_MARKER :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}No hay música disponible STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Pista STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Título From f35a59fd3834f55bf6bbfac5c487affcc993475c Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 24 Nov 2018 19:45:43 +0100 Subject: [PATCH 082/622] Update: Translations from eints spanish (mexican): 2 changes by Absay --- src/lang/spanish_MX.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 2a4e930a79..350c7919e3 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -2971,6 +2971,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :La lectura exce STR_NEWGRF_ERROR_GRM_FAILED :Recursos GRF solicitados no disponibles (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} fue desactivado por {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formato de colocación de sprites no válido o desconocido (sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Demasiados elementos en la lista de valores de propiedad (sprite {3:NUM}, property {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Llamada de producción de industria no válida (sprite {3:NUM}, "{1:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}¡Precaución! From c84b9913bd80e3c596e00faabc0a924c12a9cb38 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sat, 3 Nov 2018 13:24:36 +0100 Subject: [PATCH 083/622] Fix #6676: Prevent helicopters from stopping in midair during some kinds of landing This adds a new flag that gets stored in the savegame, but it should still be compatible both ways, hence no save version bump. --- src/aircraft.h | 2 ++ src/aircraft_cmd.cpp | 8 +++++++- src/vehicle_cmd.cpp | 3 ++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/aircraft.h b/src/aircraft.h index d4deba5809..f4fce09be1 100644 --- a/src/aircraft.h +++ b/src/aircraft.h @@ -45,6 +45,8 @@ enum AirVehicleFlags { * landscape at a fixed altitude. This only has effect when there are more than 15 height levels. */ VAF_IN_MAX_HEIGHT_CORRECTION = 1, ///< The vehicle is currently lowering its altitude because it hit the upper bound. VAF_IN_MIN_HEIGHT_CORRECTION = 2, ///< The vehicle is currently raising its altitude because it hit the lower bound. + + VAF_HELI_DIRECT_DESCENT = 3, ///< The helicopter is descending directly at its destination (helipad or in front of hangar) }; static const int ROTOR_Z_OFFSET = 5; ///< Z Offset between helicopter- and rotorsprite. diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index fe8cf927d0..b495a1dff5 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -918,6 +918,8 @@ static bool AircraftController(Aircraft *v) /* Helicopter landing. */ if (amd.flag & AMED_HELI_LOWER) { + SetBit(v->flags, VAF_HELI_DIRECT_DESCENT); + if (st == NULL) { /* FIXME - AircraftController -> if station no longer exists, do not land * helicopter will circle until sign disappears, then go to next order @@ -938,7 +940,10 @@ static bool AircraftController(Aircraft *v) Vehicle *u = v->Next()->Next(); /* Increase speed of rotors. When speed is 80, we've landed. */ - if (u->cur_speed >= 80) return true; + if (u->cur_speed >= 80) { + ClrBit(v->flags, VAF_HELI_DIRECT_DESCENT); + return true; + } u->cur_speed += 4; } else { count = UpdateAircraftSpeed(v); @@ -1603,6 +1608,7 @@ static void AircraftEventHandler_Flying(Aircraft *v, const AirportFTAClass *apc) uint16 tsubspeed = v->subspeed; if (!AirportHasBlock(v, current, apc)) { v->state = landingtype; // LANDING / HELILANDING + if (v->state == HELILANDING) SetBit(v->flags, VAF_HELI_DIRECT_DESCENT); /* it's a bit dirty, but I need to set position to next position, otherwise * if there are multiple runways, plane won't know which one it took (because * they all have heading LANDING). And also occupy that block! */ diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 17ffb53ac4..9231ad689d 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -542,7 +542,8 @@ CommandCost CmdStartStopVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, case VEH_AIRCRAFT: { Aircraft *a = Aircraft::From(v); /* cannot stop airplane when in flight, or when taking off / landing */ - if (!(v->vehstatus & VS_CRASHED) && a->state >= STARTTAKEOFF && a->state < TERM7) return_cmd_error(STR_ERROR_AIRCRAFT_IS_IN_FLIGHT); + if (a->state >= STARTTAKEOFF && a->state < TERM7) return_cmd_error(STR_ERROR_AIRCRAFT_IS_IN_FLIGHT); + if (HasBit(a->flags, VAF_HELI_DIRECT_DESCENT)) return_cmd_error(STR_ERROR_AIRCRAFT_IS_IN_FLIGHT); break; } From c618a7c093cf0a0d0ad042ce7c382706d7f65cb1 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Fri, 2 Nov 2018 16:54:08 +0100 Subject: [PATCH 084/622] Fix 6298b96: Changing music set did not save new setting --- src/music_gui.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/music_gui.cpp b/src/music_gui.cpp index 7bf08fd1dc..87a073b0a7 100644 --- a/src/music_gui.cpp +++ b/src/music_gui.cpp @@ -173,6 +173,9 @@ void MusicSystem::ChangeMusicSet(const char *set_name) { BaseMusic::SetSet(set_name); + free(BaseMusic::ini_set); + BaseMusic::ini_set = stredup(set_name); + this->BuildPlaylists(); this->ChangePlaylist(this->selected_playlist); From 810887af3043eed7506f5e0c3b7bc429cee8fa31 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Thu, 1 Nov 2018 18:46:19 +0100 Subject: [PATCH 085/622] Fix #6498: Use int64 for all company rating calculations --- src/economy.cpp | 14 +++++++------- src/economy_func.h | 2 +- src/graph_gui.cpp | 10 +++++----- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/economy.cpp b/src/economy.cpp index ad9895ba9c..c7ffa96cc7 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -95,7 +95,7 @@ const ScoreInfo _score_info[] = { { 0, 0} // SCORE_TOTAL }; -int _score_part[MAX_COMPANIES][SCORE_END]; +int64 _score_part[MAX_COMPANIES][SCORE_END]; Economy _economy; Prices _price; Money _additional_cash_required; @@ -183,7 +183,7 @@ int UpdateCompanyRatingAndValue(Company *c, bool update) _score_part[owner][SCORE_VEHICLES] = num; /* Don't allow negative min_profit to show */ if (min_profit > 0) { - _score_part[owner][SCORE_MIN_PROFIT] = ClampToI32(min_profit); + _score_part[owner][SCORE_MIN_PROFIT] = min_profit; } } @@ -213,10 +213,10 @@ int UpdateCompanyRatingAndValue(Company *c, bool update) } while (++cee, --numec); if (min_income > 0) { - _score_part[owner][SCORE_MIN_INCOME] = ClampToI32(min_income); + _score_part[owner][SCORE_MIN_INCOME] = min_income; } - _score_part[owner][SCORE_MAX_INCOME] = ClampToI32(max_income); + _score_part[owner][SCORE_MAX_INCOME] = max_income; } } @@ -230,7 +230,7 @@ int UpdateCompanyRatingAndValue(Company *c, bool update) total_delivered += cee->delivered_cargo.GetSum(); } while (++cee, --numec); - _score_part[owner][SCORE_DELIVERED] = ClampToI32(total_delivered); + _score_part[owner][SCORE_DELIVERED] = total_delivered; } } @@ -242,13 +242,13 @@ int UpdateCompanyRatingAndValue(Company *c, bool update) /* Generate score for company's money */ { if (c->money > 0) { - _score_part[owner][SCORE_MONEY] = ClampToI32(c->money); + _score_part[owner][SCORE_MONEY] = c->money; } } /* Generate score for loan */ { - _score_part[owner][SCORE_LOAN] = ClampToI32(_score_info[SCORE_LOAN].needed - c->current_loan); + _score_part[owner][SCORE_LOAN] = _score_info[SCORE_LOAN].needed - c->current_loan; } /* Now we calculate the score for each item.. */ diff --git a/src/economy_func.h b/src/economy_func.h index 111ce85a27..7b369b7d60 100644 --- a/src/economy_func.h +++ b/src/economy_func.h @@ -22,7 +22,7 @@ void ResetPriceBaseMultipliers(); void SetPriceBaseMultiplier(Price price, int factor); extern const ScoreInfo _score_info[]; -extern int _score_part[MAX_COMPANIES][SCORE_END]; +extern int64 _score_part[MAX_COMPANIES][SCORE_END]; extern Economy _economy; /* Prices and also the fractional part. */ extern Prices _price; diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index f4334429fb..48b8c4c84a 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -1402,9 +1402,9 @@ struct PerformanceRatingDetailWindow : Window { int colour_notdone = _colour_gradient[COLOUR_RED][4]; /* Draw all the score parts */ - int val = _score_part[company][score_type]; - int needed = _score_info[score_type].needed; - int score = _score_info[score_type].score; + int64 val = _score_part[company][score_type]; + int64 needed = _score_info[score_type].needed; + int score = _score_info[score_type].score; /* SCORE_TOTAL has his own rules ;) */ if (score_type == SCORE_TOTAL) { @@ -1422,7 +1422,7 @@ struct PerformanceRatingDetailWindow : Window { DrawString(this->score_info_left, this->score_info_right, text_top, STR_BLACK_COMMA, TC_FROMSTRING, SA_RIGHT); /* Calculate the %-bar */ - uint x = Clamp(val, 0, needed) * this->bar_width / needed; + uint x = Clamp(val, 0, needed) * this->bar_width / needed; bool rtl = _current_text_dir == TD_RTL; if (rtl) { x = this->bar_right - x; @@ -1435,7 +1435,7 @@ struct PerformanceRatingDetailWindow : Window { if (x != this->bar_right) GfxFillRect(x, bar_top, this->bar_right, bar_top + this->bar_height, rtl ? colour_done : colour_notdone); /* Draw it */ - SetDParam(0, Clamp(val, 0, needed) * 100 / needed); + SetDParam(0, Clamp(val, 0, needed) * 100 / needed); DrawString(this->bar_left, this->bar_right, text_top, STR_PERFORMANCE_DETAIL_PERCENT, TC_FROMSTRING, SA_HOR_CENTER); /* SCORE_LOAN is inversed */ From 1ee20fac9a73e72c07b42fcab87a6b7eb7d9113b Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Tue, 30 Oct 2018 18:22:57 +0100 Subject: [PATCH 086/622] Codechange: Wrong name for include guard --- src/framerate_type.h | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/framerate_type.h b/src/framerate_type.h index 295939efec..13e7ee6904 100644 --- a/src/framerate_type.h +++ b/src/framerate_type.h @@ -7,8 +7,13 @@ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . */ -#ifndef FRAMERATE_GUI_H -#define FRAMERATE_GUI_H +/** @file framerate_type.h + * Types for recording game performance data. + * @see framerate_gui.cpp for implementation + */ + +#ifndef FRAMERATE_TYPE_H +#define FRAMERATE_TYPE_H #include "stdafx.h" #include "core/enum_type.hpp" @@ -64,4 +69,4 @@ public: void ShowFramerateWindow(); -#endif /* FRAMERATE_GUI_H */ +#endif /* FRAMERATE_TYPE_H */ From cb1fcc4765bae30e818f8c3c25e33c6e51273d8c Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sat, 27 Oct 2018 18:04:40 +0200 Subject: [PATCH 087/622] Doc: More notes for developers adding new PerformanceElements --- src/framerate_gui.cpp | 54 +++++++++++++++++++++++++++++++++++-------- src/framerate_type.h | 37 +++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 9 deletions(-) diff --git a/src/framerate_gui.cpp b/src/framerate_gui.cpp index 021958d323..4f1c0e2e1b 100644 --- a/src/framerate_gui.cpp +++ b/src/framerate_gui.cpp @@ -22,11 +22,14 @@ #include "widgets/framerate_widget.h" +/** + * Private declarations for performance measurement implementation + */ namespace { /** Number of data points to keep in buffer for each performance measurement */ const int NUM_FRAMERATE_POINTS = 512; - /** Units a second is divided into in performance measurements */ + /** %Units a second is divided into in performance measurements */ const TimingMeasurement TIMESTAMP_PRECISION = 1000000; struct PerformanceData { @@ -51,8 +54,15 @@ namespace { /** Start time for current accumulation cycle */ TimingMeasurement acc_timestamp; + /** + * Initialize a data element with an expected collection rate + * @param expected_rate + * Expected number of cycles per second of the performance element. Use 1 if unknown or not relevant. + * The rate is used for highlighting slow-running elements in the GUI. + */ explicit PerformanceData(double expected_rate) : expected_rate(expected_rate), next_index(0), prev_index(0), num_valid(0) { } + /** Collect a complete measurement, given start and ending times for a processing block */ void Add(TimingMeasurement start_time, TimingMeasurement end_time) { this->durations[this->next_index] = end_time - start_time; @@ -63,6 +73,7 @@ namespace { this->num_valid = min(NUM_FRAMERATE_POINTS, this->num_valid + 1); } + /** Begin an accumulation of multiple measurements into a single value, from a given start time */ void BeginAccumulate(TimingMeasurement start_time) { this->timestamps[this->next_index] = this->acc_timestamp; @@ -76,11 +87,13 @@ namespace { this->acc_timestamp = start_time; } + /** Accumulate a period onto the current measurement */ void AddAccumulate(TimingMeasurement duration) { this->acc_duration += duration; } + /** Indicate a pause/expected discontinuity in processing the element */ void AddPause(TimingMeasurement start_time) { if (this->durations[this->prev_index] != INVALID_DURATION) { @@ -125,11 +138,11 @@ namespace { int last_point = this->next_index - this->num_valid; if (last_point < 0) last_point += NUM_FRAMERATE_POINTS; - /** Number of data points collected */ + /* Number of data points collected */ int count = 0; - /** Time of previous data point */ + /* Time of previous data point */ TimingMeasurement last = this->timestamps[point]; - /** Total duration covered by collected points */ + /* Total duration covered by collected points */ TimingMeasurement total = 0; while (point != last_point) { @@ -149,9 +162,14 @@ namespace { } }; - /** Game loop rate, cycles per second */ + /** %Game loop rate, cycles per second */ static const double GL_RATE = 1000.0 / MILLISECONDS_PER_TICK; + /** + * Storage for all performance element measurements. + * Elements are initialized with the expected rate in recorded values per second. + * @hideinitializer + */ PerformanceData _pf_data[PFE_MAX] = { PerformanceData(GL_RATE), // PFE_GAMELOOP PerformanceData(1), // PFE_ACC_GL_ECONOMY @@ -182,7 +200,10 @@ static TimingMeasurement GetPerformanceTimer() } -/** Begin a cycle of a measured element. */ +/** + * Begin a cycle of a measured element. + * @param elem The element to be measured + */ PerformanceMeasurer::PerformanceMeasurer(PerformanceElement elem) { assert(elem < PFE_MAX); @@ -203,14 +224,20 @@ void PerformanceMeasurer::SetExpectedRate(double rate) _pf_data[this->elem].expected_rate = rate; } -/** Indicate that a cycle of "pause" where no processing occurs. */ +/** + * Indicate that a cycle of "pause" where no processing occurs. + * @param elem The element not currently being processed + */ void PerformanceMeasurer::Paused(PerformanceElement elem) { _pf_data[elem].AddPause(GetPerformanceTimer()); } -/** Begin measuring one block of the accumulating value. */ +/** + * Begin measuring one block of the accumulating value. + * @param elem The element to be measured + */ PerformanceAccumulator::PerformanceAccumulator(PerformanceElement elem) { assert(elem < PFE_MAX); @@ -225,7 +252,11 @@ PerformanceAccumulator::~PerformanceAccumulator() _pf_data[this->elem].AddAccumulate(GetPerformanceTimer() - this->start_time); } -/** Store the previous accumulator value and reset for a new cycle of accumulating measurements. */ +/** + * Store the previous accumulator value and reset for a new cycle of accumulating measurements. + * @note This function must be called once per frame, otherwise measurements are not collected. + * @param elem The element to begin a new measurement cycle of + */ void PerformanceAccumulator::Reset(PerformanceElement elem) { _pf_data[elem].BeginAccumulate(GetPerformanceTimer()); @@ -235,6 +266,7 @@ void PerformanceAccumulator::Reset(PerformanceElement elem) void ShowFrametimeGraphWindow(PerformanceElement elem); +/** @hideinitializer */ static const NWidgetPart _framerate_window_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), @@ -478,6 +510,7 @@ static WindowDesc _framerate_display_desc( ); +/** @hideinitializer */ static const NWidgetPart _frametime_graph_window_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), @@ -758,17 +791,20 @@ static WindowDesc _frametime_graph_window_desc( +/** Open the general framerate window */ void ShowFramerateWindow() { AllocateWindowDescFront(&_framerate_display_desc, 0); } +/** Open a graph window for a performance element */ void ShowFrametimeGraphWindow(PerformanceElement elem) { if (elem < PFE_FIRST || elem >= PFE_MAX) return; // maybe warn? AllocateWindowDescFront(&_frametime_graph_window_desc, elem, true); } +/** Print performance statistics to game console */ void ConPrintFramerate() { const int count1 = NUM_FRAMERATE_POINTS / 8; diff --git a/src/framerate_type.h b/src/framerate_type.h index 13e7ee6904..8df9a279a1 100644 --- a/src/framerate_type.h +++ b/src/framerate_type.h @@ -9,6 +9,28 @@ /** @file framerate_type.h * Types for recording game performance data. + * + * @par Adding new measurements + * Adding a new measurement requires multiple steps, which are outlined here. + * The first thing to do is add a new member of the #PerformanceElement enum. + * It must be added before \c PFE_MAX and should be added in a logical place. + * For example, an element of the game loop would be added next to the other game loop elements, and a rendering element next to the other rendering elements. + * + * @par + * Second is adding a member to the \link anonymous_namespace{framerate_gui.cpp}::_pf_data _pf_data \endlink array, in the same position as the new #PerformanceElement member. + * + * @par + * Third is adding strings for the new element. There is an array in #ConPrintFramerate with strings used for the console command. + * Additionally, there are two sets of strings in \c english.txt for two GUI uses, also in the #PerformanceElement order. + * Search for \c STR_FRAMERATE_GAMELOOP and \c STR_FRAMETIME_CAPTION_GAMELOOP in \c english.txt to find those. + * + * @par + * Last is actually adding the measurements. There are two ways to measure, either one-shot (a single function/block handling all processing), + * or as an accumulated element (multiple functions/blocks that need to be summed across each frame/tick). + * Use either the PerformanceMeasurer or the PerformanceAccumulator class respectively for the two cases. + * Either class is used by instantiating an object of it at the beginning of the block to be measured, so it auto-destructs at the end of the block. + * For PerformanceAccumulator, make sure to also call PerformanceAccumulator::Reset once at the beginning of a new frame. Usually the StateGameLoop function is appropriate for this. + * * @see framerate_gui.cpp for implementation */ @@ -18,6 +40,12 @@ #include "stdafx.h" #include "core/enum_type.hpp" +/** + * Elements of game performance that can be measured. + * + * @note When adding new elements here, make sure to also update all other locations depending on the length and order of this enum. + * See Adding new measurements above. + */ enum PerformanceElement { PFE_FIRST = 0, PFE_GAMELOOP = 0, ///< Speed of gameloop processing. @@ -36,12 +64,15 @@ enum PerformanceElement { }; DECLARE_POSTFIX_INCREMENT(PerformanceElement) +/** Type used to hold a performance timing measurement */ typedef uint64 TimingMeasurement; /** * RAII class for measuring simple elements of performance. * Construct an object with the appropriate element parameter when processing begins, * time is automatically taken when the object goes out of scope again. + * + * Call Paused at the start of a frame if the processing of this element is paused. */ class PerformanceMeasurer { PerformanceElement elem; @@ -57,6 +88,12 @@ public: * RAII class for measuring multi-step elements of performance. * At the beginning of a frame, call Reset on the element, then construct an object in the scope where * each processing cycle happens. The measurements are summed between resets. + * + * Usually StateGameLoop is an appropriate function to place Reset calls in, but for elements with + * more isolated scopes it can also be appropriate to Reset somewhere else. + * An example is the CallVehicleTicks function where all the vehicle type elements are reset. + * + * The PerformanceMeasurer::Paused function can also be used with elements otherwise measured with this class. */ class PerformanceAccumulator { PerformanceElement elem; From 9e30fbab34b4d08064c1faada367d43fecb8d58d Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Thu, 1 Nov 2018 19:56:34 +0100 Subject: [PATCH 088/622] Fix #6864: Normalise colour use in Frame rate window --- src/framerate_gui.cpp | 2 +- src/lang/english.txt | 44 +++++++++++++++++++++---------------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/framerate_gui.cpp b/src/framerate_gui.cpp index 4f1c0e2e1b..7e8e5f34fd 100644 --- a/src/framerate_gui.cpp +++ b/src/framerate_gui.cpp @@ -450,7 +450,7 @@ struct FramerateWindow : Window { void DrawElementTimesColumn(const Rect &r, StringID heading_str, const CachedDecimal *values) const { int y = r.top; - DrawString(r.left, r.right, y, heading_str, TC_FROMSTRING, SA_CENTER); + DrawString(r.left, r.right, y, heading_str, TC_FROMSTRING, SA_CENTER, true); y += FONT_HEIGHT_NORMAL + VSPACING; for (PerformanceElement e = PFE_FIRST; e < PFE_MAX; e++) { diff --git a/src/lang/english.txt b/src/lang/english.txt index cb04a5cbd9..fa2ba0e6ff 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2703,36 +2703,36 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Frame rate STR_FRAMERATE_CAPTION_SMALL :{STRING2}{WHITE} ({DECIMAL}x) -STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Simulation rate: {STRING2} +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulation rate: {STRING2} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Number of game ticks simulated per second. -STR_FRAMERATE_RATE_BLITTER :{WHITE}Graphics frame rate: {STRING2} +STR_FRAMERATE_RATE_BLITTER :{BLACK}Graphics frame rate: {STRING2} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Number of video frames rendered per second. -STR_FRAMERATE_SPEED_FACTOR :{WHITE}Current game speed factor: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Current game speed factor: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}How fast the game is currently running, compared to the expected speed at normal simulation rate. STR_FRAMERATE_CURRENT :{WHITE}Current STR_FRAMERATE_AVERAGE :{WHITE}Average -STR_FRAMERATE_DATA_POINTS :{WHITE}Data based on {COMMA} measurements -STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms -STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms -STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms -STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE} frames/s -STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} frames/s -STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} frames/s +STR_FRAMERATE_DATA_POINTS :{BLACK}Data based on {COMMA} measurements +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} frames/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} frames/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} frames/s STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! -STR_FRAMERATE_GAMELOOP :{WHITE}Game loop total: -STR_FRAMERATE_GL_ECONOMY :{WHITE} Cargo handling: -STR_FRAMERATE_GL_TRAINS :{WHITE} Train ticks: -STR_FRAMERATE_GL_ROADVEHS :{WHITE} Road vehicle ticks: -STR_FRAMERATE_GL_SHIPS :{WHITE} Ship ticks: -STR_FRAMERATE_GL_AIRCRAFT :{WHITE} Aircraft ticks: -STR_FRAMERATE_GL_LANDSCAPE :{WHITE} World ticks: -STR_FRAMERATE_GL_LINKGRAPH :{WHITE} Link graph delay: -STR_FRAMERATE_DRAWING :{WHITE}Graphics rendering: -STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} World viewports: -STR_FRAMERATE_VIDEO :{WHITE}Video output: -STR_FRAMERATE_SOUND :{WHITE}Sound mixing: +STR_FRAMERATE_GAMELOOP :{BLACK}Game loop total: +STR_FRAMERATE_GL_ECONOMY :{BLACK} Cargo handling: +STR_FRAMERATE_GL_TRAINS :{BLACK} Train ticks: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Road vehicle ticks: +STR_FRAMERATE_GL_SHIPS :{BLACK} Ship ticks: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Aircraft ticks: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} World ticks: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Link graph delay: +STR_FRAMERATE_DRAWING :{BLACK}Graphics rendering: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} World viewports: +STR_FRAMERATE_VIDEO :{BLACK}Video output: +STR_FRAMERATE_SOUND :{BLACK}Sound mixing: ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Game loop From af4a21bd827b1baf05cdb53973b4701464f6e2f0 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 25 Nov 2018 19:45:41 +0100 Subject: [PATCH 089/622] Update: Translations from eints korean: 4 changes by telk5093 spanish: 3 changes by SilverSurferZzZ russian: 8 changes by Lone_Wolf --- src/lang/korean.txt | 6 ++++-- src/lang/russian.txt | 8 ++++++++ src/lang/spanish.txt | 3 +++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 249189ebb0..05df4e0912 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1007,7 +1007,7 @@ STR_GAME_OPTIONS_BASE_MUSIC_STATUS :{RED}{NUM}개 STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}기본 배경 음악 세트에 대한 추가 정보를 봅니다. STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}지원되는 해상도 목록을 불러오는데 실패하였습니다. -STR_ERROR_FULLSCREEN_FAILED :{WHITE}풀스크린 모드 실패 +STR_ERROR_FULLSCREEN_FAILED :{WHITE}전체화면 모드 실패 # Custom currency window @@ -1269,7 +1269,7 @@ STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :이 설정을 STR_CONFIG_SETTING_ORDER_REVIEW_OFF :검사하지 않음 STR_CONFIG_SETTING_ORDER_REVIEW_EXDEPOT :정지한 차량을 제외하고 검사 STR_CONFIG_SETTING_ORDER_REVIEW_ON :모든 차량을 검사 -STR_CONFIG_SETTING_WARN_INCOME_LESS :차량의 수입이 적자일때 경고하기: {STRING} +STR_CONFIG_SETTING_WARN_INCOME_LESS :차량의 수입이 적자일 때 경고하기: {STRING} STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :이 설정을 켜면, 지난 해에 수익이 없는 차량이 있으면 뉴스 메시지로 알려줍니다. STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :옛날 차량을 사라지지 않고 계속 만들 수 있게 함: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :이 설정을 켜면, 오래된 차량 모델을 포함하여 모든 차량 모델을 도입 이후에 계속 사용할 수 있게 됩니다. @@ -2971,6 +2971,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :유사 스프 STR_NEWGRF_ERROR_GRM_FAILED :요청한 GRF 자원을 사용할 수 없음 (스프라이트 {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING}(은)는 {STRING} 때문에 사용할 수 없습니다 STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :유효하지 않은/알 수 없는 스프라이트 구조 유형 (스프라이트 {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :속성값 목록에 너무 많은 요소가 있음 (스프라이트 {3:NUM}, 속성 {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :유효하지 않은 산업 생산 콜백 (스프라이트 {3:NUM}, "{1:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}경고! diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 542c1384a4..78e084ded7 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -601,6 +601,7 @@ STR_ABOUT_MENU_SCREENSHOT :Снимок э STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Снимок экрана в макс. приближении STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Снимок экрана в обычном масштабе STR_ABOUT_MENU_GIANT_SCREENSHOT :Снимок всей карты +STR_ABOUT_MENU_SHOW_FRAMERATE :Показать кол-во кадров/с STR_ABOUT_MENU_ABOUT_OPENTTD :Об игре STR_ABOUT_MENU_SPRITE_ALIGNER :Выравнивание спрайтов STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Переключить ограничивающие рамки @@ -959,6 +960,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Директор) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}Компания «{STRING}» профинансировала основание города {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Основан новый город - {TOWN}! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Новое предприятие! {STRING} стро{G 0 и и и я}тся возле г.{NBSP}{TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Новое предприятие! {STRING} заложен{G 0 "" а о ы} возле г.{NBSP}{TOWN}! @@ -2880,6 +2882,9 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Кол-во игровых циклов, рассчитываемых в секунду. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Кол-во отображаемых кадров в секунду. +STR_FRAMERATE_DATA_POINTS :{WHITE}Данные по {COMMA} измерени{P ю ям ям} STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} мс STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} мс STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} мс @@ -2889,8 +2894,11 @@ STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{ STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} мс STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} с ############ Leave those lines in this order!! +STR_FRAMERATE_GL_LINKGRAPH :{WHITE} Задержка графа распределения: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Задержка графа распределения +STR_FRAMETIME_CAPTION_DRAWING :Отрисовка графики ############ End of leave-in-this-order diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 6fa26fb26e..8bec2f723a 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -2693,9 +2693,12 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Fotogramas por segundo - FPS STR_FRAMERATE_CURRENT :{WHITE}Actual STR_FRAMERATE_AVERAGE :{WHITE}Medio +STR_FRAMERATE_DATA_POINTS :{WHITE}Datos basados en {COMMA} medidas +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms ############ Leave those lines in this order!! ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_DRAWING :Renderizado gráfico ############ End of leave-in-this-order From 868c6f924a035779316c4875bc407c0290a0ebc6 Mon Sep 17 00:00:00 2001 From: damfr Date: Sun, 25 Nov 2018 20:54:25 +0100 Subject: [PATCH 090/622] Add: Filter box to the save and load windows (#6974) Save and heightmap names can be filtered. --- src/fios.h | 7 ++ src/fios_gui.cpp | 132 ++++++++++++++++++++++++++++++++++---- src/lang/english.txt | 1 + src/widgets/fios_widget.h | 1 + 4 files changed, 127 insertions(+), 14 deletions(-) diff --git a/src/fios.h b/src/fios.h index 5e17e8ee17..24c9f370eb 100644 --- a/src/fios.h +++ b/src/fios.h @@ -18,6 +18,13 @@ #include "network/core/tcp_content.h" +/** Special values for save-load window for the data parameter of #InvalidateWindowData. */ +enum SaveLoadInvalidateWindowData { + SLIWD_RESCAN_FILES, ///< Rescan all files (when changed directory, ...) + SLIWD_SELECTION_CHANGES, ///< File selection has changed (user click, ...) + SLIWD_FILTER_CHANGES, ///< The filename filter has changed (via the editbox) +}; + typedef SmallMap CompanyPropertiesMap; /** diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index 9aa5277acf..e149d07b47 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -28,6 +28,7 @@ #include "date_func.h" #include "core/geometry_func.hpp" #include "gamelog.h" +#include "stringfilter_type.h" #include "widgets/fios_widget.h" @@ -76,9 +77,20 @@ static const NWidgetPart _nested_load_dialog_widgets[] = { NWidget(WWT_CAPTION, COLOUR_GREY, WID_SL_CAPTION), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), EndContainer(), + /* Current directory and free space */ NWidget(WWT_PANEL, COLOUR_GREY, WID_SL_BACKGROUND), SetFill(1, 0), SetResize(1, 0), EndContainer(), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(NWID_VERTICAL), + /* Left side : filter box and available files */ + NWidget(WWT_PANEL, COLOUR_GREY), SetFill(1, 1), SetResize(1, 1), + /* Filter box with label */ + NWidget(NWID_HORIZONTAL), SetPadding(WD_FRAMERECT_TOP, 0, WD_FRAMERECT_BOTTOM, 0), + SetPIP(WD_FRAMETEXT_LEFT, WD_FRAMETEXT_RIGHT, 0), + NWidget(WWT_TEXT, COLOUR_GREY), SetFill(0, 1), SetDataTip(STR_SAVELOAD_FILTER_TITLE , STR_NULL), + NWidget(WWT_EDITBOX, COLOUR_GREY, WID_SL_FILTER), SetFill(1, 0), SetMinimalSize(50, 12), SetResize(1, 0), + SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), + EndContainer(), + /* Sort buttons */ NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SORT_BYNAME), SetDataTip(STR_SORT_BY_CAPTION_NAME, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0), @@ -86,6 +98,7 @@ static const NWidgetPart _nested_load_dialog_widgets[] = { EndContainer(), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SL_HOME_BUTTON), SetMinimalSize(12, 12), SetDataTip(SPR_HOUSE_ICON, STR_SAVELOAD_HOME_BUTTON), EndContainer(), + /* Files */ NWidget(WWT_PANEL, COLOUR_GREY, WID_SL_FILE_BACKGROUND), NWidget(NWID_HORIZONTAL), NWidget(WWT_INSET, COLOUR_GREY, WID_SL_DRIVES_DIRECTORIES_LIST), SetFill(1, 1), SetPadding(2, 1, 2, 2), @@ -98,6 +111,8 @@ static const NWidgetPart _nested_load_dialog_widgets[] = { EndContainer(), EndContainer(), EndContainer(), + + /* Right side : game details */ NWidget(WWT_PANEL, COLOUR_GREY), NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SL_DETAILS), SetResize(1, 1), SetFill(1, 1), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_MISSING_NEWGRFS), SetDataTip(STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON, STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_TOOLTIP), SetFill(1, 0), SetResize(1, 0), @@ -119,8 +134,18 @@ static const NWidgetPart _nested_load_heightmap_dialog_widgets[] = { NWidget(WWT_CAPTION, COLOUR_GREY, WID_SL_CAPTION), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), EndContainer(), + /* Current directory and free space */ NWidget(WWT_PANEL, COLOUR_GREY, WID_SL_BACKGROUND), SetFill(1, 0), SetResize(1, 0), EndContainer(), - NWidget(NWID_VERTICAL), + + NWidget(WWT_PANEL, COLOUR_GREY), SetFill(1, 1), SetResize(1, 1), + /* Filter box with label */ + NWidget(NWID_HORIZONTAL), SetPadding(WD_FRAMERECT_TOP, 0, WD_FRAMERECT_BOTTOM, 0), + SetPIP(WD_FRAMETEXT_LEFT, WD_FRAMETEXT_RIGHT, 0), + NWidget(WWT_TEXT, COLOUR_GREY), SetFill(0, 1), SetDataTip(STR_SAVELOAD_FILTER_TITLE , STR_NULL), + NWidget(WWT_EDITBOX, COLOUR_GREY, WID_SL_FILTER), SetFill(1, 0), SetMinimalSize(50, 12), SetResize(1, 0), + SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), + EndContainer(), + /* Sort Buttons */ NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SORT_BYNAME), SetDataTip(STR_SORT_BY_CAPTION_NAME, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0), @@ -128,6 +153,7 @@ static const NWidgetPart _nested_load_heightmap_dialog_widgets[] = { EndContainer(), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SL_HOME_BUTTON), SetMinimalSize(12, 12), SetDataTip(SPR_HOUSE_ICON, STR_SAVELOAD_HOME_BUTTON), EndContainer(), + /* Files */ NWidget(WWT_PANEL, COLOUR_GREY, WID_SL_FILE_BACKGROUND), NWidget(NWID_HORIZONTAL), NWidget(WWT_INSET, COLOUR_GREY, WID_SL_DRIVES_DIRECTORIES_LIST), SetFill(1, 1), SetPadding(2, 1, 2, 2), @@ -152,9 +178,19 @@ static const NWidgetPart _nested_save_dialog_widgets[] = { NWidget(WWT_CAPTION, COLOUR_GREY, WID_SL_CAPTION), NWidget(WWT_DEFSIZEBOX, COLOUR_GREY), EndContainer(), + /* Current directory and free space */ NWidget(WWT_PANEL, COLOUR_GREY, WID_SL_BACKGROUND), SetFill(1, 0), SetResize(1, 0), EndContainer(), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(NWID_VERTICAL), + /* Left side : filter box and available files */ + NWidget(WWT_PANEL, COLOUR_GREY), SetFill(1, 1), SetResize(1, 1), + /* Filter box with label */ + NWidget(NWID_HORIZONTAL), SetPadding(WD_FRAMERECT_TOP, 0, WD_FRAMERECT_BOTTOM, 0), + SetPIP(WD_FRAMETEXT_LEFT, WD_FRAMETEXT_RIGHT, 0), + NWidget(WWT_TEXT, COLOUR_GREY), SetFill(0, 1), SetDataTip(STR_SAVELOAD_FILTER_TITLE , STR_NULL), + NWidget(WWT_EDITBOX, COLOUR_GREY, WID_SL_FILTER), SetFill(1, 0), SetMinimalSize(50, 12), SetResize(1, 0), + SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), + EndContainer(), + /* Sort buttons */ NWidget(NWID_HORIZONTAL), NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SORT_BYNAME), SetDataTip(STR_SORT_BY_CAPTION_NAME, STR_TOOLTIP_SORT_ORDER), SetFill(1, 0), SetResize(1, 0), @@ -162,6 +198,7 @@ static const NWidgetPart _nested_save_dialog_widgets[] = { EndContainer(), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_SL_HOME_BUTTON), SetMinimalSize(12, 12), SetDataTip(SPR_HOUSE_ICON, STR_SAVELOAD_HOME_BUTTON), EndContainer(), + /* Files */ NWidget(WWT_PANEL, COLOUR_GREY, WID_SL_FILE_BACKGROUND), NWidget(NWID_HORIZONTAL), NWidget(WWT_INSET, COLOUR_GREY, WID_SL_DRIVES_DIRECTORIES_LIST), SetPadding(2, 1, 0, 2), @@ -171,11 +208,14 @@ static const NWidgetPart _nested_save_dialog_widgets[] = { NWidget(WWT_EDITBOX, COLOUR_GREY, WID_SL_SAVE_OSK_TITLE), SetPadding(3, 2, 2, 2), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_SAVELOAD_OSKTITLE, STR_SAVELOAD_EDITBOX_TOOLTIP), EndContainer(), + /* Save/delete buttons */ NWidget(NWID_HORIZONTAL), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_DELETE_SELECTION), SetDataTip(STR_SAVELOAD_DELETE_BUTTON, STR_SAVELOAD_DELETE_TOOLTIP), SetFill(1, 0), SetResize(1, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SL_SAVE_GAME), SetDataTip(STR_SAVELOAD_SAVE_BUTTON, STR_SAVELOAD_SAVE_TOOLTIP), SetFill(1, 0), SetResize(1, 0), EndContainer(), EndContainer(), + + /* Right side : game details */ NWidget(WWT_PANEL, COLOUR_GREY), NWidget(WWT_EMPTY, INVALID_COLOUR, WID_SL_DETAILS), SetResize(1, 1), SetFill(1, 1), NWidget(NWID_HORIZONTAL), @@ -227,6 +267,8 @@ static void SortSaveGameList(FileList &file_list) struct SaveLoadWindow : public Window { private: + static const uint EDITBOX_MAX_SIZE = 50; + QueryString filename_editbox; ///< Filename editbox. AbstractFileType abstract_filetype; /// Type of file to select. SaveLoadOperation fop; ///< File operation to perform. @@ -234,6 +276,11 @@ private: FiosItem o_dir; const FiosItem *selected; ///< Selected game in #fios_items, or \c NULL. Scrollbar *vscroll; + + StringFilter string_filter; ///< Filter for available games. + QueryString filter_editbox; ///< Filter editbox; + SmallVector fios_items_shown; ///< Map of the filtered out fios items + public: /** Generate a default save filename. */ @@ -244,7 +291,7 @@ public: } SaveLoadWindow(WindowDesc *desc, AbstractFileType abstract_filetype, SaveLoadOperation fop) - : Window(desc), filename_editbox(64), abstract_filetype(abstract_filetype), fop(fop) + : Window(desc), filename_editbox(64), abstract_filetype(abstract_filetype), fop(fop), filter_editbox(EDITBOX_MAX_SIZE) { assert(this->fop == SLO_SAVE || this->fop == SLO_LOAD); @@ -296,6 +343,8 @@ public: this->FinishInitNested(0); this->LowerWidget(WID_SL_DRIVES_DIRECTORIES_LIST); + this->querystrings[WID_SL_FILTER] = &this->filter_editbox; + this->filter_editbox.cancel_button = QueryString::ACTION_CLEAR; /* pause is only used in single-player, non-editor mode, non-menu mode. It * will be unpaused in the WE_DESTROY event handler. */ @@ -304,7 +353,7 @@ public: } SetObjectToPlace(SPR_CURSOR_ZZZ, PAL_NONE, HT_NONE, WC_MAIN_WINDOW, 0); - this->OnInvalidateData(0); + this->OnInvalidateData(SLIWD_RESCAN_FILES); ResetObjectToPlace(); @@ -327,8 +376,15 @@ public: strecpy(o_dir.name, _personal_dir, lastof(o_dir.name)); } - /* Focus the edit box by default in the save windows */ - if (this->fop == SLO_SAVE) this->SetFocusedWidget(WID_SL_SAVE_OSK_TITLE); + switch (this->fop) { + case SLO_SAVE: + /* Focus the edit box by default in the save window */ + this->SetFocusedWidget(WID_SL_SAVE_OSK_TITLE); + break; + + default: + this->SetFocusedWidget(WID_SL_FILTER); + } } virtual ~SaveLoadWindow() @@ -370,6 +426,10 @@ public: uint y = r.top + WD_FRAMERECT_TOP; for (uint pos = this->vscroll->GetPosition(); pos < this->fios_items.Length(); pos++) { + if (!this->fios_items_shown[pos]) { + /* The current item is filtered out : we do not show it */ + continue; + } const FiosItem *item = this->fios_items.Get(pos); if (item == this->selected) { @@ -507,7 +567,6 @@ public: SortSaveGameList(this->fios_items); } - this->vscroll->SetCount(this->fios_items.Length()); this->DrawWidgets(); } @@ -530,7 +589,7 @@ public: case WID_SL_HOME_BUTTON: // OpenTTD 'button', jumps to OpenTTD directory FiosBrowseTo(&o_dir); - this->InvalidateData(); + this->InvalidateData(SLIWD_RESCAN_FILES); break; case WID_SL_LOAD_BUTTON: @@ -572,6 +631,12 @@ public: int y = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_SL_DRIVES_DIRECTORIES_LIST, WD_FRAMERECT_TOP); if (y == INT_MAX) return; + /* Get the corresponding non-filtered out item from the list */ + int i = 0; + while (i <= y) { + if (!this->fios_items_shown[i]) y++; + i++; + } const FiosItem *file = this->fios_items.Get(y); const char *name = FiosBrowseTo(file); @@ -586,7 +651,7 @@ public: SaveOrLoad(name, SLO_CHECK, DFT_GAME_FILE, NO_DIRECTORY, false); } - this->InvalidateData(1); + this->InvalidateData(SLIWD_SELECTION_CHANGES); } if (this->fop == SLO_SAVE) { /* Copy clicked name to editbox */ @@ -611,7 +676,7 @@ public: } } else { /* Changed directory, need refresh. */ - this->InvalidateData(); + this->InvalidateData(SLIWD_RESCAN_FILES); } break; } @@ -660,7 +725,7 @@ public: if (!FiosDelete(this->filename_editbox.text.buf)) { ShowErrorMessage(STR_ERROR_UNABLE_TO_DELETE_FILE, INVALID_STRING_ID, WL_ERROR); } else { - this->InvalidateData(); + this->InvalidateData(SLIWD_RESCAN_FILES); /* Reset file name to current date on successful delete */ if (this->abstract_filetype == FT_SAVEGAME) GenerateFileName(); } @@ -691,7 +756,7 @@ public: virtual void OnInvalidateData(int data = 0, bool gui_scope = true) { switch (data) { - case 0: + case SLIWD_RESCAN_FILES: /* Rescan files */ this->selected = NULL; _load_check_data.Clear(); @@ -702,9 +767,13 @@ public: this->vscroll->SetCount(this->fios_items.Length()); this->selected = NULL; _load_check_data.Clear(); + + /* We reset the files filtered */ + this->OnInvalidateData(SLIWD_FILTER_CHANGES); + FALLTHROUGH; - case 1: + case SLIWD_SELECTION_CHANGES: /* Selection changes */ if (!gui_scope) break; @@ -732,6 +801,41 @@ public: NOT_REACHED(); } break; + + case SLIWD_FILTER_CHANGES: + /* Filter changes */ + this->fios_items_shown.Resize(this->fios_items.Length()); + uint items_shown_count = 0; ///< The number of items shown in the list + /* We pass through every fios item */ + for (uint i = 0; i < this->fios_items.Length(); i++) { + if (this->string_filter.IsEmpty()) { + /* We don't filter anything out if the filter editbox is empty */ + this->fios_items_shown[i] = true; + items_shown_count++; + } else { + this->string_filter.ResetState(); + this->string_filter.AddLine(this->fios_items[i].title); + /* We set the vector to show this fios element as filtered depending on the result of the filter */ + this->fios_items_shown[i] = this->string_filter.GetState(); + if (this->fios_items_shown[i]) items_shown_count++; + + if (&(this->fios_items[i]) == this->selected && this->fios_items_shown[i] == false) { + /* The selected element has been filtered out */ + this->selected = NULL; + this->OnInvalidateData(SLIWD_SELECTION_CHANGES); + } + } + } + this->vscroll->SetCount(items_shown_count); + break; + } + } + + virtual void OnEditboxChanged(int wid) + { + if (wid == WID_SL_FILTER) { + this->string_filter.SetFilterTerm(this->filter_editbox.text.buf); + this->InvalidateData(SLIWD_FILTER_CHANGES); } } }; diff --git a/src/lang/english.txt b/src/lang/english.txt index fa2ba0e6ff..1cfe149219 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2772,6 +2772,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Game Det STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}No information available STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING1} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Filter string: STR_SAVELOAD_OSKTITLE :{BLACK}Enter a name for the savegame diff --git a/src/widgets/fios_widget.h b/src/widgets/fios_widget.h index c94655d767..2351f8035e 100644 --- a/src/widgets/fios_widget.h +++ b/src/widgets/fios_widget.h @@ -17,6 +17,7 @@ enum SaveLoadWidgets { WID_SL_CAPTION, ///< Caption of the window. WID_SL_SORT_BYNAME, ///< Sort by name button. WID_SL_SORT_BYDATE, ///< Sort by date button. + WID_SL_FILTER, ///< Filter list of files WID_SL_BACKGROUND, ///< Background of window. WID_SL_FILE_BACKGROUND, ///< Background of file selection. WID_SL_HOME_BUTTON, ///< Home button. From eab3aa16aa1adca95a7efa9189f0abfb5603bfbe Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 27 Nov 2018 19:45:42 +0100 Subject: [PATCH 091/622] Update: Translations from eints spanish: 3 changes by SilverSurferZzZ --- src/lang/spanish.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 8bec2f723a..bd8162e286 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -925,6 +925,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Rand sudafrican STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizada... STR_GAME_OPTIONS_CURRENCY_GEL :Lari Georgiano (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iraní (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Nuevo Rublo Ruso (RUB) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vehículos de carretera @@ -2693,8 +2694,8 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Fotogramas por segundo - FPS STR_FRAMERATE_CURRENT :{WHITE}Actual STR_FRAMERATE_AVERAGE :{WHITE}Medio -STR_FRAMERATE_DATA_POINTS :{WHITE}Datos basados en {COMMA} medidas -STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms +STR_FRAMERATE_DATA_POINTS :{BLACK}Datos basados en {COMMA} medidas +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms ############ Leave those lines in this order!! ############ End of leave-in-this-order ############ Leave those lines in this order!! From 59e4913a0f064d6746bb70ea7eefcf31c7e5ec3e Mon Sep 17 00:00:00 2001 From: Greg-21 <34160838+Greg-21@users.noreply.github.com> Date: Mon, 5 Nov 2018 16:46:43 +0100 Subject: [PATCH 092/622] Doc: Changed several things in known-bugs file Converted "tabs" to "spaces", changed the order based on the numbering of bugs, made that lines end closer to the 80th character column, changed "Mac OS X" to "macOS", and several other less important changes. --- known-bugs.txt | 769 ++++++++++++++++++++++++------------------------- 1 file changed, 381 insertions(+), 388 deletions(-) diff --git a/known-bugs.txt b/known-bugs.txt index e12e0a19fe..8dbab7de90 100644 --- a/known-bugs.txt +++ b/known-bugs.txt @@ -1,6 +1,6 @@ OpenTTD's known bugs -Last updated: 2016-07-01 -Release version: 1.6.1 +Last updated: 2018-11-05 +Release version: 1.8.0 ------------------------------------------------------------------------ @@ -14,12 +14,12 @@ Table of contents ---- ----- All bugs listed below are marked as known. Please do not submit any bugs that are the same as these. If you do, do not act surprised, because -we WILL flame you!! +we WILL flame you! The current list of known bugs that we intend to fix can be found in our -bug tracking system at: https://github.com/OpenTTD/OpenTTD/issues -Also check the closed bugs when searching for your bug in this system as -we might have fixed the bug in the mean time. +bug tracking system at https://github.com/OpenTTD/OpenTTD/issues +Also check the closed bugs when searching for your bug in this system as we +might have fixed the bug in the mean time. 2.0) Known bugs @@ -29,436 +29,429 @@ reasons why we think that fixing them is infeasible. We might make some minor improvements that reduce the scope of these bugs, but we will not be able to completely fix them. -No suitable AI can be found - If you have no AIs and an AI is started the so-called 'dummy' AI will - be loaded. This AI does nothing but writing a message on the AI debug - window and showing a red warning. There are basically two solutions - for this problem: Either you set the number of AI players to 0 so that - no AI is started. You find that setting at the top of the window in the - "AI / Game Scripts Settings" window. - The other solution is acquiring (downloading) some AI. The easiest way - to do this is via the "Check Online Content" button in the main (intro) - menu or directly in the "AI / Game Scripts Settings" dialogue via the - "Check Online Content" button. +No suitable AI can be found: + If you have no AIs and an AI is started the so-called 'dummy' AI will + be loaded. This AI does nothing but writing a message on the AI debug + window and showing a red warning. There are basically two solutions + for this problem: Either you set the number of AI players to 0 so that + no AI is started. You find that setting at the top of the window in the + "AI / Game Scripts Settings" window. + The other solution is acquiring (downloading) some AI. The easiest way + to do this is via the "Check Online Content" button in the main (intro) + menu or directly in the "AI / Game Scripts Settings" dialogue via the + "Check Online Content" button. -After a while of playing, colours get corrupted - In Windows 7 the background slideshow corrupts the colour mapping of - OpenTTD's 8bpp screen modes. Workarounds for this are: - a) Switching to windowed mode, instead of fullscreen - b) Switching off background slideshow - c) Setting up the 32bpp-anim or 32bpp-optimized blitter +After a while of playing, colours get corrupted: + In Windows 7 the background slideshow corrupts the colour mapping + of OpenTTD's 8bpp screen modes. Workarounds for this are: + a) Switching to windowed mode, instead of fullscreen + b) Switching off background slideshow + c) Setting up the 32bpp-anim or 32bpp-optimized blitter -Long delay between switching songs/music - On Windows there is a delay of a (few) second(s) between switching of - songs for the "win32" driver. This delay is caused by the fact that - opening a MIDI file via MCI is extremely slow. +Long delay between switching songs/music: + On Windows there is a delay of a (few) second(s) between switching + of songs for the "Win32" driver. This delay is caused by the fact + that opening a MIDI file via MCI is extremely slow. - DirectMusic, known as "dmusic" in OpenTTD, has a much shorter delay. - However, under some circumstances DirectMusic does not reset its - state properly causing wrongly pitched/bad sounding songs. This - problem is in DirectMusic as it is reproducable with Microsoft's - DirectMusic Producer. DirectMusic has been deprecated since 2004 - and as such has no support for 64 bits OpenTTD. + DirectMusic, known as "dmusic" in OpenTTD, has a much shorter delay. + However, under some circumstances DirectMusic does not reset its state + properly causing wrongly pitched/bad sounding songs. This problem is in + DirectMusic as it is reproducable with Microsoft's DirectMusic Producer. + DirectMusic has been deprecated since 2004 and as such has no support + for 64-bit OpenTTD. - As a delay is favourable over bad sounding music the "win32" driver - is the default driver for OpenTTD. You can change this default by - setting the "musicdriver" in your openttd.cfg to "dmusic". + As a delay is favourable over bad sounding music the "Win32" driver + is the default driver for OpenTTD. You can change this default by + setting the "musicdriver" in your openttd.cfg to "dmusic". -Custom vehicle type name is incorrectly aligned - Some NewGRFs use sprites that are bigger than normal in the "buy - vehicle" window. Due to this they have to encode an offset for the - vehicle type name. Upon renaming the vehicle type this encoded offset - is stripped from the name because the "edit box" cannot show this - encoding. As a result the custom vehicle type names will get the - default alignment. The only way to (partly) fix this is by adding - spaces to the custom name. +Custom vehicle type name is incorrectly aligned: + Some NewGRFs use sprites that are bigger than normal in the "buy + vehicle" window. Due to this they have to encode an offset for + the vehicle type name. Upon renaming the vehicle type this encoded + offset is stripped from the name because the "edit box" cannot show + this encoding. As a result the custom vehicle type names will get + the default alignment. The only way to (partially) fix this is by + adding spaces to the custom name. -Clipping problems [FS#119] - In some cases sprites are not drawn as one would expect. Examples of - this are aircraft that might be hidden below the runway or trees that - in some cases are rendered over vehicles. - The primary cause of this problem is that OpenTTD does not have enough - data (like a 3D model) to properly determine what needs to be drawn in - front of what. OpenTTD has bounding boxes but in lots of cases they - are either too big or too small and then cause problems with what - needs to be drawn in front of what. Also some visual tricks are used. - For example trains at 8 pixels high, the catenary needs to be drawn - above that. When you want to draw bridges on top of that, which are - only one height level (= 8 pixels) higher, you are getting into some - big problems. - We can not change the height levels; it would require us to either - redraw all vehicle or all landscape graphics. Doing so would mean we - leave the Transport Tycoon graphics, which in effect means OpenTTD - will not be a Transport Tycoon clone anymore. +Clipping problems [FS#119]: + In some cases sprites are not drawn as one would expect. Examples of + this are aircraft that might be hidden below the runway or trees that + in some cases are rendered over vehicles. + The primary cause of this problem is that OpenTTD does not have enough + data (like a 3D model) to properly determine what needs to be drawn in + front of what. OpenTTD has bounding boxes but in lots of cases they + are either too big or too small and then cause problems with what + needs to be drawn in front of what. Also some visual tricks are used. + For example trains at 8 pixels high, the catenary needs to be drawn + above that. When you want to draw bridges on top of that, which are + only one height level (= 8 pixels) higher, you are getting into some + big problems. + We can not change the height levels; it would require us to either + redraw all vehicle or all landscape graphics. Doing so would mean we + leave the Transport Tycoon graphics, which in effect means OpenTTD + will not be a Transport Tycoon clone anymore. -Mouse scrolling not possible at the edges of the screen [FS#383] [FS#3966] - Scrolling the viewport with the mouse cursor at the edges of the screen - in the same direction of the edge will fail. If the cursor is near the - edge the scrolling will be very slow. - OpenTTD only receives cursor position updates when the cursor is inside - OpenTTD's window. It is not told how far you have moved the cursor - outside of OpenTTD's window. +Mouse scrolling not possible at the edges of the screen [FS#383] [FS#3966]: + Scrolling the viewport with the mouse cursor at the edges of the screen + in the same direction of the edge will fail. If the cursor is near the + edge the scrolling will be very slow. + OpenTTD only receives cursor position updates when the cursor is inside + OpenTTD's window. It is not told how far you have moved the cursor + outside of OpenTTD's window. -Lost trains ignore (block) exit signals [FS#1473] - If trains are lost they ignore block exit signals, blocking junctions - with presignals. This is caused because the path finders cannot tell - where the train needs to go. As such a random direction is chosen at - each junction. This causes the trains to occasionally to make choices - that are unwanted from a player's point of view. - This will not be fixed because lost trains are in almost all cases a - network problem, e.g. a train can never reach a specific place. This - makes the impact of fixing the bug enormously small against the - amount of work needed to write a system that prevents the lost trains - from taking the wrong direction. +Lost trains ignore (block) exit signals [FS#1473]: + If trains are lost they ignore block exit signals, blocking junctions + with presignals. This is caused because the path finders cannot tell + where the train needs to go. As such a random direction is chosen at + each junction. This causes the trains to occasionally to make choices + that are unwanted from a player's point of view. + This will not be fixed because lost trains are in almost all cases a + network problem, e.g. a train can never reach a specific place. This + makes the impact of fixing the bug enormously small against the amount + of work needed to write a system that prevents the lost trains from + taking the wrong direction. -Vehicle owner of last transfer leg gets paid for all [FS#2427] - When you make a transfer system that switches vehicle owners. This - is only possible with 'industry stations', e.g. the oil rig station - the owner of the vehicle that does the final delivery gets paid for - the whole trip. It is not shared amongst the different vehicle - owners that have participated in transporting the cargo. - This sharing is not done because it would enormously increase the - memory and CPU usage in big games for something that is happening - in only one corner case. We think it is not worth the effort until - sharing of stations is an official feature. +Vehicle owner of last transfer leg gets paid for all [FS#2427]: + When you make a transfer system that switches vehicle owners. This + is only possible with 'industry stations', e.g. the oil rig station + the owner of the vehicle that does the final delivery gets paid for + the whole trip. It is not shared amongst the different vehicle + owners that have participated in transporting the cargo. + This sharing is not done because it would enormously increase the + memory and CPU usage in big games for something that is happening + in only one corner case. We think it is not worth the effort until + sharing of stations is an official feature. -Forbid 90 degree turns does not work for crossing PBS paths [FS#2737] - When you run a train through itself on a X junction with PBS turned on - the train will not obey the 'forbid 90 degree turns' setting. This is - due to the fact that we can not be sure that the setting was turned - off when the track was reserved, which means that we assume it was - turned on and that the setting does not hold at the time. We made it - this way to allow one to change the setting in-game, but it breaks - slightly when you are running your train through itself. Running a - train through means that your network is broken and is thus a user - error which OpenTTD tries to graciously handle. - Fixing this bug means that we need to record whether this particular - setting was turned on or off at the time the reservation was made. This - means adding quite a bit of data to the savegame for solving an issue - that is basically an user error. We think it is not worth the effort. +Forbid 90 degree turns does not work for crossing PBS paths [FS#2737]: + When you run a train through itself on a X junction with PBS turned on + the train will not obey the 'forbid 90 degree turns' setting. This is + due to the fact that we can not be sure that the setting was turned + off when the track was reserved, which means that we assume it was + turned on and that the setting does not hold at the time. We made it + this way to allow one to change the setting in-game, but it breaks + slightly when you are running your train through itself. Running a + train through means that your network is broken and is thus a user + error which OpenTTD tries to graciously handle. + Fixing this bug means that we need to record whether this particular + setting was turned on or off at the time the reservation was made. This + means adding quite a bit of data to the savegame for solving an issue + that is basically an user error. We think it is not worth the effort. -Duplicate (station) names after renaming [FS#3204] - After renaming stations one can create duplicate station names. This - is done giving a station the same custom name as another station with - an automatically generated name. - The major part of this problem is that station names are translatable. - Meaning that a station is called e.g. ' Central' in English and - ' Centraal' in Dutch. This means that in network games the - renaming of a town could cause the rename to succeed on some clients - and fail at others. This creates an inconsistent game state that will - be seen as a 'desync'. Secondly the custom names are intended to fall - completely outside of the ' ' naming of stations, so when - you rename a town all station names are updated accordingly. - As a result the decision has been made that all custom names are only - compared to the other custom names in the same class and not compared - to the automatically generated names. +Duplicate (station) names after renaming [FS#3204]: + After renaming stations one can create duplicate station names. This + is done giving a station the same custom name as another station with + an automatically generated name. + The major part of this problem is that station names are translatable. + Meaning that a station is called e.g. ' Central' in English and + ' Centraal' in Dutch. This means that in network games the + renaming of a town could cause the rename to succeed on some clients + and fail at others. This creates an inconsistent game state that will + be seen as a 'desync'. Secondly the custom names are intended to fall + completely outside of the ' ' naming of stations, so when + you rename a town all station names are updated accordingly. + As a result the decision has been made that all custom names are only + compared to the other custom names in the same class and not compared + to the automatically generated names. -Extreme CPU usage/hangs when using SDL and PulseAudio [FS#3294] -OpenTTD hangs/freezes when closing, OpenTTD is slow, OpenTTD uses a lot of CPU - OpenTTD can be extremely slow/use a lot of CPU when the sound is - played via SDL and then through PulseAudio's ALSA wrapper. Under the - same configuration OpenTTD, or rather SDL, might hang when exiting - the game. This problem is seen most in Ubuntu 9.04 and higher. +Extreme CPU usage/hangs when using SDL and PulseAudio [FS#3294], +OpenTTD hangs/freezes when closing, OpenTTD is slow, OpenTTD uses a lot of CPU: + OpenTTD can be extremely slow/use a lot of CPU when the sound is + played via SDL and then through PulseAudio's ALSA wrapper. Under the + same configuration OpenTTD, or rather SDL, might hang when exiting + the game. This problem is seen most in Ubuntu 9.04 and higher. - This is because recent versions of the PulseAudio sound server are - configured to use timer-based audio scheduling rather than - interrupt-based audio scheduling. Configuring PulseAudio to force - use of interrupt-based scheduling may resolve sound problems for - some users. Under recent versions of Ubuntu Linux (9.04 and higher) - this can be accomplished by changing the following line in the - /etc/pulse/default.pa file: - load-module module-udev-detect - to - load-module module-udev-detect tsched=0 - Note that PulseAudio must be restarted for changes to take effect. - Older versions of PulseAudio may use the module-hal-detect module - instead. Adding tsched=0 to the end of that line will have a similar - effect. + This is because recent versions of the PulseAudio sound server + are configured to use timer-based audio scheduling rather than + interrupt-based audio scheduling. Configuring PulseAudio to force + use of interrupt-based scheduling may resolve sound problems for + some users. Under recent versions of Ubuntu Linux (9.04 and higher) + this can be accomplished by changing the following line in the + /etc/pulse/default.pa file: + load-module module-udev-detect + to + load-module module-udev-detect tsched=0 + Note that PulseAudio must be restarted for changes to take effect. Older + versions of PulseAudio may use the module-hal-detect module instead. + Adding tsched=0 to the end of that line will have a similar effect. - Another possible solution is selecting the "pulse" backend of SDL - by either using "SDL_AUDIODRIVER=pulse openttd" at the command - prompt or installing the 'libsdl1.2debian-pulseaudio' package from - Ubuntu's Universe repository. For other distributions a similar - package needs to be installed. + Another possible solution is selecting the "pulse" backend of SDL + by either using "SDL_AUDIODRIVER=pulse openttd" at the command + prompt or installing the 'libsdl1.2debian-pulseaudio' package from + Ubuntu's Universe repository. For other distributions a similar + package needs to be installed. -OpenTTD not properly resizing with SDL on X [FS#3305] - Under some X window managers OpenTTD's window does not properly - resize. You will either end up with a black bar at the right/bottom - side of the window or you cannot see the right/bottom of the window, - e.g you cannot see the status bar. The problem is that OpenTTD does - not always receive a resize event from SDL making it impossible for - OpenTTD to know that the window was resized; sometimes moving the - window will solve the problem. - Window managers that are known to exhibit this behaviour are KDE's - and GNOME's. With the XFCE's and LXDE's window managers the resize - event is sent when the user releases the mouse. +OpenTTD not properly resizing with SDL on X [FS#3305]: + Under some X window managers OpenTTD's window does not properly + resize. You will either end up with a black bar at the right/bottom + side of the window or you cannot see the right/bottom of the window, + e.g. you cannot see the status bar. The problem is that OpenTTD does + not always receive a resize event from SDL making it impossible for + OpenTTD to know that the window was resized; sometimes moving the + window will solve the problem. + Window managers that are known to exhibit this behaviour are GNOME's + and KDE's. With the XFCE's and LXDE's window managers the resize + event is sent when the user releases the mouse. Incorrect colours, crashes upon exit, debug warnings and smears upon -window resizing with SDL on Mac OS X [FS#3447] - Video handling with (lib)SDL under Mac OS X is known to fail on some - versions of Mac OS X with some hardware configurations. Some of the - problems happen only under some circumstances whereas others are - always present. - We suggest that the SDL video/sound backend is not used for OpenTTD - in combinations with Mac OS X. +window resizing with SDL on macOS [FS#3447]: + Video handling with (lib)SDL under macOS is known to fail on some + versions of macOS with some hardware configurations. Some of + the problems happen only under some circumstances whereas others + are always present. + We suggest that the SDL video/sound backend is not used for OpenTTD + in combinations with macOS. -Train crashes entering same junction from block and path signals [FS#3928] - When a train has reserved a path from a path signal to a two way - block signal and the reservation passes a path signal through the - back another train can enter the reserved path (only) via that same - two way block signal. - The reason for this has to do with optimisation; to fix this issue - the signal update has to pass all path signals until it finds either - a train or a backwards facing signal. This is a very expensive task. - The (signal) setups that allow these crashes can furthermore be - considered incorrectly signalled; one extra safe waiting point for - the train entering from path signal just after the backwards facing - signal (from the path signal train) resolves the issue. +Train crashes entering same junction from block and path signals [FS#3928]: + When a train has reserved a path from a path signal to a two way + block signal and the reservation passes a path signal through the + back another train can enter the reserved path (only) via that + same two way block signal. + The reason for this has to do with optimisation; to fix this issue + the signal update has to pass all path signals until it finds either + a train or a backwards facing signal. This is a very expensive task. + The (signal) setups that allow these crashes can furthermore be + considered incorrectly signalled; one extra safe waiting point for + the train entering from path signal just after the backwards facing + signal (from the path signal train) resolves the issue. -Crashes when playing music [FS#3941] - Mac OS X's QuickTime (default music driver) and Windows' MCI (win32 - music driver) crash on some songs from OpenMSX. OpenTTD cannot do - anything about this. Please report these crashes to the authors of - OpenMSX so the crash causing songs can be removed or fixed. +Crashes when playing music [FS#3941]: + macOS's QuickTime (default music driver) and Windows' MCI ("Win32" + music driver) crash on some songs from OpenMSX. OpenTTD cannot do + anything about this. Please report these crashes to the authors + of OpenMSX so the crash causing songs can be removed or fixed. -Crashes when run in a VM using Parallels Desktop [FS#4003] - When the Windows version of OpenTTD is executed in a VM under - Parallels Desktop a privileged instruction exception may be thrown. - As OpenTTD works natively on OSX as well as natively on Windows and - these native builds both don't exhibit this behaviour this crash is - most likely due to a bug in the virtual machine, something out of - the scope of OpenTTD. Most likely this is due to Parallels Desktop - lacking support for RDTSC calls. The problem can be avoided by using - other VM-software, Wine, or running natively on OSX. +Crashes when run in a VM using Parallels Desktop [FS#4003]: + When the Windows version of OpenTTD is executed in a VM under + Parallels Desktop a privileged instruction exception may be thrown. + As OpenTTD works natively on macOS as well as natively on Windows and + these native builds both don't exhibit this behaviour this crash is + most likely due to a bug in the virtual machine, something out of + the scope of OpenTTD. Most likely this is due to Parallels Desktop + lacking support for RDTSC calls. The problem can be avoided by using + other VM-software, Wine, or running natively on macOS. -OpenTTD hangs when started on 32 bits Windows [FS#4083] - Under some circumstances OpenTTD might hang for hours on the - initialisation of the music driver. The exact circumstances are - unknown except that it is the "dmusic" music driver that has the - problem and that the "win32" music driver does not. - As a result using the "win32" music driver will work around this - issue. +OpenTTD hangs when started on 32-bit Windows [FS#4083]: + Under some circumstances OpenTTD might hang for hours on the + initialisation of the music driver. The exact circumstances are + unknown except that it is the "dmusic" music driver that has the + problem and that the "Win32" music driver does not. As a result + using the "Win32" music driver will work around this issue. - As the exact circumstances are unknown, and the obvious - configuration settings related to the music driver are at their - default we are not able to detect this failure, except when Windows' - music initialisation function returns after several hours and then - there is no point in switching the music driver anymore. - The reason we still use the "win32" music driver as default are - described in the "Long delay between switching music/song" section - of this document. + As the exact circumstances are unknown, and the obvious + configuration settings related to the music driver are at their + default we are not able to detect this failure, except when Windows' + music initialisation function returns after several hours and then + there is no point in switching the music driver anymore. + The reason we still use the "Win32" music driver as default are + described in the "Long delay between switching music/song" section + of this document. -Pre- and exit signals are not dragged [FS#4378] - Unlike all other signal types, the entry- and exit signals are not - dragged but instead normal signals are placed on subsequent track - sections. This is done on purpose as this is the usually more con- - venient solution. There are little to no occasions where more than - one entry or exit signal in a row are useful. This is different - for all other signal types where several in a row can serve one - purpose or another. +Entry- and exit signals are not dragged [FS#4378]: + Unlike all other signal types, the entry- and exit signals are not + dragged but instead normal signals are placed on subsequent track + sections. This is done on purpose as this is the usually more + convenient solution. There are little to no occasions where more + than one entry or exit signal in a row are useful. This is different + for all other signal types where several in a row can serve one + purpose or another. -Station build date is incorrect [FS#4415] - The tile query tool will show the date of the last (re)construction - at the station and not the date of the first construction. This is - due to compatability reasons with NewGRFs and the fact that it is - wrong to say that the station is built in a particular year when it - was completely destroyed/rebuilt later on. - The tile query tool can be fixed by changing the "Build date" text - to "Date at which the last (re)construction took place" but this is - deemed too specific and long for that window. +Station build date is incorrect [FS#4415]: + The tile query tool will show the date of the last (re)construction + at the station and not the date of the first construction. This is + due to compatability reasons with NewGRFs and the fact that it is + wrong to say that the station is built in a particular year when it + was completely destroyed/rebuilt later on. + The tile query tool can be fixed by changing the "Build date" text + to "Date at which the last (re)construction took place" but this is + deemed too specific and long for that window. -Can't change volume inside OpenTTD [FS#4416] - Some backends do not provide a means to change the volume of sound - effects or music. The mixing of music and sound is left to external - libraries/the operating system we can't handle the volume control - in OpenTTD. As a result you can't change the volume inside OpenTTD - for backends such as SDL; just use the volume control provided by - your operating system. - -Can't run OpenTTD with the -d option from a MSYS console [FS#4587] - The MSYS console does not allow OpenTTD to open an extra console for - debugging output. Compiling OpenTTD with the --enable-console - configure option prevents this issue and allows the -d option to use - the MSYS console for its output. - -Unreadable characters for non-latin locales [FS#4607] - OpenTTD does not ship a non-latin font in its graphics files. As a - result OpenTTD needs to acquire the font from somewhere else. What - OpenTTD does is ask the operating system, or a system library, for - the best font for a given language if the currently loaded font - does not provide all characters of the chosen translation. This - means that OpenTTD has no influence over the quality of the chosen - font; it just does the best it can do. - - If the text is unreadable there are several steps that you can take - to improve this. The first step is finding a good font and configure - this in the configuration file. See section 9.0 of readme.txt for - more information. You can also increase the font size to make the - characters bigger and possible better readable. - - If the problem is with the clarity of the font you might want to - enable anti-aliasing by setting the small_aa/medium_aa/large_aa - settings to "true". However, anti-aliasing only works when a 32 bits - blitter has been selected, e.g. blitter = "32bpp-anim", as with the - 8 bits blitter there are not enough colours to properly perform the - anti-aliasing. +Can't change volume inside OpenTTD [FS#4416]: + Some backends do not provide a means to change the volume of sound + effects or music. The mixing of music and sound is left to external + libraries/the operating system we can't handle the volume control + in OpenTTD. As a result you can't change the volume inside OpenTTD + for backends such as SDL; just use the volume control provided by + your operating system. (Temporary) wrong colours when switching to full screen [FS#4511]: - On Windows it can happen that you temporarily see wrong colours - when switching to full screen OpenTTD, either by starting - OpenTTD in full screen mode, changing to full screen mode or by - ALT-TAB-ing into a full screen OpenTTD. This is caused by the - fact that OpenTTD, by default, uses 8bpp paletted output. The - wrong colours you are seeing is a temporary effect of the video - driver switching to 8bpp palette mode. + On Windows it can happen that you temporarily see wrong colours + when switching to full screen OpenTTD, either by starting + OpenTTD in full screen mode, changing to full screen mode or by + ALT-TAB-ing into a full screen OpenTTD. This is caused by the + fact that OpenTTD, by default, uses 8bpp paletted output. The + wrong colours you are seeing is a temporary effect of the video + driver switching to 8bpp palette mode. - This issue can be worked around in two ways: - a) Setting fullscreen_bpp to 32 - b) Setting up the 32bpp-anim or 32bpp-optimized blitter + This issue can be worked around in two ways: + a) Setting fullscreen_bpp to 32 + b) Setting up the 32bpp-anim or 32bpp-optimized blitter + +Can't run OpenTTD with the -d option from a MSYS console [FS#4587]: + The MSYS console does not allow OpenTTD to open an extra console for + debugging output. Compiling OpenTTD with the --enable-console + configure option prevents this issue and allows the -d option to use + the MSYS console for its output. + +Unreadable characters for non-latin locales [FS#4607]: + OpenTTD does not ship a non-latin font in its graphics files. As a + result OpenTTD needs to acquire the font from somewhere else. What + OpenTTD does is ask the operating system, or a system library, for + the best font for a given language if the currently loaded font + does not provide all characters of the chosen translation. This + means that OpenTTD has no influence over the quality of the chosen + font; it just does the best it can do. + + If the text is unreadable there are several steps that you can take + to improve this. The first step is finding a good font and configure + this in the configuration file. See section 9.0 of README.md for + more information. You can also increase the font size to make the + characters bigger and possible better readable. + + If the problem is with the clarity of the font you might want to + enable anti-aliasing by setting the small_aa/medium_aa/large_aa + settings to "true". However, anti-aliasing only works when a 32-bit + blitter has been selected, e.g. blitter = "32bpp-anim", as with the + 8 bits blitter there are not enough colours to properly perform the + anti-aliasing. Train does not crash with itself [FS#4635]: - When a train drives in a circle the front engine passes through - wagons of the same train without crashing. This is intentional. - Signals are only aware of tracks, they do not consider the train - length and whether there would be enough room for a train in some - circle it might drive on. Also the path a train might take is not - necessarily known when passing a signal. - Checking all circumstances would take a lot of additional computational - power for signals, which is not considered worth the effort, as - it does not add anything to gameplay. - Nevertheless trains shall not crash in normal operation, so making - a train not crash with itself is the best solution for everyone. + When a train drives in a circle the front engine passes through + wagons of the same train without crashing. This is intentional. + Signals are only aware of tracks, they do not consider the train + length and whether there would be enough room for a train in some + circle it might drive on. Also the path a train might take is not + necessarily known when passing a signal. + Checking all circumstances would take a lot of additional + computational power for signals, which is not considered worth + the effort, as it does not add anything to gameplay. + Nevertheless trains shall not crash in normal operation, so making + a train not crash with itself is the best solution for everyone. Aircraft coming through wall in rotated airports [FS#4705]: - With rotated airports, specifically hangars, you will see that the - aircraft will show a part through the back wall of the hangar. - This can be solved by only drawing a part of the plane when being - at the back of the hangar, however then with transparency turned on - the aircraft would be shown partially which would be even weirder. - As such the current behaviour is deemed the least bad. - The same applies to overly long ships and their depots. + With rotated airports, specifically hangars, you will see that the + aircraft will show a part through the back wall of the hangar. + This can be solved by only drawing a part of the plane when being + at the back of the hangar, however then with transparency turned on + the aircraft would be shown partially which would be even weirder. + As such the current behaviour is deemed the least bad. + The same applies to overly long ships and their depots. Vehicles not keeping their "maximum" speed [FS#4815]: - Vehicles that have not enough power to reach and maintain their - advertised maximum speed might be constantly jumping between two - speeds. This is due to the fact that speed and its calculations - are done with integral numbers instead of floating point numbers. - As a result of this a vehicle will never reach its equilibrium - between the drag/friction and propulsion. So in effect it will be - in a vicious circle of speeding up and slowing down due to being - just at the other side of the equilibrium. + Vehicles that have not enough power to reach and maintain their + advertised maximum speed might be constantly jumping between two + speeds. This is due to the fact that speed and its calculations + are done with integral numbers instead of floating point numbers. + As a result of this a vehicle will never reach its equilibrium + between the drag/friction and propulsion. So in effect it will be + in a vicious circle of speeding up and slowing down due to being + just at the other side of the equilibrium. - Not speeding up when near the equilibrium will cause the vehicle - to never come in the neighbourhood of the equilibrium and not - slowing down when near the equilibrium will cause the vehicle - to never slow down towards the equilibrium once it has come down - a hill. + Not speeding up when near the equilibrium will cause the vehicle to + never come in the neighbourhood of the equilibrium and not slowing + down when near the equilibrium will cause the vehicle to never slow + down towards the equilibrium once it has come down a hill. - It is possible to calculate whether the equilibrium will be - passed, but then all acceleration calculations need to be done - twice. + It is possible to calculate whether the equilibrium will be passed, + but then all acceleration calculations need to be done twice. Settings not saved when OpenTTD crashes [FS#4846]: - The settings are not saved when OpenTTD crashes for several reasons. - The most important is that the game state is broken and as such the - settings might contain invalid values, or the settings have not even - been loaded yet. This would cause invalid or totally wrong settings - to be written to the configuration file. + The settings are not saved when OpenTTD crashes for several reasons. + The most important is that the game state is broken and as such the + settings might contain invalid values, or the settings have not even + been loaded yet. This would cause invalid or totally wrong settings + to be written to the configuration file. - A solution to that would be saving the settings whenever one changes, - however due to the way the configuration file is saved this requires - a flush of the file to the disk and OpenTTD needs to wait till that - is finished. On some file system implementations this causes the - flush of all 'write-dirty' caches, which can be a significant amount - of data to be written. This can further be aggravated by spinning - down disks to conserve power, in which case this disk needs to be - spun up first. This means that many seconds may pass before the - configuration file is actually written, and all that time OpenTTD - will not be able to show any progress. Changing the way the - configuration file is saved is not an option as that leaves us more - vulnerable to corrupt configuration files. + A solution to that would be saving the settings whenever one changes, + however due to the way the configuration file is saved this requires + a flush of the file to the disk and OpenTTD needs to wait till that + is finished. On some file system implementations this causes the + flush of all 'write-dirty' caches, which can be a significant amount + of data to be written. This can further be aggravated by spinning + down disks to conserve power, in which case this disk needs to be + spun up first. This means that many seconds may pass before the + configuration file is actually written, and all that time OpenTTD + will not be able to show any progress. Changing the way the + configuration file is saved is not an option as that leaves us more + vulnerable to corrupt configuration files. - Finally, crashes should not be happening. If they happen they should - be reported and fixed, so essentially fixing this is fixing the - wrong thing. If you really need the configuration changes to be - saved, and you need to run a version that crashes regularly, then - you can use the 'saveconfig' command in the console to save the - settings. + Finally, crashes should not be happening. If they happen they should + be reported and fixed, so essentially fixing this is fixing the wrong + thing. If you really need the configuration changes to be saved, + and you need to run a version that crashes regularly, then you can + use the 'saveconfig' command in the console to save the settings. Not all NewGRFs, AIs, game scripts are found [FS#4887]: - Under certain situations, where the path for the content within a - tar file is the same as other content on the file system or in another - tar file, it is possible that content is not found. A more thorough - explanation and solutions are described in section 4.4 of readme.txt. + Under certain situations, where the path for the content within a + tar file is the same as other content on the file system or in another + tar file, it is possible that content is not found. A more thorough + explanation and solutions are described in section 4.4 of README.md. Mouse cursor going missing with SDL [FS#4997]: - Under certain circumstances SDL does not notify OpenTTD of changes - with respect to the mouse pointer, specifically whether the mouse - pointer is within the bounds of OpenTTD or not. For example, if you - Alt-tab to another application the mouse cursor will still be shown - in OpenTTD, and when you move the mouse outside of the OpenTTD - window so the cursor gets hidden, open/move another application on - top of the OpenTTD window and then Alt-tab back into OpenTTD the - cursor will not be shown. + Under certain circumstances SDL does not notify OpenTTD of changes with + respect to the mouse pointer, specifically whether the mouse pointer + is within the bounds of OpenTTD or not. For example, if you "Alt-Tab" + to another application the mouse cursor will still be shown in OpenTTD, + and when you move the mouse outside of the OpenTTD window so the cursor + gets hidden, open/move another application on top of the OpenTTD window + and then Alt-tab back into OpenTTD the cursor will not be shown. - We cannot fix this problem as SDL simply does not provide the - required information in these corner cases. This is a bug in SDL - and as such there is little that we can do about it. - -Inconsistent catchment areas [FS#5661]: - Due to performance decisions the catchment area for cargo accepted - by a station for delivery to houses or industries differs from the - catchment area for cargo that is delivered to stations from houses - or industries. - - Conceptually they work the same, but the effect in game differs. - They work by finding the closest destination "around" the source - which is within a certain distance. This distance depends on the - type of station, e.g. road stops have a smaller catchment area than - large airports. In both cases the bounding box, the smallest - rectangle that contains all tiles of something, is searched for the - target of the cargo, and then spiraling outwards finding the closest - tile of the target. - - In the case of a station with two tiles spread far apart with a house - that is within the station's bounding box, it would be possible that - the spiraling search from the house does not reach one of the station - tiles before the search ends, i.e. all tiles within that distance - are searched. So the house does not deliver cargo to the station. On - the other hand, the station will deliver cargo because the house - falls within the bounding box, and thus search area. - - It is possible to make these consistent, but then cargo from a house - to a station needs to search up to 32 tiles around itself, i.e. 64 - by 64 tiles, to find all possible stations it could deliver to - instead of 10 by 10 tiles (40 times more tiles). Alternatively the - search from a station could be changed to use the actual tiles, but - that would require considering checking 10 by 10 tiles for each of - the tiles of a station, instead of just once. + We cannot fix this problem as SDL simply does not provide the required + information in these corner cases. This is a bug in SDL and as such + there is little that we can do about it. Trains might not stop at platforms that are currently being changed [FS#5553]: - If you add tiles to or remove tiles from a platform while a train is - approaching to stop at the same platform, that train can miss the place - where it's supposed to stop and pass the station without stopping. This - is caused by the fact that the train is considered to already have stopped - if it's beyond its assigned stopping location. We can't let the train stop - just anywhere in the station because then it would never leave the station - if you have the same station in the order list multiple times in a row or - if there is only one station in the order list (see FS#5684). + If you add tiles to or remove tiles from a platform while a train is + approaching to stop at the same platform, that train can miss the place + where it's supposed to stop and pass the station without stopping. + This is caused by the fact that the train is considered to already + have stopped if it's beyond its assigned stopping location. We can't + let the train stop just anywhere in the station because then it would + never leave the station if you have the same station in the order + list multiple times in a row or if there is only one station + in theorder list (see FS#5684). + +Inconsistent catchment areas [FS#5661]: + Due to performance decisions the catchment area for cargo accepted by a + station for delivery to houses or industries differs from the catchment + area for cargo that is delivered to stations from houses or industries. + + Conceptually they work the same, but the effect in game differs. They + work by finding the closest destination "around" the source which is + within a certain distance. This distance depends on the type of station, + e.g. road stops have a smaller catchment area than large airports. + In both cases the bounding box, the smallest rectangle that contains + all tiles of something, is searched for the target of the cargo, + and then spiraling outwards finding the closest tile of the target. + + In the case of a station with two tiles spread far apart with a house + that is within the station's bounding box, it would be possible that + the spiraling search from the house does not reach one of the station + tiles before the search ends, i.e. all tiles within that distance + are searched. So the house does not deliver cargo to the station. + On the other hand, the station will deliver cargo because the house + falls within the bounding box, and thus search area. + + It is possible to make these consistent, but then cargo from a house + to a station needs to search up to 32 tiles around itself, i.e. 64 + by 64 tiles, to find all possible stations it could deliver to + instead of 10 by 10 tiles (40 times more tiles). Alternatively the + search from a station could be changed to use the actual tiles, but + that would require considering checking 10 by 10 tiles for each of + the tiles of a station, instead of just once. Some houses and industries are not affected by transparency [FS#5817]: - Some of the default houses and industries (f.e. the iron ore mine) are - not affected by the transparency options. This is because the graphics do - not (completely) separate the ground from the building. - This is a bug of the original graphics, and unfortunately cannot be - fixed with OpenGFX for the sake of maintaining compatibility with the - original graphics. + Some of the default houses and industries (f.e. the iron ore mine) are + not affected by the transparency options. This is because the graphics + do not (completely) separate the ground from the building. + This is a bug of the original graphics, and unfortunately cannot be + fixed with OpenGFX for the sake of maintaining compatibility with + the original graphics. Involuntary cargo exchange with cargodist via neutral station [FS#6114]: - When two players serve a neutral station at an industry, a cross-company - chain for cargo flow can and will be established which can only be - interrupted if one of the players stops competing for the ressources of - that industry. There is an easy fix for this: If you are loading at the - shared station make the order "no unload" and if you're unloading make - it "no load". Cargodist will then figure out that it should not create - such a route. + When two players serve a neutral station at an industry, a cross-company + chain for cargo flow can and will be established which can only be + interrupted if one of the players stops competing for the ressources of + that industry. There is an easy fix for this: If you are loading at the + shared station make the order "no unload" and if you're unloading make + it "no load". Cargodist will then figure out that it should not create + such a route. From 206694a4f20217585cb96b7e291649727cdf9dad Mon Sep 17 00:00:00 2001 From: Greg-21 <34160838+Greg-21@users.noreply.github.com> Date: Mon, 5 Nov 2018 16:53:35 +0100 Subject: [PATCH 093/622] Doc: Removed "FS" from issue number Because FlySpray is no longer the main bug tracking system. --- known-bugs.txt | 60 +++++++++++++++++++++++++------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/known-bugs.txt b/known-bugs.txt index 8dbab7de90..d1a41ff320 100644 --- a/known-bugs.txt +++ b/known-bugs.txt @@ -73,7 +73,7 @@ Custom vehicle type name is incorrectly aligned: the default alignment. The only way to (partially) fix this is by adding spaces to the custom name. -Clipping problems [FS#119]: +Clipping problems [#119]: In some cases sprites are not drawn as one would expect. Examples of this are aircraft that might be hidden below the runway or trees that in some cases are rendered over vehicles. @@ -91,7 +91,7 @@ Clipping problems [FS#119]: leave the Transport Tycoon graphics, which in effect means OpenTTD will not be a Transport Tycoon clone anymore. -Mouse scrolling not possible at the edges of the screen [FS#383] [FS#3966]: +Mouse scrolling not possible at the edges of the screen [#383] [#3966]: Scrolling the viewport with the mouse cursor at the edges of the screen in the same direction of the edge will fail. If the cursor is near the edge the scrolling will be very slow. @@ -99,7 +99,7 @@ Mouse scrolling not possible at the edges of the screen [FS#383] [FS#3966]: OpenTTD's window. It is not told how far you have moved the cursor outside of OpenTTD's window. -Lost trains ignore (block) exit signals [FS#1473]: +Lost trains ignore (block) exit signals [#1473]: If trains are lost they ignore block exit signals, blocking junctions with presignals. This is caused because the path finders cannot tell where the train needs to go. As such a random direction is chosen at @@ -111,7 +111,7 @@ Lost trains ignore (block) exit signals [FS#1473]: of work needed to write a system that prevents the lost trains from taking the wrong direction. -Vehicle owner of last transfer leg gets paid for all [FS#2427]: +Vehicle owner of last transfer leg gets paid for all [#2427]: When you make a transfer system that switches vehicle owners. This is only possible with 'industry stations', e.g. the oil rig station the owner of the vehicle that does the final delivery gets paid for @@ -122,7 +122,7 @@ Vehicle owner of last transfer leg gets paid for all [FS#2427]: in only one corner case. We think it is not worth the effort until sharing of stations is an official feature. -Forbid 90 degree turns does not work for crossing PBS paths [FS#2737]: +Forbid 90 degree turns does not work for crossing PBS paths [#2737]: When you run a train through itself on a X junction with PBS turned on the train will not obey the 'forbid 90 degree turns' setting. This is due to the fact that we can not be sure that the setting was turned @@ -137,7 +137,7 @@ Forbid 90 degree turns does not work for crossing PBS paths [FS#2737]: means adding quite a bit of data to the savegame for solving an issue that is basically an user error. We think it is not worth the effort. -Duplicate (station) names after renaming [FS#3204]: +Duplicate (station) names after renaming [#3204]: After renaming stations one can create duplicate station names. This is done giving a station the same custom name as another station with an automatically generated name. @@ -153,7 +153,7 @@ Duplicate (station) names after renaming [FS#3204]: compared to the other custom names in the same class and not compared to the automatically generated names. -Extreme CPU usage/hangs when using SDL and PulseAudio [FS#3294], +Extreme CPU usage/hangs when using SDL and PulseAudio [#3294], OpenTTD hangs/freezes when closing, OpenTTD is slow, OpenTTD uses a lot of CPU: OpenTTD can be extremely slow/use a lot of CPU when the sound is played via SDL and then through PulseAudio's ALSA wrapper. Under the @@ -180,7 +180,7 @@ OpenTTD hangs/freezes when closing, OpenTTD is slow, OpenTTD uses a lot of CPU: Ubuntu's Universe repository. For other distributions a similar package needs to be installed. -OpenTTD not properly resizing with SDL on X [FS#3305]: +OpenTTD not properly resizing with SDL on X [#3305]: Under some X window managers OpenTTD's window does not properly resize. You will either end up with a black bar at the right/bottom side of the window or you cannot see the right/bottom of the window, @@ -193,7 +193,7 @@ OpenTTD not properly resizing with SDL on X [FS#3305]: event is sent when the user releases the mouse. Incorrect colours, crashes upon exit, debug warnings and smears upon -window resizing with SDL on macOS [FS#3447]: +window resizing with SDL on macOS [#3447]: Video handling with (lib)SDL under macOS is known to fail on some versions of macOS with some hardware configurations. Some of the problems happen only under some circumstances whereas others @@ -201,7 +201,7 @@ window resizing with SDL on macOS [FS#3447]: We suggest that the SDL video/sound backend is not used for OpenTTD in combinations with macOS. -Train crashes entering same junction from block and path signals [FS#3928]: +Train crashes entering same junction from block and path signals [#3928]: When a train has reserved a path from a path signal to a two way block signal and the reservation passes a path signal through the back another train can enter the reserved path (only) via that @@ -214,13 +214,13 @@ Train crashes entering same junction from block and path signals [FS#3928]: the train entering from path signal just after the backwards facing signal (from the path signal train) resolves the issue. -Crashes when playing music [FS#3941]: +Crashes when playing music [#3941]: macOS's QuickTime (default music driver) and Windows' MCI ("Win32" music driver) crash on some songs from OpenMSX. OpenTTD cannot do anything about this. Please report these crashes to the authors of OpenMSX so the crash causing songs can be removed or fixed. -Crashes when run in a VM using Parallels Desktop [FS#4003]: +Crashes when run in a VM using Parallels Desktop [#4003]: When the Windows version of OpenTTD is executed in a VM under Parallels Desktop a privileged instruction exception may be thrown. As OpenTTD works natively on macOS as well as natively on Windows and @@ -230,7 +230,7 @@ Crashes when run in a VM using Parallels Desktop [FS#4003]: lacking support for RDTSC calls. The problem can be avoided by using other VM-software, Wine, or running natively on macOS. -OpenTTD hangs when started on 32-bit Windows [FS#4083]: +OpenTTD hangs when started on 32-bit Windows [#4083]: Under some circumstances OpenTTD might hang for hours on the initialisation of the music driver. The exact circumstances are unknown except that it is the "dmusic" music driver that has the @@ -246,7 +246,7 @@ OpenTTD hangs when started on 32-bit Windows [FS#4083]: described in the "Long delay between switching music/song" section of this document. -Entry- and exit signals are not dragged [FS#4378]: +Entry- and exit signals are not dragged [#4378]: Unlike all other signal types, the entry- and exit signals are not dragged but instead normal signals are placed on subsequent track sections. This is done on purpose as this is the usually more @@ -255,7 +255,7 @@ Entry- and exit signals are not dragged [FS#4378]: for all other signal types where several in a row can serve one purpose or another. -Station build date is incorrect [FS#4415]: +Station build date is incorrect [#4415]: The tile query tool will show the date of the last (re)construction at the station and not the date of the first construction. This is due to compatability reasons with NewGRFs and the fact that it is @@ -265,7 +265,7 @@ Station build date is incorrect [FS#4415]: to "Date at which the last (re)construction took place" but this is deemed too specific and long for that window. -Can't change volume inside OpenTTD [FS#4416]: +Can't change volume inside OpenTTD [#4416]: Some backends do not provide a means to change the volume of sound effects or music. The mixing of music and sound is left to external libraries/the operating system we can't handle the volume control @@ -273,7 +273,7 @@ Can't change volume inside OpenTTD [FS#4416]: for backends such as SDL; just use the volume control provided by your operating system. -(Temporary) wrong colours when switching to full screen [FS#4511]: +(Temporary) wrong colours when switching to full screen [#4511]: On Windows it can happen that you temporarily see wrong colours when switching to full screen OpenTTD, either by starting OpenTTD in full screen mode, changing to full screen mode or by @@ -286,13 +286,13 @@ Can't change volume inside OpenTTD [FS#4416]: a) Setting fullscreen_bpp to 32 b) Setting up the 32bpp-anim or 32bpp-optimized blitter -Can't run OpenTTD with the -d option from a MSYS console [FS#4587]: +Can't run OpenTTD with the -d option from a MSYS console [#4587]: The MSYS console does not allow OpenTTD to open an extra console for debugging output. Compiling OpenTTD with the --enable-console configure option prevents this issue and allows the -d option to use the MSYS console for its output. -Unreadable characters for non-latin locales [FS#4607]: +Unreadable characters for non-latin locales [#4607]: OpenTTD does not ship a non-latin font in its graphics files. As a result OpenTTD needs to acquire the font from somewhere else. What OpenTTD does is ask the operating system, or a system library, for @@ -314,7 +314,7 @@ Unreadable characters for non-latin locales [FS#4607]: 8 bits blitter there are not enough colours to properly perform the anti-aliasing. -Train does not crash with itself [FS#4635]: +Train does not crash with itself [#4635]: When a train drives in a circle the front engine passes through wagons of the same train without crashing. This is intentional. Signals are only aware of tracks, they do not consider the train @@ -327,7 +327,7 @@ Train does not crash with itself [FS#4635]: Nevertheless trains shall not crash in normal operation, so making a train not crash with itself is the best solution for everyone. -Aircraft coming through wall in rotated airports [FS#4705]: +Aircraft coming through wall in rotated airports [#4705]: With rotated airports, specifically hangars, you will see that the aircraft will show a part through the back wall of the hangar. This can be solved by only drawing a part of the plane when being @@ -336,7 +336,7 @@ Aircraft coming through wall in rotated airports [FS#4705]: As such the current behaviour is deemed the least bad. The same applies to overly long ships and their depots. -Vehicles not keeping their "maximum" speed [FS#4815]: +Vehicles not keeping their "maximum" speed [#4815]: Vehicles that have not enough power to reach and maintain their advertised maximum speed might be constantly jumping between two speeds. This is due to the fact that speed and its calculations @@ -354,7 +354,7 @@ Vehicles not keeping their "maximum" speed [FS#4815]: It is possible to calculate whether the equilibrium will be passed, but then all acceleration calculations need to be done twice. -Settings not saved when OpenTTD crashes [FS#4846]: +Settings not saved when OpenTTD crashes [#4846]: The settings are not saved when OpenTTD crashes for several reasons. The most important is that the game state is broken and as such the settings might contain invalid values, or the settings have not even @@ -380,13 +380,13 @@ Settings not saved when OpenTTD crashes [FS#4846]: and you need to run a version that crashes regularly, then you can use the 'saveconfig' command in the console to save the settings. -Not all NewGRFs, AIs, game scripts are found [FS#4887]: +Not all NewGRFs, AIs, game scripts are found [#4887]: Under certain situations, where the path for the content within a tar file is the same as other content on the file system or in another tar file, it is possible that content is not found. A more thorough explanation and solutions are described in section 4.4 of README.md. -Mouse cursor going missing with SDL [FS#4997]: +Mouse cursor going missing with SDL [#4997]: Under certain circumstances SDL does not notify OpenTTD of changes with respect to the mouse pointer, specifically whether the mouse pointer is within the bounds of OpenTTD or not. For example, if you "Alt-Tab" @@ -399,7 +399,7 @@ Mouse cursor going missing with SDL [FS#4997]: information in these corner cases. This is a bug in SDL and as such there is little that we can do about it. -Trains might not stop at platforms that are currently being changed [FS#5553]: +Trains might not stop at platforms that are currently being changed [#5553]: If you add tiles to or remove tiles from a platform while a train is approaching to stop at the same platform, that train can miss the place where it's supposed to stop and pass the station without stopping. @@ -408,9 +408,9 @@ Trains might not stop at platforms that are currently being changed [FS#5553]: let the train stop just anywhere in the station because then it would never leave the station if you have the same station in the order list multiple times in a row or if there is only one station - in theorder list (see FS#5684). + in theorder list (see #5684). -Inconsistent catchment areas [FS#5661]: +Inconsistent catchment areas [#5661]: Due to performance decisions the catchment area for cargo accepted by a station for delivery to houses or industries differs from the catchment area for cargo that is delivered to stations from houses or industries. @@ -439,7 +439,7 @@ Inconsistent catchment areas [FS#5661]: that would require considering checking 10 by 10 tiles for each of the tiles of a station, instead of just once. -Some houses and industries are not affected by transparency [FS#5817]: +Some houses and industries are not affected by transparency [#5817]: Some of the default houses and industries (f.e. the iron ore mine) are not affected by the transparency options. This is because the graphics do not (completely) separate the ground from the building. @@ -447,7 +447,7 @@ Some houses and industries are not affected by transparency [FS#5817]: fixed with OpenGFX for the sake of maintaining compatibility with the original graphics. -Involuntary cargo exchange with cargodist via neutral station [FS#6114]: +Involuntary cargo exchange with cargodist via neutral station [#6114]: When two players serve a neutral station at an industry, a cross-company chain for cargo flow can and will be established which can only be interrupted if one of the players stops competing for the ressources of From d64a0a66967982becc793b8cafd13f11215b1c75 Mon Sep 17 00:00:00 2001 From: Greg-21 <34160838+Greg-21@users.noreply.github.com> Date: Mon, 5 Nov 2018 23:19:45 +0100 Subject: [PATCH 094/622] Update: Removed several obsolete known bugs --- known-bugs.txt | 48 +----------------------------------------------- 1 file changed, 1 insertion(+), 47 deletions(-) diff --git a/known-bugs.txt b/known-bugs.txt index d1a41ff320..8d4fd2204b 100644 --- a/known-bugs.txt +++ b/known-bugs.txt @@ -1,6 +1,6 @@ OpenTTD's known bugs Last updated: 2018-11-05 -Release version: 1.8.0 +Release version: 1.9.0 ------------------------------------------------------------------------ @@ -48,22 +48,6 @@ After a while of playing, colours get corrupted: b) Switching off background slideshow c) Setting up the 32bpp-anim or 32bpp-optimized blitter -Long delay between switching songs/music: - On Windows there is a delay of a (few) second(s) between switching - of songs for the "Win32" driver. This delay is caused by the fact - that opening a MIDI file via MCI is extremely slow. - - DirectMusic, known as "dmusic" in OpenTTD, has a much shorter delay. - However, under some circumstances DirectMusic does not reset its state - properly causing wrongly pitched/bad sounding songs. This problem is in - DirectMusic as it is reproducable with Microsoft's DirectMusic Producer. - DirectMusic has been deprecated since 2004 and as such has no support - for 64-bit OpenTTD. - - As a delay is favourable over bad sounding music the "Win32" driver - is the default driver for OpenTTD. You can change this default by - setting the "musicdriver" in your openttd.cfg to "dmusic". - Custom vehicle type name is incorrectly aligned: Some NewGRFs use sprites that are bigger than normal in the "buy vehicle" window. Due to this they have to encode an offset for @@ -214,12 +198,6 @@ Train crashes entering same junction from block and path signals [#3928]: the train entering from path signal just after the backwards facing signal (from the path signal train) resolves the issue. -Crashes when playing music [#3941]: - macOS's QuickTime (default music driver) and Windows' MCI ("Win32" - music driver) crash on some songs from OpenMSX. OpenTTD cannot do - anything about this. Please report these crashes to the authors - of OpenMSX so the crash causing songs can be removed or fixed. - Crashes when run in a VM using Parallels Desktop [#4003]: When the Windows version of OpenTTD is executed in a VM under Parallels Desktop a privileged instruction exception may be thrown. @@ -230,22 +208,6 @@ Crashes when run in a VM using Parallels Desktop [#4003]: lacking support for RDTSC calls. The problem can be avoided by using other VM-software, Wine, or running natively on macOS. -OpenTTD hangs when started on 32-bit Windows [#4083]: - Under some circumstances OpenTTD might hang for hours on the - initialisation of the music driver. The exact circumstances are - unknown except that it is the "dmusic" music driver that has the - problem and that the "Win32" music driver does not. As a result - using the "Win32" music driver will work around this issue. - - As the exact circumstances are unknown, and the obvious - configuration settings related to the music driver are at their - default we are not able to detect this failure, except when Windows' - music initialisation function returns after several hours and then - there is no point in switching the music driver anymore. - The reason we still use the "Win32" music driver as default are - described in the "Long delay between switching music/song" section - of this document. - Entry- and exit signals are not dragged [#4378]: Unlike all other signal types, the entry- and exit signals are not dragged but instead normal signals are placed on subsequent track @@ -265,14 +227,6 @@ Station build date is incorrect [#4415]: to "Date at which the last (re)construction took place" but this is deemed too specific and long for that window. -Can't change volume inside OpenTTD [#4416]: - Some backends do not provide a means to change the volume of sound - effects or music. The mixing of music and sound is left to external - libraries/the operating system we can't handle the volume control - in OpenTTD. As a result you can't change the volume inside OpenTTD - for backends such as SDL; just use the volume control provided by - your operating system. - (Temporary) wrong colours when switching to full screen [#4511]: On Windows it can happen that you temporarily see wrong colours when switching to full screen OpenTTD, either by starting From b93fad74819188f8a09bbdbf85360c73e9f666bb Mon Sep 17 00:00:00 2001 From: comicsads Date: Wed, 28 Nov 2018 10:24:01 -0500 Subject: [PATCH 095/622] Fix: Spelling in code comment (#6984) --- src/script/api/script_event_types.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/api/script_event_types.hpp b/src/script/api/script_event_types.hpp index 9430168977..f13e588eed 100644 --- a/src/script/api/script_event_types.hpp +++ b/src/script/api/script_event_types.hpp @@ -363,7 +363,7 @@ private: class ScriptEventCompanyAskMerger : public ScriptEvent { public: /** - * @param owner The company that can be bough. + * @param owner The company that can be bought. * @param value The value/costs of buying the company. */ ScriptEventCompanyAskMerger(Owner owner, int32 value) : From 88894166e8244177c20cfd1edd28bb1c38881a68 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 29 Nov 2018 19:45:43 +0100 Subject: [PATCH 096/622] Update: Translations from eints italian: 23 changes by lorenzodv spanish: 2 changes by SilverSurferZzZ --- src/lang/italian.txt | 45 ++++++++++++++++++++++---------------------- src/lang/spanish.txt | 2 ++ 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 9ad7024496..53a3d342d0 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -2733,36 +2733,36 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Frame rate STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) -STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Velocità simulazione: {STRING} +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Velocità simulazione: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Numero di cicli di simulazione della partita in un secondo -STR_FRAMERATE_RATE_BLITTER :{WHITE}Frame rate grafica: {STRING} +STR_FRAMERATE_RATE_BLITTER :{BLACK}Frame rate grafica: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Numero di fotogrammi video renderizzati in un secondo -STR_FRAMERATE_SPEED_FACTOR :{WHITE}Fattore di velocità corrente della partita: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Fattore di velocità corrente della partita: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Prestazioni correnti della partita, confrontate con le prestazioni attese alla velocità di giorno normale. STR_FRAMERATE_CURRENT :{WHITE}Corrente STR_FRAMERATE_AVERAGE :{WHITE}Media -STR_FRAMERATE_DATA_POINTS :{WHITE}Dati basati su {COMMA} misurazioni -STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms -STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms -STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms -STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE} frame/s -STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} frame/s -STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} frame/s +STR_FRAMERATE_DATA_POINTS :{BLACK}Dati basati su {COMMA} misurazioni +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} frame/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} frame/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} frame/s STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! -STR_FRAMERATE_GAMELOOP :{WHITE}Totale ciclo simulazione: -STR_FRAMERATE_GL_ECONOMY :{WHITE} Gestione carichi: -STR_FRAMERATE_GL_TRAINS :{WHITE} Aggiornamento treni: -STR_FRAMERATE_GL_ROADVEHS :{WHITE} Aggiornamento automezzi: -STR_FRAMERATE_GL_SHIPS :{WHITE} Aggiornamento navi: -STR_FRAMERATE_GL_AIRCRAFT :{WHITE} Aggiornamento aeromobili: -STR_FRAMERATE_GL_LANDSCAPE :{WHITE} Aggiornamento mondo: -STR_FRAMERATE_GL_LINKGRAPH :{WHITE} Ritardo grafo di distribuzione: -STR_FRAMERATE_DRAWING :{WHITE}Renderizzazione grafica: -STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Visuali mondo: -STR_FRAMERATE_VIDEO :{WHITE}Output video: -STR_FRAMERATE_SOUND :{WHITE}Missaggio suoni: +STR_FRAMERATE_GAMELOOP :{BLACK}Totale ciclo simulazione: +STR_FRAMERATE_GL_ECONOMY :{BLACK} Gestione carichi: +STR_FRAMERATE_GL_TRAINS :{BLACK} Aggiornamento treni: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Aggiornamento automezzi: +STR_FRAMERATE_GL_SHIPS :{BLACK} Aggiornamento navi: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Aggiornamento aeromobili: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Aggiornamento mondo: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Ritardo grafo di distribuzione: +STR_FRAMERATE_DRAWING :{BLACK}Renderizzazione grafica: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Visuali mondo: +STR_FRAMERATE_VIDEO :{BLACK}Output video: +STR_FRAMERATE_SOUND :{BLACK}Missaggio suoni: ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Ciclo simulazione @@ -2802,6 +2802,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Dettagli STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Informazioni non disponibili STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtro: STR_SAVELOAD_OSKTITLE :{BLACK}Inserire un nome per il salvataggio diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index bd8162e286..eda9208cc4 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -2696,6 +2696,7 @@ STR_FRAMERATE_CURRENT :{WHITE}Actual STR_FRAMERATE_AVERAGE :{WHITE}Medio STR_FRAMERATE_DATA_POINTS :{BLACK}Datos basados en {COMMA} medidas STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! ############ End of leave-in-this-order ############ Leave those lines in this order!! @@ -4241,6 +4242,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... esta STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... carretera en la dirección incorrecta STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... las estaciones de autobús de paso no pueden tener esquinas STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... las estaciones de autobús de paso no pueden tener intersecciones +STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... carretera de un solo sentido o bloqueada # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}No se puede retirar parte de la estación... From 3b8db31a49b0f1b86e3bb8d8ef4233868fcd4951 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 25 Nov 2018 16:21:30 +0100 Subject: [PATCH 097/622] Fix: [Win32] Align sprite glyphs to the font baseline when using Uniscribe text layout. --- src/os/windows/string_uniscribe.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/os/windows/string_uniscribe.cpp b/src/os/windows/string_uniscribe.cpp index ea8b8c0224..ce61537b2b 100644 --- a/src/os/windows/string_uniscribe.cpp +++ b/src/os/windows/string_uniscribe.cpp @@ -195,6 +195,7 @@ static bool UniscribeShapeRun(const UniscribeParagraphLayoutFactory::CharType *b for (int i = 0; i < range.len; i++) { if (buff[range.pos + i] >= SCC_SPRITE_START && buff[range.pos + i] <= SCC_SPRITE_END) { range.ft_glyphs[range.char_to_glyph[i]] = range.font->fc->MapCharToGlyph(buff[range.pos + i]); + range.offsets[range.char_to_glyph[i]].dv = range.font->fc->GetAscender() - range.font->fc->GetGlyph(range.ft_glyphs[range.char_to_glyph[i]])->height - 1; // Align sprite glyphs to font baseline. } } From 587c2149b60b70606148ce53b06026e1f95ff010 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 3 Dec 2018 19:45:44 +0100 Subject: [PATCH 098/622] Update: Translations from eints croatian: 23 changes by VoyagerOne spanish: 8 changes by SilverSurferZzZ --- src/lang/croatian.txt | 45 ++++++++++++++++++++++--------------------- src/lang/spanish.txt | 14 ++++++++------ 2 files changed, 31 insertions(+), 28 deletions(-) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index a1c9dd86d0..fc7a6a53bb 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -2799,36 +2799,36 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Broj sličica STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) -STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Stopa simulacije: {STRING} +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Stopa simulacije: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Broj otkucaja igre simuliranih u sekundi. -STR_FRAMERATE_RATE_BLITTER :{WHITE}Broj sličica u sekundi: {STRING} +STR_FRAMERATE_RATE_BLITTER :{BLACK}Broj sličica u sekundi: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Broj sličica videa prikayanih u sekundi. -STR_FRAMERATE_SPEED_FACTOR :{WHITE}Trenutni faktor brzine igre: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Trenutni faktor brzine igre: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Koliko brzo se igra izvodi trenutno u usporedbi sa očekivanom brzinom u uobičajenoj simulaciji. STR_FRAMERATE_CURRENT :{WHITE}Trenutno STR_FRAMERATE_AVERAGE :{WHITE}Prosječno -STR_FRAMERATE_DATA_POINTS :{WHITE}Podaci bazirani na {COMMA} mjerama -STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms -STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms -STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms -STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE} sličica/s -STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} sličica/s -STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} sličica/s +STR_FRAMERATE_DATA_POINTS :{BLACK}Podaci bazirani na {COMMA} mjerama +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} sličica/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} sličica/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} sličica/s STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! -STR_FRAMERATE_GAMELOOP :{WHITE}Zbroj petlji igre: -STR_FRAMERATE_GL_ECONOMY :{WHITE} Korištenje tereta: -STR_FRAMERATE_GL_TRAINS :{WHITE} Otkucaji vlakova: -STR_FRAMERATE_GL_ROADVEHS :{WHITE} Otkucaji cestovnih vozila: -STR_FRAMERATE_GL_SHIPS :{WHITE} Otkucaji brodova: -STR_FRAMERATE_GL_AIRCRAFT :{WHITE} Otkucaji aviona: -STR_FRAMERATE_GL_LANDSCAPE :{WHITE} Otkucaji svijeta: -STR_FRAMERATE_GL_LINKGRAPH :Odmak linka grafikona -STR_FRAMERATE_DRAWING :{WHITE}Prikaz grafike: -STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Prikazi svijeta: -STR_FRAMERATE_VIDEO :{WHITE}Video izlaz: -STR_FRAMERATE_SOUND :{WHITE}Miksanje zvukova: +STR_FRAMERATE_GAMELOOP :{BLACK}Zbroj petlji igre: +STR_FRAMERATE_GL_ECONOMY :{BLACK} Korištenje tereta: +STR_FRAMERATE_GL_TRAINS :{BLACK} Otkucaji vlakova: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Otkucaji cestovnih vozila: +STR_FRAMERATE_GL_SHIPS :{BLACK} Otkucaji brodova: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Otkucaji aviona: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Otkucaji svijeta: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Odmak linka grafikona: +STR_FRAMERATE_DRAWING :{BLACK}Prikaz grafike: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Prikazi svijeta: +STR_FRAMERATE_VIDEO :{BLACK}Video izlaz: +STR_FRAMERATE_SOUND :{BLACK}Miksanje zvukova: ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Petlja igre @@ -2868,6 +2868,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Detalji STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nema dostupnih informacija. STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtriraj niz: STR_SAVELOAD_OSKTITLE :{BLACK}Upiši ime za spremanje igre diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index eda9208cc4..d4ce8ea6ff 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -4487,13 +4487,15 @@ STR_ERROR_CAN_T_DELETE_SIGN :{WHITE}No se pu STR_DESKTOP_SHORTCUT_COMMENT :Un juego de simulación basado en Transport Tycoon Deluxe # Translatable descriptions in media/baseset/*.ob* files -STR_BASEGRAPHICS_DOS_DESCRIPTION :Gráficos originales de Transport Tycoon Deluxe versión DOS. -STR_BASEGRAPHICS_DOS_DE_DESCRIPTION :Gráficos originales de Transport Tycoon Deluxe versión DOS (Alemán). -STR_BASEGRAPHICS_WIN_DESCRIPTION :Gráficos originales de Transport Tycoon Deluxe versión Windows. -STR_BASESOUNDS_DOS_DESCRIPTION :Sonidos originales de Transport Tycoon Deluxe versión DOS. -STR_BASESOUNDS_WIN_DESCRIPTION :Sonidos originales de Transport Tycoon Deluxe versión Windows. +STR_BASEGRAPHICS_DOS_DESCRIPTION :Gráficos originales de Transport Tycoon Deluxe, versión DOS. +STR_BASEGRAPHICS_DOS_DE_DESCRIPTION :Gráficos originales de Transport Tycoon Deluxe, versión DOS (Alemán). +STR_BASEGRAPHICS_WIN_DESCRIPTION :Gráficos originales de Transport Tycoon Deluxe, versión Windows. +STR_BASESOUNDS_DOS_DESCRIPTION :Sonidos originales de Transport Tycoon Deluxe, versión DOS. +STR_BASESOUNDS_WIN_DESCRIPTION :Sonidos originales de Transport Tycoon Deluxe, versión Windows. STR_BASESOUNDS_NONE_DESCRIPTION :Un conjunto de sonidos vacío. -STR_BASEMUSIC_WIN_DESCRIPTION :Música original de Transport Tycoon Deluxe versión Windows. +STR_BASEMUSIC_WIN_DESCRIPTION :Música original de Transport Tycoon Deluxe, versión Windows. +STR_BASEMUSIC_DOS_DESCRIPTION :Música original de Transport Tycoon Deluxe, versión DOS. +STR_BASEMUSIC_TTO_DESCRIPTION :Música original de Transport Tycoon (Original/Editor de Mundos), versión DOS. STR_BASEMUSIC_NONE_DESCRIPTION :Un conjunto de música vacío. ##id 0x2000 From cd44e33f4ed6b0d09fbcfe6311175a7f63b30af4 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 7 Dec 2018 19:45:44 +0100 Subject: [PATCH 099/622] Update: Translations from eints spanish: 4 changes by SilverSurferZzZ portuguese: 2 changes by Samu --- src/lang/portuguese.txt | 4 ++-- src/lang/spanish.txt | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index a116b64f42..d9c00b1101 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1833,8 +1833,8 @@ STR_LIVERY_TRUCK :Veículo de Mer STR_LIVERY_PASSENGER_SHIP :Barco de Passageiros STR_LIVERY_FREIGHT_SHIP :Barco Cargueiro STR_LIVERY_HELICOPTER :Helicóptero -STR_LIVERY_SMALL_PLANE :Aeronave de Pequenas Dimensões -STR_LIVERY_LARGE_PLANE :Aeronave de Grandes Dimensões +STR_LIVERY_SMALL_PLANE :Avião de Pequenas Dimensões +STR_LIVERY_LARGE_PLANE :Avião de Grandes Dimensões STR_LIVERY_PASSENGER_TRAM :Eléctrico de Passageiros STR_LIVERY_FREIGHT_TRAM :Eléctrico de Mercadorias diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index d4ce8ea6ff..395be7f8b8 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -2696,8 +2696,11 @@ STR_FRAMERATE_CURRENT :{WHITE}Actual STR_FRAMERATE_AVERAGE :{WHITE}Medio STR_FRAMERATE_DATA_POINTS :{BLACK}Datos basados en {COMMA} medidas STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} fotograma/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} fotograma/s STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_DRAWING :{BLACK}Renderizado gráfico: ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_DRAWING :Renderizado gráfico @@ -4003,7 +4006,7 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}La vent # AI configuration window STR_AI_CONFIG_CAPTION :{WHITE}Configuración de Scripts de Juego / IA -STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Script de Juego que será cargada en la próxima partida +STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Script de Juego que será cargado en la próxima partida STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}IAs que serán cargadas en la próxima partida STR_AI_CONFIG_HUMAN_PLAYER :Jugador Humano STR_AI_CONFIG_RANDOM_AI :IA aleatoria From c63f0b30058959df8b3620a7e0dac32b6c68d3ad Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 8 Dec 2018 19:45:43 +0100 Subject: [PATCH 100/622] Update: Translations from eints chinese (simplified): 28 changes by ww9980 spanish: 12 changes by SilverSurferZzZ --- src/lang/simplified_chinese.txt | 31 ++++++++++++++++++++++++++++--- src/lang/spanish.txt | 20 ++++++++++++-------- 2 files changed, 40 insertions(+), 11 deletions(-) diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index f486a6b9a0..246e803205 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -475,6 +475,7 @@ STR_ABOUT_MENU_SCREENSHOT :屏幕截图 STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :高清截图 STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :默认缩放模式下的屏幕截图 STR_ABOUT_MENU_GIANT_SCREENSHOT :全地图截图 +STR_ABOUT_MENU_SHOW_FRAMERATE :显示帧率 STR_ABOUT_MENU_ABOUT_OPENTTD :关于 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite 对齐 STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :切换边界框 @@ -650,6 +651,7 @@ STR_MUSIC_RULER_MARKER :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}没有可用的音乐包 STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}音轨 STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}乐曲主题 @@ -812,6 +814,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(总裁) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} 赞助了城镇 {TOWN} 的建设! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}一个名叫{TOWN}的城镇刚刚成立了! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}新 {STRING} 正在 {TOWN} 加紧建设! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}新 {STRING} 即将落户 {TOWN}! @@ -1336,7 +1339,9 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :设置缩略地 STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :绿色 STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :深绿色 STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :紫色 +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :鼠标右键移动地图,鼠标指针不跟随移动 STR_CONFIG_SETTING_SCROLLMODE_RMB :鼠标右键移动地图 +STR_CONFIG_SETTING_SCROLLMODE_LMB :鼠标左键移动地图 STR_CONFIG_SETTING_SMOOTH_SCROLLING :平滑视角滚动: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :设置在缩略图上点击或者发出转到特定目标的命令时主视角的转换方式,如果“打开”本选项,视角平缓滚动,“关闭”时直接跳转到目标位置 STR_CONFIG_SETTING_MEASURE_TOOLTIP :建设时显示测量数据:{STRING} @@ -1368,6 +1373,8 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :按住Command STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :按住Ctrl键 点击 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 :选择自动存档时间间隔 @@ -1603,7 +1610,7 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :游戏开局时 STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :每 {STRING}{NBSP}天刷新一次分配图 STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :指定每次计算货物分配图之间的时间。由于每次重新计算只会处理一个货物分配图元件,因此本设定不代表“每若干日重新计算整个货物分配图”。{}如果此设定赋值越小,則系统需要使用更多处理器时间计算货物分配图。相反,如果此设定赋值越大,則货物被派往新路线所需的时间越长。 STR_CONFIG_SETTING_LINKGRAPH_TIME :容许系统用 {STRING}{NBSP}天时间刷新货物分配图 -STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :當刷新货物分配图时,系统會衍生一条线程。本设定的值即为线程的持续时间。{}这设定赋值越小,线程越有可能在应当停止的时候还未完成,游戏会暂停运作至线程完成工作。相反,这设定赋值越大,則货物分配功能需要较长时间反映线路网変动的影晌。 +STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :当刷新货物分配图时,系统会创建一条线程。此处设定的数值即该线程的持续时间。{}赋值越小,线程越有可能在应当停止的时候还未完成,游戏会暂停运作至线程完成工作。相反,赋值越大,则货物分配功能需要较长时间反映线路网变动的影晌。 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :手动 STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :不对称 STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :对称 @@ -1612,7 +1619,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :假设有交通 STR_CONFIG_SETTING_DISTRIBUTION_MAIL :邮件分配方式:{STRING} STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :假设有交通路线连接甲、乙两站。“对称”指甲站往乙站的邮件数量與乙站往甲站的邮件数量大致相同。“不对称”指任何一站往另一站的邮件数量皆由系统随意决定。“手动”指系统不会自动分配邮件的目的地。 STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :装甲货物分配方式:{STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :“装甲货物”包括溫带场景的“贵重品”、寒带场景的“金块”及沙漠场景的“钻石”。使用 NewGRF 可能会改変以上设置。{} 假设有交通路线连接甲、乙两站。“对称”指甲站往乙站的货物数量與乙站往甲站的装甲货物数量大致相同。“不对称”指任何一站往另一站的装甲货物数量皆由系统随意决定。“手动”指系统不会自动分配装甲货物的目的地。{} 建议在溫带及沙漠场景使用“对称”,因为银行之间会相互发送贵重品或钻石;在寒带则应使用“不对称”,因为银行不会把金块送回金矿。 +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :“装甲货物”包括温带场景的“贵重品”、寒带场景的“金块”及沙漠场景的“钻石”。使用 NewGRF 可能会改变以上设置。{} 假设有交通路线连接甲、乙两站。“对称”指甲站往乙站的货物数量与乙站往甲站的装甲货物数量大致相同。“不对称”指任何一站往另一站的装甲货物数量皆由系统随意决定。“手动”指系统不会自动分配装甲货物的目的地。{} 建议在温带及沙漠场景使用“对称”,因为银行之间会相互发送贵重品或钻石;在寒带则应使用“不对称”,因为银行不会把金块送回金矿。 STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :其他货物分配方式:{STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :如为此设置赋值“不对称”,则任何一站往另一站的货物数量皆由系统随意决定。如为此设置赋值“手动”,则系统不会依据交通路线分配货物的目的地。 STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :分配精确度:{STRING} @@ -2257,7 +2264,7 @@ STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}无法 STR_MISSING_GRAPHICS_SET_CAPTION :{WHITE}缺失图形组 STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD 需要基础图形组用以绘制界面。您是否希望 OpenTTD 下载并安装以下图形组? -STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}是的,下载之 +STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}好,开始下载 STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}不,退出OpenTTD # Transparency settings window @@ -2687,7 +2694,19 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD 团队 # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}帧率 +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_BLITTER :{BLACK}帧率:{STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}每秒渲染更新的图像帧。 +STR_FRAMERATE_SPEED_FACTOR :{BLACK}当前游戏速度:{DECIMAL}x +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} fps +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} fps +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} fps +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms ############ Leave those lines in this order!! +STR_FRAMERATE_VIDEO :{BLACK}视频输出: +STR_FRAMERATE_SOUND :{BLACK}混响: ############ End of leave-in-this-order ############ Leave those lines in this order!! ############ End of leave-in-this-order @@ -2715,6 +2734,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_OSKTITLE :{BLACK}为存档命名 @@ -3366,6 +3386,7 @@ 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 @@ -3534,7 +3555,10 @@ STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :磁悬浮机车 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_CAP_RUNCOST :{BLACK}售价:{CURRENCY_LONG} 最大速度:{VELOCITY}{}飞机类型:{STRING}{}运载能力:{CARGO_LONG}, {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}/年 +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}售价: {CURRENCY_LONG} 最大速度: {VELOCITY}{}飞机类型: {STRING} 续航里程: {COMMA} 格{}运载能力: {CARGO_LONG}{}运行成本: {CURRENCY_LONG}/年 # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}更新 {STRING} - {STRING} @@ -4475,6 +4499,7 @@ STR_BASESOUNDS_WIN_DESCRIPTION :Transport Tycoo STR_BASESOUNDS_NONE_DESCRIPTION :一个空的音效包. STR_BASEMUSIC_WIN_DESCRIPTION :Transport Tycoon Deluxe(运输大亨Windows豪华版)的原版音乐包 STR_BASEMUSIC_DOS_DESCRIPTION :运输大亨DOS豪华版原版音乐。 +STR_BASEMUSIC_TTO_DESCRIPTION :原版运输大亨(DOS版及地图编辑器扩展)音乐。 STR_BASEMUSIC_NONE_DESCRIPTION :一个没有实际内容的音乐包. ##id 0x2000 diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 395be7f8b8..d18f6677f2 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1603,10 +1603,10 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Ninguna STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador inicial del tamaño de ciudad: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Tamaño medio de las ciudades en relación a los pueblos normales al comienzo de la partida -STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Actualizar el grafo de distribución cada {STRING}{NBSP}día{P 0:2 "" s} -STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Periodo de tiempo entre cálculos del grafo de distribución consecutivos. Esta opción se refiere a los cálculos para cada uno de los componentes del grafo, por lo cual fijar un valor no quiere decir que el grafo completo se actualizará tras ese número de días. Cuanto menor sea, mayor tiempo de CPU será necesario para calcular el grafo de distribución. Cuanto mayor sea, más tardará el grafo de distribución en adaptarse a nuevas rutas -STR_CONFIG_SETTING_LINKGRAPH_TIME :Usar {STRING}{NBSP}día{P 0:2 "" s} para el cálculo del grafo de distribución -STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Tiempo a emplear en el cálculo de cada uno de los componentes del grafo de distribución. Cuanto menor sea este valor, más probable es que se produzca ralentización en el juego. Cuanto mayor sea, más tiempo tardará la distribución en actualizarse cuando se producen cambios en las rutas +STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Actualizar el gráfico de distribución cada {STRING}{NBSP}día{P 0:2 "" s} +STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Periodo de tiempo entre cálculos del gráfico de distribución consecutivos. Esta opción se refiere a los cálculos para cada uno de los componentes del gráfico, por lo cual fijar un valor no quiere decir que el gráfico completo se actualizará tras ese número de días. Cuanto menor sea, mayor tiempo de CPU será necesario para calcular el gráfico de distribución. Cuanto mayor sea, más tardará el gráfico de distribución en adaptarse a nuevas rutas. +STR_CONFIG_SETTING_LINKGRAPH_TIME :Usar {STRING}{NBSP}día{P 0:2 "" s} para el cálculo del gráfico de distribución +STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Tiempo a emplear en el cálculo de cada uno de los componentes del gráfico de distribución. Cuanto menor sea este valor, más probable es que se produzca ralentización en el juego. Cuanto mayor sea, más tiempo tardará la distribución en actualizarse cuando se producen cambios en las rutas. STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manual STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asimétrico STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :simétrico @@ -1619,7 +1619,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :La clase de car STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Modo de distribución para otras clases de carga: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"Asimétrico" significa que se pueden mover cantidades arbitrarias de carga en ambas direcciones. "Manual" significa que no habrá distribución automática para estos tipos de carga. STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Precisión de la distribución: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Este valor determina el tiempo de CPU empleado en calcular el grafo de distribución. Si es demasiado elevado puede producir ralentización en el juego. Si es demasiado bajo la distribución puede ser poco precisa, causando que ocasionalmente se produzcan errores en los lugares a los que va la carga +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Este valor determina el tiempo de CPU empleado en calcular el gráfico de distribución. Si es demasiado elevado puede producir ralentización en el juego. Si es demasiado bajo la distribución puede ser poco precisa, causando que ocasionalmente se produzcan errores en los lugares a los que va la carga. STR_CONFIG_SETTING_DEMAND_DISTANCE :Efecto de la distancia en la demanda: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Si se fija a un valor superior a 0, la distancia entre la estación origen A de cierta carga y un posible destino B afectará a la cantidad de carga que se enviará de A a B. Cuanto más lejos esté B de A, menos carga se enviará. Cuanto mayor sea el valor de esta opción, menos carga se enviará a estaciones distantes en favor de estaciones cercanas STR_CONFIG_SETTING_DEMAND_SIZE :Cantidad de carga a devolver en modo simétrico: {STRING} @@ -1864,7 +1864,7 @@ STR_FACE_FACECODE :{BLACK}Cara del STR_FACE_FACECODE_TOOLTIP :{BLACK}Ver y/o asignar número de cara de presidente STR_FACE_FACECODE_CAPTION :{WHITE}Ver y/o asignar número de cara de presidente STR_FACE_FACECODE_SET :{WHITE}Nuevo código de cara ha sido asignado -STR_FACE_FACECODE_ERR :{WHITE}No se puede asignar número de cara de presidente - ¡debe ser un número entre 0 y 4,294,967,295! +STR_FACE_FACECODE_ERR :{WHITE}No se puede asignar número de cara de presidente - ¡Ha de ser un número entre 0 y 4,294,967,295! STR_FACE_SAVE :{BLACK}Guardar STR_FACE_SAVE_TOOLTIP :{BLACK}Guardar cara favorita STR_FACE_SAVE_DONE :{WHITE}Esta cara ha sido guardada como tu favorita en el fichero de configuración @@ -2692,12 +2692,16 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Fotogramas por segundo - FPS +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Número de fotogramas renderizados por segundo. STR_FRAMERATE_CURRENT :{WHITE}Actual STR_FRAMERATE_AVERAGE :{WHITE}Medio STR_FRAMERATE_DATA_POINTS :{BLACK}Datos basados en {COMMA} medidas STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms -STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} fotograma/s -STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} fotograma/s +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} frames/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} frames/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} frames/s +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! STR_FRAMERATE_DRAWING :{BLACK}Renderizado gráfico: From 05a93c121c2066baa58e075a3ba6f04f18ab594d Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 21 Oct 2018 18:38:29 +0200 Subject: [PATCH 101/622] Fix: [OSX] Macro redefinition warning. --- src/music/cocoa_m.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/music/cocoa_m.cpp b/src/music/cocoa_m.cpp index 8d97aedf06..2416cade0f 100644 --- a/src/music/cocoa_m.cpp +++ b/src/music/cocoa_m.cpp @@ -22,13 +22,9 @@ #include "../debug.h" #include "../base_media_base.h" -#define Rect OTTDRect -#define Point OTTDPoint #include #include #include -#undef Rect -#undef Point #include "../safeguards.h" From 8d7cd6a5262ae151e30fe6db18d04648ebe9d8d7 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 23 Sep 2018 19:26:09 +0200 Subject: [PATCH 102/622] Add: [OSX] Native natural sort implementation. --- source.list | 2 ++ src/os/macosx/string_osx.cpp | 66 ++++++++++++++++++++++++++++++++++++ src/os/macosx/string_osx.h | 19 +++++++++++ src/string.cpp | 9 +++++ src/strings.cpp | 5 +++ 5 files changed, 101 insertions(+) create mode 100644 src/os/macosx/string_osx.cpp create mode 100644 src/os/macosx/string_osx.h diff --git a/source.list b/source.list index 7b31df91bb..b89f7d736d 100644 --- a/source.list +++ b/source.list @@ -413,6 +413,7 @@ music/qtmidi.h os/macosx/macos.h os/macosx/osx_stdafx.h os/macosx/splash.h +os/macosx/string_osx.h sound/cocoa_s.h video/cocoa/cocoa_keys.h video/cocoa/cocoa_v.h @@ -1167,6 +1168,7 @@ sound/null_s.cpp music/cocoa_m.cpp sound/cocoa_s.cpp os/macosx/splash.cpp + os/macosx/string_osx.cpp #end #end diff --git a/src/os/macosx/string_osx.cpp b/src/os/macosx/string_osx.cpp new file mode 100644 index 0000000000..93c50722bd --- /dev/null +++ b/src/os/macosx/string_osx.cpp @@ -0,0 +1,66 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file string_osx.cpp Functions related to localized text support on OSX. */ + +#include "../../stdafx.h" +#include "string_osx.h" +#include "macos.h" + +#include + + +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) +static CFLocaleRef _osx_locale = NULL; + +/** Store current language locale as a CoreFounation locale. */ +void MacOSSetCurrentLocaleName(const char *iso_code) +{ + if (!MacOSVersionIsAtLeast(10, 5, 0)) return; + + if (_osx_locale != NULL) CFRelease(_osx_locale); + + CFStringRef iso = CFStringCreateWithCString(kCFAllocatorNull, iso_code, kCFStringEncodingUTF8); + _osx_locale = CFLocaleCreate(kCFAllocatorDefault, iso); + CFRelease(iso); +} + +/** + * Compares two strings using case insensitive natural sort. + * + * @param s1 First string to compare. + * @param s2 Second string to compare. + * @return 1 if s1 < s2, 2 if s1 == s2, 3 if s1 > s2, or 0 if not supported by the OS. + */ +int MacOSStringCompare(const char *s1, const char *s2) +{ + static bool supported = MacOSVersionIsAtLeast(10, 5, 0); + if (!supported) return 0; + + CFStringCompareFlags flags = kCFCompareCaseInsensitive | kCFCompareNumerically | kCFCompareLocalized | kCFCompareWidthInsensitive | kCFCompareForcedOrdering; + + CFStringRef cf1 = CFStringCreateWithCString(kCFAllocatorDefault, s1, kCFStringEncodingUTF8); + CFStringRef cf2 = CFStringCreateWithCString(kCFAllocatorDefault, s2, kCFStringEncodingUTF8); + + CFComparisonResult res = CFStringCompareWithOptionsAndLocale(cf1, cf2, CFRangeMake(0, CFStringGetLength(cf1)), flags, _osx_locale); + + CFRelease(cf1); + CFRelease(cf2); + + return (int)res + 2; +} + +#else +void MacOSSetCurrentLocaleName(const char *iso_code) {} + +int MacOSStringCompare(const char *s1, const char *s2) +{ + return 0; +} +#endif /* (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) */ diff --git a/src/os/macosx/string_osx.h b/src/os/macosx/string_osx.h new file mode 100644 index 0000000000..90bac48d23 --- /dev/null +++ b/src/os/macosx/string_osx.h @@ -0,0 +1,19 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file string_osx.h Functions related to localized text support on OSX. */ + +#ifndef STRING_OSX_H +#define STRING_OSX_H + + +void MacOSSetCurrentLocaleName(const char *iso_code); +int MacOSStringCompare(const char *s1, const char *s2); + +#endif /* STRING_OSX_H */ diff --git a/src/string.cpp b/src/string.cpp index 66140b7d4a..845225d6f5 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -33,6 +33,10 @@ #include "os/windows/string_uniscribe.h" #endif +#if defined(WITH_COCOA) +#include "os/macosx/string_osx.h" +#endif + #ifdef WITH_ICU_SORT /* Required by strnatcmp. */ #include @@ -593,6 +597,11 @@ int strnatcmp(const char *s1, const char *s2, bool ignore_garbage_at_front) if (res != 0) return res - 2; // Convert to normal C return values. #endif +#if defined(WITH_COCOA) && !defined(STRGEN) && !defined(SETTINGSGEN) + int res = MacOSStringCompare(s1, s2); + if (res != 0) return res - 2; // Convert to normal C return values. +#endif + /* Do a normal comparison if ICU is missing or if we cannot create a collator. */ return strcasecmp(s1, s2); } diff --git a/src/strings.cpp b/src/strings.cpp index 8ec9844b69..eaaa38758b 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -1791,6 +1791,11 @@ bool ReadLanguagePack(const LanguageMetadata *lang) Win32SetCurrentLocaleName(_current_language->isocode); #endif +#ifdef WITH_COCOA + extern void MacOSSetCurrentLocaleName(const char *iso_code); + MacOSSetCurrentLocaleName(_current_language->isocode); +#endif + #ifdef WITH_ICU_SORT /* Delete previous collator. */ if (_current_collator != NULL) { From 4bf216993a1df7a29922bf34e2d8191460842452 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 21 Oct 2018 18:40:39 +0200 Subject: [PATCH 103/622] Add: [OSX] Native text caret handling. --- src/os/macosx/string_osx.cpp | 122 +++++++++++++++++++++++++++++++++++ src/os/macosx/string_osx.h | 26 ++++++++ src/string.cpp | 10 +++ 3 files changed, 158 insertions(+) diff --git a/src/os/macosx/string_osx.cpp b/src/os/macosx/string_osx.cpp index 93c50722bd..4698f601be 100644 --- a/src/os/macosx/string_osx.cpp +++ b/src/os/macosx/string_osx.cpp @@ -11,6 +11,7 @@ #include "../../stdafx.h" #include "string_osx.h" +#include "../../string_func.h" #include "macos.h" #include @@ -56,6 +57,122 @@ int MacOSStringCompare(const char *s1, const char *s2) return (int)res + 2; } + +/* virtual */ void OSXStringIterator::SetString(const char *s) +{ + const char *string_base = s; + + this->utf16_to_utf8.clear(); + this->str_info.clear(); + this->cur_pos = 0; + + /* CoreText operates on UTF-16, thus we have to convert the input string. + * To be able to return proper offsets, we have to create a mapping at the same time. */ + std::vector utf16_str; ///< UTF-16 copy of the string. + while (*s != '\0') { + size_t idx = s - string_base; + + WChar c = Utf8Consume(&s); + if (c < 0x10000) { + utf16_str.push_back((UniChar)c); + } else { + /* Make a surrogate pair. */ + utf16_str.push_back((UniChar)(0xD800 + ((c - 0x10000) >> 10))); + utf16_str.push_back((UniChar)(0xDC00 + ((c - 0x10000) & 0x3FF))); + this->utf16_to_utf8.push_back(idx); + } + this->utf16_to_utf8.push_back(idx); + } + this->utf16_to_utf8.push_back(s - string_base); + + /* Query CoreText for word and cluster break information. */ + this->str_info.resize(utf16_to_utf8.size()); + + if (utf16_str.size() > 0) { + CFStringRef str = CFStringCreateWithCharactersNoCopy(kCFAllocatorDefault, &utf16_str[0], utf16_str.size(), kCFAllocatorNull); + + /* Get cluster breaks. */ + for (CFIndex i = 0; i < CFStringGetLength(str); ) { + CFRange r = CFStringGetRangeOfComposedCharactersAtIndex(str, i); + this->str_info[r.location].char_stop = true; + + i += r.length; + } + + /* Get word breaks. */ + CFStringTokenizerRef tokenizer = CFStringTokenizerCreate(kCFAllocatorDefault, str, CFRangeMake(0, CFStringGetLength(str)), kCFStringTokenizerUnitWordBoundary, _osx_locale); + + CFStringTokenizerTokenType tokenType = kCFStringTokenizerTokenNone; + while ((tokenType = CFStringTokenizerAdvanceToNextToken(tokenizer)) != kCFStringTokenizerTokenNone) { + /* Skip tokens that are white-space or punctuation tokens. */ + if ((tokenType & kCFStringTokenizerTokenHasNonLettersMask) != kCFStringTokenizerTokenHasNonLettersMask) { + CFRange r = CFStringTokenizerGetCurrentTokenRange(tokenizer); + this->str_info[r.location].word_stop = true; + } + } + + CFRelease(tokenizer); + CFRelease(str); + } + + /* End-of-string is always a valid stopping point. */ + this->str_info.back().char_stop = true; + this->str_info.back().word_stop = true; +} + +/* virtual */ size_t OSXStringIterator::SetCurPosition(size_t pos) +{ + /* Convert incoming position to an UTF-16 string index. */ + size_t utf16_pos = 0; + for (size_t i = 0; i < this->utf16_to_utf8.size(); i++) { + if (this->utf16_to_utf8[i] == pos) { + utf16_pos = i; + break; + } + } + + /* Sanitize in case we get a position inside a grapheme cluster. */ + while (utf16_pos > 0 && !this->str_info[utf16_pos].char_stop) utf16_pos--; + this->cur_pos = utf16_pos; + + return this->utf16_to_utf8[this->cur_pos]; +} + +/* virtual */ size_t OSXStringIterator::Next(IterType what) +{ + assert(this->cur_pos <= this->utf16_to_utf8.size()); + assert(what == StringIterator::ITER_CHARACTER || what == StringIterator::ITER_WORD); + + if (this->cur_pos == this->utf16_to_utf8.size()) return END; + + do { + this->cur_pos++; + } while (this->cur_pos < this->utf16_to_utf8.size() && (what == ITER_WORD ? !this->str_info[this->cur_pos].word_stop : !this->str_info[this->cur_pos].char_stop)); + + return this->cur_pos == this->utf16_to_utf8.size() ? END : this->utf16_to_utf8[this->cur_pos]; +} + +/* virtual */ size_t OSXStringIterator::Prev(IterType what) +{ + assert(this->cur_pos <= this->utf16_to_utf8.size()); + assert(what == StringIterator::ITER_CHARACTER || what == StringIterator::ITER_WORD); + + if (this->cur_pos == 0) return END; + + do { + this->cur_pos--; + } while (this->cur_pos > 0 && (what == ITER_WORD ? !this->str_info[this->cur_pos].word_stop : !this->str_info[this->cur_pos].char_stop)); + + return this->utf16_to_utf8[this->cur_pos]; +} + +/* static */ StringIterator *OSXStringIterator::Create() +{ + if (!MacOSVersionIsAtLeast(10, 5, 0)) return NULL; + + return new OSXStringIterator(); +} + #else void MacOSSetCurrentLocaleName(const char *iso_code) {} @@ -63,4 +180,9 @@ int MacOSStringCompare(const char *s1, const char *s2) { return 0; } + +/* static */ StringIterator *OSXStringIterator::Create() +{ + return NULL; +} #endif /* (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) */ diff --git a/src/os/macosx/string_osx.h b/src/os/macosx/string_osx.h index 90bac48d23..ea7904f549 100644 --- a/src/os/macosx/string_osx.h +++ b/src/os/macosx/string_osx.h @@ -12,6 +12,32 @@ #ifndef STRING_OSX_H #define STRING_OSX_H +#include "../../gfx_layout.h" +#include "../../string_base.h" +#include + +/** String iterator using CoreText as a backend. */ +class OSXStringIterator : public StringIterator { + /** Break info for a character. */ + struct CharInfo { + bool word_stop : 1; ///< Code point is suitable as a word break. + bool char_stop : 1; ///< Code point is the start of a grapheme cluster, i.e. a "character". + }; + + std::vector str_info; ///< Break information for each code point. + std::vector utf16_to_utf8; ///< Mapping from UTF-16 code point position to index in the UTF-8 source string. + + size_t cur_pos; ///< Current iteration position. + +public: + virtual void SetString(const char *s); + virtual size_t SetCurPosition(size_t pos); + virtual size_t Next(IterType what); + virtual size_t Prev(IterType what); + + static StringIterator *Create(); +}; + void MacOSSetCurrentLocaleName(const char *iso_code); int MacOSStringCompare(const char *s1, const char *s2); diff --git a/src/string.cpp b/src/string.cpp index 845225d6f5..96e1d82754 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -874,9 +874,19 @@ public: } }; +#if defined(WITH_COCOA) && !defined(STRGEN) && !defined(SETTINGSGEN) +/* static */ StringIterator *StringIterator::Create() +{ + StringIterator *i = OSXStringIterator::Create(); + if (i != NULL) return i; + + return new DefaultStringIterator(); +} +#else /* static */ StringIterator *StringIterator::Create() { return new DefaultStringIterator(); } +#endif /* defined(WITH_COCOA) && !defined(STRGEN) && !defined(SETTINGSGEN) */ #endif From 32ce1ce3473253644d1237227706e4f8ce55ab7a Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 28 Oct 2018 23:30:49 +0100 Subject: [PATCH 104/622] Add: [OSX] Text layout using the native CoreText API. By default, the native API will be used instead of ICU, but if ICU is forced in using configure, it will take precedence. --- config.lib | 12 ++ src/fontcache.cpp | 3 + src/fontcache.h | 6 + src/gfx_layout.cpp | 19 ++- src/os/macosx/string_osx.cpp | 262 +++++++++++++++++++++++++++++++++++ src/os/macosx/string_osx.h | 45 ++++++ src/strings.cpp | 2 +- 7 files changed, 347 insertions(+), 2 deletions(-) diff --git a/config.lib b/config.lib index 0fe2ccd9f0..894a22c176 100644 --- a/config.lib +++ b/config.lib @@ -2890,10 +2890,22 @@ detect_fontconfig() { } detect_icu_layout() { + if [ "$with_cocoa" != "0" ] && [ "$with_icu_layout" = "1" ]; then + log 1 "checking icu-lx... OSX, skipping" + icu_layout_config="" + return 0 + fi + detect_pkg_config "$with_icu_layout" "icu-lx" "icu_layout_config" "4.8" "1" } detect_icu_sort() { + if [ "$with_cocoa" != "0" ] && [ "$with_icu_sort" = "1" ]; then + log 1 "checking icu-i18n... OSX, skipping" + icu_sort_config="" + return 0 + fi + detect_pkg_config "$with_icu_sort" "icu-i18n" "icu_sort_config" "4.8" "1" } diff --git a/src/fontcache.cpp b/src/fontcache.cpp index 3a5dd886c1..55da0c55c8 100644 --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -210,6 +210,7 @@ class FreeTypeFontCache : public FontCache { private: FT_Face face; ///< The font face associated with this font. int req_size; ///< Requested font size. + int used_size; ///< Used font size. typedef SmallMap > FontTable; ///< Table with font table cache FontTable font_tables; ///< Cached font tables. @@ -243,6 +244,7 @@ private: public: FreeTypeFontCache(FontSize fs, FT_Face face, int pixels); ~FreeTypeFontCache(); + virtual int GetFontSize() const { return this->used_size; } virtual SpriteID GetUnicodeGlyph(WChar key) { return this->parent->GetUnicodeGlyph(key); } virtual void SetUnicodeGlyph(WChar key, SpriteID sprite) { this->parent->SetUnicodeGlyph(key, sprite); } virtual void InitializeUnicodeGlyphMap() { this->parent->InitializeUnicodeGlyphMap(); } @@ -291,6 +293,7 @@ void FreeTypeFontCache::SetFontSize(FontSize fs, FT_Face face, int pixels) pixels = Clamp(min(head->Lowest_Rec_PPEM, 20) + diff, scaled_height, MAX_FONT_SIZE); } } + this->used_size = pixels; FT_Error err = FT_Set_Pixel_Sizes(this->face, 0, pixels); if (err != FT_Err_Ok) { diff --git a/src/fontcache.h b/src/fontcache.h index 8d66ed3667..1f5e56d924 100644 --- a/src/fontcache.h +++ b/src/fontcache.h @@ -64,6 +64,12 @@ public: */ inline int GetUnitsPerEM() const { return this->units_per_em; } + /** + * Get the nominal font size of the font. + * @return The nominal font size. + */ + virtual int GetFontSize() const { return this->height; } + /** * Get the SpriteID mapped to the given key * @param key The key to get the sprite for. diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index c493e69c35..c65ead90e1 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -25,6 +25,10 @@ #include "os/windows/string_uniscribe.h" #endif /* WITH_UNISCRIBE */ +#ifdef WITH_COCOA +#include "os/macosx/string_osx.h" +#endif + #include "safeguards.h" @@ -670,7 +674,7 @@ Layouter::Layouter(const char *str, int maxw, TextColour colour, FontSize fontsi } else { /* Line is new, layout it */ FontState old_state = state; -#if defined(WITH_ICU_LAYOUT) || defined(WITH_UNISCRIBE) +#if defined(WITH_ICU_LAYOUT) || defined(WITH_UNISCRIBE) || defined(WITH_COCOA) const char *old_str = str; #endif @@ -698,6 +702,16 @@ Layouter::Layouter(const char *str, int maxw, TextColour colour, FontSize fontsi } #endif +#ifdef WITH_COCOA + if (line.layout == NULL) { + GetLayouter(line, str, state); + if (line.layout == NULL) { + state = old_state; + str = old_str; + } + } +#endif + if (line.layout == NULL) { GetLayouter(line, str, state); } @@ -841,6 +855,9 @@ void Layouter::ResetFontCache(FontSize size) #if defined(WITH_UNISCRIBE) UniscribeResetScriptCache(size); #endif +#if defined(WITH_COCOA) + MacOSResetScriptCache(size); +#endif } /** diff --git a/src/os/macosx/string_osx.cpp b/src/os/macosx/string_osx.cpp index 4698f601be..1c5d558855 100644 --- a/src/os/macosx/string_osx.cpp +++ b/src/os/macosx/string_osx.cpp @@ -12,13 +12,269 @@ #include "../../stdafx.h" #include "string_osx.h" #include "../../string_func.h" +#include "../../strings_func.h" +#include "../../table/control_codes.h" +#include "../../fontcache.h" #include "macos.h" #include #if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) +/** Cached current locale. */ static CFLocaleRef _osx_locale = NULL; +/** CoreText cache for font information, cleared when OTTD changes fonts. */ +static CTFontRef _font_cache[FS_END]; + + +/** + * Wrapper for doing layouts with CoreText. + */ +class CoreTextParagraphLayout : public ParagraphLayouter { +private: + const CoreTextParagraphLayoutFactory::CharType *text_buffer; + ptrdiff_t length; + const FontMap& font_map; + + CTTypesetterRef typesetter; + + CFIndex cur_offset = 0; ///< Offset from the start of the current run from where to output. + +public: + /** Visual run contains data about the bit of text with the same font. */ + class CoreTextVisualRun : public ParagraphLayouter::VisualRun { + private: + std::vector glyphs; + std::vector positions; + std::vector glyph_to_char; + + int total_advance = 0; + Font *font; + + public: + CoreTextVisualRun(CTRunRef run, Font *font, const CoreTextParagraphLayoutFactory::CharType *buff); + + virtual const GlyphID *GetGlyphs() const { return &this->glyphs[0]; } + virtual const float *GetPositions() const { return &this->positions[0]; } + virtual const int *GetGlyphToCharMap() const { return &this->glyph_to_char[0]; } + + virtual const Font *GetFont() const { return this->font; } + virtual int GetLeading() const { return this->font->fc->GetHeight(); } + virtual int GetGlyphCount() const { return (int)this->glyphs.size(); } + int GetAdvance() const { return this->total_advance; } + }; + + /** A single line worth of VisualRuns. */ + class CoreTextLine : public AutoDeleteSmallVector, public ParagraphLayouter::Line { + public: + CoreTextLine(CTLineRef line, const FontMap &fontMapping, const CoreTextParagraphLayoutFactory::CharType *buff) + { + CFArrayRef runs = CTLineGetGlyphRuns(line); + for (CFIndex i = 0; i < CFArrayGetCount(runs); i++) { + CTRunRef run = (CTRunRef)CFArrayGetValueAtIndex(runs, i); + + /* Extract font information for this run. */ + CFRange chars = CTRunGetStringRange(run); + FontMap::const_iterator map = fontMapping.Begin(); + while (map < fontMapping.End() - 1 && map->first <= chars.location) map++; + + *this->Append() = new CoreTextVisualRun(run, map->second, buff); + } + CFRelease(line); + } + + virtual int GetLeading() const; + virtual int GetWidth() const; + virtual int CountRuns() const { return this->Length(); } + virtual const VisualRun *GetVisualRun(int run) const { return *this->Get(run); } + + int GetInternalCharLength(WChar c) const + { + /* CoreText uses UTF-16 internally which means we need to account for surrogate pairs. */ + return c >= 0x010000U ? 2 : 1; + } + }; + + CoreTextParagraphLayout(CTTypesetterRef typesetter, const CoreTextParagraphLayoutFactory::CharType *buffer, ptrdiff_t len, const FontMap &fontMapping) : text_buffer(buffer), length(len), font_map(fontMapping), typesetter(typesetter) + { + this->Reflow(); + } + + virtual ~CoreTextParagraphLayout() + { + CFRelease(this->typesetter); + } + + virtual void Reflow() + { + this->cur_offset = 0; + } + + virtual const Line *NextLine(int max_width); +}; + + +/** Get the width of an encoded sprite font character. */ +static CGFloat SpriteFontGetWidth(void *ref_con) +{ + FontSize fs = (FontSize)((size_t)ref_con >> 24); + WChar c = (WChar)((size_t)ref_con & 0xFFFFFF); + + return GetGlyphWidth(fs, c); +} + +static CTRunDelegateCallbacks _sprite_font_callback = { + kCTRunDelegateCurrentVersion, NULL, NULL, NULL, + &SpriteFontGetWidth +}; + +/* static */ ParagraphLayouter *CoreTextParagraphLayoutFactory::GetParagraphLayout(CharType *buff, CharType *buff_end, FontMap &fontMapping) +{ + if (!MacOSVersionIsAtLeast(10, 5, 0)) return NULL; + + /* Can't layout an empty string. */ + ptrdiff_t length = buff_end - buff; + if (length == 0) return NULL; + + /* Can't layout our in-built sprite fonts. */ + for (FontMap::const_iterator i = fontMapping.Begin(); i != fontMapping.End(); i++) { + if (i->second->fc->IsBuiltInFont()) return NULL; + } + + /* Make attributed string with embedded font information. */ + CFMutableAttributedStringRef str = CFAttributedStringCreateMutable(kCFAllocatorDefault, 0); + CFAttributedStringBeginEditing(str); + + CFStringRef base = CFStringCreateWithCharactersNoCopy(kCFAllocatorDefault, buff, length, kCFAllocatorNull); + CFAttributedStringReplaceString(str, CFRangeMake(0, 0), base); + CFRelease(base); + + /* Apply font and colour ranges to our string. This is important to make sure + * that we get proper glyph boundaries on style changes. */ + int last = 0; + for (FontMap::const_iterator i = fontMapping.Begin(); i != fontMapping.End(); i++) { + if (i->first - last == 0) continue; + + if (_font_cache[i->second->fc->GetSize()] == NULL) { + /* Cache font information. */ + CFStringRef font_name = CFStringCreateWithCString(kCFAllocatorDefault, i->second->fc->GetFontName(), kCFStringEncodingUTF8); + _font_cache[i->second->fc->GetSize()] = CTFontCreateWithName(font_name, i->second->fc->GetFontSize(), NULL); + CFRelease(font_name); + } + CFAttributedStringSetAttribute(str, CFRangeMake(last, i->first - last), kCTFontAttributeName, _font_cache[i->second->fc->GetSize()]); + + CGColorRef color = CGColorCreateGenericGray((uint8)i->second->colour / 255.0f, 1.0f); // We don't care about the real colours, just that they are different. + CFAttributedStringSetAttribute(str, CFRangeMake(last, i->first - last), kCTForegroundColorAttributeName, color); + CGColorRelease(color); + + /* Install a size callback for our special sprite glyphs. */ + for (ssize_t c = last; c < i->first; c++) { + if (buff[c] >= SCC_SPRITE_START && buff[c] <= SCC_SPRITE_END) { + CTRunDelegateRef del = CTRunDelegateCreate(&_sprite_font_callback, (void *)(size_t)(buff[c] | (i->second->fc->GetSize() << 24))); + CFAttributedStringSetAttribute(str, CFRangeMake(c, 1), kCTRunDelegateAttributeName, del); + CFRelease(del); + } + } + + last = i->first; + } + CFAttributedStringEndEditing(str); + + /* Create and return typesetter for the string. */ + CTTypesetterRef typesetter = CTTypesetterCreateWithAttributedString(str); + CFRelease(str); + + return typesetter != NULL ? new CoreTextParagraphLayout(typesetter, buff, length, fontMapping) : NULL; +} + +/* virtual */ const CoreTextParagraphLayout::Line *CoreTextParagraphLayout::NextLine(int max_width) +{ + if (this->cur_offset >= this->length) return NULL; + + /* Get line break position, trying word breaking first and breaking somewhere if that doesn't work. */ + CFIndex len = CTTypesetterSuggestLineBreak(this->typesetter, this->cur_offset, max_width); + if (len <= 0) len = CTTypesetterSuggestClusterBreak(this->typesetter, this->cur_offset, max_width); + + /* Create line. */ + CTLineRef line = CTTypesetterCreateLine(this->typesetter, CFRangeMake(this->cur_offset, len)); + this->cur_offset += len; + + return line != NULL ? new CoreTextLine(line, this->font_map, this->text_buffer) : NULL; +} + +CoreTextParagraphLayout::CoreTextVisualRun::CoreTextVisualRun(CTRunRef run, Font *font, const CoreTextParagraphLayoutFactory::CharType *buff) : font(font) +{ + this->glyphs.resize(CTRunGetGlyphCount(run)); + + /* Query map of glyphs to source string index. */ + CFIndex map[this->glyphs.size()]; + CTRunGetStringIndices(run, CFRangeMake(0, 0), map); + + this->glyph_to_char.resize(this->glyphs.size()); + for (size_t i = 0; i < this->glyph_to_char.size(); i++) this->glyph_to_char[i] = (int)map[i]; + + CGPoint pts[this->glyphs.size()]; + CTRunGetPositions(run, CFRangeMake(0, 0), pts); + this->positions.resize(this->glyphs.size() * 2 + 2); + + /* Convert glyph array to our data type. At the same time, substitute + * the proper glyphs for our private sprite glyphs. */ + CGGlyph gl[this->glyphs.size()]; + CTRunGetGlyphs(run, CFRangeMake(0, 0), gl); + for (size_t i = 0; i < this->glyphs.size(); i++) { + if (buff[this->glyph_to_char[i]] >= SCC_SPRITE_START && buff[this->glyph_to_char[i]] <= SCC_SPRITE_END) { + this->glyphs[i] = font->fc->MapCharToGlyph(buff[this->glyph_to_char[i]]); + this->positions[i * 2 + 0] = pts[i].x; + this->positions[i * 2 + 1] = font->fc->GetAscender() - font->fc->GetGlyph(this->glyphs[i])->height - 1; // Align sprite glyphs to font baseline. + } else { + this->glyphs[i] = gl[i]; + this->positions[i * 2 + 0] = pts[i].x; + this->positions[i * 2 + 1] = pts[i].y; + } + } + this->total_advance = (int)CTRunGetTypographicBounds(run, CFRangeMake(0, 0), NULL, NULL, NULL); + this->positions[this->glyphs.size() * 2] = this->positions[0] + this->total_advance; +} + +/** + * Get the height of the line. + * @return The maximum height of the line. + */ +int CoreTextParagraphLayout::CoreTextLine::GetLeading() const +{ + int leading = 0; + for (const CoreTextVisualRun * const *run = this->Begin(); run != this->End(); run++) { + leading = max(leading, (*run)->GetLeading()); + } + + return leading; +} + +/** + * Get the width of this line. + * @return The width of the line. + */ +int CoreTextParagraphLayout::CoreTextLine::GetWidth() const +{ + if (this->Length() == 0) return 0; + + int total_width = 0; + for (const CoreTextVisualRun * const *run = this->Begin(); run != this->End(); run++) { + total_width += (*run)->GetAdvance(); + } + + return total_width; +} + + +/** Delete CoreText font reference for a specific font size. */ +void MacOSResetScriptCache(FontSize size) +{ + if (_font_cache[size] != NULL) { + CFRelease(_font_cache[size]); + _font_cache[size] = NULL; + } +} /** Store current language locale as a CoreFounation locale. */ void MacOSSetCurrentLocaleName(const char *iso_code) @@ -174,6 +430,7 @@ int MacOSStringCompare(const char *s1, const char *s2) } #else +void MacOSResetScriptCache(FontSize size) {} void MacOSSetCurrentLocaleName(const char *iso_code) {} int MacOSStringCompare(const char *s1, const char *s2) @@ -185,4 +442,9 @@ int MacOSStringCompare(const char *s1, const char *s2) { return NULL; } + +/* static */ ParagraphLayouter *CoreTextParagraphLayoutFactory::GetParagraphLayout(CharType *buff, CharType *buff_end, FontMap &fontMapping) +{ + return NULL; +} #endif /* (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) */ diff --git a/src/os/macosx/string_osx.h b/src/os/macosx/string_osx.h index ea7904f549..d632b0a440 100644 --- a/src/os/macosx/string_osx.h +++ b/src/os/macosx/string_osx.h @@ -38,7 +38,52 @@ public: static StringIterator *Create(); }; +/** + * Helper class to construct a new #CoreTextParagraphLayout. + */ +class CoreTextParagraphLayoutFactory { +public: + /** Helper for GetLayouter, to get the right type. */ + typedef UniChar CharType; + /** Helper for GetLayouter, to get whether the layouter supports RTL. */ + static const bool SUPPORTS_RTL = true; + /** + * Get the actual ParagraphLayout for the given buffer. + * @param buff The begin of the buffer. + * @param buff_end The location after the last element in the buffer. + * @param fontMapping THe mapping of the fonts. + * @return The ParagraphLayout instance. + */ + static ParagraphLayouter *GetParagraphLayout(CharType *buff, CharType *buff_end, FontMap &fontMapping); + + /** + * Append a wide character to the internal buffer. + * @param buff The buffer to append to. + * @param buffer_last The end of the buffer. + * @param c The character to add. + * @return The number of buffer spaces that were used. + */ + static size_t AppendToBuffer(CharType *buff, const CharType *buffer_last, WChar c) + { + if (c >= 0x010000U) { + /* Character is encoded using surrogates in UTF-16. */ + if (buff + 1 <= buffer_last) { + buff[0] = (CharType)(((c - 0x010000U) >> 10) + 0xD800); + buff[1] = (CharType)(((c - 0x010000U) & 0x3FF) + 0xDC00); + } else { + /* Not enough space in buffer. */ + *buff = 0; + } + return 2; + } else { + *buff = (CharType)(c & 0xFFFF); + return 1; + } + } +}; + +void MacOSResetScriptCache(FontSize size); void MacOSSetCurrentLocaleName(const char *iso_code); int MacOSStringCompare(const char *s1, const char *s2); diff --git a/src/strings.cpp b/src/strings.cpp index eaaa38758b..164d8a3c9f 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -2138,7 +2138,7 @@ void CheckForMissingGlyphs(bool base_font, MissingGlyphSearcher *searcher) /* Update the font with cache */ LoadStringWidthTable(searcher->Monospace()); -#if !defined(WITH_ICU_LAYOUT) && !defined(WITH_UNISCRIBE) +#if !defined(WITH_ICU_LAYOUT) && !defined(WITH_UNISCRIBE) && !defined(WITH_COCOA) /* * For right-to-left languages we need the ICU library. If * we do not have support for that library we warn the user From 68b5b11b7c73a979c5d4c68a39e92fee52070a00 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 9 Dec 2018 19:45:44 +0100 Subject: [PATCH 105/622] Update: Translations from eints spanish: 4 changes by SilverSurferZzZ --- src/lang/spanish.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index d18f6677f2..d6acda7459 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -2698,6 +2698,7 @@ STR_FRAMERATE_AVERAGE :{WHITE}Medio STR_FRAMERATE_DATA_POINTS :{BLACK}Datos basados en {COMMA} medidas STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} frames/s STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} frames/s STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} frames/s @@ -2708,6 +2709,8 @@ STR_FRAMERATE_DRAWING :{BLACK}Renderiz ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_DRAWING :Renderizado gráfico +STR_FRAMETIME_CAPTION_VIDEO :Salida de vídeo +STR_FRAMETIME_CAPTION_SOUND :Mezcla de sonido ############ End of leave-in-this-order @@ -2733,6 +2736,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Detalles STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}No hay información disponible STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Patrón de filtrado: STR_SAVELOAD_OSKTITLE :{BLACK}Introduce un nombre para el juego guardado From 863b80e880b5046d3992a922199b022f02ca9485 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 10 Dec 2018 19:45:44 +0100 Subject: [PATCH 106/622] Update: Translations from eints spanish: 6 changes by SilverSurferZzZ --- src/lang/spanish.txt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index d6acda7459..7ab645da20 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -673,13 +673,16 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Encender STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Mostrar ventana de selección de pistas musicales # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Programación Musical - '{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Índice de pistas STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Programa - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Borrar -STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Borrar programa actual (solo Personal 1 y Personal 2) -STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Pulse en la pista de música para añadirla al programa actual (solo Personal 1 y 2) -STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Pulsa sobre la canción para quitarla del programa actual (Solo Personalizado1 y Personalizado2) +STR_PLAYLIST_CHANGE_SET :{BLACK}Cambiar set +STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Borrar programa actual (solo Personalizado1 y 2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Cambia la selección musical a otro set instalado +STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Pulse en la pista de música para añadirla al programa actual (solo Personalizado1 y 2) +STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Pulsa sobre la canción para quitarla del programa actual (solo Personalizado1 y 2) # Highscore window STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Top de empresas que han alcanzado {NUM} From 777cfe56113e86fe3c8548f12191d1f988fcb46a Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 12 Dec 2018 19:45:44 +0100 Subject: [PATCH 107/622] Update: Translations from eints chinese (simplified): 2 changes by ww9980 korean: 23 changes by kevinhigh --- src/lang/korean.txt | 45 +++++++++++++++++---------------- src/lang/simplified_chinese.txt | 3 ++- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 05df4e0912..ea66904cd8 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -2704,36 +2704,36 @@ 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 :{WHITE}시뮬레이션 비율: {STRING} +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}시뮬레이션 비율: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}1초에 시뮬레이션하는 게임 틱 수입니다. -STR_FRAMERATE_RATE_BLITTER :{WHITE}그래픽 프레임레이트: {STRING} +STR_FRAMERATE_RATE_BLITTER :{BLACK}그래픽 프레임레이트: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}1초에 표현하는 비디오 프레임 수입니다. -STR_FRAMERATE_SPEED_FACTOR :{WHITE}현재 게임 속력 계수: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR :{BLACK}현재 게임 속력 계수: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}현재 게임이 일반적인 시뮬레이션 비율 속도에 비해 얼마나 빠르게 구동되고 있는지를 보여줍니다. STR_FRAMERATE_CURRENT :{WHITE}현재 STR_FRAMERATE_AVERAGE :{WHITE}평균 -STR_FRAMERATE_DATA_POINTS :{WHITE}{COMMA}개의 값을 기반으로 측정한 데이터 -STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms -STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms -STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms -STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE} 프레임/초 -STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} 프레임/초 -STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} 프레임/초 +STR_FRAMERATE_DATA_POINTS :{BLACK}{COMMA}개의 값을 기반으로 측정한 데이터 +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{BLACK} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} 프레임/초 +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} 프레임/초 +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} 프레임/초 STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA}초 ############ Leave those lines in this order!! -STR_FRAMERATE_GAMELOOP :{WHITE}총 게임 루프: -STR_FRAMERATE_GL_ECONOMY :{WHITE} 화물 처리: -STR_FRAMERATE_GL_TRAINS :{WHITE} 열차 틱: -STR_FRAMERATE_GL_ROADVEHS :{WHITE} 자동차 틱: -STR_FRAMERATE_GL_SHIPS :{WHITE} 선박 틱: -STR_FRAMERATE_GL_AIRCRAFT :{WHITE} 항공기 틱: -STR_FRAMERATE_GL_LANDSCAPE :{WHITE} 세계 틱: -STR_FRAMERATE_GL_LINKGRAPH :{WHITE} 연결 그래프 지연: -STR_FRAMERATE_DRAWING :{WHITE}그래픽 렌더링: -STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} 세계 화면: -STR_FRAMERATE_VIDEO :{WHITE}비디오 출력: -STR_FRAMERATE_SOUND :{WHITE}사운드 합성: +STR_FRAMERATE_GAMELOOP :{BLACK}총 게임 루프: +STR_FRAMERATE_GL_ECONOMY :{BLACK} 화물 처리: +STR_FRAMERATE_GL_TRAINS :{BLACK} 열차 틱: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} 자동차 틱: +STR_FRAMERATE_GL_SHIPS :{BLACK} 선박 틱: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} 항공기 틱: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} 세계 틱: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} 연결 그래프 지연: +STR_FRAMERATE_DRAWING :{BLACK}그래픽 렌더링: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} 세계 화면: +STR_FRAMERATE_VIDEO :{BLACK}비디오 출력: +STR_FRAMERATE_SOUND :{BLACK}사운드 합성: ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :게임 루프 @@ -2773,6 +2773,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_OSKTITLE :{BLACK}게임을 저장할 파일명을 입력하세요 diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 246e803205..535e94a582 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -2700,6 +2700,7 @@ STR_FRAMERATE_RATE_BLITTER :{BLACK}帧率 STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}每秒渲染更新的图像帧。 STR_FRAMERATE_SPEED_FACTOR :{BLACK}当前游戏速度:{DECIMAL}x STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} fps STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} fps STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} fps @@ -4161,7 +4162,7 @@ STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}暂停 STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}{TOWN} 地方政府不批准此操作…… STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}{TOWN}地方政府{}不同意在本市范围内再兴建一座机场 STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}{TOWN} 考虑到噪音控制,地方当局拒绝修建机场。 -STR_ERROR_BRIBE_FAILED :{WHITE}您的桥梁修建计划受到了当地投资商的关注 +STR_ERROR_BRIBE_FAILED :{WHITE}您的贿赂行动被当地检察机关发现,赃款均已没收,您在本市评价已降为最低。 # Levelling errors STR_ERROR_CAN_T_RAISE_LAND_HERE :{WHITE}不能提高这里的地面…… From 297838815326ca4ee9e7f227b5f44fcb7cd609b5 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 13 Dec 2018 19:45:44 +0100 Subject: [PATCH 108/622] Update: Translations from eints spanish: 5 changes by SilverSurferZzZ spanish (mexican): 23 changes by Absay --- src/lang/spanish.txt | 8 +++++--- src/lang/spanish_MX.txt | 45 +++++++++++++++++++++-------------------- 2 files changed, 28 insertions(+), 25 deletions(-) diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 7ab645da20..49503fc42e 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1496,11 +1496,11 @@ STR_CONFIG_SETTING_NEWS_INDUSTRY_CLOSE_HELPTEXT :Mostrar noticia STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES :Cambios en la economía: {STRING} STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES_HELPTEXT :Mostrar noticias sobre cambios globales a la economía STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY :Cambios de producción en industrias atendidas por la empresa: {STRING} -STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY_HELPTEXT :Mostrar una noticia cuando el nivel de producción de una industria que está servida por tu compañía cambia +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY_HELPTEXT :Mostrar una noticia cuando el nivel de producción de una industria, servida por tu compañía, cambia STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER :Cambios de producción en las industrias servidas por los competidores: {STRING} -STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER_HELPTEXT :Mostrar una noticia cuando el nivel de producción de una industria que está servida por compañías competidoras cambia +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER_HELPTEXT :Mostrar una noticia cuando el nivel de producción de una industria, servida por tus competidores, cambia STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :Cambios de producción de otras industrias: {STRING} -STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :Mostrar una noticia cuando el nivel de producción de una industria que no está servida por tu compañía o competidores cambia +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :Mostrar una noticia cuando el nivel de producción de una industria, no servida por tu compañía o competidores, cambia STR_CONFIG_SETTING_NEWS_ADVICE :Aviso / información de los vehículos de la empresa: {STRING} STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Mostrar mensajes sobre vehículos que requieren atención STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Nuevos vehículos: {STRING} @@ -2285,6 +2285,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Leyenda STR_LINKGRAPH_LEGEND_ALL :{BLACK}Todas STR_LINKGRAPH_LEGEND_NONE :{BLACK}Ninguna STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Seleccione las compañías a mostrar +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}sin uso @@ -2938,6 +2939,7 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Lectura más al STR_NEWGRF_ERROR_GRM_FAILED :Recursos GRF solicitados no disponibles (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} fue desactivado por {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formato de colocación de sprites inválido o desconocido (sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Demasiados elementos en la lista de valores de propiedad (sprite {3:NUM}, propiedad {4:HEX}) # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}¡Precaución! diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 350c7919e3..d3f5980c84 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -2704,36 +2704,36 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}FPS STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) -STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Simulación: {STRING} +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulación: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Número de ticks simulados por segundo. -STR_FRAMERATE_RATE_BLITTER :{WHITE}FPS de gráficos: {STRING} +STR_FRAMERATE_RATE_BLITTER :{BLACK}FPS de gráficos: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Número de cuadros por segundo. -STR_FRAMERATE_SPEED_FACTOR :{WHITE}Factor de velocidad de juego actual: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Factor de velocidad de juego actual: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Rapidez actual del juego comparada con la esperada durante una simulación normal. STR_FRAMERATE_CURRENT :{WHITE}Actual STR_FRAMERATE_AVERAGE :{WHITE}Promedio -STR_FRAMERATE_DATA_POINTS :{WHITE}Información de {COMMA} mediciones -STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms -STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms -STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms -STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE} cuadros/s -STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} cuadros/s -STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} cuadros/s +STR_FRAMERATE_DATA_POINTS :{BLACK}Información de {COMMA} mediciones +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} cuadros/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} cuadros/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} cuadros/s STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! -STR_FRAMERATE_GAMELOOP :{WHITE}Bucles de juego totales: -STR_FRAMERATE_GL_ECONOMY :{WHITE} Manejo de cargamento: -STR_FRAMERATE_GL_TRAINS :{WHITE} Ticks de trenes: -STR_FRAMERATE_GL_ROADVEHS :{WHITE} Ticks de vehículos de carretera: -STR_FRAMERATE_GL_SHIPS :{WHITE} Ticks de barcos: -STR_FRAMERATE_GL_AIRCRAFT :{WHITE} Ticks de aeronaves: -STR_FRAMERATE_GL_LANDSCAPE :{WHITE} Ticks de mapa: -STR_FRAMERATE_GL_LINKGRAPH :{WHITE} Retraso en gráfica de distribución: -STR_FRAMERATE_DRAWING :{WHITE}Presentación de gráficos: -STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Ventanas de vista generales: -STR_FRAMERATE_VIDEO :{WHITE}Salida de video: -STR_FRAMERATE_SOUND :{WHITE}Mezcla de sonido: +STR_FRAMERATE_GAMELOOP :{BLACK}Bucles de juego totales: +STR_FRAMERATE_GL_ECONOMY :{BLACK} Manejo de cargamento: +STR_FRAMERATE_GL_TRAINS :{BLACK} Ticks de trenes: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Ticks de vehículos de carretera: +STR_FRAMERATE_GL_SHIPS :{BLACK} Ticks de barcos: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Ticks de aeronaves: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Ticks de mapa: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Retraso en gráfica de distribución: +STR_FRAMERATE_DRAWING :{BLACK}Presentación de gráficos: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Ventanas de vista generales: +STR_FRAMERATE_VIDEO :{BLACK}Salida de video: +STR_FRAMERATE_SOUND :{BLACK}Mezcla de sonido: ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Bucle de juego @@ -2773,6 +2773,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Detalles STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}No hay información disponible STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtrar palabras: STR_SAVELOAD_OSKTITLE :{BLACK}Indicar un nombre para la partida a guardar From 2ab4b5dd034f89350f1816a937ce6b1bcbba454d Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 14 Dec 2018 19:45:43 +0100 Subject: [PATCH 109/622] Update: Translations from eints spanish: 3 changes by SilverSurferZzZ --- src/lang/spanish.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 49503fc42e..fb702b0fba 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -816,6 +816,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Presidente) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}¡{STRING} patrocina la construcción del nuevo municipio {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}¡Un nuevo municipio, llamado: {TOWN}, ha sido construido! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}¡Nuev{G o a} {STRING} en construcción cerca de {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}¡Nuev{G o a} {STRING} está siendo plantad{G o a} cerca de {TOWN}! @@ -3020,7 +3021,7 @@ STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (todavía requerido) STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (entregado) STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}El municipio crece cada {ORANGE}{COMMA}{BLACK}{NBSP}día{P "" s} -STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}El municipio crece cada {ORANGE}{COMMA}{BLACK}{NBSP}días{P "" s} (edificios fundados) +STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}El municipio crece cada {ORANGE}{COMMA}{BLACK}{NBSP}día{P "" s} (edificios fundados) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}El municipio {RED}no{BLACK} está creciendo STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Nivel de ruido en municipio: {ORANGE}{COMMA}{BLACK} Máx.: {ORANGE}{COMMA} STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Centrar vista sobre el municipio. Ctrl+Click abre un punto de vista en dicha posición @@ -4204,7 +4205,7 @@ STR_ERROR_PROTECTED :{WHITE}Esta emp STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}No se puede construir ningún municipio STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}No se puede renombrar el municipio... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}No se puede construir un municipio aquí... -STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}No se puede expandir municipio... +STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}No se puede expandir este municipio... STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... demasiado cercano al borde del mapa STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... demasiado cercano a otro municipio STR_ERROR_TOO_MANY_TOWNS :{WHITE}... demasiados municipios From cab39ff47fbca8964dbaf11d6168e0fa261454aa Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 24 Dec 2018 19:45:43 +0100 Subject: [PATCH 110/622] Update: Translations from eints russian: 8 changes by Lone_Wolf --- src/lang/russian.txt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 78e084ded7..22eaeb0782 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2884,17 +2884,17 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Кол-во игровых циклов, рассчитываемых в секунду. STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Кол-во отображаемых кадров в секунду. -STR_FRAMERATE_DATA_POINTS :{WHITE}Данные по {COMMA} измерени{P ю ям ям} -STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} мс -STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} мс -STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} мс -STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE} кадр{P "" а ов}/с -STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} кадр{P "" а ов}/с -STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} кадр{P "" а ов}/с +STR_FRAMERATE_DATA_POINTS :{BLACK}Данные по {COMMA} измерени{P ю ям ям} +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} мс +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} мс +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} мс +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} кадр{P "" а ов}/с +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} кадр{P "" а ов}/с +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} кадр{P "" а ов}/с STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} мс STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} с ############ Leave those lines in this order!! -STR_FRAMERATE_GL_LINKGRAPH :{WHITE} Задержка графа распределения: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Задержка графа распределения: ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Задержка графа распределения From 3be6ab555caf54222c7a43a188558ed6ec51e11a Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 25 Dec 2018 03:03:23 +0100 Subject: [PATCH 111/622] Change: use vcpkg integration in Visual Studio Removes the need for us to provide OpenTTD-useful package --- projects/openttd_vs140.vcxproj | 18 ++++++++++-------- projects/openttd_vs140.vcxproj.in | 18 ++++++++++-------- projects/openttd_vs141.vcxproj | 18 ++++++++++-------- projects/openttd_vs141.vcxproj.in | 18 ++++++++++-------- src/stdafx.h | 19 +++++++++++++------ 5 files changed, 53 insertions(+), 38 deletions(-) diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index 9fac7685ac..8164c0516e 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -22,6 +22,8 @@ openttd {668328A0-B40E-4CDB-BD72-D0064424414A} openttd + x86-windows-static + x64-windows-static @@ -105,7 +107,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -136,7 +138,7 @@ 0x0809 - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) true %(IgnoreSpecificDefaultLibraries) true @@ -170,7 +172,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug @@ -192,7 +194,7 @@ 0x0809 - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) true LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) true @@ -228,7 +230,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -259,7 +261,7 @@ 0x0809 - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) true %(IgnoreSpecificDefaultLibraries) true @@ -291,7 +293,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug @@ -317,7 +319,7 @@ 0x0809 - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) true LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) true diff --git a/projects/openttd_vs140.vcxproj.in b/projects/openttd_vs140.vcxproj.in index d6ba126b5f..6f64353df4 100644 --- a/projects/openttd_vs140.vcxproj.in +++ b/projects/openttd_vs140.vcxproj.in @@ -22,6 +22,8 @@ openttd {668328A0-B40E-4CDB-BD72-D0064424414A} openttd + x86-windows-static + x64-windows-static @@ -105,7 +107,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -136,7 +138,7 @@ 0x0809 - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) true %(IgnoreSpecificDefaultLibraries) true @@ -170,7 +172,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug @@ -192,7 +194,7 @@ 0x0809 - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) true LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) true @@ -228,7 +230,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -259,7 +261,7 @@ 0x0809 - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) true %(IgnoreSpecificDefaultLibraries) true @@ -291,7 +293,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug @@ -317,7 +319,7 @@ 0x0809 - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) true LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) true diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj index ae3d7be78b..cf55989477 100644 --- a/projects/openttd_vs141.vcxproj +++ b/projects/openttd_vs141.vcxproj @@ -22,6 +22,8 @@ openttd {668328A0-B40E-4CDB-BD72-D0064424414A} openttd + x86-windows-static + x64-windows-static @@ -105,7 +107,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -136,7 +138,7 @@ 0x0809 - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) true %(IgnoreSpecificDefaultLibraries) true @@ -170,7 +172,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug @@ -192,7 +194,7 @@ 0x0809 - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) true LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) true @@ -228,7 +230,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -259,7 +261,7 @@ 0x0809 - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) true %(IgnoreSpecificDefaultLibraries) true @@ -291,7 +293,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug @@ -317,7 +319,7 @@ 0x0809 - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) true LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) true diff --git a/projects/openttd_vs141.vcxproj.in b/projects/openttd_vs141.vcxproj.in index f231c6264d..8154a14a0d 100644 --- a/projects/openttd_vs141.vcxproj.in +++ b/projects/openttd_vs141.vcxproj.in @@ -22,6 +22,8 @@ openttd {668328A0-B40E-4CDB-BD72-D0064424414A} openttd + x86-windows-static + x64-windows-static @@ -105,7 +107,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -136,7 +138,7 @@ 0x0809 - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) true %(IgnoreSpecificDefaultLibraries) true @@ -170,7 +172,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug @@ -192,7 +194,7 @@ 0x0809 - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) true LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) true @@ -228,7 +230,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -259,7 +261,7 @@ 0x0809 - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) true %(IgnoreSpecificDefaultLibraries) true @@ -291,7 +293,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;LZMA_API_STATIC;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug @@ -317,7 +319,7 @@ 0x0809 - winmm.lib;ws2_32.lib;imm32.lib;libpng.lib;zlibstat.lib;lzo2.lib;liblzma.lib;libfreetype2.lib;%(AdditionalDependencies) + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) true LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) true diff --git a/src/stdafx.h b/src/stdafx.h index 54709d1514..fb384ca823 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -245,12 +245,19 @@ #define fseek _fseeki64 #endif /* _WIN64 || WIN64 */ - /* This is needed to zlib uses the stdcall calling convention on visual studio */ - #if defined(WITH_ZLIB) || defined(WITH_PNG) - #if !defined(ZLIB_WINAPI) - #define ZLIB_WINAPI - #endif - #endif + /* zlib from vcpkg use cdecl calling convention without enforcing it in the headers */ +# if defined(WITH_ZLIB) +# if !defined(ZEXPORT) +# define ZEXPORT CDECL +# endif +# endif + + /* freetype from vcpkg use cdecl calling convention without enforcing it in the headers */ +# if defined(WITH_FREETYPE) +# if !defined(FT_EXPORT) +# define FT_EXPORT( x ) extern "C" x CDECL +# endif +# endif #define strcasecmp stricmp #define strncasecmp strnicmp From 28ff1be85b14c8d0520d6d6a1c697db76d41f39e Mon Sep 17 00:00:00 2001 From: glx Date: Wed, 26 Dec 2018 00:42:59 +0100 Subject: [PATCH 112/622] Update: replace openttd-useful with vcpkg in README --- README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 83e1097bbe..6f6476cebd 100644 --- a/README.md +++ b/README.md @@ -511,15 +511,14 @@ create one after closing. ### Windows: -You need Microsoft Visual Studio .NET. Open the project file +You need Microsoft Visual Studio 2015 Update 3 or more recent. Open the project file and it should build automatically. In case you want to build with SDL support you need to add WITH_SDL to the project settings. -PNG (WITH_PNG) and ZLIB (WITH_ZLIB) support is enabled by default. For these -to work you need their development files. For best results, download the -openttd-useful.zip file from https://www.openttd.org/download-openttd-useful. -Put the header files into your compiler's include/ directory and the -library (.lib) files into the lib/ directory. +PNG (WITH_PNG), ZLIB (WITH_ZLIB), LZO (WITH_LZO), Freetype (WITH_FREETYPE) and +LZMA (WITH_LZMA) support is enabled by default. For these to work you need their +development files. To get them just use vcpkg from https://github.com/Microsoft/vcpkg +using x86-windows-static and x64-windows-static triplets. For more help with VS see docs/Readme_Windows_MSVC.txt. You can also build it using the Makefile with MSYS/MinGW or Cygwin/MinGW. From 65bc7123d19b2be5e1efba0d65c208cd63d0bd80 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Wed, 26 Dec 2018 10:08:57 +0100 Subject: [PATCH 113/622] Update: Readme_Windows_MSVC documentation now reflects the current reality again It was not updated for a while, and kinda out-of-date. This should bring it back to reality. --- README.md | 2 +- docs/Readme_Windows_MSVC.md | 70 ++++++++++++++++++++++ docs/Readme_Windows_MSVC.txt | 109 ----------------------------------- 3 files changed, 71 insertions(+), 110 deletions(-) create mode 100644 docs/Readme_Windows_MSVC.md delete mode 100644 docs/Readme_Windows_MSVC.txt diff --git a/README.md b/README.md index 6f6476cebd..96d3e49f36 100644 --- a/README.md +++ b/README.md @@ -519,7 +519,7 @@ PNG (WITH_PNG), ZLIB (WITH_ZLIB), LZO (WITH_LZO), Freetype (WITH_FREETYPE) and LZMA (WITH_LZMA) support is enabled by default. For these to work you need their development files. To get them just use vcpkg from https://github.com/Microsoft/vcpkg using x86-windows-static and x64-windows-static triplets. -For more help with VS see docs/Readme_Windows_MSVC.txt. +For more help with VS see docs/Readme_Windows_MSVC.md. You can also build it using the Makefile with MSYS/MinGW or Cygwin/MinGW. Please read the Makefile for more information. diff --git a/docs/Readme_Windows_MSVC.md b/docs/Readme_Windows_MSVC.md new file mode 100644 index 0000000000..c60904c72a --- /dev/null +++ b/docs/Readme_Windows_MSVC.md @@ -0,0 +1,70 @@ +# Compiling OpenTTD using Microsoft Visual C++ + +Last updated: 2018-12-27 + +## Supported MSVC compilers + +OpenTTD includes projects for Visual Studio 2015 Update 3 or more recent. +You can download the free Visual Studio Community Edition from Microsoft at +https://visualstudio.microsoft.com/vs/community/. + +## Required files + +### Microsoft platform files + +OpenTTD needs the Platform SDK, if it isn't installed already. This can be +done during installing Visual Studio, by selecting +`Visual C++ MFC for x86 and x64` (and possibly +`Visual C++ ATL for x86 and x64` depending on your version). If not, you +can get it at this location: + +- [MS Windows Platform SDK](http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en) + +Install the SDK by following the instructions as given. + +### OpenTTD dependencies + +Dependencies for OpenTTD on Windows are handled via +[vcpkg](https://github.com/Microsoft/vcpkg/). First you need to install vcpkg +by following the `Quick Start` intructions of their +[README](https://github.com/Microsoft/vcpkg/blob/master/README.md). + +After this, you can install the dependencies OpenTTD needs. We advise to use +the `static` versions, and OpenTTD currently needs the following dependencies: + +- freetype +- liblzma +- libpng +- lzo +- zlib + +To install both the x64 (64bit) and x86 (32bit) variants, you can use: + +```ps +.\vcpkg install freetype:x64-windows-static liblzma:x64-windows-static libpng:x64-windows-static lzo:x64-windows-static zlib:x64-windows-static +.\vcpkg install freetype:x86-windows-static liblzma:x86-windows-static libpng:x86-windows-static lzo:x86-windows-static zlib:x86-windows-static +``` + +## TTD Graphics files + +See section 4.1 of README.md for the required 3rdparty files and how to install them. + +## Compiling + +Open the appropriate `sln` (Solution) file for your version of Visual Studio: + +- VS 2015: projects/openttd_vs140.sln +- VS 2017: projects/openttd_vs141.sln + +Set the build mode to `Release` in +`Build > Configuration manager > Active solution configuration`. +You can now compile. + +If everything works well the binary should be in `objs\Win[32|64]\Release\openttd.exe` +and in `bin\openttd.exe` + +## Problems + +If compilation fails, double-check that you are using the latest github +source. If it still doesn't work, check in on IRC (irc://irc.oftc.net/openttd), +to ask for help. diff --git a/docs/Readme_Windows_MSVC.txt b/docs/Readme_Windows_MSVC.txt deleted file mode 100644 index 00896f00b9..0000000000 --- a/docs/Readme_Windows_MSVC.txt +++ /dev/null @@ -1,109 +0,0 @@ -Compiling OpenTTD using Microsoft Visual C++ -Last updated: 2018-03-21 --------------------------------------------- -PLEASE READ THE ENTIRE DOCUMENT BEFORE DOING ANY ACTUAL CHANGES!! - - -SUPPORTED MSVC COMPILERS ------------------------- -OpenTTD includes projects for Microsoft Visual Studio 2005 and later. -This is the earliest compiler supported, Visual C++ 2003, Visual C++ 6.0, -or earlier, will not compile OpenTTD. -You can download the free Visual Studio Community Edition from Microsoft. - - -1) REQUIRED FILES ------------------ -You might already have some of the files already installed, so check before -downloading; mostly because the Platform SDK is about 500MB. -Download the following files: - - * openttd-useful.zip (http://binaries.openttd.org/extra/openttd-useful/) - * MS Windows Platform SDK (http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en) - * afxres.h (http://www-d0.fnal.gov/d0dist/dist/packages/d0ve/devel/windows/AFXRES.H) - -...and of course the newest source from svn://svn.openttd.org/trunk - -You need an SVN-client to download the source from subversion: - - * CLI Subversion (http://subversion.tigris.org/) - * GUI TortoiseSVN (http://tortoisesvn.tigris.org/) - - -2) INCLUDES AND LIBRARIES -------------------------- -Put the newly downloaded files in the VC lib\ and include\ directories; where -"C:\Program Files\Microsoft Visual Studio 9.0\VC" is your location of Visual C. -If you are compiling for an x64 system, use the include\ and lib\ directories -from the win64/ folder. - - * openttd-useful.zip\include\* - * afxresh.h - to > C:\Program Files\Microsoft Visual Studio 9.0\VC\Include - - * openttd-useful.zip\lib\* - to > C:\Program Files\Microsoft Visual Studio 9.0\VC\Lib - -Custom directories might be recommended, check 2.2) - - -2.1) INCLUDES AND LIBRARIES - DIRECTX/PLATFORM SDK --------------------------------------------------- -Basically the same procedure as with the useful zip file, providing -you are not using the Microsoft installer. Put the include files in the -include\ directory and the library files to the Lib\ directory. - -It is recommended to use custom directories so you don't overwrite any -default header or library files. - - -2.2) CUSTOM DIRECTORIES ------------------------ -If you have put the above include and/or library files into custom folders, -MSVC will not find them by default. You need to add these paths to VC through: - -Tools > Options > Projects and Solutions > VC++ Directories > show directories for - - * Include files: Add the DirectX/Platform SDK include dir you've created - * Library files: Add the path to the SDK custom lib dir - -NOTE: make sure that the directory for the DirectX SDK is the first one in the -list, above all others, otherwise compilation will most likely fail!! - - -3) TTD GRAPHICS FILES ---------------------- -See section 4.1 of README.md for the required 3rdparty files and how to install them. - - -4) COMPILING ------------- -Open the appropriate "sln" (Solution) file for your version of Visual Studio: - - VS 2005: projects/openttd_vs80.sln - - VS 2008: projects/openttd_vs90.sln - - VS 2010: projects/openttd_vs100.sln - - VS 2015: projects/openttd_vs140.sln -Set the build mode to 'Release' in -Build > Configuration manager > Active solution configuration > select "Release" -Compile... - -If everything works well the binary should be in objs/Win[32|64]/Release/openttd.exe - - -5) EDITING, CHANGING SOURCE CODE --------------------------------- -Set the build mode (back to) 'Debug' -Change the startup project to openttd by right-clicking the 'openttd' project -in the Solution Explorer and selecting 'Set as Startup Project'. The 'openttd' -project should now show up bold instead of 'strgen'. - - -6) PROBLEMS? ------------- -If compilation fails, double-check that you are using the latest SVN (!) -source. If it still doesn't work, check in on IRC (irc://irc.oftc.net/openttd), -to ask about reasons; or just wait. The problem will most likely solve itself -within a few days as the problem is noticed and fixed. - -An up-to-date version of this README can be found on the wiki: -http://wiki.openttd.org/Microsoft_Visual_C%2B%2B_2008_Express_Editions From 8890926b0d1069aec7ef53fd84868a7a3ca02c05 Mon Sep 17 00:00:00 2001 From: Joan Josep Date: Thu, 27 Dec 2018 09:53:55 +0100 Subject: [PATCH 114/622] Fix #6974: Add save-load filter widget to api --- src/script/api/game/game_window.hpp.sq | 1 + src/script/api/script_window.hpp | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/script/api/game/game_window.hpp.sq b/src/script/api/game/game_window.hpp.sq index 7ce2c70292..9fc9526cc2 100644 --- a/src/script/api/game/game_window.hpp.sq +++ b/src/script/api/game/game_window.hpp.sq @@ -438,6 +438,7 @@ void SQGSWindow_Register(Squirrel *engine) SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_CAPTION, "WID_SL_CAPTION"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_SORT_BYNAME, "WID_SL_SORT_BYNAME"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_SORT_BYDATE, "WID_SL_SORT_BYDATE"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_FILTER, "WID_SL_FILTER"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_BACKGROUND, "WID_SL_BACKGROUND"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_FILE_BACKGROUND, "WID_SL_FILE_BACKGROUND"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SL_HOME_BUTTON, "WID_SL_HOME_BUTTON"); diff --git a/src/script/api/script_window.hpp b/src/script/api/script_window.hpp index 9dcf58e05b..e11742bafb 100644 --- a/src/script/api/script_window.hpp +++ b/src/script/api/script_window.hpp @@ -1001,7 +1001,7 @@ public: }; /* automatically generated from ../../widgets/cheat_widget.h */ - /** Widgets of the #CheatWindow class.. */ + /** Widgets of the #CheatWindow class. */ enum CheatWidgets { WID_C_PANEL = ::WID_C_PANEL, ///< Panel where all cheats are shown in. }; @@ -1272,6 +1272,7 @@ public: WID_SL_CAPTION = ::WID_SL_CAPTION, ///< Caption of the window. WID_SL_SORT_BYNAME = ::WID_SL_SORT_BYNAME, ///< Sort by name button. WID_SL_SORT_BYDATE = ::WID_SL_SORT_BYDATE, ///< Sort by date button. + WID_SL_FILTER = ::WID_SL_FILTER, ///< Filter list of files WID_SL_BACKGROUND = ::WID_SL_BACKGROUND, ///< Background of window. WID_SL_FILE_BACKGROUND = ::WID_SL_FILE_BACKGROUND, ///< Background of file selection. WID_SL_HOME_BUTTON = ::WID_SL_HOME_BUTTON, ///< Home button. From c540d7244531d501f16b485a3e45e358f98853be Mon Sep 17 00:00:00 2001 From: glx Date: Sun, 9 Dec 2018 02:28:14 +0100 Subject: [PATCH 115/622] Fix: [Win32] WIN32 may not be defined, always prefer the compiler predefined macro _WIN32 --- src/ai/ai_info.cpp | 4 ++-- src/bootstrap_gui.cpp | 2 +- src/core/endian_type.hpp | 4 ++-- src/debug.cpp | 4 ++-- src/fileio.cpp | 18 +++++++++--------- src/fileio_func.h | 4 ++-- src/fios.cpp | 8 ++++---- src/fontdetection.cpp | 2 +- src/game/game_info.cpp | 4 ++-- src/ini.cpp | 4 ++-- src/network/core/core.cpp | 6 +++--- src/network/core/host.cpp | 2 +- src/network/core/os_abstraction.h | 6 +++--- src/openttd.cpp | 10 +++++----- src/script/script_scanner.cpp | 2 +- src/sdl.h | 2 +- src/settings.cpp | 4 ++-- src/settingsgen/settingsgen.cpp | 4 ++-- src/stdafx.h | 18 +++++++++--------- src/strgen/strgen.cpp | 12 ++++++------ src/string.cpp | 8 ++++---- src/strings.cpp | 6 +++--- src/table/win32_settings.ini | 4 ++-- src/video/dedicated_v.cpp | 6 +++--- src/video/sdl_v.cpp | 4 ++-- 25 files changed, 74 insertions(+), 74 deletions(-) diff --git a/src/ai/ai_info.cpp b/src/ai/ai_info.cpp index 9c27006c47..43a4345460 100644 --- a/src/ai/ai_info.cpp +++ b/src/ai/ai_info.cpp @@ -32,9 +32,9 @@ static bool CheckAPIVersion(const char *api_version) strcmp(api_version, "1.8") == 0 || strcmp(api_version, "1.9") == 0; } -#if defined(WIN32) +#if defined(_WIN32) #undef GetClassName -#endif /* WIN32 */ +#endif /* _WIN32 */ template <> const char *GetClassName() { return "AIInfo"; } /* static */ void AIInfo::RegisterAPI(Squirrel *engine) diff --git a/src/bootstrap_gui.cpp b/src/bootstrap_gui.cpp index 62f5450c5b..3fb52a1f9e 100644 --- a/src/bootstrap_gui.cpp +++ b/src/bootstrap_gui.cpp @@ -220,7 +220,7 @@ bool HandleBootstrap() if (BlitterFactory::GetCurrentBlitter()->GetScreenDepth() == 0) goto failure; /* If there is no network or no freetype, then there is nothing we can do. Go straight to failure. */ -#if defined(ENABLE_NETWORK) && defined(WITH_FREETYPE) && (defined(WITH_FONTCONFIG) || defined(WIN32) || defined(__APPLE__)) +#if defined(ENABLE_NETWORK) && defined(WITH_FREETYPE) && (defined(WITH_FONTCONFIG) || defined(_WIN32) || defined(__APPLE__)) if (!_network_available) goto failure; /* First tell the game we're bootstrapping. */ diff --git a/src/core/endian_type.hpp b/src/core/endian_type.hpp index 453bf5402c..4058c5c19a 100644 --- a/src/core/endian_type.hpp +++ b/src/core/endian_type.hpp @@ -26,7 +26,7 @@ #define TTD_BIG_ENDIAN 1 /* Windows has always LITTLE_ENDIAN */ -#if defined(WIN32) || defined(__OS2__) || defined(WIN64) +#if defined(_WIN32) || defined(__OS2__) # define TTD_ENDIAN TTD_LITTLE_ENDIAN #elif defined(OSX) # include @@ -42,6 +42,6 @@ # else # define TTD_ENDIAN TTD_BIG_ENDIAN # endif -#endif /* WIN32 || __OS2__ || WIN64 */ +#endif /* _WIN32 || __OS2__ */ #endif /* ENDIAN_TYPE_HPP */ diff --git a/src/debug.cpp b/src/debug.cpp index f8f3f0ad56..13df98db34 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -17,7 +17,7 @@ #include "fileio_func.h" #include "settings_type.h" -#if defined(WIN32) || defined(WIN64) +#if defined(_WIN32) #include "os/windows/win32.h" #endif @@ -139,7 +139,7 @@ static void debug_print(const char *dbg, const char *buf) } else { char buffer[512]; seprintf(buffer, lastof(buffer), "%sdbg: [%s] %s\n", GetLogPrefix(), dbg, buf); -#if defined(WIN32) || defined(WIN64) +#if defined(_WIN32) TCHAR system_buf[512]; convert_to_fs(buffer, system_buf, lengthof(system_buf), true); _fputts(system_buf, stderr); diff --git a/src/fileio.cpp b/src/fileio.cpp index 5530965e96..0e6d86e3c7 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -15,7 +15,7 @@ #include "fios.h" #include "string_func.h" #include "tar_type.h" -#ifdef WIN32 +#ifdef _WIN32 #include # define access _taccess #elif defined(__HAIKU__) @@ -361,7 +361,7 @@ char *FioFindFullPath(char *buf, const char *last, Subdirectory subdir, const ch FOR_ALL_SEARCHPATHS(sp) { FioGetFullPath(buf, last, sp, subdir, filename); if (FileExists(buf)) return buf; -#if !defined(WIN32) +#if !defined(_WIN32) /* Be, as opening files, aware that sometimes the filename * might be in uppercase when it is in lowercase on the * disk. Of course Windows doesn't care about casing. */ @@ -399,7 +399,7 @@ char *FioGetDirectory(char *buf, const char *last, Subdirectory subdir) static FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath sp, Subdirectory subdir, size_t *filesize) { -#if defined(WIN32) && defined(UNICODE) +#if defined(_WIN32) && defined(UNICODE) /* fopen is implemented as a define with ellipses for * Unicode support (prepend an L). As we are not sending * a string, but a variable, it 'renames' the variable, @@ -416,12 +416,12 @@ static FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath s seprintf(buf, lastof(buf), "%s%s%s", _searchpaths[sp], _subdirs[subdir], filename); } -#if defined(WIN32) +#if defined(_WIN32) if (mode[0] == 'r' && GetFileAttributes(OTTD2FS(buf)) == INVALID_FILE_ATTRIBUTES) return NULL; #endif f = fopen(buf, mode); -#if !defined(WIN32) +#if !defined(_WIN32) if (f == NULL && strtolower(buf + ((subdir == NO_DIRECTORY) ? 0 : strlen(_searchpaths[sp]) - 1))) { f = fopen(buf, mode); } @@ -535,7 +535,7 @@ void FioCreateDirectory(const char *name) { /* Ignore directory creation errors; they'll surface later on, and most * of the time they are 'directory already exists' errors anyhow. */ -#if defined(WIN32) +#if defined(_WIN32) CreateDirectory(OTTD2FS(name), NULL); #elif defined(OS2) && !defined(__INNOTEK_LIBC__) mkdir(OTTD2FS(name)); @@ -979,14 +979,14 @@ bool ExtractTar(const char *tar_filename, Subdirectory subdir) return true; } -#if defined(WIN32) +#if defined(_WIN32) /** * Determine the base (personal dir and game data dir) paths * @param exe the path from the current path to the executable * @note defined in the OS related files (os2.cpp, win32.cpp, unix.cpp etc) */ extern void DetermineBasePaths(const char *exe); -#else /* defined(WIN32) */ +#else /* defined(_WIN32) */ /** * Changes the working directory to the path of the give executable. @@ -1149,7 +1149,7 @@ extern void cocoaSetApplicationBundleDir(); _searchpaths[SP_APPLICATION_BUNDLE_DIR] = NULL; #endif } -#endif /* defined(WIN32) */ +#endif /* defined(_WIN32) */ const char *_personal_dir; diff --git a/src/fileio_func.h b/src/fileio_func.h index 6383180744..f5ef58ac06 100644 --- a/src/fileio_func.h +++ b/src/fileio_func.h @@ -118,7 +118,7 @@ public: DECLARE_ENUM_AS_BIT_SET(TarScanner::Mode) /* Implementation of opendir/readdir/closedir for Windows */ -#if defined(WIN32) +#if defined(_WIN32) struct DIR; struct dirent { // XXX - only d_name implemented @@ -136,7 +136,7 @@ int closedir(DIR *d); /* Use system-supplied opendir/readdir/closedir functions */ # include # include -#endif /* defined(WIN32) */ +#endif /* defined(_WIN32) */ /** * A wrapper around opendir() which will convert the string from diff --git a/src/fios.cpp b/src/fios.cpp index f4a25e1ed2..73365ddc29 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -20,9 +20,9 @@ #include "string_func.h" #include -#ifndef WIN32 +#ifndef _WIN32 # include -#endif /* WIN32 */ +#endif /* _WIN32 */ #include "table/strings.h" @@ -153,7 +153,7 @@ const char *FiosBrowseTo(const FiosItem *item) { switch (item->type) { case FIOS_TYPE_DRIVE: -#if defined(WIN32) || defined(__OS2__) +#if defined(_WIN32) || defined(__OS2__) seprintf(_fios_path, _fios_path_last, "%c:" PATHSEP, item->title[0]); #endif break; @@ -318,7 +318,7 @@ bool FiosFileScanner::AddFile(const char *filename, size_t basepath_length, cons } FiosItem *fios = file_list.Append(); -#ifdef WIN32 +#ifdef _WIN32 struct _stat sb; if (_tstat(OTTD2FS(filename), &sb) == 0) { #else diff --git a/src/fontdetection.cpp b/src/fontdetection.cpp index 14eef9f640..4279d60f3b 100644 --- a/src/fontdetection.cpp +++ b/src/fontdetection.cpp @@ -28,7 +28,7 @@ extern FT_Library _library; * Windows support * ======================================================================================== */ -#ifdef WIN32 +#ifdef _WIN32 #include "core/alloc_func.hpp" #include "core/math_func.hpp" #include diff --git a/src/game/game_info.cpp b/src/game/game_info.cpp index 9761532965..f8c04608b7 100644 --- a/src/game/game_info.cpp +++ b/src/game/game_info.cpp @@ -29,9 +29,9 @@ static bool CheckAPIVersion(const char *api_version) strcmp(api_version, "1.8") == 0 || strcmp(api_version, "1.9") == 0; } -#if defined(WIN32) +#if defined(_WIN32) #undef GetClassName -#endif /* WIN32 */ +#endif /* _WIN32 */ template <> const char *GetClassName() { return "GSInfo"; } /* static */ void GameInfo::RegisterAPI(Squirrel *engine) diff --git a/src/ini.cpp b/src/ini.cpp index 905ebfacf8..6767d8525d 100644 --- a/src/ini.cpp +++ b/src/ini.cpp @@ -19,7 +19,7 @@ # include #endif -#ifdef WIN32 +#ifdef _WIN32 # include # include # include "core/mem_func.hpp" @@ -87,7 +87,7 @@ bool IniFile::SaveToDisk(const char *filename) fclose(f); #endif -#if defined(WIN32) || defined(WIN64) +#if defined(_WIN32) /* _tcsncpy = strcpy is TCHAR is char, but isn't when TCHAR is wchar. */ #undef strncpy /* Allocate space for one more \0 character. */ diff --git a/src/network/core/core.cpp b/src/network/core/core.cpp index 7a2ad92a29..c8db860dd5 100644 --- a/src/network/core/core.cpp +++ b/src/network/core/core.cpp @@ -64,7 +64,7 @@ bool NetworkCoreInitialize() #endif /* __MORPHOS__ / __AMIGA__ */ /* Let's load the network in windows */ -#ifdef WIN32 +#ifdef _WIN32 { WSADATA wsa; DEBUG(net, 3, "[core] loading windows socket library"); @@ -73,7 +73,7 @@ bool NetworkCoreInitialize() return false; } } -#endif /* WIN32 */ +#endif /* _WIN32 */ return true; } @@ -94,7 +94,7 @@ void NetworkCoreShutdown() if (SocketBase != NULL) CloseLibrary(SocketBase); #endif -#if defined(WIN32) +#if defined(_WIN32) WSACleanup(); #endif } diff --git a/src/network/core/host.cpp b/src/network/core/host.cpp index e431dde9fc..216839032b 100644 --- a/src/network/core/host.cpp +++ b/src/network/core/host.cpp @@ -107,7 +107,7 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // GE freeifaddrs(ifap); } -#elif defined(WIN32) +#elif defined(_WIN32) static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // Win32 implementation { SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0); diff --git a/src/network/core/os_abstraction.h b/src/network/core/os_abstraction.h index c24cc9f8fe..c320cd9102 100644 --- a/src/network/core/os_abstraction.h +++ b/src/network/core/os_abstraction.h @@ -21,7 +21,7 @@ #ifdef ENABLE_NETWORK /* Windows stuff */ -#if defined(WIN32) || defined(WIN64) +#if defined(_WIN32) #include #include #include @@ -125,7 +125,7 @@ static inline void OTTDfreeaddrinfo(struct addrinfo *ai) } #define freeaddrinfo OTTDfreeaddrinfo #endif /* __MINGW32__ && __CYGWIN__ */ -#endif /* WIN32 */ +#endif /* _WIN32 */ /* UNIX stuff */ #if defined(UNIX) && !defined(__OS2__) @@ -290,7 +290,7 @@ typedef unsigned long in_addr_t; */ static inline bool SetNonBlocking(SOCKET d) { -#ifdef WIN32 +#ifdef _WIN32 u_long nonblocking = 1; #else int nonblocking = 1; diff --git a/src/openttd.cpp b/src/openttd.cpp index 03c8aa2869..703f04f010 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -168,7 +168,7 @@ static void ShowHelp() " -P password = Password to join company\n" " -D [ip][:port] = Start dedicated server\n" " -l ip[:port] = Redirect DEBUG()\n" -#if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(WIN32) +#if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(_WIN32) " -f = Fork into the background (dedicated only)\n" #endif #endif /* ENABLE_NETWORK */ @@ -212,7 +212,7 @@ static void ShowHelp() /* ShowInfo put output to stderr, but version information should go * to stdout; this is the only exception */ -#if !defined(WIN32) && !defined(WIN64) +#if !defined(_WIN32) printf("%s\n", buf); #else ShowInfo(buf); @@ -250,7 +250,7 @@ static void WriteSavegameInfo(const char *name) /* ShowInfo put output to stderr, but version information should go * to stdout; this is the only exception */ -#if !defined(WIN32) && !defined(WIN64) +#if !defined(_WIN32) printf("%s\n", buf); #else ShowInfo(buf); @@ -514,7 +514,7 @@ static const OptionData _options[] = { GETOPT_SHORT_VALUE('l'), GETOPT_SHORT_VALUE('p'), GETOPT_SHORT_VALUE('P'), -#if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(WIN32) +#if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(_WIN32) GETOPT_SHORT_NOVAL('f'), #endif #endif /* ENABLE_NETWORK */ @@ -614,7 +614,7 @@ int openttd_main(int argc, char *argv[]) case 'r': ParseResolution(&resolution, mgo.opt); break; case 't': scanner->startyear = atoi(mgo.opt); break; case 'd': { -#if defined(WIN32) +#if defined(_WIN32) CreateConsole(); #endif if (mgo.opt != NULL) SetDebugString(mgo.opt); diff --git a/src/script/script_scanner.cpp b/src/script/script_scanner.cpp index 57265669f9..fe6d41cf92 100644 --- a/src/script/script_scanner.cpp +++ b/src/script/script_scanner.cpp @@ -134,7 +134,7 @@ void ScriptScanner::RegisterScript(ScriptInfo *info) if (this->info_list.find(script_name) != this->info_list.end()) { /* This script was already registered */ -#ifdef WIN32 +#ifdef _WIN32 /* Windows doesn't care about the case */ if (strcasecmp(this->info_list[script_name]->GetMainScript(), info->GetMainScript()) == 0) { #else diff --git a/src/sdl.h b/src/sdl.h index ff1092358f..9033899a59 100644 --- a/src/sdl.h +++ b/src/sdl.h @@ -15,7 +15,7 @@ const char *SdlOpen(uint32 x); void SdlClose(uint32 x); -#ifdef WIN32 +#ifdef _WIN32 #define DYNAMICALLY_LOADED_SDL #endif diff --git a/src/settings.cpp b/src/settings.cpp index 0dc1e24d45..3e61cc87f8 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1668,9 +1668,9 @@ static void HandleSettingDescs(IniFile *ini, SettingDescProc *proc, SettingDescP { if (basic_settings) { proc(ini, (const SettingDesc*)_misc_settings, "misc", NULL); -#if defined(WIN32) && !defined(DEDICATED) +#if defined(_WIN32) && !defined(DEDICATED) proc(ini, (const SettingDesc*)_win32_settings, "win32", NULL); -#endif /* WIN32 */ +#endif /* _WIN32 */ } if (other_settings) { diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp index ac6db6581c..298539417e 100644 --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -18,7 +18,7 @@ #include -#if (!defined(WIN32) && !defined(WIN64)) || defined(__CYGWIN__) +#if !defined(_WIN32) || defined(__CYGWIN__) #include #include #endif @@ -512,7 +512,7 @@ int CDECL main(int argc, char *argv[]) unlink(tmp_output); } else { /* Rename tmp2.xxx to output file. */ -#if defined(WIN32) || defined(WIN64) +#if defined(_WIN32) unlink(output_file); #endif if (rename(tmp_output, output_file) == -1) error("rename() failed"); diff --git a/src/stdafx.h b/src/stdafx.h index fb384ca823..6e96e98fde 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -167,7 +167,7 @@ #include // alloca() #endif -#if defined(WIN32) +#if defined(_WIN32) #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #endif @@ -232,18 +232,18 @@ #define FALLTHROUGH #endif - #if defined(WIN32) && !defined(_WIN64) && !defined(WIN64) +# if defined(_WIN32) && !defined(_WIN64) #if !defined(_W64) #define _W64 #endif typedef _W64 int INT_PTR, *PINT_PTR; typedef _W64 unsigned int UINT_PTR, *PUINT_PTR; - #endif /* WIN32 && !_WIN64 && !WIN64 */ +# endif /* _WIN32 && !_WIN64 */ - #if defined(_WIN64) || defined(WIN64) +# if defined(_WIN64) #define fseek _fseeki64 - #endif /* _WIN64 || WIN64 */ +# endif /* _WIN64 */ /* zlib from vcpkg use cdecl calling convention without enforcing it in the headers */ # if defined(WITH_ZLIB) @@ -281,7 +281,7 @@ /* NOTE: the string returned by these functions is only valid until the next * call to the same function and is not thread- or reentrancy-safe */ #if !defined(STRGEN) && !defined(SETTINGSGEN) - #if defined(WIN32) || defined(WIN64) +# if defined(_WIN32) char *getcwd(char *buf, size_t size); #include #include @@ -292,14 +292,14 @@ const char *FS2OTTD(const TCHAR *name); const TCHAR *OTTD2FS(const char *name, bool console_cp = false); - #else +# else #define fopen(file, mode) fopen(OTTD2FS(file), mode) const char *FS2OTTD(const char *name); const char *OTTD2FS(const char *name); - #endif /* WIN32 */ +# endif /* _WIN32 */ #endif /* STRGEN || SETTINGSGEN */ -#if defined(WIN32) || defined(WIN64) || defined(__OS2__) && !defined(__INNOTEK_LIBC__) +#if defined(_WIN32) || defined(__OS2__) && !defined(__INNOTEK_LIBC__) #define PATHSEP "\\" #define PATHSEPCHAR '\\' #else diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp index c231717dac..44cbd127a1 100644 --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -21,14 +21,14 @@ #include #include -#if (!defined(WIN32) && !defined(WIN64)) || defined(__CYGWIN__) +#if !defined(_WIN32) || defined(__CYGWIN__) #include #include #endif -#if defined WIN32 || defined __WATCOMC__ +#if defined(_WIN32) || defined(__WATCOMC__) #include -#endif /* WIN32 || __WATCOMC__ */ +#endif /* _WIN32 || __WATCOMC__ */ #ifdef __MORPHOS__ #ifdef stderr @@ -333,9 +333,9 @@ struct HeaderFileWriter : HeaderWriter, FileWriter { unlink(this->filename); } else { /* else rename tmp.xxx into filename */ - #if defined(WIN32) || defined(WIN64) +# if defined(_WIN32) unlink(this->real_filename); - #endif +# endif if (rename(this->filename, this->real_filename) == -1) error("rename() failed"); } } @@ -377,7 +377,7 @@ static inline void ottd_mkdir(const char *directory) { /* Ignore directory creation errors; they'll surface later on, and most * of the time they are 'directory already exists' errors anyhow. */ -#if defined(WIN32) || defined(__WATCOMC__) +#if defined(_WIN32) || defined(__WATCOMC__) mkdir(directory); #else mkdir(directory, 0755); diff --git a/src/string.cpp b/src/string.cpp index 96e1d82754..ae1b556aff 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -25,7 +25,7 @@ #include // required by vsnprintf implementation for MSVC #endif -#ifdef WIN32 +#ifdef _WIN32 #include "os/windows/win32.h" #endif @@ -359,7 +359,7 @@ bool IsValidChar(WChar key, CharSetFilter afilter) } } -#ifdef WIN32 +#ifdef _WIN32 #if defined(_MSC_VER) && _MSC_VER < 1900 /** * Almost POSIX compliant implementation of \c vsnprintf for VC compiler. @@ -395,7 +395,7 @@ int CDECL vsnprintf(char *str, size_t size, const char *format, va_list ap) } #endif /* _MSC_VER */ -#endif /* WIN32 */ +#endif /* _WIN32 */ /** * Safer implementation of snprintf; same as snprintf except: @@ -592,7 +592,7 @@ int strnatcmp(const char *s1, const char *s2, bool ignore_garbage_at_front) } #endif /* WITH_ICU_SORT */ -#if defined(WIN32) && !defined(STRGEN) && !defined(SETTINGSGEN) +#if defined(_WIN32) && !defined(STRGEN) && !defined(SETTINGSGEN) int res = OTTDStringCompare(s1, s2); if (res != 0) return res - 2; // Convert to normal C return values. #endif diff --git a/src/strings.cpp b/src/strings.cpp index 164d8a3c9f..2cc3a23be2 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -1786,7 +1786,7 @@ bool ReadLanguagePack(const LanguageMetadata *lang) strecpy(_config_language_file, c_file, lastof(_config_language_file)); SetCurrentGrfLangID(_current_language->newgrflangid); -#ifdef WIN32 +#ifdef _WIN32 extern void Win32SetCurrentLocaleName(const char *iso_code); Win32SetCurrentLocaleName(_current_language->isocode); #endif @@ -1837,7 +1837,7 @@ bool ReadLanguagePack(const LanguageMetadata *lang) /* Win32 implementation in win32.cpp. * OS X implementation in os/macosx/macos.mm. */ -#if !(defined(WIN32) || defined(__APPLE__)) +#if !(defined(_WIN32) || defined(__APPLE__)) /** * Determine the current charset based on the environment * First check some default values, after this one we passed ourselves @@ -1865,7 +1865,7 @@ const char *GetCurrentLocale(const char *param) } #else const char *GetCurrentLocale(const char *param); -#endif /* !(defined(WIN32) || defined(__APPLE__)) */ +#endif /* !(defined(_WIN32) || defined(__APPLE__)) */ int CDECL StringIDSorter(const StringID *a, const StringID *b) { diff --git a/src/table/win32_settings.ini b/src/table/win32_settings.ini index 1e0c9ad023..70c18a424e 100644 --- a/src/table/win32_settings.ini +++ b/src/table/win32_settings.ini @@ -8,14 +8,14 @@ [pre-amble] /* win32_v.cpp only settings */ -#if defined(WIN32) && !defined(DEDICATED) +#if defined(_WIN32) && !defined(DEDICATED) extern bool _force_full_redraw, _window_maximize; extern uint _display_hz; static const SettingDescGlobVarList _win32_settings[] = { [post-amble] }; -#endif /* WIN32 */ +#endif /* _WIN32 */ [templates] SDTG_BOOL = SDTG_BOOL($name, $flags, $guiflags, $var, $def, $str, $strhelp, $strval, $proc, $from, $to, $cat), SDTG_VAR = SDTG_VAR($name, $type, $flags, $guiflags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $proc, $from, $to, $cat), diff --git a/src/video/dedicated_v.cpp b/src/video/dedicated_v.cpp index aaadd94614..47fa64231a 100644 --- a/src/video/dedicated_v.cpp +++ b/src/video/dedicated_v.cpp @@ -73,7 +73,7 @@ static void DedicatedSignalHandler(int sig) } #endif -#if defined(WIN32) +#if defined(_WIN32) # include /* GetTickCount */ # include # include @@ -150,7 +150,7 @@ const char *VideoDriver_Dedicated::Start(const char * const *parm) ScreenSizeChanged(); BlitterFactory::GetCurrentBlitter()->PostResize(); -#if defined(WIN32) +#if defined(_WIN32) /* For win32 we need to allocate a console (debug mode does the same) */ CreateConsole(); CreateWindowsConsoleThread(); @@ -173,7 +173,7 @@ const char *VideoDriver_Dedicated::Start(const char * const *parm) void VideoDriver_Dedicated::Stop() { -#ifdef WIN32 +#ifdef _WIN32 CloseWindowsConsoleThread(); #endif free(_dedicated_video_mem); diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index f40c4b6461..e96decb451 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -264,7 +264,7 @@ static void GetAvailableVideoMode(uint *w, uint *h) *h = _resolutions[best].height; } -#ifdef WIN32 +#ifdef _WIN32 /* Let's redefine the LoadBMP macro with because we are dynamically * loading SDL and need to 'SDL_CALL' all functions */ #undef SDL_LoadBMP @@ -500,7 +500,7 @@ static uint ConvertSdlKeyIntoMy(SDL_keysym *sym, WChar *character) } /* check scancode for BACKQUOTE key, because we want the key left of "1", not anything else (on non-US keyboards) */ -#if defined(WIN32) || defined(__OS2__) +#if defined(_WIN32) || defined(__OS2__) if (sym->scancode == 41) key = WKC_BACKQUOTE; #elif defined(__APPLE__) if (sym->scancode == 10) key = WKC_BACKQUOTE; From e902a1cc5703bcd628a9547b792461b64090e029 Mon Sep 17 00:00:00 2001 From: glx Date: Sun, 23 Dec 2018 01:23:49 +0100 Subject: [PATCH 116/622] Fix: [WIN32] no need to define WIN32 in project files --- projects/openttd_vs140.vcxproj | 8 ++++---- projects/openttd_vs140.vcxproj.in | 8 ++++---- projects/openttd_vs141.vcxproj | 8 ++++---- projects/openttd_vs141.vcxproj.in | 8 ++++---- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index 8164c0516e..dccc5e4f6c 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -107,7 +107,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -172,7 +172,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug @@ -230,7 +230,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -293,7 +293,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug diff --git a/projects/openttd_vs140.vcxproj.in b/projects/openttd_vs140.vcxproj.in index 6f64353df4..75aac94bab 100644 --- a/projects/openttd_vs140.vcxproj.in +++ b/projects/openttd_vs140.vcxproj.in @@ -107,7 +107,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -172,7 +172,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug @@ -230,7 +230,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -293,7 +293,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj index cf55989477..8167bce6cb 100644 --- a/projects/openttd_vs141.vcxproj +++ b/projects/openttd_vs141.vcxproj @@ -107,7 +107,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -172,7 +172,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug @@ -230,7 +230,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -293,7 +293,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug diff --git a/projects/openttd_vs141.vcxproj.in b/projects/openttd_vs141.vcxproj.in index 8154a14a0d..a054c2580e 100644 --- a/projects/openttd_vs141.vcxproj.in +++ b/projects/openttd_vs141.vcxproj.in @@ -107,7 +107,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -172,7 +172,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug @@ -230,7 +230,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -293,7 +293,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug From e8f9975409ab21b59c3357c49d4ec7cfaf4816ec Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 27 Dec 2018 19:45:44 +0100 Subject: [PATCH 117/622] Update: Translations from eints finnish: 160 changes by ln --- src/lang/finnish.txt | 305 +++++++++++++++++++++++-------------------- 1 file changed, 160 insertions(+), 145 deletions(-) diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 1de667ab0c..e7f5d9d651 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -246,7 +246,7 @@ STR_TOOLTIP_RESIZE :{BLACK}Napsauta STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Suurenna/pienennä ikkuna STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Vierityspalkki - luettelon vieritys ylös/alas STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Vierityspalkki - luettelon vieritys vasemmalle/oikealle. -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Tuhoa rakennuksia jne. ruudulta. Ctrl valitsee alueen vinottain. Shift vaihtaa tuhoamistilan ja kustannearvion välillä +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Tuhoa rakennuksia jne. ruudulta. Ctrl valitsee alueen vinottain. Shift vaihtaa tuhoamistilan ja kustannusarvion välillä # Show engines button STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN :{BLACK}Näytä piilotetut @@ -350,15 +350,15 @@ STR_SCENEDIT_TOOLBAR_OPENTTD :{YELLOW}OpenTTD STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Skenaariomuokkain STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Siirrä aloituspäivää vuodella taaksepäin STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Siirrä aloituspäivää vuodella eteenpäin -STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Klikkaa asettaaksesi aloitusvuoden +STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Aseta aloitusvuosi napsauttamalla STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Näytä kartta, kaupunkihakemisto STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Maaston luonti STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Kaupunkien luonti STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Teollisuuden luonti STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Tienrakennus -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Istuta puita. Shift vaihtaa istutustilan ja kustannearvion välillä +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Istuta puita. Shift vaihtaa istutustilan ja kustannusarvion välillä STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Sijoita kyltti -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Sijoita objekti. Shift vaihtaa rakennustilan ja kustannearvion välillä +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Sijoita objekti. Shift vaihtaa rakennustilan ja kustannusarvion välillä ############ range for SE file menu starts STR_SCENEDIT_FILE_MENU_SAVE_SCENARIO :Tallenna skenaario @@ -535,15 +535,15 @@ STR_DAY_NUMBER_31ST :31. ############ range for days ends ############ range for months starts -STR_MONTH_ABBREV_JAN :01. -STR_MONTH_ABBREV_FEB :02. -STR_MONTH_ABBREV_MAR :03. -STR_MONTH_ABBREV_APR :04. -STR_MONTH_ABBREV_MAY :05. -STR_MONTH_ABBREV_JUN :06. -STR_MONTH_ABBREV_JUL :07. -STR_MONTH_ABBREV_AUG :08. -STR_MONTH_ABBREV_SEP :09. +STR_MONTH_ABBREV_JAN :{NBSP}1. +STR_MONTH_ABBREV_FEB :{NBSP}2. +STR_MONTH_ABBREV_MAR :{NBSP}3. +STR_MONTH_ABBREV_APR :{NBSP}4. +STR_MONTH_ABBREV_MAY :{NBSP}5. +STR_MONTH_ABBREV_JUN :{NBSP}6. +STR_MONTH_ABBREV_JUL :{NBSP}7. +STR_MONTH_ABBREV_AUG :{NBSP}8. +STR_MONTH_ABBREV_SEP :{NBSP}9. STR_MONTH_ABBREV_OCT :10. STR_MONTH_ABBREV_NOV :11. STR_MONTH_ABBREV_DEC :12. @@ -672,13 +672,14 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Sekoitta STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Näytä musiikkiraitojen valintaikkuna # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Soittolista - '{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Raita STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Soittolista - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Tyhjennä STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Tyhjennä nykyinen soittolista (vain Oma1 tai Oma2) STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Valitse musiikkiraita lisätäksesi sen nykyiseen soittolistaan (vain Oma1 tai Oma2). -STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klikkaa raitaa poistaaksesi se nykyisestä ohjelmasta (ainoastaan Custom1 tai Custom2) +STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Poista musiikkiraita nykyseiltä soittolistalta napsauttamalla (ainoastaan Custom1 tai Custom2) # Highscore window STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Parhaat yhtiöt, jotka saavuttivat vuoden {NUM} @@ -713,9 +714,9 @@ STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Näytä STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Näytä kuljetusreitit kartalla. STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Näytä kasvillisuus kartalla. STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Näytä maanomistajat kartalla. -STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Klikkaa teollisuustyyppiä näyttääksesi sen. Ctrl+Klik näyttää valitun tyypin. Ctrl+Klik uudestaan näyttää kaikki teollisuustyypit -STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Klikkaa yhtiötä näyttääksesi sen omaisuuden. Ctrl+Klik näyttää ainoastaan valitun yhtiön. Ctrl+Klik uudestaan näyttää kaikki yhtiöt -STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Klikkaa rahtia näyttääksesi tai piilottaaksesi sen. Ctrl+Klik piilottaa kaikki paitsi valitun rahdin. Ctrl+Klik uudelleen palauttaa kaikki rahdit näkyviin +STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Napsauta teollisuustyyppiä näyttääksesi sen. Ctrl+Klik näyttää valitun tyypin. Ctrl+Klik uudestaan näyttää kaikki teollisuustyypit +STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Napsauta yhtiötä näyttääksesi sen omaisuuden. Ctrl+Klik näyttää ainoastaan valitun yhtiön. Ctrl+Klik uudestaan näyttää kaikki yhtiöt +STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Napsauta rahtia näyttääksesi tai piilottaaksesi sen. Ctrl+Klik piilottaa kaikki paitsi valitun rahdin. Ctrl+Klik uudelleen palauttaa kaikki rahdit näkyviin STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Tiet STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}Rautatiet @@ -808,7 +809,7 @@ STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLAC STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} on suljettu velkojien toimesta ja kaikki omaisuus on myyty pois! STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Uusi kuljetusyhtiö perustettu! STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} aloittaa rakentamisen kaupungin {TOWN} lähistölle! -STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}Yhtiön {STRING} on ottanut haltuun {STRING}! +STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{1:STRING} on ottanut haltuunsa yhtiön {0:STRING}! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(pääjohtaja) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} rahoitti uuden kaupungin, {TOWN}, rakentamista! @@ -834,9 +835,9 @@ STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLAC STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}{INDUSTRY}: hyönteisparvet aiheuttavat tuhoa!{}Tuotanto vähenee 50{NBSP}%:lla. STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}{1:INDUSTRY} tuottaa {0:STRING} {2:COMMA}{NBSP}% entistä vähemmän! -STR_NEWS_TRAIN_IS_WAITING :{WHITE}{VEHICLE} odottaa varikolla +STR_NEWS_TRAIN_IS_WAITING :{WHITE}{VEHICLE} odottaa veturitallilla STR_NEWS_ROAD_VEHICLE_IS_WAITING :{WHITE}{VEHICLE} odottaa varikolla -STR_NEWS_SHIP_IS_WAITING :{WHITE}{VEHICLE} odottaa varikolla +STR_NEWS_SHIP_IS_WAITING :{WHITE}{VEHICLE} odottaa telakalla STR_NEWS_AIRCRAFT_IS_WAITING :{WHITE}{VEHICLE} odottaa lentokonehallissa # Order review system / warnings @@ -868,7 +869,7 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Tuki päättynyt:{}{}{STRING} väli {STRING} - {STRING} ei ole enää tuettu STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Tuki vedetty pois:{}{}{STRING} kuljetuspalvelu välille {STRING}-{STRING} ei ole enää tuettu -STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Tuki tarjottu:{}{}Ensimmäinen {STRING}kuljetus välillä {STRING} - {STRING} saa vuoden mittaisen tuen paikallisviranomaisilta! +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Tuki tarjottu:{}{}Ensimmäinen {STRING}kuljetus välillä {STRING} – {STRING} saa vuoden mittaisen tuen paikallisviranomaisilta! STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Tuki myönnetty yhtiölle {STRING}!{}{}{STRING}kuljetus välillä {STRING}-{STRING} tuottaa 50{NBSP}% enemmän seuraavan vuoden ajan! STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Tuki myönnetty yhtiölle {STRING}!{}{}{STRING}kuljetus välillä {STRING}-{STRING} tuottaa tuplaten seuraavan vuoden ajan! STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Tuki myönnetty yhtiölle {STRING}!{}{}{STRING}kuljetus välillä {STRING}-{STRING} tuottaa kolminkertaisesti seuraavan vuoden ajan! @@ -876,7 +877,7 @@ STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLAC STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}{TOWN}: liikennekaaos!{}{}{STRING} rahoittaa katujen kunnostuksen; autoilijoille odotettavissa kuusi kuukautta kurjuutta! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Kuljetusmonopoli! -STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Kaupungin {TOWN} paikallisviranomaiset allekirjoittavat sopimuksen yhtiön {STRING} kanssa vuoden pituisesta kuljetusyksinoikeudesta! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}{TOWN} ja {STRING} allekirjoittavat sopimuksen vuoden pituisesta kuljetusyksinoikeudesta! # Extra view window STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Näkymä {COMMA} @@ -895,10 +896,10 @@ STR_GAME_OPTIONS_CURRENCY_GBP :Englannin punta STR_GAME_OPTIONS_CURRENCY_USD :Yhdysvaltain dollari (USD) STR_GAME_OPTIONS_CURRENCY_EUR :Euro (EUR) STR_GAME_OPTIONS_CURRENCY_JPY :Japanin jeni (JPY) -STR_GAME_OPTIONS_CURRENCY_ATS :Itävallan shillinki (ATS) +STR_GAME_OPTIONS_CURRENCY_ATS :Itävallan šillinki (ATS) STR_GAME_OPTIONS_CURRENCY_BEF :Belgian frangi (BEF) STR_GAME_OPTIONS_CURRENCY_CHF :Sveitsin frangi (CHF) -STR_GAME_OPTIONS_CURRENCY_CZK :Tsekin koruna (CZK) +STR_GAME_OPTIONS_CURRENCY_CZK :Tšekin koruna (CZK) STR_GAME_OPTIONS_CURRENCY_DEM :Saksan markka (DEM) STR_GAME_OPTIONS_CURRENCY_DKK :Tanskan kruunu (DKK) STR_GAME_OPTIONS_CURRENCY_ESP :Espanjan peseta (ESP) @@ -912,7 +913,7 @@ STR_GAME_OPTIONS_CURRENCY_NLG :Hollannin gulde STR_GAME_OPTIONS_CURRENCY_NOK :Norjan kruunu (NOK) STR_GAME_OPTIONS_CURRENCY_PLN :Puolan złoty (PLN) STR_GAME_OPTIONS_CURRENCY_RON :Romanian leu (RON) -STR_GAME_OPTIONS_CURRENCY_RUR :Venjän rupla (RUR) +STR_GAME_OPTIONS_CURRENCY_RUR :Venäjän rupla (RUR) STR_GAME_OPTIONS_CURRENCY_SIT :Slovenian tolari (SIT) STR_GAME_OPTIONS_CURRENCY_SEK :Ruotsin kruunu (SEK) STR_GAME_OPTIONS_CURRENCY_TRY :Turkin liira (TRY) @@ -925,6 +926,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Etelä-Afrikan STR_GAME_OPTIONS_CURRENCY_CUSTOM :Oma... STR_GAME_OPTIONS_CURRENCY_GEL :Georgian lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Iranin rial (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Uusi Venäjän rupla (RUB) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Kulkuneuvot @@ -951,7 +953,7 @@ STR_GAME_OPTIONS_TOWN_NAME_NORWEGIAN :Norjalainen STR_GAME_OPTIONS_TOWN_NAME_HUNGARIAN :Unkarilainen STR_GAME_OPTIONS_TOWN_NAME_AUSTRIAN :Itävaltalainen STR_GAME_OPTIONS_TOWN_NAME_ROMANIAN :Romanialainen -STR_GAME_OPTIONS_TOWN_NAME_CZECH :Tsekkiläinen +STR_GAME_OPTIONS_TOWN_NAME_CZECH :Tšekkiläinen STR_GAME_OPTIONS_TOWN_NAME_SWISS :Sveitsiläinen STR_GAME_OPTIONS_TOWN_NAME_DANISH :Tanskalainen STR_GAME_OPTIONS_TOWN_NAME_TURKISH :Turkkilainen @@ -1280,9 +1282,9 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Virheilmoituste STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Aika virheilmoitusten näyttämiseen punaisessa ikkunassa. Huomaa, että jotkut (kriittiset) virheilmoitukset eivät sulkeudu automaattisesti tämän ajan jälkeen, vaan ne on suljettava käsin STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sekunti{P 0 "" a} STR_CONFIG_SETTING_HOVER_DELAY :Näytä työkaluvihjeet: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Viive ennen työkaluvihjeen näyttämistä, kun hiiren kursoria pidetään käyttöliittymäelementin päällä. Vaihtoehtoisesti työkaluvihjeen saa myös näkymiin painamalla hiiren oikeaa näppäintä jos arvoksi on määritetty 0. +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Viive ennen työkaluvihjeen näyttämistä, kun hiiren kursoria pidetään käyttöliittymäelementin päällä. Vaihtoehtoisesti työkaluvihjeen saa myös näkymiin painamalla hiiren oikeata painiketta, kun arvoksi on määritetty 0. STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Pidä hiirtä päällä {COMMA} millisekunti{P 0 "" a} -STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Hiiren oikea näppäin +STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Hiiren oikea painike STR_CONFIG_SETTING_POPULATION_IN_LABEL :Näytä kaupungin asukasluku kaupungin nimessä: {STRING} STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Näytä kaupunkien asukasluku kartalla STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Viivojen paksuus kuvaajissa: {STRING} @@ -1337,7 +1339,9 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Maaston väri k STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Vihreä STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Tummanvihreä STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violetti +STR_CONFIG_SETTING_SCROLLMODE :Näkymän vieritystapa: {STRING} STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Toiminta karttaa vieritettäessä +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Siirrä näkymää hiiren oikealla painikkeella, hiiren sijainti lukiten STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Siirrä karttaa hiiren oikealla painikkeella, hiiren sijainti lukiten STR_CONFIG_SETTING_SCROLLMODE_RMB :Siirrä karttaa hiiren oikealla painikkeella STR_CONFIG_SETTING_SCROLLMODE_LMB :Siirrä karttaa hiiren vasemmalla painikkeella @@ -1362,12 +1366,12 @@ STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Määritä hiir STR_CONFIG_SETTING_OSK_ACTIVATION :Virtuaalinäppäimistö: {STRING} STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Valitse tapa, jolla virtuaalinäppäimistö avataan syötettäessä tekstiä kun käytössä on ainoastaan osoitinlaite. Tämä on tarkoitettu pienille laitteille, joissa ei ole fyysistä näppäimistöä STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :Pois käytöstä -STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Tuplaklikkaus -STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Yksi klikkaus (kun kohdistettuna) -STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Yksi klikkaus (välittömästi) +STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Kaksoisnapsautus +STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Yksi napsautus (kun kohdistettuna) +STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Yksi napsautus (välitön) STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Oikean painikkeen emulointi: {STRING} -STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Määritä kuinka hiiren oikean näppäimen painalluksia emuloidaan +STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Valitse, miten hiiren oikean painikkeen painalluksia emuloidaan STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+Klik STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Pois @@ -1386,9 +1390,9 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31 STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Uusi peli alkaa pysäytettynä: {STRING} STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Mikäli käytössä, peli pysäytetään automaattisesti uuden pelin alussa, mahdollistaen esimerkiksi kartan tarkemman tutkimisen -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :Pelin ollessa pysäytetty, salli: {STRING} +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :Salli pelin ollessa pysäytettynä: {STRING} STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Valitse käytössä olevat toiminnot pelin ollessa pysäytettynä -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Ei mitkään toiminnot +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Ei mitään toimintoja STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :Kaikki ei-rakennustoiminnot STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :Kaikki paitsi maastonmuokkaustoiminnot STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :Kaikki toiminnot @@ -1396,8 +1400,8 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Käytä ryhmiä STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Salli kehittyneiden kulkuneuvolistojen käyttö kulkuneuvojen ryhmittelyssä STR_CONFIG_SETTING_LOADING_INDICATORS :Lastausilmaisimet: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Määritä näytetäänkö lastausilmaisimet kulkuneuvojen yläpuolella lastatessa ja purettaessa rahtia -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Näytä aikataulu tickseissä päivien sijaan: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Näytä aikataulun ajat päivien sijasta tickeinä +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Näytä aikataulu askelina päivien sijaan: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Näytä aikataulun ajat päivien sijasta askelina STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Näytä saapuminen ja lähtö aikatauluissa: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Näytä odotetut saapumis- ja lähtemisajat aikatauluissa STR_CONFIG_SETTING_QUICKGOTO :Nopea kulkuneuvon käskyjen luominen: {STRING} @@ -1422,8 +1426,8 @@ STR_CONFIG_SETTING_SOUND_NEW_YEAR :Vuoden loppu: { STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Toista ääni vuoden lopussa verrattaessa yhtiön tulosta edelliseen vuoteen STR_CONFIG_SETTING_SOUND_CONFIRM :Rakentaminen: {STRING} STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Toista ääni onnistuneen rakennus- tai muun toiminnon jälkeen -STR_CONFIG_SETTING_SOUND_CLICK :Painikkeiden klikkaus: {STRING} -STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT :Piippaa klikattaessa painikkeita +STR_CONFIG_SETTING_SOUND_CLICK :Painikkeiden napsautus: {STRING} +STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT :Piippaa painikkeita napsauttaessa STR_CONFIG_SETTING_SOUND_DISASTER :Vahingot/onnettomuudet: {STRING} STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT :Toista vahinkojen ja onnettomuuksien äänet STR_CONFIG_SETTING_SOUND_VEHICLE :Ajoneuvot: {STRING} @@ -1549,8 +1553,8 @@ STR_CONFIG_SETTING_TOWN_LAYOUT :Uusissa kaupung STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT :Kaupunkien käyttämä tieverkon kaava STR_CONFIG_SETTING_TOWN_LAYOUT_DEFAULT :Alkuperäinen STR_CONFIG_SETTING_TOWN_LAYOUT_BETTER_ROADS :Parempia teitä -STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :2x2-ruudukko -STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :3x3-ruudukko +STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :2×2-ruudukko +STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :3×3-ruudukko STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Satunnainen STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Kaupungit saavat rakentaa teitä: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Salli kaupunkien rakentaa teitä kasvaessaan. Mikäli pois käytöstä, kaupungit eivät voi rakentaa teitä itse @@ -1571,9 +1575,9 @@ STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Vain sademetsii STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Kaikkialle STR_CONFIG_SETTING_TOOLBAR_POS :Päätyökalupalkin sijainti: {STRING} -STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Ruudun yläreunassa olevan työkalupalkin sijainti leveyssuunnassa +STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Ruudun yläreunassa olevan työkalupalkin sijainti vaakasuunnassa STR_CONFIG_SETTING_STATUSBAR_POS :Tilarivin sijainti: {STRING} -STR_CONFIG_SETTING_STATUSBAR_POS_HELPTEXT :Ruudun alareunassa olevan tilapalkin sijanti leveyssuunnassa +STR_CONFIG_SETTING_STATUSBAR_POS_HELPTEXT :Ruudun alareunassa olevan tilapalkin sijanti vaakasuunnassa STR_CONFIG_SETTING_SNAP_RADIUS :Ikkunoiden kiinnittymisetäisyys: {STRING} STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Ikkunoiden välinen etäisyys ennen niiden kohdistamista toistensa kanssa STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} pikseli{P 0 "" ä} @@ -1785,7 +1789,7 @@ STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS # Abandon game -STR_ABANDON_GAME_CAPTION :{WHITE}Lopeta peli +STR_ABANDON_GAME_CAPTION :{WHITE}Pelin lopetus STR_ABANDON_GAME_QUERY :{YELLOW}Lopetetaanko peli? STR_ABANDON_SCENARIO_QUERY :{YELLOW}Lopetetaanko skenaario? @@ -1988,7 +1992,7 @@ STR_NETWORK_LANG_ANY :mikä tahansa STR_NETWORK_LANG_ENGLISH :englanti STR_NETWORK_LANG_GERMAN :saksa STR_NETWORK_LANG_FRENCH :ranska -STR_NETWORK_LANG_BRAZILIAN :brasilia +STR_NETWORK_LANG_BRAZILIAN :brasilianportugali STR_NETWORK_LANG_BULGARIAN :bulgaria STR_NETWORK_LANG_CHINESE :kiina STR_NETWORK_LANG_CZECH :tšekki @@ -2015,7 +2019,7 @@ STR_NETWORK_LANG_TURKISH :turkki STR_NETWORK_LANG_UKRAINIAN :ukraina STR_NETWORK_LANG_AFRIKAANS :afrikaans STR_NETWORK_LANG_CROATIAN :kroatia -STR_NETWORK_LANG_CATALAN :katalan +STR_NETWORK_LANG_CATALAN :katalaani STR_NETWORK_LANG_ESTONIAN :viro STR_NETWORK_LANG_GALICIAN :galego STR_NETWORK_LANG_GREEK :kreikka @@ -2190,7 +2194,7 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} on STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} on poistunut pelistä ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} on muuttanut nimekseen {STRING} STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} antoi yhtiöllesi {2:CURRENCY_LONG} -STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Annoit henkilölle {1:STRING} {2:CURRENCY_LONG} +STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Annoit yhtiölle {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Palvelin sulki istunnon STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Palvelin käynnistyy uudelleen...{}Odota, ole hyvä... @@ -2200,7 +2204,7 @@ STR_CONTENT_TYPE_CAPTION :{BLACK}Tyyppi STR_CONTENT_TYPE_CAPTION_TOOLTIP :{BLACK}Sisällön tyyppi STR_CONTENT_NAME_CAPTION :{BLACK}Nimi STR_CONTENT_NAME_CAPTION_TOOLTIP :{BLACK}Sisällön nimi -STR_CONTENT_MATRIX_TOOLTIP :{BLACK}Klikkaa kohtaa nähdäkesi lisätiedot{}Klikkaa valintaruutua valitaksesi sen ladattavaksi +STR_CONTENT_MATRIX_TOOLTIP :{BLACK}Katso lisätiedot napsauttamalla riviä{}Valitse ladattavaksi valintaruutua napsauttamalla STR_CONTENT_SELECT_ALL_CAPTION :{BLACK}Valitse kaikki STR_CONTENT_SELECT_ALL_CAPTION_TOOLTIP :{BLACK}Merkitse kaikki sisältö ladattavaksi STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK}Valitse päivitykset @@ -2314,16 +2318,16 @@ STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Sähköradan ra STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Yksiraiteisen rakentaminen STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Maglevin rakentaminen -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Rakenna rautateitä. Ctrl vaihtaa rakennus/poistotilan välillä. Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Rakenna rautatiet käyttäen Autorail-tilaa. Ctrl vaihtaa rakennus/poistotilan välillä. Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Rakenna veturitalli (junien ostamista ja huoltoa varten). Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Muunna raide reittipisteeksi. Ctrl liittää reittipisteet. Shift vaihtaa muuntotilan ja kustannearvion välillä -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Rakenna rautatieasema. Ctrl liittää asemat. Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Rakenna opastimia. Ctrl vaihtaa joko siipiopastimet tai valo-opastimet{}Vetäminen rakentaa opastimia suoralle rautatielle. Ctrl rakentaa opastimia seuraavaan risteykseen saakka{}Ctrl+Click avaa opastimenvalintaikkunan. Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Rakenna rautatiesilta. Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Rakenna rautatietunneli. Shift vaihtaa rakennustilan ja kustannearvion välillä +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Rakenna rautateitä. Ctrl vaihtaa rakennus-/poistotilan välillä. Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Rakenna rautatietä automaattisesti valittuun suuntaan. Ctrl vaihtaa rakennus-/poistotilan välillä. Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Rakenna veturitalli (junien ostamista ja huoltoa varten). Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Muunna raide reittipisteeksi. Ctrl liittää reittipisteet. Shift vaihtaa muuntotilan ja kustannusarvion välillä +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Rakenna rautatieasema. Ctrl liittää asemat. Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Rakenna opastimia. Ctrl vaihtaa joko siipiopastimet tai valo-opastimet{}Vetäminen rakentaa opastimia suoralle rautatielle. Ctrl rakentaa opastimia seuraavaan risteykseen saakka{}Ctrl+Click avaa opastimenvalintaikkunan. Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Rakenna rautatiesilta. Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Rakenna rautatietunneli. Shift vaihtaa rakennustilan ja kustannusarvion välillä STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Rautatien, opastimien, reittipisteiden ja asemien rakentaminen/poisto päälle/pois. Pidä pohjassa Ctrl-näppäintä poistaaksesi myös aseman tai reittipisteen alla olevat raiteet. -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Muunna/päivitä raidetyyppi. Shift vaihtaa muuntotilan ja kustannearvion välillä +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Muunna/päivitä raidetyyppi. Shift vaihtaa muuntotilan ja kustannusarvion välillä STR_RAIL_NAME_RAILROAD :Rautatie STR_RAIL_NAME_ELRAIL :Sähköistetty rautatie @@ -2369,7 +2373,7 @@ STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Poistumi STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Yhdistelmäopastin (valo-opastin){}Yhdistelmäopastin toimii yhtä aikaa tulo- ja poistumisopastimena. Tämän avulla on mahdollista luoda suuria "opastinpuita" STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Reittiopastin (valo-opastin){}Reittiopastin varmistaa junille turvallisen reitin ja siten mahdollistaa useampien junien yhtäaikaisen liikenteen moniraiteisissa risteyksissä. Tavalliset reittiopastimet voi ohittaa takakautta STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Yksisuuntainen reittiopastin (valo-opastin){}Reittiopastin varmistaa junille turvallisen reitin ja siten mahdollistaa useampien junien yhtäaikaisen liikenteen moniraiteisissa risteyksissä. Yksisuuntaisia opastimia ei voi ohittaa takakautta -STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Opastinten muuntaminen{}Kun tämä on valittu, olemassaolevan opastimen klikkaaminen muuntaa siitä valituntyyppisen ja -muotoisen. Ctrl+Klik vaihtaa nykyistä opastimen muotoa. Shift+Klik näyttää muuntamisen kustannearvion +STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Opastinten muuntaminen{}Kun tämä on valittu, olemassaolevan opastimen napsauttaminen muuntaa siitä valituntyyppisen ja -muotoisen. Ctrl+Klik vaihtaa nykyistä opastimen muotoa. Shift+Klik näyttää muuntamisen kustannusarvion STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Opastimien väli vetämällä lisättäessä STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Pienennä opastimien väliä vetämällä lisättäessä STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Suurenna opastimien väliä vetämällä lisättäessä @@ -2393,29 +2397,29 @@ STR_BRIDGE_TUBULAR_SILICON :Putkirakenne, p # Road construction toolbar STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Tien rakentaminen STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Raitiotien rakentaminen -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Rakenna tieosuus. Ctrl vaihtaa rakennus/poistotilan välillä. Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Rakenna raitiotietä. Ctrl vaihtaa rakennus/poistotilan välillä. Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Rakenna tieosuus käyttäen Autoroad-tilaa. Ctrl vaihtaa rakennus/poistotilan välillä. Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Rakenna raitiotieosuus käyttäen Autotram-tilaa. Ctrl vaihtaa rakennus/poistotilan välillä. Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Rakenna autovarikko (ajoneuvojen ostamista ja huoltoa varten). Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Rakenna raitiotievarikko (vaunujen ostamiseen ja korjaamiseen). Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Rakenna linja-autoasema. Ctrl liittää asemat. Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Rakenna matkustaja-asema. Ctrl liittää asemat. Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Rakenna lastauslaituri. Ctrl liittää asemat. Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Rakenna rahtiasema. Ctrl liittää asemat. Shift vaihtaa rakennustilan ja kustannearvion välillä +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Rakenna tieosuus. Ctrl vaihtaa rakennus-/poistotilan välillä. Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Rakenna raitiotietä. Ctrl vaihtaa rakennus-/poistotilan välillä. Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Rakenna tieosuus automaattisesti valittuun suuntaan. Ctrl vaihtaa rakennus-/poistotilan välillä. Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Rakenna raitiotieosuus automaattisesti valittuun suuntaan. Ctrl vaihtaa rakennus-/poistotilan välillä. Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Rakenna autovarikko (ajoneuvojen ostamista ja huoltoa varten). Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Rakenna raitiotievarikko (vaunujen ostamiseen ja korjaamiseen). Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Rakenna linja-autoasema. Ctrl liittää asemat. Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Rakenna raitiotien matkustaja-asema. Ctrl liittää asemat. Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Rakenna lastauslaituri. Ctrl liittää asemat. Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Rakenna raitiotien rahtiasema. Ctrl liittää asemat. Shift vaihtaa rakennustilan ja kustannusarvion välillä STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Ota yksisuuntaiset tiet käyttöön/pois käytöstä -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Rakenna maantiesilta. Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Rakenna raitiotiesilta. Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Rakenna maantietunneli. Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Rakenna raitiotietunneli. Shift vaihtaa rakennustilan ja kustannearvion välillä +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Rakenna maantiesilta. Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Rakenna raitiotiesilta. Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Rakenna maantietunneli. Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Rakenna raitiotietunneli. Shift vaihtaa rakennustilan ja kustannusarvion välillä STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Tien rakentaminen/siirtäminen päälle/pois STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Vaihda raitiotien rakentamisen ja purkamisen välillä # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Autovarikon suunta STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP :{BLACK}Valitse autovarikon suunta. -STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}Varikon suunta -STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Valitse varikon suunta +STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}Raitiotievarikon suunta +STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Valitse raitiotievarikon suunta # Road vehicle station construction window STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Linja-autoaseman suunta @@ -2430,12 +2434,12 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Valitse # Waterways toolbar (last two for SE only) STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Vesireittien rakentaminen STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Vesireitit -STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Rakenna kanavia. Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Rakenna sulku. Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Rakenna telakka (laivojen ostamista ja huoltamista varten). Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Rakenna satama. Ctrl liittää asemat. Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Sijoita poiju: voidaan käyttää reittipisteenä. Shift vaihtaa rakennustilan ja kustannearvion välillä -STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Rakenna akvedukti. Shift vaihtaa rakennustilan ja kustannearvion välillä +STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Rakenna kanavia. Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Rakenna sulku. Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Rakenna telakka (laivojen ostamista ja huoltamista varten). Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Rakenna satama. Ctrl liittää asemat. Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Sijoita poiju, jota voi käyttää reittipisteenä. Shift vaihtaa rakennustilan ja kustannusarvion välillä +STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Rakenna akvedukti. Shift vaihtaa rakennustilan ja kustannusarvion välillä STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Määrittele vesialue.{}Tee kanava, paitsi jos Ctrl on painettuna merenpinnalla. Tällöin meri laajenee ympäristöön. STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Sijoita jokia @@ -2448,7 +2452,7 @@ STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Satama # Airport toolbar STR_TOOLBAR_AIRCRAFT_CAPTION :{WHITE}Lentokentät -STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Rakenna lentokenttä. Ctrl liittää asemat. Shift vaihtaa rakennustilan ja kustannearvion välillä +STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Rakenna lentokenttä. Ctrl liittää asemat. Shift vaihtaa rakennustilan ja kustannusarvion välillä # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Lentokentän valinta @@ -2475,17 +2479,17 @@ STR_STATION_BUILD_NOISE :{BLACK}Aiheutet # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Maastonmuokkaus -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Laske ruudun kulmaa. Vetäminen laskee ensimmäistä valittua kulmaa ja tasoittaa valitun alueen kulman korkeudelle. Ctrl valitsee alueen vinottain. Shift vaihtaa muokkaustilan ja kustannearvion välillä -STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Nosta ruudun kulmaa. Vetäminen nostaa ensimmäistä valittua kulmaa ja tasoittaa valitun alueen kulman korkeudelle. Ctrl valitsee alueen vinottain. Shift vaihtaa muokkaustilan ja kustannearvion välillä -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Tasoita maata ensimmäisen valitun kulman korkeudelle. Ctrl valitsee alueen vinottain. Shift vaihtaa muokkaustilan ja kustannearvion välillä -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Osta maata tulevaa käyttöä varten. Shift vaihtaa ostotilan ja kustannearvion välillä +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Laske ruudun kulmaa. Vetäminen laskee ensimmäistä valittua kulmaa ja tasoittaa valitun alueen kulman korkeudelle. Ctrl valitsee alueen vinottain. Shift vaihtaa muokkaustilan ja kustannusarvion välillä +STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Nosta ruudun kulmaa. Vetäminen nostaa ensimmäistä valittua kulmaa ja tasoittaa valitun alueen kulman korkeudelle. Ctrl valitsee alueen vinottain. Shift vaihtaa muokkaustilan ja kustannusarvion välillä +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Tasoita maata ensimmäisen valitun kulman korkeudelle. Ctrl valitsee alueen vinottain. Shift vaihtaa muokkaustilan ja kustannusarvion välillä +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Osta maata tulevaa käyttöä varten. Shift vaihtaa ostotilan ja kustannusarvion välillä # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Objektin valinta -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Valitse rakennettava objekti. Shift vaihtaa rakennustilan ja kustannearvion välillä +STR_OBJECT_BUILD_TOOLTIP :{BLACK}Valitse rakennettava objekti. Shift vaihtaa rakennustilan ja kustannusarvion välillä STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Valitse rakennettavan objektin luokka STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Objektin esikatselu -STR_OBJECT_BUILD_SIZE :{BLACK}Koko: {GOLD}{NUM} x {NUM} ruutua +STR_OBJECT_BUILD_SIZE :{BLACK}Koko: {GOLD}{NUM} × {NUM} ruutua STR_OBJECT_CLASS_LTHS :Majakat STR_OBJECT_CLASS_TRNS :Lähettimet @@ -2494,7 +2498,7 @@ STR_OBJECT_CLASS_TRNS :Lähettimet STR_PLANT_TREE_CAPTION :{WHITE}Puita STR_PLANT_TREE_TOOLTIP :{BLACK}Valitse istutettava puutyyppi. Jos ruudussa on jo puu, tämä lisää uusia puita riippumatta valitun puun tyypistä STR_TREES_RANDOM_TYPE :{BLACK}Sattumanvaraisia puita -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Aseta sattumanvaraisia puita. Shift vaihtaa istutustilan ja kustannearvion välillä +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Aseta sattumanvaraisia puita. Shift vaihtaa istutustilan ja kustannusarvion välillä STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Satunnaisia puita. STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Istuta puita satunnaisesti maastoon @@ -2515,7 +2519,7 @@ STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Haluatko # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Luo kaupunkeja STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Uusi kaupunki -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Perusta uusi kaupunki. Shift+Klik näyttää vain kustannearvion +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Perusta uusi kaupunki. Shift+Klik näyttää vain kustannusarvion STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Satunnainen kaupunki STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Perusta kaupunki satunnaiseen paikkaan STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Monta satunnaista kaupunkia @@ -2523,7 +2527,7 @@ STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Peitä k STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Kaupungin nimi: STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Syötä kaupungin nimi -STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Klikkaa syöttääksesi kaupungin nimen +STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Syötä kaupungin nimi napsauttamalla STR_FOUND_TOWN_NAME_RANDOM_BUTTON :{BLACK}Satunnainen nimi STR_FOUND_TOWN_NAME_RANDOM_TOOLTIP :{BLACK}Arvo uusi satunnainen nimi @@ -2540,8 +2544,8 @@ STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Kaupung STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Valitse tiekaava tälle kaupungille STR_FOUND_TOWN_SELECT_LAYOUT_ORIGINAL :{BLACK}Alkuperäinen STR_FOUND_TOWN_SELECT_LAYOUT_BETTER_ROADS :{BLACK}Parempia teitä -STR_FOUND_TOWN_SELECT_LAYOUT_2X2_GRID :{BLACK}2x2-ruudukko -STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}3x3-ruudukko +STR_FOUND_TOWN_SELECT_LAYOUT_2X2_GRID :{BLACK}2×2-ruudukko +STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}3×3-ruudukko STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Sattumanvarainen # Fund new industry window @@ -2560,8 +2564,8 @@ STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Teollisu STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Tuottavia teollisuuksia STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Hyväksyviä teollisuuksia STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Taloja -STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Klikkaa teollisuutta nähdäksesi sen tuottajat ja kuluttajat -STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Klikkaa rahtia nähdäksesi sen tuottajat ja kuluttajat +STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Napsauta teollisuutta nähdäksesi sen tuottajat ja kuluttajat +STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Napsauta rahtia nähdäksesi sen tuottajat ja kuluttajat STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Näytä ketju STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Näytä rahdin tuottajat ja hyväksyvät teollisuudet STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Yhdistä karttaan @@ -2696,9 +2700,12 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Kuvataajuus +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}×) STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Simulaationopeus: {STRING} STR_FRAMERATE_RATE_BLITTER :{WHITE}Grafiikan kuvataajuus: {STRING} STR_FRAMERATE_SPEED_FACTOR :{WHITE}Pelin nykyinen nopeuskerroin: {DECIMAL}× +STR_FRAMERATE_CURRENT :{WHITE}Nykyinen +STR_FRAMERATE_DATA_POINTS :{BLACK}Data perustuu {COMMA} mittaukseen STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms @@ -2708,9 +2715,15 @@ STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{ STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Ajoneuvoaskeleet: +STR_FRAMERATE_GL_SHIPS :{BLACK} Laiva-askeleet: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Maailma-askeleet: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Maailmanäkymät: STR_FRAMERATE_VIDEO :{WHITE}Videolähtö: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GL_SHIPS :Laiva-askeleet +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Ilma-alusaskeleet STR_FRAMETIME_CAPTION_VIDEO :Videolähtö ############ End of leave-in-this-order @@ -2737,6 +2750,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Tietoja STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Tietoja ei ole saatavilla STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Suodatinteksti: STR_SAVELOAD_OSKTITLE :{BLACK}Syötä nimi tallennustiedostolle @@ -3000,7 +3014,7 @@ STR_TOWN_DIRECTORY_CAPTION :{WHITE}Kaupungi STR_TOWN_DIRECTORY_NONE :{ORANGE}- Ei mitään - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (suurkaup.){BLACK} ({COMMA}) -STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Kaupunkien nimet - nimen klikkaaminen keskittää päänäkymän kaupunkiin. Ctrl+Klik avaa uuden näkymäikkunan kaupungin sijaintiin +STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Kaupunkien nimet - keskitä päänäkymä kaupunkiin napsauttamalla nimeä. Ctrl+Klik avaa uuden näkymäikkunan kaupungin sijaintiin STR_TOWN_POPULATION :{BLACK}Maailman asukasluku: {COMMA} # Town view window @@ -3066,7 +3080,7 @@ STR_GOALS_SPECTATOR_NONE :{ORANGE}- Ei sa STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} STR_GOALS_COMPANY_TITLE :{BLACK}Yhtiön tavoitteet: -STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikkaa tavoitetta keskittääksesi päänäkymän teollisuuteen/kaupunkiin/ruutuun. Ctrl+Klik avaa uuden näkymän teollisuuden/kaupungin/ruudun sijaintiin +STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Keskitä päänäkymä teollisuuteen/kaupunkiin/ruutuun napsauttamalla tavoitetta. Ctrl+Klik avaa uuden näkymän teollisuuden/kaupungin/ruudun sijaintiin # Goal question window STR_GOAL_QUESTION_CAPTION_QUESTION :Kysymys @@ -3105,7 +3119,7 @@ STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Napsauta palvelua keskittääksesi päänäkymän teollisuuteen/kaupunkiin. Ctrl+Klik avaa uuden näkymäikkunan teollisuuden/kaupungin sijaintiin # Story book window -STR_STORY_BOOK_CAPTION :{WHITE}Yhtiön {COMPANY} historia +STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY}: historia STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Yleinen yhtiöhistoria STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Sivu {NUM} @@ -3183,7 +3197,7 @@ STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Keskitä STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Muuta aseman nimi. STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Näytä kaikki junat, joilla on tämä asema käskyissään. -STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Näytä kaikki autot, joilla on tämä asema käskyissään. +STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Näytä kaikki ajoneuvot, joilla on tämä asema käskyissään. STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Näytä kaikki lentokoneet, joilla on tämä asema käskyissään. STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Näytä kaikki laivat, joilla on tämä asema käskyissään. @@ -3223,7 +3237,7 @@ STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURREN STR_FINANCES_TOTAL_CAPTION :{WHITE}Yhteensä: STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Tilin saldo STR_FINANCES_LOAN_TITLE :{WHITE}Laina -STR_FINANCES_MAX_LOAN :{WHITE}Laina enimmillään: {BLACK}{CURRENCY_LONG} +STR_FINANCES_MAX_LOAN :{WHITE}Laina enintään: {BLACK}{CURRENCY_LONG} STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG} STR_FINANCES_BORROW_BUTTON :{BLACK}Nosta lainaa {CURRENCY_LONG} STR_FINANCES_BORROW_TOOLTIP :{BLACK}Ota lisää lainaa. Ctrl+Klik nostaa lainaa niin paljon kuin mahdollista @@ -3258,7 +3272,7 @@ STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Rakenna STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Näytä päämaja STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Näytä yhtiön päämaja STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Siirrä päämaja -STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Rakenna yhtiön päärakennus muualle, kustannus 1{NBSP}% yhtiön arvosta. Shift+Klik näyttää kustannearvion sijoittamatta päärakennusta uudelleen +STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Rakenna yhtiön päärakennus muualle, kustannus 1{NBSP}% yhtiön arvosta. Shift+Klik näyttää kustannusarvion sijoittamatta päärakennusta uudelleen STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Yksityiskohdat STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Näytä tarkka infrastruktuurin määrä @@ -3273,7 +3287,7 @@ STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Muuta p STR_COMPANY_VIEW_BUY_SHARE_BUTTON :{BLACK}Osta 25{NBSP}%:n osuus yhtiöstä STR_COMPANY_VIEW_SELL_SHARE_BUTTON :{BLACK}Myy 25{NBSP}%:n osuus yhtiöstä -STR_COMPANY_VIEW_BUY_SHARE_TOOLTIP :{BLACK}Osta 25{NBSP}%:n osuus tästä yhtiöstä. Shift+Klik näyttää kustannearvion ostamatta osuuksia +STR_COMPANY_VIEW_BUY_SHARE_TOOLTIP :{BLACK}Osta 25{NBSP}%:n osuus tästä yhtiöstä. Shift+Klik näyttää kustannusarvion ostamatta osuuksia STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Myy 25{NBSP}%:n osuus tästä yhtiöstä. Shift+Klik näyttää tuottoarvion myymättä osuuksia STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Yhtiön nimi @@ -3301,7 +3315,7 @@ STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ei mi STR_INDUSTRY_DIRECTORY_ITEM :{ORANGE}{INDUSTRY}{BLACK} ({CARGO_LONG}{STRING}){YELLOW} ({COMMA}% kuljetettu) STR_INDUSTRY_DIRECTORY_ITEM_TWO :{ORANGE}{INDUSTRY}{BLACK} ({CARGO_LONG}{STRING}/{CARGO_LONG}{STRING}){YELLOW} ({COMMA}%/{COMMA}% kuljetettu) STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} -STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Teollisuusmuotojen nimet - klikkaa nimeä kohdistaaksesi päänäkymän teollisuuslaitokseen. Ctrl+Klik avaa uuden näkymäikkunan teollisuuslaitoksen sijaintiin +STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Teollisuusmuotojen nimet - kohdista päänäkymä teollisuuslaitokseen napsauttamalla nimeä. Ctrl+Klik avaa uuden näkymäikkunan teollisuuslaitoksen sijaintiin # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3327,13 +3341,13 @@ STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Tuottaa: ############ range for produces ends STR_CONFIG_GAME_PRODUCTION :{WHITE}Muokkaa tuotantoa (8:n kerroin, 2040 asti) -STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Muuta tuotantotasoa (prosentteina, 800% asti) +STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Muuta tuotantotasoa (prosentteina, 800{NBSP}% asti) # Vehicle lists -STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} junaa -STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} - {COMMA} ajoneuvoa -STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} laivaa -STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} lentokonetta +STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} juna{P "" a} +STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} - {COMMA} ajoneuvo{P "" a} +STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} laiva{P "" a} +STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} lentokone{P "" tta} STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Junat - napsauta junaa saadaksesi tietoja. STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Ajoneuvot - napsauta ajoneuvoa saadaksesi tietoja. @@ -3358,23 +3372,23 @@ STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Lähetä variko STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Lähetä telakalle STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Lähetä varikolle -STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Pysäytä kaikki listalla olevat kulkuneuvot klikkaamalla -STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Käynnistä kaikki listalla olevat ajoneuvot klikkaamalla +STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Pysäytä kaikki listalla olevat kulkuneuvot napsauttamalla +STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Käynnistä kaikki listalla olevat ajoneuvot napsauttamalla STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}{COMMA} ajoneuvon jaetut käskyt # Group window STR_GROUP_ALL_TRAINS :Kaikki junat -STR_GROUP_ALL_ROAD_VEHICLES :Kaikki autot +STR_GROUP_ALL_ROAD_VEHICLES :Kaikki ajoneuvot STR_GROUP_ALL_SHIPS :Kaikki laivat STR_GROUP_ALL_AIRCRAFTS :Kaikki lentoalukset STR_GROUP_DEFAULT_TRAINS :Muut junat -STR_GROUP_DEFAULT_ROAD_VEHICLES :Muut autot +STR_GROUP_DEFAULT_ROAD_VEHICLES :Muut ajoneuvot STR_GROUP_DEFAULT_SHIPS :Muut laivat STR_GROUP_DEFAULT_AIRCRAFTS :Muut lentokoneet -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Ryhmät - klikkaa ryhmää nähdäksesi kaikki kulkuneuvot tässä ryhmässä. Järjestä ryhmiä vetämällä ja pudottamalla. +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Ryhmät - napsauta ryhmää nähdäksesi kaikki kulkuneuvot tässä ryhmässä. Järjestä ryhmiä vetämällä ja pudottamalla. STR_GROUP_CREATE_TOOLTIP :{BLACK}Luo ryhmä STR_GROUP_DELETE_TOOLTIP :{BLACK}Poista valittu ryhmä STR_GROUP_RENAME_TOOLTIP :{BLACK}Nimeä valittu ryhmä @@ -3390,6 +3404,7 @@ STR_GROUP_RENAME_CAPTION :{BLACK}Nimeä r STR_GROUP_PROFIT_THIS_YEAR :Tuotto tänä vuonna: STR_GROUP_PROFIT_LAST_YEAR :Tuotto viime vuonna: +STR_GROUP_OCCUPANCY :Nykyinen käyttö: STR_GROUP_OCCUPANCY_VALUE :{NUM} % # Build vehicle window @@ -3435,10 +3450,10 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Osta ajo STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Osta laiva STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Osta lentokone -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valittu yksikkö. Shift+Klik näyttää kustannearvion ostamatta kopiota -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valittu ajoneuvo.. Shift+Klik näyttää kustannearvion ostamatta kopiota -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valittu laiva. Shift+Klik näyttää kustannearvion ostamatta kopiota -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Osta korostettu lentokone. Shift+Klik näyttää kustannearvion ostamatta kopiota +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valittu yksikkö. Shift+Klik näyttää kustannusarvion ostamatta +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valittu ajoneuvo. Shift+Klik näyttää kustannusarvion ostamatta +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valittu laiva. Shift+Klik näyttää kustannusarvion ostamatta +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Osta korostettu lentokone. Shift+Klik näyttää kustannusarvion ostamatta STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Nimeä STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Nimeä @@ -3481,10 +3496,10 @@ STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE} STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} kulkuneuvo{P "" a}{STRING} STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) -STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Junat - vedä kulkuneuvoa vasemmalla hiiren painikkella lisätäksesi/poistaaksesi junasta, oikealla näppäimellä lisätietoja, Pidä pohjassa Ctrl-näppäintä toteuttaaksesi molemmat toiminnot seuraavaan ketjuun -STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Ajoneuvot - napsauta ajoneuvoa oikealla hiiren näppäimellä saadaksesi tietoja. -STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Laivat - napsauta laivaa oikealla hiiren näppäimellä saadaksesi tietoja. -STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lentokoneet - napsauta lentokonetta oikealla hiiren näppäimellä saadaksesi tietoja. +STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Junat - vedä kulkuneuvoa vasemmalla hiiren painikkella lisätäksesi/poistaaksesi junasta, oikealla painikkeella lisätietoja. Pidä pohjassa Ctrl-näppäintä toteuttaaksesi molemmat toiminnot seuraavaan ketjuun +STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Ajoneuvot - napsauta ajoneuvoa oikealla hiiren painikkeella saadaksesi tietoja. +STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Laivat - napsauta laivaa oikealla hiiren painikkeella saadaksesi tietoja. +STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lentokoneet - napsauta lentokonetta oikealla hiiren painikkeella saadaksesi tietoja. STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Vedä yksikkö tähän myydäksesi sen. STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Vedä ajoneuvo tähän myydäksesi sen. @@ -3493,12 +3508,12 @@ STR_DEPOT_AIRCRAFT_SELL_TOOLTIP :{BLACK}Vedä le STR_DEPOT_DRAG_WHOLE_TRAIN_TO_SELL_TOOLTIP :{BLACK}Vedä junan veturi tähän myydäksesi koko junan. -STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TOOLTIP :{BLACK}Myy kaikki varikolla olevat junat +STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TOOLTIP :{BLACK}Myy kaikki veturitallilla olevat junat STR_DEPOT_SELL_ALL_BUTTON_ROAD_VEHICLE_TOOLTIP :{BLACK}Myy kaikki varikolla olevat ajoneuvot STR_DEPOT_SELL_ALL_BUTTON_SHIP_TOOLTIP :{BLACK}Myy kaikki telakalla olevat laivat STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TOOLTIP :{BLACK}Myy kaikki hallissa olevat ilma-alukset -STR_DEPOT_AUTOREPLACE_TRAIN_TOOLTIP :{BLACK}Korvaa kaikki varikolla olevat junat automaattisesti +STR_DEPOT_AUTOREPLACE_TRAIN_TOOLTIP :{BLACK}Korvaa kaikki veturitallilla olevat junat automaattisesti STR_DEPOT_AUTOREPLACE_ROAD_VEHICLE_TOOLTIP :{BLACK}Korvaa kaikki varikolla olevat ajoneuvot automaattisesti STR_DEPOT_AUTOREPLACE_SHIP_TOOLTIP :{BLACK}Korvaa kaikki telakalla olevat laivat automaattisesti STR_DEPOT_AUTOREPLACE_AIRCRAFT_TOOLTIP :{BLACK}Korvaa kaikki hallissa olevat lento-alukset automaattisesti @@ -3518,10 +3533,10 @@ STR_DEPOT_CLONE_ROAD_VEHICLE :{BLACK}Kloonaa STR_DEPOT_CLONE_SHIP :{BLACK}Kloonaa laiva STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Kloonaa lentokone -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Tämä ostaa kopion junasta ja kaikista sen vaunuista. Paina tätä nappia ja sen jälkeen junaa varikon sisä- tai ulkopuolella. Ctrl+Klik jakaa komennot. Shift+Klik näyttää kustannearvion ostamatta kopiota -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Tämä ostaa kopion ajoneuvosta. Paina tätä nappia ja sen jälkeen ajoneuvoa varikon sisä- tai ulkopuolella. Ctrl+Klik jakaa komennot. Shift+Klik näyttää kustannearvion ostamatta kopiota -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Tämä ostaa kopion laivasta. Paina tätä nappia ja sen jälkeen laivaa telakan sisä- tai ulkopuolella. Ctrl+Klik jakaa komennot. Shift+Klik näyttää kustannearvion ostamatta kopiota -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Tämä ostaa kopion lentokoneesta. Paina tätä nappia ja sen jälkeen lentokonetta lentokonehallin sisä- tai ulkopuolella. Ctrl+Klik jakaa komennot. Shift+Klik näyttää kustannearvion ostamatta kopiota +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Tämä ostaa kopion junasta ja kaikista sen vaunuista. Napsauta tätä painiketta ja sen jälkeen junaa varikon sisä- tai ulkopuolella. Ctrl+Klik jakaa komennot. Shift+Klik näyttää kustannusarvion ostamatta kopiota +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Tämä ostaa kopion ajoneuvosta. Napsauta tätä painiketta ja sen jälkeen ajoneuvoa varikon sisä- tai ulkopuolella. Ctrl+Klik jakaa komennot. Shift+Klik näyttää kustannusarvion ostamatta kopiota +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Tämä ostaa kopion laivasta. Napsauta tätä painiketta ja sen jälkeen laivaa telakan sisä- tai ulkopuolella. Ctrl+Klik jakaa komennot. Shift+Klik näyttää kustannusarvion ostamatta kopiota +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Tämä ostaa kopion lentokoneesta. Napsauta tätä painiketta ja sen jälkeen lentokonetta lentokonehallin sisä- tai ulkopuolella. Ctrl+Klik jakaa komennot. Shift+Klik näyttää kustannusarvion ostamatta kopiota STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Keskitä näkymä veturitallin sijaintiin. Ctrl+Klik avaa uuden näkymäikkunan veturitallin sijaintiin STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Keskitä päänäkymä varikon sijaintiin. Ctrl+Klik avaa uuden näkymäikkunan varikon sijaintiin @@ -3533,15 +3548,15 @@ STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Näytä STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TOOLTIP :{BLACK}Näytä tässä terminaalissa olevien laivojen käskyt STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TOOLTIP :{BLACK}Näytä tämän lentokentän ilma-alusten käskyistä hallista riippumatta -STR_DEPOT_MASS_STOP_DEPOT_TRAIN_TOOLTIP :{BLACK}Pysäytä kaikki varikolla olevat junat klikkaamalla -STR_DEPOT_MASS_STOP_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Pysäytä kaikki varikolla olevat ajoneuvot klikkaamalla -STR_DEPOT_MASS_STOP_DEPOT_SHIP_TOOLTIP :{BLACK}Pysäytä kaikki telakalla olevat laivat klikkaamalla -STR_DEPOT_MASS_STOP_HANGAR_TOOLTIP :{BLACK}Pysäytä kaikki hallissa olevat ilma-alukset klikkaamalla +STR_DEPOT_MASS_STOP_DEPOT_TRAIN_TOOLTIP :{BLACK}Pysäytä kaikki veturitallilla olevat junat napsauttamalla +STR_DEPOT_MASS_STOP_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Pysäytä kaikki varikolla olevat ajoneuvot napsauttamalla +STR_DEPOT_MASS_STOP_DEPOT_SHIP_TOOLTIP :{BLACK}Pysäytä kaikki telakalla olevat laivat napsauttamalla +STR_DEPOT_MASS_STOP_HANGAR_TOOLTIP :{BLACK}Pysäytä kaikki hallissa olevat ilma-alukset napsauttamalla -STR_DEPOT_MASS_START_DEPOT_TRAIN_TOOLTIP :{BLACK}Käynnistä kaikki varikolla olevat junat klikkaamalla -STR_DEPOT_MASS_START_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Käynnistä kaikki varikolla olevat ajoneuvot klikkaamalla -STR_DEPOT_MASS_START_DEPOT_SHIP_TOOLTIP :{BLACK}Käynnistä kaikki telakalla olevat laivat klikkaamalla -STR_DEPOT_MASS_START_HANGAR_TOOLTIP :{BLACK}Käynnistä kaikki hallissa olevat ilma-alukset klikkaamalla +STR_DEPOT_MASS_START_DEPOT_TRAIN_TOOLTIP :{BLACK}Käynnistä kaikki veturitallilla olevat junat napsauttamalla +STR_DEPOT_MASS_START_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Käynnistä kaikki varikolla olevat ajoneuvot napsauttamalla +STR_DEPOT_MASS_START_DEPOT_SHIP_TOOLTIP :{BLACK}Käynnistä kaikki telakalla olevat laivat napsauttamalla +STR_DEPOT_MASS_START_HANGAR_TOOLTIP :{BLACK}Käynnistä kaikki hallissa olevat ilma-alukset napsauttamalla STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Olet myymässä kaikki varikon ajoneuvot. Oletko varma? @@ -3616,10 +3631,10 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Lähetä STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Lähetä laiva telakalle. Ctrl+Klik suorittaa vain huollon STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Lähetä lentokone lentokonehalliin. Ctrl+Klik suorittaa vain huollon -STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Tämä ostaa kopion junasta ja kaikista sen vaunuista. Ctrl+Klik jakaa komennot. Shift+Klik näyttää kustannearvion ostamatta kopiota -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Tämä ostaa kopion ajoneuvosta. Ctrl+Klik jakaa komennot. Shift+Klik näyttää kustannearvion ostamatta kopiota -STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Tämä ostaa kopion laivasta. Ctrl+Klik jakaa komennot. Shift+Klik näyttää kustannearvion ostamatta kopiota -STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Tämä ostaa kopion lentokoneesta. Ctrl+Klik jakaa komennot. Shift+Klik näyttää kustannearvion ostamatta kopiota +STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Tämä ostaa kopion junasta vaunuineen. Ctrl+Klik jakaa komennot. Shift+Klik näyttää kustannusarvion ostamatta kopiota +STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Tämä ostaa kopion ajoneuvosta. Ctrl+Klik jakaa komennot. Shift+Klik näyttää kustannusarvion ostamatta kopiota +STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Tämä ostaa kopion laivasta. Ctrl+Klik jakaa komennot. Shift+Klik näyttää kustannusarvion ostamatta kopiota +STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Tämä ostaa kopion lentokoneesta. Ctrl+Klik jakaa komennot. Shift+Klik näyttää kustannusarvion ostamatta kopiota STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Anna junalle lupa ohittaa punainen opastin. @@ -3745,7 +3760,7 @@ STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Uusi kap STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Uusi kapasiteetti: {GOLD}{CARGO_LONG}{}{BLACK}Tulot sovittamisesta: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Uusi kapasiteetti: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Sovituksen kustannus: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Uusi kapasiteetti: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Tulot sovittamisesta: {GREEN}{CURRENCY_LONG} -STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Valitse sovitettavat kulkuneuvot. Hiirellä vetäminen sallii useamman kulkuneuvon valinnan. Tyhjän alueen klikkaus valitsee koko kulkuneuvon. Ctrl+Klik valitsee kulkuneuvon ja sitä seuraavan ketjun +STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Valitse sovitettavat kulkuneuvot. Hiirellä vetäminen sallii useamman kulkuneuvon valinnan. Tyhjän alueen napsautus valitsee koko kulkuneuvon. Ctrl+Klik valitsee kulkuneuvon ja sitä seuraavan ketjun STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Valitse junan rahtityyppi STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Valitse ajoneuvolla ajettava rahti @@ -3775,7 +3790,7 @@ STR_ORDERS_END_OF_ORDERS :- - Käskyjen l STR_ORDERS_END_OF_SHARED_ORDERS :- - Jaettujen käskyjen loppu - - # Order bottom buttons -STR_ORDER_NON_STOP :{BLACK}Nonstop +STR_ORDER_NON_STOP :{BLACK}Välipysähdyksetön STR_ORDER_GO_TO :Mene STR_ORDER_GO_NON_STOP_TO :Mene pysähtymättä STR_ORDER_GO_VIA :Mene kautta @@ -3847,7 +3862,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :Mene lähimmäl STR_ORDER_GO_TO_NEAREST_HANGAR :Mene lähimmälle varikolle STR_ORDER_CONDITIONAL :Ehdollinen hyppykäsky STR_ORDER_SHARE :Jaa käskyt -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Lisää uusi käsky ennen valittua, tai lisää listan viimeiseksi. Ctrl tekee asemakäskyistä 'lastaa täyteen kaikki rahti', reittipistekäskyistä 'non-stop' ja veturitallikäskyistä 'huolto'. 'Jaa käskyt' jakaa käskyt valitun kulkuneuvon kanssa. Kulkuneuvon klikkaaminen kopioi käskyt siitä kulkuneuvosta. Varikkokäsky poistaa käytöstä automaattisen huollon +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Lisää uusi käsky ennen valittua, tai lisää listan viimeiseksi. Ctrl tekee asemakäskyistä 'lastaa täyteen kaikki rahti', reittipistekäskyistä 'non-stop' ja veturitallikäskyistä 'huolto'. 'Jaa käskyt' jakaa käskyt valitun kulkuneuvon kanssa. Kulkuneuvon napsauttaminen kopioi käskyt kyseisestä kulkuneuvosta. Varikkokäsky poistaa käytöstä automaattisen huollon STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Näytä kaikki ajoneuvot, jotka jakavat nämä käskyt @@ -3856,11 +3871,11 @@ STR_ORDER_GO_TO_WAYPOINT :Kierrä reittip STR_ORDER_GO_NON_STOP_TO_WAYPOINT :Mene pysäht. pisteen {WAYPOINT} kautta STR_ORDER_SERVICE_AT :Huolto -STR_ORDER_SERVICE_NON_STOP_AT :Nonstop-huolto +STR_ORDER_SERVICE_NON_STOP_AT :Huolto pysäytyksettä STR_ORDER_NEAREST_DEPOT :lähin STR_ORDER_NEAREST_HANGAR :lähin varikko -STR_ORDER_TRAIN_DEPOT :Junavarikko +STR_ORDER_TRAIN_DEPOT :Veturitalli STR_ORDER_ROAD_VEHICLE_DEPOT :Varikko STR_ORDER_SHIP_DEPOT :Telakka STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING} @@ -3922,7 +3937,7 @@ STR_TIMETABLE_TITLE :{WHITE}{VEHICLE STR_TIMETABLE_ORDER_VIEW :{BLACK}Käskyt STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}Vaihda käskynäkymään -STR_TIMETABLE_TOOLTIP :{BLACK}Aikataulu - klikkaa käskyä valitaksesi sen +STR_TIMETABLE_TOOLTIP :{BLACK}Aikataulu - valitse käsky sitä napsauttamalla STR_TIMETABLE_NO_TRAVEL :Ei kulkua STR_TIMETABLE_NOT_TIMETABLEABLE :Kulje (automaattinen; aikataulu seuraavan manuaalisen käskyn mukaisesti) @@ -3937,7 +3952,7 @@ STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(matkusta {STRI STR_TIMETABLE_STAY_FOR :ja odota {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :ja kulje {STRING} STR_TIMETABLE_DAYS :{COMMA}{NBSP}päivä{P "" ä} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tick{P "" iä} +STR_TIMETABLE_TICKS :{COMMA}{NBSP}askel{P "" ta} STR_TIMETABLE_TOTAL_TIME :{BLACK}Aikataulun kesto on {STRING} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Aikataulun kesto on vähintään {STRING} @@ -4293,7 +4308,7 @@ STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Telakkaa STR_ERROR_CAN_T_RENAME_DEPOT :{WHITE}Varikon nimeä ei voi vaihtaa... STR_ERROR_TRAIN_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... täytyy olla pysähdyksissä veturitallin sisällä -STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... täytyy olla pysähtyneenä varikolla +STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... täytyy olla pysäytettynä varikolla STR_ERROR_SHIP_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... täytyy olla pysähdyksissä telakalla STR_ERROR_AIRCRAFT_MUST_BE_STOPPED_INSIDE_HANGAR :{WHITE}... täytyy olla pysähdyksissä lentokonehallissa From e61904c3e61119a5ce737f67e593148a7ef53c48 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Wed, 26 Dec 2018 19:36:16 +0100 Subject: [PATCH 118/622] Change: use Azure Pipelines instead of self-hosted Jenkins for CI --- Jenkinsfile | 75 ----------------------------- azure-pipelines-ci.yml | 105 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+), 75 deletions(-) delete mode 100644 Jenkinsfile create mode 100644 azure-pipelines-ci.yml diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index af7968e71e..0000000000 --- a/Jenkinsfile +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env groovy - -// The stages we run one by one -// Please don't add more than 2 items in a single stage; this hurts performance -def ci_stages = [ - "Checkers": [ - "commit-checker": "openttd/compile-farm-ci:commit-checker", - ], - "Compilers": [ - "linux-amd64-gcc-6": "openttd/compile-farm-ci:linux-amd64-gcc-6", - "linux-amd64-clang-3.8": "openttd/compile-farm-ci:linux-amd64-clang-3.8", - ], - "Archs": [ - "linux-i386-gcc-6": "openttd/compile-farm-ci:linux-i386-gcc-6", - ], - "OS": [ - "osx-10.9": "openttd/compile-farm-ci:osx-10.9", - ], -] - -def generateStage(targets) { - return targets.collectEntries{ key, target -> - ["${key}": generateCI(key, target)] - } -} - -def generateCI(display_name, image_name) { - return { - githubNotify context: 'openttd/' + display_name, description: 'This commit is being built', status: 'PENDING' - - try { - dir("${display_name}") { - unstash "source" - - docker.image("${image_name}").pull() - docker.image("${image_name}").withRun("--volumes-from ${hostname} --workdir " + pwd()) { c -> - sh "docker logs --follow ${c.id}; exit `docker wait ${c.id}`" - } - } - - githubNotify context: 'openttd/' + display_name, description: 'The commit looks good', status: 'SUCCESS' - } - catch (error) { - githubNotify context: 'openttd/' + display_name, description: 'The commit cannot be built', status: 'FAILURE' - throw error - } - } -} - -node { - ansiColor('xterm') { - stage("Checkout") { - checkout scm - - // Ensure user.email and user.name is set, otherwise rebase cannot work - sh "git config user.email 'info@openttd.org'" - sh "git config user.name 'OpenTTD CI'" - - // Ensure we also have origin/master available - sh "git fetch --no-tags origin master:refs/remotes/origin/master" - - // Try to rebase to origin/master; if this fails, fail the CI - sh "git rebase origin/master" - - stash name: "source", useDefaultExcludes: false - } - - ci_stages.each { ci_stage -> - stage(ci_stage.key) { - parallel generateStage(ci_stage.value) - } - } - } -} - diff --git a/azure-pipelines-ci.yml b/azure-pipelines-ci.yml new file mode 100644 index 0000000000..0bc5c282de --- /dev/null +++ b/azure-pipelines-ci.yml @@ -0,0 +1,105 @@ +trigger: none +pr: +- master + +jobs: +- job: windows + displayName: 'Windows' + pool: + vmImage: 'VS2017-Win2016' + + strategy: + matrix: + Win32: + BuildPlatform: 'Win32' + Win64: + BuildPlatform: 'x64' + + steps: + # Rebase to origin/master for every PR. This means users don't have to + # rebase every time master changes. As long as the PR applies cleanly, we + # will validate it. + - script: | + git config user.email 'info@openttd.org' + git config user.name 'OpenTTD CI' + git rebase origin/master + displayName: 'Rebase to master' + - task: DownloadBuildArtifacts@0 + displayName: 'Download dependencies' + inputs: + buildType: specific + project: '8da578ca-c6cf-47b8-b489-d54a7b188de8' + pipeline: 2 + artifactName: 'windows-dependencies' + downloadPath: '$(Build.ArtifactStagingDirectory)' + - script: $(Build.ArtifactStagingDirectory)\windows-dependencies\vcpkg.exe integrate install + displayName: 'Install dependencies' + - task: VSBuild@1 + displayName: 'Build' + inputs: + solution: 'projects/openttd_vs141.sln' + platform: $(BuildPlatform) + configuration: Release + maximumCpuCount: true + # Running the regression is currently not possibe via MSVC (console is not redirected) + +- job: linux + displayName: 'Linux' + pool: + vmImage: 'ubuntu-16.04' + + strategy: + matrix: + commit-checker: {} + linux-amd64-clang-3.8: {} + linux-amd64-gcc-6: {} + linux-i386-gcc-6: {} + + steps: + # Rebase to origin/master for every PR. This means users don't have to + # rebase every time master changes. As long as the PR applies cleanly, we + # will validate it. + - script: | + git config user.email 'info@openttd.org' + git config user.name 'OpenTTD CI' + git rebase origin/master + displayName: 'Rebase to master' + - task: Docker@1 + displayName: 'Build and test' + inputs: + command: 'Run an image' + imageName: openttd/compile-farm-ci:$(Agent.JobName) + volumes: '$(Build.SourcesDirectory):$(Build.SourcesDirectory)' + workingDirectory: '$(Build.SourcesDirectory)' + runInBackground: false + +- job: macos + displayName: 'MacOS' + pool: + vmImage: 'macOS-10.13' + + steps: + # Rebase to origin/master for every PR. This means users don't have to + # rebase every time master changes. As long as the PR applies cleanly, we + # will validate it. + - script: | + git config user.email 'info@openttd.org' + git config user.name 'OpenTTD CI' + git rebase origin/master + displayName: 'Rebase to master' + - script: HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config lzo xz libpng + displayName: 'Install dependencies' + - bash: | + set -ex + mkdir -p ~/Documents/OpenTTD/baseset + cd ~/Documents/OpenTTD/baseset + wget https://binaries.openttd.org/extra/opengfx/0.5.2/opengfx-0.5.2-all.zip + unzip opengfx-0.5.2-all.zip + rm -f opengfx-0.5.2-all.zip + displayName: 'Install OpenGFX' + - script: './configure PKG_CONFIG_PATH=/usr/local/lib/pkgconfig --enable-static' + displayName: 'Configure' + - script: 'make -j2' + displayName: 'Build' + - script: 'make regression' + displayName: 'Test' From d44739463811b437a8c4a4bbcb7cb7dfcdec8688 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Thu, 27 Dec 2018 23:58:46 +0100 Subject: [PATCH 119/622] Fix: [AzurePipelines] also trigger CI checks on commit to master --- azure-pipelines-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/azure-pipelines-ci.yml b/azure-pipelines-ci.yml index 0bc5c282de..d9404da5fb 100644 --- a/azure-pipelines-ci.yml +++ b/azure-pipelines-ci.yml @@ -1,4 +1,5 @@ -trigger: none +trigger: +- master pr: - master From d8f6c80696f354c257614450f66de813044fb854 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Thu, 27 Dec 2018 22:56:39 +0100 Subject: [PATCH 120/622] Fix: [AzurePipelines] download Windows Dependencies from GitHub Releases It turns out that Azure Pipelines has a lot of issues downloading an artifact from your own project if it is triggered from a fork. From what I could deduce, this is because the API requires a valid token, which is not set (correctly?) when triggered from a fork. As it is nicer anyway to publish the Windows Dependencies on GitHub, it is now published there (and updated at least every week), and we use the files from GitHub as our dependency. --- azure-pipelines-ci.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/azure-pipelines-ci.yml b/azure-pipelines-ci.yml index d9404da5fb..ea7f355141 100644 --- a/azure-pipelines-ci.yml +++ b/azure-pipelines-ci.yml @@ -25,14 +25,13 @@ jobs: git config user.name 'OpenTTD CI' git rebase origin/master displayName: 'Rebase to master' - - task: DownloadBuildArtifacts@0 + - bash: | + set -ex + curl -L https://github.com/OpenTTD/OpenTTD-CF/releases/download/latest/windows-dependencies.zip > windows-dependencies.zip + unzip windows-dependencies.zip + rm -f windows-dependencies.zip displayName: 'Download dependencies' - inputs: - buildType: specific - project: '8da578ca-c6cf-47b8-b489-d54a7b188de8' - pipeline: 2 - artifactName: 'windows-dependencies' - downloadPath: '$(Build.ArtifactStagingDirectory)' + workingDirectory: $(Build.ArtifactStagingDirectory) - script: $(Build.ArtifactStagingDirectory)\windows-dependencies\vcpkg.exe integrate install displayName: 'Install dependencies' - task: VSBuild@1 From 4a255e879aa60ac21a12097f1896f0a6dd110770 Mon Sep 17 00:00:00 2001 From: Alberth Date: Sat, 29 Dec 2018 13:31:31 +0100 Subject: [PATCH 121/622] Fix #6966: Only allow switching to a valid company. --- src/script/api/script_companymode.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/script/api/script_companymode.cpp b/src/script/api/script_companymode.cpp index 1931a5db78..a5d3963a2d 100644 --- a/src/script/api/script_companymode.cpp +++ b/src/script/api/script_companymode.cpp @@ -10,6 +10,7 @@ /** @file script_companymode.cpp Implementation of ScriptCompanyMode. */ #include "../../stdafx.h" +#include "../../company_base.h" #include "script_companymode.hpp" #include "../../safeguards.h" @@ -17,6 +18,7 @@ ScriptCompanyMode::ScriptCompanyMode(int company) { if (company < OWNER_BEGIN || company >= MAX_COMPANIES) company = INVALID_COMPANY; + if (!::Company::IsValidID(company)) company = INVALID_COMPANY; this->last_company = ScriptObject::GetCompany(); ScriptObject::SetCompany((CompanyID)company); From 391bc45c41287bf3016e33266b24f30cdbfb5f07 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 31 Dec 2018 19:45:43 +0100 Subject: [PATCH 122/622] Update: Translations from eints spanish (mexican): 10 changes by Absay --- src/lang/spanish_MX.txt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index d3f5980c84..113300b766 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -283,7 +283,7 @@ STR_SORT_BY_CAPTION_DATE :{BLACK}Fecha STR_SORT_BY_NAME :Nombre STR_SORT_BY_PRODUCTION :Producción STR_SORT_BY_TYPE :Tipo -STR_SORT_BY_TRANSPORTED :Entregado +STR_SORT_BY_TRANSPORTED :Transportado STR_SORT_BY_NUMBER :Número STR_SORT_BY_PROFIT_LAST_YEAR :Utilidad año pasado STR_SORT_BY_PROFIT_THIS_YEAR :Utilidad este año @@ -317,7 +317,7 @@ STR_SORT_BY_RATING :Evaluación STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Poner en pausa STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Avance rápido STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opciones -STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Guardar partida, retirarse, salir +STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Guardar partida, salir STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Mostrar mapa, ventana de vista adicional o lista de carteles STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Mostrar guía de pueblos STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Mostrar subsidios @@ -391,7 +391,7 @@ STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Carteles transp ############ range for file menu starts STR_FILE_MENU_SAVE_GAME :Guardar partida STR_FILE_MENU_LOAD_GAME :Cargar partida -STR_FILE_MENU_QUIT_GAME :Retirarse de la partida +STR_FILE_MENU_QUIT_GAME :Salir de la partida STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Salir ############ range ends here @@ -1792,8 +1792,8 @@ STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS # Abandon game -STR_ABANDON_GAME_CAPTION :{WHITE}Retirarse de la partida -STR_ABANDON_GAME_QUERY :{YELLOW}¿Estás seguro de que deseas retirarte de esta partida? +STR_ABANDON_GAME_CAPTION :{WHITE}Salir de la partida +STR_ABANDON_GAME_QUERY :{YELLOW}¿Estás seguro de que deseas salir de esta partida? STR_ABANDON_SCENARIO_QUERY :{YELLOW}¿Estás seguro de que deseas salir de este mapa? # Cheat window @@ -2570,7 +2570,7 @@ STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Casas STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Clic en la industria para ver sus industrias proveedoras y receptoras STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Clic en el cargamento para ver sus industrias proveedoras y receptoras STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Mostrar cadena -STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Mostrar las industrias que proveen y reciben el cargamento +STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Mostrar las industrias que proveen y aceptan el cargamento STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Ver en minimapa STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Elegir y ver en el minimapa las industrias mostradas en el mapa principal STR_INDUSTRY_CARGOES_SELECT_CARGO :{BLACK}Elegir cargamento @@ -2598,7 +2598,7 @@ STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Tipo de STR_LAND_AREA_INFORMATION_AIRPORT_NAME :{BLACK}Nombre del aeropuerto: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Nombre de casilla del aeropuerto: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} -STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Cargamento recibido: {LTBLUE} +STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Cargamento aceptado: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tipo de vía: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Límite de velocidad de ferrocarril: {LTBLUE}{VELOCITY} @@ -3338,15 +3338,15 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industrias STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ninguna - -STR_INDUSTRY_DIRECTORY_ITEM :{ORANGE}{INDUSTRY}{BLACK} ({CARGO_LONG}{STRING}){YELLOW} ({COMMA}% entregado) -STR_INDUSTRY_DIRECTORY_ITEM_TWO :{ORANGE}{INDUSTRY}{BLACK} ({CARGO_LONG}{STRING}, {CARGO_LONG}{STRING}){YELLOW} ({COMMA}%, {COMMA}% entregado) +STR_INDUSTRY_DIRECTORY_ITEM :{ORANGE}{INDUSTRY}{BLACK} ({CARGO_LONG}{STRING}){YELLOW} ({COMMA}% transportado) +STR_INDUSTRY_DIRECTORY_ITEM_TWO :{ORANGE}{INDUSTRY}{BLACK} ({CARGO_LONG}{STRING}, {CARGO_LONG}{STRING}){YELLOW} ({COMMA}%, {COMMA}% transportado) STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Nombre de industria: Clic en un nombre para centrar la vista principal en la industria. Ctrl+Clic abre una ventana de vista en dicha ubicación # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Producción mes pasado: -STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% entregado) +STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportado) STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar la vista sobre la industria. Ctrl+Clic abre una ventana de vista en dicha ubicación STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de producción: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}¡La industria ha anunciado su cierre inminente! From 49ab02c084c0f69efdf4bbe286ce3662d1eafe86 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 4 Jan 2019 19:45:45 +0100 Subject: [PATCH 123/622] Update: Translations from eints spanish: 4 changes by SilverSurferZzZ --- src/lang/spanish.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index fb702b0fba..43f9d57b19 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -2710,6 +2710,10 @@ STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GL_TRAINS :{BLACK} Ticks de trenes: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Ticks de vehículos de carretera: +STR_FRAMERATE_GL_SHIPS :{BLACK} Ticks de barcos: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Ticks de aeronaves: STR_FRAMERATE_DRAWING :{BLACK}Renderizado gráfico: ############ End of leave-in-this-order ############ Leave those lines in this order!! From 16a91130a791de4b219c387c7aeccd15f14ea26f Mon Sep 17 00:00:00 2001 From: J0an Josep Date: Wed, 25 Jul 2018 18:53:58 +0200 Subject: [PATCH 124/622] Codechange: Use INVALID_TRACKDIR instead of 0xFF. --- src/pathfinder/npf/npf.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp index 3218d8314f..bc4d8b3099 100644 --- a/src/pathfinder/npf/npf.cpp +++ b/src/pathfinder/npf/npf.cpp @@ -1169,7 +1169,7 @@ Track NPFShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, * we did not find our target, but ftd.best_trackdir contains the direction leading * to the tile closest to our target. */ path_found = (ftd.best_bird_dist == 0); - if (ftd.best_trackdir == 0xff) return INVALID_TRACK; + if (ftd.best_trackdir == INVALID_TRACKDIR) return INVALID_TRACK; return TrackdirToTrack(ftd.best_trackdir); } From 9e30054de9de1b826137279d333648ca09217ef7 Mon Sep 17 00:00:00 2001 From: Juanjo Date: Fri, 18 Oct 2013 18:52:01 +0000 Subject: [PATCH 125/622] Codechange: Use window class as expected. --- src/window.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/window.cpp b/src/window.cpp index 5b9dad6777..22084c200e 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1741,7 +1741,7 @@ static Point LocalGetWindowPlacement(const WindowDesc *desc, int16 sm_width, int int16 default_width = max(desc->GetDefaultWidth(), sm_width); int16 default_height = max(desc->GetDefaultHeight(), sm_height); - if (desc->parent_cls != 0 /* WC_MAIN_WINDOW */ && (w = FindWindowById(desc->parent_cls, window_number)) != NULL) { + if (desc->parent_cls != WC_NONE && (w = FindWindowById(desc->parent_cls, window_number)) != NULL) { bool rtl = _current_text_dir == TD_RTL; if (desc->parent_cls == WC_BUILD_TOOLBAR || desc->parent_cls == WC_SCEN_LAND_GEN) { pt.x = w->left + (rtl ? w->width - default_width : 0); From 0aa69693c69849498ac70b14b8bfc9c5ab1ee449 Mon Sep 17 00:00:00 2001 From: glx Date: Thu, 27 Dec 2018 22:34:00 +0100 Subject: [PATCH 126/622] Fix 59e42ea17, 1f083c3ac: 'make clean' was not fully cleaning --- Makefile.lang.in | 2 +- Makefile.setting.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile.lang.in b/Makefile.lang.in index 7ce331913d..2853ae3898 100644 --- a/Makefile.lang.in +++ b/Makefile.lang.in @@ -78,7 +78,7 @@ depend: clean: $(E) '$(STAGE) Cleaning up language files' - $(Q)rm -f strgen.o string.o alloc_func.o getoptdata.o table/strings.h $(STRGEN) $(LANGS) $(LANGS:%=$(BIN_DIR)/lang/%) lang/english.* + $(Q)rm -f strgen_base.o strgen.o string.o alloc_func.o getoptdata.o table/strings.h $(STRGEN) $(LANGS) $(LANGS:%=$(BIN_DIR)/lang/%) lang/english.* mrproper: clean $(Q)rm -rf $(BIN_DIR)/lang diff --git a/Makefile.setting.in b/Makefile.setting.in index 656de05723..1e2dc992f8 100644 --- a/Makefile.setting.in +++ b/Makefile.setting.in @@ -58,7 +58,7 @@ depend: clean: $(E) '$(STAGE) Cleaning up settings files' - $(Q)rm -f settingsgen.o alloc_func.o getoptdata.o ini_load.o $(SETTINGSGEN) table/settings.h + $(Q)rm -f settingsgen.o alloc_func.o getoptdata.o string.o ini_load.o $(SETTINGSGEN) table/settings.h mrproper: clean From 12ba56c5a3173054ac25899bef481f4801d5b6e8 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sat, 5 Jan 2019 14:13:38 +0100 Subject: [PATCH 127/622] Fix 6accbf9: Silence warnings about unused fread() result --- src/script/squirrel.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/script/squirrel.cpp b/src/script/squirrel.cpp index d11e85bee8..23163f6b34 100644 --- a/src/script/squirrel.cpp +++ b/src/script/squirrel.cpp @@ -449,7 +449,8 @@ SQRESULT Squirrel::LoadFile(HSQUIRRELVM vm, const char *filename, SQBool printer } unsigned short bom = 0; if (size >= 2) { - fread(&bom, 1, sizeof(bom), file); // Inside tar, no point checking return value of fread + size_t sr = fread(&bom, 1, sizeof(bom), file); + (void)sr; // Inside tar, no point checking return value of fread } SQLEXREADFUNC func; @@ -487,8 +488,7 @@ SQRESULT Squirrel::LoadFile(HSQUIRRELVM vm, const char *filename, SQBool printer return sq_throwerror(vm, "I/O error"); } unsigned char uc; - fread(&uc, 1, sizeof(uc), file); - if (uc != 0xBF) { + if (fread(&uc, 1, sizeof(uc), file) != sizeof(uc) || uc != 0xBF) { FioFCloseFile(file); return sq_throwerror(vm, "Unrecognized encoding"); } From d6c06de5ad8f36c74eacba46e48a482c5c5c69b7 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sun, 4 Nov 2018 12:58:42 +0100 Subject: [PATCH 128/622] Add: Mixer feature for streaming sampled music --- src/mixer.cpp | 17 +++++++++++++++++ src/mixer.h | 10 ++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/mixer.cpp b/src/mixer.cpp index 6aaa8204d4..6014f6082e 100644 --- a/src/mixer.cpp +++ b/src/mixer.cpp @@ -15,6 +15,7 @@ #include "framerate_type.h" #include "safeguards.h" +#include "mixer.h" struct MixerChannel { bool active; @@ -38,6 +39,7 @@ struct MixerChannel { static MixerChannel _channels[8]; static uint32 _play_rate = 11025; static uint32 _max_size = UINT_MAX; +static MxStreamCallback _music_stream = NULL; /** * The theoretical maximum volume for a single sound sample. Multiple sound @@ -151,6 +153,9 @@ void MxMixSamples(void *buffer, uint samples) /* Clear the buffer */ memset(buffer, 0, sizeof(int16) * 2 * samples); + /* Fetch music if a sampled stream is available */ + if (_music_stream) _music_stream((int16*)buffer, samples); + /* Mix each channel */ for (mc = _channels; mc != endof(_channels); mc++) { if (mc->active) { @@ -215,6 +220,17 @@ void MxSetChannelVolume(MixerChannel *mc, uint volume, float pan) void MxActivateChannel(MixerChannel *mc) { mc->active = true; +} + +/** + * Set source of PCM music + * @param music_callback Function that will be called to fill sample buffers with music data. + * @return Sample rate of mixer, which the buffers supplied to the callback must be rendered at. + */ +uint32 MxSetMusicSource(MxStreamCallback music_callback) +{ + _music_stream = music_callback; + return _play_rate; } @@ -222,5 +238,6 @@ bool MxInitialize(uint rate) { _play_rate = rate; _max_size = UINT_MAX / _play_rate; + _music_stream = NULL; /* rate may have changed, any music source is now invalid */ return true; } diff --git a/src/mixer.h b/src/mixer.h index 0ccee61092..9766682d6b 100644 --- a/src/mixer.h +++ b/src/mixer.h @@ -14,6 +14,14 @@ struct MixerChannel; +/** + * Type of callback functions for supplying PCM music. + * A music decoder/renderer implements this function and installs it with MxSetMusicSource, which also returns the sample rate used. + * @param buffer Pointer to interleaved 2-channel signed 16 bit PCM data buffer, guaranteed to be 0-initialized. + * @param samples number of samples that must be filled into \c buffer. + */ +typedef void(*MxStreamCallback)(int16 *buffer, size_t samples); + bool MxInitialize(uint rate); void MxMixSamples(void *buffer, uint samples); @@ -22,4 +30,6 @@ void MxSetChannelRawSrc(MixerChannel *mc, int8 *mem, size_t size, uint rate, boo void MxSetChannelVolume(MixerChannel *mc, uint volume, float pan); void MxActivateChannel(MixerChannel*); +uint32 MxSetMusicSource(MxStreamCallback music_callback); + #endif /* MIXER_H */ From cb60a5e57fb7013b330041d428c53ba7f97e4f92 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sat, 5 Jan 2019 12:33:13 +0100 Subject: [PATCH 129/622] Change: Fluidsynth music driver plays through mixer instead of own audio driver --- src/music/fluidsynth.cpp | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/music/fluidsynth.cpp b/src/music/fluidsynth.cpp index 63be1dd99c..d1088f4bc4 100644 --- a/src/music/fluidsynth.cpp +++ b/src/music/fluidsynth.cpp @@ -16,11 +16,11 @@ #include "fluidsynth.h" #include "midifile.hpp" #include +#include "../mixer.h" static struct { fluid_settings_t* settings; ///< FluidSynth settings handle fluid_synth_t* synth; ///< FluidSynth synthesizer handle - fluid_audio_driver_t* adriver; ///< FluidSynth audio driver handle fluid_player_t* player; ///< FluidSynth MIDI player handle } _midi; ///< Metadata about the midi we're playing. @@ -42,33 +42,27 @@ static const char *default_sf[] = { NULL }; +static void RenderMusicStream(int16 *buffer, size_t samples) +{ + if (!_midi.synth || !_midi.player) return; + fluid_synth_write_s16(_midi.synth, samples, buffer, 0, 2, buffer, 1, 2); +} + const char *MusicDriver_FluidSynth::Start(const char * const *param) { - const char *driver_name = GetDriverParam(param, "driver"); const char *sfont_name = GetDriverParam(param, "soundfont"); int sfont_id; - if (!driver_name) driver_name = "alsa"; - - DEBUG(driver, 1, "Fluidsynth: driver %s, sf %s", driver_name, sfont_name); + DEBUG(driver, 1, "Fluidsynth: sf %s", sfont_name); /* Create the settings. */ _midi.settings = new_fluid_settings(); if (!_midi.settings) return "Could not create midi settings"; - if (fluid_settings_setstr(_midi.settings, "audio.driver", driver_name) != 1) { - return "Could not set audio driver name"; - } - /* Create the synthesizer. */ _midi.synth = new_fluid_synth(_midi.settings); if (!_midi.synth) return "Could not open synth"; - /* Create the audio driver. The synthesizer starts playing as soon - as the driver is created. */ - _midi.adriver = new_fluid_audio_driver(_midi.settings, _midi.synth); - if (!_midi.adriver) return "Could not open audio driver"; - /* Load a SoundFont and reset presets (so that new instruments * get used from the SoundFont) */ if (!sfont_name) { @@ -87,13 +81,17 @@ const char *MusicDriver_FluidSynth::Start(const char * const *param) _midi.player = NULL; + uint32 samplerate = MxSetMusicSource(RenderMusicStream); + fluid_synth_set_sample_rate(_midi.synth, samplerate); + DEBUG(driver, 1, "Fluidsynth: samplerate %.0f", (float)samplerate); + return NULL; } void MusicDriver_FluidSynth::Stop() { + MxSetMusicSource(NULL); this->StopSong(); - delete_fluid_audio_driver(_midi.adriver); delete_fluid_synth(_midi.synth); delete_fluid_settings(_midi.settings); } From b8b6954fb58aac07d05dabe63918f0392c5672d1 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sat, 5 Jan 2019 14:30:59 +0100 Subject: [PATCH 130/622] Fix 6a3d411: Silence truncation warning --- src/tunnelbridge_cmd.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index 297a01d30a..06dc24e84f 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -701,10 +701,11 @@ CommandCost CmdBuildTunnel(TileIndex start_tile, DoCommandFlag flags, uint32 p1, */ assert(coa >= _cleared_object_areas.Begin() && coa < _cleared_object_areas.End()); size_t coa_index = coa - _cleared_object_areas.Begin(); + assert(coa_index < UINT_MAX); // more than 2**32 cleared areas would be a bug in itself coa = NULL; ret = DoCommand(end_tile, end_tileh & start_tileh, 0, flags, CMD_TERRAFORM_LAND); - _cleared_object_areas[coa_index].first_tile = old_first_tile; + _cleared_object_areas[(uint)coa_index].first_tile = old_first_tile; if (ret.Failed()) return_cmd_error(STR_ERROR_UNABLE_TO_EXCAVATE_LAND); cost.AddCost(ret); } From 0e7af55ef704757dfee40c1799359df01b937ebb Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Mon, 24 Sep 2018 22:17:55 +0100 Subject: [PATCH 131/622] Fix: [OSX] Check all search paths for iconv.h --- config.lib | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/config.lib b/config.lib index 894a22c176..2d2f864d76 100644 --- a/config.lib +++ b/config.lib @@ -2927,10 +2927,16 @@ detect_iconv() { # Try to find iconv.h, seems to only thing to detect iconv with if [ "$with_iconv" = "1" ] || [ "$with_iconv" = "" ] || [ "$with_iconv" = "2" ]; then - iconv=`ls -1 /usr/include 2>/dev/null | grep "iconv.h"` - if [ -z "$iconv" ]; then - iconv=`ls -1 /usr/local/include 2>/dev/null | grep "iconv.h"` - fi + # Iterate over search paths + iconv="" + search_paths=`LC_ALL=C $cxx_host $OSX_SYSROOT $CFLAGS -E - -v &1 | \ + $awk '/#include <...> search starts here:/{flag=1;next}/End of search list./{flag=0}flag'` + for path in $search_paths; do + iconv=`ls -1 $path 2>/dev/null | grep "iconv.h"` + if [ -n "$iconv" ]; then + break + fi + done else # Make sure it exists iconv=`ls $with_iconv/include/iconv.h 2>/dev/null` From 175829b8b5a24efaa46e18d2a0d0b1f59d14e72d Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Mon, 24 Sep 2018 22:18:58 +0100 Subject: [PATCH 132/622] Fix #6880: [OSX] Clang version detection --- config.lib | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config.lib b/config.lib index 2d2f864d76..c5b7ee09c4 100644 --- a/config.lib +++ b/config.lib @@ -1331,7 +1331,8 @@ make_compiler_cflags() { fi elif echo "$version_line" | grep -q "clang"; then # Enable some things only for certain clang versions - cc_version="`$1 -v 2>&1 | head -n 1 | sed s@[^0-9]@@g | cut -c 1-2`" + # Need to try really hard to get the version line, because OSX clang likes to hide its true version + cc_version="`$1 -v 2>&1 | grep -i version | head -n 1 | sed s@[^0-9]@@g | cut -c 1-2`" # aliasing rules are not held in openttd code flags="$flags -fno-strict-aliasing" From 4fbfe34e3697b4275212d9e569d05af398552fda Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sun, 25 Nov 2018 11:27:08 +0000 Subject: [PATCH 133/622] Codechange: Always compile with C++11 --- config.lib | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/config.lib b/config.lib index c5b7ee09c4..1af354e163 100644 --- a/config.lib +++ b/config.lib @@ -1317,8 +1317,6 @@ make_compiler_cflags() { if [ $cc_version -ge 110 ]; then # remark #2259: non-pointer conversion from ... to ... may lose significant bits flags="$flags -wd2259" - # Use c++0x mode so static_assert() is available - cxxflags="$cxxflags -std=c++0x" fi if [ "$enable_lto" != "0" ]; then @@ -1380,11 +1378,6 @@ make_compiler_cflags() { flags="$flags -Wno-unused-variable" fi - if [ "$cc_version" -ge "33" ]; then - # clang completed C++11 support in version 3.3 - flags="$flags -std=c++11" - fi - # rdynamic is used to get useful stack traces from crash reports. ldflags="$ldflags -rdynamic" @@ -1443,12 +1436,6 @@ make_compiler_cflags() { flags="$flags -Wnon-virtual-dtor" fi - if [ $cc_version -ge 403 ] && [ $cc_version -lt 600 ]; then - # Use gnu++0x mode so static_assert() is available. - # Don't use c++0x, it breaks mingw (with gcc 4.4.0). - cxxflags="$cxxflags -std=gnu++0x" - fi - if [ $cc_version -eq 405 ]; then # Prevent optimisation supposing enums are in a range specified by the standard # For details, see http://gcc.gnu.org/PR43680 @@ -1470,7 +1457,7 @@ make_compiler_cflags() { if [ $cc_version -ge 600 ]; then # -flifetime-dse=2 (default since GCC 6) doesn't play # well with our custom pool item allocator - cxxflags="$cxxflags -flifetime-dse=1 -std=gnu++14" + cxxflags="$cxxflags -flifetime-dse=1" fi if [ "$enable_lto" != "0" ]; then @@ -1533,6 +1520,8 @@ make_cflags_and_ldflags() { CFLAGS="$CFLAGS -D$os" CFLAGS_BUILD="$CFLAGS_BUILD -D$os" + CXXFLAGS="$CXXFLAGS -std=c++11" + CXXFLAGS_BUILD="$CXXFLAGS_BUILD -std=c++11" if [ "$enable_debug" = "0" ]; then # No debug, add default stuff From 92d3358db551ac9d98064219ec64404a74764ce2 Mon Sep 17 00:00:00 2001 From: glx Date: Mon, 31 Dec 2018 00:00:29 +0100 Subject: [PATCH 134/622] Fix: [Win32] don't mess with std[out|err|in] if we can't allocate a console --- src/os/windows/win32.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp index d2540ac345..bb1a0a4209 100644 --- a/src/os/windows/win32.cpp +++ b/src/os/windows/win32.cpp @@ -300,7 +300,7 @@ void CreateConsole() if (_has_console) return; _has_console = true; - AllocConsole(); + if (!AllocConsole()) return; hand = GetStdHandle(STD_OUTPUT_HANDLE); GetConsoleScreenBufferInfo(hand, &coninfo); From 7b5e7aa14fa250b93c603abd03dab6e4023b2045 Mon Sep 17 00:00:00 2001 From: glx Date: Mon, 31 Dec 2018 01:05:19 +0100 Subject: [PATCH 135/622] Add: [Win32] regression test script --- bin/ai/regression/run.vbs | 154 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 bin/ai/regression/run.vbs diff --git a/bin/ai/regression/run.vbs b/bin/ai/regression/run.vbs new file mode 100644 index 0000000000..88cea5c4eb --- /dev/null +++ b/bin/ai/regression/run.vbs @@ -0,0 +1,154 @@ +Option Explicit + +' $Id$ +' +' This file is part of OpenTTD. +' OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. +' OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +' See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + +Dim FSO +Set FSO = CreateObject("Scripting.FileSystemObject") + +Function GetTestList() + Dim retests, i, tests, dir + Set retests = New RegExp + Set GetTestList = CreateObject("Scripting.Dictionary") + + retests.Pattern = "ai/regression/tst_*" + retests.Global = True + For i = 0 To WScript.Arguments.Count - 1 + Dim test + test = "ai/regression/tst_" & WScript.Arguments.Item(i) + If FSO.FolderExists(test) Then + retests.Pattern = test + Exit For + End If + Next + + For Each dir In FSO.GetFolder("ai/regression/").SubFolders + Dim name + name = "ai/regression/" & dir.Name + If retests.Test(name) Then + GetTestList.Add name, name + End If + Next +End Function + +Function GetParams() + GetParams = "-snull -mnull -vnull:ticks=30000" + If WScript.Arguments.Count = 0 Then Exit Function + If WScript.Arguments.Item(0) <> "-r" Then Exit Function + GetParams = "" +End Function + +Sub FilterFile(filename) + Dim lines, filter, file + + Set file = FSO.OpenTextFile(filename, 1) + If Not file.AtEndOfStream Then + lines = file.ReadAll + End If + file.Close + + Set filter = New RegExp + filter.Global = True + filter.Multiline = True + filter.Pattern = "0x(\(nil\)|0+)(x0)?" + lines = filter.Replace(lines, "0x00000000") + filter.Pattern = "^dbg: \[script\]" + lines = filter.Replace(lines, "") + filter.Pattern = "^ " + lines = filter.Replace(lines, "ERROR: ") + filter.Pattern = "ERROR: \[1\] \[P\] " + lines = filter.Replace(lines, "") + filter.Pattern = "^dbg: .*\r\n" + lines = filter.Replace(lines, "") + + Set file = FSO.OpenTextFile(filename, 2) + file.Write lines + file.Close +End Sub + +Function CompareFiles(filename1, filename2) + Dim file, lines1, lines2 + Set file = FSO.OpenTextFile(filename1, 1) + If Not file.AtEndOfStream Then + lines1 = file.ReadAll + End IF + file.Close + Set file = FSO.OpenTextFile(filename2, 1) + If Not file.AtEndOfStream Then + lines2 = file.ReadAll + End IF + file.Close + CompareFiles = (lines1 = lines2) +End Function + +Function RunTest(test, params, ret) + Dim WshShell, oExec, sav, command + Set WshShell = CreateObject("WScript.Shell") + + ' Make sure that only one info.nut is present for each test run. Otherwise openttd gets confused. + FSO.CopyFile "ai/regression/regression_info.nut", test & "/info.nut" + + sav = test & "/test.sav" + If Not FSO.FileExists(sav) Then + sav = "ai/regression/empty.sav" + End If + + command = ".\openttd -x -c ai/regression/regression.cfg " & params & " -g " & sav & " -d script=2 -d misc=9" + ' 2>&1 must be after >tmp.regression, else stderr is not redirected to the file + WshShell.Run "cmd /c " & command & " >tmp.regression 2>&1", 0, True + + FilterFile "tmp.regression" + + If CompareFiles(test & "/result.txt", "tmp.regression") Then + RunTest = "passed!" + Else + RunTest = "failed!" + ret = 1 + End If + + FSO.DeleteFile test & "/info.nut" +End Function + +On Error Resume Next +WScript.StdOut.WriteLine "" +If Err.Number <> 0 Then + WScript.Echo "This script must be started with cscript." + WScript.Quit 1 +End If +On Error Goto 0 + +If Not FSO.FileExists("ai/regression/run.vbs") Then + WScript.Echo "Make sure you are in the root of OpenTTD before starting this script." + WScript.Quit 1 +End If + +If FSO.FileExists("scripts/game_start.scr") Then + FSO.MoveFile "scripts/game_start.scr", "scripts/game_start.scr.regression" +End If + +Dim params, test, ret +params = GetParams() +ret = 0 + +For Each test in GetTestList() + WScript.StdOut.Write "Running " & test & "... " + WScript.StdOut.WriteLine RunTest(test, params, ret) +Next + +If FSO.FileExists("scripts/game_start.scr.regression") Then + FSO.MoveFile "scripts/game_start.scr.regression", "scripts/game_start.scr" +End If + +If WScript.Arguments.Count > 0 Then + If WScripts.Arguments.Items(0) = "-k" Then + WScript.Quit ret + End If +End If + +FSO.DeleteFile "tmp.regression" + +WScript.Quit ret From c0a655225d29d96d355e94b34512da5bffcf12f9 Mon Sep 17 00:00:00 2001 From: glx Date: Mon, 31 Dec 2018 01:06:28 +0100 Subject: [PATCH 136/622] Add: [Win32] regression project files --- projects/openttd_vs140.sln | 6 +++++ projects/openttd_vs141.sln | 6 +++++ projects/regression.bat | 6 +++++ projects/regression_vs140.vcxproj | 41 +++++++++++++++++++++++++++++++ projects/regression_vs141.vcxproj | 41 +++++++++++++++++++++++++++++++ 5 files changed, 100 insertions(+) create mode 100644 projects/regression.bat create mode 100644 projects/regression_vs140.vcxproj create mode 100644 projects/regression_vs141.vcxproj diff --git a/projects/openttd_vs140.sln b/projects/openttd_vs140.sln index d256cfa495..32f3033fb2 100644 --- a/projects/openttd_vs140.sln +++ b/projects/openttd_vs140.sln @@ -24,6 +24,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs140. EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs140.vcxproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regression", "regression_vs140.vcxproj", "{4712B013-437D-42CE-947F-DEBABA15261F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -84,6 +86,10 @@ Global {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.Build.0 = Debug|Win32 {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.ActiveCfg = Debug|Win32 {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.Build.0 = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|Win32.ActiveCfg = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|x64.ActiveCfg = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Release|Win32.ActiveCfg = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Release|x64.ActiveCfg = Debug|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/projects/openttd_vs141.sln b/projects/openttd_vs141.sln index e314c628a7..86f2685cd9 100644 --- a/projects/openttd_vs141.sln +++ b/projects/openttd_vs141.sln @@ -24,6 +24,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs141. EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs141.vcxproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regression", "regression_vs141.vcxproj", "{4712B013-437D-42CE-947F-DEBABA15261F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -84,6 +86,10 @@ Global {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.Build.0 = Debug|Win32 {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.ActiveCfg = Debug|Win32 {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.Build.0 = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|Win32.ActiveCfg = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|x64.ActiveCfg = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Release|Win32.ActiveCfg = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Release|x64.ActiveCfg = Debug|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/projects/regression.bat b/projects/regression.bat new file mode 100644 index 0000000000..db373c371b --- /dev/null +++ b/projects/regression.bat @@ -0,0 +1,6 @@ +cd ..\bin +editbin /nologo /subsystem:console openttd.exe +cscript /nologo ai\regression\run.vbs +set RESULT=%ERRORLEVEL% +editbin /nologo /subsystem:windows openttd.exe +exit %RESULT% diff --git a/projects/regression_vs140.vcxproj b/projects/regression_vs140.vcxproj new file mode 100644 index 0000000000..b1c9f4930a --- /dev/null +++ b/projects/regression_vs140.vcxproj @@ -0,0 +1,41 @@ + + + + + Debug + Win32 + + + + {4712B013-437D-42CE-947F-DEBABA15261F} + regression + regression + + + + Makefile + v140 + + + + + + + + + + + + call regression.bat + call regression.bat + del ..\bin\tmp.regression + + + + {668328a0-b40e-4cdb-bd72-d0064424414a} + + + + + + diff --git a/projects/regression_vs141.vcxproj b/projects/regression_vs141.vcxproj new file mode 100644 index 0000000000..fda3f3312d --- /dev/null +++ b/projects/regression_vs141.vcxproj @@ -0,0 +1,41 @@ + + + + + Debug + Win32 + + + + {4712B013-437D-42CE-947F-DEBABA15261F} + regression + regression + + + + Makefile + v141 + + + + + + + + + + + + call regression.bat + call regression.bat + del ..\bin\tmp.regression + + + + {668328a0-b40e-4cdb-bd72-d0064424414a} + + + + + + From 96b961c69a7be052b9104994b73801b32b5e1c41 Mon Sep 17 00:00:00 2001 From: glx Date: Mon, 31 Dec 2018 17:25:08 +0100 Subject: [PATCH 137/622] Add: [AzurePipelines] run regression with MSVC --- azure-pipelines-ci.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/azure-pipelines-ci.yml b/azure-pipelines-ci.yml index ea7f355141..e71ab60ea4 100644 --- a/azure-pipelines-ci.yml +++ b/azure-pipelines-ci.yml @@ -34,6 +34,13 @@ jobs: workingDirectory: $(Build.ArtifactStagingDirectory) - script: $(Build.ArtifactStagingDirectory)\windows-dependencies\vcpkg.exe integrate install displayName: 'Install dependencies' + - bash: | + set -ex + cd bin/baseset + curl -L https://binaries.openttd.org/extra/opengfx/0.5.2/opengfx-0.5.2-all.zip > opengfx-0.5.2-all.zip + unzip opengfx-0.5.2-all.zip + rm -f opengfx-0.5.2-all.zip + displayName: 'Install OpenGFX' - task: VSBuild@1 displayName: 'Build' inputs: @@ -41,7 +48,11 @@ jobs: platform: $(BuildPlatform) configuration: Release maximumCpuCount: true - # Running the regression is currently not possibe via MSVC (console is not redirected) + - script: | + call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x86 + cd projects + call regression.bat + displayName: 'Test' - job: linux displayName: 'Linux' From 13056aedbc0a6c22704a525c1395980d887e0ad2 Mon Sep 17 00:00:00 2001 From: Eddi-z <43699911+Eddi-z@users.noreply.github.com> Date: Sat, 5 Jan 2019 22:10:37 +0100 Subject: [PATCH 138/622] Add: Conditional order for max. reliability (patch by Cirdan, #6360) (#7017) --- src/lang/english.txt | 1 + src/order_cmd.cpp | 1 + src/order_gui.cpp | 1 + src/order_type.h | 1 + src/script/api/ai/ai_order.hpp.sq | 1 + src/script/api/game/game_order.hpp.sq | 1 + src/script/api/script_order.cpp | 1 + src/script/api/script_order.hpp | 1 + 8 files changed, 8 insertions(+) diff --git a/src/lang/english.txt b/src/lang/english.txt index 1cfe149219..20608a2787 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -3854,6 +3854,7 @@ STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Vehicle # Conditional order variables, must follow order of OrderConditionVariable enum STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE :Load percentage STR_ORDER_CONDITIONAL_RELIABILITY :Reliability +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maximum reliability STR_ORDER_CONDITIONAL_MAX_SPEED :Maximum speed STR_ORDER_CONDITIONAL_AGE :Age (years) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Requires service diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index 12a5eec31a..ba8a1a060d 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -2017,6 +2017,7 @@ VehicleOrderID ProcessConditionalOrder(const Order *order, const Vehicle *v) switch (order->GetConditionVariable()) { case OCV_LOAD_PERCENTAGE: skip_order = OrderConditionCompare(occ, CalcPercentVehicleFilled(v, NULL), value); break; case OCV_RELIABILITY: skip_order = OrderConditionCompare(occ, ToPercent16(v->reliability), value); break; + case OCV_MAX_RELIABILITY: skip_order = OrderConditionCompare(occ, ToPercent16(v->GetEngine()->reliability), value); break; case OCV_MAX_SPEED: skip_order = OrderConditionCompare(occ, v->GetDisplayMaxSpeed() * 10 / 16, value); break; case OCV_AGE: skip_order = OrderConditionCompare(occ, v->age / DAYS_IN_LEAP_YEAR, value); break; case OCV_REQUIRES_SERVICE: skip_order = OrderConditionCompare(occ, v->NeedsServicing(), value); break; diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 9045fac6b5..81350deb74 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -152,6 +152,7 @@ static const StringID _order_goto_dropdown_aircraft[] = { static const OrderConditionVariable _order_conditional_variable[] = { OCV_LOAD_PERCENTAGE, OCV_RELIABILITY, + OCV_MAX_RELIABILITY, OCV_MAX_SPEED, OCV_AGE, OCV_REMAINING_LIFETIME, diff --git a/src/order_type.h b/src/order_type.h index d3a771ce8b..ade0992961 100644 --- a/src/order_type.h +++ b/src/order_type.h @@ -118,6 +118,7 @@ DECLARE_ENUM_AS_BIT_SET(OrderDepotActionFlags) enum OrderConditionVariable { OCV_LOAD_PERCENTAGE, ///< Skip based on the amount of load OCV_RELIABILITY, ///< Skip based on the reliability + OCV_MAX_RELIABILITY, ///< Skip based on the maximum reliability OCV_MAX_SPEED, ///< Skip based on the maximum speed OCV_AGE, ///< Skip based on the age OCV_REQUIRES_SERVICE, ///< Skip when the vehicle requires service diff --git a/src/script/api/ai/ai_order.hpp.sq b/src/script/api/ai/ai_order.hpp.sq index 71cc8cfe90..ab25e4810d 100644 --- a/src/script/api/ai/ai_order.hpp.sq +++ b/src/script/api/ai/ai_order.hpp.sq @@ -44,6 +44,7 @@ void SQAIOrder_Register(Squirrel *engine) SQAIOrder.DefSQConst(engine, ScriptOrder::OF_INVALID, "OF_INVALID"); SQAIOrder.DefSQConst(engine, ScriptOrder::OC_LOAD_PERCENTAGE, "OC_LOAD_PERCENTAGE"); SQAIOrder.DefSQConst(engine, ScriptOrder::OC_RELIABILITY, "OC_RELIABILITY"); + SQAIOrder.DefSQConst(engine, ScriptOrder::OC_MAX_RELIABILITY, "OC_MAX_RELIABILITY"); SQAIOrder.DefSQConst(engine, ScriptOrder::OC_MAX_SPEED, "OC_MAX_SPEED"); SQAIOrder.DefSQConst(engine, ScriptOrder::OC_AGE, "OC_AGE"); SQAIOrder.DefSQConst(engine, ScriptOrder::OC_REQUIRES_SERVICE, "OC_REQUIRES_SERVICE"); diff --git a/src/script/api/game/game_order.hpp.sq b/src/script/api/game/game_order.hpp.sq index f95dce925a..e2126c603d 100644 --- a/src/script/api/game/game_order.hpp.sq +++ b/src/script/api/game/game_order.hpp.sq @@ -44,6 +44,7 @@ void SQGSOrder_Register(Squirrel *engine) SQGSOrder.DefSQConst(engine, ScriptOrder::OF_INVALID, "OF_INVALID"); SQGSOrder.DefSQConst(engine, ScriptOrder::OC_LOAD_PERCENTAGE, "OC_LOAD_PERCENTAGE"); SQGSOrder.DefSQConst(engine, ScriptOrder::OC_RELIABILITY, "OC_RELIABILITY"); + SQGSOrder.DefSQConst(engine, ScriptOrder::OC_MAX_RELIABILITY, "OC_MAX_RELIABILITY"); SQGSOrder.DefSQConst(engine, ScriptOrder::OC_MAX_SPEED, "OC_MAX_SPEED"); SQGSOrder.DefSQConst(engine, ScriptOrder::OC_AGE, "OC_AGE"); SQGSOrder.DefSQConst(engine, ScriptOrder::OC_REQUIRES_SERVICE, "OC_REQUIRES_SERVICE"); diff --git a/src/script/api/script_order.cpp b/src/script/api/script_order.cpp index 676262dc77..a1390bf8f5 100644 --- a/src/script/api/script_order.cpp +++ b/src/script/api/script_order.cpp @@ -214,6 +214,7 @@ static int ScriptOrderPositionToRealOrderPosition(VehicleID vehicle_id, ScriptOr switch (condition) { case OC_LOAD_PERCENTAGE: case OC_RELIABILITY: + case OC_MAX_RELIABILITY: case OC_MAX_SPEED: case OC_AGE: case OC_REMAINING_LIFETIME: diff --git a/src/script/api/script_order.hpp b/src/script/api/script_order.hpp index 63089a2bd4..a4f945511e 100644 --- a/src/script/api/script_order.hpp +++ b/src/script/api/script_order.hpp @@ -91,6 +91,7 @@ public: /* Note: these values represent part of the in-game OrderConditionVariable enum */ OC_LOAD_PERCENTAGE = ::OCV_LOAD_PERCENTAGE, ///< Skip based on the amount of load, value is in tons. OC_RELIABILITY = ::OCV_RELIABILITY, ///< Skip based on the reliability, value is percent (0..100). + OC_MAX_RELIABILITY = ::OCV_MAX_RELIABILITY, ///< Skip based on the maximum reliability. Value in percent OC_MAX_SPEED = ::OCV_MAX_SPEED, ///< Skip based on the maximum speed, value is in OpenTTD's internal speed unit, see ScriptEngine::GetMaxSpeed. OC_AGE = ::OCV_AGE, ///< Skip based on the age, value is in years. OC_REQUIRES_SERVICE = ::OCV_REQUIRES_SERVICE, ///< Skip when the vehicle requires service, no value. From 15a7f9da9d12a40bb65dda7cef4f4b3ec5342087 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sun, 6 Jan 2019 10:31:56 +0100 Subject: [PATCH 139/622] Fix 13056ae: PR #7017 added new enum value in bad position, move it --- src/lang/english.txt | 2 +- src/order_type.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 20608a2787..cb4e685c46 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -3854,12 +3854,12 @@ STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Vehicle # Conditional order variables, must follow order of OrderConditionVariable enum STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE :Load percentage STR_ORDER_CONDITIONAL_RELIABILITY :Reliability -STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maximum reliability STR_ORDER_CONDITIONAL_MAX_SPEED :Maximum speed STR_ORDER_CONDITIONAL_AGE :Age (years) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Requires service STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Always STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Remaining lifetime (years) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maximum reliability STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}How to compare the vehicle data to the given value STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :is equal to diff --git a/src/order_type.h b/src/order_type.h index ade0992961..ac66bfa38f 100644 --- a/src/order_type.h +++ b/src/order_type.h @@ -118,12 +118,12 @@ DECLARE_ENUM_AS_BIT_SET(OrderDepotActionFlags) enum OrderConditionVariable { OCV_LOAD_PERCENTAGE, ///< Skip based on the amount of load OCV_RELIABILITY, ///< Skip based on the reliability - OCV_MAX_RELIABILITY, ///< Skip based on the maximum reliability OCV_MAX_SPEED, ///< Skip based on the maximum speed OCV_AGE, ///< Skip based on the age OCV_REQUIRES_SERVICE, ///< Skip when the vehicle requires service OCV_UNCONDITIONALLY, ///< Always skip OCV_REMAINING_LIFETIME, ///< Skip based on the remaining lifetime + OCV_MAX_RELIABILITY, ///< Skip based on the maximum reliability OCV_END }; From 19a2f8494389a3c8fba2c17d90fbc5723c7b842c Mon Sep 17 00:00:00 2001 From: J0an Josep Date: Thu, 3 Jan 2019 14:49:37 +0100 Subject: [PATCH 140/622] Fix #7001: Pathfinders should see standard road stations as tiles where to reverse. --- src/pathfinder/follow_track.hpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/pathfinder/follow_track.hpp b/src/pathfinder/follow_track.hpp index 0aec3951ed..9b4377248e 100644 --- a/src/pathfinder/follow_track.hpp +++ b/src/pathfinder/follow_track.hpp @@ -410,8 +410,9 @@ protected: } } - /* single tram bits cause reversing */ - if (IsTram() && GetSingleTramBit(m_old_tile) == ReverseDiagDir(m_exitdir)) { + /* Single tram bits and standard road stops cause reversing. */ + if (IsRoadTT() && ((IsTram() && GetSingleTramBit(m_old_tile) == ReverseDiagDir(m_exitdir)) || + (IsStandardRoadStopTile(m_old_tile) && GetRoadStopDir(m_old_tile) == ReverseDiagDir(m_exitdir)))) { /* reverse */ m_new_tile = m_old_tile; m_new_td_bits = TrackdirToTrackdirBits(ReverseTrackdir(m_old_td)); From edb7adf183d11c452ab5f60ef7176cd34bab3f54 Mon Sep 17 00:00:00 2001 From: Juanjo! Date: Sat, 4 Jun 2016 19:01:36 +0200 Subject: [PATCH 141/622] Codechange: [NPF] Stop looking for an automatic servicing (rail/road) depot when the cost of a path exceeds max. penalty. --- src/pathfinder/npf/npf.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp index bc4d8b3099..71ecf89128 100644 --- a/src/pathfinder/npf/npf.cpp +++ b/src/pathfinder/npf/npf.cpp @@ -959,12 +959,13 @@ static void NPFFollowTrack(AyStar *aystar, OpenListNode *current) * multiple targets that are spread around, we should perform a breadth first * search by specifiying CalcZero as our heuristic. */ -static NPFFoundTargetData NPFRouteInternal(AyStarNode *start1, bool ignore_start_tile1, AyStarNode *start2, bool ignore_start_tile2, NPFFindStationOrTileData *target, AyStar_EndNodeCheck target_proc, AyStar_CalculateH heuristic_proc, AyStarUserData *user, uint reverse_penalty, bool ignore_reserved = false) +static NPFFoundTargetData NPFRouteInternal(AyStarNode *start1, bool ignore_start_tile1, AyStarNode *start2, bool ignore_start_tile2, NPFFindStationOrTileData *target, AyStar_EndNodeCheck target_proc, AyStar_CalculateH heuristic_proc, AyStarUserData *user, uint reverse_penalty, bool ignore_reserved = false, int max_penalty = 0) { int r; NPFFoundTargetData result; /* Initialize procs */ + _npf_aystar.max_path_cost = max_penalty; _npf_aystar.CalculateH = heuristic_proc; _npf_aystar.EndNodeCheck = target_proc; _npf_aystar.FoundEndNode = NPFSaveTargetData; @@ -1052,7 +1053,7 @@ static NPFFoundTargetData NPFRouteToStationOrTile(TileIndex tile, Trackdir track * reverse_penalty applied (NPF_TILE_LENGTH is the equivalent of one full * tile). */ -static NPFFoundTargetData NPFRouteToDepotBreadthFirstTwoWay(TileIndex tile1, Trackdir trackdir1, bool ignore_start_tile1, TileIndex tile2, Trackdir trackdir2, bool ignore_start_tile2, NPFFindStationOrTileData *target, AyStarUserData *user, uint reverse_penalty) +static NPFFoundTargetData NPFRouteToDepotBreadthFirstTwoWay(TileIndex tile1, Trackdir trackdir1, bool ignore_start_tile1, TileIndex tile2, Trackdir trackdir2, bool ignore_start_tile2, NPFFindStationOrTileData *target, AyStarUserData *user, uint reverse_penalty, int max_penalty) { AyStarNode start1; AyStarNode start2; @@ -1064,7 +1065,7 @@ static NPFFoundTargetData NPFRouteToDepotBreadthFirstTwoWay(TileIndex tile1, Tra /* perform a breadth first search. Target is NULL, * since we are just looking for any depot...*/ - return NPFRouteInternal(&start1, ignore_start_tile1, (IsValidTile(tile2) ? &start2 : NULL), ignore_start_tile2, target, NPFFindDepot, NPFCalcZero, user, reverse_penalty); + return NPFRouteInternal(&start1, ignore_start_tile1, (IsValidTile(tile2) ? &start2 : NULL), ignore_start_tile2, target, NPFFindDepot, NPFCalcZero, user, reverse_penalty, false, max_penalty); } void InitializeNPF() @@ -1114,7 +1115,7 @@ FindDepotData NPFRoadVehicleFindNearestDepot(const RoadVehicle *v, int max_penal Trackdir trackdir = v->GetVehicleTrackdir(); AyStarUserData user = { v->owner, TRANSPORT_ROAD, INVALID_RAILTYPES, v->compatible_roadtypes }; - NPFFoundTargetData ftd = NPFRouteToDepotBreadthFirstTwoWay(v->tile, trackdir, false, v->tile, ReverseTrackdir(trackdir), false, NULL, &user, 0); + NPFFoundTargetData ftd = NPFRouteToDepotBreadthFirstTwoWay(v->tile, trackdir, false, v->tile, ReverseTrackdir(trackdir), false, NULL, &user, 0, max_penalty); if (ftd.best_bird_dist != 0) return FindDepotData(); @@ -1204,7 +1205,7 @@ FindDepotData NPFTrainFindNearestDepot(const Train *v, int max_penalty) assert(trackdir != INVALID_TRACKDIR); AyStarUserData user = { v->owner, TRANSPORT_RAIL, v->compatible_railtypes, ROADTYPES_NONE }; - NPFFoundTargetData ftd = NPFRouteToDepotBreadthFirstTwoWay(v->tile, trackdir, false, last->tile, trackdir_rev, false, &fstd, &user, NPF_INFINITE_PENALTY); + NPFFoundTargetData ftd = NPFRouteToDepotBreadthFirstTwoWay(v->tile, trackdir, false, last->tile, trackdir_rev, false, &fstd, &user, NPF_INFINITE_PENALTY, max_penalty); if (ftd.best_bird_dist != 0) return FindDepotData(); /* Found target */ From 1db66a285e9e887d86dad60e73b00c5a3efc0219 Mon Sep 17 00:00:00 2001 From: Juanjo! Date: Sat, 4 Jun 2016 20:45:09 +0200 Subject: [PATCH 142/622] Codechange: [YAPF] Stop looking for an automatic servicing road depot when the cost of a path exceeds max. penalty. --- src/pathfinder/yapf/yapf_road.cpp | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/pathfinder/yapf/yapf_road.cpp b/src/pathfinder/yapf/yapf_road.cpp index edc8d2a3a3..0240eb9366 100644 --- a/src/pathfinder/yapf/yapf_road.cpp +++ b/src/pathfinder/yapf/yapf_road.cpp @@ -27,6 +27,10 @@ public: typedef typename Node::Key Key; ///< key to hash tables protected: + int m_max_cost; + + CYapfCostRoadT() : m_max_cost(0) {}; + /** to access inherited path finder */ Tpf& Yapf() { @@ -97,6 +101,11 @@ protected: } public: + inline void SetMaxCost(int max_cost) + { + m_max_cost = max_cost; + } + /** * Called by YAPF to calculate the cost from the origin to the given node. * Calculates only the cost of given node, adds it to the parent node cost @@ -109,6 +118,8 @@ public: /* start at n.m_key.m_tile / n.m_key.m_td and walk to the end of segment */ TileIndex tile = n.m_key.m_tile; Trackdir trackdir = n.m_key.m_td; + int parent_cost = (n.m_parent != NULL) ? n.m_parent->m_cost : 0; + for (;;) { /* base tile cost depending on distance between edges */ segment_cost += Yapf().OneTileCost(tile, trackdir); @@ -117,6 +128,12 @@ public: /* we have reached the vehicle's destination - segment should end here to avoid target skipping */ if (Yapf().PfDetectDestinationTile(tile, trackdir)) break; + /* Finish if we already exceeded the maximum path cost (i.e. when + * searching for the nearest depot). */ + if (m_max_cost > 0 && (parent_cost + segment_cost) > m_max_cost) { + return false; + } + /* stop if we have just entered the depot */ if (IsRoadDepotTile(tile) && trackdir == DiagDirToDiagTrackdir(ReverseDiagDir(GetRoadDepotDirection(tile)))) { /* next time we will reverse and leave the depot */ @@ -160,7 +177,6 @@ public: n.m_segment_last_td = trackdir; /* save also tile cost */ - int parent_cost = (n.m_parent != NULL) ? n.m_parent->m_cost : 0; n.m_cost = parent_cost + segment_cost; return true; } @@ -441,15 +457,12 @@ public: * @param tile Tile of the vehicle. * @param td Trackdir of the vehicle. * @param max_distance max length (penalty) for paths. - * @todo max_distance not used by YAPF for road vehicles. - * It can be removed or copy the SetMaxCost() strategy - * applied in YAPF for rail. The best depot can be at - * a distance greater than max_distance. */ inline FindDepotData FindNearestDepot(const RoadVehicle *v, TileIndex tile, Trackdir td, int max_distance) { /* Set origin. */ Yapf().SetOrigin(tile, TrackdirToTrackdirBits(td)); + Yapf().SetMaxCost(max_distance); /* Find the best path and return if no depot is found. */ if (!Yapf().FindPath(v)) return FindDepotData(); From c304aa50e9f3fb67a0f661edcf9bc69b426ea7b7 Mon Sep 17 00:00:00 2001 From: J0an Josep Date: Fri, 4 Jan 2019 01:41:22 +0100 Subject: [PATCH 143/622] Fix: [NPF] Don't look two-way for road vehicles when looking for a depot. Road vehicles shouldn't reverse all of a sudden. --- src/pathfinder/npf/npf.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp index 71ecf89128..9535ac0636 100644 --- a/src/pathfinder/npf/npf.cpp +++ b/src/pathfinder/npf/npf.cpp @@ -1115,7 +1115,7 @@ FindDepotData NPFRoadVehicleFindNearestDepot(const RoadVehicle *v, int max_penal Trackdir trackdir = v->GetVehicleTrackdir(); AyStarUserData user = { v->owner, TRANSPORT_ROAD, INVALID_RAILTYPES, v->compatible_roadtypes }; - NPFFoundTargetData ftd = NPFRouteToDepotBreadthFirstTwoWay(v->tile, trackdir, false, v->tile, ReverseTrackdir(trackdir), false, NULL, &user, 0, max_penalty); + NPFFoundTargetData ftd = NPFRouteToDepotBreadthFirstTwoWay(v->tile, trackdir, false, INVALID_TILE, INVALID_TRACKDIR, false, NULL, &user, 0, max_penalty); if (ftd.best_bird_dist != 0) return FindDepotData(); From effb7da5b478fea198b342690d0f5aac8f562ee6 Mon Sep 17 00:00:00 2001 From: J0an Josep Date: Fri, 4 Jan 2019 02:14:40 +0100 Subject: [PATCH 144/622] Doc: Fix spelling in comments. --- src/pathfinder/pathfinder_type.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pathfinder/pathfinder_type.h b/src/pathfinder/pathfinder_type.h index 9f5a42d76d..73031d5c81 100644 --- a/src/pathfinder/pathfinder_type.h +++ b/src/pathfinder/pathfinder_type.h @@ -20,8 +20,8 @@ static const int NPF_TILE_LENGTH = 100; /** * This penalty is the equivalent of "infinite", which means that paths that * get this penalty will be chosen, but only if there is no other route - * without it. Be careful with not applying this penalty to often, or the - * total path cost might overflow.. + * without it. Be careful with not applying this penalty too often, or the + * total path cost might overflow. */ static const int NPF_INFINITE_PENALTY = 1000 * NPF_TILE_LENGTH; @@ -35,8 +35,8 @@ static const int YAPF_TILE_CORNER_LENGTH = 71; /** * This penalty is the equivalent of "infinite", which means that paths that * get this penalty will be chosen, but only if there is no other route - * without it. Be careful with not applying this penalty to often, or the - * total path cost might overflow.. + * without it. Be careful with not applying this penalty too often, or the + * total path cost might overflow. */ static const int YAPF_INFINITE_PENALTY = 1000 * YAPF_TILE_LENGTH; From 5e51d9ee823af27d00f88ef38ea4753e249e296c Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 7 Jan 2019 19:45:46 +0100 Subject: [PATCH 145/622] Update: Translations from eints hebrew: 22 changes by dnd_man spanish (mexican): 1 change by Absay --- src/lang/hebrew.txt | 22 ++++++++++++++++++++++ src/lang/spanish_MX.txt | 1 + 2 files changed, 23 insertions(+) diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 8f15c95ef6..d2e5b89be6 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -686,10 +686,12 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}עירב STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}הצג את חלון בחירת המנגינה # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}תוכנית מוזיקה - '{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}רשימת רצועות STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}תוכנית- '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}מחק +STR_PLAYLIST_CHANGE_SET :{BLACK}ערכת שינוי STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}מחק תוכנית נוכחית STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}(לחץ כאן כדי להוסיף לתוכנית הנוכחית(מותאם אישית1 או מותאם אישית 2 בלבד STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}(לחץ על רצועה כדי להסיר אותה מהתוכנית הנוחכית(מותאם אישית 1 או מותאם אישית 2 בלבד @@ -1351,7 +1353,9 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :צבע פני STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :ירוק STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :ירוק כהה STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :סגול +STR_CONFIG_SETTING_SCROLLMODE :התנהגות גלילת תצוגה: {STRING} STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :הזז את התצוגה עם כפתור עכבר ימני, מיקום העכבר נעול +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :הזזת מפה עם כפתור עכבר ימני, מיקום העכבר נעול STR_CONFIG_SETTING_SCROLLMODE_LMB :הזז מפה עם כפתור עכבר שמאלי STR_CONFIG_SETTING_SMOOTH_SCROLLING :{STRING} :גלילה חלקה של התצוגה המשנית STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :שלוט כיצד התצוגה הראשית נגללת למיקום מסוים כאשר מקליקים על המפה הקטנה אן כאשר נותנים הוראה לגלול לעצם מסוים על גבי המפה. אם מאופשר, חלון התצוגה נגלל באופן חלק, אם מבוטל הוא מוקפץ ישירות אל נקודת המטרה @@ -2706,19 +2710,34 @@ STR_ABOUT_VERSION :{BLACK}{REV} ג STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 The OpenTTD team # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}קצב ריענון STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{WHITE}קצב סימולציה: {STRING} +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}מספר פעימות משחק לשניה +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}מספר פריימים של וידאו המעובדים בשניה STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK} כמה מהר המשחק כרגע רץ, בהשוואה למהירות הצפוייה בקצב סימולציה רגיל. +STR_FRAMERATE_CURRENT :נוכחי{WHITE} STR_FRAMERATE_DATA_POINTS :{WHITE}נתונים מבוססים על {COMMA} מדידות +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} מילישניה +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} פריים/ים +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} פריים/ים +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} פריים/ים +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} ש' ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{BLACK}סה"כ לולאת משחק: STR_FRAMERATE_GL_ROADVEHS :{WHITE} פעימות כלי רכב: STR_FRAMERATE_GL_SHIPS :{WHITE} פעימות כלי שייט: STR_FRAMERATE_GL_LANDSCAPE :{WHITE} נקודות עולם: STR_FRAMERATE_DRAWING :{WHITE}עיבוד גרפיקה: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} תצוגות עולם: +STR_FRAMERATE_VIDEO :{BLACK}פלט וידאו: STR_FRAMERATE_SOUND :{WHITE} ערבוב צליל: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :לולאת משחק +STR_FRAMETIME_CAPTION_GL_ECONOMY :טיפול במטען STR_FRAMETIME_CAPTION_GL_TRAINS :פעימות רכבת +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :פעימות עולם STR_FRAMETIME_CAPTION_GL_LINKGRAPH :השהיית גרף קשרים STR_FRAMETIME_CAPTION_DRAWING :עיבוד גרפיקה STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :עיבוד תצוגת עולם @@ -2748,6 +2767,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_OSKTITLE :{BLACK}הכנס שם לשמירה @@ -3831,6 +3851,7 @@ STR_ORDER_CONDITIONAL_AGE :גיל (שני STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :זקוק לטיפול STR_ORDER_CONDITIONAL_UNCONDITIONALLY :תמיד STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :זמן חיים נותר (שנים) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :אמינות מירבית STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}כיצד יושוו נתוני כלי הרכב לערך נתון מסויים STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :שווה ל @@ -4515,6 +4536,7 @@ STR_BASESOUNDS_DOS_DESCRIPTION :צלילי Tran 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 Deluxe (Original/World Editor) המקורי בגרסת DOS. STR_BASEMUSIC_NONE_DESCRIPTION :אוסף מנגינות ללא מנגינות. diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 113300b766..efdaffeb3a 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -3860,6 +3860,7 @@ STR_ORDER_CONDITIONAL_AGE :Edad (años) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Requiere mantenimiento STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Siempre STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Tiempo de vida restante (años) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Fabilidad máxima STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Comparación de los datos del vehículo respecto al valor dado STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :es igual a From e934f09f02a022c7ef3d54879ce6c07454c098a6 Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 9 Jan 2019 17:37:58 +0000 Subject: [PATCH 146/622] Fix: Don't increase motion counter while train is waiting at non-path signals (Author: frosch123) #5877 (#7018) --- src/train_cmd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 0672ac2093..c8387d0a95 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -3187,12 +3187,12 @@ bool TrainController(Train *v, Vehicle *nomove, bool reverse) if (!HasSignalOnTrackdir(gp.new_tile, ReverseTrackdir(i))) { v->cur_speed = 0; v->subspeed = 0; - v->progress = 255 - 100; + v->progress = 255; // make sure that every bit of acceleration will hit the signal again, so speed stays 0. if (!_settings_game.pf.reverse_at_signals || ++v->wait_counter < _settings_game.pf.wait_oneway_signal * 20) return false; } else if (HasSignalOnTrackdir(gp.new_tile, i)) { v->cur_speed = 0; v->subspeed = 0; - v->progress = 255 - 10; + v->progress = 255; // make sure that every bit of acceleration will hit the signal again, so speed stays 0. if (!_settings_game.pf.reverse_at_signals || ++v->wait_counter < _settings_game.pf.wait_twoway_signal * 73) { DiagDirection exitdir = TrackdirToExitdir(i); TileIndex o_tile = TileAddByDiagDir(gp.new_tile, exitdir); From ad5a9daed52c7793a465b58b5407a5e58688e842 Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 9 Jan 2019 17:48:08 +0000 Subject: [PATCH 147/622] Change: Desert tiles are now half-desert if a neighboured tile is non-desert or sea/coast. (patch by frosch123) #4754 (#7015) --- src/clear_cmd.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/clear_cmd.cpp b/src/clear_cmd.cpp index f9eb88df54..c4aeb3a52e 100644 --- a/src/clear_cmd.cpp +++ b/src/clear_cmd.cpp @@ -208,16 +208,19 @@ static void TileLoopClearAlps(TileIndex tile) } /** - * Tests if at least one surrounding tile is desert + * Tests if at least one surrounding tile is non-desert * @param tile tile to check - * @return does this tile have at least one desert tile around? + * @return does this tile have at least one non-desert tile around? */ -static inline bool NeighbourIsDesert(TileIndex tile) +static inline bool NeighbourIsNormal(TileIndex tile) { - return GetTropicZone(tile + TileDiffXY( 1, 0)) == TROPICZONE_DESERT || - GetTropicZone(tile + TileDiffXY( -1, 0)) == TROPICZONE_DESERT || - GetTropicZone(tile + TileDiffXY( 0, 1)) == TROPICZONE_DESERT || - GetTropicZone(tile + TileDiffXY( 0, -1)) == TROPICZONE_DESERT; + for (DiagDirection dir = DIAGDIR_BEGIN; dir < DIAGDIR_END; dir++) { + TileIndex t = tile + TileOffsByDiagDir(dir); + if (!IsValidTile(t)) continue; + if (GetTropicZone(t) != TROPICZONE_DESERT) return true; + if (HasTileWaterClass(t) && GetWaterClass(t) == WATER_CLASS_SEA) return true; + } + return false; } static void TileLoopClearDesert(TileIndex tile) @@ -229,9 +232,7 @@ static void TileLoopClearDesert(TileIndex tile) /* Expected desert level - 0 if it shouldn't be desert */ uint expected = 0; if (GetTropicZone(tile) == TROPICZONE_DESERT) { - expected = 3; - } else if (NeighbourIsDesert(tile)) { - expected = 1; + expected = NeighbourIsNormal(tile) ? 1 : 3; } if (current == expected) return; From a0293d313ddad5d649c966f87585417729018836 Mon Sep 17 00:00:00 2001 From: Gabda87 Date: Thu, 10 Jan 2019 10:45:38 +0100 Subject: [PATCH 148/622] Add #4115: default company colour setting (#6998) Works only in single player. --- src/lang/english.txt | 4 ++++ src/openttd.cpp | 8 ++++++++ src/settings_gui.cpp | 1 + src/settings_type.h | 1 + src/table/settings.ini | 12 ++++++++++++ 5 files changed, 26 insertions(+) diff --git a/src/lang/english.txt b/src/lang/english.txt index cb4e685c46..c0231557ce 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -189,6 +189,7 @@ STR_COLOUR_ORANGE :Orange STR_COLOUR_BROWN :Brown STR_COLOUR_GREY :Grey STR_COLOUR_WHITE :White +STR_COLOUR_RANDOM :Random # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -1258,6 +1259,9 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Changing STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Infrastructure maintenance: {STRING2} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :When enabled, infrastructure causes maintenance costs. The cost grows over-proportional with the network size, thus affecting bigger companies more than smaller ones +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Starting company colour: {STRING2} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Choose starting colour for the company + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Airports never expire: {STRING2} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Enabling this setting makes each airport type stay available forever after its introduction diff --git a/src/openttd.cpp b/src/openttd.cpp index 703f04f010..3d25f5d3d1 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -942,6 +942,14 @@ static void MakeNewGameDone() Company *c = Company::Get(COMPANY_FIRST); c->settings = _settings_client.company; + /* Overwrite color from settings if needed + * COLOUR_END corresponds to Random colour */ + if (_settings_client.gui.starting_colour != COLOUR_END) { + c->colour = _settings_client.gui.starting_colour; + ResetCompanyLivery(c); + _company_colours[c->index] = (Colours)c->colour; + } + IConsoleCmdExec("exec scripts/game_start.scr 0"); SetLocalCompany(COMPANY_FIRST); diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 5ebac02807..134b1f58ff 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -1584,6 +1584,7 @@ static SettingsContainer &GetSettingsTree() company->Add(new SettingEntry("gui.drag_signals_fixed_distance")); company->Add(new SettingEntry("gui.new_nonstop")); company->Add(new SettingEntry("gui.stop_location")); + company->Add(new SettingEntry("gui.starting_colour")); company->Add(new SettingEntry("company.engine_renew")); company->Add(new SettingEntry("company.engine_renew_months")); company->Add(new SettingEntry("company.engine_renew_money")); diff --git a/src/settings_type.h b/src/settings_type.h index 690f6d8036..8f03b1dc15 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -146,6 +146,7 @@ struct GUISettings { byte missing_strings_threshold; ///< the number of missing strings before showing the warning uint8 graph_line_thickness; ///< the thickness of the lines in the various graph guis uint8 osk_activation; ///< Mouse gesture to trigger the OSK. + byte starting_colour; ///< default color scheme for the company to start a new game with uint16 console_backlog_timeout; ///< the minimum amount of time items should be in the console backlog before they will be removed in ~3 seconds granularity. uint16 console_backlog_length; ///< the minimum amount of items in the console backlog before items will be removed. diff --git a/src/table/settings.ini b/src/table/settings.ini index c061c394f0..bb6159693a 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -2755,6 +2755,18 @@ strhelp = STR_CONFIG_SETTING_LIVERIES_HELPTEXT strval = STR_CONFIG_SETTING_LIVERIES_NONE proc = InvalidateCompanyLiveryWindow +[SDTC_VAR] +var = gui.starting_colour +type = SLE_UINT8 +flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC +guiflags = SGF_MULTISTRING +def = COLOUR_END +min = 0 +max = COLOUR_END +str = STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR +strhelp = STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT +strval = STR_COLOUR_DARK_BLUE + [SDTC_BOOL] var = gui.prefer_teamchat flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC From e34a6c58eaeaf5f04db6c92c93c88ea269d720b2 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 10 Jan 2019 19:45:44 +0100 Subject: [PATCH 149/622] Update: Translations from eints italian: 1 change by lorenzodv french: 29 changes by glx --- src/lang/afrikaans.txt | 1 + src/lang/arabic_egypt.txt | 1 + src/lang/basque.txt | 1 + src/lang/belarusian.txt | 1 + src/lang/brazilian_portuguese.txt | 1 + src/lang/bulgarian.txt | 1 + src/lang/catalan.txt | 1 + src/lang/croatian.txt | 1 + src/lang/czech.txt | 1 + src/lang/danish.txt | 1 + src/lang/dutch.txt | 1 + src/lang/english_AU.txt | 1 + src/lang/english_US.txt | 1 + src/lang/esperanto.txt | 1 + src/lang/estonian.txt | 1 + src/lang/faroese.txt | 1 + src/lang/finnish.txt | 1 + src/lang/french.txt | 51 ++++++++++++++++++------------ src/lang/gaelic.txt | 1 + src/lang/galician.txt | 1 + src/lang/german.txt | 1 + src/lang/greek.txt | 1 + src/lang/hebrew.txt | 1 + src/lang/hungarian.txt | 1 + src/lang/icelandic.txt | 1 + src/lang/indonesian.txt | 1 + src/lang/irish.txt | 1 + src/lang/italian.txt | 2 ++ src/lang/japanese.txt | 1 + src/lang/korean.txt | 1 + src/lang/latin.txt | 1 + src/lang/latvian.txt | 1 + src/lang/lithuanian.txt | 1 + src/lang/luxembourgish.txt | 1 + src/lang/malay.txt | 1 + src/lang/norwegian_bokmal.txt | 1 + src/lang/norwegian_nynorsk.txt | 1 + src/lang/polish.txt | 1 + src/lang/portuguese.txt | 1 + src/lang/romanian.txt | 1 + src/lang/russian.txt | 1 + src/lang/serbian.txt | 1 + src/lang/simplified_chinese.txt | 1 + src/lang/slovak.txt | 1 + src/lang/slovenian.txt | 1 + src/lang/spanish.txt | 1 + src/lang/spanish_MX.txt | 1 + src/lang/swedish.txt | 1 + src/lang/tamil.txt | 1 + src/lang/thai.txt | 1 + src/lang/traditional_chinese.txt | 1 + src/lang/turkish.txt | 1 + src/lang/ukrainian.txt | 1 + src/lang/unfinished/chuvash.txt | 1 + src/lang/unfinished/frisian.txt | 1 + src/lang/unfinished/ido.txt | 1 + src/lang/unfinished/macedonian.txt | 1 + src/lang/unfinished/maltese.txt | 1 + src/lang/unfinished/marathi.txt | 1 + src/lang/unfinished/persian.txt | 1 + src/lang/unfinished/urdu.txt | 1 + src/lang/vietnamese.txt | 1 + src/lang/welsh.txt | 1 + 63 files changed, 93 insertions(+), 21 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index d1e96d41d7..eca60e70a4 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1252,6 +1252,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Verander STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Infrastruktuur onderhoud: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :As dit geaktiveer is sal dit veroorsaak dat infrastruktuur onderhoudskoste verhoog. Die koste groei oor-proporsioneel met die netwerk grootte, wat groter maatskappye meer as kleiner maatskappye benadeel + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Lughawes verval nooit nie: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Wanner hierdie stelling geaktiveer is, maak dit dat alle lughawens ewig beskikbaar bly, na hul bekendstelling datum diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 8c4c06b55b..7dfda5029b 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1119,6 +1119,7 @@ STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :السماح ب STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}تغير هذا الخيار غير متاح عندما يكون هناك عربات STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :صيانة البنية التحتية: {STRING} + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :المطارات لا تنتهي صلاحيتها {STRING} STR_CONFIG_SETTING_WARN_LOST_VEHICLE :حذر إذا فقدت المركبة {STRING} diff --git a/src/lang/basque.txt b/src/lang/basque.txt index d5511050b1..ee74b92372 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1225,6 +1225,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Hau ezin STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Azpiegituren mantentze-lana: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Gaitua dagoenean, azpiegiturek mantentze kostuak eragiten dituzte. Kostuak garraio sarearekin proportzionalki hazten dira, hau da, kostu handiagoak izango dituzten konpainia handiagoek + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aireportuei inoiz ez zaie epea amaitzen: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Gaitua badago, aireportu mota ezberdinak betirako egongo dira aukeran diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 819bce4a2b..ada14f8931 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -1568,6 +1568,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Зьме STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Утрыманьне iнфраструктуры: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Калі ўключана, інфраструктура патрабуе выдаткаў на ўтрыманьне. Кошт расьце прапарцыянальна памерам сеткі, таму гэта больш датычыць вялікіх кампаніяў, ніж малых. + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Малыя аэрапорты ніколі не састарэюць: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Уключэньне гэтай наладкі робіць усе віды аэрапортаў даступнымі назаўжды. diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 5c943e651e..0126a33428 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1259,6 +1259,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Impossí STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Manutenção de Infraestrutura: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Quando ativado, infraestrutura gera custos de manutenção. O custo aumenta proporcionalmente à malha de transportes, afetando companhias maiores mais do que as menores + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aeroportos nunca saem de linha: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Ativando essa config. mantém todos os tipos de aeroportos disponíveis à construção após sua introdução diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index d085371987..9c24ed8a74 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1246,6 +1246,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Пром STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Поддръжка на инфраструктурата: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Когато е разрешено, съществуват разходи за поддръжка на инфраструктурата. Разходите се увеличават пропорционално на размера на пътната мрежа, влияейки повече на големите компании отколкото на по-малките + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Летишата не губят валидност: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Разрешавайки тази настройка, всеки вид летище остава завинаги достъпно след неговото представяне diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index cc641141af..59e0e3b55c 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1257,6 +1257,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}No es po STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Manteniment de la infraestructura: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Quan està activat, la infraestructura provoca costos de manteniment. El cost creix proporcionalment al tamany de la xarxa de transport, afectant en conseqüència més a les companyies grosses que a les petites + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Els aeroports mai caduquen: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Activant aquesta opció fa que cada tipus d'aeroport estigui disponible per sempre després de la seva introducció diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index fc7a6a53bb..398891439f 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1354,6 +1354,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Mijenjan STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Održavanje infrastrukture: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Kada je omogućeno, infrastruktura uzrokuje troškove održavanja. Cijena raste više nego proporcionalno s veličinom mreže, čime utječe veće tvrtke više od manjih + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Zračne luke nikad ne ističu: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Uključivanjem ove postavke čini svaku vrstu zračne luke dostupnom zauvijek nakon uvođenja diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 5512bc616d..530738b6f4 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1343,6 +1343,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Toto nas STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Udržování infrastruktury: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Pokud je zapnuto, je třeba platit za údržbu infrastruktury. Náklady vzrůstají společně s velikostí dopravní sítě, takže velké společnosti platí více než malé. + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Žádný druh letiště nezastará: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Povolení této možnosti způsobí, že všechny druhy letišť zůstanou po uvedení dostupné napořád. (nezastarají). diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 813a496d15..d278cd277f 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1253,6 +1253,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Denne in STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Infrastruktur vedligeholdelse: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Når aktiveret, infrastruktur forårsager vedligeholdelsesomkostninger. Omkostningerne vokser over-proportional med nettets størrelse, hvilket påvirker større virksomheder mere end de små + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Lufthavnenes levealder udløber aldrig: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Aktiveres denne indstilling gøres at hver lufthavnstype forbliver tilgængelig for evigt efter dens indførelse diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 4598851f64..0bde237c7e 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1257,6 +1257,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Deze ins STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Onderhoud infrastructuur: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Wanneer dit is ingeschakeld, veroorzaakt de infrastructuur onderhoudskosten. De kosten groeien boven-proportioneel met de grootte van het netwerk, waardoor grotere bedrijven hierdoor meer worden beïnvloed dan kleinere + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Vliegvelden verlopen niet: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Het inschakelen van deze instelling zorgt ervoor dat elke luchthaven soort altijd beschikbaar blijft na de introductie diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 8e001d956a..bf71047a94 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1230,6 +1230,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Changing STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Infrastructure maintenance: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :When enabled, infrastructure causes maintenance costs. The cost grows in proportion to the network size, thus affecting larger companies more than smaller ones + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Airports never expire: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Enabling this setting makes each airport type stay available forever after its introduction diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index b93ecb6836..98e007bc1b 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1255,6 +1255,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Changing STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Infrastructure maintenance: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :When enabled, infrastructure causes maintenance costs. The cost grows over-proportional with the network size, thus affecting bigger companies more than smaller ones + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Airports never expire: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Enabling this setting makes each airport type stay available forever after its introduction diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 49149b638f..bff065d1fa 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1156,6 +1156,7 @@ STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Permesu trairaj STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Permesu trairajn strathaltejojn sur stratoj posedataj de konkurantoj: {STRING} STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Ne eblas ŝanĝi ĉi tiujn agordon dum veturiloj ĉeestas + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Flughavenoj neniam antikviĝas: {STRING} STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Avertu se veturilo estas perdita: {STRING} diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 771994978b..a8f130e67d 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1308,6 +1308,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Sõiduki STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Taristu hooldamine: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Taristuga kaasnevad halduskulud. Kulud kasvavad taristu hulga suhtes ebaproportsionaalselt, ning mõjutavad pigem suurettevõtteid + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aegumatud lennuväljad: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Selle seade sisse lülitamine jätab kõik lennujaamade tüübid avatuks lõpmata ajaks peale nende avanemist diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index ae2729c216..3465a72111 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1203,6 +1203,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Ikki mø STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Innakervis viðlílkahald: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Um gilda, innankervi elvir til viðlíkahalds kostnað. Kostnaðurin vaksur yvir-lutfalsliga við støddina á kervinum, og ávirkar harvið størri fyritøkur meira enn smærri fyritøkur + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Floghavnir ganga ongantíð út: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Gildan av hesi áseting ger at hvørt floghavna slag altíð er tøkt eftir tað er komi í nýtslu diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index e7f5d9d651..0450afa0b3 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1256,6 +1256,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Tätä a STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Infrastruktuurin huoltokustannukset: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Mikäli käytössä, infrastruktuurista aiheutuu huoltokuluja. Kulut kasvavat suhteettomasti verkon kokoon nähden, täten ne vaikuttavat suurempiin yhtiöihin enemmän kuin pieniin + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Lentokentät eivät vanhene: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Mikäli käytössä, kaikki lentokenttätyypit ovat saatavilla ikuisesti niiden julkistamisen jälkeen diff --git a/src/lang/french.txt b/src/lang/french.txt index b7729e5067..cc5b331ea0 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -190,6 +190,7 @@ STR_COLOUR_ORANGE :Orange STR_COLOUR_BROWN :Marron STR_COLOUR_GREY :Gris STR_COLOUR_WHITE :Blanc +STR_COLOUR_RANDOM :Aléatoire # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -816,6 +817,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Président) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} a sponsorisé la construction de la nouvelle ville {TOWN}{NBSP}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Une nouvelle ville nommée {TOWN} a été construite{NBSP}! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Un{G 0 "" "" e} nouv{G 0 eau el elle} {STRING} en construction près de {TOWN}{NBSP}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Un{G 0 "" "" e} nouv{G 0 eau el elle} {STRING} s'implante près de {TOWN}{NBSP}! @@ -1258,6 +1260,9 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Il n'est STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Entretien de l'infrastructure{NBSP}: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Si activé, les infrastructures entraineront des coût d'entretien. Le coût augmente proportionnellement à la taille du réseau, affectant les grosses compagnies plus que les petites +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Couleur de la compagnie au démarrage{NBSP}: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Choisir la couleur de démarrage pour la compagnie + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Les aéroports n'expirent jamais{NBSP}: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Activer ce paramètre fait que chaque type d'aéroports reste toujours disponible après son introduction @@ -2703,36 +2708,36 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Fréquence d'images STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) -STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Fréquence de simulation{NBSP}: {STRING} +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Fréquence de simulation{NBSP}: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Nombre de ticks simulés par seconde. -STR_FRAMERATE_RATE_BLITTER :{WHITE}Fréquence des graphismes{NBSP}: {STRING} +STR_FRAMERATE_RATE_BLITTER :{BLACK}Fréquence des graphismes{NBSP}: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Nombre d'images rendues par seconde. -STR_FRAMERATE_SPEED_FACTOR :{WHITE}Facteur de vitesse actuel{NBSP}: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Facteur de vitesse actuel{NBSP}: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}À quelle vitesse le jeu tourne actuellement, comparé à la vitesse attendue pour la simulation normale. STR_FRAMERATE_CURRENT :{WHITE}Actuel STR_FRAMERATE_AVERAGE :{WHITE}Moyen -STR_FRAMERATE_DATA_POINTS :{WHITE}Données basées sur {COMMA} mesures -STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms -STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms -STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms -STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE} images/s -STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} images/s -STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} images/s +STR_FRAMERATE_DATA_POINTS :{BLACK}Données basées sur {COMMA} mesures +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} images/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} images/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} images/s STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! -STR_FRAMERATE_GAMELOOP :{WHITE}Total de la boucle de jeu{NBSP}: -STR_FRAMERATE_GL_ECONOMY :{WHITE} Traitement des marchandises{NBSP}: -STR_FRAMERATE_GL_TRAINS :{WHITE} Ticks des trains{NBSP}: +STR_FRAMERATE_GAMELOOP :{BLACK}Total de la boucle de jeu{NBSP}: +STR_FRAMERATE_GL_ECONOMY :{BLACK} Traitement des marchandises{NBSP}: +STR_FRAMERATE_GL_TRAINS :{BLACK} Ticks des trains{NBSP}: STR_FRAMERATE_GL_ROADVEHS :{WHITE} Ticks des véhicules routiers{NBSP}: -STR_FRAMERATE_GL_SHIPS :{WHITE} Ticks des navires{NBSP}: -STR_FRAMERATE_GL_AIRCRAFT :{WHITE} Ticks des aéroplanes{NBSP}: -STR_FRAMERATE_GL_LANDSCAPE :{WHITE} Ticks du monde{NBSP}: -STR_FRAMERATE_GL_LINKGRAPH :{WHITE} Délai du flux des marchandises{NBSP}: -STR_FRAMERATE_DRAWING :{WHITE}Rendu des graphismes{NBSP}: -STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Vues{NBSP}: -STR_FRAMERATE_VIDEO :{WHITE}Sortie vidéo{NBSP}: -STR_FRAMERATE_SOUND :{WHITE}Mixage sonore{NBSP}: +STR_FRAMERATE_GL_SHIPS :{BLACK} Ticks des navires{NBSP}: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Ticks des aéroplanes{NBSP}: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Ticks du monde{NBSP}: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Délai du flux des marchandises{NBSP}: +STR_FRAMERATE_DRAWING :{BLACK}Rendu des graphismes{NBSP}: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Vues{NBSP}: +STR_FRAMERATE_VIDEO :{BLACK}Sortie vidéo{NBSP}: +STR_FRAMERATE_SOUND :{BLACK}Mixage sonore{NBSP}: ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Boucle de jeu @@ -2772,6 +2777,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Détails STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Pas d'informations disponibles STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}{NBSP}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF{NBSP}: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtre{NBSP}: STR_SAVELOAD_OSKTITLE :{BLACK}Entrer un nom pour la sauvegarde @@ -2970,6 +2976,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Lecture après STR_NEWGRF_ERROR_GRM_FAILED :Indisponibilité de la ressource demandée (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} a été désactivé par {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Format de sprite invalide ou inconnu (sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Trop d'éléments dans la liste des valeurs de la propriété (sprite {3:NUM}, propriété {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Fonction de rappel de production d'industrie invalide (sprite {3:NUM}, "{1:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Attention{NBSP}! @@ -3856,6 +3864,7 @@ STR_ORDER_CONDITIONAL_AGE :Âge du véhicu STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Entretien nécessaire STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Toujours STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Durée de vie restante (années) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Fiabilité maximum STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Comment comparer les données du véhicule à la valeur donnée STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :est égal à diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 139d775cd3..2cbd7023b1 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -1453,6 +1453,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Cha ghab STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Cumail suas a' bhun-structair: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Nuair a bhios seo air, bidh cumail suas a' bhun-structair a' cosg airgid. Fàsaidh na cosgaisean nas luaithe na meud an lìonraidh, mar sin bheir an roghainn seo barrachd buaidh air companaidhean mòra + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Chan fhalbh an ùine air puirt-adhair: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Nuair a chuireas tu an roghainn seo an comas, cumaidh gach port-adhair a' dol gu bràth an dèidh a thogail diff --git a/src/lang/galician.txt b/src/lang/galician.txt index a40620073f..c0896f1728 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1252,6 +1252,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Non é p STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Mantemento de infraestrutura: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Cando se activa, a infraestrutura provoca custos de mantemento. O custo aumenta sobre-proporcionadamente co tamaño da rede, e afecta máis ás compañías máis grandes cás pequenas + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Os aeroportos nunca caducan: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Activar esta opción fai que cada tipo de aeroporto siga estando dispoñíbel para sempre dende a súa aparición diff --git a/src/lang/german.txt b/src/lang/german.txt index cd117258b4..c7a63de4e4 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1252,6 +1252,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Diese Ei STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Instandhaltung der Infrastruktur: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Unterhaltskosten für Infrastruktur einschalten. Die Unterhaltskosten wachsen mit zunehmender Netzwerkgröße überproportional an, so dass sie größere Firmen stärker belasten als kleinere + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Flughäfen veralten nie: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Wird diese Option aktiviert, können Flughäfen, die einmal eingeführt wurden, das ganze Spiel über gebaut werden und veralten nie diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 5b5cd91621..8251cfa6e7 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1362,6 +1362,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Δεν STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Συντήρηση υποδομής: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Όταν είναι ενεργοποιημένη, οι υποδομές προκαλούν έξοδα συντήρησης. Το κόστος μεγαλώνει δυσανάλογα με το μέγεθος του δικτύου, επηρεάζοντας έτσι τις μεγάλες εταιρείες περισσότερο από τις μικρότερες + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Τα αεροδρόμια δεν λήγουν ποτέ: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Ενεργοποιώντας αυτήν τη ρύθμιση κάθε τύπος αεροδρομίου παραμένει διαθέσιμο για πάντα μετά την παρουσίασή του diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index d2e5b89be6..8ef90cdc7c 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1270,6 +1270,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}שינו STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :תחזוקת תשתיות: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :כאשר מאופשר, תשתיות גורמות לעלויות תחזוקה. העלות גדלה באופן שהוא מעבר ליחסי לעומת גודל הרשת, וכך משפיע יותר על חברות גדולות מאשר על חברות קטנות + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :בטל התיישנות נמלי תעופה: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :אפשור הגדרה זו גורם לכל סוג נמל תעופה להישאר זמין לעד אחרי השקתו diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index f9f2e19a2b..8125f2a649 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1315,6 +1315,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}A beáll STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Az infrastruktúra fenntartási költségének engedélyezése: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Bekapcsolva az infrastruktúrának fenntartási költsége van. A költség hatványozottan nő a hálózatnagysággal, nagyobb hatással a nagyobb vállalatokra mint a kisebbekre + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Repülőterek nem avulnak el: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Bekapcsolva minden repülőtértípus örökké elérhető marad bevezetése után diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 31c6ff796b..d847ba02e4 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1203,6 +1203,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Ekki er STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Viðhald á innviðum: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Ef þessi stilling er virk kostar að reka innviði fyrirtækisins. Kostnaður eykst í auknu hlutfalli við stærð fyrirtækisins, því eru áhrifin meiri á stór fyrirtæki en lítil + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Alltaf hægt að byggja allar gerðir flugvalla: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Ef þessi stilling er virk þá er hver tegund flugvallar alltaf aðgengileg eftir að hann verður fyrst aðgengilegur diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index f0d8efc7a8..30447a88a8 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -1256,6 +1256,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Tidak di STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Pemeliharaan Infrastruktur: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Jika dinyalakan, infrastruktur membutuhkan biaya pemeliharaan. Biaya berkembang secara proporsional sesuai dengan ukuran jaringan, lebih berdampak pada perusahaan besar dari pada perusahaan kecil + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Bandara tidak kedaluarsa: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Menyalakan setelan ini membuat semua jenis bandara tetap ada selamanya sejak pendesainanya diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 0ea266d541..86dbcbcb62 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1251,6 +1251,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Ní féi STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Cothabháil bonneagair: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Má tá sé cumasaithe, bíonn costais chothabhála ar bhonneagar. Méadaíonn an costas níos tapúla ná méid an líonra, rad a fhágann go mbíonn tionchar níos mó aige ar chuideachtaí móra ná ar chuideachtaí beaga + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Ní imíonn aerfoirt as dáta riamh: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Má dhéantar an socrú seo a chumasú beidh gach cineál aerfoirt ar fáil go deo tar éis é a thabhairt isteach diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 53a3d342d0..c16354f1ce 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1282,6 +1282,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Non è p STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Manutenzione infrastrutture: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Se abilitata, le infrastrutture causano dei costi di manutenzione. I costi crescono in modo più che proporzionale alla dimensione della rete, influenzando maggiormente le compagnie più grandi rispetto alle piccole + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Non rendere mai obsoleti i tipi di aeroporto: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Abilitando questa impostazione, tutti i tipi di aeroporto rimangono disponibili indefinitamente dopo essere stati introdotti @@ -3889,6 +3890,7 @@ STR_ORDER_CONDITIONAL_AGE :Età (anni) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Manutenzione richiesta STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Sempre STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Vita rimanente (anni) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Affidabilità massima STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Modalità di confronto del dato del veicolo con il valore inserito STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :è uguale a diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index c1b2fb1e75..880866c945 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -1251,6 +1251,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}この STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :インフラ補修: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :有効にすると、インフラ設備にも維持費が発生するようになります。維持費はネットワークのサイズに非線形で比例する為、小さい会社よりも大きい会社の方が影響が大きくなります + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :空港の旧式化撤廃: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :有効にすると、いずれの種類の空港であっても、その開発後であれば永久に建設が可能になります diff --git a/src/lang/korean.txt b/src/lang/korean.txt index ea66904cd8..8c5736136c 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1259,6 +1259,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}이미 STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :기반시설 유지비: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :이 설정을 켜면, 기반시설 유지비가 발생합니다. 유지비는 교통망의 규모에 비례하며 대형 회사는 소형 회사보다 많은 유지비가 들어갑니다. + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :옛날 공항을 사라지지 않고 계속 만들 수 있게 함: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :이 설정을 켜면, 소형 공항을 포함한 모든 공항 종류를 도입 이후에 계속 사용할 수 있게 됩니다. diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 9fa9f87293..d5a4a744dd 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -1443,6 +1443,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Non lice STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Tuitio infrastructurae: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Electa, infrastructura prodit expensa tuitionis. Expensa crescunt celerius quam pro portione magnitudini retis, ergo societates magnae affectantur magis quam parvae + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aeroportus numquam recedunt: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Electa, omnes aeroportuum typi permanent post introductionem diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 4f723b5a88..79788a54c1 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1236,6 +1236,7 @@ STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Ļauj būvēt c STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Šo iestatījumu nav iespējams mainīt, kad tur ir transportlīdzekļi STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Infrastruktūras uzturēšana: {STRING} + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Lidostas darbosies mūžīgi: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Ieslēdzot šo iestatījumu, katrs lidostas veids pēc tā ieviešanas vienmēr ir pieejams diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 163c90c70d..631613d82d 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1456,6 +1456,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Neįmano STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Infrastruktūros priežiūra reikalauja išlaidų: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Infrastruktūros (kelių, geležinkelių, stotelių, angarą ir kitų objektų) priežiūra kainuoja. Kaštai auga proporcingai kompanijos dydžiui, taigi didesnėms kompanijoms infrastruktūros priežiūra kainuos daugiau, nei mažesnėms + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Oro uostai niekada nepasensta: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Kartą atsiradę, oro uostų tipai niekada nebepasens ir galimybė juos statyti niekuomet nebus pašalinta diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 60ffaf64a3..044d1b82f0 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1251,6 +1251,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Déi Ast STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Infrastrukturënnerhalt {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Wann ugeschalt, kaschten Infrastrukturen Ennerhaltskäschten. D'Käschten wuessen iwwerproportional zu der Netzwierkgréisst, an treffen sou grouss Firmen méi wéi klenger + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Fluchhäfen lafen nie of: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Wann ugeschalt, bleift all Fluchhafentyp säit senger Aféierung bestoen diff --git a/src/lang/malay.txt b/src/lang/malay.txt index e5ba9a2dc0..956b5c38f0 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1208,6 +1208,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Menukar STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Penyelenggaraan Infrastruktur: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Apabila diupayakan,infrastuktur menyebabkan kos penyelenggaraan. Kadar kos tumbuh berdasarkan saiz rangkaian, sekaligus menjejaskan syarikat yang lebih besar daripada yang kecil + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Lapangan terbang tidak akan tamat tempohnya: {STRING} STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Beri amaran sekiranya kenderaan sesat: {STRING} diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 65c4e10c7f..55b78fec69 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1254,6 +1254,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Det er i STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Vedlikehold av infrastruktur: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Når aktivert, medfører infrastruktur vedlikeholdskostnader. Kostnadene vokser over-proporsjonalt med nettverkets størrelse, og påvirker dermed større selskaper mer enn de små + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Flyplasser utgår aldri: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Aktivering av denne innstillingen gjør at hver type flyplass forblir tilgjengelig for alltid etter at sin introduksjon diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 93db95f84b..587ce0cce1 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1240,6 +1240,7 @@ STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Tillatt bygging STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Endring av denne instillinga er ikkje mogleg når det finst køyretøy STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Vedlikehald av infrastruktur: {STRING} + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Flyplassar utgår aldri: {STRING} STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Advarsel om køyretøyet køyrer seg vill: {STRING} diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 965c08cb42..628a398f29 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1633,6 +1633,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Zmiana t STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Utrzymywanie infrastruktury: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Kiedy włączone, utrzymanie infrastruktury jest naliczane w kosztach. Koszty wzrastają nadproporcjonalnie do rozmiarów sieci połączeń, a więc dotykają bardziej duże niż małe firmy + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Pozwól budować stare lotniska: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Włączona opcja sprawia, że każdy typ lotniska będzie dostępny na zawsze od chwili wprowadzenia diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index d9c00b1101..e50745fc71 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1252,6 +1252,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Não é STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Manutenção de infraestruturas: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Quando activo, as infraestruturas têm custos de manutenção. O custo cresce mais do que proporcionalmente com o tamanho da rede e com isso afecta mais as companhias maiores comparado com as mais pequeneas + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aeroportos nunca expiram: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Activar esta preferência torna cada tipo de aeroporto disponível para sempre após a sua introdução diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 6b891bb7e8..14bd028643 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -1245,6 +1245,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Schimbar STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Mentenanță infrastructură: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Cand este activă, infrastructura necesita cheltuieli cu intreținerea. Costurile cresc proporțional cu rețeaua de transport, afectând companiile mari mai mult decât companiile mici + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aeroporturile nu expiră niciodată: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Activarea acestei opțiuni determina ca fiecare tip de aeroport sa fie disponibil permanent, după ce a fost introdus. diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 22eaeb0782..7574bd8bfb 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1410,6 +1410,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Изме STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Обслуживание инфраструктуры: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Включает затраты на содержание инфраструктуры. Стоимость непропорционально увеличивается с ростом транспортной сети, оказывая, таким образом, большее влияние на крупные компании, чем на малые. + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Аэропорты не устаревают: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :При включении все типы аэропортов доступны для строительства в любое время после их первоначального появления diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index d253ac97ed..74b99a1f72 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -1450,6 +1450,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Promena STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Održavanje infrastrukture: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Ako je omogućeno, infrastruktura će imati troškove održavanja. Trošak raste brže sa porastom veličine putne mreže i time više pogađa veća preduzeća od manjih + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Nezastarevanje aerodroma: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Omogućavanje ovog podešavanja čini svaki tip aerodroma zauvek pristupan nakon njegovog uvođenja diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 535e94a582..652972818d 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1256,6 +1256,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}当有 STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :加强版固定资产维护: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :固定资产会发生维护费用,“打开”本选项时,维护费用的增长会超过交通网络的增长规模,因而,对大公司影响更大。 + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :总允许建设小型机场: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :“打开”此选项,每种类型机场出现后一直是可用的 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index b828879d48..0a127f4d61 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1319,6 +1319,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Zmena na STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Správa infraštruktúry: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Ak je zapnuté, infraštruktúra generuje výdavky na údržbu. Poplatky rastú proporcionálne s veľkosťou spoločnosti, čo ovplyvňuje viac veľké spoločnosti ako malé. + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Letiská nikdy neexiprujú: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Povoluje zachovať vsetky typy letísk navzdy. diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 0704d6e95b..ee1a36e19f 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1404,6 +1404,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Sprememb STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Vzdrževanje infrastrukture: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Če je omogočeno, infrastruktura upošteva vzdrževalne stroške, ki rastejo skozi čas proporcionalno z velikostjo omrežja. + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Letališča nikoli ne potečejo: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Če je omogočeno, bo vsak tip letališča ostal omogočen vedno po uvedbi. diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 43f9d57b19..75550babea 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1259,6 +1259,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Cambiar STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Mantenimiento de infraestructuras: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Cuando se activa, las infraestructuras tienen costes de mantenimiento. Los costes de la infraestructura aumentan con el tamaño de la red, con lo cual afectan a compañías grandes en mayor grado que a las pequeñas + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aeropuertos nunca caducan: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Permite a todos los aeropuertos estar disponibles permanentemente una vez han sido introducidos diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index efdaffeb3a..194364b1e9 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1259,6 +1259,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}No se pu STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Mantenimiento de infraestructura: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Cuando se activa, la infraestructura tiene costo de mantenimiento, el cual aumenta en relación con el tamaño de la red de transporte. Esto afecta en mayor medida a las empresas grandes que a las pequeñas + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aeropuertos siempre disponibles: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Los tipos de aeropuertos estarán disponibles todo el tiempo tras haber sido introducidos diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 1e9fe336a7..30bd9ea8ff 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1251,6 +1251,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Det är STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Underhåll av infrastruktur: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Om det är aktiverat så kostar underhåll av infrastruktur. Kostnaden ökar mer än proportionellt mot nätverkets storlek, vilket innebär att större företag drabbas hårdare än små företag av underhållskostnader. + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Flygplatser blir aldrig gamla: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Aktivering av denna inställning gör så att alla flygplatstyper finns kvar i obegränsad tid efter att de blivit tillgängliga diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index d123db86e1..a42fa3440a 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1173,6 +1173,7 @@ STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :வழிசெ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}வாகனங்கள் இருக்கும் பொது இந்த அமைப்பினை மாற்ற இயலாது STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :கட்டட பராமரிப்பு: {STRING} + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :விமான நிலையங்கள் என்றும் காலாவதியாகாது: {STRING} STR_CONFIG_SETTING_WARN_LOST_VEHICLE :வாகனம் தொலைந்தால் எச்சரிக்கை செய்: {STRING} diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 878b9c26c5..c3584238f5 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1228,6 +1228,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}ไม STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :ค่าบำรุงรักษาโครงสร้างพื้นฐาน: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :เมื่อเปิดใช้งาน สาธารณูประโภคที่สร้างโดยบริษัทจะมีค่าบำรุงรักษา ยิ่งเครือข่ายยิ่งมากจะยิ่งเสียค่าใช้จ่ายมากขึ้น + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :ท่าอากาศยานไม่มีวันหมดอายุ: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :เปิดใช้งานสิ่งนี้ จะทำให้สามารถสร้างท่าอากาศยานแบบเก่าๆได้แม้เวลาจะผ่านไปนานแล้วก็ตาม diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index e837d1efef..621572e561 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1251,6 +1251,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}當有 STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :基礎建設維護: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :如啟用此選項,基礎建設會產生維護成本。該成本的增長會根據公司基礎建設的規模而加倍增大,因此該設定對大公司的影響比對小公司更大 + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :機場永不過期:{STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :如啟用此選項,所有機場一經面世,就永遠可以選擇建設 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index c7b456f68d..a92a09f38a 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -1252,6 +1252,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Araçlar STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Altyapı bakımları: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Etkinleştirildiğinde; altyapı, bakım giderine neden olur. Maliyet ağ büyüklüğüne göre daha hızlı yükselir, dolayısıyla büyük şirketleri küçüklere göre daha çok etkiler + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Havalimanlarının süresi asla dolmasın: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Bu ayarı etkinleştirmek her havaalanı türünün, tanıtımından sonra sürekli olarak kullanılabilir kalmasını sağlar. diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index d4f33017f1..22f5d8f677 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1379,6 +1379,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Цю н STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Витрати на утримання інфраструктури: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :При включенні інфраструктура потребує коштів для утримання. Витрати збільшуються не пропорційно з ростом розміру мережі, більше впливаючи на великі компанії ніж на малі + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Аеропорти не застарівають: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :При включенні кожен аеропорт буде доступним для будівництва безстроково після його впровадження. diff --git a/src/lang/unfinished/chuvash.txt b/src/lang/unfinished/chuvash.txt index 474c328f96..d8661586bc 100644 --- a/src/lang/unfinished/chuvash.txt +++ b/src/lang/unfinished/chuvash.txt @@ -573,6 +573,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Сылтӑмр STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :ҫук STR_CONFIG_SETTING_PLANE_CRASHES_NONE :ҫук + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Аэропорт кивел мар: {STRING} diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index 624eec2f33..2b3b80966e 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -1249,6 +1249,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}At der f STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Ynfrastruktuerûnderhâld: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :By ynskeakeljen binne der koster ferbûn oan it ûnderhâld fan ynfrastruktuer. De kosten wurde heger by gruttere netwurken wêrtoch gruttere bedriuwen hjir mear lêst fan hawwe + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Fleanfjilden ferrinne nea: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :By ynskeakeljen bliuwe alle fleanfjildtypes foar ivich beskikber diff --git a/src/lang/unfinished/ido.txt b/src/lang/unfinished/ido.txt index 114c434f36..41317c107c 100644 --- a/src/lang/unfinished/ido.txt +++ b/src/lang/unfinished/ido.txt @@ -533,6 +533,7 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :normala + STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Verda STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Obskur-verda STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violkolora diff --git a/src/lang/unfinished/macedonian.txt b/src/lang/unfinished/macedonian.txt index 30a0f142b1..7e19065f8b 100644 --- a/src/lang/unfinished/macedonian.txt +++ b/src/lang/unfinished/macedonian.txt @@ -843,6 +843,7 @@ STR_CONFIG_SETTING_SMOKE_AMOUNT :Износ на STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Инфраструктура за одржување: {STRING} + STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Дебелина на линии во графици: {STRING} diff --git a/src/lang/unfinished/maltese.txt b/src/lang/unfinished/maltese.txt index 4fc0e8cb10..b0f3aecdda 100644 --- a/src/lang/unfinished/maltese.txt +++ b/src/lang/unfinished/maltese.txt @@ -460,6 +460,7 @@ STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Iddeċiedi kemm + STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Avza jekk jintilef il-vehikolu: {STRING} diff --git a/src/lang/unfinished/marathi.txt b/src/lang/unfinished/marathi.txt index 4576bccbae..f5ff89ac9e 100644 --- a/src/lang/unfinished/marathi.txt +++ b/src/lang/unfinished/marathi.txt @@ -796,6 +796,7 @@ STR_CONFIG_SETTING_REALISTIC :खरेखु STR_CONFIG_SETTING_SMOKE_AMOUNT :वाहनांचा धूर/ठिणग्या: {STRING} + STR_CONFIG_SETTING_WARN_LOST_VEHICLE : वाहन हरवल्यास सूचित करा: {STRING} diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index 231f11af81..618375a246 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -1167,6 +1167,7 @@ STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :اجازه اس STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}تغییر دادن این تنظیم هنگامی که خودرو وجود دارد ممکن نیست STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :تعمیر و نگهداری زیرساخت ها: {STRING} + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :فرودگاه‌ها هیچ‌گاه از کار نیافتند: {STRING} STR_CONFIG_SETTING_WARN_LOST_VEHICLE :اعلام هشدار هنگام گم شدن وسیله نقلیه: {STRING} diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index b5fd180e01..fd42e84d90 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -1113,6 +1113,7 @@ STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :مد مقابل STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}جب گاڑیاں موجود ہوں تو یہ سیٹنگ بدلنا ممکن نہیں STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :انفراسٹرکچر کی بحالی: {STRING} + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :ہوائی اڈوں کی معیاد کبھی ختم نہ ہو: {STRING} STR_CONFIG_SETTING_WARN_LOST_VEHICLE :اگر گاڑی کھو جاے تو انتباہ کیجئیے: {STRING} diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 61a15d3681..92ae0f40bb 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1258,6 +1258,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Không t STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Phí bảo trì cơ sở hạ tầng: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Khi mở, thì hạ tầng công ty sẽ sinh ra chi phí bảo trì. Chi phí sẽ tăng theo mạng lưới giao thông bạn xây dựng, và sẽ tiêu tốn của công ty lớn nhiều hơn công ty nhỏ + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Sân bay không bao giờ thành đồ cổ: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Bật tùy chọn này cho phép tất cả các loại sân bay không bị lỗi thời diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 9561354fb0..14277fdd7a 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1251,6 +1251,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Nid yw'n STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Cynnal a chadw tanadeiledd: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Pan fo wedi'i alluogi, mae tanadeiledd yn creu costau cynnal a chadw. Mae'r cost yn codi'n gyflymach na'i gyfradd gyda thŵf y rhwydwaith, gan effeithio'n fwy ar gwmniau mawr na rhai bychan + STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Maes awyr ddim yn dibennu: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Mae galluogi'r dewis yma'n peri i bob math o faes awyr aros ar gael am byth wedi ei gyflwyniad gyntaf From 916e911806083a2fe06a79f6f10e275015079149 Mon Sep 17 00:00:00 2001 From: nikolas Date: Tue, 8 Jan 2019 16:00:56 -0500 Subject: [PATCH 150/622] Doc: Fix a few typos in docs/multiplayer.txt --- docs/multiplayer.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/multiplayer.txt b/docs/multiplayer.txt index 7f4227cd8a..62314d7b4c 100644 --- a/docs/multiplayer.txt +++ b/docs/multiplayer.txt @@ -90,7 +90,7 @@ Table of contents - [network] sync_freq: change it in console with: 'set network.sync_freq ' the number should be between the 50 and 1000, not much lower, not much - higer. It indicates the time between sync-frames. A sync-frame is a frame + higher. It indicates the time between sync-frames. A sync-frame is a frame which checks if all clients are still in sync. When the value it too high, clients can desync in 1960, but the server detects it in 1970. Not really handy. The lower the value, the more bandwidth it uses. @@ -104,7 +104,7 @@ Table of contents - In UNIX like systems, you can fork your dedicated server by adding -f as parameter. - - You can automaticly clean companies that do not have a client connected to + - You can automatically clean companies that do not have a client connected to them, for, let's say, 3 years. You can do this via: 'set autoclean_companies' and 'set autoclean_protected' and 'set autoclean_unprotected'. Unprotected removes a password from a company when it is not used for more then the @@ -113,7 +113,7 @@ Table of contents - You can also do this manually via the console: 'reset_company'. - - You can let your server automaticly restart a map when, let's say, year 2030 + - You can let your server automatically restart a map when, let's say, year 2030 is reached. See 'set restart_game_date' for detail. - If you want to be on the server-list, enable Advertising. To do this, select From 2a8fa5fef9021bff67a13899832bf6f0a18e6ea1 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 4 May 2018 21:29:22 +0100 Subject: [PATCH 151/622] Change: Split up Window::OnTick into OnGameTick and OnRealtimeTick. Adjust timers to work with milliseconds instead of ticks. --- src/airport_gui.cpp | 2 +- src/dock_gui.cpp | 2 +- src/graph_gui.cpp | 10 +++++----- src/group_gui.cpp | 2 +- src/industry_gui.cpp | 2 +- src/main_gui.cpp | 11 ++++++----- src/misc_gui.cpp | 13 +++++++------ src/newgrf_gui.cpp | 6 +++--- src/news_gui.cpp | 28 +++++++++++++++++----------- src/openttd.cpp | 7 +++---- src/rail_gui.cpp | 2 +- src/road_gui.cpp | 2 +- src/smallmap_gui.cpp | 4 ++-- src/smallmap_gui.h | 8 ++++---- src/station_gui.cpp | 4 ++-- src/statusbar_gui.cpp | 19 +++++++++++-------- src/toolbar_gui.cpp | 18 ++++++++++++++++-- src/vehicle_gui.cpp | 4 ++-- src/window.cpp | 25 ++++++++++++++++++++++--- src/window_func.h | 32 ++++++++++++++++++++++++++++++++ src/window_gui.h | 7 ++++++- 21 files changed, 144 insertions(+), 64 deletions(-) diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index 6437f236cd..243f91b247 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -543,7 +543,7 @@ public: this->SelectFirstAvailableAirport(false); } - virtual void OnTick() + virtual void OnRealtimeTick(uint delta_ms) { CheckRedrawStationCoverage(this); } diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp index f09720b357..e2224dfa28 100644 --- a/src/dock_gui.cpp +++ b/src/dock_gui.cpp @@ -451,7 +451,7 @@ public: } } - virtual void OnTick() + virtual void OnRealtimeTick(uint delta_ms) { CheckRedrawStationCoverage(this); } diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index 48b8c4c84a..4f8fe68704 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -539,7 +539,7 @@ public: if (widget == WID_CV_KEY_BUTTON) ShowGraphLegend(); } - virtual void OnTick() + virtual void OnGameTick() { this->UpdateStatistics(false); } @@ -998,9 +998,9 @@ struct PaymentRatesGraphWindow : BaseGraphWindow { } } - virtual void OnTick() + virtual void OnGameTick() { - /* Override default OnTick */ + /* Override default OnGameTick */ } /** @@ -1239,7 +1239,7 @@ public: } - virtual void OnTick() + virtual void OnGameTick() { if (this->companies.NeedResort()) { this->SetDirty(); @@ -1472,7 +1472,7 @@ struct PerformanceRatingDetailWindow : Window { } } - virtual void OnTick() + virtual void OnGameTick() { if (_pause_mode != PM_UNPAUSED) return; diff --git a/src/group_gui.cpp b/src/group_gui.cpp index aef934ccf5..dbb1baa0f7 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -858,7 +858,7 @@ public: this->SetDirty(); } - virtual void OnTick() + virtual void OnGameTick() { if (_pause_mode != PM_UNPAUSED) return; if (this->groups.NeedResort() || this->vehicles.NeedResort()) { diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 98c9edda21..50ef283591 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -647,7 +647,7 @@ public: if (success && !_settings_client.gui.persistent_buildingtools) ResetObjectToPlace(); } - virtual void OnTick() + virtual void OnGameTick() { if (_pause_mode != PM_UNPAUSED) return; if (!this->timer_enabled) return; diff --git a/src/main_gui.cpp b/src/main_gui.cpp index 199546d439..12ee574bb6 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -235,10 +235,11 @@ enum { struct MainWindow : Window { - uint refresh; + int refresh; - static const uint LINKGRAPH_REFRESH_PERIOD = 0xff; - static const uint LINKGRAPH_DELAY = 0xf; + /* Refresh times in milliseconds */ + static const uint LINKGRAPH_REFRESH_PERIOD = 7650; + static const uint LINKGRAPH_DELAY = 450; MainWindow(WindowDesc *desc) : Window(desc) { @@ -253,9 +254,9 @@ struct MainWindow : Window this->refresh = LINKGRAPH_DELAY; } - virtual void OnTick() + virtual void OnRealtimeTick(uint delta_ms) { - if (--this->refresh > 0) return; + if (!TimerElapsed(this->refresh, delta_ms)) return; this->refresh = LINKGRAPH_REFRESH_PERIOD; diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index b122d172d1..31faae2d4e 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -454,15 +454,16 @@ static const char * const _credits[] = { struct AboutWindow : public Window { int text_position; ///< The top of the scrolling text - byte counter; ///< Used to scroll the text every 5 ticks int line_height; ///< The height of a single line static const int num_visible_lines = 19; ///< The number of lines visible simultaneously + static const uint TIMER_INTERVAL = 150; ///< Scrolling interval in ms + uint timer; + AboutWindow() : Window(&_about_desc) { this->InitNested(WN_GAME_OPTIONS_ABOUT); - this->counter = 5; this->text_position = this->GetWidget(WID_A_SCROLLING_TEXT)->pos_y + this->GetWidget(WID_A_SCROLLING_TEXT)->current_y; } @@ -502,11 +503,11 @@ struct AboutWindow : public Window { } } - virtual void OnTick() + virtual void OnRealtimeTick(uint delta_ms) { - if (--this->counter == 0) { - this->counter = 5; - this->text_position--; + uint count = CountIntervalElapsed(this->timer, delta_ms, TIMER_INTERVAL); + if (count > 0) { + this->text_position -= count; /* If the last text has scrolled start a new from the start */ if (this->text_position < (int)(this->GetWidget(WID_A_SCROLLING_TEXT)->pos_y - lengthof(_credits) * this->line_height)) { this->text_position = this->GetWidget(WID_A_SCROLLING_TEXT)->pos_y + this->GetWidget(WID_A_SCROLLING_TEXT)->current_y; diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index d506eb026c..0b0512544e 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -403,7 +403,7 @@ struct NewGRFParametersWindow : public Window { par_info->SetValue(this->grf_config, val); this->clicked_button = num; - this->timeout = 5; + this->timeout = 150; } } else if (par_info->type == PTYPE_UINT_ENUM && !par_info->complete_labels && click_count >= 2) { /* Display a query box so users can enter a custom value. */ @@ -483,9 +483,9 @@ struct NewGRFParametersWindow : public Window { } } - virtual void OnTick() + virtual void OnRealtimeTick(uint delta_ms) { - if (--this->timeout == 0) { + if (TimerElapsed(this->timeout, delta_ms)) { this->clicked_button = UINT_MAX; this->SetDirty(); } diff --git a/src/news_gui.cpp b/src/news_gui.cpp index 71a39eb3a9..183b27b90e 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -260,11 +260,13 @@ struct NewsWindow : Window { uint16 chat_height; ///< Height of the chat window. uint16 status_height; ///< Height of the status bar window const NewsItem *ni; ///< News item to display. - static uint duration; ///< Remaining time for showing current news message (may only be accessed while a news item is displayed). + static int duration; ///< Remaining time for showing the current news message (may only be access while a news item is displayed). + + uint timer; NewsWindow(WindowDesc *desc, const NewsItem *ni) : Window(desc), ni(ni) { - NewsWindow::duration = 555; + NewsWindow::duration = 16650; const Window *w = FindWindowByClass(WC_SEND_NETWORK_MSG); this->chat_height = (w != NULL) ? w->height : 0; this->status_height = FindWindowById(WC_STATUS_BAR, 0)->height; @@ -485,11 +487,18 @@ struct NewsWindow : Window { this->SetWindowTop(newtop); } - virtual void OnTick() + virtual void OnRealtimeTick(uint delta_ms) { - /* Scroll up newsmessages from the bottom in steps of 4 pixels */ - int newtop = max(this->top - 4, _screen.height - this->height - this->status_height - this->chat_height); - this->SetWindowTop(newtop); + int count = CountIntervalElapsed(this->timer, delta_ms, 15); + if (count > 0) { + /* Scroll up newsmessages from the bottom */ + int newtop = max(this->top - 2 * count, _screen.height - this->height - this->status_height - this->chat_height); + this->SetWindowTop(newtop); + } + + /* Decrement the news timer. We don't need to action an elapsed event here, + * so no need to use TimerElapsed(). */ + if (NewsWindow::duration > 0) NewsWindow::duration -= delta_ms; } private: @@ -536,7 +545,7 @@ private: } }; -/* static */ uint NewsWindow::duration = 0; // Instance creation. +/* static */ int NewsWindow::duration = 0; // Instance creation. /** Open up an own newspaper window for the news item */ @@ -588,11 +597,8 @@ static bool ReadyForNextItem() * Check if the status bar message is still being displayed? */ if (IsNewsTickerShown()) return false; - /* Newspaper message, decrement duration counter */ - if (NewsWindow::duration != 0) NewsWindow::duration--; - /* neither newsticker nor newspaper are running */ - return (NewsWindow::duration == 0 || FindWindowById(WC_NEWS_WINDOW, 0) == NULL); + return (NewsWindow::duration <= 0 || FindWindowById(WC_NEWS_WINDOW, 0) == NULL); } /** Move to the next news item */ diff --git a/src/openttd.cpp b/src/openttd.cpp index 3d25f5d3d1..fdde191402 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -76,7 +76,7 @@ void IncreaseDate(); void DoPaletteAnimations(); void MusicLoop(); void ResetMusic(); -void CallWindowTickEvent(); +void CallWindowGameTickEvent(); bool HandleBootstrap(); extern Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY); @@ -1363,7 +1363,6 @@ void StateGameLoop() #ifndef DEBUG_DUMP_COMMANDS Game::GameLoop(); #endif - CallWindowTickEvent(); return; } @@ -1381,7 +1380,7 @@ void StateGameLoop() BasePersistentStorageArray::SwitchMode(PSM_LEAVE_GAMELOOP); UpdateLandscapingLimits(); - CallWindowTickEvent(); + CallWindowGameTickEvent(); NewsLoop(); } else { if (_debug_desync_level > 2 && _date_fract == 0 && (_date & 0x1F) == 0) { @@ -1411,7 +1410,7 @@ void StateGameLoop() #endif UpdateLandscapingLimits(); - CallWindowTickEvent(); + CallWindowGameTickEvent(); NewsLoop(); cur_company.Restore(); } diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 5a533e5c55..234edbf22f 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1368,7 +1368,7 @@ public: } } - virtual void OnTick() + virtual void OnRealtimeTick(uint delta_ms) { CheckRedrawStationCoverage(this); } diff --git a/src/road_gui.cpp b/src/road_gui.cpp index 6faa422627..e3091ec8af 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -1053,7 +1053,7 @@ struct BuildRoadStationWindow : public PickerWindowBase { } } - virtual void OnTick() + virtual void OnRealtimeTick(uint delta_ms) { CheckRedrawStationCoverage(this); } diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 135d7491c1..447d25e4a0 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -1570,10 +1570,10 @@ int SmallMapWindow::GetPositionOnLegend(Point pt) } } -/* virtual */ void SmallMapWindow::OnTick() +/* virtual */ void SmallMapWindow::OnRealtimeTick(uint delta_ms) { /* Update the window every now and then */ - if (--this->refresh != 0) return; + if (!TimerElapsed(this->refresh, delta_ms)) return; if (this->map_type == SMT_LINKSTATS) { uint32 company_mask = this->GetOverlayCompanyMask(); diff --git a/src/smallmap_gui.h b/src/smallmap_gui.h index c3151b1a71..60b39b7a3c 100644 --- a/src/smallmap_gui.h +++ b/src/smallmap_gui.h @@ -67,8 +67,8 @@ protected: static const uint LEGEND_BLOB_WIDTH = 8; ///< Width of the coloured blob in front of a line text in the #WID_SM_LEGEND widget. static const uint INDUSTRY_MIN_NUMBER_OF_COLUMNS = 2; ///< Minimal number of columns in the #WID_SM_LEGEND widget for the #SMT_INDUSTRY legend. - static const uint FORCE_REFRESH_PERIOD = 0x1F; ///< map is redrawn after that many ticks - static const uint BLINK_PERIOD = 0x0F; ///< highlight blinking interval + static const uint FORCE_REFRESH_PERIOD = 930; ///< map is redrawn after that many milliseconds. + static const uint BLINK_PERIOD = 450; ///< highlight blinking interval in milliseconds. uint min_number_of_columns; ///< Minimal number of columns in legends. uint min_number_of_fixed_rows; ///< Minimal number of rows in the legends for the fixed layouts only (all except #SMT_INDUSTRY). @@ -79,7 +79,7 @@ protected: int32 subscroll; ///< Number of pixels (0..3) between the right end of the base tile and the pixel at the top-left corner of the smallmap display. int zoom; ///< Zoom level. Bigger number means more zoom-out (further away). - uint8 refresh; ///< Refresh counter, zeroed every FORCE_REFRESH_PERIOD ticks. + int refresh; ///< Refresh timer, in millseconds. LinkGraphOverlay *overlay; static void BreakIndustryChainLink(); @@ -187,7 +187,7 @@ public: virtual void OnInvalidateData(int data = 0, bool gui_scope = true); virtual bool OnRightClick(Point pt, int widget); virtual void OnMouseWheel(int wheel); - virtual void OnTick(); + virtual void OnRealtimeTick(uint delta_ms); virtual void OnScroll(Point delta); virtual void OnMouseOver(Point pt, int widget); }; diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 3f64b139ac..4c0bf295ce 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -621,7 +621,7 @@ public: } } - virtual void OnTick() + virtual void OnGameTick() { if (_pause_mode != PM_UNPAUSED) return; if (this->stations.NeedResort()) { @@ -2312,7 +2312,7 @@ struct SelectStationWindow : Window { DeleteWindowById(WC_SELECT_STATION, 0); } - virtual void OnTick() + virtual void OnRealtimeTick(uint delta_ms) { if (_thd.dirty & 2) { _thd.dirty &= ~2; diff --git a/src/statusbar_gui.cpp b/src/statusbar_gui.cpp index 25efa6bb1c..e45697130d 100644 --- a/src/statusbar_gui.cpp +++ b/src/statusbar_gui.cpp @@ -79,10 +79,11 @@ static bool DrawScrollingStatusText(const NewsItem *ni, int scroll_pos, int left struct StatusBarWindow : Window { bool saving; int ticker_scroll; + uint ticker_timer; int reminder_timeout; static const int TICKER_STOP = 1640; ///< scrolling is finished when counter reaches this value - static const int REMINDER_START = 91; ///< initial value of the reminder counter (right dot on the right) + static const int REMINDER_START = 1350; ///< time in ms for reminder notification (red dot on the right) to stay static const int REMINDER_STOP = 0; ///< reminder disappears when counter reaches this value static const int COUNTER_STEP = 2; ///< this is subtracted from active counters every tick @@ -203,6 +204,7 @@ struct StatusBarWindow : Window { case SBI_SHOW_REMINDER: this->reminder_timeout = REMINDER_START; break; case SBI_NEWS_DELETED: this->ticker_scroll = TICKER_STOP; // reset ticker ... + this->ticker_timer = 0; this->reminder_timeout = REMINDER_STOP; // ... and reminder break; } @@ -217,19 +219,20 @@ struct StatusBarWindow : Window { } } - virtual void OnTick() + virtual void OnRealtimeTick(uint delta_ms) { if (_pause_mode != PM_UNPAUSED) return; if (this->ticker_scroll < TICKER_STOP) { // Scrolling text - this->ticker_scroll += COUNTER_STEP; - this->SetWidgetDirty(WID_S_MIDDLE); + uint count = CountIntervalElapsed(this->ticker_timer, delta_ms, 15); + if (count > 0) { + this->ticker_scroll += count; + this->SetWidgetDirty(WID_S_MIDDLE); + } } - if (this->reminder_timeout > REMINDER_STOP) { // Red blot to show there are new unread newsmessages - this->reminder_timeout -= COUNTER_STEP; - } else if (this->reminder_timeout < REMINDER_STOP) { - this->reminder_timeout = REMINDER_STOP; + // Red blot to show there are new unread newsmessages + if (TimerElapsed(this->reminder_timeout, delta_ms)) { this->SetWidgetDirty(WID_S_MIDDLE); } } diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 40ac3634f1..4f0f140115 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -1978,6 +1978,8 @@ enum MainToolbarHotkeys { /** Main toolbar. */ struct MainToolbarWindow : Window { + int timer; + MainToolbarWindow(WindowDesc *desc) : Window(desc) { this->InitNested(0); @@ -1988,6 +1990,8 @@ struct MainToolbarWindow : Window { this->SetWidgetDisabledState(WID_TN_FAST_FORWARD, _networking); // if networking, disable fast-forward button PositionMainToolbar(this); DoZoomInOutWindow(ZOOM_NONE, this); + + this->timer = MILLISECONDS_PER_TICK; } virtual void FindWindowPlacementAndResize(int def_width, int def_height) @@ -2092,8 +2096,11 @@ struct MainToolbarWindow : Window { _last_started_action = CBF_NONE; } - virtual void OnTick() + virtual void OnRealtimeTick(uint delta_ms) { + if (!TimerElapsed(this->timer, delta_ms)) return; + this->timer = MILLISECONDS_PER_TICK; + if (this->IsWidgetLowered(WID_TN_PAUSE) != !!_pause_mode) { this->ToggleWidgetLoweredState(WID_TN_PAUSE); this->SetWidgetDirty(WID_TN_PAUSE); @@ -2310,6 +2317,8 @@ enum MainToolbarEditorHotkeys { }; struct ScenarioEditorToolbarWindow : Window { + int timer; + ScenarioEditorToolbarWindow(WindowDesc *desc) : Window(desc) { this->InitNested(0); @@ -2318,6 +2327,8 @@ struct ScenarioEditorToolbarWindow : Window { CLRBITS(this->flags, WF_WHITE_BORDER); PositionMainToolbar(this); DoZoomInOutWindow(ZOOM_NONE, this); + + this->timer = MILLISECONDS_PER_TICK; } virtual void FindWindowPlacementAndResize(int def_width, int def_height) @@ -2445,8 +2456,11 @@ struct ScenarioEditorToolbarWindow : Window { this->SetWidgetDirty(WID_TE_DATE_FORWARD); } - virtual void OnTick() + virtual void OnRealtimeTick(uint delta_ms) { + if (!TimerElapsed(this->timer, delta_ms)) return; + this->timer = MILLISECONDS_PER_TICK; + if (this->IsWidgetLowered(WID_TE_PAUSE) != !!_pause_mode) { this->ToggleWidgetLoweredState(WID_TE_PAUSE); this->SetDirty(); diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 4926f7a4fc..7e0fa14b60 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -1676,7 +1676,7 @@ public: this->SetDirty(); } - virtual void OnTick() + virtual void OnGameTick() { if (_pause_mode != PM_UNPAUSED) return; if (this->vehicles.NeedResort()) { @@ -2733,7 +2733,7 @@ public: } } - virtual void OnTick() + virtual void OnGameTick() { const Vehicle *v = Vehicle::Get(this->window_number); bool veh_stopped = v->IsStoppedInDepot(); diff --git a/src/window.cpp b/src/window.cpp index 22084c200e..7457bdcbf5 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -3074,14 +3074,33 @@ void InputLoop() HandleAutoscroll(); } +/** + * Dispatch OnRealtimeTick event over all windows + */ +void CallWindowRealtimeTickEvent(uint delta_ms) +{ + Window *w; + FOR_ALL_WINDOWS_FROM_FRONT(w) { + w->OnRealtimeTick(delta_ms); + } +} + /** * Update the continuously changing contents of the windows, such as the viewports */ void UpdateWindows() { + static uint32 last_realtime_tick = _realtime_tick; + uint delta_ms = _realtime_tick - last_realtime_tick; + last_realtime_tick = _realtime_tick; + + if (delta_ms == 0) return; + PerformanceMeasurer framerate(PFE_DRAWING); PerformanceAccumulator::Reset(PFE_DRAWWORLD); + CallWindowRealtimeTickEvent(delta_ms); + Window *w; static int highlight_timer = 1; @@ -3263,13 +3282,13 @@ void InvalidateWindowClassesData(WindowClass cls, int data, bool gui_scope) } /** - * Dispatch WE_TICK event over all windows + * Dispatch OnTick event over all windows */ -void CallWindowTickEvent() +void CallWindowGameTickEvent() { Window *w; FOR_ALL_WINDOWS_FROM_FRONT(w) { - w->OnTick(); + w->OnGameTick(); } } diff --git a/src/window_func.h b/src/window_func.h index 453b889789..f2ae638fe7 100644 --- a/src/window_func.h +++ b/src/window_func.h @@ -56,4 +56,36 @@ void DeleteWindowByClass(WindowClass cls); bool EditBoxInGlobalFocus(); Point GetCaretPosition(); +/** + * Count how many times the interval has elapsed, and update the timer. + * Use to ensure a specific amount of events happen within a timeframe, e.g. for animation. + * The timer value does not need to be initialised. + * @param timer Timer to test. Value will be increased. + * @param delta Time since last test. + * @param interval Timing interval. + * @return Number of times the interval has elapsed. + */ +static inline uint CountIntervalElapsed(uint &timer, uint delta, uint interval) +{ + uint count = delta / interval; + if (timer + (delta % interval) >= interval) count++; + timer = (timer + delta) % interval; + return count; +} + +/** + * Test if a timer has elapsed, and update the timer. + * Use to ensure an event happens only once within a timeframe, e.g. for window updates. + * The timer value must be initialised in order for the timer to elapsed. + * @param timer Timer to test. Value will be decreased. + * @param delta Time since last test. + * @return True iff the timer has elapsed. + */ +static inline bool TimerElapsed(int &timer, uint delta) +{ + if (timer <= 0) return false; + timer -= delta; + return timer <= 0; +} + #endif /* WINDOW_FUNC_H */ diff --git a/src/window_gui.h b/src/window_gui.h index b81b06e391..f5f9734c37 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -678,13 +678,18 @@ public: /** * Called once per (game) tick. */ - virtual void OnTick() {} + virtual void OnGameTick() {} /** * Called once every 100 (game) ticks. */ virtual void OnHundredthTick() {} + /** + * Called periodically. + */ + virtual void OnRealtimeTick(uint delta_ms) {} + /** * Called when this window's timeout has been reached. */ From 15320a37b9255f28b5e66404b33e6fb0f1f05e9e Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 4 May 2018 21:40:59 +0100 Subject: [PATCH 152/622] Change: OnGameTick() is only called when not paused. --- src/graph_gui.cpp | 2 -- src/group_gui.cpp | 1 - src/industry_gui.cpp | 1 - src/station_gui.cpp | 1 - src/vehicle_gui.cpp | 1 - 5 files changed, 6 deletions(-) diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index 4f8fe68704..bbf1c22d62 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -1474,8 +1474,6 @@ struct PerformanceRatingDetailWindow : Window { virtual void OnGameTick() { - if (_pause_mode != PM_UNPAUSED) return; - /* Update the company score every 5 days */ if (--this->timeout == 0) { this->UpdateCompanyStats(); diff --git a/src/group_gui.cpp b/src/group_gui.cpp index dbb1baa0f7..7db04e9b35 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -860,7 +860,6 @@ public: virtual void OnGameTick() { - if (_pause_mode != PM_UNPAUSED) return; if (this->groups.NeedResort() || this->vehicles.NeedResort()) { this->SetDirty(); } diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 50ef283591..05cc67ee2b 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -649,7 +649,6 @@ public: virtual void OnGameTick() { - if (_pause_mode != PM_UNPAUSED) return; if (!this->timer_enabled) return; if (--this->callback_timer == 0) { /* We have just passed another day. diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 4c0bf295ce..11af2f55f4 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -623,7 +623,6 @@ public: virtual void OnGameTick() { - if (_pause_mode != PM_UNPAUSED) return; if (this->stations.NeedResort()) { DEBUG(misc, 3, "Periodic rebuild station list company %d", this->window_number); this->SetDirty(); diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 7e0fa14b60..450b0cc2d8 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -1678,7 +1678,6 @@ public: virtual void OnGameTick() { - if (_pause_mode != PM_UNPAUSED) return; if (this->vehicles.NeedResort()) { StationID station = (this->vli.type == VL_STATION_LIST) ? this->vli.index : INVALID_STATION; From ead9c9eab5d206cb13eb169e392e1291e767efaf Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 10 May 2018 21:49:52 +0100 Subject: [PATCH 153/622] Change: Switch various window timers to real time instead of game ticks. --- src/openttd.cpp | 11 ---------- src/window.cpp | 53 ++++++++++++++++++++++++++++++++----------------- 2 files changed, 35 insertions(+), 29 deletions(-) diff --git a/src/openttd.cpp b/src/openttd.cpp index fdde191402..0e0b4188a4 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1473,10 +1473,6 @@ void GameLoop() IncreaseSpriteLRU(); InteractiveRandom(); - extern int _caret_timer; - _caret_timer += 3; - CursorTick(); - #ifdef ENABLE_NETWORK /* Check for UDP stuff */ if (_network_available) NetworkBackgroundLoop(); @@ -1493,13 +1489,6 @@ void GameLoop() /* Singleplayer */ StateGameLoop(); } - - /* Check chat messages roughly once a second. */ - static uint check_message = 0; - if (++check_message > 1000 / MILLISECONDS_PER_TICK) { - check_message = 0; - NetworkChatMessageLoop(); - } #else StateGameLoop(); #endif /* ENABLE_NETWORK */ diff --git a/src/window.cpp b/src/window.cpp index 7457bdcbf5..64bb8fcbbb 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -37,6 +37,7 @@ #include "game/game.hpp" #include "video/video_driver.hpp" #include "framerate_type.h" +#include "network/network_func.h" #include "safeguards.h" @@ -1919,6 +1920,8 @@ void ResetWindowSystem() static void DecreaseWindowCounters() { + if (_scroller_click_timeout != 0) _scroller_click_timeout--; + Window *w; FOR_ALL_WINDOWS_FROM_FRONT(w) { if (_scroller_click_timeout == 0) { @@ -3046,7 +3049,6 @@ void InputLoop() assert(HasModalProgress() || IsLocalCompany()); CheckSoftLimit(); - HandleKeyScrolling(); /* Do the actual free of the deleted windows. */ for (Window *v = _z_front_window; v != NULL; /* nothing */) { @@ -3059,9 +3061,6 @@ void InputLoop() free(w); } - if (_scroller_click_timeout != 0) _scroller_click_timeout--; - DecreaseWindowCounters(); - if (_input_events_this_tick != 0) { /* The input loop is called only once per GameLoop() - so we can clear the counter here */ _input_events_this_tick = 0; @@ -3071,7 +3070,6 @@ void InputLoop() /* HandleMouseEvents was already called for this tick */ HandleMouseEvents(); - HandleAutoscroll(); } /** @@ -3101,11 +3099,30 @@ void UpdateWindows() CallWindowRealtimeTickEvent(delta_ms); + static int network_message_timer = 1; + if (TimerElapsed(network_message_timer, delta_ms)) { + network_message_timer = 1000; + NetworkChatMessageLoop(); + } + Window *w; + static int window_timer = 1; + if (TimerElapsed(window_timer, delta_ms)) { + window_timer = MILLISECONDS_PER_TICK; + + extern int _caret_timer; + _caret_timer += 3; + CursorTick(); + + HandleKeyScrolling(); + HandleAutoscroll(); + DecreaseWindowCounters(); + } + static int highlight_timer = 1; - if (--highlight_timer == 0) { - highlight_timer = 15; + if (TimerElapsed(highlight_timer, delta_ms)) { + highlight_timer = 450; _window_highlight_colour = !_window_highlight_colour; } @@ -3118,25 +3135,25 @@ void UpdateWindows() * But still empty the invalidation queues above. */ if (_network_dedicated) return; - static int we4_timer = 0; - int t = we4_timer + 1; + static int hundredth_timer = 1; + if (TimerElapsed(hundredth_timer, delta_ms)) { + hundredth_timer = 3000; // Historical reason: 100 * MILLISECONDS_PER_TICK - if (t >= 100) { FOR_ALL_WINDOWS_FROM_FRONT(w) { w->OnHundredthTick(); } - t = 0; } - we4_timer = t; - FOR_ALL_WINDOWS_FROM_FRONT(w) { - if ((w->flags & WF_WHITE_BORDER) && --w->white_border_timer == 0) { - CLRBITS(w->flags, WF_WHITE_BORDER); - w->SetDirty(); + if (window_timer == MILLISECONDS_PER_TICK) { // window_timer has elapsed this call + FOR_ALL_WINDOWS_FROM_FRONT(w) { + if ((w->flags & WF_WHITE_BORDER) && --w->white_border_timer == 0) { + CLRBITS(w->flags, WF_WHITE_BORDER); + w->SetDirty(); + } } - } - DrawDirtyBlocks(); + DrawDirtyBlocks(); + } FOR_ALL_WINDOWS_FROM_BACK(w) { /* Update viewport only if window is not shaded. */ From 59fe4f28c8f0bf47e7af40095dc6fba145188930 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 11 May 2018 17:52:06 +0100 Subject: [PATCH 154/622] Change: Animate text effects by real time instead of game ticks. --- src/openttd.cpp | 2 -- src/texteff.cpp | 12 +++++++++--- src/texteff.hpp | 2 +- src/window.cpp | 2 ++ 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/openttd.cpp b/src/openttd.cpp index 0e0b4188a4..49d5e8250c 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1495,8 +1495,6 @@ void GameLoop() if (!_pause_mode && HasBit(_display_opt, DO_FULL_ANIMATION)) DoPaletteAnimations(); - if (!_pause_mode || _game_mode == GM_EDITOR || _settings_game.construction.command_pause_level > CMDPL_NO_CONSTRUCTION) MoveAllTextEffects(); - InputLoop(); SoundDriver::GetInstance()->MainLoop(); diff --git a/src/texteff.cpp b/src/texteff.cpp index cdb8b8ce6a..0f79f51c12 100644 --- a/src/texteff.cpp +++ b/src/texteff.cpp @@ -16,6 +16,7 @@ #include "core/smallvec_type.hpp" #include "viewport_func.h" #include "settings_type.h" +#include "window_func.h" #include "safeguards.h" @@ -82,20 +83,25 @@ void RemoveTextEffect(TextEffectID te_id) _text_effects[te_id].Reset(); } -void MoveAllTextEffects() +void MoveAllTextEffects(uint delta_ms) { + static uint texteffecttimer = 0; + uint count = CountIntervalElapsed(texteffecttimer, delta_ms, MILLISECONDS_PER_TICK); + if (count == 0) return; + const TextEffect *end = _text_effects.End(); for (TextEffect *te = _text_effects.Begin(); te != end; te++) { if (te->string_id == INVALID_STRING_ID) continue; if (te->mode != TE_RISING) continue; - if (te->duration-- == 0) { + if (te->duration < count) { te->Reset(); continue; } te->MarkDirty(ZOOM_LVL_OUT_8X); - te->top -= ZOOM_LVL_BASE; + te->duration -= count; + te->top -= count * ZOOM_LVL_BASE; te->MarkDirty(ZOOM_LVL_OUT_8X); } } diff --git a/src/texteff.hpp b/src/texteff.hpp index 9ef74c1714..114cebed02 100644 --- a/src/texteff.hpp +++ b/src/texteff.hpp @@ -28,7 +28,7 @@ enum TextEffectMode { typedef uint16 TextEffectID; -void MoveAllTextEffects(); +void MoveAllTextEffects(uint delta_ms); TextEffectID AddTextEffect(StringID msg, int x, int y, uint8 duration, TextEffectMode mode); void InitTextEffects(); void DrawTextEffects(DrawPixelInfo *dpi); diff --git a/src/window.cpp b/src/window.cpp index 64bb8fcbbb..efa206d565 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -3126,6 +3126,8 @@ void UpdateWindows() _window_highlight_colour = !_window_highlight_colour; } + if (!_pause_mode || _game_mode == GM_EDITOR || _settings_game.construction.command_pause_level > CMDPL_NO_CONSTRUCTION) MoveAllTextEffects(delta_ms); + FOR_ALL_WINDOWS_FROM_FRONT(w) { w->ProcessScheduledInvalidations(); w->ProcessHighlightedInvalidations(); From 806e7d25dddcc8b0e9c3f372ed956c63c6508381 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 20 May 2018 09:58:36 +0100 Subject: [PATCH 155/622] Change: Use GUITimer class instead of bare int/uints. --- projects/openttd_vs140.vcxproj | 1 + projects/openttd_vs140.vcxproj.filters | 3 ++ projects/openttd_vs141.vcxproj | 1 + projects/openttd_vs141.vcxproj.filters | 3 ++ source.list | 1 + src/guitimer_func.h | 65 ++++++++++++++++++++++++++ src/main_gui.cpp | 13 +++--- src/misc_gui.cpp | 6 ++- src/newgrf_gui.cpp | 8 ++-- src/news_gui.cpp | 7 ++- src/smallmap_gui.cpp | 9 ++-- src/smallmap_gui.h | 3 +- src/statusbar_gui.cpp | 21 +++++---- src/texteff.cpp | 6 +-- src/toolbar_gui.cpp | 17 +++---- src/window.cpp | 29 ++++++------ src/window_func.h | 32 ------------- 17 files changed, 140 insertions(+), 85 deletions(-) create mode 100644 src/guitimer_func.h diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index dccc5e4f6c..0ca84bed3d 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -521,6 +521,7 @@ + diff --git a/projects/openttd_vs140.vcxproj.filters b/projects/openttd_vs140.vcxproj.filters index 47f431e556..7ad671fc7c 100644 --- a/projects/openttd_vs140.vcxproj.filters +++ b/projects/openttd_vs140.vcxproj.filters @@ -651,6 +651,9 @@ Header Files + + Header Files + Header Files diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj index 8167bce6cb..ec563572f3 100644 --- a/projects/openttd_vs141.vcxproj +++ b/projects/openttd_vs141.vcxproj @@ -521,6 +521,7 @@ + diff --git a/projects/openttd_vs141.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters index 47f431e556..7ad671fc7c 100644 --- a/projects/openttd_vs141.vcxproj.filters +++ b/projects/openttd_vs141.vcxproj.filters @@ -651,6 +651,9 @@ Header Files + + Header Files + Header Files diff --git a/source.list b/source.list index b89f7d736d..f78b8cecff 100644 --- a/source.list +++ b/source.list @@ -210,6 +210,7 @@ group.h group_gui.h group_type.h gui.h +guitimer_func.h heightmap.h highscore.h hotkeys.h diff --git a/src/guitimer_func.h b/src/guitimer_func.h new file mode 100644 index 0000000000..44ce042287 --- /dev/null +++ b/src/guitimer_func.h @@ -0,0 +1,65 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file guitimer_func.h GUI Timers. */ + +#ifndef GUITIMER_FUNC_H +#define GUITIMER_FUNC_H + +class GUITimer +{ +protected: + uint timer; + uint interval; + +public: + GUITimer() : timer(0), interval(0) { } + explicit GUITimer(uint interval) : timer(0), interval(interval) { } + + inline bool HasElapsed() const + { + return this->interval == 0; + } + + inline void SetInterval(uint interval) + { + this->timer = 0; + this->interval = interval; + } + + /** + * Count how many times the interval has elapsed. + * Use to ensure a specific amount of events happen within a timeframe, e.g. for animation. + * @param delta Time since last test. + * @return Number of times the interval has elapsed. + */ + inline uint CountElapsed(uint delta) + { + if (this->interval == 0) return 0; + uint count = delta / this->interval; + if (this->timer + (delta % this->interval) >= this->interval) count++; + this->timer = (this->timer + delta) % this->interval; + return count; + } + + /** + * Test if a timer has elapsed. + * Use to ensure an event happens only once within a timeframe, e.g. for window updates. + * @param delta Time since last test. + * @return True iff the timer has elapsed. + */ + inline bool Elapsed(uint delta) + { + if (this->CountElapsed(delta) == 0) return false; + this->SetInterval(0); + return true; + } +}; + +#endif /* GUITIMER_FUNC_H */ diff --git a/src/main_gui.cpp b/src/main_gui.cpp index 12ee574bb6..2eb24c8dc2 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -32,6 +32,7 @@ #include "linkgraph/linkgraph_gui.h" #include "tilehighlight_func.h" #include "hotkeys.h" +#include "guitimer_func.h" #include "saveload/saveload.h" @@ -235,7 +236,7 @@ enum { struct MainWindow : Window { - int refresh; + GUITimer refresh; /* Refresh times in milliseconds */ static const uint LINKGRAPH_REFRESH_PERIOD = 7650; @@ -251,14 +252,14 @@ struct MainWindow : Window nvp->InitializeViewport(this, TileXY(32, 32), ZOOM_LVL_VIEWPORT); this->viewport->overlay = new LinkGraphOverlay(this, WID_M_VIEWPORT, 0, 0, 3); - this->refresh = LINKGRAPH_DELAY; + this->refresh.SetInterval(LINKGRAPH_DELAY); } virtual void OnRealtimeTick(uint delta_ms) { - if (!TimerElapsed(this->refresh, delta_ms)) return; + if (!this->refresh.Elapsed(delta_ms)) return; - this->refresh = LINKGRAPH_REFRESH_PERIOD; + this->refresh.SetInterval(LINKGRAPH_REFRESH_PERIOD); if (this->viewport->overlay->GetCargoMask() == 0 || this->viewport->overlay->GetCompanyMask() == 0) { @@ -435,7 +436,7 @@ struct MainWindow : Window this->viewport->scrollpos_y += ScaleByZoom(delta.y, this->viewport->zoom); this->viewport->dest_scrollpos_x = this->viewport->scrollpos_x; this->viewport->dest_scrollpos_y = this->viewport->scrollpos_y; - this->refresh = LINKGRAPH_DELAY; + this->refresh.SetInterval(LINKGRAPH_DELAY); } virtual void OnMouseWheel(int wheel) @@ -450,7 +451,7 @@ struct MainWindow : Window if (this->viewport != NULL) { NWidgetViewport *nvp = this->GetWidget(WID_M_VIEWPORT); nvp->UpdateViewportCoordinates(this); - this->refresh = LINKGRAPH_DELAY; + this->refresh.SetInterval(LINKGRAPH_DELAY); } } diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 31faae2d4e..149ebe7177 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -26,6 +26,7 @@ #include "core/geometry_func.hpp" #include "newgrf_debug.h" #include "zoom_func.h" +#include "guitimer_func.h" #include "widgets/misc_widget.h" @@ -458,13 +459,14 @@ struct AboutWindow : public Window { static const int num_visible_lines = 19; ///< The number of lines visible simultaneously static const uint TIMER_INTERVAL = 150; ///< Scrolling interval in ms - uint timer; + GUITimer timer; AboutWindow() : Window(&_about_desc) { this->InitNested(WN_GAME_OPTIONS_ABOUT); this->text_position = this->GetWidget(WID_A_SCROLLING_TEXT)->pos_y + this->GetWidget(WID_A_SCROLLING_TEXT)->current_y; + this->timer.SetInterval(TIMER_INTERVAL); } virtual void SetStringParameters(int widget) const @@ -505,7 +507,7 @@ struct AboutWindow : public Window { virtual void OnRealtimeTick(uint delta_ms) { - uint count = CountIntervalElapsed(this->timer, delta_ms, TIMER_INTERVAL); + uint count = this->timer.CountElapsed(delta_ms); if (count > 0) { this->text_position -= count; /* If the last text has scrolled start a new from the start */ diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 0b0512544e..6a45304833 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -30,6 +30,7 @@ #include "textfile_gui.h" #include "tilehighlight_func.h" #include "fios.h" +#include "guitimer_func.h" #include "widgets/newgrf_widget.h" #include "widgets/misc_widget.h" @@ -150,7 +151,7 @@ struct NewGRFParametersWindow : public Window { bool clicked_increase; ///< True if the increase button was clicked, false for the decrease button. bool clicked_dropdown; ///< Whether the dropdown is open. bool closing_dropdown; ///< True, if the dropdown list is currently closing. - int timeout; ///< How long before we unpress the last-pressed button? + GUITimer timeout; ///< How long before we unpress the last-pressed button? uint clicked_row; ///< The selected parameter int line_height; ///< Height of a row in the matrix widget. Scrollbar *vscroll; @@ -162,7 +163,6 @@ struct NewGRFParametersWindow : public Window { clicked_button(UINT_MAX), clicked_dropdown(false), closing_dropdown(false), - timeout(0), clicked_row(UINT_MAX), editable(editable) { @@ -403,7 +403,7 @@ struct NewGRFParametersWindow : public Window { par_info->SetValue(this->grf_config, val); this->clicked_button = num; - this->timeout = 150; + this->timeout.SetInterval(150); } } else if (par_info->type == PTYPE_UINT_ENUM && !par_info->complete_labels && click_count >= 2) { /* Display a query box so users can enter a custom value. */ @@ -485,7 +485,7 @@ struct NewGRFParametersWindow : public Window { virtual void OnRealtimeTick(uint delta_ms) { - if (TimerElapsed(this->timeout, delta_ms)) { + if (timeout.Elapsed(delta_ms)) { this->clicked_button = UINT_MAX; this->SetDirty(); } diff --git a/src/news_gui.cpp b/src/news_gui.cpp index 183b27b90e..b79418c899 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -33,6 +33,7 @@ #include "command_func.h" #include "company_base.h" #include "settings_internal.h" +#include "guitimer_func.h" #include "widgets/news_widget.h" @@ -262,7 +263,7 @@ struct NewsWindow : Window { const NewsItem *ni; ///< News item to display. static int duration; ///< Remaining time for showing the current news message (may only be access while a news item is displayed). - uint timer; + GUITimer timer; NewsWindow(WindowDesc *desc, const NewsItem *ni) : Window(desc), ni(ni) { @@ -273,6 +274,8 @@ struct NewsWindow : Window { this->flags |= WF_DISABLE_VP_SCROLL; + this->timer.SetInterval(15); + this->CreateNestedTree(); /* For company news with a face we have a separate headline in param[0] */ @@ -489,7 +492,7 @@ struct NewsWindow : Window { virtual void OnRealtimeTick(uint delta_ms) { - int count = CountIntervalElapsed(this->timer, delta_ms, 15); + int count = this->timer.CountElapsed(delta_ms); if (count > 0) { /* Scroll up newsmessages from the bottom */ int newtop = max(this->top - 2 * count, _screen.height - this->height - this->status_height - this->chat_height); diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 447d25e4a0..df9fd2df23 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -23,6 +23,7 @@ #include "sound_func.h" #include "window_func.h" #include "company_base.h" +#include "guitimer_func.h" #include "smallmap_gui.h" @@ -1055,7 +1056,7 @@ void SmallMapWindow::SetupWidgetData() this->GetWidget(WID_SM_SELECT_BUTTONS)->SetDisplayedPlane(plane); } -SmallMapWindow::SmallMapWindow(WindowDesc *desc, int window_number) : Window(desc), refresh(FORCE_REFRESH_PERIOD) +SmallMapWindow::SmallMapWindow(WindowDesc *desc, int window_number) : Window(desc), refresh(GUITimer(FORCE_REFRESH_PERIOD)) { _smallmap_industry_highlight = INVALID_INDUSTRYTYPE; this->overlay = new LinkGraphOverlay(this, WID_SM_MAP, 0, this->GetOverlayCompanyMask(), 1); @@ -1390,7 +1391,7 @@ int SmallMapWindow::GetPositionOnLegend(Point pt) } if (new_highlight != _smallmap_industry_highlight) { _smallmap_industry_highlight = new_highlight; - this->refresh = _smallmap_industry_highlight != INVALID_INDUSTRYTYPE ? BLINK_PERIOD : FORCE_REFRESH_PERIOD; + this->refresh.SetInterval(_smallmap_industry_highlight != INVALID_INDUSTRYTYPE ? BLINK_PERIOD : FORCE_REFRESH_PERIOD); _smallmap_industry_highlight_state = true; this->SetDirty(); } @@ -1573,7 +1574,7 @@ int SmallMapWindow::GetPositionOnLegend(Point pt) /* virtual */ void SmallMapWindow::OnRealtimeTick(uint delta_ms) { /* Update the window every now and then */ - if (!TimerElapsed(this->refresh, delta_ms)) return; + if (!this->refresh.Elapsed(delta_ms)) return; if (this->map_type == SMT_LINKSTATS) { uint32 company_mask = this->GetOverlayCompanyMask(); @@ -1585,7 +1586,7 @@ int SmallMapWindow::GetPositionOnLegend(Point pt) } _smallmap_industry_highlight_state = !_smallmap_industry_highlight_state; - this->refresh = _smallmap_industry_highlight != INVALID_INDUSTRYTYPE ? BLINK_PERIOD : FORCE_REFRESH_PERIOD; + this->refresh.SetInterval(_smallmap_industry_highlight != INVALID_INDUSTRYTYPE ? BLINK_PERIOD : FORCE_REFRESH_PERIOD); this->SetDirty(); } diff --git a/src/smallmap_gui.h b/src/smallmap_gui.h index 60b39b7a3c..486f2a6524 100644 --- a/src/smallmap_gui.h +++ b/src/smallmap_gui.h @@ -19,6 +19,7 @@ #include "blitter/factory.hpp" #include "linkgraph/linkgraph_gui.h" #include "widgets/smallmap_widget.h" +#include "guitimer_func.h" /* set up the cargos to be displayed in the smallmap's route legend */ void BuildLinkStatsLegend(); @@ -79,7 +80,7 @@ protected: int32 subscroll; ///< Number of pixels (0..3) between the right end of the base tile and the pixel at the top-left corner of the smallmap display. int zoom; ///< Zoom level. Bigger number means more zoom-out (further away). - int refresh; ///< Refresh timer, in millseconds. + GUITimer refresh; ///< Refresh timer. LinkGraphOverlay *overlay; static void BreakIndustryChainLink(); diff --git a/src/statusbar_gui.cpp b/src/statusbar_gui.cpp index e45697130d..88ba495f34 100644 --- a/src/statusbar_gui.cpp +++ b/src/statusbar_gui.cpp @@ -26,6 +26,7 @@ #include "statusbar_gui.h" #include "toolbar_gui.h" #include "core/geometry_func.hpp" +#include "guitimer_func.h" #include "widgets/statusbar_widget.h" @@ -79,8 +80,8 @@ static bool DrawScrollingStatusText(const NewsItem *ni, int scroll_pos, int left struct StatusBarWindow : Window { bool saving; int ticker_scroll; - uint ticker_timer; - int reminder_timeout; + GUITimer ticker_timer; + GUITimer reminder_timeout; static const int TICKER_STOP = 1640; ///< scrolling is finished when counter reaches this value static const int REMINDER_START = 1350; ///< time in ms for reminder notification (red dot on the right) to stay @@ -89,8 +90,9 @@ struct StatusBarWindow : Window { StatusBarWindow(WindowDesc *desc) : Window(desc) { - this->ticker_scroll = TICKER_STOP; - this->reminder_timeout = REMINDER_STOP; + this->ticker_scroll = TICKER_STOP; + this->ticker_timer.SetInterval(15); + this->reminder_timeout.SetInterval(REMINDER_STOP); this->InitNested(); CLRBITS(this->flags, WF_WHITE_BORDER); @@ -180,7 +182,7 @@ struct StatusBarWindow : Window { } } - if (this->reminder_timeout > 0) { + if (!this->reminder_timeout.HasElapsed()) { Dimension icon_size = GetSpriteSize(SPR_UNREAD_NEWS); DrawSprite(SPR_UNREAD_NEWS, PAL_NONE, r.right - WD_FRAMERECT_RIGHT - icon_size.width, r.top + WD_FRAMERECT_TOP + (int)(FONT_HEIGHT_NORMAL - icon_size.height) / 2); } @@ -201,11 +203,10 @@ struct StatusBarWindow : Window { case SBI_SAVELOAD_START: this->saving = true; break; case SBI_SAVELOAD_FINISH: this->saving = false; break; case SBI_SHOW_TICKER: this->ticker_scroll = 0; break; - case SBI_SHOW_REMINDER: this->reminder_timeout = REMINDER_START; break; + case SBI_SHOW_REMINDER: this->reminder_timeout.SetInterval(REMINDER_START); break; case SBI_NEWS_DELETED: this->ticker_scroll = TICKER_STOP; // reset ticker ... - this->ticker_timer = 0; - this->reminder_timeout = REMINDER_STOP; // ... and reminder + this->reminder_timeout.SetInterval(REMINDER_STOP); // ... and reminder break; } } @@ -224,7 +225,7 @@ struct StatusBarWindow : Window { if (_pause_mode != PM_UNPAUSED) return; if (this->ticker_scroll < TICKER_STOP) { // Scrolling text - uint count = CountIntervalElapsed(this->ticker_timer, delta_ms, 15); + uint count = this->ticker_timer.CountElapsed(delta_ms); if (count > 0) { this->ticker_scroll += count; this->SetWidgetDirty(WID_S_MIDDLE); @@ -232,7 +233,7 @@ struct StatusBarWindow : Window { } // Red blot to show there are new unread newsmessages - if (TimerElapsed(this->reminder_timeout, delta_ms)) { + if (this->reminder_timeout.Elapsed(delta_ms)) { this->SetWidgetDirty(WID_S_MIDDLE); } } diff --git a/src/texteff.cpp b/src/texteff.cpp index 0f79f51c12..ee5ce592b4 100644 --- a/src/texteff.cpp +++ b/src/texteff.cpp @@ -16,7 +16,7 @@ #include "core/smallvec_type.hpp" #include "viewport_func.h" #include "settings_type.h" -#include "window_func.h" +#include "guitimer_func.h" #include "safeguards.h" @@ -85,8 +85,8 @@ void RemoveTextEffect(TextEffectID te_id) void MoveAllTextEffects(uint delta_ms) { - static uint texteffecttimer = 0; - uint count = CountIntervalElapsed(texteffecttimer, delta_ms, MILLISECONDS_PER_TICK); + static GUITimer texteffecttimer = GUITimer(MILLISECONDS_PER_TICK); + uint count = texteffecttimer.CountElapsed(delta_ms); if (count == 0) return; const TextEffect *end = _text_effects.End(); diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 4f0f140115..cd0f518dfd 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -48,6 +48,7 @@ #include "story_base.h" #include "toolbar_gui.h" #include "framerate_type.h" +#include "guitimer_func.h" #include "widgets/toolbar_widget.h" @@ -1978,7 +1979,7 @@ enum MainToolbarHotkeys { /** Main toolbar. */ struct MainToolbarWindow : Window { - int timer; + GUITimer timer; MainToolbarWindow(WindowDesc *desc) : Window(desc) { @@ -1991,7 +1992,7 @@ struct MainToolbarWindow : Window { PositionMainToolbar(this); DoZoomInOutWindow(ZOOM_NONE, this); - this->timer = MILLISECONDS_PER_TICK; + this->timer.SetInterval(MILLISECONDS_PER_TICK); } virtual void FindWindowPlacementAndResize(int def_width, int def_height) @@ -2098,8 +2099,8 @@ struct MainToolbarWindow : Window { virtual void OnRealtimeTick(uint delta_ms) { - if (!TimerElapsed(this->timer, delta_ms)) return; - this->timer = MILLISECONDS_PER_TICK; + if (!this->timer.Elapsed(delta_ms)) return; + this->timer.SetInterval(MILLISECONDS_PER_TICK); if (this->IsWidgetLowered(WID_TN_PAUSE) != !!_pause_mode) { this->ToggleWidgetLoweredState(WID_TN_PAUSE); @@ -2317,7 +2318,7 @@ enum MainToolbarEditorHotkeys { }; struct ScenarioEditorToolbarWindow : Window { - int timer; + GUITimer timer; ScenarioEditorToolbarWindow(WindowDesc *desc) : Window(desc) { @@ -2328,7 +2329,7 @@ struct ScenarioEditorToolbarWindow : Window { PositionMainToolbar(this); DoZoomInOutWindow(ZOOM_NONE, this); - this->timer = MILLISECONDS_PER_TICK; + this->timer.SetInterval(MILLISECONDS_PER_TICK); } virtual void FindWindowPlacementAndResize(int def_width, int def_height) @@ -2458,8 +2459,8 @@ struct ScenarioEditorToolbarWindow : Window { virtual void OnRealtimeTick(uint delta_ms) { - if (!TimerElapsed(this->timer, delta_ms)) return; - this->timer = MILLISECONDS_PER_TICK; + if (!this->timer.Elapsed(delta_ms)) return; + this->timer.SetInterval(MILLISECONDS_PER_TICK); if (this->IsWidgetLowered(WID_TE_PAUSE) != !!_pause_mode) { this->ToggleWidgetLoweredState(WID_TE_PAUSE); diff --git a/src/window.cpp b/src/window.cpp index efa206d565..bbde131a4b 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -38,6 +38,7 @@ #include "video/video_driver.hpp" #include "framerate_type.h" #include "network/network_func.h" +#include "guitimer_func.h" #include "safeguards.h" @@ -3099,17 +3100,17 @@ void UpdateWindows() CallWindowRealtimeTickEvent(delta_ms); - static int network_message_timer = 1; - if (TimerElapsed(network_message_timer, delta_ms)) { - network_message_timer = 1000; + static GUITimer network_message_timer = GUITimer(1); + if (network_message_timer.Elapsed(delta_ms)) { + network_message_timer.SetInterval(1000); NetworkChatMessageLoop(); } Window *w; - static int window_timer = 1; - if (TimerElapsed(window_timer, delta_ms)) { - window_timer = MILLISECONDS_PER_TICK; + static GUITimer window_timer = GUITimer(1); + if (window_timer.Elapsed(delta_ms)) { + if (_network_dedicated) window_timer.SetInterval(MILLISECONDS_PER_TICK); extern int _caret_timer; _caret_timer += 3; @@ -3120,9 +3121,9 @@ void UpdateWindows() DecreaseWindowCounters(); } - static int highlight_timer = 1; - if (TimerElapsed(highlight_timer, delta_ms)) { - highlight_timer = 450; + static GUITimer highlight_timer = GUITimer(1); + if (highlight_timer.Elapsed(delta_ms)) { + highlight_timer.SetInterval(450); _window_highlight_colour = !_window_highlight_colour; } @@ -3137,16 +3138,18 @@ void UpdateWindows() * But still empty the invalidation queues above. */ if (_network_dedicated) return; - static int hundredth_timer = 1; - if (TimerElapsed(hundredth_timer, delta_ms)) { - hundredth_timer = 3000; // Historical reason: 100 * MILLISECONDS_PER_TICK + static GUITimer hundredth_timer = GUITimer(1); + if (hundredth_timer.Elapsed(delta_ms)) { + hundredth_timer.SetInterval(3000); // Historical reason: 100 * MILLISECONDS_PER_TICK FOR_ALL_WINDOWS_FROM_FRONT(w) { w->OnHundredthTick(); } } - if (window_timer == MILLISECONDS_PER_TICK) { // window_timer has elapsed this call + if (window_timer.HasElapsed()) { + window_timer.SetInterval(MILLISECONDS_PER_TICK); + FOR_ALL_WINDOWS_FROM_FRONT(w) { if ((w->flags & WF_WHITE_BORDER) && --w->white_border_timer == 0) { CLRBITS(w->flags, WF_WHITE_BORDER); diff --git a/src/window_func.h b/src/window_func.h index f2ae638fe7..453b889789 100644 --- a/src/window_func.h +++ b/src/window_func.h @@ -56,36 +56,4 @@ void DeleteWindowByClass(WindowClass cls); bool EditBoxInGlobalFocus(); Point GetCaretPosition(); -/** - * Count how many times the interval has elapsed, and update the timer. - * Use to ensure a specific amount of events happen within a timeframe, e.g. for animation. - * The timer value does not need to be initialised. - * @param timer Timer to test. Value will be increased. - * @param delta Time since last test. - * @param interval Timing interval. - * @return Number of times the interval has elapsed. - */ -static inline uint CountIntervalElapsed(uint &timer, uint delta, uint interval) -{ - uint count = delta / interval; - if (timer + (delta % interval) >= interval) count++; - timer = (timer + delta) % interval; - return count; -} - -/** - * Test if a timer has elapsed, and update the timer. - * Use to ensure an event happens only once within a timeframe, e.g. for window updates. - * The timer value must be initialised in order for the timer to elapsed. - * @param timer Timer to test. Value will be decreased. - * @param delta Time since last test. - * @return True iff the timer has elapsed. - */ -static inline bool TimerElapsed(int &timer, uint delta) -{ - if (timer <= 0) return false; - timer -= delta; - return timer <= 0; -} - #endif /* WINDOW_FUNC_H */ From c693463c29f98f763cc4dd6346527262b34ff6ea Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 20 May 2018 13:03:09 +0100 Subject: [PATCH 156/622] Fix: Always draw dirty blocks, else fast-forward is super fast. --- src/window.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/window.cpp b/src/window.cpp index bbde131a4b..7a7a2a1825 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -3156,10 +3156,10 @@ void UpdateWindows() w->SetDirty(); } } - - DrawDirtyBlocks(); } + DrawDirtyBlocks(); + FOR_ALL_WINDOWS_FROM_BACK(w) { /* Update viewport only if window is not shaded. */ if (w->viewport != NULL && !w->IsShaded()) UpdateViewportPosition(w); From f99f993e99b662fe3621013d3468c3d75a12ecac Mon Sep 17 00:00:00 2001 From: Andy Date: Fri, 11 Jan 2019 12:41:12 +0000 Subject: [PATCH 157/622] Doc: replace 4 references to SVN with Git #6698 (#7036) --- README.md | 4 ++-- docs/HOWTO_compile_lang_files.txt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 96d3e49f36..6004bdc7f5 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ When you are sure it is not already reported you should: After you have done all that you can report the bug. Please include the following information in your bug report: -- OpenTTD version (PLEASE test the latest SVN/nightly build) +- OpenTTD version (PLEASE test the latest Git revision/nightly build) - Bug details, including instructions how to reproduce it - Platform (Windows, Linux, FreeBSD, …) and compiler (including version) if you compiled OpenTTD yourself. @@ -655,7 +655,7 @@ someone else may have already started translating to the same language. So, now that you have notified the development team about your intention to translate (You did, right? Of course you did.) you can pick up english.txt -(found in the SVN repository under /src/lang) and translate. +(found in the Git repository under /src/lang) and translate. You must change the first two lines of the file appropriately: diff --git a/docs/HOWTO_compile_lang_files.txt b/docs/HOWTO_compile_lang_files.txt index c56f97a621..547854e508 100644 --- a/docs/HOWTO_compile_lang_files.txt +++ b/docs/HOWTO_compile_lang_files.txt @@ -29,7 +29,7 @@ english.txt to work. Below are some examples of strgen usage. 1.1) Examples ---- -------- Example 1: -if you are in the root of your working copy (svn code), you should type +if you are in the root of your working copy (git repository), you should type strgen/strgen -s lang lang/english.txt to compile englist.txt into english.lng. It will be placed in the lang dir @@ -50,7 +50,7 @@ You can interchange english.txt to whichever language you want to generate a 1.2) strgen command switches ---- ----------------------- -v | --version -strgen will tell what svn revision it was last modified +strgen will tell what git revision it was last modified -t | --todo strgen will add to any untranslated/missing strings and use the english From fa95af2da8ddca0ddcef2b2e1a781818c8dd08da Mon Sep 17 00:00:00 2001 From: nikolas Date: Fri, 11 Jan 2019 10:08:02 -0500 Subject: [PATCH 158/622] Codechange: Fix typo in variable name: pices -> pieces (#7033) --- src/company_gui.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/company_gui.cpp b/src/company_gui.cpp index ac9ca9bda9..c62c6d61cf 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -2194,16 +2194,16 @@ struct CompanyWindow : Window uint y = r.top; /* Collect rail and road counts. */ - uint rail_pices = c->infrastructure.signal; + uint rail_pieces = c->infrastructure.signal; uint road_pieces = 0; - for (uint i = 0; i < lengthof(c->infrastructure.rail); i++) rail_pices += c->infrastructure.rail[i]; + for (uint i = 0; i < lengthof(c->infrastructure.rail); i++) rail_pieces += c->infrastructure.rail[i]; for (uint i = 0; i < lengthof(c->infrastructure.road); i++) road_pieces += c->infrastructure.road[i]; - if (rail_pices == 0 && road_pieces == 0 && c->infrastructure.water == 0 && c->infrastructure.station == 0 && c->infrastructure.airport == 0) { + if (rail_pieces == 0 && road_pieces == 0 && c->infrastructure.water == 0 && c->infrastructure.station == 0 && c->infrastructure.airport == 0) { DrawString(r.left, r.right, y, STR_COMPANY_VIEW_INFRASTRUCTURE_NONE); } else { - if (rail_pices != 0) { - SetDParam(0, rail_pices); + if (rail_pieces != 0) { + SetDParam(0, rail_pieces); DrawString(r.left, r.right, y, STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL); y += FONT_HEIGHT_NORMAL; } From c80608a83c774376e0bb65043e9218631b553867 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 11 Jan 2019 19:45:46 +0100 Subject: [PATCH 159/622] Update: Translations from eints spanish: 3 changes by SilverSurferZzZ spanish (mexican): 3 changes by Absay --- src/lang/spanish.txt | 5 +++-- src/lang/spanish_MX.txt | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 75550babea..2679486be2 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -190,6 +190,7 @@ STR_COLOUR_ORANGE :Naranja STR_COLOUR_BROWN :Marrón STR_COLOUR_GREY :Gris STR_COLOUR_WHITE :Blanco +STR_COLOUR_RANDOM :Aleatorio # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -374,7 +375,7 @@ STR_SCENEDIT_FILE_MENU_QUIT :Salir ############ range for settings menu starts STR_SETTINGS_MENU_GAME_OPTIONS :Opciones de juego STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Configuración -STR_SETTINGS_MENU_SCRIPT_SETTINGS :Configuración de scripts +STR_SETTINGS_MENU_SCRIPT_SETTINGS :Configuración de Scripts STR_SETTINGS_MENU_NEWGRF_SETTINGS :Configuración NewGRF STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Opciones de transparencia STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Ver nombres de municipios @@ -4021,7 +4022,7 @@ STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Comproba STR_ERROR_AI_NO_AI_FOUND :No se encontró IA apropiada para cargar.{}Ésta es una IA por defecto que no realiza acción alguna.{}Puedes descargar nuevas IA mediante el sistema de 'Contenido Online' STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Uno de los scripts ejecutados ha fallado. Por favor, informe del fallo al autor del script con una captura de la ventana de depuración de Script / IA -STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}La ventana de depuración de scripts solo está disponible para el servidor +STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}La ventana de depuración de Scripts solo está disponible para el servidor # AI configuration window STR_AI_CONFIG_CAPTION :{WHITE}Configuración de Scripts de Juego / IA diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 194364b1e9..6807929a4f 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -190,6 +190,7 @@ STR_COLOUR_ORANGE :Naranja STR_COLOUR_BROWN :Café STR_COLOUR_GREY :Gris STR_COLOUR_WHITE :Blanco +STR_COLOUR_RANDOM :Aleatorio # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -1259,6 +1260,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}No se pu STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Mantenimiento de infraestructura: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Cuando se activa, la infraestructura tiene costo de mantenimiento, el cual aumenta en relación con el tamaño de la red de transporte. Esto afecta en mayor medida a las empresas grandes que a las pequeñas +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Color inicial de la empresa: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Elegir el color inicial de la empresa STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aeropuertos siempre disponibles: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Los tipos de aeropuertos estarán disponibles todo el tiempo tras haber sido introducidos From 65746a02757fc56bf72ec58121bc2bae26798585 Mon Sep 17 00:00:00 2001 From: Nikolas Nyby Date: Thu, 10 Jan 2019 19:56:41 -0500 Subject: [PATCH 160/622] Fix: Spelling fixes on some Latin American town names --- src/table/townname.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/table/townname.h b/src/table/townname.h index 25c997d255..7f1f1b62bf 100644 --- a/src/table/townname.h +++ b/src/table/townname.h @@ -639,7 +639,7 @@ static const char * const _name_spanish_real[] = { "Barcelona", "Barinas", "San Crist\xC3\xB3""bal", - "San Fransisco", + "San Francisco", "San Mart\xC3\xADn", "Guayana", "San Carlos", @@ -650,14 +650,14 @@ static const char * const _name_spanish_real[] = { "Elorza", "Arismendi", "Trujillo", - "Carupano", + "Car\xC3\xBApano", "Anaco", "Lima", "Cuzco", "Iquitos", "Callao", "Huacho", - "Camana", + "Caman\xC3\xA1", "Puerto Chala", "Santa Cruz", "Quito", @@ -684,12 +684,12 @@ static const char * const _name_spanish_real[] = { "Potos\xC3\xAD", "Tupiza", "La Quiaca", - "Yacuiba", + "Yacu\xC3\xAD""ba", "San Borja", - "Fuerte Olimpio", + "Fuerte Olimpo", "Fort\xC3\xADn Esteros", "Campo Grande", - "Bogota", + "Bogot\xC3\xA1", "El Banco", "Zaragoza", "Neiva", From 06cd561cea26c41553b7a6b327a7ac1fbdea23d2 Mon Sep 17 00:00:00 2001 From: "Johannes E. Krause" Date: Mon, 7 Jan 2019 21:28:21 +0100 Subject: [PATCH 161/622] Add: when placing non-rectangular airport, consider airport tile table tiles only (patch by adf88, #6613) --- src/station_cmd.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 16f135df25..b4c7523606 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -771,22 +771,22 @@ CommandCost CheckBuildableTile(TileIndex tile, uint invalid_dirs, int &allowed_z } /** - * Tries to clear the given area. - * @param tile_area Area to check. + * Checks if an airport can be built at the given location and clear the area. + * @param tile_iter Airport tile iterator. * @param flags Operation to perform. * @return The cost in case of success, or an error code if it failed. */ -CommandCost CheckFlatLand(TileArea tile_area, DoCommandFlag flags) +static CommandCost CheckFlatLandAirport(AirportTileTableIterator tile_iter, DoCommandFlag flags) { CommandCost cost(EXPENSES_CONSTRUCTION); int allowed_z = -1; - TILE_AREA_LOOP(tile_cur, tile_area) { - CommandCost ret = CheckBuildableTile(tile_cur, 0, allowed_z, true); + for (; tile_iter != INVALID_TILE; ++tile_iter) { + CommandCost ret = CheckBuildableTile(tile_iter, 0, allowed_z, true); if (ret.Failed()) return ret; cost.AddCost(ret); - ret = DoCommand(tile_cur, 0, 0, flags, CMD_LANDSCAPE_CLEAR); + ret = DoCommand(tile_iter, 0, 0, flags, CMD_LANDSCAPE_CLEAR); if (ret.Failed()) return ret; cost.AddCost(ret); } @@ -2218,11 +2218,11 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint return_cmd_error(STR_ERROR_STATION_TOO_SPREAD_OUT); } - CommandCost cost = CheckFlatLand(airport_area, flags); + AirportTileTableIterator iter(as->table[layout], tile); + CommandCost cost = CheckFlatLandAirport(iter, flags); if (cost.Failed()) return cost; /* The noise level is the noise from the airport and reduce it to account for the distance to the town center. */ - AirportTileTableIterator iter(as->table[layout], tile); Town *nearest = AirportGetNearestTown(as, iter); uint newnoise_level = GetAirportNoiseLevelForTown(as, iter, nearest->xy); From 82e530b5172f12bb638a64f9c80c705a03559286 Mon Sep 17 00:00:00 2001 From: nikolas Date: Sat, 12 Jan 2019 02:33:13 -0500 Subject: [PATCH 162/622] Fix: Remove duplicate town name "Huacho" (#7038) Huacho appears twice in the Spanish town names list. This change removes the second one, and replaces it with a new one: Medellin. --- src/table/townname.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/table/townname.h b/src/table/townname.h index 7f1f1b62bf..ce4e961751 100644 --- a/src/table/townname.h +++ b/src/table/townname.h @@ -662,7 +662,7 @@ static const char * const _name_spanish_real[] = { "Santa Cruz", "Quito", "Cuenca", - "Huacho", + "Medell\xC3\xADn", "Tulc\xC3\xA1n", "Esmeraldas", "Ibarra", From 0f9d1019e64db8fe2413ee730d99aa48c078da6c Mon Sep 17 00:00:00 2001 From: Nikolas Nyby Date: Thu, 10 Jan 2019 22:27:37 -0500 Subject: [PATCH 163/622] Add: Mexican Peso currency OpenTTD doesn't have any pesos, so I've added Mexican pesos, at its current exchange rate: 1GBP = 24.39MXN, rounded to 24. --- src/currency.cpp | 1 + src/currency.h | 1 + src/lang/english.txt | 1 + 3 files changed, 3 insertions(+) diff --git a/src/currency.cpp b/src/currency.cpp index 615c5113bb..b87f77393b 100644 --- a/src/currency.cpp +++ b/src/currency.cpp @@ -63,6 +63,7 @@ static const CurrencySpec origin_currency_specs[CURRENCY_END] = { { 3, "", CF_NOEURO, "", NBSP "GEL", 1, STR_GAME_OPTIONS_CURRENCY_GEL }, ///< Georgian Lari { 4901, "", CF_NOEURO, "", NBSP "Rls", 1, STR_GAME_OPTIONS_CURRENCY_IRR }, ///< Iranian Rial { 80, "", CF_NOEURO, "", NBSP "rub", 1, STR_GAME_OPTIONS_CURRENCY_RUB }, ///< New Russian Ruble + { 24, "", CF_NOEURO, "$", "", 0, STR_GAME_OPTIONS_CURRENCY_MXN }, ///< Mexican peso }; /** Array of currencies used by the system */ diff --git a/src/currency.h b/src/currency.h index 2529aca11f..401df5ec1f 100644 --- a/src/currency.h +++ b/src/currency.h @@ -59,6 +59,7 @@ enum Currencies { CURRENCY_GEL, ///< Georgian Lari CURRENCY_IRR, ///< Iranian Rial CURRENCY_RUB, ///< New Russian Ruble + CURRENCY_MXN, ///< Mexican Peso CURRENCY_END, ///< always the last item }; diff --git a/src/lang/english.txt b/src/lang/english.txt index c0231557ce..e272dd1688 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -930,6 +930,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Custom... STR_GAME_OPTIONS_CURRENCY_GEL :Georgian Lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Iranian Rial (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :New Russian Ruble (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Mexican Peso (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Road vehicles From 96854b2b8bea85926113326e1fd37ee357f7e59e Mon Sep 17 00:00:00 2001 From: Joan Josep Date: Sat, 12 Jan 2019 18:04:04 +0100 Subject: [PATCH 164/622] Codechange #5859: Simplify CheckTrainStayInDepot() (#7045) --- src/train_cmd.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index c8387d0a95..01aa946edb 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -2149,12 +2149,10 @@ static bool CheckTrainStayInDepot(Train *v) seg_state = _settings_game.pf.reserve_paths ? SIGSEG_PBS : UpdateSignalsOnSegment(v->tile, INVALID_DIAGDIR, v->owner); } - /* We are leaving a depot, but have to go to the exact same one; re-enter */ + /* We are leaving a depot, but have to go to the exact same one; re-enter. */ if (v->current_order.IsType(OT_GOTO_DEPOT) && v->tile == v->dest_tile) { - /* We need to have a reservation for this to work. */ - if (HasDepotReservation(v->tile)) return true; - SetDepotReservation(v->tile, true); - VehicleEnterDepot(v); + /* Service when depot has no reservation. */ + if (!HasDepotReservation(v->tile)) VehicleEnterDepot(v); return true; } From 9aecbac2b4a4137abc44ff12a672916ec7482047 Mon Sep 17 00:00:00 2001 From: Joan Josep Date: Sun, 13 Jan 2019 00:20:10 +0100 Subject: [PATCH 165/622] Codechange: Define INVALID_TOWN as a TownID (#7044) --- src/road_cmd.cpp | 6 +++--- src/town.h | 2 +- src/town_cmd.cpp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index bdc8ce7f30..175e776e5e 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -333,7 +333,7 @@ static CommandCost RemoveRoad(TileIndex tile, DoCommandFlag flags, RoadBits piec if (rt == ROADTYPE_ROAD && IsRoadOwner(tile, ROADTYPE_ROAD, OWNER_TOWN)) { /* Update nearest-town index */ const Town *town = CalcClosestTownFromTile(tile); - SetTownIndex(tile, town == NULL ? (TownID)INVALID_TOWN : town->index); + SetTownIndex(tile, town == NULL ? INVALID_TOWN : town->index); } SetRoadBits(tile, ROAD_NONE, rt); SetRoadTypes(tile, rts); @@ -494,7 +494,7 @@ CommandCost CmdBuildRoad(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 if ((Company::IsValidID(company) && p2 != 0) || (company == OWNER_TOWN && !Town::IsValidID(p2)) || (company == OWNER_DEITY && p2 != 0)) return CMD_ERROR; if (company != OWNER_TOWN) { const Town *town = CalcClosestTownFromTile(tile); - p2 = (town != NULL) ? town->index : (TownID)INVALID_TOWN; + p2 = (town != NULL) ? town->index : INVALID_TOWN; if (company == OWNER_DEITY) { company = OWNER_TOWN; @@ -1444,7 +1444,7 @@ void UpdateNearestTownForRoadTiles(bool invalidate) for (TileIndex t = 0; t < MapSize(); t++) { if (IsTileType(t, MP_ROAD) && !IsRoadDepot(t) && !HasTownOwnedRoad(t)) { - TownID tid = (TownID)INVALID_TOWN; + TownID tid = INVALID_TOWN; if (!invalidate) { const Town *town = CalcClosestTownFromTile(t); if (town != NULL) tid = town->index; diff --git a/src/town.h b/src/town.h index 19a4118bad..a905ea837b 100644 --- a/src/town.h +++ b/src/town.h @@ -31,7 +31,7 @@ typedef TileMatrix AcceptanceMatrix; static const uint CUSTOM_TOWN_NUMBER_DIFFICULTY = 4; ///< value for custom town number in difficulty settings static const uint CUSTOM_TOWN_MAX_NUMBER = 5000; ///< this is the maximum number of towns a user can specify in customisation -static const uint INVALID_TOWN = 0xFFFF; +static const TownID INVALID_TOWN = 0xFFFF; static const uint TOWN_GROWTH_WINTER = 0xFFFFFFFE; ///< The town only needs this cargo in the winter (any amount) static const uint TOWN_GROWTH_DESERT = 0xFFFFFFFF; ///< The town needs the cargo for growth when on desert (any amount) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 927651864f..4289d901a1 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -3335,7 +3335,7 @@ Town *ClosestTownFromTile(TileIndex tile, uint threshold) if (!HasTownOwnedRoad(tile)) { TownID tid = GetTownIndex(tile); - if (tid == (TownID)INVALID_TOWN) { + if (tid == INVALID_TOWN) { /* in the case we are generating "many random towns", this value may be INVALID_TOWN */ if (_generating_world) return CalcClosestTownFromTile(tile, threshold); assert(Town::GetNumItems() == 0); From 5ff0c24993c52546f1809e87a036d1e8f21d6e17 Mon Sep 17 00:00:00 2001 From: PeterN Date: Sat, 12 Jan 2019 23:23:23 +0000 Subject: [PATCH 166/622] Fix #6780: Some windows didn't get updated from OnTick() (#7048) --- src/ai/ai_gui.cpp | 9 +++++---- src/framerate_gui.cpp | 25 ++++++++++++++----------- src/network/network_gui.cpp | 9 ++++++++- src/widgets/dropdown.cpp | 8 +++++++- src/window.cpp | 2 +- 5 files changed, 35 insertions(+), 18 deletions(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 101a97d0a9..4b248f5efc 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -29,6 +29,7 @@ #include "../widgets/dropdown_func.h" #include "../hotkeys.h" #include "../core/geometry_func.hpp" +#include "../guitimer_func.h" #include "ai.hpp" #include "ai_gui.hpp" @@ -286,7 +287,7 @@ struct AISettingsWindow : public Window { bool clicked_increase; ///< Whether we clicked the increase or decrease button. bool clicked_dropdown; ///< Whether the dropdown is open. bool closing_dropdown; ///< True, if the dropdown list is currently closing. - int timeout; ///< Timeout for unclicking the button. + GUITimer timeout; ///< Timeout for unclicking the button. int clicked_row; ///< The clicked row of settings. int line_height; ///< Height of a row in the matrix widget. Scrollbar *vscroll; ///< Cache of the vertical scrollbar. @@ -505,7 +506,7 @@ struct AISettingsWindow : public Window { if (new_val != old_val) { this->ai_config->SetSetting(config_item.name, new_val); this->clicked_button = num; - this->timeout = 5; + this->timeout.SetInterval(150); } } else if (!bool_item && !config_item.complete_labels) { /* Display a query box so users can enter a custom value. */ @@ -568,9 +569,9 @@ struct AISettingsWindow : public Window { this->vscroll->SetCapacityFromWidget(this, WID_AIS_BACKGROUND); } - virtual void OnTick() + virtual void OnRealtimeTick(uint delta_ms) { - if (--this->timeout == 0) { + if (this->timeout.Elapsed(delta_ms)) { this->clicked_button = -1; this->SetDirty(); } diff --git a/src/framerate_gui.cpp b/src/framerate_gui.cpp index 7e8e5f34fd..908cf81c0b 100644 --- a/src/framerate_gui.cpp +++ b/src/framerate_gui.cpp @@ -15,9 +15,9 @@ #include "window_gui.h" #include "table/sprites.h" #include "strings_func.h" -#include "debug.h" #include "console_func.h" #include "console_type.h" +#include "guitimer_func.h" #include "widgets/framerate_widget.h" @@ -295,7 +295,7 @@ static const NWidgetPart _framerate_window_widgets[] = { struct FramerateWindow : Window { bool small; - uint32 next_update; + GUITimer next_update; struct CachedDecimal { StringID strid; @@ -339,21 +339,24 @@ struct FramerateWindow : Window { this->InitNested(number); this->small = this->IsShaded(); this->UpdateData(); + this->next_update.SetInterval(100); } - virtual void OnTick() + virtual void OnRealtimeTick(uint delta_ms) { + bool elapsed = this->next_update.Elapsed(delta_ms); + /* Check if the shaded state has changed, switch caption text if it has */ if (this->small != this->IsShaded()) { this->small = this->IsShaded(); this->GetWidget(WID_FRW_CAPTION)->SetDataTip(this->small ? STR_FRAMERATE_CAPTION_SMALL : STR_FRAMERATE_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS); - this->next_update = 0; + elapsed = true; } - if (_realtime_tick >= this->next_update) { + if (elapsed) { this->UpdateData(); this->SetDirty(); - this->next_update = _realtime_tick + 100; + this->next_update.SetInterval(100); } } @@ -527,7 +530,7 @@ static const NWidgetPart _frametime_graph_window_widgets[] = { struct FrametimeGraphWindow : Window { int vertical_scale; ///< number of TIMESTAMP_PRECISION units vertically int horizontal_scale; ///< number of half-second units horizontally - uint32 next_scale_update; ///< realtime tick for next scale update + GUITimer next_scale_update; ///< interval for next scale update PerformanceElement element; ///< what element this window renders graph for Dimension graph_size; ///< size of the main graph area (excluding axis labels) @@ -537,7 +540,7 @@ struct FrametimeGraphWindow : Window { this->element = (PerformanceElement)number; this->horizontal_scale = 4; this->vertical_scale = TIMESTAMP_PRECISION / 10; - this->next_scale_update = 0; + this->next_scale_update.SetInterval(1); this->InitNested(number); } @@ -649,12 +652,12 @@ struct FrametimeGraphWindow : Window { this->SelectVerticalScale(peak_value); } - virtual void OnTick() + virtual void OnRealtimeTick(uint delta_ms) { this->SetDirty(); - if (this->next_scale_update < _realtime_tick) { - this->next_scale_update = _realtime_tick + 500; + if (this->next_scale_update.Elapsed(delta_ms)) { + this->next_scale_update.SetInterval(500); this->UpdateScale(); } } diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 3e4a4b0501..65ecb3b99a 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -31,6 +31,7 @@ #include "../core/geometry_func.hpp" #include "../genworld.h" #include "../map_type.h" +#include "../guitimer_func.h" #include "../widgets/network_widget.h" @@ -234,6 +235,7 @@ protected: Scrollbar *vscroll; ///< vertical scrollbar of the list of servers QueryString name_editbox; ///< Client name editbox. QueryString filter_editbox; ///< Editbox for filter on servers + GUITimer requery_timer; ///< Timer for network requery int lock_offset; ///< Left offset for lock icon. int blot_offset; ///< Left offset for green/yellow/red compatibility icon. @@ -480,6 +482,8 @@ public: this->server = this->last_joined; if (this->last_joined != NULL) NetworkUDPQueryServer(this->last_joined->address); + this->requery_timer.SetInterval(MILLISECONDS_PER_TICK); + this->servers.SetListing(this->last_sorting); this->servers.SetSortFuncs(this->sorter_funcs); this->servers.SetFilterFuncs(this->filter_funcs); @@ -903,8 +907,11 @@ public: this->vscroll->SetCapacityFromWidget(this, WID_NG_MATRIX); } - virtual void OnTick() + virtual void OnRealtimeTick(uint delta_ms) { + if (!this->requery_timer.Elapsed(delta_ms)) return; + this->requery_timer.SetInterval(MILLISECONDS_PER_TICK); + NetworkGameListRequery(); } }; diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp index f8ddf55695..816e981a14 100644 --- a/src/widgets/dropdown.cpp +++ b/src/widgets/dropdown.cpp @@ -14,6 +14,7 @@ #include "../string_func.h" #include "../strings_func.h" #include "../window_func.h" +#include "../guitimer_func.h" #include "dropdown_type.h" #include "dropdown_widget.h" @@ -97,6 +98,7 @@ struct DropdownWindow : Window { bool drag_mode; bool instant_close; ///< Close the window when the mouse button is raised. int scrolling; ///< If non-zero, auto-scroll the item list (one time). + GUITimer scrolling_timer; ///< Timer for auto-scroll of the item list. Point position; ///< Position of the topleft corner of the window. Scrollbar *vscroll; @@ -155,6 +157,7 @@ struct DropdownWindow : Window { this->click_delay = 0; this->drag_mode = true; this->instant_close = instant_close; + this->scrolling_timer = GUITimer(MILLISECONDS_PER_TICK); } ~DropdownWindow() @@ -254,8 +257,11 @@ struct DropdownWindow : Window { } } - virtual void OnTick() + virtual void OnRealtimeTick(uint delta_ms) { + if (!this->scrolling_timer.Elapsed(delta_ms)) return; + this->scrolling_timer.SetInterval(MILLISECONDS_PER_TICK); + if (this->scrolling != 0) { int pos = this->vscroll->GetPosition(); diff --git a/src/window.cpp b/src/window.cpp index 7a7a2a1825..cd75113536 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -3304,7 +3304,7 @@ void InvalidateWindowClassesData(WindowClass cls, int data, bool gui_scope) } /** - * Dispatch OnTick event over all windows + * Dispatch OnGameTick event over all windows */ void CallWindowGameTickEvent() { From 4fc1b2baaefad669b51d88f980aaf33670795f26 Mon Sep 17 00:00:00 2001 From: nikolas Date: Sun, 13 Jan 2019 02:38:48 -0500 Subject: [PATCH 167/622] Fix: Grammar in a bunch of comments (#7054) --- src/core/random_func.hpp | 2 +- src/tile_map.h | 4 ++-- src/town_type.h | 2 +- src/townname.cpp | 12 ++++++------ src/townname_type.h | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/core/random_func.hpp b/src/core/random_func.hpp index 0c6b8f1ca7..ae476624e8 100644 --- a/src/core/random_func.hpp +++ b/src/core/random_func.hpp @@ -29,7 +29,7 @@ struct Randomizer { void SetSeed(uint32 seed); }; extern Randomizer _random; ///< Random used in the game state calculations -extern Randomizer _interactive_random; ///< Random used every else where is does not (directly) influence the game state +extern Randomizer _interactive_random; ///< Random used everywhere else, where it does not (directly) influence the game state /** Stores the state of all random number generators */ struct SavedRandomSeeds { diff --git a/src/tile_map.h b/src/tile_map.h index 7ee5727bea..89f532e4f0 100644 --- a/src/tile_map.h +++ b/src/tile_map.h @@ -132,9 +132,9 @@ static inline void SetTileType(TileIndex tile, TileType type) } /** - * Checks if a tile is a give tiletype. + * Checks if a tile is a given tiletype. * - * This function checks if a tile got the given tiletype. + * This function checks if a tile has the given tiletype. * * @param tile The tile to check * @param type The type to check against diff --git a/src/town_type.h b/src/town_type.h index 39deb61677..0c93c8df85 100644 --- a/src/town_type.h +++ b/src/town_type.h @@ -54,7 +54,7 @@ enum Ratings { RATING_GROWTH_UP_STEP = 5, ///< when a town grows, all companies have rating increased a bit ... RATING_GROWTH_MAXIMUM = RATING_MEDIOCRE, ///< ... up to RATING_MEDIOCRE RATING_STATION_UP_STEP = 12, ///< when a town grows, company gains reputation for all well serviced stations ... - RATING_STATION_DOWN_STEP = -15, ///< ... but loses for bad serviced stations + RATING_STATION_DOWN_STEP = -15, ///< ... but loses for badly serviced stations RATING_TUNNEL_BRIDGE_DOWN_STEP = -250, ///< penalty for removing town owned tunnel or bridge RATING_TUNNEL_BRIDGE_MINIMUM = 0, ///< minimum rating after removing tunnel or bridge diff --git a/src/townname.cpp b/src/townname.cpp index 2067fa1bb3..b6d55f1ef4 100644 --- a/src/townname.cpp +++ b/src/townname.cpp @@ -121,17 +121,17 @@ bool VerifyTownName(uint32 r, const TownNameParams *par, TownNames *town_names) */ bool GenerateTownName(uint32 *townnameparts, TownNames *town_names) { - /* Do not set too low tries, since when we run out of names, we loop - * for #tries only one time anyway - then we stop generating more - * towns. Do not show it too high neither, since looping through all - * the other towns may take considerable amount of time (10000 is - * too much). */ TownNameParams par(_settings_game.game_creation.town_name); /* This function is called very often without entering the gameloop * inbetween. So reset layout cache to prevent it from growing too big. */ Layouter::ReduceLineCache(); + /* Do not set i too low, since when we run out of names, we loop + * for #tries only one time anyway - then we stop generating more + * towns. Do not set it too high either, since looping through all + * the other towns may take considerable amount of time (10000 is + * too much). */ for (int i = 1000; i != 0; i--) { uint32 r = _generating_world ? Random() : InteractiveRandom(); if (!VerifyTownName(r, &par, town_names)) continue; @@ -1045,7 +1045,7 @@ static const TownNameGeneratorParams _town_name_generators[] = { /** - * Generates town name from given seed. a language. + * Generates town name from given seed. * @param buf output buffer * @param last end of buffer * @param lang town name language diff --git a/src/townname_type.h b/src/townname_type.h index 0177294d99..ba8f926861 100644 --- a/src/townname_type.h +++ b/src/townname_type.h @@ -23,7 +23,7 @@ typedef std::set TownNames; /** - * Struct holding a parameters used to generate town name. + * Struct holding parameters used to generate town name. * Speeds things up a bit because these values are computed only once per name generation. */ struct TownNameParams { From efc44466d663466d13c93a020f5f16a3aca864ba Mon Sep 17 00:00:00 2001 From: glx22 Date: Sun, 13 Jan 2019 08:40:54 +0100 Subject: [PATCH 168/622] Fix: make -k switch useful when testing regression (#7053) --- bin/ai/regression/run.sh | 12 ++++++------ bin/ai/regression/run.vbs | 22 +++++++++++----------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/bin/ai/regression/run.sh b/bin/ai/regression/run.sh index d47a664ea3..c9197c4d56 100755 --- a/bin/ai/regression/run.sh +++ b/bin/ai/regression/run.sh @@ -43,11 +43,11 @@ for tst in $tests; do if [ -n "$gdb" ]; then $gdb ./openttd -x -c ai/regression/regression.cfg $params -g $sav else - ./openttd -x -c ai/regression/regression.cfg $params -g $sav -d script=2 -d misc=9 2>&1 | awk '{ gsub("0x(\\(nil\\)|0+)(x0)?", "0x00000000", $0); gsub("^dbg: \\[script\\]", "", $0); gsub("^ ", "ERROR: ", $0); gsub("ERROR: \\[1\\] ", "", $0); gsub("\\[P\\] ", "", $0); print $0; }' | grep -v '^dbg: \[.*\]' > tmp.regression + ./openttd -x -c ai/regression/regression.cfg $params -g $sav -d script=2 -d misc=9 2>&1 | awk '{ gsub("0x(\\(nil\\)|0+)(x0)?", "0x00000000", $0); gsub("^dbg: \\[script\\]", "", $0); gsub("^ ", "ERROR: ", $0); gsub("ERROR: \\[1\\] ", "", $0); gsub("\\[P\\] ", "", $0); print $0; }' | grep -v '^dbg: \[.*\]' > $tst/tmp.regression fi if [ -z "$gdb" ]; then - res="`diff -ub $tst/result.txt tmp.regression`" + res="`diff -ub $tst/result.txt $tst/tmp.regression`" if [ -z "$res" ]; then echo "passed!" else @@ -58,14 +58,14 @@ for tst in $tests; do fi rm $tst/info.nut + + if [ "$1" != "-k" ]; then + rm -f $tst/tmp.regression + fi done if [ -f scripts/game_start.scr.regression ]; then mv scripts/game_start.scr.regression scripts/game_start.scr fi -if [ "$1" != "-k" ]; then - rm -f tmp.regression -fi - exit $ret diff --git a/bin/ai/regression/run.vbs b/bin/ai/regression/run.vbs index 88cea5c4eb..930562ec68 100644 --- a/bin/ai/regression/run.vbs +++ b/bin/ai/regression/run.vbs @@ -99,11 +99,11 @@ Function RunTest(test, params, ret) command = ".\openttd -x -c ai/regression/regression.cfg " & params & " -g " & sav & " -d script=2 -d misc=9" ' 2>&1 must be after >tmp.regression, else stderr is not redirected to the file - WshShell.Run "cmd /c " & command & " >tmp.regression 2>&1", 0, True + WshShell.Run "cmd /c " & command & " >"& test & "/tmp.regression 2>&1", 0, True - FilterFile "tmp.regression" + FilterFile test & "/tmp.regression" - If CompareFiles(test & "/result.txt", "tmp.regression") Then + If CompareFiles(test & "/result.txt", test & "/tmp.regression") Then RunTest = "passed!" Else RunTest = "failed!" @@ -111,6 +111,14 @@ Function RunTest(test, params, ret) End If FSO.DeleteFile test & "/info.nut" + + If WScript.Arguments.Count > 0 Then + If WScript.Arguments.Item(0) = "-k" Then + Exit Function + End If + End If + + FSO.DeleteFile test & "/tmp.regression" End Function On Error Resume Next @@ -143,12 +151,4 @@ If FSO.FileExists("scripts/game_start.scr.regression") Then FSO.MoveFile "scripts/game_start.scr.regression", "scripts/game_start.scr" End If -If WScript.Arguments.Count > 0 Then - If WScripts.Arguments.Items(0) = "-k" Then - WScript.Quit ret - End If -End If - -FSO.DeleteFile "tmp.regression" - WScript.Quit ret From f4b8a67aed0c27da3b74b3db827d2e85de74286b Mon Sep 17 00:00:00 2001 From: Alberth289346 Date: Sun, 13 Jan 2019 08:57:33 +0100 Subject: [PATCH 169/622] Fix #6408: Improve wording of the dragging signal distance tooltips (juanjo) (#7055) --- src/lang/english.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index e272dd1688..0bb6ff9c5b 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2381,9 +2381,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Combo Si STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Path Signal (electric){}A path signal allows more than one train to enter a signal block at the same time, if the train can reserve a path to a safe stopping point. Standard path signals can be passed from the back side STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}One-way Path Signal (electric){}A path signal allows more than one train to enter a signal block at the same time, if the train can reserve a path to a safe stopping point. One-way path signals can't be passed from the back side STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Signal Convert{}When selected, clicking an existing signal will convert it to the selected signal type and variant. Ctrl+Click will toggle the existing variant. Shift+Click shows estimated conversion cost -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Dragging signal density -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Decrease dragging signal density -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Increase dragging signal density +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Dragging signal distance +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Decrease dragging signal distance +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Increase dragging signal distance # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Select Rail Bridge From 52a66e4dd3ed3831d0bfa02ecde72e6f2a491e05 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 6 Jan 2019 10:23:40 +0100 Subject: [PATCH 170/622] Fix 192770e6da: not all REV instances were renamed to VERSION --- Makefile.bundle.in | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Makefile.bundle.in b/Makefile.bundle.in index ff9ec1b2e1..eaf7134dde 100644 --- a/Makefile.bundle.in +++ b/Makefile.bundle.in @@ -54,7 +54,7 @@ ifdef OSXAPP $(Q)mkdir -p "$(BUNDLE_DIR)/$(OSXAPP)/Contents/Resources" $(Q)echo "APPL????" > "$(BUNDLE_DIR)/$(OSXAPP)/Contents/PkgInfo" $(Q)cp "$(ROOT_DIR)/os/macosx/openttd.icns" "$(BUNDLE_DIR)/$(OSXAPP)/Contents/Resources/openttd.icns" - $(Q)$(ROOT_DIR)/os/macosx/plistgen.sh "$(BUNDLE_DIR)/$(OSXAPP)" "$(REV)" + $(Q)$(ROOT_DIR)/os/macosx/plistgen.sh "$(BUNDLE_DIR)/$(OSXAPP)" "$(VERSION)" $(Q)cp "$(ROOT_DIR)/os/macosx/splash.png" "$(BASESET_DIR)" endif ifeq ($(OS),UNIX) @@ -151,10 +151,10 @@ bundle_lha: bundle bundle_dmg: bundle @echo '[BUNDLE] Creating $(BUNDLE_NAME).dmg' - $(Q)mkdir -p "$(BUNDLES_DIR)/OpenTTD $(REV)" - $(Q)cp -R "$(BUNDLE_DIR)/" "$(BUNDLES_DIR)/OpenTTD $(REV)" - $(Q)hdiutil create -ov -format UDZO -srcfolder "$(BUNDLES_DIR)/OpenTTD $(REV)" "$(BUNDLES_DIR)/$(BUNDLE_NAME).dmg" - $(Q)rm -fr "$(BUNDLES_DIR)/OpenTTD $(REV)" + $(Q)mkdir -p "$(BUNDLES_DIR)/OpenTTD $(VERSION)" + $(Q)cp -R "$(BUNDLE_DIR)/" "$(BUNDLES_DIR)/OpenTTD $(VERSION)" + $(Q)hdiutil create -ov -format UDZO -srcfolder "$(BUNDLES_DIR)/OpenTTD $(VERSION)" "$(BUNDLES_DIR)/$(BUNDLE_NAME).dmg" + $(Q)rm -fr "$(BUNDLES_DIR)/OpenTTD $(VERSION)" bundle_exe: all @echo '[BUNDLE] Creating $(BUNDLE_NAME).exe' From 750927372f7d10f648aa2015193d1f7f800f3a69 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 5 Jan 2019 20:11:29 +0100 Subject: [PATCH 171/622] Add: [AzurePipeline] introducing a release pipeline This release pipeline creates all the official release binaries, and publishes them as artifacts. Currently it can only produce nightlies and custom builds; stable/testing release binaries are untested. This commit also splits up the pipeline in small bits, to both improve readability, and to share code with the CI pipeline where possible. --- azure-pipelines-ci.yml | 86 ++------- azure-pipelines-release-stable.yml | 7 + azure-pipelines-release.yml | 7 + azure-pipelines/changelog.sh | 20 +++ azure-pipelines/manifest.sh | 60 +++++++ azure-pipelines/templates/ci-git-rebase.yml | 9 + azure-pipelines/templates/ci-opengfx.yml | 8 + azure-pipelines/templates/linux-build.yml | 18 ++ .../templates/linux-claim-bundles.yml | 5 + azure-pipelines/templates/osx-build.yml | 5 + .../templates/osx-dependencies.yml | 11 ++ azure-pipelines/templates/release-bundles.yml | 19 ++ .../templates/release-fetch-source.yml | 20 +++ .../templates/release-manifest.yml | 13 ++ .../templates/release-prepare-source.yml | 24 +++ azure-pipelines/templates/release.yml | 169 ++++++++++++++++++ azure-pipelines/templates/windows-build.yml | 11 ++ .../templates/windows-dependencies.yml | 10 ++ .../templates/windows-dependency-nsis.yml | 28 +++ .../templates/windows-dependency-zip.yml | 5 + findversion.sh | 2 - 21 files changed, 466 insertions(+), 71 deletions(-) create mode 100644 azure-pipelines-release-stable.yml create mode 100644 azure-pipelines-release.yml create mode 100755 azure-pipelines/changelog.sh create mode 100755 azure-pipelines/manifest.sh create mode 100644 azure-pipelines/templates/ci-git-rebase.yml create mode 100644 azure-pipelines/templates/ci-opengfx.yml create mode 100644 azure-pipelines/templates/linux-build.yml create mode 100644 azure-pipelines/templates/linux-claim-bundles.yml create mode 100644 azure-pipelines/templates/osx-build.yml create mode 100644 azure-pipelines/templates/osx-dependencies.yml create mode 100644 azure-pipelines/templates/release-bundles.yml create mode 100644 azure-pipelines/templates/release-fetch-source.yml create mode 100644 azure-pipelines/templates/release-manifest.yml create mode 100644 azure-pipelines/templates/release-prepare-source.yml create mode 100644 azure-pipelines/templates/release.yml create mode 100644 azure-pipelines/templates/windows-build.yml create mode 100644 azure-pipelines/templates/windows-dependencies.yml create mode 100644 azure-pipelines/templates/windows-dependency-nsis.yml create mode 100644 azure-pipelines/templates/windows-dependency-zip.yml diff --git a/azure-pipelines-ci.yml b/azure-pipelines-ci.yml index e71ab60ea4..d624f8ce73 100644 --- a/azure-pipelines-ci.yml +++ b/azure-pipelines-ci.yml @@ -17,37 +17,12 @@ jobs: BuildPlatform: 'x64' steps: - # Rebase to origin/master for every PR. This means users don't have to - # rebase every time master changes. As long as the PR applies cleanly, we - # will validate it. - - script: | - git config user.email 'info@openttd.org' - git config user.name 'OpenTTD CI' - git rebase origin/master - displayName: 'Rebase to master' - - bash: | - set -ex - curl -L https://github.com/OpenTTD/OpenTTD-CF/releases/download/latest/windows-dependencies.zip > windows-dependencies.zip - unzip windows-dependencies.zip - rm -f windows-dependencies.zip - displayName: 'Download dependencies' - workingDirectory: $(Build.ArtifactStagingDirectory) - - script: $(Build.ArtifactStagingDirectory)\windows-dependencies\vcpkg.exe integrate install - displayName: 'Install dependencies' - - bash: | - set -ex - cd bin/baseset - curl -L https://binaries.openttd.org/extra/opengfx/0.5.2/opengfx-0.5.2-all.zip > opengfx-0.5.2-all.zip - unzip opengfx-0.5.2-all.zip - rm -f opengfx-0.5.2-all.zip - displayName: 'Install OpenGFX' - - task: VSBuild@1 - displayName: 'Build' - inputs: - solution: 'projects/openttd_vs141.sln' - platform: $(BuildPlatform) - configuration: Release - maximumCpuCount: true + - template: azure-pipelines/templates/ci-git-rebase.yml + - template: azure-pipelines/templates/windows-dependencies.yml + - template: azure-pipelines/templates/ci-opengfx.yml + - template: azure-pipelines/templates/windows-build.yml + parameters: + BuildPlatform: $(BuildPlatform) - script: | call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x86 cd projects @@ -67,22 +42,13 @@ jobs: linux-i386-gcc-6: {} steps: - # Rebase to origin/master for every PR. This means users don't have to - # rebase every time master changes. As long as the PR applies cleanly, we - # will validate it. - - script: | - git config user.email 'info@openttd.org' - git config user.name 'OpenTTD CI' - git rebase origin/master - displayName: 'Rebase to master' - - task: Docker@1 - displayName: 'Build and test' - inputs: - command: 'Run an image' - imageName: openttd/compile-farm-ci:$(Agent.JobName) - volumes: '$(Build.SourcesDirectory):$(Build.SourcesDirectory)' - workingDirectory: '$(Build.SourcesDirectory)' - runInBackground: false + - template: azure-pipelines/templates/ci-git-rebase.yml + # The dockers already have the dependencies installed + # The dockers already have OpenGFX installed + - template: azure-pipelines/templates/linux-build.yml + parameters: + Image: compile-farm-ci + Tag: $(Agent.JobName) - job: macos displayName: 'MacOS' @@ -90,27 +56,9 @@ jobs: vmImage: 'macOS-10.13' steps: - # Rebase to origin/master for every PR. This means users don't have to - # rebase every time master changes. As long as the PR applies cleanly, we - # will validate it. - - script: | - git config user.email 'info@openttd.org' - git config user.name 'OpenTTD CI' - git rebase origin/master - displayName: 'Rebase to master' - - script: HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config lzo xz libpng - displayName: 'Install dependencies' - - bash: | - set -ex - mkdir -p ~/Documents/OpenTTD/baseset - cd ~/Documents/OpenTTD/baseset - wget https://binaries.openttd.org/extra/opengfx/0.5.2/opengfx-0.5.2-all.zip - unzip opengfx-0.5.2-all.zip - rm -f opengfx-0.5.2-all.zip - displayName: 'Install OpenGFX' - - script: './configure PKG_CONFIG_PATH=/usr/local/lib/pkgconfig --enable-static' - displayName: 'Configure' - - script: 'make -j2' - displayName: 'Build' + - template: azure-pipelines/templates/ci-git-rebase.yml + - template: azure-pipelines/templates/osx-dependencies.yml + - template: azure-pipelines/templates/ci-opengfx.yml + - template: azure-pipelines/templates/osx-build.yml - script: 'make regression' displayName: 'Test' diff --git a/azure-pipelines-release-stable.yml b/azure-pipelines-release-stable.yml new file mode 100644 index 0000000000..3c42c6bee5 --- /dev/null +++ b/azure-pipelines-release-stable.yml @@ -0,0 +1,7 @@ +trigger: none +pr: none + +jobs: +- template: azure-pipelines/templates/release.yml + parameters: + IsStableRelease: true diff --git a/azure-pipelines-release.yml b/azure-pipelines-release.yml new file mode 100644 index 0000000000..79e2da77ac --- /dev/null +++ b/azure-pipelines-release.yml @@ -0,0 +1,7 @@ +trigger: none +pr: none + +jobs: +- template: azure-pipelines/templates/release.yml + parameters: + IsStableRelease: false diff --git a/azure-pipelines/changelog.sh b/azure-pipelines/changelog.sh new file mode 100755 index 0000000000..71bc56fac7 --- /dev/null +++ b/azure-pipelines/changelog.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +tag=$(git describe --tags 2>/dev/null) + +# If we are a tag, show the part of the changelog that matches the tag. +# In case of a stable, also show all betas and RCs. +if [ -n "$tag" ]; then + grep="." + if [ "$(echo $tag | grep '-')" = "" ]; then + grep='^[0-9]\.[0-9]\.[0-9][^-]' + fi + next=$(cat changelog.txt | grep '^[0-9]' | awk 'BEGIN { show="false" } // { if (show=="true") print $0; if ($1=="'$tag'") show="true"} ' | grep "$grep" | head -n1 | sed 's/ .*//') + cat changelog.txt | awk 'BEGIN { show="false" } /^[0-9].[0-9].[0-9]/ { if ($1=="'$next'") show="false"; if ($1=="'$tag'") show="true";} // { if (show=="true") print $0 }' + exit 0 +fi + +# In all other cases, show the git log of the last 7 days +revdate=$(git log -1 --pretty=format:"%ci") +last_week=$(date -u -d "$revdate -7days" +"%Y-%m-%d %H:%M") +git log --after="${last_week}" --pretty=fuller diff --git a/azure-pipelines/manifest.sh b/azure-pipelines/manifest.sh new file mode 100755 index 0000000000..4d11972777 --- /dev/null +++ b/azure-pipelines/manifest.sh @@ -0,0 +1,60 @@ +#!/bin/sh + +set -ex + +if [ -z "$1" ]; then + echo "Usage: $0 " + exit 1 +fi + +FOLDER=$1 + +if [ ! -e .version ] || [ ! -e .release_date ]; then + echo "This script should be executed in the root of an extracted source tarball" + exit 1 +fi + +# Find the name based on the version +if [ "${ISSTABLERELEASE}" = "true" ]; then + isTesting=$(cat .version | grep "RC\|beta" || true) + if [ -z "${isTesting}" ]; then + NAME="stable" + else + NAME="testing" + fi +else + NAME=$(cat .version | cut -d- -f2 | cut -d- -f-2) +fi + +# Convert the date to a YAML date +DATE=$(cat .release_date | tr ' ' T | sed 's/TUTC/:00-00:00/') +VERSION=$(cat .version) +BASE="openttd-${VERSION}" + +echo "name: ${NAME}" >> manifest.yaml +echo "date: ${DATE}" >> manifest.yaml +echo "base: ${BASE}-" >> manifest.yaml +echo "files:" >> manifest.yaml + +error="" +for i in $(ls ${FOLDER} | grep -v ".txt$\|.md$\|sum$" | sort); do + if [ -n "$(echo $i | grep pdb.xz)" ]; then continue; fi + if [ -n "$(echo $i | grep dbg.deb)" ]; then continue; fi + + if [ ! -e ${FOLDER}/$i.md5sum ] || [ ! -e ${FOLDER}/$i.sha1sum ] || [ ! -e ${FOLDER}/$i.sha256sum ]; then + echo "ERROR: missing checksum file for ${i}" 1>&2 + error="y" + continue + fi + + echo "- id: $i" >> manifest.yaml + echo " size: $(stat -c"%s" ${FOLDER}/$i)" >> manifest.yaml + echo " md5sum: $(cat ${FOLDER}/$i.md5sum | cut -d\ -f1)" >> manifest.yaml + echo " sha1sum: $(cat ${FOLDER}/$i.sha1sum | cut -d\ -f1)" >> manifest.yaml + echo " sha256sum: $(cat ${FOLDER}/$i.sha256sum | cut -d\ -f1)" >> manifest.yaml +done + +if [ -n "${error}" ]; then + echo "ERROR: exiting due to earlier errors" 1>&2 + exit 1 +fi diff --git a/azure-pipelines/templates/ci-git-rebase.yml b/azure-pipelines/templates/ci-git-rebase.yml new file mode 100644 index 0000000000..924302fee3 --- /dev/null +++ b/azure-pipelines/templates/ci-git-rebase.yml @@ -0,0 +1,9 @@ +steps: +# Rebase to origin/master for every PR. This means users don't have to +# rebase every time master changes. As long as the PR applies cleanly, we +# will validate it. +- script: | + git config user.email 'info@openttd.org' + git config user.name 'OpenTTD CI' + git rebase origin/master + displayName: 'Rebase to master' diff --git a/azure-pipelines/templates/ci-opengfx.yml b/azure-pipelines/templates/ci-opengfx.yml new file mode 100644 index 0000000000..098f0d2a69 --- /dev/null +++ b/azure-pipelines/templates/ci-opengfx.yml @@ -0,0 +1,8 @@ +steps: +- bash: | + set -ex + cd bin/baseset + curl -L https://binaries.openttd.org/extra/opengfx/0.5.2/opengfx-0.5.2-all.zip > opengfx-0.5.2-all.zip + unzip opengfx-0.5.2-all.zip + rm -f opengfx-0.5.2-all.zip + displayName: 'Install OpenGFX' diff --git a/azure-pipelines/templates/linux-build.yml b/azure-pipelines/templates/linux-build.yml new file mode 100644 index 0000000000..0e4fffefb0 --- /dev/null +++ b/azure-pipelines/templates/linux-build.yml @@ -0,0 +1,18 @@ +parameters: + Image: '' + Tag: '' + ContainerCommand: '' + +steps: +- task: Docker@1 + ${{ if eq(parameters.Image, 'compile-farm') }}: + displayName: 'Build' + ${{ if eq(parameters.Image, 'compile-farm-ci') }}: + displayName: 'Build and test' + inputs: + command: 'Run an image' + imageName: openttd/${{ parameters.Image }}:${{ parameters.Tag }} + volumes: '$(Build.SourcesDirectory):$(Build.SourcesDirectory)' + workingDirectory: '$(Build.SourcesDirectory)' + containerCommand: ${{ parameters.ContainerCommand }} + runInBackground: false diff --git a/azure-pipelines/templates/linux-claim-bundles.yml b/azure-pipelines/templates/linux-claim-bundles.yml new file mode 100644 index 0000000000..4434dfcc7d --- /dev/null +++ b/azure-pipelines/templates/linux-claim-bundles.yml @@ -0,0 +1,5 @@ +steps: +# Because we run the compile in a docker (under root), we are not owner +# of the 'bundles' folder. Fix that by executing a chown on it. +- bash: sudo chown -R $(id -u):$(id -g) bundles + displayName: 'Claim bundles folder back' diff --git a/azure-pipelines/templates/osx-build.yml b/azure-pipelines/templates/osx-build.yml new file mode 100644 index 0000000000..ae1724125d --- /dev/null +++ b/azure-pipelines/templates/osx-build.yml @@ -0,0 +1,5 @@ +steps: +- script: './configure PKG_CONFIG_PATH=/usr/local/lib/pkgconfig --enable-static' + displayName: 'Configure' +- script: 'make -j2' + displayName: 'Build' diff --git a/azure-pipelines/templates/osx-dependencies.yml b/azure-pipelines/templates/osx-dependencies.yml new file mode 100644 index 0000000000..c4b723c58b --- /dev/null +++ b/azure-pipelines/templates/osx-dependencies.yml @@ -0,0 +1,11 @@ +steps: +- script: | + set -ex + HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config lzo xz libpng + # Remove the dynamic libraries of these libraries, to ensure we use + # the static versions. That is important, as it is unlikely any + # end-user has these brew libraries installed. + rm /usr/local/Cellar/lzo/*/lib/*.dylib + rm /usr/local/Cellar/xz/*/lib/*.dylib + rm /usr/local/Cellar/libpng/*/lib/*.dylib + displayName: 'Install dependencies' diff --git a/azure-pipelines/templates/release-bundles.yml b/azure-pipelines/templates/release-bundles.yml new file mode 100644 index 0000000000..9c5a48b966 --- /dev/null +++ b/azure-pipelines/templates/release-bundles.yml @@ -0,0 +1,19 @@ +parameters: + CalculateChecksums: true + +steps: +- ${{ if eq(parameters.CalculateChecksums, true) }}: + - bash: | + set -ex + cd bundles + for i in $(ls); do + openssl dgst -r -md5 -hex $i > $i.md5sum + openssl dgst -r -sha1 -hex $i > $i.sha1sum + openssl dgst -r -sha256 -hex $i > $i.sha256sum + done + displayName: 'Calculate checksums' +- task: PublishBuildArtifacts@1 + displayName: 'Publish bundles' + inputs: + PathtoPublish: bundles/ + ArtifactName: bundles diff --git a/azure-pipelines/templates/release-fetch-source.yml b/azure-pipelines/templates/release-fetch-source.yml new file mode 100644 index 0000000000..8b43983067 --- /dev/null +++ b/azure-pipelines/templates/release-fetch-source.yml @@ -0,0 +1,20 @@ +# Fetch the source tarball as prepared by an earlier job. In there is the +# version predefined. This ensures we are all going to compile the same +# source with the same version. + +steps: +- checkout: none +- task: DownloadBuildArtifacts@0 + displayName: 'Download source' + inputs: + downloadType: specific + itemPattern: 'bundles/openttd-*-source.tar.xz' + downloadPath: '$(Build.ArtifactStagingDirectory)' +- bash: tar --xz -xf ../a/bundles/openttd-*-source.tar.xz --strip-components=1 + displayName: 'Extracting source' +- bash: | + set -e + VERSION=$(cat .version) + echo "${VERSION}" + echo "##vso[build.updatebuildnumber]${VERSION}" + displayName: 'Change BuildNumber to version' diff --git a/azure-pipelines/templates/release-manifest.yml b/azure-pipelines/templates/release-manifest.yml new file mode 100644 index 0000000000..5c076b30e9 --- /dev/null +++ b/azure-pipelines/templates/release-manifest.yml @@ -0,0 +1,13 @@ +steps: +- task: DownloadBuildArtifacts@0 + displayName: 'Download all bundles' + inputs: + downloadType: specific + itemPattern: 'bundles/*' + downloadPath: '$(Build.ArtifactStagingDirectory)' +- script: | + set -ex + ./azure-pipelines/manifest.sh ../a/bundles/ + mkdir -p bundles + mv manifest.yaml bundles/ + displayName: 'Create manifest.yaml' diff --git a/azure-pipelines/templates/release-prepare-source.yml b/azure-pipelines/templates/release-prepare-source.yml new file mode 100644 index 0000000000..22ec126b1f --- /dev/null +++ b/azure-pipelines/templates/release-prepare-source.yml @@ -0,0 +1,24 @@ +# Set the revisions, and remove the VCS files. +# This ensures everything else picks up on the predefined versions, and not +# that because of some build process the version all of a sudden changes. + +steps: +- script: | + set -ex + git checkout -B ${BUILD_SOURCEBRANCHNAME} + ./findversion.sh > .ottdrev + ./azure-pipelines/changelog.sh > .changelog + TZ='UTC' date +"%Y-%m-%d %H:%M UTC" > .release_date + cat .ottdrev | cut -f 1 -d$'\t' > .version + echo "Release Date: $(cat .release_date)" + echo "Revision: $(cat .ottdrev)" + echo "Version: $(cat .version)" + displayName: 'Create version files' +- script: | + set -e + VERSION=$(cat .version) + echo "${VERSION}" + echo "##vso[build.updatebuildnumber]${VERSION}" + displayName: 'Change BuildNumber to version' +- script: find . -iname .hg -or -iname .git -or -iname .svn | xargs rm -rf + displayName: 'Remove VCS information' diff --git a/azure-pipelines/templates/release.yml b/azure-pipelines/templates/release.yml new file mode 100644 index 0000000000..4daf66dedb --- /dev/null +++ b/azure-pipelines/templates/release.yml @@ -0,0 +1,169 @@ +parameters: + # If this is false, not all targets are triggered. For example: + # The NSIS installer for Windows and the creation of debs only work for + # releases. Not for any other type of binary. So they are skilled if this + # is set to false. + IsStableRelease: false + +jobs: +- job: source + displayName: 'Source' + pool: + vmImage: 'ubuntu-16.04' + + steps: + - template: release-prepare-source.yml + - script: | + set -ex + + # Rename the folder to openttd-NNN-source + mkdir openttd-$(Build.BuildNumber) + find . -maxdepth 1 -not -name . -not -name openttd-$(Build.BuildNumber) -exec mv {} openttd-$(Build.BuildNumber)/ \; + # Copy back release_date, as it is needed for the template 'release-bundles' + cp openttd-$(Build.BuildNumber)/.release_date .release_date + + mkdir bundles + tar --xz -cf bundles/openttd-$(Build.BuildNumber)-source.tar.xz openttd-$(Build.BuildNumber) + zip -9 -r -q bundles/openttd-$(Build.BuildNumber)-source.zip openttd-$(Build.BuildNumber) + displayName: 'Create bundle' + - template: release-bundles.yml + +- job: meta + displayName: 'Metadata' + pool: + vmImage: 'ubuntu-16.04' + dependsOn: source + + steps: + - template: release-fetch-source.yml + - script: | + set -ex + + mkdir -p bundles + cp .changelog bundles/changelog.txt + cp .release_date bundles/released.txt + cp README.md bundles/README.md + displayName: 'Copy meta files' + - template: release-bundles.yml + parameters: + CalculateChecksums: false + +- job: docs + displayName: 'Docs' + pool: + vmImage: 'ubuntu-16.04' + dependsOn: source + + steps: + - template: release-fetch-source.yml + - template: linux-build.yml + parameters: + Image: compile-farm + ContainerCommand: '$(Build.BuildNumber)' + Tag: docs + - template: linux-claim-bundles.yml + - template: release-bundles.yml + +- job: windows + displayName: 'Windows' + pool: + vmImage: 'VS2017-Win2016' + dependsOn: source + + strategy: + matrix: + Win32: + BuildPlatform: 'Win32' + BundlePlatform: 'win32' + Win64: + BuildPlatform: 'x64' + BundlePlatform: 'win64' + + steps: + - template: release-fetch-source.yml + - template: windows-dependencies.yml + - template: windows-dependency-zip.yml + - ${{ if eq(parameters.IsStableRelease, true) }}: + - template: windows-dependency-nsis.yml + - template: windows-build.yml + parameters: + BuildPlatform: $(BuildPlatform) + - bash: | + set -ex + make -f Makefile.msvc bundle_pdb bundle_zip PLATFORM=$(BundlePlatform) BUNDLE_NAME=openttd-$(Build.BuildNumber)-windows-$(BundlePlatform) + displayName: 'Create bundles' + - ${{ if eq(parameters.IsStableRelease, true) }}: + - bash: | + set -ex + # NSIS will be part of the Hosted image in the next update. Till then, we set the PATH ourself + export PATH="${PATH}:/c/Program Files (x86)/NSIS" + make -f Makefile.msvc bundle_exe PLATFORM=$(BundlePlatform) BUNDLE_NAME=openttd-$(Build.BuildNumber)-windows-$(BundlePlatform) + displayName: 'Create installer bundle' + - template: release-bundles.yml + +- ${{ if eq(parameters.IsStableRelease, true) }}: + - job: linux_stable + displayName: 'Linux' + pool: + vmImage: 'ubuntu-16.04' + dependsOn: source + + strategy: + matrix: + linux-ubuntu-xenial-i386-gcc: {} + linux-ubuntu-xenial-amd64-gcc: {} + linux-ubuntu-bionic-i386-gcc: {} + linux-ubuntu-bionic-amd64-gcc: {} + linux-debian-jessie-i386-gcc: {} + linux-debian-jessie-amd64-gcc: {} + linux-debian-stretch-i386-gcc: {} + linux-debian-stretch-amd64-gcc: {} + + steps: + - template: release-fetch-source.yml + - template: linux-build.yml + parameters: + Image: compile-farm + ContainerCommand: '$(Build.BuildNumber)' + Tag: $(Agent.JobName) + - template: linux-claim-bundles.yml + - template: release-bundles.yml + +- job: macos + displayName: 'MacOS' + pool: + vmImage: 'macOS-10.13' + dependsOn: source + + steps: + - template: release-fetch-source.yml + - template: osx-dependencies.yml + - template: osx-build.yml + - script: 'make bundle_zip bundle_dmg BUNDLE_NAME=openttd-$(Build.BuildNumber)-macosx' + displayName: 'Create bundles' + - template: release-bundles.yml + +- job: manifest + displayName: 'Manifest' + pool: + vmImage: 'ubuntu-16.04' + dependsOn: + - source + - docs + - windows + - ${{ if eq(parameters.IsStableRelease, true) }}: + - linux_stable + - macos + # "Skipped" is not a status, and is not succeeded. So it seems to be + # considered failed. So we trigger if all the earlier jobs are done (which + # might be succeeded, failed, or skipped), and run this job. This is not + # optimal, but given the rules, it is the only way to get this to work (as + # some jobs might be skipped). + condition: succeededOrFailed() + + steps: + - template: release-fetch-source.yml + - template: release-manifest.yml + - template: release-bundles.yml + parameters: + CalculateChecksums: false diff --git a/azure-pipelines/templates/windows-build.yml b/azure-pipelines/templates/windows-build.yml new file mode 100644 index 0000000000..5e12f2243f --- /dev/null +++ b/azure-pipelines/templates/windows-build.yml @@ -0,0 +1,11 @@ +parameters: + BuildPlatform: '' + +steps: +- task: VSBuild@1 + displayName: 'Build' + inputs: + solution: 'projects/openttd_vs141.sln' + platform: ${{ parameters.BuildPlatform }} + configuration: Release + maximumCpuCount: true diff --git a/azure-pipelines/templates/windows-dependencies.yml b/azure-pipelines/templates/windows-dependencies.yml new file mode 100644 index 0000000000..06f56e626b --- /dev/null +++ b/azure-pipelines/templates/windows-dependencies.yml @@ -0,0 +1,10 @@ +steps: +- bash: | + set -ex + curl -L https://github.com/OpenTTD/OpenTTD-CF/releases/download/latest/windows-dependencies.zip > windows-dependencies.zip + unzip windows-dependencies.zip + rm -f windows-dependencies.zip + displayName: 'Download dependencies' + workingDirectory: $(Build.ArtifactStagingDirectory) +- script: $(Build.ArtifactStagingDirectory)\windows-dependencies\vcpkg.exe integrate install + displayName: 'Install dependencies' diff --git a/azure-pipelines/templates/windows-dependency-nsis.yml b/azure-pipelines/templates/windows-dependency-nsis.yml new file mode 100644 index 0000000000..a1ee8f81e5 --- /dev/null +++ b/azure-pipelines/templates/windows-dependency-nsis.yml @@ -0,0 +1,28 @@ +parameters: + condition: true + +steps: +- bash: | + set -ex + # NSIS will be part of the Hosted image in the next update. Till then, we install it ourself + choco install nsis -y + + mkdir nsis-plugin; cd nsis-plugin + curl -L https://devs.openttd.org/~truebrain/nsis-plugins/Nsis7z.zip > Nsis7z.zip + unzip Nsis7z.zip + cp -R Plugins/* "/c/Program Files (x86)/NSIS/Plugins/" + cd ..; rm -rf nsis-plugin + + mkdir nsis-plugin; cd nsis-plugin + curl -L https://devs.openttd.org/~truebrain/nsis-plugins/NsisGetVersion.zip > NsisGetVersion.zip + unzip NsisGetVersion.zip + cp -R Plugins/* "/c/Program Files (x86)/NSIS/Plugins/x86-ansi/" + cd ..; rm -rf nsis-plugin + + mkdir nsis-plugin; cd nsis-plugin + curl -L https://devs.openttd.org/~truebrain/nsis-plugins/NsisFindProc.zip > NsisFindProc.zip + unzip NsisFindProc.zip + cp -R *.dll "/c/Program Files (x86)/NSIS/Plugins/x86-ansi/" + cd ..; rm -rf nsis-plugin + displayName: 'Install NSIS with the 7z, GetVersion, and FindProc plugins' + condition: and(succeeded(), ${{ parameters.condition }}) diff --git a/azure-pipelines/templates/windows-dependency-zip.yml b/azure-pipelines/templates/windows-dependency-zip.yml new file mode 100644 index 0000000000..e2ae06dbe7 --- /dev/null +++ b/azure-pipelines/templates/windows-dependency-zip.yml @@ -0,0 +1,5 @@ +steps: +- bash: | + set -ex + choco install zip + displayName: 'Install zip' diff --git a/findversion.sh b/findversion.sh index 8fd292c8bc..ead908167e 100755 --- a/findversion.sh +++ b/findversion.sh @@ -74,8 +74,6 @@ if [ -d "$ROOT_DIR/.git" ]; then if [ -n "$TAG" ]; then VERSION="${TAG}" - elif [ "${BRANCH}" = "master" ]; then - VERSION="${ISODATE}-g${SHORTHASH}" else VERSION="${ISODATE}-${BRANCH}-g${SHORTHASH}" fi From 89f0017a674c40afb4a7abbee973d86f678f4e39 Mon Sep 17 00:00:00 2001 From: PeterN Date: Sun, 13 Jan 2019 16:50:21 +0000 Subject: [PATCH 172/622] Fix #7050: Missing guard around network chat message function for compiling with networking disabled. (#7058) --- src/window.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/window.cpp b/src/window.cpp index cd75113536..d67c7f2f70 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -3100,11 +3100,13 @@ void UpdateWindows() CallWindowRealtimeTickEvent(delta_ms); +#ifdef ENABLE_NETWORKING static GUITimer network_message_timer = GUITimer(1); if (network_message_timer.Elapsed(delta_ms)) { network_message_timer.SetInterval(1000); NetworkChatMessageLoop(); } +#endif Window *w; From ca7ee345024337d37932880ee9c1c3a9cb656697 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 13 Jan 2019 19:45:41 +0100 Subject: [PATCH 173/622] Update: Translations from eints croatian: 8 changes by VoyagerOne --- src/lang/croatian.txt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 398891439f..dac4678a8e 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -285,6 +285,7 @@ STR_COLOUR_ORANGE :Narančasta STR_COLOUR_BROWN :Smeđa STR_COLOUR_GREY :Siva STR_COLOUR_WHITE :Bijela +STR_COLOUR_RANDOM :Nasumično # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -1025,6 +1026,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Proizvoljno... STR_GAME_OPTIONS_CURRENCY_GEL :Gruzijski Lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Iranski Rial (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Nove ruske rublje (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Meksički Pesos (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Cestovna vozila @@ -1354,6 +1356,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Mijenjan STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Održavanje infrastrukture: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Kada je omogućeno, infrastruktura uzrokuje troškove održavanja. Cijena raste više nego proporcionalno s veličinom mreže, čime utječe veće tvrtke više od manjih +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Početna boja za kompaniju: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Odaberi početnu boju za kompaniju STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Zračne luke nikad ne ističu: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Uključivanjem ove postavke čini svaku vrstu zračne luke dostupnom zauvijek nakon uvođenja @@ -2473,9 +2477,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Kombo si STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Putni signal (električni){}Putni signal omogućava da više od jednog vlaka uđe istovremeno u signalni blok, ako vlak može rezervirati putanju do sigurnog zaustavnog mjesta. Standardne putne signale moguće je proći iz suprotnog smjera STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Jednosmjerni putni signal (električni){}Putni znak omogućava da više od jednog vlaka uđe istovremeno u signalni blok, ako vlak može rezervirati putanju do sigurnog zaustavnog mjesta. Jednosmjerne putne signale nije moguće proći iz suprotnog smjera. STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Pretvaranje signala{}Kada je odabrano, klikanjem na postojeći signal pretvara taj signal u odabranu vrstu i varijantu, Ctrl+Klik mijenja postojeću varijantu. Shift+Klik prikazuje procjenu troška pretvorbe -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Gustoća signala prilikom izgradnje -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Smanji gustoću signala prilikom izgradnje -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Povećaj gustoću signala prilikom izgradnje +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Razmak između signala prilikom izgradnje +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Smanji razmak između signala prilikom izgradnje +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Povećaj razmak između signala prilikom izgradnje # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Odaberi željeznički most @@ -3956,6 +3960,7 @@ STR_ORDER_CONDITIONAL_AGE :Starost vozila STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Treba servis STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Uvijek STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Preostali životni vijek (godina) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maksimalna pouzdanost STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Kako usporediti podatke vozila sa zadanom vrijednošću STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :je jednako From 823c5bfa3bf403aeac55a44fadfba802dddb8e1e Mon Sep 17 00:00:00 2001 From: Joan Josep Date: Sun, 13 Jan 2019 23:29:17 +0100 Subject: [PATCH 174/622] Fix #5978: Ensure group GUI stats and lists are invalidated properly (3298, Juanjo) (#7046) --- src/autoreplace_cmd.cpp | 4 ++++ src/group_cmd.cpp | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/autoreplace_cmd.cpp b/src/autoreplace_cmd.cpp index 48f818c947..95568e3811 100644 --- a/src/autoreplace_cmd.cpp +++ b/src/autoreplace_cmd.cpp @@ -19,6 +19,7 @@ #include "autoreplace_gui.h" #include "articulated_vehicles.h" #include "core/random_func.hpp" +#include "vehiclelist.h" #include "table/strings.h" @@ -777,6 +778,9 @@ CommandCost CmdSetAutoReplace(TileIndex tile, DoCommandFlag flags, uint32 p1, ui if (flags & DC_EXEC) { GroupStatistics::UpdateAutoreplace(_current_company); if (IsLocalCompany()) SetWindowDirty(WC_REPLACE_VEHICLE, Engine::Get(old_engine_type)->type); + + const VehicleType vt = Engine::Get(old_engine_type)->type; + SetWindowDirty(GetWindowClassForVehicleType(vt), VehicleListIdentifier(VL_GROUP_LIST, vt, _current_company).Pack()); } if ((flags & DC_EXEC) && IsLocalCompany()) InvalidateAutoreplaceWindow(old_engine_type, id_g); diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp index 66d75fb44e..3edaf76271 100644 --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -232,7 +232,7 @@ void GroupStatistics::Clear() stats.autoreplace_defined = true; stats.autoreplace_finished = true; } - if (stats.num_engines[erl->from] > 0) stats.autoreplace_finished = false; + if (GetGroupNumEngines(company, erl->group_id, erl->from) > 0) stats.autoreplace_finished = false; } } @@ -409,11 +409,12 @@ CommandCost CmdAlterGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 if (flags & DC_EXEC) { g->parent = (pg == NULL) ? INVALID_GROUP : pg->index; + GroupStatistics::UpdateAutoreplace(g->owner); } } if (flags & DC_EXEC) { - SetWindowDirty(WC_REPLACE_VEHICLE, g->vehicle_type); + InvalidateWindowData(WC_REPLACE_VEHICLE, g->vehicle_type, 1); InvalidateWindowData(GetWindowClassForVehicleType(g->vehicle_type), VehicleListIdentifier(VL_GROUP_LIST, g->vehicle_type, _current_company).Pack()); } From 47c7f8f3bbaa86723ad11e62b248453599dc7537 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 13 Jan 2019 22:55:51 +0000 Subject: [PATCH 175/622] Update OSX clang version detection --- config.lib | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/config.lib b/config.lib index 5b399d86a3..e5942d412c 100644 --- a/config.lib +++ b/config.lib @@ -1335,7 +1335,7 @@ make_compiler_cflags() { elif echo "$version_line" | grep -q "clang"; then # Enable some things only for certain clang versions # Need to try really hard to get the version line, because OSX clang likes to hide its true version - cc_version="`$1 -v 2>&1 | grep -i version | head -n 1 | sed s@[^0-9]@@g | cut -c 1-2`" + cc_version="`$1 -v 2>&1 | grep -i version | head -n 1 | sed s@[^0-9.]@@g | $awk -F . '{printf "%d%02d\n", $1, $2}'`" # aliasing rules are not held in openttd code flags="$flags -fno-strict-aliasing" @@ -1357,14 +1357,14 @@ make_compiler_cflags() { # it happens when using the FOR_ALL_WINDOWS_FROM_BACK_FROM macro flags="$flags -Wno-self-assign" - if [ "$cc_version" -lt "30" ]; then + if [ "$cc_version" -lt "300" ]; then # warning: equality comparison with extraneous parentheses flags="$flags -Wno-parentheses" # warning: operands of ? are integers of different signs: 'unsigned int' and 'int' flags="$flags -Wno-sign-compare" fi - if [ "$cc_version" -ge "30" ]; then + if [ "$cc_version" -ge "300" ]; then # warning: equality comparison with extraneous parentheses # this warning could be useful, but it warns about code in squirrel flags="$flags -Wno-parentheses-equality" @@ -1383,8 +1383,8 @@ make_compiler_cflags() { flags="$flags -Wno-unused-variable" fi - if [ "$cc_version" -lt "33" ]; then - log 1 "configure: error: clang version is too old: `$1 -v 2>&1 | head -n 1`, minumum: 3.3" + if [ "$cc_version" -lt "303" ]; then + log 1 "configure: error: clang version is too old: `$1 -v 2>&1 | grep -i version | head -n 1`, minumum: 3.3" exit 1 fi From d86aa7719bd2b9a70c7fc9fe06f2f769ee4e1f76 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 13 Jan 2019 23:23:36 +0000 Subject: [PATCH 176/622] Use -std=gnu++11 instead of -std=c++11 due to gcc extensions --- config.lib | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/config.lib b/config.lib index e5942d412c..3fda9727bc 100644 --- a/config.lib +++ b/config.lib @@ -1242,6 +1242,8 @@ make_compiler_cflags() { eval eval "ldflags=\\\$$4" eval eval "features=\\\$$5" + cppstd="-std=c++11" + if [ `echo "$version_line" | cut -d' ' -f1` = "icc" ]; then # Enable some things only for certain ICC versions cc_version=`$1 -dumpversion | cut -c 1-4 | sed s@\\\.@@g` @@ -1407,6 +1409,7 @@ make_compiler_cflags() { flags="$flags -Wwrite-strings -Wpointer-arith" flags="$flags -W -Wno-unused-parameter -Wredundant-decls" flags="$flags -Wformat=2 -Wformat-security" + cppstd="-std=gnu++11" if [ $enable_assert -eq 0 ]; then # Do not warn about unused variables when building without asserts @@ -1497,7 +1500,7 @@ make_compiler_cflags() { fi eval "$2=\"$flags\"" - eval "$3=\"$cxxflags\"" + eval "$3=\"$cxxflags $cppstd\"" eval "$4=\"$ldflags\"" eval "$5=\"$features\"" } @@ -1533,8 +1536,6 @@ make_cflags_and_ldflags() { CFLAGS="$CFLAGS -D$os" CFLAGS_BUILD="$CFLAGS_BUILD -D$os" - CXXFLAGS="$CXXFLAGS -std=c++11" - CXXFLAGS_BUILD="$CXXFLAGS_BUILD -std=c++11" if [ "$enable_debug" = "0" ]; then # No debug, add default stuff From 34c438d7ad74e134c842c5b1ee6595cf38c0fbce Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 8 Jan 2019 05:19:17 +0100 Subject: [PATCH 177/622] Fix: keep line endings when running squirrel_export.sh on windows --- src/script/api/squirrel_export.awk | 148 +++++++++++++++-------------- 1 file changed, 75 insertions(+), 73 deletions(-) diff --git a/src/script/api/squirrel_export.awk b/src/script/api/squirrel_export.awk index 2cb47deddd..ef0a74c8db 100644 --- a/src/script/api/squirrel_export.awk +++ b/src/script/api/squirrel_export.awk @@ -29,46 +29,46 @@ function dump_class_templates(name) realname = name gsub("^Script", "", realname) - print " template <> inline " name " *GetParam(ForceType<" name " *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (" name " *)instance; }" - print " template <> inline " name " &GetParam(ForceType<" name " &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" name " *)instance; }" - print " template <> inline const " name " *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (" name " *)instance; }" - print " template <> inline const " name " &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" name " *)instance; }" + print " template <> inline " name " *GetParam(ForceType<" name " *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (" name " *)instance; }" CR + print " template <> inline " name " &GetParam(ForceType<" name " &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" name " *)instance; }" CR + print " template <> inline const " name " *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (" name " *)instance; }" CR + print " template <> inline const " name " &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" name " *)instance; }" CR if (name == "ScriptEvent") { - print " template <> inline int Return<" name " *>(HSQUIRRELVM vm, " name " *res) { if (res == NULL) { sq_pushnull(vm); return 1; } Squirrel::CreateClassInstanceVM(vm, \"" realname "\", res, NULL, DefSQDestructorCallback<" name ">, true); return 1; }" + print " template <> inline int Return<" name " *>(HSQUIRRELVM vm, " name " *res) { if (res == NULL) { sq_pushnull(vm); return 1; } Squirrel::CreateClassInstanceVM(vm, \"" realname "\", res, NULL, DefSQDestructorCallback<" name ">, true); return 1; }" CR } else if (name == "ScriptText") { - print "" - print " template <> inline Text *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) {" - print " if (sq_gettype(vm, index) == OT_INSTANCE) {" - print " return GetParam(ForceType(), vm, index, ptr);" - print " }" - print " if (sq_gettype(vm, index) == OT_STRING) {" - print " return new RawText(GetParam(ForceType(), vm, index, ptr));" - print " }" - print " return NULL;" - print " }" + print "" CR + print " template <> inline Text *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) {" CR + print " if (sq_gettype(vm, index) == OT_INSTANCE) {" CR + print " return GetParam(ForceType(), vm, index, ptr);" CR + print " }" CR + print " if (sq_gettype(vm, index) == OT_STRING) {" CR + print " return new RawText(GetParam(ForceType(), vm, index, ptr));" CR + print " }" CR + print " return NULL;" CR + print " }" CR } else { - print " template <> inline int Return<" name " *>(HSQUIRRELVM vm, " name " *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, \"" realname "\", res, NULL, DefSQDestructorCallback<" name ">, true); return 1; }" + print " template <> inline int Return<" name " *>(HSQUIRRELVM vm, " name " *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, \"" realname "\", res, NULL, DefSQDestructorCallback<" name ">, true); return 1; }" CR } } function dump_fileheader() { # Break the Id tag, so SVN doesn't replace it - print "/* $I" "d$ */" - print "" - print "/*" - print " * This file is part of OpenTTD." - print " * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2." - print " * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - print " * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see ." - print " */" - print "" - print "/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */" - print "" - print "#include \"../" filename "\"" + print "/* $I" "d$ */" CR + print "" CR + print "/*" CR + print " * This file is part of OpenTTD." CR + print " * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2." CR + print " * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." CR + print " * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see ." CR + print " */" CR + print "" CR + print "/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */" CR + print "" CR + print "#include \"../" filename "\"" CR if (api != "Template") { gsub("script_", "template_", filename) - print "#include \"../template/" filename ".sq\"" + print "#include \"../template/" filename ".sq\"" CR } } @@ -103,11 +103,12 @@ BEGIN { start_squirrel_define_on_next_line = "false" has_fileheader = "false" cls_level = 0 - RS = "\r|\n" apis = tolower(api) if (apis == "gs") apis = "game" } +{ CR = (match($0, "\\r$") > 0 ? "\r" : "") } + /@file/ { filename = $3 gsub("^" apis "_", "script_", filename) @@ -136,13 +137,13 @@ BEGIN { if (api == "Template") { api_selected = "true" - if ($0 == "none" || $0 == "-all") api_selected = "false" + if ($0 == "none" CR || $0 == "-all" CR) api_selected = "false" next } - if ($0 == "none") { + if ($0 == "none" CR) { api_selected = "false" - } else if ($0 == "-all") { + } else if ($0 == "-all" CR) { api_selected = "false" } else if (match($0, "-" apis)) { api_selected = "false" @@ -259,7 +260,7 @@ BEGIN { } # Empty/white lines. When we may do the Squirrel export, do that export. -/^([ ]*)$/ { +/^([ ]*)\r*$/ { if (start_squirrel_define_on_next_line == "false") next if (cls_in_api != "true") { @@ -280,19 +281,19 @@ BEGIN { api_super_cls = super_cls gsub("^Script", api, api_super_cls) - print "" + print "" CR if (api == "Template") { # First check whether we have enums to print if (enum_size != 0) { if (namespace_opened == "false") { - print "namespace SQConvert {" + print "namespace SQConvert {" CR namespace_opened = "true" } - print " /* Allow enums to be used as Squirrel parameters */" + print " /* Allow enums to be used as Squirrel parameters */" CR for (i = 1; i <= enum_size; i++) { - print " template <> inline " enums[i] " GetParam(ForceType<" enums[i] ">, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (" enums[i] ")tmp; }" - print " template <> inline int Return<" enums[i] ">(HSQUIRRELVM vm, " enums[i] " res) { sq_pushinteger(vm, (int32)res); return 1; }" + print " template <> inline " enums[i] " GetParam(ForceType<" enums[i] ">, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (" enums[i] ")tmp; }" CR + print " template <> inline int Return<" enums[i] ">(HSQUIRRELVM vm, " enums[i] " res) { sq_pushinteger(vm, (int32)res); return 1; }" CR delete enums[i] } } @@ -300,10 +301,10 @@ BEGIN { # Then check whether we have structs/classes to print if (struct_size != 0) { if (namespace_opened == "false") { - print "namespace SQConvert {" + print "namespace SQConvert {" CR namespace_opened = "true" } - print " /* Allow inner classes/structs to be used as Squirrel parameters */" + print " /* Allow inner classes/structs to be used as Squirrel parameters */" CR for (i = 1; i <= struct_size; i++) { dump_class_templates(structs[i]) delete structs[i] @@ -311,41 +312,41 @@ BEGIN { } if (namespace_opened == "false") { - print "namespace SQConvert {" + print "namespace SQConvert {" CR namespace_opened = "true" } else { - print "" + print "" CR } - print " /* Allow " cls " to be used as Squirrel parameter */" + print " /* Allow " cls " to be used as Squirrel parameter */" CR dump_class_templates(cls) - print "} // namespace SQConvert" + print "} // namespace SQConvert" CR reset_reader() next } - print ""; - print "template <> const char *GetClassName<" cls ", ST_" toupper(api) ">() { return \"" api_cls "\"; }" - print ""; + print "" CR + print "template <> const char *GetClassName<" cls ", ST_" toupper(api) ">() { return \"" api_cls "\"; }" CR + print "" CR # Then do the registration functions of the class. */ - print "void SQ" api_cls "_Register(Squirrel *engine)" - print "{" - print " DefSQClass<" cls ", ST_" toupper(api) "> SQ" api_cls "(\"" api_cls "\");" + print "void SQ" api_cls "_Register(Squirrel *engine)" CR + print "{" CR + print " DefSQClass<" cls ", ST_" toupper(api) "> SQ" api_cls "(\"" api_cls "\");" CR if (super_cls == "Text" || super_cls == "ScriptObject" || super_cls == "AIAbstractList::Valuator") { - print " SQ" api_cls ".PreRegister(engine);" + print " SQ" api_cls ".PreRegister(engine);" CR } else { - print " SQ" api_cls ".PreRegister(engine, \"" api_super_cls "\");" + print " SQ" api_cls ".PreRegister(engine, \"" api_super_cls "\");" CR } if (super_cls != "ScriptEvent") { if (cls_param[2] == "v") { - print " SQ" api_cls ".AddSQAdvancedConstructor(engine);" + print " SQ" api_cls ".AddSQAdvancedConstructor(engine);" CR } else { - print " SQ" api_cls ".AddConstructor(engine, \"" cls_param[2] "\");" + print " SQ" api_cls ".AddConstructor(engine, \"" cls_param[2] "\");" CR } } - print "" + print "" CR # Enum values mlen = 0 @@ -353,10 +354,10 @@ BEGIN { if (mlen <= length(enum_value[i])) mlen = length(enum_value[i]) } for (i = 1; i <= enum_value_size; i++) { - print " SQ" api_cls ".DefSQConst(engine, " cls "::" enum_value[i] ", " substr(spaces, 1, mlen - length(enum_value[i])) "\"" enum_value[i] "\");" + print " SQ" api_cls ".DefSQConst(engine, " cls "::" enum_value[i] ", " substr(spaces, 1, mlen - length(enum_value[i])) "\"" enum_value[i] "\");" CR delete enum_value[i] } - if (enum_value_size != 0) print "" + if (enum_value_size != 0) print "" CR # Const values mlen = 0 @@ -364,10 +365,10 @@ BEGIN { if (mlen <= length(const_value[i])) mlen = length(const_value[i]) } for (i = 1; i <= const_size; i++) { - print " SQ" api_cls ".DefSQConst(engine, " cls "::" const_value[i] ", " substr(spaces, 1, mlen - length(const_value[i])) "\"" const_value[i] "\");" + print " SQ" api_cls ".DefSQConst(engine, " cls "::" const_value[i] ", " substr(spaces, 1, mlen - length(const_value[i])) "\"" const_value[i] "\");" CR delete const_value[i] } - if (const_size != 0) print "" + if (const_size != 0) print "" CR # Mapping of OTTD strings to errors mlen = 0 @@ -375,11 +376,11 @@ BEGIN { if (mlen <= length(enum_string_to_error_mapping_string[i])) mlen = length(enum_string_to_error_mapping_string[i]) } for (i = 1; i <= enum_string_to_error_size; i++) { - print " ScriptError::RegisterErrorMap(" enum_string_to_error_mapping_string[i] ", " substr(spaces, 1, mlen - length(enum_string_to_error_mapping_string[i])) cls "::" enum_string_to_error_mapping_error[i] ");" + print " ScriptError::RegisterErrorMap(" enum_string_to_error_mapping_string[i] ", " substr(spaces, 1, mlen - length(enum_string_to_error_mapping_string[i])) cls "::" enum_string_to_error_mapping_error[i] ");" CR delete enum_string_to_error_mapping_string[i] } - if (enum_string_to_error_size != 0) print "" + if (enum_string_to_error_size != 0) print "" CR # Mapping of errors to human 'readable' strings. mlen = 0 @@ -387,10 +388,10 @@ BEGIN { if (mlen <= length(enum_error_to_string_mapping[i])) mlen = length(enum_error_to_string_mapping[i]) } for (i = 1; i <= enum_error_to_string_size; i++) { - print " ScriptError::RegisterErrorMapString(" cls "::" enum_error_to_string_mapping[i] ", " substr(spaces, 1, mlen - length(enum_error_to_string_mapping[i])) "\"" enum_error_to_string_mapping[i] "\");" + print " ScriptError::RegisterErrorMapString(" cls "::" enum_error_to_string_mapping[i] ", " substr(spaces, 1, mlen - length(enum_error_to_string_mapping[i])) "\"" enum_error_to_string_mapping[i] "\");" CR delete enum_error_to_string_mapping[i] } - if (enum_error_to_string_size != 0) print "" + if (enum_error_to_string_size != 0) print "" CR # Static methods mlen = 0 @@ -399,13 +400,13 @@ BEGIN { } for (i = 1; i <= static_method_size; i++) { if (static_methods[i, 2] == "v") { - print " SQ" api_cls ".DefSQAdvancedStaticMethod(engine, &" cls "::" static_methods[i, 0] ", " substr(spaces, 1, mlen - length(static_methods[i, 0]) - 8) "\"" static_methods[i, 0] "\");" + print " SQ" api_cls ".DefSQAdvancedStaticMethod(engine, &" cls "::" static_methods[i, 0] ", " substr(spaces, 1, mlen - length(static_methods[i, 0]) - 8) "\"" static_methods[i, 0] "\");" CR } else { - print " SQ" api_cls ".DefSQStaticMethod(engine, &" cls "::" static_methods[i, 0] ", " substr(spaces, 1, mlen - length(static_methods[i, 0])) "\"" static_methods[i, 0] "\", " substr(spaces, 1, mlen - length(static_methods[i, 0])) "" static_methods[i, 1] ", \"" static_methods[i, 2] "\");" + print " SQ" api_cls ".DefSQStaticMethod(engine, &" cls "::" static_methods[i, 0] ", " substr(spaces, 1, mlen - length(static_methods[i, 0])) "\"" static_methods[i, 0] "\", " substr(spaces, 1, mlen - length(static_methods[i, 0])) "" static_methods[i, 1] ", \"" static_methods[i, 2] "\");" CR } delete static_methods[i] } - if (static_method_size != 0) print "" + if (static_method_size != 0) print "" CR # Non-static methods mlen = 0 @@ -414,16 +415,16 @@ BEGIN { } for (i = 1; i <= method_size; i++) { if (methods[i, 2] == "v") { - print " SQ" api_cls ".DefSQAdvancedMethod(engine, &" cls "::" methods[i, 0] ", " substr(spaces, 1, mlen - length(methods[i, 0]) - 8) "\"" methods[i, 0] "\");" + print " SQ" api_cls ".DefSQAdvancedMethod(engine, &" cls "::" methods[i, 0] ", " substr(spaces, 1, mlen - length(methods[i, 0]) - 8) "\"" methods[i, 0] "\");" CR } else { - print " SQ" api_cls ".DefSQMethod(engine, &" cls "::" methods[i, 0] ", " substr(spaces, 1, mlen - length(methods[i, 0])) "\"" methods[i, 0] "\", " substr(spaces, 1, mlen - length(methods[i, 0])) "" methods[i, 1] ", \"" methods[i, 2] "\");" + print " SQ" api_cls ".DefSQMethod(engine, &" cls "::" methods[i, 0] ", " substr(spaces, 1, mlen - length(methods[i, 0])) "\"" methods[i, 0] "\", " substr(spaces, 1, mlen - length(methods[i, 0])) "" methods[i, 1] ", \"" methods[i, 2] "\");" CR } delete methods[i] } - if (method_size != 0) print "" + if (method_size != 0) print "" CR - print " SQ" api_cls ".PostRegister(engine);" - print "}" + print " SQ" api_cls ".PostRegister(engine);" CR + print "}" CR reset_reader() @@ -438,6 +439,7 @@ BEGIN { if (in_enum == "true") { enum_value_size++ sub(",", "", $1) + sub("\r", "", $1) enum_value[enum_value_size] = $1 # Check if this a special error enum @@ -475,7 +477,7 @@ BEGIN { } # Add a method to the list -/^.*\(.*\).*$/ { +/^.*\(.*\).*\r*$/ { if (cls_level != 1) next if (match($0, "~")) { if (api_selected != "") { From 2cf9405aa2abfbb97dae93cf6587d5fba21ad958 Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 8 Jan 2019 16:38:13 +0100 Subject: [PATCH 178/622] Fix: remove manual single file generation in squirrel_export.sh as it's broken --- src/script/api/squirrel_export.sh | 56 ++++++++++--------------------- 1 file changed, 18 insertions(+), 38 deletions(-) diff --git a/src/script/api/squirrel_export.sh b/src/script/api/squirrel_export.sh index 92bd434b93..1070fb1aed 100755 --- a/src/script/api/squirrel_export.sh +++ b/src/script/api/squirrel_export.sh @@ -43,50 +43,30 @@ case $apilc in *) echo "Unknown API type."; exit 1 ;; esac -if [ -z "$1" ]; then - for f in `ls ../*.hpp`; do - bf=`basename ${f} | sed s@script_@${apilc}_@` +for f in `ls ../*.hpp`; do + bf=`basename ${f} | sed s@script_@${apilc}_@` - # ScriptController has custom code, and should not be generated - if [ "`basename ${f}`" = "script_controller.hpp" ]; then continue; fi - if [ "`basename ${f}`" = "script_object.hpp" ]; then continue; fi + # ScriptController has custom code, and should not be generated + if [ "`basename ${f}`" = "script_controller.hpp" ]; then continue; fi - ${AWK} -v api=${apiuc} -f ${scriptdir}/squirrel_export.awk ${f} > ${bf}.tmp + ${AWK} -v api=${apiuc} -f ${scriptdir}/squirrel_export.awk ${f} > ${bf}.tmp - if [ "`wc -l ${bf}.tmp | cut -d\ -f1`" = "0" ]; then - if [ -f "${bf}.sq" ]; then - echo "Deleted: ${bf}.sq" - svn del --force ${bf}.sq > /dev/null 2>&1 - fi - rm -f ${bf}.tmp - elif ! [ -f "${bf}.sq" ] || [ -n "`diff -I '$Id' ${bf}.tmp ${bf}.sq 2> /dev/null || echo boo`" ]; then - mv ${bf}.tmp ${bf}.sq - echo "Updated: ${bf}.sq" - svn add ${bf}.sq > /dev/null 2>&1 - svn propset svn:eol-style native ${bf}.sq > /dev/null 2>&1 - svn propset svn:keywords Id ${bf}.sq > /dev/null 2>&1 - else - rm -f ${bf}.tmp + if [ "`wc -l ${bf}.tmp | cut -d\ -f1`" = "0" ]; then + if [ -f "${bf}.sq" ]; then + echo "Deleted: ${bf}.sq" + svn del --force ${bf}.sq > /dev/null 2>&1 fi - done -else - ${AWK} -v api=${apiuc} -f ${scriptdir}/squirrel_export.awk $1 > $1.tmp - if [ `wc -l $1.tmp | cut -d\ -f1` -eq "0" ]; then - if [ -f "$1.sq" ]; then - echo "Deleted: $1.sq" - svn del --force $1.sq > /dev/null 2>&1 - fi - rm -f $1.tmp - elif ! [ -f "${f}.sq" ] || [ -n "`diff -I '$Id' $1.sq $1.tmp 2> /dev/null || echo boo`" ]; then - mv $1.tmp $1.sq - echo "Updated: $1.sq" - svn add $1.sq > /dev/null 2>&1 - svn propset svn:eol-style native $1.sq > /dev/null 2>&1 - svn propset svn:keywords Id $1.sq > /dev/null 2>&1 + rm -f ${bf}.tmp + elif ! [ -f "${bf}.sq" ] || [ -n "`diff -I '$Id' ${bf}.tmp ${bf}.sq 2> /dev/null || echo boo`" ]; then + mv ${bf}.tmp ${bf}.sq + echo "Updated: ${bf}.sq" + svn add ${bf}.sq > /dev/null 2>&1 + svn propset svn:eol-style native ${bf}.sq > /dev/null 2>&1 + svn propset svn:keywords Id ${bf}.sq > /dev/null 2>&1 else - rm -f $1.tmp + rm -f ${bf}.tmp fi -fi +done # Remove .hpp.sq if .hpp doesn't exist anymore for f in `ls *.hpp.sq`; do From 8e5a8d3ec3ec19e25f040b0b85b8f5764a735db1 Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 8 Jan 2019 16:40:38 +0100 Subject: [PATCH 179/622] Cleanup: remove svn references in squirrel_export.sh --- src/script/api/squirrel_export.sh | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/script/api/squirrel_export.sh b/src/script/api/squirrel_export.sh index 1070fb1aed..54e595b9bc 100755 --- a/src/script/api/squirrel_export.sh +++ b/src/script/api/squirrel_export.sh @@ -26,7 +26,7 @@ apilc=`pwd | sed "s@/api@@;s@.*/@@"` # Check if we are in the root directory of the API, as then we generate all APIs if [ "$apilc" = "script" ]; then - for api in `find -type d | cut -b3- | grep -v '\.svn\|/'`; do + for api in `find -type d | cut -b3-`; do if [ -z "$api" ]; then continue; fi echo "Generating for API '$api' ..." cd $api @@ -54,15 +54,12 @@ for f in `ls ../*.hpp`; do if [ "`wc -l ${bf}.tmp | cut -d\ -f1`" = "0" ]; then if [ -f "${bf}.sq" ]; then echo "Deleted: ${bf}.sq" - svn del --force ${bf}.sq > /dev/null 2>&1 + rm -f ${bf}.sq fi rm -f ${bf}.tmp elif ! [ -f "${bf}.sq" ] || [ -n "`diff -I '$Id' ${bf}.tmp ${bf}.sq 2> /dev/null || echo boo`" ]; then mv ${bf}.tmp ${bf}.sq echo "Updated: ${bf}.sq" - svn add ${bf}.sq > /dev/null 2>&1 - svn propset svn:eol-style native ${bf}.sq > /dev/null 2>&1 - svn propset svn:keywords Id ${bf}.sq > /dev/null 2>&1 else rm -f ${bf}.tmp fi @@ -73,7 +70,7 @@ for f in `ls *.hpp.sq`; do f=`echo ${f} | sed "s/.hpp.sq$/.hpp/;s@${apilc}_@script_@"` if [ ! -f ../${f} ];then echo "Deleted: ${f}.sq" - svn del --force ${f}.sq > /dev/null 2>&1 + rm -f ${f}.sq fi done From 3f28e0cf53dc0c3de53a47874465be140f949949 Mon Sep 17 00:00:00 2001 From: glx Date: Wed, 9 Jan 2019 14:52:13 +0100 Subject: [PATCH 180/622] Add: squirrel_export.vbs for users unable to run bash/gawk scripts --- src/script/api/squirrel_export.vbs | 946 +++++++++++++++++++++++++++++ 1 file changed, 946 insertions(+) create mode 100644 src/script/api/squirrel_export.vbs diff --git a/src/script/api/squirrel_export.vbs b/src/script/api/squirrel_export.vbs new file mode 100644 index 0000000000..a13869509a --- /dev/null +++ b/src/script/api/squirrel_export.vbs @@ -0,0 +1,946 @@ +Option Explicit + +' $Id$ +' +' This file is part of OpenTTD. +' OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. +' OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +' See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + +Dim FSO +Dim enum_size, enums, enum_value_size, enum_value +Dim enum_string_to_error_size, enum_string_to_error_mapping_string, enum_string_to_error_mapping_error +Dim enum_error_to_string_size, enum_error_to_string_mapping, const_size, const_value +Dim struct_size, structs, method_size, methods, static_method_size, static_methods +Dim super_cls, cls, api_selected, cls_in_api, start_squirrel_define_on_next_line, has_fileheader, cls_level +Dim apis, filename, doxygen_skip, squirrel_stuff, is_public, cls_param(2), comment, in_enum + +Set FSO = CreateObject("Scripting.FileSystemObject") + +Function CompareFiles(filename1, filename2) + Dim file, lines1, lines2 + + If Not FSO.FileExists(filename1) Then + CompareFiles = False + Exit Function + End If + Set file = FSO.OpenTextFile(filename1, 1) + If Not file.AtEndOfStream Then + lines1 = file.ReadAll + End IF + file.Close + + If Not FSO.FileExists(filename2) Then + CompareFiles = False + Exit Function + End If + Set file = FSO.OpenTextFile(filename2, 1) + If Not file.AtEndOfStream Then + lines2 = file.ReadAll + End IF + file.Close + + CompareFiles = (lines1 = lines2) +End Function + +Function IsEmptyFile(filename) + Dim file + Set file = FSO.OpenTextFile(filename, 1) + IsEmptyFile = file.AtEndOfStream + file.Close +End Function + +Function DumpClassTemplates(name, file) + Dim re, realname + Set re = New RegExp + + re.Pattern = "^Script" + realname = re.Replace(name, "") + + file.WriteLine " template <> inline " & name & " *GetParam(ForceType<" & name & " *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (" & name & " *)instance; }" + file.WriteLine " template <> inline " & name & " &GetParam(ForceType<" & name & " &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" & name & " *)instance; }" + file.WriteLine " template <> inline const " & name & " *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (" & name & " *)instance; }" + file.WriteLine " template <> inline const " & name & " &GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" & name & " *)instance; }" + If name = "ScriptEvent" Then + file.WriteLine " template <> inline int Return<" & name & " *>(HSQUIRRELVM vm, " & name & " *res) { if (res == NULL) { sq_pushnull(vm); return 1; } Squirrel::CreateClassInstanceVM(vm, " & Chr(34) & realname & Chr(34) & ", res, NULL, DefSQDestructorCallback<" & name & ">, true); return 1; }" + ElseIf name = "ScriptText" Then + file.WriteLine "" + file.WriteLine " template <> inline Text *GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) {" + file.WriteLine " if (sq_gettype(vm, index) == OT_INSTANCE) {" + file.WriteLine " return GetParam(ForceType(), vm, index, ptr);" + file.WriteLine " }" + file.WriteLine " if (sq_gettype(vm, index) == OT_STRING) {" + file.WriteLine " return new RawText(GetParam(ForceType(), vm, index, ptr));" + file.WriteLine " }" + file.WriteLine " return NULL;" + file.WriteLine " }" + Else + file.WriteLine " template <> inline int Return<" & name & " *>(HSQUIRRELVM vm, " & name & " *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, " & Chr(34) & realname & Chr(34) & ", res, NULL, DefSQDestructorCallback<" & name & ">, true); return 1; }" + End If +End Function + +Function DumpFileheader(api, file) + Dim re + Set re = New RegExp + ' Break the Id tag, so SVN doesn't replace it + file.WriteLine "/* $I" & "d$ */" + file.WriteLine "" + file.WriteLine "/*" + file.WriteLine " * This file is part of OpenTTD." + file.WriteLine " * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2." + file.WriteLine " * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + file.WriteLine " * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see ." + file.WriteLine " */" + file.WriteLine "" + file.WriteLine "/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */" + file.WriteLine "" + file.WriteLine "#include " & Chr(34) & "../" & filename & Chr(34) + If api <> "Template" Then + re.Pattern = "script_" + filename = re.Replace(filename, "template_") + file.WriteLine "#include " & Chr(34) & "../template/" & filename & ".sq" & Chr(34) + End If +End Function + +Function ResetReader() + enum_size = 0 + enums.RemoveAll + enum_value_size = 0 + enum_value.RemoveAll + enum_string_to_error_size = 0 + enum_string_to_error_mapping_string.RemoveAll + enum_string_to_error_mapping_error.RemoveAll + enum_error_to_string_size = 0 + enum_error_to_string_mapping.RemoveAll + const_size = 0 + const_value.RemoveAll + struct_size = 0 + structs.RemoveAll + method_size = 0 + methods.RemoveAll + static_method_size = 0 + static_methods.RemoveAll + cls = "" + start_squirrel_define_on_next_line = False + cls_level = 0 + cls_in_api = "" +End Function + +Sub SquirrelExportParse(api, line, file) + Dim re + Set re = New RegExp + + re.Pattern = "@file" + If re.Test(line) Then + filename = Split(line)(2) + re.Pattern = "^" & apis & "_" + filename = re.Replace(filename, "script_") + End If + + ' Ignore special doxygen blocks + re.Pattern = "^#ifndef DOXYGEN_API" + If re.Test(line) Then + doxygen_skip = "next" + Exit Sub + End If + re.Pattern = "^#ifdef DOXYGEN_API" + If re.Test(line) Then + doxygen_skip = "true" + Exit Sub + End If + re.Pattern = "^#endif /\* DOXYGEN_API \*/" + If re.Test(line) Then + doxygen_skip = "false" + Exit Sub + End If + re.Pattern = "^#else" + If re.Test(line) Then + If doxygen_skip = "next" Then + doxygen_skip = "true" + Else + doxygen_skip = "false" + End If + Exit Sub + End If + If doxygen_skip = "true" Then Exit Sub + + re.Pattern = "^([ ]*)\* @api" + If re.Test(line) Then + ' By default, classes are not selected + If cls_level = 0 Then api_selected = "false" + + re.Pattern = "^([ ]*)" + line = re.Replace(line, "") + re.Pattern = "\* @api " + line = re.Replace(line, "") + + If api = "Template" Then + api_selected = "true" + If line = "none" Or line = "-all" Then api_selected = "false" + Exit Sub + End If + + If line = "none" Then + api_selected = "false" + ElseIf line = "-all" Then + api_selected = "false" + Else + re.Pattern = "-" & apis + If re.Test(line) Then + api_selected = "false" + Else + re.Pattern = apis + If re.Test(line) Then + api_selected = "true" + End If + End If + End If + Exit Sub + End If + + ' Remove the old squirrel stuff + re.Pattern = "#ifdef DEFINE_SQUIRREL_CLASS" + If re.Test(line) Then + squirrel_stuff = True + Exit Sub + End If + re.Pattern = "^#endif /\* DEFINE_SQUIRREL_CLASS \*/" + If re.Test(line) Then + If squirrel_stuff Then squirrel_stuff = False + Exit Sub + End If + If squirrel_stuff Then Exit Sub + + ' Ignore forward declarations of classes + re.Pattern = "^( *)class(.*);" + If re.Test(line) Then Exit Sub + ' We only want to have public functions exported for now + re.Pattern = "^( *)class" + If re.Test(line) Then + line = Split(line) + If cls_level = 0 Then + If api_selected = "" Then + WScript.Echo "Class '" & line(1) & "' has no @api. It won't be published to any API." + api_selected = "false" + End If + is_public = False + cls_param(0) = "" + cls_param(1) = 1 + cls_param(2) = "x" + cls_in_api = api_selected + api_selected = "" + cls = line(1) + re.Pattern = "public|protected|private" + If UBound(line) > 2 Then + If re.Test(line(3)) Then + super_cls = line(4) + Else + super_cls = line(3) + End If + End If + ElseIf cls_level = 1 Then + If api_selected = "" Then api_selected = cls_in_api + + If api_selected = "true" Then + struct_size = struct_size + 1 + structs.Item(struct_size) = cls & "::" & line(1) + End If + api_selected = "" + End If + cls_level = cls_level + 1 + Exit Sub + End If + re.Pattern = "^( *)public" + If re.Test(line) Then + If cls_level = 1 Then is_public = True + Exit Sub + End If + re.Pattern = "^( *)protected" + If re.Test(line) Then + If cls_level = 1 Then is_public = False + Exit Sub + End If + re.Pattern = "^( *)private" + If re.Test(line) Then + If cls_level = 1 Then is_public = False + Exit Sub + End If + + ' Ignore the comments + re.Pattern = "^#" + If re.Test(line) Then Exit Sub + re.Pattern = "/\*.*\*/" + If re.Test(line) Then + comment = False + Exit Sub + End If + re.Pattern = "/\*" + If re.Test(line) Then + comment = True + Exit Sub + End If + re.Pattern = "\*/" + If re.Test(line) Then + comment = False + Exit Sub + End If + If comment Then Exit Sub + + ' We need to make specialized conversions for structs + re.Pattern = "^( *)struct" + If re.Test(line) Then + cls_level = cls_level + 1 + + ' Check if we want to publish this struct + If api_selected = "" Then api_selected = cls_in_api + If api_selected = "false" Then + api_selected = "" + Exit Sub + End If + api_selected = "" + + If Not is_public Then Exit Sub + If cls_level <> 1 Then Exit Sub + + struct_size = struct_size + 1 + structs.Item(struct_size) = cls & "::" & Split(line)(1) + Exit Sub + End If + + ' We need to make specialized conversions for enums + re.Pattern = "^( *)enum" + If re.Test(line) Then + cls_level = cls_level + 1 + + ' Check if we want to publish this enum + If api_selected = "" Then api_selected = cls_in_api + If api_selected = "false" Then + api_selected = "" + Exit Sub + End If + api_selected = "" + + If Not is_public Then Exit Sub + + in_enum = True + enum_size = enum_size + 1 + enums.Item(enum_size) = cls & "::" & Split(line)(1) + Exit Sub + End If + + ' Maybe the end of the class, if so we can start with the Squirrel export pretty soon + re.Pattern = "};" + If re.Test(line) Then + cls_level = cls_level - 1 + If cls_level <> 0 Then + in_enum = False + Exit Sub + End If + + If cls = "" Then Exit Sub + start_squirrel_define_on_next_line = True + Exit Sub + End If + + ' Empty/white lines. When we may do the Squirrel export, do that export. + re.Pattern = "^([ ]*)$" + If re.Test(line) Then + Dim namespace_opened, api_cls, api_super_cls, i, mlen, spaces + + If Not start_squirrel_define_on_next_line Then Exit Sub + + If cls_in_api <> "true" Then + ResetReader + Exit Sub + End If + If Not has_fileheader Then + DumpFileHeader api, file + has_fileheader = True + End If + + is_public = False + namespace_opened = False + + re.Pattern = "^Script" + api_cls = re.Replace(cls, api) + api_super_cls = re.Replace(super_cls, api) + + file.WriteLine "" + + If api = "Template" Then + ' First check whether we have enums to print + If enum_size <> 0 Then + If Not namespace_opened Then + file.WriteLine "namespace SQConvert {" + namespace_opened = True + End If + file.WriteLine " /* Allow enums to be used as Squirrel parameters */" + For i = 1 To enum_size + file.WriteLine " template <> inline " & enums.Item(i) & " GetParam(ForceType<" & enums.Item(i) & ">, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (" & enums.Item(i) & ")tmp; }" + file.WriteLine " template <> inline int Return<" & enums.Item(i) & ">(HSQUIRRELVM vm, " & enums.Item(i) & " res) { sq_pushinteger(vm, (int32)res); return 1; }" + Next + End If + + ' Then check whether we have structs/classes to print + If struct_size <> 0 Then + If Not namespace_opened Then + file.WriteLine "namespace SQConvert {" + namespace_opened = True + End If + file.WriteLine " /* Allow inner classes/structs to be used as Squirrel parameters */" + For i = 1 To struct_size + DumpClassTemplates structs.Item(i), file + Next + End If + + If Not namespace_opened Then + file.WriteLine "namespace SQConvert {" + namespace_opened = True + Else + file.WriteLine "" + End If + file.WriteLine " /* Allow " & cls & " to be used as Squirrel parameter */" + DumpClassTemplates cls, file + + file.WriteLine "} // namespace SQConvert" + + ResetReader + Exit Sub + End If + + file.WriteLine "" + file.WriteLine "template <> const char *GetClassName<" & cls & ", ST_" & UCase(api) & ">() { return " & Chr(34) & api_cls & Chr(34) & "; }" + file.WriteLine "" + + ' Then do the registration functions of the class. + file.WriteLine "void SQ" & api_cls & "_Register(Squirrel *engine)" + file.WriteLine "{" + file.WriteLine " DefSQClass<" & cls & ", ST_" & UCase(api) & "> SQ" & api_cls & "(" & Chr(34) & api_cls & Chr(34) & ");" + If super_cls = "Text" Or super_cls = "ScriptObject" Or super_cls = "AIAbstractiveList::Valuator" Then + file.WriteLine " SQ" & api_cls & ".PreRegister(engine);" + Else + file.WriteLine " SQ" & api_cls & ".PreRegister(engine, " & Chr(34) & api_super_cls & Chr(34) & ");" + End If + If super_cls <> "ScriptEvent" Then + If cls_param(2) = "v" Then + file.WriteLine " SQ" & api_cls & ".AddSQAdvancedConstructor(engine);" + Else + file.WriteLine " SQ" & api_cls & ".AddConstructor(engine, " & Chr(34) & cls_param(2) & Chr(34) & ");" + End If + End If + file.WriteLine "" + + ' Enum values + mlen = 0 + For i = 1 To enum_value_size + If mlen <= Len(enum_value.Item(i)) Then mlen = Len(enum_value.Item(i)) + Next + For i = 1 To enum_value_size + file.WriteLine " SQ" & api_cls & ".DefSQConst(engine, " & cls & "::" & enum_value.Item(i) & ", " & Space(mlen - Len(enum_value.Item(i))) & Chr(34) & enum_value.Item(i) & Chr(34) & ");" + Next + If enum_value_size <> 0 Then file.WriteLine "" + + ' Const values + mlen = 0 + For i = 1 To const_size + If mlen <= Len(const_value.Item(i)) Then mlen = Len(const_value.Item(i)) + Next + For i = 1 To const_size + file.WriteLine " SQ" & api_cls & ".DefSQConst(engine, " & cls & "::" & const_value.Item(i) & ", " & Space(mlen - Len(const_value.Item(i))) & Chr(34) & const_value.Item(i) & Chr(34) & ");" + Next + If const_size <> 0 Then file.WriteLine "" + + ' Mapping of OTTD strings to errors + mlen = 0 + For i = 1 To enum_string_to_error_size + If mlen <= Len(enum_string_to_error_mapping_string.Item(i)) Then mlen = Len(enum_string_to_error_mapping_string.Item(i)) + Next + For i = 1 To enum_string_to_error_size + file.WriteLine " ScriptError::RegisterErrorMap(" & enum_string_to_error_mapping_string.Item(i) & ", " & Space(mlen - Len(enum_string_to_error_mapping_string.Item(i))) & cls & "::" & enum_string_to_error_mapping_error.Item(i) & ");" + Next + If enum_string_to_error_size <> 0 Then file.WriteLine "" + + ' Mapping of errors to human 'readable' strings. + mlen = 0 + For i = 1 To enum_error_to_string_size + If mlen <= Len(enum_error_to_string_mapping.Item(i)) Then mlen = Len(enum_error_to_string_mapping.Item(i)) + Next + For i = 1 To enum_error_to_string_size + file.WriteLine " ScriptError::RegisterErrorMapString(" & cls & "::" & enum_error_to_string_mapping.Item(i) & ", " & Space(mlen - Len(enum_error_to_string_mapping.Item(i))) & Chr(34) & enum_error_to_string_mapping.Item(i) & Chr(34) & ");" + Next + If enum_error_to_string_size <> 0 Then file.WriteLine "" + + ' Static methods + mlen = 0 + For i = 1 To static_method_size + If mlen <= Len(static_methods.Item(i)(0)) Then mlen = Len(static_methods.Item(i)(0)) + Next + For i = 1 To static_method_size + If static_methods.Item(i)(2) = "v" Then + spaces = mlen - Len(static_methods.Item(i)(0)) - 8 + If spaces < 0 Then spaces = 0 + file.WriteLine " SQ" & api_cls & ".DefSQAdvancedStaticMethod(engine, &" & cls & "::" & static_methods.Item(i)(0) & ", " & Space(spaces) & Chr(34) & static_methods.Item(i)(0) & Chr(34) & ");" + Else + file.WriteLine " SQ" & api_cls & ".DefSQStaticMethod(engine, &" & cls & "::" & static_methods.Item(i)(0) & ", " & Space(mlen - Len(static_methods.Item(i)(0))) & Chr(34) & static_methods.Item(i)(0) & Chr(34) & ", " & Space(mlen - Len(static_methods.Item(i)(0))) & static_methods.Item(i)(1) & ", " & Chr(34) & static_methods.Item(i)(2) & Chr(34) & ");" + End If + Next + If static_method_size <> 0 Then file.WriteLine "" + + ' Non-static methods + mlen = 0 + For i = 1 To method_size + If mlen <= Len(methods.Item(i)(0)) Then mlen = Len(methods.Item(i)(0)) + Next + For i = 1 To method_size + If methods.Item(i)(2) = "v" Then + spaces = mlen - Len(methods.Item(i)(0)) - 8 + If spaces < 0 Then spaces = 0 + file.WriteLine " SQ" & api_cls & ".DefSQAdvancedMethod(engine, &" & cls & "::" & methods.Item(i)(0) & ", " & Space(spaces) & Chr(34) & methods.Item(i)(0) & Chr(34) & ");" + Else + file.WriteLine " SQ" & api_cls & ".DefSQMethod(engine, &" & cls & "::" & methods.Item(i)(0) & ", " & Space(mlen - Len(methods.Item(i)(0))) & Chr(34) & methods.Item(i)(0) & Chr(34) & ", " & Space(mlen - Len(methods.Item(i)(0))) & methods.Item(i)(1) & ", " & Chr(34) & methods.Item(i)(2) & Chr(34) & ");" + End If + Next + If method_size <> 0 Then file.WriteLine "" + + file.WriteLine " SQ" & api_cls & ".PostRegister(engine);" + file.WriteLine "}" + + ResetReader + + Exit Sub + End If + + ' Skip non-public functions + If Not is_public Then Exit Sub + + ' Add enums + If in_enum Then + enum_value_size = enum_value_size + 1 + re.Pattern = "[, ]" + re.Global = True + enum_value.Item(enum_value_size) = re.Replace(split(line)(0), "") + + ' Check if this a special error enum + re.Pattern = ".*::ErrorMessages" + If re.Test(enums.Item(enum_size)) Then + ' syntax: + ' enum ErrorMessages { + ' ERR_SOME_ERROR, // [STR_ITEM1, STR_ITEM2, ...] + ' } + + ' Set the mappings + re.Pattern = "\[.*\]" + If re.Test(line) Then + Dim mappings + mappings = re.Execute(line)(0).Value + re.Pattern = "[\[ \]]" + mappings = re.Replace(mappings, "") + + mappings = Split(mappings, ",") + For i = LBound(mappings) To UBound(mappings) + enum_string_to_error_size = enum_string_to_error_size + 1 + enum_string_to_error_mapping_string.Item(enum_string_to_error_size) = mappings(i) + enum_string_to_error_mapping_error.Item(enum_string_to_error_size) = enum_value.Item(enum_value_size) + Next + + enum_error_to_string_size = enum_error_to_string_size + 1 + enum_error_to_string_mapping.Item(enum_error_to_string_size) = enum_value.Item(enum_value_size) + End If + End If + re.Global = False + Exit Sub + End If + + ' Add a const (non-enum) value + re.Pattern = "^[ ]*static const \w+ \w+ = -?\(?\w*\)?\w+;" + If re.Test(line) Then + const_size = const_size + 1 + const_value.Item(const_size) = Split(line)(3) + Exit Sub + End If + + ' Add a method to the list + re.Pattern = "^.*\(.*\).*$" + If re.Test(line) Then + Dim is_static, param_s, func, funcname, params, types + If cls_level <> 1 Then Exit Sub + re.Pattern = "~" + If re.Test(line) Then + If api_selected <> "" Then + WScript.Echo "Destructor for '" & cls & "' has @api. Tag ignored." + api_selected = "" + End If + Exit Sub + End If + + re.Pattern = "static" + is_static = re.Test(line) + re.Pattern = "\bvirtual\b" + line = re.Replace(line, "") + re.Pattern = "\bstatic\b" + line = re.Replace(line, "") + re.Pattern = "\bconst\b" + line = re.Replace(line, "") + re.Pattern = "{.*" + line = re.Replace(line, "") + param_s = line + re.Pattern = "\*" + line = re.Replace(line, "") + re.Pattern = "\(.*" + line = re.Replace(line, "") + re.Pattern = "^[ ]*" + line = re.Replace(line, "") + + re.Pattern = ".*\(" + param_s = re.Replace(param_s, "") + re.Pattern = "\).*" + param_s = re.Replace(param_s, "") + + func = Split(line) + If UBound(func) > 0 Then + funcname = func(1) + Else + funcname = "" + End If + If func(0) = cls And funcname = "" Then + If api_selected <> "" Then + WScript.Echo "Constructor for '" & cls & "' has @api. Tag ignored." + api_selected = "" + End If + cls_param(0) = param_s + If param_s = "" Then Exit Sub + ElseIf funcname = "" Then + Exit Sub + End If + + params = Split(param_s, ",") + If is_static Then + types = "." + Else + types = "x" + End If + For i = LBound(params) To UBound(params) + Do ' null loop for logic short-circuit + re.Pattern = "^[ ]*" + params(i) = re.Replace(params(i), "") + re.Pattern = "\*|&" + If re.Test(params(i)) Then + re.Pattern = "^char" + If re.test(params(i)) Then + ' Many types can be converted to string, so use '.', not 's'. (handled by our glue code) + types = types & "." + Exit Do + End If + re.Pattern = "^void" + If re.test(params(i)) Then + types = types & "p" + Exit Do + End If + re.Pattern = "^Array" + If re.test(params(i)) Then + types = types & "a" + Exit Do + End If + re.Pattern = "^struct Array" + If re.test(params(i)) Then + types = types & "a" + Exit Do + End If + re.Pattern = "^Text" + If re.test(params(i)) Then + types = types & "." + Exit Do + End If + types = types & "x" + Exit Do + End If + re.Pattern = "^bool" + If re.Test(params(i)) Then + types = types & "b" + Exit Do + End If + re.Pattern = "^HSQUIRRELVM" + If re.Test(params(i)) Then + types = "v" + Exit Do + End If + types = types & "i" + Loop While False ' end of null loop + Next + i = i + 1 + + ' Check if we want to publish this function + If api_selected = "" Then api_selected = cls_in_api + If api_selected = "false" Then + api_selected = "" + Exit Sub + End If + api_selected = "" + + If func(0) = cls And funcname = "" Then + cls_param(1) = i + cls_param(2) = types + Exit Sub + End If + If Left(funcname, 1) = "_" And types <> "v" Then Exit Sub + If is_static Then + static_method_size = static_method_size + 1 + static_methods.Item(static_method_size) = Array(funcname, i, types) + Exit Sub + End If + method_size = method_size + 1 + methods.Item(method_size) = Array(funcname, i, types) + Exit Sub + End If +End Sub + +Sub SquirrelExport(api, srcfilename, dstfilename) + Dim src, dst, line + Set src = FSO.OpenTextFile(srcfilename, 1) + Set dst = FSO.OpenTextFile(dstfilename, 2, True) + + enum_size = 0 + Set enums = CreateObject("Scripting.Dictionary") + enum_value_size = 0 + Set enum_value = CreateObject("Scripting.Dictionary") + enum_string_to_error_size = 0 + Set enum_string_to_error_mapping_string = CreateObject("Scripting.Dictionary") + Set enum_string_to_error_mapping_error = CreateObject("Scripting.Dictionary") + enum_error_to_string_size = 0 + Set enum_error_to_string_mapping = CreateObject("Scripting.Dictionary") + const_size = 0 + Set const_value = CreateObject("Scripting.Dictionary") + struct_size = 0 + Set structs = CreateObject("Scripting.Dictionary") + method_size = 0 + Set methods = CreateObject("Scripting.Dictionary") + static_method_size = 0 + Set static_methods = CreateObject("Scripting.Dictionary") + super_cls = "" + cls = "" + api_selected = "" + cls_in_api = "" + start_squirrel_define_on_next_line = False + has_fileheader = False + cls_level = 0 + apis = LCase(api) + If apis = "gs" Then apis = "game" + + While Not src.AtEndOfStream + line = src.ReadLine + SquirrelExportParse api, line, dst + Wend + + src.Close + dst.Close +End Sub + +Function SortDict(dict) + Set SortDict = CreateObject("Scripting.Dictionary") + While dict.Count <> 0 + Dim first, i + first = "" + For Each i in dict + If first = "" Or StrComp(first, i) = 1 Then first = i + Next + SortDict.Add first, first + dict.Remove(first) + Wend +End Function + +Sub ExportInstanceParse(apiuc, apilc, line, file) + Dim re, fname, f, files, r, regs + Set re = New RegExp + + re.Pattern = "\.hpp\.sq" + If re.Test(line) Then + re.Pattern = "template" + If re.Test(line) Then + file.WriteLine line + End If + Exit Sub + End If + + re.Pattern = "SQ" & apiuc & "Controller_Register" + If re.Test(line) Then + file.WriteLine line + Exit Sub + End If + + re.Pattern = "SQ" & apiuc & ".*_Register" + If re.Test(line) Then Exit Sub + + re.Pattern = "Note: this line is a marker in squirrel_export.sh. Do not change!" + If re.Test(line) Then + file.WriteLine line + Set files = CreateObject("Scripting.Dictionary") + For Each fname In FSO.GetFolder(".").Files + Do ' null loop for logic short-circuit + re.Pattern = ".*_(.*)\.hpp\.sq" + If Not re.Test(fname) Then Exit Do + Set f = FSO.OpenTextFile(fname, 1) + fname = fname.Name + re.Pattern = "^void SQ" & apiuc & ".*Register\(Squirrel \*engine\)$" + While Not f.AtEndOfStream + If re.Test(f.ReadLine) And Not files.Exists(fname) Then + files.Add fname, fname + End If + Wend + f.Close + Loop While False ' end of null loop + Next + Set files = SortDict(files) + For Each f in files + file.WriteLine "#include " & Chr(34) & "../script/api/" & apilc & "/" & f & Chr(34) + Next + Exit Sub + End If + + re.Pattern = "/\* Register all classes \*/" + If re.Test(line) Then + file.WriteLine line + Set regs = CreateObject("Scripting.Dictionary") + ' List needs to be registered with squirrel before all List subclasses + file.WriteLine " SQ" & apiuc & "List_Register(this->engine);" + For Each fname In FSO.GetFolder(".").Files + Do ' null loop for logic short-circuit + re.Pattern = ".*_(.*)\.hpp\.sq" + If Not re.Test(fname) Then Exit Do + Set f = FSO.OpenTextFile(fname, 1) + While Not f.AtEndOfStream + Do ' null loop for logic short-circuit + r = f.ReadLine + re.Pattern = "^void SQ" & apiuc & ".*Register\(Squirrel \*engine\)$" + If Not re.Test(r) Then Exit Do + re.Pattern = "SQ" & apiuc & "List_Register" + If re.Test(r) Then Exit Do + re.Pattern = "^.*void " + r = re.Replace(r, "") + re.Pattern = "Squirrel \*" + r = re.Replace(r, "this->") + re.Pattern = "$" + r = re.Replace(r, ";") + re.Pattern = "_Register" + r = re.Replace(r, "0000Register") + If Not regs.Exists(r) Then regs.Add r, r + Loop While False ' end of null loop + Wend + f.Close + Loop While False ' end of null loop + Next + Set regs = SortDict(regs) + re.Pattern = "0000Register" + For Each r in regs.Items + r = re.Replace(r, "_Register") + If r <> "SQ" & apiuc & "Controller_Register(this->engine);" Then file.WriteLine " " & r + Next + Exit Sub + End If + + file.WriteLine line +End Sub + +Sub ExportInstance(apiuc, apilc, srcfilename, dstfilename) + Dim src, dst, line + Set src = FSO.OpenTextFile(srcfilename, 1) + Set dst = FSO.OpenTextFile(dstfilename, 2, True) + + While Not src.AtEndOfStream + line = src.ReadLine + ExportInstanceParse apiuc, apilc, line, dst + Wend + + src.Close + dst.Close +End Sub + +' Recursive entry point +Sub Main + Dim WSH, scriptdir, apilc, re, api, apiuc, f, bf + Set WSH = CreateObject("WScript.Shell") + Set re = New RegExp + + ' This must be called from within a src/???/api directory. + scriptdir = FSO.GetParentFolderName(WScript.ScriptFullName) + apilc = WSH.CurrentDirectory + re.Pattern = "\\api" + apilc = re.Replace(apilc, "") + re.Pattern = ".*\\" + apilc = re.Replace(apilc, "") + + ' Check if we are in the root directory of the API, as then we generate all APIs + If apilc = "script" Then + For Each api In FSO.GetFolder(".").SubFolders + WScript.Echo "Generating for API '" & api.Name & "' ..." + WSH.CurrentDirectory = api + Main + Next + WScript.Quit 0 + End If + + Select Case apilc + Case "template" apiuc = "Template" + Case "ai" apiuc = "AI" + Case "game" apiuc = "GS" + Case Else + WScript.Echo "Unknown API type." + Exit Sub + End Select + + For Each f in FSO.GetFolder("..").Files + Do ' null loop for logic short-circuit + re.Pattern = ".*\.hpp" + If Not re.Test(f) Then Exit Do + ' ScriptController has custom code, and should not be generated + If f.Name = "script_controller.hpp" Then Exit Do + re.Pattern = "script_" + bf = re.Replace(f.name, apilc & "_") + SquirrelExport apiuc, f, bf & ".tmp" + If IsEmptyFile(bf & ".tmp") Then + If FSO.FileExists(bf & ".sq") Then + WScript.Echo "Deleted: " & bf & ".sq" + FSO.DeleteFile bf & ".sq" + End If + FSO.DeleteFile bf & ".tmp" + ElseIf Not FSO.FileExists(bf & ".sq") Or Not CompareFiles(bf & ".sq", bf & ".tmp") Then + If FSO.FileExists(bf & ".sq") Then FSO.DeleteFile bf & ".sq" + FSO.MoveFile bf & ".tmp", bf & ".sq" + WScript.Echo "Updated: " & bf & ".sq" + Else + FSO.DeleteFile bf & ".tmp" + End If + Loop While False ' end of null loop + Next + + ' Remove .hpp.sq if .hpp doesn't exist anymore + For Each f in FSO.GetFolder(".").Files + Do ' null loop for logic short-circuit + re.Pattern = ".*\.hpp\.sq" + If Not re.Test(f) Then Exit Do + f = f.Name + re.Pattern = "\.hpp\.sq$" + f = re.Replace(f, ".hpp") + re.Pattern = apilc & "_" + f = re.Replace(f, "script_") + If Not FSO.FileExists("..\" & f) Then + WScript.Echo "Deleted: " & f & ".sq" + 'FSO.DeleteFile f & ".sq" + End If + Loop While False ' end of null loop + Next + + If apilc = "template" Then Exit Sub + + ' Add stuff to ${apilc}_instance.cpp + f = "..\..\..\" & apilc & "\" & apilc & "_instance.cpp" + ExportInstance apiuc, apilc, f, f & ".tmp" + If Not FSO.FileExists(f) Or Not CompareFiles(f, f & ".tmp") Then + If FSO.FileExists(f) Then FSO.DeleteFile f + FSO.MoveFile f & ".tmp", f + WScript.Echo "Updated: " & f + Else + FSO.DeleteFile f & ".tmp" + End If +End Sub + +Main From 9f0ad7e2699a84dd47a0bb4a469b2b166d260f53 Mon Sep 17 00:00:00 2001 From: glx Date: Sun, 13 Jan 2019 19:12:33 +0100 Subject: [PATCH 181/622] Fix: BSD find used by OSX requires explicit path --- src/script/api/squirrel_export.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/api/squirrel_export.sh b/src/script/api/squirrel_export.sh index 54e595b9bc..e1f5e8613c 100755 --- a/src/script/api/squirrel_export.sh +++ b/src/script/api/squirrel_export.sh @@ -26,7 +26,7 @@ apilc=`pwd | sed "s@/api@@;s@.*/@@"` # Check if we are in the root directory of the API, as then we generate all APIs if [ "$apilc" = "script" ]; then - for api in `find -type d | cut -b3-`; do + for api in `find . -type d | cut -b3-`; do if [ -z "$api" ]; then continue; fi echo "Generating for API '$api' ..." cd $api From 29b6b74ee19e6df4ff71b592f27ccbfeb0f9c2f3 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 14 Jan 2019 19:45:41 +0100 Subject: [PATCH 182/622] Update: Translations from eints french: 4 changes by glx finnish: 2 changes by ln --- src/lang/finnish.txt | 2 ++ src/lang/french.txt | 7 ++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 0450afa0b3..700a58dabd 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -189,6 +189,7 @@ STR_COLOUR_ORANGE :Oranssi STR_COLOUR_BROWN :Ruskea STR_COLOUR_GREY :Harmaa STR_COLOUR_WHITE :Valkoinen +STR_COLOUR_RANDOM :Satunnainen # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -927,6 +928,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Oma... STR_GAME_OPTIONS_CURRENCY_GEL :Georgian lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Iranin rial (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Uusi Venäjän rupla (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Meksikon peso (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Kulkuneuvot diff --git a/src/lang/french.txt b/src/lang/french.txt index cc5b331ea0..bb54e6a86e 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -931,6 +931,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personnalisée. STR_GAME_OPTIONS_CURRENCY_GEL :Lari Géorgien (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iranien (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Nouveau rouble russe (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Peso méxicain (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Véhicules routiers @@ -2381,9 +2382,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Signal c STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Signal de chemin (électrique){}Un signal de chemin autorise plus d'un train à entrer dans un bloc de signaux en même temps, si le train peut réserver un chemin jusqu'à un point d'attente sûr. Les signaux de chemin peuvent être passés par l'arrière. STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Signal de chemin à sens unique (électrique){}Un signal de chemin autorise plus d'un train à entrer dans un bloc de signaux en même temps, si le train peut réserver un chemin jusqu'à un point d'attente sûr. Les signaux de chemin à sens unique ne peuvent pas être passés par l'arrière. STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Conversion de signal.{}Si sélectionné, cliquer sur un signal existant le convertit vers le type et la variante choisis.{}Ctrl-clic pour alterner entre les variantes existantes.{}Shift pour afficher seulement le coût estimé. -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Densité de signaux -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Réduire l'intervalle entre les signaux (augmenter la densité) -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Augmenter l'intervalle entre les signaux (réduire la densité) +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Intervalle entre les signaux +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Réduire l'intervalle entre les signaux +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Augmenter l'intervalle entre les signaux # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Choisir un pont ferroviaire From 6a38a3f5df177cdf85bd64b1b873f524d5b0629c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 18 May 2018 09:04:39 +0100 Subject: [PATCH 183/622] Change: Don't leave ship depot with no orders. --- src/ship_cmd.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index e606afc0ce..16b93e48b3 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -330,6 +330,9 @@ static bool CheckShipLeaveDepot(Ship *v) return true; } + /* Don't leave depot if no destination set */ + if (v->dest_tile == 0) return true; + TileIndex tile = v->tile; Axis axis = GetShipDepotAxis(tile); From ebddd596c7138d629ec0259d2397c1039401ada7 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 18 May 2018 09:05:24 +0100 Subject: [PATCH 184/622] Change: Don't pathfind with no destination or if destination is known to be too far. --- src/ship_cmd.cpp | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 16b93e48b3..0ea400b954 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -446,11 +446,38 @@ static Track ChooseShipTrack(Ship *v, TileIndex tile, DiagDirection enterdir, Tr bool path_found = true; Track track; - switch (_settings_game.pf.pathfinder_for_ships) { - case VPF_OPF: track = OPFShipChooseTrack(v, tile, enterdir, tracks, path_found); break; - case VPF_NPF: track = NPFShipChooseTrack(v, tile, enterdir, tracks, path_found); break; - case VPF_YAPF: track = YapfShipChooseTrack(v, tile, enterdir, tracks, path_found); break; - default: NOT_REACHED(); + + if (v->dest_tile == 0 || DistanceManhattan(tile, v->dest_tile) > 130) { + /* No destination or destination too far, don't invoke pathfinder. */ + static const TrackBits direction_to_trackbits[DIR_END] = { + TRACK_BIT_LEFT | TRACK_BIT_RIGHT, // DIR_N + TRACK_BIT_X, // DIR_NE + TRACK_BIT_UPPER | TRACK_BIT_LOWER, // DIR_E + TRACK_BIT_Y, // DIR_SE + TRACK_BIT_LEFT | TRACK_BIT_RIGHT, // DIR_S + TRACK_BIT_X, // DIR_SW + TRACK_BIT_UPPER | TRACK_BIT_LOWER, // DIR_W + TRACK_BIT_Y, // DIR_NW + }; + + TrackBits next_tracks = direction_to_trackbits[v->direction] & tracks; + if (next_tracks != TRACK_BIT_NONE) { + /* Continue in same direction when possible. */ + track = (Track)FindFirstBit(next_tracks); + } else { + /* Pick a random track. */ + do { + track = (Track)RandomRange(TRACK_END); + } while ((TrackToTrackBits(track) & tracks) == TRACK_BIT_NONE); + } + path_found = false; + } else { + switch (_settings_game.pf.pathfinder_for_ships) { + case VPF_OPF: track = OPFShipChooseTrack(v, tile, enterdir, tracks, path_found); break; + case VPF_NPF: track = NPFShipChooseTrack(v, tile, enterdir, tracks, path_found); break; + case VPF_YAPF: track = YapfShipChooseTrack(v, tile, enterdir, tracks, path_found); break; + default: NOT_REACHED(); + } } v->HandlePathfindingResult(path_found); From b98887c4a014d5bc193b0c1089b3ac0334187775 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 18 May 2018 18:02:53 +0100 Subject: [PATCH 185/622] Change: Allow only one ship to leave depot at a time. --- src/ship_cmd.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 0ea400b954..080015eacb 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -319,6 +319,14 @@ void Ship::UpdateDeltaXY() this->z_extent = 6; } +/** + * Test-procedure for HasVehicleOnPos to check for a ship. + */ +static Vehicle *EnsureNoVisibleShipProc(Vehicle *v, void *data) +{ + return v->type == VEH_SHIP && (v->vehstatus & VS_HIDDEN) == 0 ? v : NULL; +} + static bool CheckShipLeaveDepot(Ship *v) { if (!v->IsChainInDepot()) return false; @@ -333,6 +341,10 @@ static bool CheckShipLeaveDepot(Ship *v) /* Don't leave depot if no destination set */ if (v->dest_tile == 0) return true; + /* Don't leave depot if another vehicle is already entering/leaving */ + /* This helps avoid CPU load if many ships are set to start at the same time */ + if (HasVehicleOnPos(v->tile, NULL, &EnsureNoVisibleShipProc)) return true; + TileIndex tile = v->tile; Axis axis = GetShipDepotAxis(tile); From 7af53d7588a97bc4b02dbfa456a0e2a9ab598864 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 20 May 2018 12:01:17 +0100 Subject: [PATCH 186/622] Codechange: Use const instead of magic number for ship order distance. Allow slightly further distance when following orders. --- src/order_cmd.cpp | 3 ++- src/ship.h | 2 ++ src/ship_cmd.cpp | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index ba8a1a060d..093e4b9b50 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -23,6 +23,7 @@ #include "core/random_func.hpp" #include "aircraft.h" #include "roadveh.h" +#include "ship.h" #include "station_base.h" #include "waypoint_base.h" #include "company_base.h" @@ -929,7 +930,7 @@ CommandCost CmdInsertOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 dist = GetOrderDistance(prev, &new_order, v); } - if (dist >= 130) { + if (dist >= SHIP_MAX_ORDER_DISTANCE) { return_cmd_error(STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION); } } diff --git a/src/ship.h b/src/ship.h index 0f396a237d..7fea5fc1d1 100644 --- a/src/ship.h +++ b/src/ship.h @@ -48,6 +48,8 @@ struct Ship FINAL : public SpecializedVehicle { void UpdateCache(); }; +static const uint SHIP_MAX_ORDER_DISTANCE = 130; + /** * Iterate over all ships. * @param var The variable used for iteration. diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 080015eacb..79560be041 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -459,7 +459,7 @@ static Track ChooseShipTrack(Ship *v, TileIndex tile, DiagDirection enterdir, Tr bool path_found = true; Track track; - if (v->dest_tile == 0 || DistanceManhattan(tile, v->dest_tile) > 130) { + if (v->dest_tile == 0 || DistanceManhattan(tile, v->dest_tile) > SHIP_MAX_ORDER_DISTANCE + 5) { /* No destination or destination too far, don't invoke pathfinder. */ static const TrackBits direction_to_trackbits[DIR_END] = { TRACK_BIT_LEFT | TRACK_BIT_RIGHT, // DIR_N From 8b6420441814e95ca32ffd4c601e3646f840c58c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 23 May 2018 17:34:39 +0100 Subject: [PATCH 187/622] Codechange: Replace trackbit lookup table with existing functions. --- src/ship_cmd.cpp | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 79560be041..88e2392e01 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -461,23 +461,10 @@ static Track ChooseShipTrack(Ship *v, TileIndex tile, DiagDirection enterdir, Tr if (v->dest_tile == 0 || DistanceManhattan(tile, v->dest_tile) > SHIP_MAX_ORDER_DISTANCE + 5) { /* No destination or destination too far, don't invoke pathfinder. */ - static const TrackBits direction_to_trackbits[DIR_END] = { - TRACK_BIT_LEFT | TRACK_BIT_RIGHT, // DIR_N - TRACK_BIT_X, // DIR_NE - TRACK_BIT_UPPER | TRACK_BIT_LOWER, // DIR_E - TRACK_BIT_Y, // DIR_SE - TRACK_BIT_LEFT | TRACK_BIT_RIGHT, // DIR_S - TRACK_BIT_X, // DIR_SW - TRACK_BIT_UPPER | TRACK_BIT_LOWER, // DIR_W - TRACK_BIT_Y, // DIR_NW - }; - - TrackBits next_tracks = direction_to_trackbits[v->direction] & tracks; - if (next_tracks != TRACK_BIT_NONE) { - /* Continue in same direction when possible. */ - track = (Track)FindFirstBit(next_tracks); - } else { - /* Pick a random track. */ + track = TrackBitsToTrack(v->state); + if (track != TRACK_X && track != TRACK_Y) track = TrackToOppositeTrack(track); + if (!HasBit(tracks, track)) { + /* Can't continue in same direction so pick a random available track. */ do { track = (Track)RandomRange(TRACK_END); } while ((TrackToTrackBits(track) & tracks) == TRACK_BIT_NONE); From 7284b593c71dc54a055077d7f12dac91fca34324 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 28 May 2018 08:37:43 +0100 Subject: [PATCH 188/622] Change: When ship is lost, pick first available track instead of a random track. --- src/ship_cmd.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 88e2392e01..1594c2bf42 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -464,10 +464,8 @@ static Track ChooseShipTrack(Ship *v, TileIndex tile, DiagDirection enterdir, Tr track = TrackBitsToTrack(v->state); if (track != TRACK_X && track != TRACK_Y) track = TrackToOppositeTrack(track); if (!HasBit(tracks, track)) { - /* Can't continue in same direction so pick a random available track. */ - do { - track = (Track)RandomRange(TRACK_END); - } while ((TrackToTrackBits(track) & tracks) == TRACK_BIT_NONE); + /* Can't continue in same direction so pick first available track. */ + track = FindFirstTrack(tracks); } path_found = false; } else { From 6b0a467a50c706546129044a5bd6013bf6d310a1 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 13 Jan 2019 23:29:29 +0000 Subject: [PATCH 189/622] Change: Obey forbid_90_deg_turns when choosing available track with no destination. --- src/ship_cmd.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 1594c2bf42..ab1f59f11d 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -465,6 +465,10 @@ static Track ChooseShipTrack(Ship *v, TileIndex tile, DiagDirection enterdir, Tr if (track != TRACK_X && track != TRACK_Y) track = TrackToOppositeTrack(track); if (!HasBit(tracks, track)) { /* Can't continue in same direction so pick first available track. */ + if (_settings_game.pf.forbid_90_deg) { + tracks &= ~TrackCrossesTracks(TrackdirToTrack(v->GetVehicleTrackdir())); + if (tracks == TRACK_BIT_NONE) return INVALID_TRACK; + } track = FindFirstTrack(tracks); } path_found = false; From 91315a7a39043cbccaa8d4d908a0e8724dd61a61 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 15 Jan 2019 19:45:41 +0100 Subject: [PATCH 190/622] Update: Translations from eints spanish: 3 changes by SilverSurferZzZ --- src/lang/spanish.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 2679486be2..70b2265848 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -2717,8 +2717,11 @@ STR_FRAMERATE_GL_ROADVEHS :{BLACK} Ticks STR_FRAMERATE_GL_SHIPS :{BLACK} Ticks de barcos: STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Ticks de aeronaves: STR_FRAMERATE_DRAWING :{BLACK}Renderizado gráfico: +STR_FRAMERATE_VIDEO :{BLACK}Salida de vídeo: +STR_FRAMERATE_SOUND :{BLACK}Mezcla de sonido: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GL_TRAINS :Ticks de trenes STR_FRAMETIME_CAPTION_DRAWING :Renderizado gráfico STR_FRAMETIME_CAPTION_VIDEO :Salida de vídeo STR_FRAMETIME_CAPTION_SOUND :Mezcla de sonido From 5a09337c2018a7ee371e2e96220ee0d06b1df753 Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 15 Jan 2019 02:21:48 +0100 Subject: [PATCH 191/622] Fix: make reconfigure warning --- config.lib | 1 + 1 file changed, 1 insertion(+) diff --git a/config.lib b/config.lib index 1af354e163..566309adaf 100644 --- a/config.lib +++ b/config.lib @@ -376,6 +376,7 @@ detect_params() { --with-fluidsynth) with_fluidsynth="2";; --without-fluidsynth) with_fluidsynth="0";; + --with-fluidsynth=*) with_fluidsynth="$optarg";; --with-freetype) with_freetype="2";; --without-freetype) with_freetype="0";; From ee84f98f1e1c2063bb2a0c3405200c1a8ff9b970 Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 15 Jan 2019 02:26:54 +0100 Subject: [PATCH 192/622] Fix: deps calculation call could fail due to command line length --- Makefile.src.in | 22 ++++++++++++++-------- config.lib | 2 +- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/Makefile.src.in b/Makefile.src.in index 0589ba69a6..c07015cfe8 100644 --- a/Makefile.src.in +++ b/Makefile.src.in @@ -159,6 +159,19 @@ $(SRC_OBJS_DIR)/$(DEPEND): $(SRC_DIR)/depend/depend.cpp $(Q)$(CXX_BUILD) $(CFLAGS_BUILD) $(CXXFLAGS_BUILD) $(LDFLAGS_BUILD) -o $@ $< endif +# Macro for invoking a command on groups of 100 words at a time +# (analogous to xargs(1)). The macro invokes itself recursively +# until the list of words is depleted. +# +# Usage: $(call xargs,COMMAND,LIST) +# +# COMMAND should be a shell command to which the words will be +# appended as arguments in groups of 100. +define xargs +$(1) $(wordlist 1,100,$(2)) +$(if $(word 101,$(2)),$(call xargs,$(1),$(wordlist 101,$(words $(2)),$(2)))) +endef + # Make sure that only 'make depend' ALWAYS triggers a recheck ifeq ($(filter depend, $(MAKECMDGOALS)),) Makefile.dep: $(FILE_DEP) $(SRCS:%=$(SRC_DIR)/%) $(CONFIG_CACHE_SOURCE) $(DEP) @@ -170,14 +183,7 @@ endif $(Q)touch Makefile.dep.tmp # Calculate the deps via makedepend - $(Q)$(MAKEDEPEND) -f$(SRC_OBJS_DIR)/Makefile.dep.tmp -o.o -Y -v -- $(CFLAGS_MAKEDEP) -- $(SRCS:%=$(SRC_DIR)/%) 2>/dev/null - -# Convert x:/... paths to /x/... for mingw -ifeq ($(OS), MINGW) - @cat Makefile.dep.tmp | sed 's@/\([a-zA-Z]\):\/@\/\1\/@g' > Makefile.dep.tmp.mingw - @cp Makefile.dep.tmp.mingw Makefile.dep.tmp - @rm -f Makefile.dep.tmp.mingw -endif + $(call xargs,$(Q)$(MAKEDEPEND) -f$(SRC_OBJS_DIR)/Makefile.dep.tmp -o.o -Y -v -a -- $(CFLAGS_MAKEDEP) -- 2>/dev/null,$(SRCS:%=$(SRC_DIR)/%)) # Remove all comments and includes that don't start with $(SRC_DIR) # Remove $(SRC_DIR) from object-file-name diff --git a/config.lib b/config.lib index 566309adaf..1ef51f72ad 100644 --- a/config.lib +++ b/config.lib @@ -1959,7 +1959,7 @@ make_cflags_and_ldflags() { cflags_makedep="`echo | $cxx_host $CXXFLAGS -E -x c++ -dM - | sed 's@.define @-D@g;s@ .*@ @g;s@(.*)@@g' | tr -d '\r\n'`" # Please escape ALL " within ` because e.g. "" terminates the string in some sh implementations - cflags_makedep="$cflags_makedep `echo \"$CFLAGS\" \"$CXXFLAGS\" | sed 's@ /@ -@g;s@-I[ ]*[^ ]*@@g'`" + cflags_makedep="$cflags_makedep `echo \"$CFLAGS\" \"$CXXFLAGS\" | sed 's@ /@ -@g;s@-I[ ]*[^ ]*@@g;s@[ ]*-[^D][^ ]*@@g'`" else makedepend="" fi From 11065342620f920e7b3a1227e41e941313707597 Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 15 Jan 2019 02:28:05 +0100 Subject: [PATCH 193/622] Fix: depend was messing the line endings in append mode --- src/depend/depend.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/depend/depend.cpp b/src/depend/depend.cpp index f57acba25c..9f8de891bd 100644 --- a/src/depend/depend.cpp +++ b/src/depend/depend.cpp @@ -1008,7 +1008,7 @@ int main(int argc, char *argv[]) fclose(src); /* Then append it to the real file. */ - src = fopen(backup, "rb"); + src = fopen(backup, "r"); while (fgets(content, size, src) != NULL) { fputs(content, dst); if (!strncmp(content, delimiter, strlen(delimiter))) found_delimiter = true; From 2d981a4b2c63f5a1ae28aa49c8622503c31ffc3e Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sat, 12 Jan 2019 23:00:55 +0000 Subject: [PATCH 194/622] Fix: A few minor compile warnings under MinGW --- src/os/windows/win32.cpp | 1 + src/video/win32_v.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp index bb1a0a4209..a84347ed14 100644 --- a/src/os/windows/win32.cpp +++ b/src/os/windows/win32.cpp @@ -17,6 +17,7 @@ #include #include #include +#define NO_SHOBJIDL_SORTDIRECTION // Avoid multiple definition of SORT_ASCENDING #include /* SHGetFolderPath */ #include #include "win32.h" diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index 0655065a6c..29a0657203 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -238,7 +238,7 @@ int RedrawScreenDebug() #define TID_POLLMOUSE 1 #define MOUSE_POLL_DELAY 75 -static void CALLBACK TrackMouseTimerProc(HWND hwnd, UINT msg, UINT event, DWORD time) +static void CALLBACK TrackMouseTimerProc(HWND hwnd, UINT msg, UINT_PTR event, DWORD time) { RECT rc; POINT pt; From fe8c24e0817a04ea7719372156d2aa674939b479 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sun, 13 Jan 2019 16:12:52 +0000 Subject: [PATCH 195/622] Codechange: Remove unnecessarily defined functions under MinGW --- src/network/core/os_abstraction.h | 88 +------------------------------ src/os/windows/win32.cpp | 3 -- src/video/win32_v.cpp | 4 +- 3 files changed, 3 insertions(+), 92 deletions(-) diff --git a/src/network/core/os_abstraction.h b/src/network/core/os_abstraction.h index c320cd9102..32c6cffff2 100644 --- a/src/network/core/os_abstraction.h +++ b/src/network/core/os_abstraction.h @@ -38,93 +38,7 @@ typedef unsigned long in_addr_t; typedef SSIZE_T ssize_t; typedef int socklen_t; # define IPPROTO_IPV6 41 -#else -#include "../../os/windows/win32.h" -#include "../../core/alloc_func.hpp" - -#define AI_ADDRCONFIG 0x00000400 /* Resolution only if global address configured */ -#define IPV6_V6ONLY 27 - -static inline int OTTDgetnameinfo(const struct sockaddr *sa, socklen_t salen, char *host, DWORD hostlen, char *serv, DWORD servlen, int flags) -{ - static int (WINAPI *getnameinfo)(const struct sockaddr *, socklen_t, char *, DWORD, char *, DWORD, int) = NULL; - static bool first_time = true; - - if (first_time) { - LoadLibraryList((Function*)&getnameinfo, "ws2_32.dll\0getnameinfo\0\0"); - first_time = false; - } - - if (getnameinfo != NULL) return getnameinfo(sa, salen, host, hostlen, serv, servlen, flags); - - strncpy(host, inet_ntoa(((const struct sockaddr_in *)sa)->sin_addr), hostlen); - return 0; -} -#define getnameinfo OTTDgetnameinfo - -static inline int OTTDgetaddrinfo(const char *nodename, const char *servname, const struct addrinfo *hints, struct addrinfo **res) -{ - static int (WINAPI *getaddrinfo)(const char *, const char *, const struct addrinfo *, struct addrinfo **) = NULL; - static bool first_time = true; - - if (first_time) { - LoadLibraryList((Function*)&getaddrinfo, "ws2_32.dll\0getaddrinfo\0\0"); - first_time = false; - } - - if (getaddrinfo != NULL) return getaddrinfo(nodename, servname, hints, res); - - *res = NULL; - - in_addr_t ip = inet_addr(nodename); - if (ip == INADDR_NONE) { - struct hostent *he = gethostbyname(nodename); - if (he == NULL) return EAI_NONAME; - ip = (*(struct in_addr *)he->h_addr).s_addr; - } - - struct sockaddr_in *sin = CallocT(1); - sin->sin_family = AF_INET; - sin->sin_port = htons(strtoul(servname, NULL, 10)); - sin->sin_addr.s_addr = ip; - - struct addrinfo *ai = CallocT(1); - ai->ai_family = PF_INET; - ai->ai_addr = (struct sockaddr*)sin; - ai->ai_addrlen = sizeof(*sin); - ai->ai_socktype = hints->ai_socktype; - - *res = ai; - return 0; -} -#define getaddrinfo OTTDgetaddrinfo - -static inline void OTTDfreeaddrinfo(struct addrinfo *ai) -{ - static int (WINAPI *freeaddrinfo)(struct addrinfo *) = NULL; - static bool first_time = true; - - if (ai == NULL) return; - - if (first_time) { - LoadLibraryList((Function*)&freeaddrinfo, "ws2_32.dll\0freeaddrinfo\0\0"); - first_time = false; - } - - if (freeaddrinfo != NULL) { - freeaddrinfo(ai); - return; - } - - do { - struct addrinfo *next = ai->ai_next; - free(ai->ai_addr); - free(ai); - ai = next; - } while (ai != NULL); -} -#define freeaddrinfo OTTDfreeaddrinfo -#endif /* __MINGW32__ && __CYGWIN__ */ +#endif /* !(__MINGW32__ && __CYGWIN__) */ #endif /* _WIN32 */ /* UNIX stuff */ diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp index a84347ed14..4a49555492 100644 --- a/src/os/windows/win32.cpp +++ b/src/os/windows/win32.cpp @@ -31,10 +31,7 @@ #include #include "../../language.h" -/* Due to TCHAR, strncat and strncpy have to remain (for a while). */ #include "../../safeguards.h" -#undef strncat -#undef strncpy static bool _has_console; static bool _cursor_disable = true; diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index 29a0657203..6cee4fef28 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -636,7 +636,7 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP switch (msg) { case WM_CREATE: - SetTimer(hwnd, TID_POLLMOUSE, MOUSE_POLL_DELAY, (TIMERPROC)TrackMouseTimerProc); + SetTimer(hwnd, TID_POLLMOUSE, MOUSE_POLL_DELAY, TrackMouseTimerProc); SetCompositionPos(hwnd); _imm_props = ImmGetProperty(GetKeyboardLayout(0), IGP_PROPERTY); break; @@ -741,7 +741,7 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP _pTrackMouseEvent(&tme); } else { - SetTimer(hwnd, TID_POLLMOUSE, MOUSE_POLL_DELAY, (TIMERPROC)TrackMouseTimerProc); + SetTimer(hwnd, TID_POLLMOUSE, MOUSE_POLL_DELAY, TrackMouseTimerProc); } } From 6535abb88bd3c598517641b49569b480c3282cdf Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Wed, 16 Jan 2019 19:28:52 +0000 Subject: [PATCH 196/622] Codechange: Don't explicitly link with -lstdc++, causes linking issues with freetype on MinGW --- config.lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.lib b/config.lib index 1ef51f72ad..1c3fc2c94e 100644 --- a/config.lib +++ b/config.lib @@ -1509,7 +1509,7 @@ make_cflags_and_ldflags() { CXXFLAGS_ENV="$CXXFLAGS" CXXFLAGS="" # Libs to compile. In fact this is just LDFLAGS - LIBS="-lstdc++" + LIBS="" # LDFLAGS used for HOST LDFLAGS_ENV="$LDFLAGS" LDFLAGS="" From 1623cb553b7d299d0115034609763b6f3063680f Mon Sep 17 00:00:00 2001 From: glx Date: Thu, 17 Jan 2019 17:50:54 +0100 Subject: [PATCH 197/622] Fix #7032: use the same mode to load and render glyphs --- src/fontcache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fontcache.cpp b/src/fontcache.cpp index 55da0c55c8..98e8bdf41c 100644 --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -546,7 +546,7 @@ const Sprite *FreeTypeFontCache::GetGlyph(GlyphID key) return glyph->sprite; } } - FT_Load_Glyph(this->face, key, FT_LOAD_DEFAULT); + FT_Load_Glyph(this->face, key, aa ? FT_LOAD_TARGET_NORMAL : FT_LOAD_TARGET_MONO); FT_Render_Glyph(this->face->glyph, aa ? FT_RENDER_MODE_NORMAL : FT_RENDER_MODE_MONO); /* Despite requesting a normal glyph, FreeType may have returned a bitmap */ From d8ccad91f9f3c4554908c62a9e250ac61060d1ce Mon Sep 17 00:00:00 2001 From: nikolas Date: Thu, 17 Jan 2019 17:01:07 -0500 Subject: [PATCH 198/622] Fix: Some code and comment typos Found with codespell --- src/openttd.cpp | 2 +- src/station_cmd.cpp | 16 ++++++++-------- src/station_gui.cpp | 2 +- src/tgp.cpp | 6 +++--- src/town_cmd.cpp | 2 +- src/vehicle.cpp | 2 +- src/viewport.cpp | 2 +- src/window.cpp | 2 +- 8 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/openttd.cpp b/src/openttd.cpp index 49d5e8250c..65374f439f 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -278,7 +278,7 @@ static void ParseResolution(Dimension *res, const char *s) /** - * Unitializes drivers, frees allocated memory, cleans pools, ... + * Uninitializes drivers, frees allocated memory, cleans pools, ... * Generally, prepares the game for shutting down */ static void ShutdownGame() diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index b4c7523606..66a09c4351 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -1767,16 +1767,16 @@ CommandCost CmdBuildRoadStop(TileIndex tile, DoCommandFlag flags, uint32 p1, uin bool distant_join = (station_to_join != INVALID_STATION); uint8 width = (uint8)GB(p1, 0, 8); - uint8 lenght = (uint8)GB(p1, 8, 8); + uint8 length = (uint8)GB(p1, 8, 8); /* Check if the requested road stop is too big */ - if (width > _settings_game.station.station_spread || lenght > _settings_game.station.station_spread) return_cmd_error(STR_ERROR_STATION_TOO_SPREAD_OUT); + if (width > _settings_game.station.station_spread || length > _settings_game.station.station_spread) return_cmd_error(STR_ERROR_STATION_TOO_SPREAD_OUT); /* Check for incorrect width / length. */ - if (width == 0 || lenght == 0) return CMD_ERROR; + if (width == 0 || length == 0) return CMD_ERROR; /* Check if the first tile and the last tile are valid */ - if (!IsValidTile(tile) || TileAddWrap(tile, width - 1, lenght - 1) == INVALID_TILE) return CMD_ERROR; + if (!IsValidTile(tile) || TileAddWrap(tile, width - 1, length - 1) == INVALID_TILE) return CMD_ERROR; - TileArea roadstop_area(tile, width, lenght); + TileArea roadstop_area(tile, width, length); if (distant_join && (!_settings_game.station.distant_join_stations || !Station::IsValidID(station_to_join))) return CMD_ERROR; @@ -3433,7 +3433,7 @@ void RerouteCargo(Station *st, CargoID c, StationID avoid, StationID avoid2) /* Reroute cargo in station. */ ge.cargo.Reroute(UINT_MAX, &ge.cargo, avoid, avoid2, &ge); - /* Reroute cargo staged to be transfered. */ + /* Reroute cargo staged to be transferred. */ for (std::list::iterator it(st->loading_vehicles.begin()); it != st->loading_vehicles.end(); ++it) { for (Vehicle *v = *it; v != NULL; v = v->Next()) { if (v->cargo_type != c) continue; @@ -3443,7 +3443,7 @@ void RerouteCargo(Station *st, CargoID c, StationID avoid, StationID avoid2) } /** - * Check all next hops of cargo packets in this station for existance of a + * Check all next hops of cargo packets in this station for existence of a * a valid link they may use to travel on. Reroute any cargo not having a valid * link and remove timed out links found like this from the linkgraph. We're * not all links here as that is expensive and useless. A link no one is using @@ -4230,7 +4230,7 @@ void FlowStat::Invalidate() } /** - * Change share for specified station. By specifing INT_MIN as parameter you + * Change share for specified station. By specifying INT_MIN as parameter you * can erase a share. Newly added flows will be unrestricted. * @param st Next Hop to be removed. * @param flow Share to be added or removed. diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 11af2f55f4..5c2e06070b 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -657,7 +657,7 @@ const CargoTypes CompanyStationsWindow::cargo_filter_max = ALL_CARGOTYPES; CargoTypes CompanyStationsWindow::cargo_filter = ALL_CARGOTYPES; const Station *CompanyStationsWindow::last_station = NULL; -/* Availible station sorting functions */ +/* Available station sorting functions */ GUIStationList::SortFunction * const CompanyStationsWindow::sorter_funcs[] = { &StationNameSorter, &StationTypeSorter, diff --git a/src/tgp.cpp b/src/tgp.cpp index 436870b412..02621f127e 100644 --- a/src/tgp.cpp +++ b/src/tgp.cpp @@ -47,7 +47,7 @@ * second sets the major variations to that, ... until finally the smallest * bumps are added. * - * Usefully, this routine is totally scaleable; so when 32bpp comes along, the + * Usefully, this routine is totally scalable; so when 32bpp comes along, the * terrain can be as bumpy as you like! It is also infinitely expandable; a * single random seed terrain continues in X & Y as far as you care to * calculate. In theory, we could use just one seed value, but randomly select @@ -262,7 +262,7 @@ static amplitude_t GetAmplitude(int frequency) * areas with a particular gradient so that we are able to create maps without too * many steep slopes up to the wanted height level. It's definitely not perfect since * it will bring larger rectangles with similar slopes which makes the rectangular - * behaviour of TGP more noticable. However, these height differentiations cannot + * behaviour of TGP more noticeable. However, these height differentiations cannot * happen over much smaller areas; we basically double the "range" to give a similar * slope for every doubling of map height. */ @@ -977,7 +977,7 @@ static void TgenSetTileHeight(TileIndex tile, int height) * The main new land generator using Perlin noise. Desert landscape is handled * different to all others to give a desert valley between two high mountains. * Clearly if a low height terrain (flat/very flat) is chosen, then the tropic - * areas wont be high enough, and there will be very little tropic on the map. + * areas won't be high enough, and there will be very little tropic on the map. * Thus Tropic works best on Hilly or Mountainous. */ void GenerateTerrainPerlin() diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 4289d901a1..986c52c4e3 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -2945,7 +2945,7 @@ static CommandCost TownActionFundBuildings(Town *t, DoCommandFlag flags) * Also emulate original behaviour when town was only growing in * TOWN_GROWTH_TICKS intervals, to make sure that it's not too * tick-perfect and gives player some time window where he can - * spam funding with the exact same effeciency. + * spam funding with the exact same efficiency. */ t->grow_counter = min(t->grow_counter, 2 * TOWN_GROWTH_TICKS - (t->growth_rate - t->grow_counter) % TOWN_GROWTH_TICKS); diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 9015396a8b..1ed43c9b64 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -723,7 +723,7 @@ bool Vehicle::IsEngineCountable() const /** * Check whether Vehicle::engine_type has any meaning. - * @return true if the vehicle has a useable engine type. + * @return true if the vehicle has a usable engine type. */ bool Vehicle::HasEngineType() const { diff --git a/src/viewport.cpp b/src/viewport.cpp index 350bb92381..da4ed26608 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -58,7 +58,7 @@ * * * Rows are horizontal sections of the viewport, also half a tile wide. - * This time the nothern most tile on the map defines 0 and + * This time the northern most tile on the map defines 0 and * everything south of that has a positive number. */ diff --git a/src/window.cpp b/src/window.cpp index d67c7f2f70..cc40afd348 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -655,7 +655,7 @@ static void DispatchLeftClickEvent(Window *w, int x, int y, int click_count) /* Clicked on a widget that is not disabled. * So unless the clicked widget is the caption bar, change focus to this widget. - * Exception: In the OSK we always want the editbox to stay focussed. */ + * Exception: In the OSK we always want the editbox to stay focused. */ if (widget_type != WWT_CAPTION && w->window_class != WC_OSK) { /* focused_widget_changed is 'now' only true if the window this widget * is in gained focus. In that case it must remain true, also if the From 98308fe26081b34e304bf83abf0a578dae379e31 Mon Sep 17 00:00:00 2001 From: glx Date: Fri, 28 Dec 2018 01:08:14 +0100 Subject: [PATCH 199/622] Fix 7f54c59a6: use some consistency for project dependencies determination --- projects/openttd_vs140.sln | 7 ------- projects/openttd_vs140.vcxproj | 8 ++++++++ projects/openttd_vs140.vcxproj.in | 8 ++++++++ projects/openttd_vs141.sln | 7 ------- projects/openttd_vs141.vcxproj | 8 ++++++++ projects/openttd_vs141.vcxproj.in | 8 ++++++++ projects/settings_vs140.vcxproj | 6 ++++++ projects/settings_vs140.vcxproj.in | 6 ++++++ projects/settings_vs141.vcxproj | 6 ++++++ projects/settings_vs141.vcxproj.in | 6 ++++++ 10 files changed, 56 insertions(+), 14 deletions(-) diff --git a/projects/openttd_vs140.sln b/projects/openttd_vs140.sln index 32f3033fb2..c9beb2a1e1 100644 --- a/projects/openttd_vs140.sln +++ b/projects/openttd_vs140.sln @@ -4,10 +4,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 VisualStudioVersion = 14.0.23107.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs140.vcxproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}" - ProjectSection(ProjectDependencies) = postProject - {0817F629-589E-4A3B-B81A-8647BC571E35} = {0817F629-589E-4A3B-B81A-8647BC571E35} - {E9548DE9-F089-49B7-93A6-30BE2CC311C7} = {E9548DE9-F089-49B7-93A6-30BE2CC311C7} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs140.vcxproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}" EndProject @@ -18,9 +14,6 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs140.vcxproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs140.vcxproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}" - ProjectSection(ProjectDependencies) = postProject - {E9548DE9-F089-49B7-93A6-30BE2CC311C7} = {E9548DE9-F089-49B7-93A6-30BE2CC311C7} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs140.vcxproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}" EndProject diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index 0ca84bed3d..f08c26f09b 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -1345,6 +1345,14 @@ {0f066b23-18df-4284-8265-f4a5e7e3b966} false + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + + {0817f629-589e-4a3b-b81a-8647bc571e35} + false + {a133a442-bd0a-4ade-b117-ad7545e4bdd1} false diff --git a/projects/openttd_vs140.vcxproj.in b/projects/openttd_vs140.vcxproj.in index 75aac94bab..c5e120401f 100644 --- a/projects/openttd_vs140.vcxproj.in +++ b/projects/openttd_vs140.vcxproj.in @@ -349,6 +349,14 @@ {0f066b23-18df-4284-8265-f4a5e7e3b966} false + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + + {0817f629-589e-4a3b-b81a-8647bc571e35} + false + {a133a442-bd0a-4ade-b117-ad7545e4bdd1} false diff --git a/projects/openttd_vs141.sln b/projects/openttd_vs141.sln index 86f2685cd9..f163125cbe 100644 --- a/projects/openttd_vs141.sln +++ b/projects/openttd_vs141.sln @@ -4,10 +4,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 VisualStudioVersion = 14.0.23107.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs141.vcxproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}" - ProjectSection(ProjectDependencies) = postProject - {0817F629-589E-4A3B-B81A-8647BC571E35} = {0817F629-589E-4A3B-B81A-8647BC571E35} - {E9548DE9-F089-49B7-93A6-30BE2CC311C7} = {E9548DE9-F089-49B7-93A6-30BE2CC311C7} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs141.vcxproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}" EndProject @@ -18,9 +14,6 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs141.vcxproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs141.vcxproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}" - ProjectSection(ProjectDependencies) = postProject - {E9548DE9-F089-49B7-93A6-30BE2CC311C7} = {E9548DE9-F089-49B7-93A6-30BE2CC311C7} - EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs141.vcxproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}" EndProject diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj index ec563572f3..552b9b9a95 100644 --- a/projects/openttd_vs141.vcxproj +++ b/projects/openttd_vs141.vcxproj @@ -1345,6 +1345,14 @@ {0f066b23-18df-4284-8265-f4a5e7e3b966} false + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + + {0817f629-589e-4a3b-b81a-8647bc571e35} + false + {a133a442-bd0a-4ade-b117-ad7545e4bdd1} false diff --git a/projects/openttd_vs141.vcxproj.in b/projects/openttd_vs141.vcxproj.in index a054c2580e..2a8a78af75 100644 --- a/projects/openttd_vs141.vcxproj.in +++ b/projects/openttd_vs141.vcxproj.in @@ -349,6 +349,14 @@ {0f066b23-18df-4284-8265-f4a5e7e3b966} false + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + + {0817f629-589e-4a3b-b81a-8647bc571e35} + false + {a133a442-bd0a-4ade-b117-ad7545e4bdd1} false diff --git a/projects/settings_vs140.vcxproj b/projects/settings_vs140.vcxproj index 4fe07dbd64..9952df47bb 100644 --- a/projects/settings_vs140.vcxproj +++ b/projects/settings_vs140.vcxproj @@ -48,6 +48,12 @@ + + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + diff --git a/projects/settings_vs140.vcxproj.in b/projects/settings_vs140.vcxproj.in index 71ea738dcf..9bb0cc7f0b 100644 --- a/projects/settings_vs140.vcxproj.in +++ b/projects/settings_vs140.vcxproj.in @@ -42,6 +42,12 @@ + + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + diff --git a/projects/settings_vs141.vcxproj b/projects/settings_vs141.vcxproj index ed6f5bab18..9c20f1407e 100644 --- a/projects/settings_vs141.vcxproj +++ b/projects/settings_vs141.vcxproj @@ -48,6 +48,12 @@ + + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + diff --git a/projects/settings_vs141.vcxproj.in b/projects/settings_vs141.vcxproj.in index e4a60227cb..23e044cc17 100644 --- a/projects/settings_vs141.vcxproj.in +++ b/projects/settings_vs141.vcxproj.in @@ -42,6 +42,12 @@ + + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + From 0e0476184eff43592178470059cdecf5925ea3da Mon Sep 17 00:00:00 2001 From: glx Date: Fri, 28 Dec 2018 01:41:48 +0100 Subject: [PATCH 200/622] Cleanup: remove useless and outdated 'generate' projects outputs --- projects/generate_vs140.vcxproj | 1 - projects/generate_vs141.vcxproj | 1 - 2 files changed, 2 deletions(-) diff --git a/projects/generate_vs140.vcxproj b/projects/generate_vs140.vcxproj index e505315153..b17142050b 100644 --- a/projects/generate_vs140.vcxproj +++ b/projects/generate_vs140.vcxproj @@ -31,7 +31,6 @@ Running %27generate.vbs%27 ... cscript "$(ProjectDir)generate.vbs" %(FullPath);%(AdditionalInputs) - $(SolutionDir)openttd_vs80.vcproj;$(SolutionDir)openttd_vs90.vcproj;$(SolutionDir)openttd_vs100.vcxproj;$(SolutionDir)openttd_vs100.vcxproj.filters;$(SolutionDir)langs_vs80.vcproj;$(SolutionDir)langs_vs90.vcproj;$(SolutionDir)langs_vs100.vcxproj;%(Outputs) diff --git a/projects/generate_vs141.vcxproj b/projects/generate_vs141.vcxproj index 2db93cf097..d7a877db17 100644 --- a/projects/generate_vs141.vcxproj +++ b/projects/generate_vs141.vcxproj @@ -31,7 +31,6 @@ Running %27generate.vbs%27 ... cscript "$(ProjectDir)generate.vbs" %(FullPath);%(AdditionalInputs) - $(SolutionDir)openttd_vs80.vcproj;$(SolutionDir)openttd_vs90.vcproj;$(SolutionDir)openttd_vs100.vcxproj;$(SolutionDir)openttd_vs100.vcxproj.filters;$(SolutionDir)langs_vs80.vcproj;$(SolutionDir)langs_vs90.vcproj;$(SolutionDir)langs_vs100.vcxproj;%(Outputs) From 07a40df9ab4c8aeea8ac4d3cb42208d2170fc73a Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 18 Jan 2019 19:45:44 +0100 Subject: [PATCH 201/622] Update: Translations from eints spanish: 4 changes by SilverSurferZzZ spanish (mexican): 1 change by Absay --- src/lang/spanish.txt | 8 ++++---- src/lang/spanish_MX.txt | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 70b2265848..ce291f37f1 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1529,7 +1529,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Cuando se activ STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Porcentaje del beneficio total a pagar en transferencias: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentaje de los beneficios dados a los transportes intermedios en sistemas de transferencias, dando un mayor control sobre el beneficio de cada vehículo STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Al arrastrar, colocar señales cada: {STRING} -STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Fija la distancia de separación entre señales al construir señales hasta el próximo obstáculo al arrastrar el ratón +STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Fija la distancia a la que se construirán las señales hasta el próximo obstáculo (señal, cruce), si estas son arrastradas STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} casilla{P 0 "" s} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Al arrastrar, mantener distancia fija entre señales: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Fija el comportamiento de la construcción de señales cuando se usa Ctrl+Arrastrar. Si se deshabilita, se colocan señales cerca de túneles y puentes para evitar largos trozos de vía sin señales. Si se activa, se colocan señales cada N casillas, haciendo que el alineamiento de vías paralelas sea más sencillo @@ -2373,9 +2373,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Señal c STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Señal de ruta (eléctrica){}Una señal de ruta permite a más de un tren entrar a un bloque de señales a la vez, si el tren puede reservar una ruta hasta un lugar seguro. Pueden ser traspasadas desde atrás STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Señal de ruta de un sentido (eléctrica){}Una señal de ruta permite a más de un tren entrar a un bloque de señales a la vez, si el tren puede reservar una ruta hasta un lugar seguro. No pueden ser traspasadas desde atrás STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Convertir señal{}Cuando es seleccionado, pulsar sobre una señal existente la convierte en el tipo y variante indicados. Pulsar Ctrl+Click permite cambiar de variante. Shift+Click muestra una estimación del precio de conversión -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Densidad de arrastre de señales -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Reducir arrastre de intensidad de señales -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Incrementar arrastre de intensidad de señales +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distancia del arrastre de señales +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Reducir distancia del arrastre de señales +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Incrementar distancia del arrastre de señales # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Seleccione Puente de Ferrocarril diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 6807929a4f..53f027f69b 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -931,6 +931,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizada.. STR_GAME_OPTIONS_CURRENCY_GEL :Lari georgiano (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Rial iraní (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Nuevo rublo ruso (RUR) +STR_GAME_OPTIONS_CURRENCY_MXN :Peso mexicano (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vehículos de carretera From 08ffa16d518bf8adb94116ef00ec8eb7cb56a5f9 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Tue, 25 Dec 2018 19:55:24 +0100 Subject: [PATCH 202/622] Fix 8859381: Display of requires/produces in Build Industry window Change the window to use a dynamically generated string of cargoes, instead of one of a few fixed-length lists. With up to 16 cargoes on each list, having 16 with the only difference how many are listed seems like a bad maintenance idea. --- src/industry_gui.cpp | 129 ++++++++++++++++++++++++++----------------- src/lang/english.txt | 4 ++ 2 files changed, 82 insertions(+), 51 deletions(-) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 05cc67ee2b..a1030122e5 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -280,6 +280,8 @@ class BuildIndustryWindow : public Window { /** The offset for the text in the matrix. */ static const int MATRIX_TEXT_OFFSET = 17; + /** The largest allowed minimum-width of the window, given in line heights */ + static const int MAX_MINWIDTH_LINEHEIGHTS = 20; void SetupArrays() { @@ -337,6 +339,53 @@ class BuildIndustryWindow : public Window { this->SetWidgetDisabledState(WID_DPI_DISPLAY_WIDGET, this->selected_type == INVALID_INDUSTRYTYPE && this->enabled[this->selected_index]); } + /** + * Build a string of cargo names with suffixes attached. + * This is distinct from the CARGO_LIST string formatting code in two ways: + * - This cargo list uses the order defined by the industry, rather than alphabetic. + * - NewGRF-supplied suffix strings can be attached to each cargo. + * + * @param cargolist Array of CargoID to display + * @param cargo_suffix Array of suffixes to attach to each cargo + * @param cargolistlen Length of arrays + * @param prefixstr String to use for the first item + * @return A formatted raw string + */ + std::string MakeCargoListString(const CargoID *cargolist, const CargoSuffix *cargo_suffix, int cargolistlen, StringID prefixstr) const + { + std::string cargostring; + char buf[1024]; + int numcargo = 0; + int firstcargo = -1; + + for (byte j = 0; j < cargolistlen; j++) { + if (cargolist[j] == CT_INVALID) continue; + numcargo++; + if (firstcargo < 0) { + firstcargo = j; + continue; + } + SetDParam(0, CargoSpec::Get(cargolist[j])->name); + SetDParamStr(1, cargo_suffix[j].text); + GetString(buf, STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION, lastof(buf)); + cargostring += buf; + } + + if (numcargo > 0) { + SetDParam(0, CargoSpec::Get(cargolist[firstcargo])->name); + SetDParamStr(1, cargo_suffix[firstcargo].text); + GetString(buf, prefixstr, lastof(buf)); + cargostring = std::string(buf) + cargostring; + } else { + SetDParam(0, STR_JUST_NOTHING); + SetDParamStr(1, ""); + GetString(buf, prefixstr, lastof(buf)); + cargostring = std::string(buf); + } + + return cargostring; + } + public: BuildIndustryWindow() : Window(&_build_industry_desc) { @@ -378,42 +427,39 @@ public: case WID_DPI_INFOPANEL: { /* Extra line for cost outside of editor + extra lines for 'extra' information for NewGRFs. */ int height = 2 + (_game_mode == GM_EDITOR ? 0 : 1) + (_loaded_newgrf_features.has_newindustries ? 4 : 0); + uint extra_lines_req = 0; + uint extra_lines_prd = 0; + uint max_minwidth = FONT_HEIGHT_NORMAL * MAX_MINWIDTH_LINEHEIGHTS; Dimension d = {0, 0}; for (byte i = 0; i < this->count; i++) { if (this->index[i] == INVALID_INDUSTRYTYPE) continue; const IndustrySpec *indsp = GetIndustrySpec(this->index[i]); - CargoSuffix cargo_suffix[lengthof(indsp->accepts_cargo)]; - GetAllCargoSuffixes(CARGOSUFFIX_IN, CST_FUND, NULL, this->index[i], indsp, indsp->accepts_cargo, cargo_suffix); - StringID str = STR_INDUSTRY_VIEW_REQUIRES_CARGO; - byte p = 0; - SetDParam(0, STR_JUST_NOTHING); - SetDParamStr(1, ""); - for (byte j = 0; j < lengthof(indsp->accepts_cargo); j++) { - if (indsp->accepts_cargo[j] == CT_INVALID) continue; - if (p > 0) str++; - SetDParam(p++, CargoSpec::Get(indsp->accepts_cargo[j])->name); - SetDParamStr(p++, cargo_suffix[j].text); - } - d = maxdim(d, GetStringBoundingBox(str)); - /* Draw the produced cargoes, if any. Otherwise, will print "Nothing". */ - GetAllCargoSuffixes(CARGOSUFFIX_OUT, CST_FUND, NULL, this->index[i], indsp, indsp->produced_cargo, cargo_suffix); - str = STR_INDUSTRY_VIEW_PRODUCES_CARGO; - p = 0; - SetDParam(0, STR_JUST_NOTHING); - SetDParamStr(1, ""); - for (byte j = 0; j < lengthof(indsp->produced_cargo); j++) { - if (indsp->produced_cargo[j] == CT_INVALID) continue; - if (p > 0) str++; - SetDParam(p++, CargoSpec::Get(indsp->produced_cargo[j])->name); - SetDParamStr(p++, cargo_suffix[j].text); + /* Measure the accepted cargoes, if any. */ + GetAllCargoSuffixes(CARGOSUFFIX_IN, CST_FUND, NULL, this->index[i], indsp, indsp->accepts_cargo, cargo_suffix); + std::string cargostring = this->MakeCargoListString(indsp->accepts_cargo, cargo_suffix, lengthof(indsp->accepts_cargo), STR_INDUSTRY_VIEW_REQUIRES_N_CARGO); + Dimension strdim = GetStringBoundingBox(cargostring.c_str()); + if (strdim.width > max_minwidth) { + extra_lines_req = max(extra_lines_req, strdim.width / max_minwidth + 1); + strdim.width = max_minwidth; } - d = maxdim(d, GetStringBoundingBox(str)); + d = maxdim(d, strdim); + + /* Measure the produced cargoes, if any. */ + GetAllCargoSuffixes(CARGOSUFFIX_OUT, CST_FUND, NULL, this->index[i], indsp, indsp->produced_cargo, cargo_suffix); + cargostring = this->MakeCargoListString(indsp->produced_cargo, cargo_suffix, lengthof(indsp->produced_cargo), STR_INDUSTRY_VIEW_PRODUCES_N_CARGO); + strdim = GetStringBoundingBox(cargostring.c_str()); + if (strdim.width > max_minwidth) { + extra_lines_prd = max(extra_lines_prd, strdim.width / max_minwidth + 1); + strdim.width = max_minwidth; + } + d = maxdim(d, strdim); } /* Set it to something more sane :) */ + height += extra_lines_prd + extra_lines_req; size->height = height * FONT_HEIGHT_NORMAL + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; size->width = d.width + WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT; break; @@ -502,36 +548,17 @@ public: y += FONT_HEIGHT_NORMAL; } - /* Draw the accepted cargoes, if any. Otherwise, will print "Nothing". */ CargoSuffix cargo_suffix[lengthof(indsp->accepts_cargo)]; + + /* Draw the accepted cargoes, if any. Otherwise, will print "Nothing". */ GetAllCargoSuffixes(CARGOSUFFIX_IN, CST_FUND, NULL, this->selected_type, indsp, indsp->accepts_cargo, cargo_suffix); - StringID str = STR_INDUSTRY_VIEW_REQUIRES_CARGO; - byte p = 0; - SetDParam(0, STR_JUST_NOTHING); - SetDParamStr(1, ""); - for (byte j = 0; j < lengthof(indsp->accepts_cargo); j++) { - if (indsp->accepts_cargo[j] == CT_INVALID) continue; - if (p > 0) str++; - SetDParam(p++, CargoSpec::Get(indsp->accepts_cargo[j])->name); - SetDParamStr(p++, cargo_suffix[j].text); - } - DrawString(left, right, y, str); - y += FONT_HEIGHT_NORMAL; + std::string cargostring = this->MakeCargoListString(indsp->accepts_cargo, cargo_suffix, lengthof(indsp->accepts_cargo), STR_INDUSTRY_VIEW_REQUIRES_N_CARGO); + y = DrawStringMultiLine(left, right, y, bottom, cargostring.c_str()); /* Draw the produced cargoes, if any. Otherwise, will print "Nothing". */ GetAllCargoSuffixes(CARGOSUFFIX_OUT, CST_FUND, NULL, this->selected_type, indsp, indsp->produced_cargo, cargo_suffix); - str = STR_INDUSTRY_VIEW_PRODUCES_CARGO; - p = 0; - SetDParam(0, STR_JUST_NOTHING); - SetDParamStr(1, ""); - for (byte j = 0; j < lengthof(indsp->produced_cargo); j++) { - if (indsp->produced_cargo[j] == CT_INVALID) continue; - if (p > 0) str++; - SetDParam(p++, CargoSpec::Get(indsp->produced_cargo[j])->name); - SetDParamStr(p++, cargo_suffix[j].text); - } - DrawString(left, right, y, str); - y += FONT_HEIGHT_NORMAL; + cargostring = this->MakeCargoListString(indsp->produced_cargo, cargo_suffix, lengthof(indsp->produced_cargo), STR_INDUSTRY_VIEW_PRODUCES_N_CARGO); + y = DrawStringMultiLine(left, right, y, bottom, cargostring.c_str()); /* Get the additional purchase info text, if it has not already been queried. */ if (HasBit(indsp->callback_mask, CBM_IND_FUND_MORE_TEXT)) { @@ -540,7 +567,7 @@ public: if (callback_res > 0x400) { ErrorUnknownCallbackResult(indsp->grf_prop.grffile->grfid, CBID_INDUSTRY_FUND_MORE_TEXT, callback_res); } else { - str = GetGRFStringID(indsp->grf_prop.grffile->grfid, 0xD000 + callback_res); // No. here's the new string + StringID str = GetGRFStringID(indsp->grf_prop.grffile->grfid, 0xD000 + callback_res); // No. here's the new string if (str != STR_UNDEFINED) { StartTextRefStackUsage(indsp->grf_prop.grffile, 6); DrawStringMultiLine(left, right, y, bottom, str, TC_YELLOW); diff --git a/src/lang/english.txt b/src/lang/english.txt index 0bb6ff9c5b..a67807aa6b 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -3355,6 +3355,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centre t STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Production level: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}The industry has announced imminent closure! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Requires: {YELLOW}{STRING}{RAW_STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produces: {YELLOW}{STRING}{RAW_STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{RAW_STRING} + ############ range for requires starts STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Requires: {YELLOW}{STRING}{RAW_STRING} STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requires: {YELLOW}{STRING}{RAW_STRING}, {STRING}{RAW_STRING} From f37304f9f531774f0159e8af013f910bb464e55d Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Thu, 27 Dec 2018 23:26:06 +0100 Subject: [PATCH 203/622] Cleanup: Remove unused strings --- src/lang/afrikaans.txt | 11 ----------- src/lang/arabic_egypt.txt | 11 ----------- src/lang/basque.txt | 11 ----------- src/lang/belarusian.txt | 11 ----------- src/lang/brazilian_portuguese.txt | 11 ----------- src/lang/bulgarian.txt | 11 ----------- src/lang/catalan.txt | 11 ----------- src/lang/croatian.txt | 11 ----------- src/lang/czech.txt | 11 ----------- src/lang/danish.txt | 11 ----------- src/lang/dutch.txt | 11 ----------- src/lang/english.txt | 11 ----------- src/lang/english_AU.txt | 11 ----------- src/lang/english_US.txt | 11 ----------- src/lang/esperanto.txt | 11 ----------- src/lang/estonian.txt | 11 ----------- src/lang/faroese.txt | 11 ----------- src/lang/finnish.txt | 11 ----------- src/lang/french.txt | 11 ----------- src/lang/gaelic.txt | 11 ----------- src/lang/galician.txt | 11 ----------- src/lang/german.txt | 11 ----------- src/lang/greek.txt | 11 ----------- src/lang/hebrew.txt | 11 ----------- src/lang/hungarian.txt | 11 ----------- src/lang/icelandic.txt | 11 ----------- src/lang/indonesian.txt | 11 ----------- src/lang/irish.txt | 11 ----------- src/lang/italian.txt | 11 ----------- src/lang/japanese.txt | 11 ----------- src/lang/korean.txt | 11 ----------- src/lang/latin.txt | 11 ----------- src/lang/latvian.txt | 11 ----------- src/lang/lithuanian.txt | 11 ----------- src/lang/luxembourgish.txt | 11 ----------- src/lang/malay.txt | 11 ----------- src/lang/norwegian_bokmal.txt | 11 ----------- src/lang/norwegian_nynorsk.txt | 11 ----------- src/lang/polish.txt | 11 ----------- src/lang/portuguese.txt | 11 ----------- src/lang/romanian.txt | 11 ----------- src/lang/russian.txt | 11 ----------- src/lang/serbian.txt | 11 ----------- src/lang/simplified_chinese.txt | 11 ----------- src/lang/slovak.txt | 11 ----------- src/lang/slovenian.txt | 11 ----------- src/lang/spanish.txt | 11 ----------- src/lang/spanish_MX.txt | 11 ----------- src/lang/swedish.txt | 11 ----------- src/lang/tamil.txt | 11 ----------- src/lang/thai.txt | 11 ----------- src/lang/traditional_chinese.txt | 11 ----------- src/lang/turkish.txt | 11 ----------- src/lang/ukrainian.txt | 11 ----------- src/lang/unfinished/frisian.txt | 11 ----------- src/lang/unfinished/marathi.txt | 11 ----------- src/lang/unfinished/persian.txt | 11 ----------- src/lang/vietnamese.txt | 11 ----------- src/lang/welsh.txt | 11 ----------- 59 files changed, 649 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index eca60e70a4..7a93f32490 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -3286,17 +3286,6 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Skuif sk STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produksie vlak: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Die nywerheid het aangekondig dat dit binnekort gaan sluit! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Vereis: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Vereis: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Vereis: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produseer: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produseer: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends STR_CONFIG_GAME_PRODUCTION :{WHITE}Verander produksie (veelvoude van 8, tot en met 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Verander produksie vlakke (persentasie, tot 800%) diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 7dfda5029b..c0c285d870 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -2813,17 +2813,6 @@ STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}وسط الشاشة على المصنع STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}نسبة الانتاج: {YELLOW}{COMMA}% -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}يحتاج: {YELLOW}{STRING} {STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}يحتاج: {YELLOW}{STRING}{STRING}، {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}يحتاج: {YELLOW}{STRING}{STRING}, {STRING}{STRING} , {STRING}{STRING} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}ينتج: {YELLOW}{STRING} {STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}ينتج: {YELLOW}{STRING} {STRING}, {STRING} {STRING} -############ range for produces ends STR_CONFIG_GAME_PRODUCTION :{WHITE}تغيير الانتاج مضاعف من 8 الى 2040 STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}غير مستوى الانتاج{}نسبة مئوية حتى 800%. diff --git a/src/lang/basque.txt b/src/lang/basque.txt index ee74b92372..928517b5d4 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -3174,17 +3174,6 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Ikuspegi STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ekoizpen kopurua: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industriak berehalako itxiera iragarri du! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Beharrezkoa du: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Beharrezkoa du: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Beharrezkoa du: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Ekoizpena: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Ekoizpena: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends STR_CONFIG_GAME_PRODUCTION :{WHITE}Ekoizpena aldatu (8 eta 2040 arteko multiploa) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Ekoizpen ehunekoa aldatu (ehunekoa, %800 arte) diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index ada14f8931..9537a5831f 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -3635,21 +3635,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Пака STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Прадукцыйнасьць: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Прадпрыемства хутка закрываецца! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Патрабуецца: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Патрабуецца: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Патрабуецца: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Патрабуецца: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} чакае{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Вырабляе: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Вырабляе: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Зьмяніць прадукцыйнасьць (кратна 8, да 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Зьмяніць прадукцыйнасьць (у адсотках, да 800%) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 0126a33428..5d778024d8 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -3345,21 +3345,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nível de produção: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A indústria anunciou fechamento iminente! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Requer: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requer: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requer: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necessita: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} aguardando{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produz: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produz: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Modificar produção (múltiplo de 8, até 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Mudar nível de produção (porcentagem, até 800%) diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 9c24ed8a74..39f82cd5d6 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -3215,19 +3215,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Фоку STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ниво на производство: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Индустрията обяви незабавна ликвидация! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Нуждае се от: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Нуждае се от: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Нуждае се от: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} чакащ{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Произвежда: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Произвежда: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Промени производството STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Промени нивото на производство(процент, до 800%) diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 59e0e3b55c..e35d754881 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -3347,21 +3347,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centra l STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivell de producció: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La indústria ha anunciat la seva clausura imminent! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Necessita: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Necessita: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Necessita: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necessita: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} esperant{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produeix: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produeix: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Canvia la producció (múltiple de 8, fins a 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Canvia el nivell de producció (en percentatge, fins a 800%) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index dac4678a8e..69f2d40ac2 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -3451,21 +3451,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrira STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Razina proizvodnje: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrija je najavila uskoro zatvaranje! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Treba: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Treba: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Treba: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Treba: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} čeka{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Proizvodi: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Proizvodi: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Promijeni proizvodnju (višekratnik broja 8, do 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Promijeni razinu proizvodnje (postotak, do najviše 800%) diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 530738b6f4..faa8e56852 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -3405,21 +3405,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vystřed STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produkce: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Průmysl oznámila blížící se uzavření! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Vyžaduje: {YELLOW}{STRING.acc}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Vyžaduje: {YELLOW}{STRING.acc}{STRING}, {STRING.acc}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Vyžaduje: {YELLOW}{STRING.acc}{STRING}, {STRING.acc}{STRING}, {STRING.acc}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Vyžaduje: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} ček{P á ají á}{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produkuje: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produkuje: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Změnit produkci (násobky 8, až do 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Změna velikosti produkce (procentuelně, do 800%) diff --git a/src/lang/danish.txt b/src/lang/danish.txt index d278cd277f..fea717d8ea 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -3295,21 +3295,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrer STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktions niveauet: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrien har rapporteret øjeblikkelig nedlukning! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Kræver: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Kræver: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Kræver: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Kræver: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} venter{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Producerer: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Producerer: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Skift produktion (multipla af 8, op til 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Ændre produktions niveauet (Op til 800%) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 0bde237c7e..8d0e54eaff 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -3347,21 +3347,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centreer STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Productieniveau: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}De industrie heeft een dreigende sluiting aangekondigd! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Vereist: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Vereist: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Vereist: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Vereist: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} wachtend{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produceert: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produceert: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Verander productie (veelvoud van 8, maximaal 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Verander productieniveau (percentage, maximaal 800%) diff --git a/src/lang/english.txt b/src/lang/english.txt index a67807aa6b..7ad560bdff 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -3359,21 +3359,10 @@ STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Requires STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produces: {YELLOW}{STRING}{RAW_STRING} STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{RAW_STRING} -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Requires: {YELLOW}{STRING}{RAW_STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requires: {YELLOW}{STRING}{RAW_STRING}, {STRING}{RAW_STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requires: {YELLOW}{STRING}{RAW_STRING}, {STRING}{RAW_STRING}, {STRING}{RAW_STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requires: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:RAW_STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} waiting{RAW_STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produces: {YELLOW}{STRING}{RAW_STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produces: {YELLOW}{STRING}{RAW_STRING}, {STRING}{RAW_STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Change production (multiple of 8, up to 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Change production level (percentage, up to 800%) diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index bf71047a94..75010b40ce 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -3252,17 +3252,6 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centre t STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Production level: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}The industry has announced imminent closure! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Requires: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requires: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requires: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produces: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produces: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends STR_CONFIG_GAME_PRODUCTION :{WHITE}Change production (multiple of 8, up to 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Change production level (percentage, up to 800%) diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 98e007bc1b..54a92e5873 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -3302,21 +3302,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Center t STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Production level: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}The industry has announced imminent closure! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Requires: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requires: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requires: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requires: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} waiting{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produces: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produces: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Change production (multiple of 8, up to 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Change production level (percentage, up to 800%) diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index bff065d1fa..23b52b3d6b 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -2726,17 +2726,6 @@ STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centri ĉefvidon ĉe la industrio. Stir+Klak por malfermi novan vidujon ĉe la industrioloko. STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produkta nivelo: {YELLOW}{COMMA}% -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Bezonas: {YELLOW}{STRING.n}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Bezonas: {YELLOW}{STRING.n}{STRING}, {STRING.n}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Bezonas: {YELLOW}{STRING.n}{STRING}, {STRING.n}{STRING}, {STRING.n}{STRING} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produktas: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produktas: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends STR_CONFIG_GAME_PRODUCTION :{WHITE}Ŝanĝu produktadon (multoble de 8, ĝis 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Ŝanĝu produktan nivelon (procento, limigo je 800%) diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index a8f130e67d..da58843275 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -3343,17 +3343,6 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vaate ke STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tootlikkuse tase: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Tööstus teatab kohesest sulgemisest! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Vajab: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Vajab: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Vajab: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Toodab: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Toodab: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends STR_CONFIG_GAME_PRODUCTION :{WHITE}Tootlikuse muutmine (kaheksaga jaguv, kuni 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Muuda tootlikkuse taset (protsent, kuni 800%) diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 3465a72111..e30bf7f496 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -2916,17 +2916,6 @@ STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Savna høvuðs sýni á ídnaðin. Ctrl+trýst letur nýggjan sýnisglugga upp við sýni á ídnaðin STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Framleiðslu støði: {YELLOW}{COMMA}% -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Tørvar: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Tørvar: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Tørvar: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Framleiður: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Framleiður: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends STR_CONFIG_GAME_PRODUCTION :{WHITE}Broyt framleiðslu (fald av 8, upp til 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Broyt framleiðslu støði (prosent, upp til 800%) diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 700a58dabd..e89189adbe 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -3328,21 +3328,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Keskitä STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tuotantotaso: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Teollisuuslaitos ilmoittaa pikaisesta sulkeutumisestaan! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Tarvitsee: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Tarvitsee: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Tarvitsee: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Tarvitsee: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} odottamassa{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Tuottaa: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Tuottaa: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Muokkaa tuotantoa (8:n kerroin, 2040 asti) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Muuta tuotantotasoa (prosentteina, 800{NBSP}% asti) diff --git a/src/lang/french.txt b/src/lang/french.txt index bb54e6a86e..ead78300ae 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -3356,21 +3356,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrer STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Niveau de production{NBSP}: {YELLOW}{COMMA}{NBSP}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}L'industrie a annoncé sa fermeture imminente{NBSP}! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Nécessite{NBSP}: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Nécessite{NBSP}: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Nécessite{NBSP}: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Nécessite{NBSP}: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}{NBSP}: {CARGO_SHORT} en attente{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produit{NBSP}: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produit{NBSP}: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Changer la production (multiple de 8, max. 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Changer le niveau de production (pourcentage, max. 800{NBSP}%) diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 2cbd7023b1..14791d560e 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -3530,21 +3530,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Meadhana STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ìre an dèanadais: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Tha an gnìomhachas gu bhith a dhùnadh a dh'aithghearr! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Feum air: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Feum air: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Feum air: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Feum air: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} a' feitheamh{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Toradh: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Toradh: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Atharraich an saothrachaidh (iomadach aig 8, suas gu 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Atharraich ìre an saothrachaidh (ceudad, suas gu 800%) diff --git a/src/lang/galician.txt b/src/lang/galician.txt index c0896f1728..6802cf80aa 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -3290,21 +3290,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de produción: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A industria anunció un peche inminente -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Require: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Require: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Require: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Require: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} agardando{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Cambiar produción (múltiplo de 8, ata 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Cambiar o nivel de produción (porcentaxe, ata 800%) diff --git a/src/lang/german.txt b/src/lang/german.txt index c7a63de4e4..82eb55132e 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -3290,21 +3290,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Hauptans STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktionsrate: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Diese Industrie wird in Kürze schließen! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Benötigt: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Benötigt: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Benötigt: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}benötigt: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} wartend{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produziert: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produziert: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Produktion ändern (Vielfache von 8, maximal 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Produktionsrate ändern (prozentual, bis zu 800%) diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 8251cfa6e7..85bbf13643 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -3433,21 +3433,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Κεντ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Επίπεδο παραγωγής: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Η βιομηχανία έχει ανακοινώσει άμεσο κλείσιμο! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Απαιτεί: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Απαιτεί: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Απαιτεί: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Απαιτεί: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} σε αναμονή{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Παράγει: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Παράγει: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Αλλαγή παραγωγής (πολλαπλάσιο του 8, μέχρι το 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Αλλαγή του επιπέδου παραγωγής (ποσοστιαία, μέχρι το 800%) diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 8ef90cdc7c..eb643eeb62 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -3343,21 +3343,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}מקד STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}רמת הפקה: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}התעשייה הכריזה על סגירה מתקרבת! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{YELLOW}{1:STRING}{0:STRING}{BLACK} : דורש -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{YELLOW}{3:STRING}{2:STRING},{1:STRING}{0:STRING}{BLACK} :דורש -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{YELLOW}{5:STRING}{4:STRING},{3:STRING}{2:STRING},{1:STRING}{0:STRING}{BLACK} :דורש -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}דורש: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} ממתין{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{YELLOW}{1:STRING}{0:STRING}{BLACK} :מייצר -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{YELLOW}{3:STRING}{2:STRING},{1:STRING}{0:STRING}{BLACK} :מייצר -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}שנה תפוקה (כפולות של 8, עד 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}שינוי ברמת ההפקה (עד 800% אחוז) diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 8125f2a649..3654fdf8a4 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -3353,21 +3353,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}A fő n STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Termelési szint: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A gyár bejelentette a közelgő bezárását! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Felhasznál: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Felhasznál: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Felhasznál: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Elfogad: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} várakozik{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Gyárt: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Gyárt: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Termelés megváltoztatása (8 többszörösei 2040-ig) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Termelési szint megváltoztatása (százalékosan, 800%-ig) diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index d847ba02e4..33c261161a 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -3076,17 +3076,6 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Miðja a STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Framleiðsla: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Iðnaðurinn hefur tilkynnt yfirvofandi lokun. -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Þarf: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Þarf: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Þarf: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Framleiðir: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Framleiðir: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends STR_CONFIG_GAME_PRODUCTION :{WHITE}Breyta framleiðslu (margfeldi af 8, allt að 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Breyta framleiðslumagni (prósentu hámark er 800%) diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 30447a88a8..eea86bd413 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -3319,20 +3319,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Arahkan STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tingkat produksi: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industri akan segera ditutup! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Membutuhkan: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Membutuhkan: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Membutuhkan: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Membutuhkan: STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} menunggu{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Menghasilkan: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Menghasilkan: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Perubahan produksi (kelipatan 8, hingga 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Ubah tingkat produksi (dalam persen, hingga 800%) diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 86dbcbcb62..b99848a5e7 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -3285,17 +3285,6 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Láraigh STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Leibhéal táirgeachta: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}D'fhógair an tionscal go ndúnfaidh sé gan mhoill! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Teastaíonn: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Teastaíonn: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Teastaíonn: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Táirgtear: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Táirgtear: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends STR_CONFIG_GAME_PRODUCTION :{WHITE}Athraigh táirgeacht (iolra de 8, suas go 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Athraigh an ráta táirgeachta (céatadán, suas go 800%) diff --git a/src/lang/italian.txt b/src/lang/italian.txt index c16354f1ce..732fc5603c 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -3381,21 +3381,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centra l STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Livello di produzione: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}L'industria ha annunciato che a breve chiuderà! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Richiede: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Richiede: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Richiede: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Richiede: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} in attesa{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Cambia produzione (multiplo di 8, fino a 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Cambia livello di produzione (percentuale, fino a 800%) diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 880866c945..89f8afeff0 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -3286,19 +3286,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}メイ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}生産量: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}この産業拠点は間もなく閉鎖されます! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}必要資源: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}必要資源: {YELLOW}{STRING}{STRING}と{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}必要資源: {YELLOW}{STRING}{STRING}、{STRING}{STRING}、{STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES : {BLACK}必要物資: -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}生産品: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}生産品: {YELLOW}{STRING}{STRING}、{STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}生産量を変更 (8の倍数、最大2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}生産量を変更 (%表記、最大800%) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 8c5736136c..f86c5d7f21 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -3352,21 +3352,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}이 산 STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}생산 수준: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}산업시설이 곧 폐쇄됩니다! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}필요함: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}필요함: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}필요함: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}받는 화물: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} 대기중{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}생산: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}생산: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}생산량 변경 (8의 배수, 최대 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}생산 등급 변경 (퍼센트, 800%까지) diff --git a/src/lang/latin.txt b/src/lang/latin.txt index d5a4a744dd..caa1c525f6 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -3503,21 +3503,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Movere c STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Quantitas productionis: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Haec industria mox claudetur! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Postulat: {YELLOW}{STRING.acc}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Postulat: {YELLOW}{STRING.acc}{STRING}, {STRING.acc}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Postulat: {YELLOW}{STRING.acc}{STRING}, {STRING.acc}{STRING}, {STRING.acc}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Postulat: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING.acc}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} manet{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Efficit: {YELLOW}{STRING.acc}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Efficit: {YELLOW}{STRING.acc}{STRING}, {STRING.acc}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Mutare productionem (per octo multiplicatur, ad 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Mutare productionem (centesima, ad 800%) diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 79788a54c1..c80bf6c22a 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -3229,17 +3229,6 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrēt STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ražošanas līmenis: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Nozare ir paziņojusi par nenovēršamu slēgšanu! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Nepieciešams: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Nepieciešams: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Nepieciešams: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Ražo: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Ražo: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends STR_CONFIG_GAME_PRODUCTION :{WHITE}Mainīt ražošanu (dalāmais ar 8, līdz pat 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Mainīt ražošanas līmeni (procentos, līdz 800%) diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 631613d82d..346e5e08d5 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -3504,17 +3504,6 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centruot STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Gamybos sparta: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Pramonės įmonė paskelbė apie jos neišvengiamą uždarymą! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Reikalauja: {YELLOW}{STRING.ko}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Reikalauja: {YELLOW}{STRING.ko}{STRING}, {STRING.ko}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Reikalauja: {YELLOW}{STRING.ko}{STRING}, {STRING.ko}{STRING}, {STRING.ko}{STRING} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Gamina: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Gamina: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends STR_CONFIG_GAME_PRODUCTION :{WHITE}Keisti gamybos apimtį (8 daugiklis, iki 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Pakeisti gamybos spartą (procentais, iki 800%) diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 044d1b82f0..f9f349cc0a 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -3289,21 +3289,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Zentréi STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktiounslevel: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}D'Industrie annoncéiert dass se zougemaach gëtt -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Brauch: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Brauch: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Brauch: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Brauch: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} um waarden{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produzéiert: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produzéiert: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}D'Produktioun änneren (Multipel vun 8, bis op 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Änner de Produktiounslevel (Prozenter, bis zu 800%) diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 956b5c38f0..fa479e1f35 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -2984,19 +2984,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Pusatkan STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tahap produksi: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW} Industri mengumumkan penutupan serta merta! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Memerlukan: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Memerlukan: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Memerlukan: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Diperlukan: -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Mengeluarkan: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Mengeluarkan: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Ubah pengeluaran (gandaan 8, sehingga 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Ubah tahap produksi (peratus, hingga 800%) diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 55b78fec69..72bf13da26 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -3293,21 +3293,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Gå til STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produksjonsnivå: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Næringen har annonsert snarlig nedleggelse! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Trenger: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Trenger: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Trenger: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Krever: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} venter{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produserer: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produserer: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Endre produksjon (multiplum av 8, opptil 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Endre produksjonsnivå (prosentsats, opptil 800{NBSP}%) diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 587ce0cce1..508a69ad79 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -3204,17 +3204,6 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Midtstil STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produksjonsnivå: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Verksemda legg snarleg ned drifta! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Treng: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Treng: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Treng: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Lagar: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Lagar: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends STR_CONFIG_GAME_PRODUCTION :{WHITE}Byt produksjon (8-gongen, opptil 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Endre produksjonsnivå (prosent, opp til 800%) diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 628a398f29..0e0c77d84b 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3682,21 +3682,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centruj STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Poziom produkcji: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Przedsiębiorstwo ogłosiło likwidację! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Wymaga: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Wymaga: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Wymaga: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Potrzebuje: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} oczekuje{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produkuje: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produkuje: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Zmiana produkcji (wielokrotność 8, do 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Zmiana poziomu produkcji (procentowo, do 800%) diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index e50745fc71..13e8c56c91 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -3290,21 +3290,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nível de produção: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A indústria anunciou encerramento iminente! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Necessário: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Necessário: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Necessário: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requer: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} a aguardar{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produz: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produz: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Modificar produção (múltiplo de 8, até 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Mudar o nível de produção (percentagem, até 800%) diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 14bd028643..38b7eb9a8b 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -3243,17 +3243,6 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centreaz STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivelul producţiei: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industria a anunţat închiderea iminentă! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Are nevoie de: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Are nevoie de: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Are nevoie de: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends STR_CONFIG_GAME_PRODUCTION :{WHITE}Schimba productia (multiplu de 8, până la 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Modifică nivelul producţiei (procent, până la 800%) diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 7574bd8bfb..ed51dcb4b6 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -3500,21 +3500,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Пока STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Производительность: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Предприятие скоро закрывается! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Требуется: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Требуется: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Требуется: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Требуется: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} ожидает{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Производит: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Производит: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Изменить производительность (кратно 8, до 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Изменить производительность (в процентах, до 800%) diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 74b99a1f72..ea75e7c0b3 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -3496,21 +3496,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Prebacuj STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivo proizvodnje: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Fabrika je objavila da može svakog trenutka da se zatvori! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Potražuje: {YELLOW}{STRING.aku}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Potražuje: {YELLOW}{STRING.aku}{STRING}, {STRING.aku}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Potražuje: {YELLOW}{STRING.aku}{STRING}, {STRING.aku}{STRING}, {STRING.aku}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK} Zahteva: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} čekaje {STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Proizvodi: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Proizvodi: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Promena proizvodnje STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Promena nivoa proizvodnje (u procentima, do 800%) diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 652972818d..c4dd4a80d4 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -3310,20 +3310,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}将屏 STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}生产程度: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}此工业已经宣布即刻停业倒闭! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}需要:{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}需要:{YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}需要:{YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} 等待中{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}产出: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}产出: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}改变产量 STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}修改产量 (百分比, 最高 800%) diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 0a127f4d61..88eba473d2 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -3353,17 +3353,6 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vycentro STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Úroveň produkcie: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Priemysel oznámil blížiace sa uzatvorenie! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Potrebuje: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Potrebuje: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Potrebuje: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produkuje: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produkuje: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends STR_CONFIG_GAME_PRODUCTION :{WHITE}Zmeniť produkciu (násobky 8, až do 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Zmeniť úroveň produkcie (percentuálne, až do 800%) diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index ee1a36e19f..73484f5c1b 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -3439,17 +3439,6 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Osredoto STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivo proizvodnje: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrija je napovedala zaprtje! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Potrebuje: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Potrebuje: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Potrebuje: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Proizvaja: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Proizvaja: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends STR_CONFIG_GAME_PRODUCTION :{WHITE}Spremeni proizvodnjo (večkratnik 8, do 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Spremeni nivo proizvodnje (odstotki, do 800%) diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index ce291f37f1..809885d859 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -3327,21 +3327,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de producción: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La industria ha anunciado su cierre inminente! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Requiere: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Necesita: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requiere: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necesita: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} esperando{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Cambiar producción (múltiplo de 8, máximo 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Cambiar nivel de producción (porcentaje, hasta un máximo de 800%) diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 53f027f69b..428a9bd475 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -3356,21 +3356,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de producción: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}¡La industria ha anunciado su cierre inminente! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Requiere: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Requiere: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Requiere: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requiere: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} esperando{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Cambiar producción (múltiplo de 8, máximo 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Cambiar nivel de producción (porcentaje, máximo 800%) diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 30bd9ea8ff..b250e87185 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -3289,21 +3289,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrera STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktionsnivå: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrin har annonserat att den snart kommer att stänga! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Kräver: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Kräver: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Kräver: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Kräver: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} väntar{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Producerar: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Producerar: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Ändra produktion (produkt av 8, upp till 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Ändra produktionsnivå (procent, upp till 800%) diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index a42fa3440a..fb0cd2d685 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -2908,17 +2908,6 @@ STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}தயாரிப்பு அளவு: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}தொழிற்சாலை உடனடியாக மூடப்படும் என்று அறிவிக்கப்பட்டுள்ளது! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}தேவைப்படுகிறது: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}தேவைப்படுகிறது: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}தேவைப்படுகிறது: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}தயாரிப்பு: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}தயாரிக்கிறது: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends STR_CONFIG_GAME_PRODUCTION :{WHITE}தயாரிப்பினை மாற்றவும் (8 இன் பெருக்கங்கள், 2040 வரை) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}தயாரிப்பு அளவினை மாற்றவும் (சதவிகிதம், 800% வரை) diff --git a/src/lang/thai.txt b/src/lang/thai.txt index c3584238f5..d2c1df78bf 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -3217,17 +3217,6 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}กด STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}ระดับการผลิต: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}อุตสาหกรรมนี้ได้มีการประกาศปิดตัวลงอย่างเป็นทางการ! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}มีความต้องการ: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}มีความต้องการ: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}มีความต้องการ: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}ผลผลิต: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}ผลผลิต: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends STR_CONFIG_GAME_PRODUCTION :{WHITE}ปรับเปลี่ยนปริมาณผลผลิต (ระหว่าง 8 ถึง 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}เปลี่ยนระดับการผลิต (เปอร์เซ็นต์เพิ่มมากสุดถึง 800%) diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 621572e561..24c1969639 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -3285,17 +3285,6 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}將工 STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}產出等級:{YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}該工業已宣佈關閉! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}需要:{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}需要:{YELLOW}{STRING}{STRING},{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}需要:{YELLOW}{STRING}{STRING},{STRING}{STRING},{STRING}{STRING} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}產出:{YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}產出:{YELLOW}{STRING}{STRING},{STRING}{STRING} -############ range for produces ends STR_CONFIG_GAME_PRODUCTION :{WHITE}修改產量 (以 8 為倍數增減,最大為 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}變更產出等級 (百分比,最高可到800%) diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index a92a09f38a..09124a162c 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -3290,21 +3290,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Görünt STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Üretim seviyesi: %{YELLOW}{COMMA} STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Fabrika çok yakında kapanacağını duyurdu! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}İstenen: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}İstenenler: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}İstenenler: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Gereken: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} bekliyor{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Üretir: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Üretir: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Üretimi değiştir (8'in katı, 2040'a kadar) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Üretim seviyesini değiştir (yüzde olarak, %800'e kadar) diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 22f5d8f677..700f169b5d 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -3416,17 +3416,6 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Пока STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Обсяг виробництва: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Підприємство оголосило про близьке закриття! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Потребує: {YELLOW}{STRING.z}{STRING.z} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Потребує: {YELLOW}{STRING.z}{STRING.z}, {STRING.z}{STRING.z} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Потребує: {YELLOW}{STRING.z}{STRING.z}, {STRING.z}{STRING.z}, {STRING.z}{STRING.z} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Продукція: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Продукція: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends STR_CONFIG_GAME_PRODUCTION :{WHITE}Змінити виробництво (кратне 8, до 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Змінити обсяг виробництва (до 800%) diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index 2b3b80966e..d68b902400 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -3036,17 +3036,6 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Sintrear STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produksje nivo: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Yndustry kundicht drigend sluten oan! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Nedich: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Nedich: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Nedich: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Produseart: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Produseart: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Feroaring produksje nivo (percentage, up to 800%) diff --git a/src/lang/unfinished/marathi.txt b/src/lang/unfinished/marathi.txt index f5ff89ac9e..8c723f3afe 100644 --- a/src/lang/unfinished/marathi.txt +++ b/src/lang/unfinished/marathi.txt @@ -1278,17 +1278,6 @@ STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUST # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}लाग्त: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}लाग्त: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}लाग्त: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}बनव्त: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}बनव्त: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends # Vehicle lists diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index 618375a246..6f77d06e07 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -2903,17 +2903,6 @@ STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}مرکز تصویر را روی کارخانه قرار بده.Ctrl+Click کنید تا پنجره نمایی از کارخانه نمایش داده شود STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}این کارخانه اعلام کرده است که به زودی بسته خواهد شد! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}مواد اولیه: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}مواد اولیه: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}مواد اولیه: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - - -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}محصولات: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}محصولات: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends # Vehicle lists diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 92ae0f40bb..c64f22a328 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -3348,21 +3348,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Xem vị STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Mức sản lượng: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Nhà máy này đã thông báo sắp đóng cửa! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Yêu cầu: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Yêu cầu: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Yêu cầu: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Cần cung cấp: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} đang chờ{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Sản xuất: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Sản xuất: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Thay đổi sản lượng (bội số của 8, max 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Thay đổi mức sản lượng (theo phần trăm, cao nhất 800%) diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 14277fdd7a..4789458918 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -3289,21 +3289,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Canoli'r STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Lefel cynhyrchu: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Mae'r diwydiant wedi datgan ei fod ar fin cau! -############ range for requires starts -STR_INDUSTRY_VIEW_REQUIRES_CARGO :{BLACK}Angen: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO :{BLACK}Angen: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -STR_INDUSTRY_VIEW_REQUIRES_CARGO_CARGO_CARGO :{BLACK}Angen: {YELLOW}{STRING}{STRING}, {STRING}{STRING}, {STRING}{STRING} -############ range for requires ends - STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Angen: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} yn disgwyl{STRING} -############ range for produces starts -STR_INDUSTRY_VIEW_PRODUCES_CARGO :{BLACK}Cynhyrchu: {YELLOW}{STRING}{STRING} -STR_INDUSTRY_VIEW_PRODUCES_CARGO_CARGO :{BLACK}Cynhyrchu: {YELLOW}{STRING}{STRING}, {STRING}{STRING} -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION :{WHITE}Newid cynnyrch (lluosrif o 8, hyd at 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Newid y lefel cynhyrchu (canran, hyd at 800%) From 4e9e115760658099a6dd5a677bdf03145ab93e82 Mon Sep 17 00:00:00 2001 From: Ingo von Borstel Date: Wed, 16 Jan 2019 21:44:03 +0100 Subject: [PATCH 204/622] Add: [NewGRF] Airport animation trigger for plane landing (#6334, patch by Supercheese) --- src/aircraft_cmd.cpp | 7 +++++++ src/newgrf_animation_type.h | 11 ++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index b495a1dff5..6799f7c643 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -37,6 +37,7 @@ #include "core/backup_type.hpp" #include "zoom_func.h" #include "disaster_vehicle.h" +#include "newgrf_airporttiles.h" #include "framerate_type.h" #include "table/strings.h" @@ -1370,8 +1371,14 @@ static void AircraftEntersTerminal(Aircraft *v) */ static void AircraftLandAirplane(Aircraft *v) { + Station *st = Station::Get(v->targetairport); + + TileIndex vt = TileVirtXY(v->x_pos, v->y_pos); + v->UpdateDeltaXY(); + AirportTileAnimationTrigger(st, vt, AAT_STATION_AIRPLANE_LAND); + if (!PlayVehicleSound(v, VSE_TOUCHDOWN)) { SndPlayVehicleFx(SND_17_SKID_PLANE, v); } diff --git a/src/newgrf_animation_type.h b/src/newgrf_animation_type.h index 1f3995f46d..8eec6ada9c 100644 --- a/src/newgrf_animation_type.h +++ b/src/newgrf_animation_type.h @@ -46,11 +46,12 @@ enum IndustryAnimationTrigger { /** Animation triggers for airport tiles */ enum AirpAnimationTrigger { - AAT_BUILT, ///< Triggered when the airport is built (for all tiles at the same time). - AAT_TILELOOP, ///< Triggered in the periodic tile loop. - AAT_STATION_NEW_CARGO, ///< Triggered when new cargo arrives at the station (for all tiles at the same time). - AAT_STATION_CARGO_TAKEN, ///< Triggered when a cargo type is completely removed from the station (for all tiles at the same time). - AAT_STATION_250_TICKS, ///< Triggered every 250 ticks (for all tiles at the same time). + AAT_BUILT, ///< Triggered when the airport is built (for all tiles at the same time). + AAT_TILELOOP, ///< Triggered in the periodic tile loop. + AAT_STATION_NEW_CARGO, ///< Triggered when new cargo arrives at the station (for all tiles at the same time). + AAT_STATION_CARGO_TAKEN, ///< Triggered when a cargo type is completely removed from the station (for all tiles at the same time). + AAT_STATION_250_TICKS, ///< Triggered every 250 ticks (for all tiles at the same time). + AAT_STATION_AIRPLANE_LAND, ///< Triggered when an airplane (not a helicopter) touches down at the airport (for all tiles at the same time). }; /** Animation triggers for objects. */ From 60da05cf2a015e7942d38f25d01b0089328212ca Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 19 Jan 2019 19:45:43 +0100 Subject: [PATCH 205/622] Update: Translations from eints french: 3 changes by glx --- src/lang/afrikaans.txt | 1 + src/lang/arabic_egypt.txt | 1 + src/lang/basque.txt | 1 + src/lang/belarusian.txt | 1 + src/lang/brazilian_portuguese.txt | 1 + src/lang/bulgarian.txt | 1 + src/lang/catalan.txt | 1 + src/lang/croatian.txt | 1 + src/lang/czech.txt | 1 + src/lang/danish.txt | 1 + src/lang/dutch.txt | 1 + src/lang/english_AU.txt | 1 + src/lang/english_US.txt | 1 + src/lang/esperanto.txt | 1 + src/lang/estonian.txt | 1 + src/lang/faroese.txt | 1 + src/lang/finnish.txt | 1 + src/lang/french.txt | 4 ++++ src/lang/gaelic.txt | 1 + src/lang/galician.txt | 1 + src/lang/german.txt | 1 + src/lang/greek.txt | 1 + src/lang/hebrew.txt | 1 + src/lang/hungarian.txt | 1 + src/lang/icelandic.txt | 1 + src/lang/indonesian.txt | 1 + src/lang/irish.txt | 1 + src/lang/italian.txt | 1 + src/lang/japanese.txt | 1 + src/lang/korean.txt | 1 + src/lang/latin.txt | 1 + src/lang/latvian.txt | 1 + src/lang/lithuanian.txt | 1 + src/lang/luxembourgish.txt | 1 + src/lang/malay.txt | 1 + src/lang/norwegian_bokmal.txt | 1 + src/lang/norwegian_nynorsk.txt | 1 + src/lang/polish.txt | 1 + src/lang/portuguese.txt | 1 + src/lang/romanian.txt | 1 + src/lang/russian.txt | 1 + src/lang/serbian.txt | 1 + src/lang/simplified_chinese.txt | 1 + src/lang/slovak.txt | 1 + src/lang/slovenian.txt | 1 + src/lang/spanish.txt | 1 + src/lang/spanish_MX.txt | 1 + src/lang/swedish.txt | 1 + src/lang/tamil.txt | 1 + src/lang/thai.txt | 1 + src/lang/traditional_chinese.txt | 1 + src/lang/turkish.txt | 1 + src/lang/ukrainian.txt | 1 + src/lang/unfinished/chuvash.txt | 5 ----- src/lang/unfinished/frisian.txt | 1 + src/lang/unfinished/ido.txt | 5 ----- src/lang/unfinished/macedonian.txt | 5 ----- src/lang/unfinished/maltese.txt | 5 ----- src/lang/unfinished/marathi.txt | 1 + src/lang/unfinished/persian.txt | 1 + src/lang/unfinished/urdu.txt | 5 ----- src/lang/vietnamese.txt | 1 + src/lang/welsh.txt | 1 + 63 files changed, 61 insertions(+), 25 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 7a93f32490..56cbe04a04 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -3287,6 +3287,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produksi STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Die nywerheid het aangekondig dat dit binnekort gaan sluit! + STR_CONFIG_GAME_PRODUCTION :{WHITE}Verander produksie (veelvoude van 8, tot en met 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Verander produksie vlakke (persentasie, tot 800%) diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index c0c285d870..2eb29baa31 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -2814,6 +2814,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}وسط STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}نسبة الانتاج: {YELLOW}{COMMA}% + STR_CONFIG_GAME_PRODUCTION :{WHITE}تغيير الانتاج مضاعف من 8 الى 2040 STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}غير مستوى الانتاج{}نسبة مئوية حتى 800%. diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 928517b5d4..0c2e09e24d 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -3175,6 +3175,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ekoizpen STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industriak berehalako itxiera iragarri du! + STR_CONFIG_GAME_PRODUCTION :{WHITE}Ekoizpena aldatu (8 eta 2040 arteko multiploa) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Ekoizpen ehunekoa aldatu (ehunekoa, %800 arte) diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 9537a5831f..c2e3a1435d 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -3635,6 +3635,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Пака STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Прадукцыйнасьць: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Прадпрыемства хутка закрываецца! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Патрабуецца: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} чакае{STRING} diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 5d778024d8..ffa56055fd 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -3345,6 +3345,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nível de produção: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A indústria anunciou fechamento iminente! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necessita: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} aguardando{STRING} diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 39f82cd5d6..d674c67d40 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -3215,6 +3215,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Фоку STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ниво на производство: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Индустрията обяви незабавна ликвидация! + STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} чакащ{STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}Промени производството diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index e35d754881..57d4e57322 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -3347,6 +3347,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centra l STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivell de producció: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La indústria ha anunciat la seva clausura imminent! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necessita: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} esperant{STRING} diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 69f2d40ac2..de8a0e641a 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -3451,6 +3451,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrira STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Razina proizvodnje: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrija je najavila uskoro zatvaranje! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Treba: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} čeka{STRING} diff --git a/src/lang/czech.txt b/src/lang/czech.txt index faa8e56852..17a09c6ac9 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -3405,6 +3405,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Vystřed STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produkce: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Průmysl oznámila blížící se uzavření! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Vyžaduje: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} ček{P á ají á}{STRING} diff --git a/src/lang/danish.txt b/src/lang/danish.txt index fea717d8ea..93fa13575c 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -3295,6 +3295,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrer STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktions niveauet: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrien har rapporteret øjeblikkelig nedlukning! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Kræver: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} venter{STRING} diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 8d0e54eaff..3a932ae17f 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -3347,6 +3347,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centreer STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Productieniveau: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}De industrie heeft een dreigende sluiting aangekondigd! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Vereist: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} wachtend{STRING} diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 75010b40ce..403cd8eade 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -3253,6 +3253,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Producti STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}The industry has announced imminent closure! + STR_CONFIG_GAME_PRODUCTION :{WHITE}Change production (multiple of 8, up to 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Change production level (percentage, up to 800%) diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 54a92e5873..6e03e5b242 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -3302,6 +3302,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Center t STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Production level: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}The industry has announced imminent closure! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requires: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} waiting{STRING} diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 23b52b3d6b..d8a78e8ed2 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -2727,6 +2727,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centri STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produkta nivelo: {YELLOW}{COMMA}% + STR_CONFIG_GAME_PRODUCTION :{WHITE}Ŝanĝu produktadon (multoble de 8, ĝis 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Ŝanĝu produktan nivelon (procento, limigo je 800%) diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index da58843275..8ff3974270 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -3344,6 +3344,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tootlikk STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Tööstus teatab kohesest sulgemisest! + STR_CONFIG_GAME_PRODUCTION :{WHITE}Tootlikuse muutmine (kaheksaga jaguv, kuni 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Muuda tootlikkuse taset (protsent, kuni 800%) diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index e30bf7f496..9dd30eb324 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -2917,6 +2917,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Savna h STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Framleiðslu støði: {YELLOW}{COMMA}% + STR_CONFIG_GAME_PRODUCTION :{WHITE}Broyt framleiðslu (fald av 8, upp til 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Broyt framleiðslu støði (prosent, upp til 800%) diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index e89189adbe..86edbf439c 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -3328,6 +3328,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Keskitä STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tuotantotaso: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Teollisuuslaitos ilmoittaa pikaisesta sulkeutumisestaan! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Tarvitsee: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} odottamassa{STRING} diff --git a/src/lang/french.txt b/src/lang/french.txt index ead78300ae..c5d1526763 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -3356,6 +3356,10 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrer STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Niveau de production{NBSP}: {YELLOW}{COMMA}{NBSP}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}L'industrie a annoncé sa fermeture imminente{NBSP}! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Nécessite{NBSP}: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produit{NBSP}: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Nécessite{NBSP}: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}{NBSP}: {CARGO_SHORT} en attente{STRING} diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 14791d560e..af5049d114 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -3530,6 +3530,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Meadhana STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ìre an dèanadais: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Tha an gnìomhachas gu bhith a dhùnadh a dh'aithghearr! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Feum air: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} a' feitheamh{STRING} diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 6802cf80aa..f3fddb5821 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -3290,6 +3290,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de produción: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A industria anunció un peche inminente + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Require: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} agardando{STRING} diff --git a/src/lang/german.txt b/src/lang/german.txt index 82eb55132e..4902216617 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -3290,6 +3290,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Hauptans STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktionsrate: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Diese Industrie wird in Kürze schließen! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}benötigt: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} wartend{STRING} diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 85bbf13643..64471ad58e 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -3433,6 +3433,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Κεντ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Επίπεδο παραγωγής: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Η βιομηχανία έχει ανακοινώσει άμεσο κλείσιμο! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Απαιτεί: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} σε αναμονή{STRING} diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index eb643eeb62..bc5f563889 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -3343,6 +3343,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}מקד STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}רמת הפקה: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}התעשייה הכריזה על סגירה מתקרבת! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}דורש: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} ממתין{STRING} diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 3654fdf8a4..1285b4d8d7 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -3353,6 +3353,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}A fő n STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Termelési szint: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A gyár bejelentette a közelgő bezárását! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Elfogad: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} várakozik{STRING} diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 33c261161a..8b05505cfa 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -3077,6 +3077,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Framlei STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Iðnaðurinn hefur tilkynnt yfirvofandi lokun. + STR_CONFIG_GAME_PRODUCTION :{WHITE}Breyta framleiðslu (margfeldi af 8, allt að 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Breyta framleiðslumagni (prósentu hámark er 800%) diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index eea86bd413..1a7728cccc 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -3319,6 +3319,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Arahkan STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tingkat produksi: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industri akan segera ditutup! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Membutuhkan: STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} menunggu{STRING} diff --git a/src/lang/irish.txt b/src/lang/irish.txt index b99848a5e7..d4679ded9e 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -3286,6 +3286,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Leibhéa STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}D'fhógair an tionscal go ndúnfaidh sé gan mhoill! + STR_CONFIG_GAME_PRODUCTION :{WHITE}Athraigh táirgeacht (iolra de 8, suas go 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Athraigh an ráta táirgeachta (céatadán, suas go 800%) diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 732fc5603c..3d2291fc7a 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -3381,6 +3381,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centra l STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Livello di produzione: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}L'industria ha annunciato che a breve chiuderà! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Richiede: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} in attesa{STRING} diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 89f8afeff0..a6aa2f127e 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -3286,6 +3286,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}メイ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}生産量: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}この産業拠点は間もなく閉鎖されます! + STR_INDUSTRY_VIEW_REQUIRES : {BLACK}必要物資: STR_CONFIG_GAME_PRODUCTION :{WHITE}生産量を変更 (8の倍数、最大2040) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index f86c5d7f21..73cfe66b30 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -3352,6 +3352,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}이 산 STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}생산 수준: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}산업시설이 곧 폐쇄됩니다! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}받는 화물: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} 대기중{STRING} diff --git a/src/lang/latin.txt b/src/lang/latin.txt index caa1c525f6..5de041dcf7 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -3503,6 +3503,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Movere c STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Quantitas productionis: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Haec industria mox claudetur! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Postulat: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING.acc}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} manet{STRING} diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index c80bf6c22a..0db5c191c9 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -3230,6 +3230,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ražoša STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Nozare ir paziņojusi par nenovēršamu slēgšanu! + STR_CONFIG_GAME_PRODUCTION :{WHITE}Mainīt ražošanu (dalāmais ar 8, līdz pat 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Mainīt ražošanas līmeni (procentos, līdz 800%) diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 346e5e08d5..f2309f9674 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -3505,6 +3505,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Gamybos STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Pramonės įmonė paskelbė apie jos neišvengiamą uždarymą! + STR_CONFIG_GAME_PRODUCTION :{WHITE}Keisti gamybos apimtį (8 daugiklis, iki 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Pakeisti gamybos spartą (procentais, iki 800%) diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index f9f349cc0a..ae7f63000d 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -3289,6 +3289,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Zentréi STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktiounslevel: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}D'Industrie annoncéiert dass se zougemaach gëtt + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Brauch: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} um waarden{STRING} diff --git a/src/lang/malay.txt b/src/lang/malay.txt index fa479e1f35..d17a9c4437 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -2984,6 +2984,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Pusatkan STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tahap produksi: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW} Industri mengumumkan penutupan serta merta! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Diperlukan: STR_CONFIG_GAME_PRODUCTION :{WHITE}Ubah pengeluaran (gandaan 8, sehingga 2040) diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 72bf13da26..8573b31c8e 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -3293,6 +3293,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Gå til STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produksjonsnivå: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Næringen har annonsert snarlig nedleggelse! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Krever: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} venter{STRING} diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 508a69ad79..d102229539 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -3205,6 +3205,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produksj STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Verksemda legg snarleg ned drifta! + STR_CONFIG_GAME_PRODUCTION :{WHITE}Byt produksjon (8-gongen, opptil 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Endre produksjonsnivå (prosent, opp til 800%) diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 0e0c77d84b..9ff5c6d0a7 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3682,6 +3682,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centruj STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Poziom produkcji: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Przedsiębiorstwo ogłosiło likwidację! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Potrzebuje: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} oczekuje{STRING} diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 13e8c56c91..020f304f76 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -3290,6 +3290,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nível de produção: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A indústria anunciou encerramento iminente! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requer: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} a aguardar{STRING} diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 38b7eb9a8b..45f6ad4158 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -3244,6 +3244,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivelul STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industria a anunţat închiderea iminentă! + STR_CONFIG_GAME_PRODUCTION :{WHITE}Schimba productia (multiplu de 8, până la 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Modifică nivelul producţiei (procent, până la 800%) diff --git a/src/lang/russian.txt b/src/lang/russian.txt index ed51dcb4b6..b79b13616a 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -3500,6 +3500,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Пока STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Производительность: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Предприятие скоро закрывается! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Требуется: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} ожидает{STRING} diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index ea75e7c0b3..556d844512 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -3496,6 +3496,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Prebacuj STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivo proizvodnje: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Fabrika je objavila da može svakog trenutka da se zatvori! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK} Zahteva: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} čekaje {STRING} diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index c4dd4a80d4..78365fe130 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -3310,6 +3310,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}将屏 STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}生产程度: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}此工业已经宣布即刻停业倒闭! + STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} 等待中{STRING} diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 88eba473d2..6ef55d7cf0 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -3354,6 +3354,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Úroveň STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Priemysel oznámil blížiace sa uzatvorenie! + STR_CONFIG_GAME_PRODUCTION :{WHITE}Zmeniť produkciu (násobky 8, až do 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Zmeniť úroveň produkcie (percentuálne, až do 800%) diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 73484f5c1b..657fa8af6f 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -3440,6 +3440,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivo pro STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrija je napovedala zaprtje! + STR_CONFIG_GAME_PRODUCTION :{WHITE}Spremeni proizvodnjo (večkratnik 8, do 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Spremeni nivo proizvodnje (odstotki, do 800%) diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 809885d859..1c258e2e34 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -3327,6 +3327,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de producción: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La industria ha anunciado su cierre inminente! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necesita: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} esperando{STRING} diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 428a9bd475..dff1ef3b9a 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -3356,6 +3356,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de producción: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}¡La industria ha anunciado su cierre inminente! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requiere: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} esperando{STRING} diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index b250e87185..00ce1dd183 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -3289,6 +3289,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrera STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktionsnivå: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrin har annonserat att den snart kommer att stänga! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Kräver: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} väntar{STRING} diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index fb0cd2d685..7985fed264 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -2909,6 +2909,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}தய STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}தொழிற்சாலை உடனடியாக மூடப்படும் என்று அறிவிக்கப்பட்டுள்ளது! + STR_CONFIG_GAME_PRODUCTION :{WHITE}தயாரிப்பினை மாற்றவும் (8 இன் பெருக்கங்கள், 2040 வரை) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}தயாரிப்பு அளவினை மாற்றவும் (சதவிகிதம், 800% வரை) diff --git a/src/lang/thai.txt b/src/lang/thai.txt index d2c1df78bf..c1e82e18f5 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -3218,6 +3218,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}ระ STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}อุตสาหกรรมนี้ได้มีการประกาศปิดตัวลงอย่างเป็นทางการ! + STR_CONFIG_GAME_PRODUCTION :{WHITE}ปรับเปลี่ยนปริมาณผลผลิต (ระหว่าง 8 ถึง 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}เปลี่ยนระดับการผลิต (เปอร์เซ็นต์เพิ่มมากสุดถึง 800%) diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 24c1969639..ae1170aee8 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -3286,6 +3286,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}產出 STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}該工業已宣佈關閉! + STR_CONFIG_GAME_PRODUCTION :{WHITE}修改產量 (以 8 為倍數增減,最大為 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}變更產出等級 (百分比,最高可到800%) diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 09124a162c..ac7f22c24e 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -3290,6 +3290,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Görünt STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Üretim seviyesi: %{YELLOW}{COMMA} STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Fabrika çok yakında kapanacağını duyurdu! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Gereken: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} bekliyor{STRING} diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 700f169b5d..cacc4210dd 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -3417,6 +3417,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Обся STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Підприємство оголосило про близьке закриття! + STR_CONFIG_GAME_PRODUCTION :{WHITE}Змінити виробництво (кратне 8, до 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Змінити обсяг виробництва (до 800%) diff --git a/src/lang/unfinished/chuvash.txt b/src/lang/unfinished/chuvash.txt index d8661586bc..5598dd1da0 100644 --- a/src/lang/unfinished/chuvash.txt +++ b/src/lang/unfinished/chuvash.txt @@ -1116,13 +1116,8 @@ STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ҫу # Industry view -############ range for requires starts -############ range for requires ends -############ range for produces starts -############ range for produces ends - # Vehicle lists diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index d68b902400..05cc5f6c8d 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -3037,6 +3037,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produksj STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Yndustry kundicht drigend sluten oan! + STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Feroaring produksje nivo (percentage, up to 800%) # Vehicle lists diff --git a/src/lang/unfinished/ido.txt b/src/lang/unfinished/ido.txt index 41317c107c..e843f645f3 100644 --- a/src/lang/unfinished/ido.txt +++ b/src/lang/unfinished/ido.txt @@ -925,13 +925,8 @@ STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Vehili: # Industry view -############ range for requires starts -############ range for requires ends -############ range for produces starts -############ range for produces ends - # Vehicle lists STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} Tren{P o i} diff --git a/src/lang/unfinished/macedonian.txt b/src/lang/unfinished/macedonian.txt index 7e19065f8b..40e162d2ff 100644 --- a/src/lang/unfinished/macedonian.txt +++ b/src/lang/unfinished/macedonian.txt @@ -1414,13 +1414,8 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry view STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Производство ниво: {YELLOW}{COMMA}% -############ range for requires starts -############ range for requires ends -############ range for produces starts -############ range for produces ends - STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Промена на производство на ниво (процент, до 800%) # Vehicle lists diff --git a/src/lang/unfinished/maltese.txt b/src/lang/unfinished/maltese.txt index b0f3aecdda..ac07641452 100644 --- a/src/lang/unfinished/maltese.txt +++ b/src/lang/unfinished/maltese.txt @@ -822,13 +822,8 @@ STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURREN # Industry view -############ range for requires starts -############ range for requires ends -############ range for produces starts -############ range for produces ends - # Vehicle lists diff --git a/src/lang/unfinished/marathi.txt b/src/lang/unfinished/marathi.txt index 8c723f3afe..b6a39a168d 100644 --- a/src/lang/unfinished/marathi.txt +++ b/src/lang/unfinished/marathi.txt @@ -1280,6 +1280,7 @@ STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTR + # Vehicle lists STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} विमान diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index 6f77d06e07..80059f1186 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -2905,6 +2905,7 @@ STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}این + # Vehicle lists STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} قطار STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} - {COMMA} ماشین diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index fd42e84d90..0cc3ba7b68 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -2323,13 +2323,8 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry view STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}گزشتہ ماہ کی پیداوار: -############ range for requires starts -############ range for requires ends -############ range for produces starts -############ range for produces ends - # Vehicle lists diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index c64f22a328..e098ee47e6 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -3348,6 +3348,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Xem vị STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Mức sản lượng: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Nhà máy này đã thông báo sắp đóng cửa! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Cần cung cấp: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} đang chờ{STRING} diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 4789458918..a6444cc81c 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -3289,6 +3289,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Canoli'r STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Lefel cynhyrchu: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Mae'r diwydiant wedi datgan ei fod ar fin cau! + STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Angen: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} yn disgwyl{STRING} From 1c725fce47d60907bbf2224c7bdc28607fcf6017 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 18 Jan 2019 22:15:27 +0000 Subject: [PATCH 206/622] Change: Add ability to save/load std::deque<> containers. --- src/saveload/saveload.cpp | 129 ++++++++++++++++++++++++++++++++++++++ src/saveload/saveload.h | 11 ++++ 2 files changed, 140 insertions(+) diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 8cf5ee36b6..c60c8b6db0 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -21,6 +21,8 @@ *

  • repeat this until everything is done, and flush any remaining output to file * */ +#include + #include "../stdafx.h" #include "../debug.h" #include "../station_base.h" @@ -1420,6 +1422,129 @@ static void SlList(void *list, SLRefType conv) } +/** + * Template class to help with std::deque. + */ +template +class SlDequeHelper { + typedef std::deque SlDequeT; +public: + /** + * Internal templated helper to return the size in bytes of a std::deque. + * @param deque The std::deque to find the size of + * @param conv VarType type of variable that is used for calculating the size + */ + static size_t SlCalcDequeLen(const void *deque, VarType conv) + { + const SlDequeT *l = (const SlDequeT *)deque; + + int type_size = 4; + /* Each entry is saved as type_size bytes, plus type_size bytes are used for the length + * of the list */ + return l->size() * SlCalcConvFileLen(conv) + type_size; + } + + /** + * Internal templated helper to save/load a std::deque. + * @param deque The std::deque being manipulated + * @param conv VarType type of variable that is used for calculating the size + */ + static void SlDeque(void *deque, VarType conv) + { + SlDequeT *l = (SlDequeT *)deque; + + switch (_sl.action) { + case SLA_SAVE: { + SlWriteUint32((uint32)l->size()); + + typename SlDequeT::iterator iter; + for (iter = l->begin(); iter != l->end(); ++iter) { + SlSaveLoadConv(&(*iter), conv); + } + break; + } + case SLA_LOAD_CHECK: + case SLA_LOAD: { + size_t length = SlReadUint32(); + + /* Load each value and push to the end of the deque */ + for (size_t i = 0; i < length; i++) { + T data; + SlSaveLoadConv(&data, conv); + l->push_back(data); + } + break; + } + case SLA_PTRS: + break; + case SLA_NULL: + l->clear(); + break; + default: NOT_REACHED(); + } + } +}; + + +/** + * Return the size in bytes of a std::deque. + * @param deque The std::deque to find the size of + * @param conv VarType type of variable that is used for calculating the size + */ +static inline size_t SlCalcDequeLen(const void *deque, VarType conv) +{ + switch (GetVarMemType(conv)) { + case SLE_VAR_BL: + return SlDequeHelper::SlCalcDequeLen(deque, conv); + case SLE_VAR_I8: + case SLE_VAR_U8: + return SlDequeHelper::SlCalcDequeLen(deque, conv); + case SLE_VAR_I16: + case SLE_VAR_U16: + return SlDequeHelper::SlCalcDequeLen(deque, conv); + case SLE_VAR_I32: + case SLE_VAR_U32: + return SlDequeHelper::SlCalcDequeLen(deque, conv); + case SLE_VAR_I64: + case SLE_VAR_U64: + return SlDequeHelper::SlCalcDequeLen(deque, conv); + default: NOT_REACHED(); + } +} + + +/** + * Save/load a std::deque. + * @param deque The std::deque being manipulated + * @param conv VarType type of variable that is used for calculating the size + */ +static void SlDeque(void *deque, VarType conv) +{ + switch (GetVarMemType(conv)) { + case SLE_VAR_BL: + SlDequeHelper::SlDeque(deque, conv); + break; + case SLE_VAR_I8: + case SLE_VAR_U8: + SlDequeHelper::SlDeque(deque, conv); + break; + case SLE_VAR_I16: + case SLE_VAR_U16: + SlDequeHelper::SlDeque(deque, conv); + break; + case SLE_VAR_I32: + case SLE_VAR_U32: + SlDequeHelper::SlDeque(deque, conv); + break; + case SLE_VAR_I64: + case SLE_VAR_U64: + SlDequeHelper::SlDeque(deque, conv); + break; + default: NOT_REACHED(); + } +} + + /** Are we going to save this object or not? */ static inline bool SlIsObjectValidInSavegame(const SaveLoad *sld) { @@ -1471,6 +1596,7 @@ size_t SlCalcObjMemberLength(const void *object, const SaveLoad *sld) case SL_ARR: case SL_STR: case SL_LST: + case SL_DEQUE: /* CONDITIONAL saveload types depend on the savegame version */ if (!SlIsObjectValidInSavegame(sld)) break; @@ -1480,6 +1606,7 @@ size_t SlCalcObjMemberLength(const void *object, const SaveLoad *sld) case SL_ARR: return SlCalcArrayLen(sld->length, sld->conv); case SL_STR: return SlCalcStringLen(GetVariableAddress(object, sld), sld->length, sld->conv); case SL_LST: return SlCalcListLen(GetVariableAddress(object, sld)); + case SL_DEQUE: return SlCalcDequeLen(GetVariableAddress(object, sld), sld->conv); default: NOT_REACHED(); } break; @@ -1548,6 +1675,7 @@ bool SlObjectMember(void *ptr, const SaveLoad *sld) case SL_ARR: case SL_STR: case SL_LST: + case SL_DEQUE: /* CONDITIONAL saveload types depend on the savegame version */ if (!SlIsObjectValidInSavegame(sld)) return false; if (SlSkipVariableOnLoad(sld)) return false; @@ -1575,6 +1703,7 @@ bool SlObjectMember(void *ptr, const SaveLoad *sld) case SL_ARR: SlArray(ptr, sld->length, conv); break; case SL_STR: SlString(ptr, sld->length, sld->conv); break; case SL_LST: SlList(ptr, (SLRefType)conv); break; + case SL_DEQUE: SlDeque(ptr, conv); break; default: NOT_REACHED(); } break; diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index cca56ce07e..a5ef9d58c5 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -195,6 +195,7 @@ enum SaveLoadTypes { SL_ARR = 2, ///< Save/load an array. SL_STR = 3, ///< Save/load a string. SL_LST = 4, ///< Save/load a list. + SL_DEQUE = 5, ///< Save/load a deque. /* non-normal save-load types */ SL_WRITEBYTE = 8, SL_VEH_INCLUDE = 9, @@ -287,6 +288,16 @@ typedef SaveLoad SaveLoadGlobVarList; */ #define SLE_CONDLST(base, variable, type, from, to) SLE_GENERAL(SL_LST, base, variable, type, 0, from, to) +/** + * Storage of a deque in some savegame versions. + * @param base Name of the class or struct containing the list. + * @param variable Name of the variable in the class or struct referenced by \a base. + * @param type Storage of the data in memory and in the savegame. + * @param from First savegame version that has the list. + * @param to Last savegame version that has the list. + */ +#define SLE_CONDDEQUE(base, variable, type, from, to) SLE_GENERAL(SL_DEQUE, base, variable, type, 0, from, to) + /** * Storage of a variable in every version of a savegame. * @param base Name of the class or struct containing the variable. From 81330b8d6edee68c38717462737fbfca6420701d Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 14 Jan 2019 23:33:42 +0000 Subject: [PATCH 207/622] Change: Add path cache for ships. --- src/order_cmd.cpp | 16 ++++++++-------- src/pathfinder/pathfinder_type.h | 3 +++ src/pathfinder/yapf/yapf.h | 3 ++- src/pathfinder/yapf/yapf_ship.cpp | 18 ++++++++++++++---- src/roadveh_cmd.cpp | 2 +- src/saveload/saveload.cpp | 3 ++- src/saveload/vehicle_sl.cpp | 3 ++- src/ship.h | 6 ++++++ src/ship_cmd.cpp | 26 ++++++++++++++++++++++++-- src/station_cmd.cpp | 4 ++-- src/vehicle.cpp | 2 +- src/vehicle_base.h | 2 ++ 12 files changed, 67 insertions(+), 21 deletions(-) diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index 093e4b9b50..d9d741dbce 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -2041,13 +2041,13 @@ bool UpdateOrderDest(Vehicle *v, const Order *order, int conditional_depth, bool { if (conditional_depth > v->GetNumOrders()) { v->current_order.Free(); - v->dest_tile = 0; + v->SetDestTile(0); return false; } switch (order->GetType()) { case OT_GOTO_STATION: - v->dest_tile = v->GetOrderStationLocation(order->GetDestination()); + v->SetDestTile(v->GetOrderStationLocation(order->GetDestination())); return true; case OT_GOTO_DEPOT: @@ -2068,7 +2068,7 @@ bool UpdateOrderDest(Vehicle *v, const Order *order, int conditional_depth, bool /* PBS reservations cannot reverse */ if (pbs_look_ahead && reverse) return false; - v->dest_tile = location; + v->SetDestTile(location); v->current_order.MakeGoToDepot(destination, v->current_order.GetDepotOrderType(), v->current_order.GetNonStopType(), (OrderDepotActionFlags)(v->current_order.GetDepotActionType() & ~ODATFB_NEAREST_DEPOT), v->current_order.GetRefitCargo()); /* If there is no depot in front, reverse automatically (trains only) */ @@ -2092,14 +2092,14 @@ bool UpdateOrderDest(Vehicle *v, const Order *order, int conditional_depth, bool v->IncrementRealOrderIndex(); } else { if (v->type != VEH_AIRCRAFT) { - v->dest_tile = Depot::Get(order->GetDestination())->xy; + v->SetDestTile(Depot::Get(order->GetDestination())->xy); } return true; } break; case OT_GOTO_WAYPOINT: - v->dest_tile = Waypoint::Get(order->GetDestination())->xy; + v->SetDestTile(Waypoint::Get(order->GetDestination())->xy); return true; case OT_CONDITIONAL: { @@ -2127,7 +2127,7 @@ bool UpdateOrderDest(Vehicle *v, const Order *order, int conditional_depth, bool } default: - v->dest_tile = 0; + v->SetDestTile(0); return false; } @@ -2143,7 +2143,7 @@ bool UpdateOrderDest(Vehicle *v, const Order *order, int conditional_depth, bool if (order == NULL) { v->current_order.Free(); - v->dest_tile = 0; + v->SetDestTile(0); return false; } @@ -2219,7 +2219,7 @@ bool ProcessOrders(Vehicle *v) } v->current_order.Free(); - v->dest_tile = 0; + v->SetDestTile(0); return false; } diff --git a/src/pathfinder/pathfinder_type.h b/src/pathfinder/pathfinder_type.h index 73031d5c81..0ecf00bbd2 100644 --- a/src/pathfinder/pathfinder_type.h +++ b/src/pathfinder/pathfinder_type.h @@ -40,6 +40,9 @@ static const int YAPF_TILE_CORNER_LENGTH = 71; */ static const int YAPF_INFINITE_PENALTY = 1000 * YAPF_TILE_LENGTH; +/** Maximum length of ship path cache */ +static const int YAPF_SHIP_PATH_CACHE_LENGTH = 32; + /** * Helper container to find a depot */ diff --git a/src/pathfinder/yapf/yapf.h b/src/pathfinder/yapf/yapf.h index 00eb7e5625..84bd35c8b0 100644 --- a/src/pathfinder/yapf/yapf.h +++ b/src/pathfinder/yapf/yapf.h @@ -15,6 +15,7 @@ #include "../../direction_type.h" #include "../../track_type.h" #include "../../vehicle_type.h" +#include "../../ship.h" #include "../pathfinder_type.h" /** @@ -26,7 +27,7 @@ * @param path_found [out] Whether a path has been found (true) or has been guessed (false) * @return the best trackdir for next turn or INVALID_TRACK if the path could not be found */ -Track YapfShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found); +Track YapfShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, ShipPathCache &path_cache); /** * Returns true if it is better to reverse the ship before leaving depot using YAPF. diff --git a/src/pathfinder/yapf/yapf_ship.cpp b/src/pathfinder/yapf/yapf_ship.cpp index 44a5c0cfa7..7ca95ae698 100644 --- a/src/pathfinder/yapf/yapf_ship.cpp +++ b/src/pathfinder/yapf/yapf_ship.cpp @@ -54,7 +54,7 @@ public: return 'w'; } - static Trackdir ChooseShipTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found) + static Trackdir ChooseShipTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, ShipPathCache &path_cache) { /* handle special case - when next tile is destination tile */ if (tile == v->dest_tile) { @@ -90,9 +90,17 @@ public: Node *pNode = pf.GetBestNode(); if (pNode != NULL) { + uint steps = 0; + for (Node *n = pNode; n->m_parent != NULL; n = n->m_parent) steps++; + /* walk through the path back to the origin */ Node *pPrevNode = NULL; while (pNode->m_parent != NULL) { + if (steps > 1 && --steps < YAPF_SHIP_PATH_CACHE_LENGTH) { + TrackdirByte td; + td = pNode->GetTrackdir(); + path_cache.push_front(td); + } pPrevNode = pNode; pNode = pNode->m_parent; } @@ -100,6 +108,8 @@ public: Node &best_next_node = *pPrevNode; assert(best_next_node.GetTile() == tile); next_trackdir = best_next_node.GetTrackdir(); + /* remove last element for the special case when tile == dest_tile */ + if (path_found && !path_cache.empty()) path_cache.pop_back(); } return next_trackdir; } @@ -222,10 +232,10 @@ struct CYapfShip2 : CYapfT > {}; /** Ship controller helper - path finder invoker */ -Track YapfShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found) +Track YapfShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, ShipPathCache &path_cache) { /* default is YAPF type 2 */ - typedef Trackdir (*PfnChooseShipTrack)(const Ship*, TileIndex, DiagDirection, TrackBits, bool &path_found); + typedef Trackdir (*PfnChooseShipTrack)(const Ship*, TileIndex, DiagDirection, TrackBits, bool &path_found, ShipPathCache &path_cache); PfnChooseShipTrack pfnChooseShipTrack = CYapfShip2::ChooseShipTrack; // default: ExitDir, allow 90-deg /* check if non-default YAPF type needed */ @@ -235,7 +245,7 @@ Track YapfShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, pfnChooseShipTrack = &CYapfShip1::ChooseShipTrack; // Trackdir, allow 90-deg } - Trackdir td_ret = pfnChooseShipTrack(v, tile, enterdir, tracks, path_found); + Trackdir td_ret = pfnChooseShipTrack(v, tile, enterdir, tracks, path_found, path_cache); return (td_ret != INVALID_TRACKDIR) ? TrackdirToTrack(td_ret) : INVALID_TRACK; } diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 207a3f23b2..bd7dced9bf 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -1639,7 +1639,7 @@ static void CheckIfRoadVehNeedsService(RoadVehicle *v) SetBit(v->gv_flags, GVF_SUPPRESS_IMPLICIT_ORDERS); v->current_order.MakeGoToDepot(depot, ODTFB_SERVICE); - v->dest_tile = rfdd.tile; + v->SetDestTile(rfdd.tile); SetWindowWidgetDirty(WC_VEHICLE_VIEW, v->index, WID_VV_START_STOP); } diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index c60c8b6db0..7f5b10ac52 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -272,8 +272,9 @@ * 200 #6805 Extend railtypes to 64, adding uint16 to map array. * 201 #6885 Extend NewGRF persistant storages. * 202 #6867 Increase industry cargo slots to 16 in, 16 out + * 203 #7072 Add path cache for ships */ -extern const uint16 SAVEGAME_VERSION = 202; ///< Current savegame version of OpenTTD. +extern const uint16 SAVEGAME_VERSION = 203; ///< Current savegame version of OpenTTD. SavegameType _savegame_type; ///< type of savegame we are loading FileToSaveLoad _file_to_saveload; ///< File to save or load in the openttd loop. diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index bb3db3fe3e..1e01f3f67e 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -753,7 +753,8 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) static const SaveLoad _ship_desc[] = { SLE_WRITEBYTE(Vehicle, type, VEH_SHIP), SLE_VEH_INCLUDE(), - SLE_VAR(Ship, state, SLE_UINT8), + SLE_VAR(Ship, state, SLE_UINT8), + SLE_CONDDEQUE(Ship, path, SLE_UINT8, 203, SL_MAX_VERSION), SLE_CONDNULL(16, 2, 143), // old reserved space diff --git a/src/ship.h b/src/ship.h index 7fea5fc1d1..6e73332a57 100644 --- a/src/ship.h +++ b/src/ship.h @@ -12,17 +12,22 @@ #ifndef SHIP_H #define SHIP_H +#include + #include "vehicle_base.h" #include "water_map.h" void GetShipSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type); WaterClass GetEffectiveWaterClass(TileIndex tile); +typedef std::deque ShipPathCache; + /** * All ships have this type. */ struct Ship FINAL : public SpecializedVehicle { TrackBitsByte state; ///< The "track" the ship is following. + ShipPathCache path; ///< Cached path. /** We don't want GCC to zero our struct! It already is zeroed and has an index! */ Ship() : SpecializedVehicleBase() {} @@ -46,6 +51,7 @@ struct Ship FINAL : public SpecializedVehicle { TileIndex GetOrderStationLocation(StationID station); bool FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse); void UpdateCache(); + void SetDestTile(TileIndex tile); }; static const uint SHIP_MAX_ORDER_DISTANCE = 130; diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index ab1f59f11d..7727aa608f 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -193,7 +193,7 @@ static void CheckIfShipNeedsService(Vehicle *v) } v->current_order.MakeGoToDepot(depot->index, ODTFB_SERVICE); - v->dest_tile = depot->xy; + v->SetDestTile(depot->xy); SetWindowWidgetDirty(WC_VEHICLE_VIEW, v->index, WID_VV_START_STOP); } @@ -473,10 +473,24 @@ static Track ChooseShipTrack(Ship *v, TileIndex tile, DiagDirection enterdir, Tr } path_found = false; } else { + /* Attempt to follow cached path. */ + if (!v->path.empty()) { + track = TrackdirToTrack(v->path.front()); + + if (HasBit(tracks, track)) { + v->path.pop_front(); + /* HandlePathfindResult() is not called here because this is not a new pathfinder result. */ + return track; + } + + /* Cached path is invalid so continue with pathfinder. */ + } + + v->path.clear(); switch (_settings_game.pf.pathfinder_for_ships) { case VPF_OPF: track = OPFShipChooseTrack(v, tile, enterdir, tracks, path_found); break; case VPF_NPF: track = NPFShipChooseTrack(v, tile, enterdir, tracks, path_found); break; - case VPF_YAPF: track = YapfShipChooseTrack(v, tile, enterdir, tracks, path_found); break; + case VPF_YAPF: track = YapfShipChooseTrack(v, tile, enterdir, tracks, path_found, v->path); break; default: NOT_REACHED(); } } @@ -665,6 +679,7 @@ getout: reverse_direction: dir = ReverseDir(v->direction); v->direction = dir; + v->path.clear(); goto getout; } @@ -679,6 +694,13 @@ bool Ship::Tick() return true; } +void Ship::SetDestTile(TileIndex tile) +{ + if (tile == this->dest_tile) return; + this->path.clear(); + this->dest_tile = tile; +} + /** * Build a ship. * @param tile tile of the depot where ship is built. diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 66a09c4351..f088ccf6e2 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -1980,7 +1980,7 @@ static CommandCost RemoveRoadStop(TileIndex tile, DoCommandFlag flags) FOR_ALL_ROADVEHICLES(v) { if (v->First() == v && v->current_order.IsType(OT_GOTO_STATION) && v->dest_tile == tile) { - v->dest_tile = v->GetOrderStationLocation(st->index); + v->SetDestTile(v->GetOrderStationLocation(st->index)); } } @@ -2604,7 +2604,7 @@ static CommandCost RemoveDock(TileIndex tile, DoCommandFlag flags) } if (s->dest_tile == docking_location) { - s->dest_tile = 0; + s->SetDestTile(0); s->current_order.Free(); } } diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 1ed43c9b64..46141ce265 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -2337,7 +2337,7 @@ CommandCost Vehicle::SendToDepot(DoCommandFlag flags, DepotCommand command) SetBit(gv_flags, GVF_SUPPRESS_IMPLICIT_ORDERS); } - this->dest_tile = location; + this->SetDestTile(location); this->current_order.MakeGoToDepot(destination, ODTF_MANUAL); if (!(command & DEPOT_SERVICE)) this->current_order.SetDepotActionType(ODATFB_HALT); SetWindowWidgetDirty(WC_VEHICLE_VIEW, this->index, WID_VV_START_STOP); diff --git a/src/vehicle_base.h b/src/vehicle_base.h index b2a2a5d7a4..d02d33e2cc 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -749,6 +749,8 @@ public: */ virtual bool FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse) { return false; } + virtual void SetDestTile(TileIndex tile) { this->dest_tile = tile; } + CommandCost SendToDepot(DoCommandFlag flags, DepotCommand command); void UpdateVisualEffect(bool allow_power_change = true); From 4daaec1a9458b2df7215bd2b330cf0cd6797ebf3 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 19 Jan 2019 20:59:27 +0000 Subject: [PATCH 208/622] Change: Invalidate ship path caches if pathfinder choice or forbid-90-degree turns are changed. --- src/settings.cpp | 9 +++++++++ src/table/settings.ini | 3 +++ 2 files changed, 12 insertions(+) diff --git a/src/settings.cpp b/src/settings.cpp index 3e61cc87f8..ae797e09b9 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1312,6 +1312,15 @@ static bool MaxVehiclesChanged(int32 p1) return true; } +static bool InvalidateShipPathCache(int32 p1) +{ + Ship *s; + FOR_ALL_SHIPS(s) { + s->path.clear(); + } + return true; +} + #ifdef ENABLE_NETWORK diff --git a/src/table/settings.ini b/src/table/settings.ini index bb6159693a..7afdd80801 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -42,6 +42,7 @@ static bool InvalidateCompanyInfrastructureWindow(int32 p1); static bool InvalidateCompanyWindow(int32 p1); static bool ZoomMinMaxChanged(int32 p1); static bool MaxVehiclesChanged(int32 p1); +static bool InvalidateShipPathCache(int32 p1); #ifdef ENABLE_NETWORK static bool UpdateClientName(int32 p1); @@ -820,6 +821,7 @@ var = pf.forbid_90_deg def = false str = STR_CONFIG_SETTING_FORBID_90_DEG strhelp = STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT +proc = InvalidateShipPathCache cat = SC_EXPERT [SDT_VAR] @@ -942,6 +944,7 @@ interval = 1 str = STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS strhelp = STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT strval = STR_CONFIG_SETTING_PATHFINDER_OPF +proc = InvalidateShipPathCache cat = SC_EXPERT [SDT_BOOL] From f35b135e1738899be7745a2667de3d908f725f29 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 20 Jan 2019 09:07:27 +0000 Subject: [PATCH 209/622] Change 81330b8d6e: Cached path only needs to be cleared if it was found to be invalid. --- src/ship_cmd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 7727aa608f..e3886aa34a 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -484,9 +484,9 @@ static Track ChooseShipTrack(Ship *v, TileIndex tile, DiagDirection enterdir, Tr } /* Cached path is invalid so continue with pathfinder. */ + v->path.clear(); } - v->path.clear(); switch (_settings_game.pf.pathfinder_for_ships) { case VPF_OPF: track = OPFShipChooseTrack(v, tile, enterdir, tracks, path_found); break; case VPF_NPF: track = NPFShipChooseTrack(v, tile, enterdir, tracks, path_found); break; From e71f7cf2774168a1613985b1ad29e8a409e3c607 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 20 Jan 2019 19:45:44 +0100 Subject: [PATCH 210/622] Update: Translations from eints russian: 10 changes by Lone_Wolf hungarian: 5 changes by Brumi spanish (mexican): 6 changes by Absay --- src/lang/hungarian.txt | 10 +++++----- src/lang/russian.txt | 10 ++++++++++ src/lang/spanish_MX.txt | 9 ++++++--- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 1285b4d8d7..8eb63547f5 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -941,9 +941,9 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC # Extra view window STR_EXTRA_VIEW_PORT_TITLE :{WHITE}{COMMA}. látkép -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Látkép aktualizálása +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Látkép átállítása STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}A látképre a fő nézet pozícióját másolja -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Látkép visszatöltése +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Fő nézet ideállítása STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}A látkép pozícióját a fő nézetre másolja # Game options window @@ -2427,9 +2427,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Kombiná STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Irányjelző (fény){}Egy irányjelző lehetővé teszi, hogy amennyiben a vonatok le tudnak foglalni maguknak egy biztonságos vágányutat a következő jelzőig, több vonat is beléphessen ugyanabba a jelzőblokkba. Az irányjelzők mellett hátulról is el lehet haladni STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Egyirányú irányjelző (fény){}Egy irányjelző lehetővé teszi, hogy amennyiben a vonatok le tudnak foglalni maguknak egy biztonságos vágányutat a következő jelzőig, több vonat is beléphessen ugyanabba a jelzőblokkba. Az egyirányú jelzők mellett nem lehet hátulról elhaladni STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Jelző átalakítás{}Amikor ki van jelölve, egy meglévő jelzőre való kattintással átkonvertálja a kiválasztott jelzőtípusra és -variációra, CTRL+kattintás a variációt fogja változtatni. Shift+kattintással megmutatja a becsült átalakítási költséget -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Automata jelzőtelepítés sűrűsége -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Automata jelzőtelepítés-sűrűség csökkentése -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Automata jelzőltelepítés-sűrűség növelése +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Automata jelzőtelepítés esetén a jelzők távolsága +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Automata jelzőtelepítés esetén a jelzők távolságának csökkentése +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Automata jelzőtelepítés esetén a jelzők távolságának növelése # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Válassz egy vasúti hidat diff --git a/src/lang/russian.txt b/src/lang/russian.txt index b79b13616a..a56ff783e9 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -315,6 +315,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}мил{P я и ь}/ч @@ -1074,6 +1075,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Своя... STR_GAME_OPTIONS_CURRENCY_GEL :Грузинский лари (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Иранский риал (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Российский новый рубль (RUR) +STR_GAME_OPTIONS_CURRENCY_MXN :Мексиканский песо (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Движение автомобилей @@ -1410,6 +1412,8 @@ 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 :Фирменный цвет компании: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Выберите начальный фирменный цвет компании STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Аэропорты не устаревают: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :При включении все типы аэропортов доступны для строительства в любое время после их первоначального появления @@ -2925,6 +2929,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_OSKTITLE :{BLACK}Введите название сохраняемой игры @@ -3123,6 +3128,7 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Чтение з STR_NEWGRF_ERROR_GRM_FAILED :Запрошенные ресурсы GRF недоступны (спрайт {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} был отключён из-за {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Недопустимый/неизвестный формат расположения спрайтов (спрайт {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Слишком много элементов в списке значений (спрайт {3:NUM}, свойство {4:HEX}) # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Осторожно! @@ -3500,6 +3506,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Пока STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Производительность: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Предприятие скоро закрывается! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Требует: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_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} @@ -4009,6 +4018,7 @@ STR_ORDER_CONDITIONAL_AGE :Возраст STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Требуется обслуживание STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Всегда STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Оставшийся срок службы (лет) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Максимальная надёжность STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Условие перехода STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :равно diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index dff1ef3b9a..b2755ecb9e 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -2382,9 +2382,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Señal c STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Señal de ruta (eléctrica){}Una señal de ruta permite a más de un tren entrar al mismo tiempo en un tramo de vía con señales, en tanto que el tren pueda reservar una ruta hasta un lugar seguro. Puede ser pasada por detrás STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Señal de ruta de un sentido (eléctrica){}Igual que una señal de ruta pero no puede ser pasada por detrás STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Conversión de señal{}Activar para pulsar sobre una señal existente y convertirla en el tipo y variante elegidos. Ctrl+Clic permite cambiar entre variantes de señales. Mayús+Clic muestra una estimación del precio de conversión -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Cantidad de señales instaladas al arrastrar -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Más -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Menos +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distancia entre señales +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Reducir distancia entre señales +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Aumentar distancia entre señales # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Selección de puente de ferrocarril @@ -3356,6 +3356,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de producción: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}¡La industria ha anunciado su cierre inminente! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Requiere: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requiere: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} From 5ad73e402908fb80a7d6b99f8f4146ac204764dd Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 20 Jan 2019 19:44:05 +0100 Subject: [PATCH 211/622] Fix: [AzurePipelines] the repository OpenTTD-CF is renamed to CompileFarm --- azure-pipelines/templates/windows-dependencies.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines/templates/windows-dependencies.yml b/azure-pipelines/templates/windows-dependencies.yml index 06f56e626b..c6fc6e407c 100644 --- a/azure-pipelines/templates/windows-dependencies.yml +++ b/azure-pipelines/templates/windows-dependencies.yml @@ -1,7 +1,7 @@ steps: - bash: | set -ex - curl -L https://github.com/OpenTTD/OpenTTD-CF/releases/download/latest/windows-dependencies.zip > windows-dependencies.zip + curl -L https://github.com/OpenTTD/CompileFarm/releases/download/latest/windows-dependencies.zip > windows-dependencies.zip unzip windows-dependencies.zip rm -f windows-dependencies.zip displayName: 'Download dependencies' From 9d75600ac0137907d5c5ec4f0ff475e2efa2f596 Mon Sep 17 00:00:00 2001 From: btzy Date: Sat, 12 Jan 2019 16:28:43 +0800 Subject: [PATCH 212/622] Fix: Round up deltas for smooth scrolling, so target will be reached --- src/core/math_func.hpp | 17 +++++++++++++++++ src/viewport.cpp | 4 ++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/core/math_func.hpp b/src/core/math_func.hpp index df9142462b..4a19033f45 100644 --- a/src/core/math_func.hpp +++ b/src/core/math_func.hpp @@ -346,6 +346,23 @@ static inline int RoundDivSU(int a, uint b) } } +/** + * Computes (a / b) rounded away from zero. + * @param a Numerator + * @param b Denominator + * @return Quotient, rounded away from zero + */ +static inline int DivAwayFromZero(int a, uint b) +{ + const int _b = static_cast(b); + if (a > 0) { + return (a + _b - 1) / _b; + } else { + /* Note: Behaviour of negative numerator division is truncation toward zero. */ + return (a - _b + 1) / _b; + } +} + uint32 IntSqrt(uint32 num); #endif /* MATH_FUNC_HPP */ diff --git a/src/viewport.cpp b/src/viewport.cpp index da4ed26608..5e72aaa23e 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1813,8 +1813,8 @@ void UpdateViewportPosition(Window *w) if (_settings_client.gui.smooth_scroll) { int max_scroll = ScaleByMapSize1D(512 * ZOOM_LVL_BASE); /* Not at our desired position yet... */ - w->viewport->scrollpos_x += Clamp(delta_x / 4, -max_scroll, max_scroll); - w->viewport->scrollpos_y += Clamp(delta_y / 4, -max_scroll, max_scroll); + w->viewport->scrollpos_x += Clamp(DivAwayFromZero(delta_x, 4), -max_scroll, max_scroll); + w->viewport->scrollpos_y += Clamp(DivAwayFromZero(delta_y, 4), -max_scroll, max_scroll); } else { w->viewport->scrollpos_x = w->viewport->dest_scrollpos_x; w->viewport->scrollpos_y = w->viewport->dest_scrollpos_y; From 226dbcb422fb7338b228cbf29c22d14964256e6e Mon Sep 17 00:00:00 2001 From: Juanjo Date: Wed, 15 Oct 2014 20:10:01 +0200 Subject: [PATCH 213/622] Codechange #6060: Allow drawing dropdown lists with scrollbars above the widgets --- src/widgets/dropdown.cpp | 62 ++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp index 816e981a14..5dae69b9c3 100644 --- a/src/widgets/dropdown.cpp +++ b/src/widgets/dropdown.cpp @@ -352,8 +352,8 @@ void ShowDropDownListAt(Window *w, const DropDownList *list, int selected, int b /* Longest item in the list, if auto_width is enabled */ uint max_item_width = 0; - /* Total length of list */ - int height = 0; + /* Total height of list */ + uint height = 0; for (const DropDownListItem * const *it = list->Begin(); it != list->End(); ++it) { const DropDownListItem *item = *it; @@ -361,52 +361,52 @@ void ShowDropDownListAt(Window *w, const DropDownList *list, int selected, int b if (auto_width) max_item_width = max(max_item_width, item->Width() + 5); } - /* Check if the status bar is visible, as we don't want to draw over it */ - int screen_bottom = GetMainViewBottom(); + /* Scrollbar needed? */ bool scroll = false; - /* Check if the dropdown will fully fit below the widget */ - if (top + height + 4 >= screen_bottom) { - /* If not, check if it will fit above the widget */ - int screen_top = GetMainViewTop(); - if (w->top + wi_rect.top > screen_top + height) { - top = w->top + wi_rect.top - height - 4; - } else { - /* If it doesn't fit above the widget, we need to enable a scrollbar... */ - int avg_height = height / (int)list->Length(); - scroll = true; + /* Is it better to place the dropdown above the widget? */ + bool above = false; - /* ... and choose whether to put the list above or below the widget. */ - bool put_above = false; - int available_height = screen_bottom - w->top - wi_rect.bottom; - if (w->top + wi_rect.top - screen_top > available_height) { - // Put it above. - available_height = w->top + wi_rect.top - screen_top; - put_above = true; - } + /* Available height below (or above, if the dropdown is placed above the widget). */ + uint available_height = (uint)max(GetMainViewBottom() - top - 4, 0); + + /* If the dropdown doesn't fully fit below the widget... */ + if (height > available_height) { + + uint available_height_above = (uint)max(w->top + wi_rect.top - GetMainViewTop() - 4, 0); + + /* Put the dropdown above if there is more available space. */ + if (available_height_above > available_height) { + above = true; + available_height = available_height_above; + } + + /* If the dropdown doesn't fully fit, we need a dropdown. */ + if (height > available_height) { + scroll = true; + uint avg_height = height / list->Length(); /* Check at least there is space for one item. */ assert(available_height >= avg_height); - /* And lastly, fit the list... */ - int rows = available_height / avg_height; + /* Fit the list. */ + uint rows = available_height / avg_height; height = rows * avg_height; - /* Add space for the scroll bar if we automatically determined - * the width of the list. */ + /* Add space for the scrollbar. */ max_item_width += NWidgetScrollbar::GetVerticalDimension().width; + } - /* ... and set the top position if needed. */ - if (put_above) { - top = w->top + wi_rect.top - height - 4; - } + /* Set the top position if needed. */ + if (above) { + top = w->top + wi_rect.top - height - 4; } } if (auto_width) width = max(width, max_item_width); Point dw_pos = { w->left + (_current_text_dir == TD_RTL ? wi_rect.right + 1 - (int)width : wi_rect.left), top}; - Dimension dw_size = {width, (uint)height}; + Dimension dw_size = {width, height}; new DropdownWindow(w, list, selected, button, instant_close, dw_pos, dw_size, wi_colour, scroll); } From 628af2fabcc634d6e10c50147eaf8a18e873a8b2 Mon Sep 17 00:00:00 2001 From: J0an Josep Date: Sun, 13 Jan 2019 02:45:47 +0100 Subject: [PATCH 214/622] Fix #6060: When opening a scrollable dropdown above a widget, scroll it to its very bottom. This "prevents" the fast movement towards the bottom when holding down the mouse button. --- src/widgets/dropdown.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp index 5dae69b9c3..61656c020e 100644 --- a/src/widgets/dropdown.cpp +++ b/src/widgets/dropdown.cpp @@ -407,7 +407,12 @@ void ShowDropDownListAt(Window *w, const DropDownList *list, int selected, int b Point dw_pos = { w->left + (_current_text_dir == TD_RTL ? wi_rect.right + 1 - (int)width : wi_rect.left), top}; Dimension dw_size = {width, height}; - new DropdownWindow(w, list, selected, button, instant_close, dw_pos, dw_size, wi_colour, scroll); + DropdownWindow *dropdown = new DropdownWindow(w, list, selected, button, instant_close, dw_pos, dw_size, wi_colour, scroll); + + /* The dropdown starts scrolling downwards when opening it towards + * the top and holding down the mouse button. It can be fooled by + * opening the dropdown scrolled to the very bottom. */ + if (above && scroll) dropdown->vscroll->UpdatePosition(INT_MAX); } /** From 9ce92521c1f2c6bec862a4e09926c6cca750d9d2 Mon Sep 17 00:00:00 2001 From: J0an Josep Date: Mon, 14 Jan 2019 21:21:35 +0100 Subject: [PATCH 215/622] Fix: If screen size changes, windows are relocated and dropdown may not fit the screen. --- src/window.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/window.cpp b/src/window.cpp index cc40afd348..2d03310337 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -3516,8 +3516,9 @@ void ChangeVehicleViewports(VehicleID from_index, VehicleID to_index) */ void RelocateAllWindows(int neww, int newh) { - Window *w; + DeleteWindowById(WC_DROPDOWN_MENU, 0); + Window *w; FOR_ALL_WINDOWS_FROM_BACK(w) { int left, top; /* XXX - this probably needs something more sane. For example specifying From 48b334cf97cabee375bd8c96670754c736fbd2f8 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sat, 28 Jul 2018 23:28:24 +0200 Subject: [PATCH 216/622] Add: Houses can accept up to 16 different cargo types via NewGRF. New Action0 property 23 for feature 07, variable length, format B n*(B B). Initial byte is number of structures following. First byte in structure is cargo id, second is acceptance level in 1/8 units. --- src/house.h | 46 ++++++++++++++++++++++--------------------- src/newgrf.cpp | 26 ++++++++++++++++++++++++ src/table/town_land.h | 7 +++++-- src/town_cmd.cpp | 2 +- 4 files changed, 56 insertions(+), 25 deletions(-) diff --git a/src/house.h b/src/house.h index 94ef62ad54..c1cfe61041 100644 --- a/src/house.h +++ b/src/house.h @@ -31,6 +31,8 @@ static const HouseID NEW_HOUSE_OFFSET = 110; ///< Offset for new houses. static const HouseID NUM_HOUSES = 512; ///< Total number of houses. static const HouseID INVALID_HOUSE_ID = 0xFFFF; +static const uint HOUSE_NUM_ACCEPTS = 16; ///< Max number of cargoes accepted by a tile + /** * There can only be as many classes as there are new houses, plus one for * NO_CLASS, as the original houses don't have classes. @@ -97,30 +99,30 @@ DECLARE_ENUM_AS_BIT_SET(HouseExtraFlags) struct HouseSpec { /* Standard properties */ - Year min_year; ///< introduction year of the house - Year max_year; ///< last year it can be built - byte population; ///< population (Zero on other tiles in multi tile house.) - byte removal_cost; ///< cost multiplier for removing it - StringID building_name; ///< building name - uint16 remove_rating_decrease; ///< rating decrease if removed - byte mail_generation; ///< mail generation multiplier (tile based, as the acceptances below) - byte cargo_acceptance[3]; ///< acceptance level for the cargo slots - CargoID accepts_cargo[3]; ///< 3 input cargo slots - BuildingFlags building_flags; ///< some flags that describe the house (size, stadium etc...) - HouseZones building_availability; ///< where can it be built (climates, zones) - bool enabled; ///< the house is available to build (true by default, but can be disabled by newgrf) + Year min_year; ///< introduction year of the house + Year max_year; ///< last year it can be built + byte population; ///< population (Zero on other tiles in multi tile house.) + byte removal_cost; ///< cost multiplier for removing it + StringID building_name; ///< building name + uint16 remove_rating_decrease; ///< rating decrease if removed + byte mail_generation; ///< mail generation multiplier (tile based, as the acceptances below) + byte cargo_acceptance[HOUSE_NUM_ACCEPTS]; ///< acceptance level for the cargo slots + CargoID accepts_cargo[HOUSE_NUM_ACCEPTS]; ///< input cargo slots + BuildingFlags building_flags; ///< some flags that describe the house (size, stadium etc...) + HouseZones building_availability; ///< where can it be built (climates, zones) + bool enabled; ///< the house is available to build (true by default, but can be disabled by newgrf) /* NewHouses properties */ - GRFFileProps grf_prop; ///< Properties related the the grf file - uint16 callback_mask; ///< Bitmask of house callbacks that have to be called - byte random_colour[4]; ///< 4 "random" colours - byte probability; ///< Relative probability of appearing (16 is the standard value) - HouseExtraFlags extra_flags; ///< some more flags - HouseClassID class_id; ///< defines the class this house has (not grf file based) - AnimationInfo animation; ///< information about the animation. - byte processing_time; ///< Periodic refresh multiplier - byte minimum_life; ///< The minimum number of years this house will survive before the town rebuilds it - CargoTypes watched_cargoes; ///< Cargo types watched for acceptance. + GRFFileProps grf_prop; ///< Properties related the the grf file + uint16 callback_mask; ///< Bitmask of house callbacks that have to be called + byte random_colour[4]; ///< 4 "random" colours + byte probability; ///< Relative probability of appearing (16 is the standard value) + HouseExtraFlags extra_flags; ///< some more flags + HouseClassID class_id; ///< defines the class this house has (not grf file based) + AnimationInfo animation; ///< information about the animation. + byte processing_time; ///< Periodic refresh multiplier + byte minimum_life; ///< The minimum number of years this house will survive before the town rebuilds it + CargoTypes watched_cargoes; ///< Cargo types watched for acceptance. Money GetRemovalCost() const; diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 57dcb41ca5..3b0af55170 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -2294,6 +2294,10 @@ static ChangeInfoResult IgnoreTownHouseProperty(int prop, ByteReader *buf) break; } + case 0x23: + buf->Skip(buf->ReadByte() * 2); + break; + default: ret = CIR_UNKNOWN; break; @@ -2526,6 +2530,28 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt housespec->max_year = buf->ReadWord(); break; + case 0x23: { // variable length cargo types accepted + uint count = buf->ReadByte(); + if (count > lengthof(housespec->accepts_cargo)) { + GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); + error->param_value[1] = prop; + return CIR_DISABLED; + } + /* Always write the full accepts_cargo array, and check each index for being inside the + * provided data. This ensures all values are properly initialized, and also avoids + * any risks of array overrun. */ + for (uint i = 0; i < lengthof(housespec->accepts_cargo); i++) { + if (i < count) { + housespec->accepts_cargo[i] = GetCargoTranslation(buf->ReadByte(), _cur.grffile); + housespec->cargo_acceptance[i] = buf->ReadByte(); + } else { + housespec->accepts_cargo[i] = CT_INVALID; + housespec->cargo_acceptance[i] = 0; + } + } + break; + } + default: ret = CIR_UNKNOWN; break; diff --git a/src/table/town_land.h b/src/table/town_land.h index e4098334ac..6476015119 100644 --- a/src/table/town_land.h +++ b/src/table/town_land.h @@ -1812,8 +1812,11 @@ assert_compile(lengthof(_town_draw_tile_data) == (NEW_HOUSE_OFFSET) * 4 * 4); * @see HouseSpec */ #define MS(mnd, mxd, p, rc, bn, rr, mg, ca1, ca2, ca3, bf, ba, cg1, cg2, cg3) \ - {mnd, mxd, p, rc, bn, rr, mg, {ca1, ca2, ca3}, {cg1, cg2, cg3}, bf, ba, true, \ - GRFFileProps(INVALID_HOUSE_ID), 0, {0, 0, 0, 0}, 16, NO_EXTRA_FLAG, HOUSE_NO_CLASS, {0, 2, 0, 0}, 0, 0, 0} + {mnd, mxd, p, rc, bn, rr, mg, \ + {ca1, ca2, ca3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \ + {cg1, cg2, cg3, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID, CT_INVALID}, \ + bf, ba, true, GRFFileProps(INVALID_HOUSE_ID), 0, {0, 0, 0, 0}, \ + 16, NO_EXTRA_FLAG, HOUSE_NO_CLASS, {0, 2, 0, 0}, 0, 0, 0} /** House specifications from original data */ static const HouseSpec _original_house_specs[] = { /** diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 986c52c4e3..dacf59ddc4 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -611,7 +611,7 @@ static inline void AddAcceptedCargoSetMask(CargoID cargo, uint amount, CargoArra static void AddAcceptedCargo_Town(TileIndex tile, CargoArray &acceptance, CargoTypes *always_accepted) { const HouseSpec *hs = HouseSpec::Get(GetHouseType(tile)); - CargoID accepts[3]; + CargoID accepts[lengthof(hs->accepts_cargo)]; /* Set the initial accepted cargo types */ for (uint8 i = 0; i < lengthof(accepts); i++) { From 41d47926b17984228c084578767312c3db6845f8 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 21 Jan 2019 07:10:43 +0000 Subject: [PATCH 217/622] Cleanup #6960: Remove parts of generate used only for MSVC pre-2015. --- projects/generate | 37 ----------------------- projects/generate.vbs | 70 ++++++++++--------------------------------- 2 files changed, 15 insertions(+), 92 deletions(-) mode change 100755 => 100644 projects/generate.vbs diff --git a/projects/generate b/projects/generate index af59a83fb2..be3396c6f0 100755 --- a/projects/generate +++ b/projects/generate @@ -124,17 +124,7 @@ load_main_data() { gsub(" ", "", $0); gsub("^#", "", $0); gsub("^ ", "", $0); - - if (first_time != 0) { - print "#1 "; - } else { - first_time = 1; - } - filter = $0; - print "#1 "; print "#3 "; printf "#3 {c76ff9f1-1e62-46d8-8d55-%012d}\n", i; print "#3 "; @@ -148,10 +138,6 @@ load_main_data() { if (deep == skip) { gsub(" ", "", $0); gsub("/", "\\\\", $0); - print "#1 "; - print "#1 "; split($0, file, "."); cltype = "ClInclude" if (file[2] == "cpp") cltype = "ClCompile"; @@ -162,7 +148,6 @@ load_main_data() { print "#4 "; } } - END { print "#1 "; } '`" eval "$2=\"\$RES\"" @@ -180,21 +165,6 @@ load_lang_data() { continue fi RES="$RES -#1 -#1 -#1 -#1 -#1 #2 #2 Generating "$i" language file #2 ..\\objs\\strgen\\strgen.exe -s ..\\src\\lang -d ..\\bin\\lang \"%(FullPath)\" @@ -217,10 +187,6 @@ load_settings_data() { do i=`basename $i` RES="$RES -#1 -#1 #2 #4 #4 INI @@ -287,18 +253,15 @@ load_main_data "$ROOT_DIR/source.list" openttd openttdfiles=`echo "$openttd" | grep "^#4" | sed "s~#4~~g"` openttdfilters=`echo "$openttd" | grep "^#3" | sed "s~#3~~g"` openttdvcxproj=`echo "$openttd" | grep "^#2" | sed "s~#2~~g"` -openttd=`echo "$openttd" | grep "^#1" | sed "s~#1~~g"` load_lang_data "$ROOT_DIR/src/lang/*.txt" lang langfiles=`echo "$lang" | grep "^#3" | sed "s~#3~~g"` langvcxproj=`echo "$lang" | grep "^#2" | sed "s~#2~~g"` -lang=`echo "$lang" | grep "^#1" | sed "s~#1~~g"` load_settings_data "$ROOT_DIR/src/table/*.ini" settings settingsfiles=`echo "$settings" | grep "^#4" | sed "s~#4~~g"` settingscommand=`echo "$settings" | grep "^#3" | sed "s~#3~~g"` settingsvcxproj=`echo "$settings" | grep "^#2" | sed "s~#2~~g"` -settings=`echo "$settings" | grep "^#1" | sed "s~#1~~g"` generate "$openttdvcxproj" "openttd_vs140.vcxproj" generate "$openttdfiles" "openttd_vs140.vcxproj.filters" "$openttdfilters" diff --git a/projects/generate.vbs b/projects/generate.vbs old mode 100755 new mode 100644 index 5439ed7c0d..218dcfc0ec --- a/projects/generate.vbs +++ b/projects/generate.vbs @@ -140,9 +140,8 @@ Sub headers_check(filename, dir) End If End Sub -Function load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files) - Dim res, file, line, deep, skip, first_filter, first_file, filter, cltype, index - res = "" +Sub load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files) + Dim file, line, deep, skip, first_filter, first_file, filter, cltype, index index = 0 ' Read the source.list and process it Set file = FSO.OpenTextFile(filename, 1, 0, 0) @@ -176,16 +175,11 @@ Function load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files) if deep = skip Then line = Replace(line, "# ", "") if first_filter <> 0 Then - res = res & " " & vbCrLf filters = filters & vbCrLf Else first_filter = 1 End If filter = line - res = res & _ - " " & vbCrLf filters = filters & _ " " & vbCrLf & _ " {c76ff9f1-1e62-46d8-8d55-" & String(12 - Len(CStr(index)), "0") & index & "}" & vbCrLf & _ @@ -201,11 +195,6 @@ Function load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files) Else first_file = 1 End If - res = res & _ - " " & vbCrLf & _ - " " & vbCrLf Select Case Split(Line, ".")(1) Case "cpp" cltype = "ClCompile" @@ -223,42 +212,22 @@ Function load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files) End Select End If Wend - res = res & " " file.Close() - load_main_data = res -End Function +End Sub -Function load_lang_data(dir, ByRef vcxproj, ByRef files) - Dim res, folder, file, first_time - res = "" +Sub load_lang_data(dir, ByRef vcxproj, ByRef files) + Dim folder, file, first_time Set folder = FSO.GetFolder(dir) For Each file In folder.Files file = FSO.GetFileName(file) If file <> "english.txt" And FSO.GetExtensionName(file) = "txt" Then file = Left(file, Len(file) - 4) If first_time <> 0 Then - res = res & vbCrLf vcxproj = vcxproj & vbCrLf files = files & vbCrLf Else first_time = 1 End If - res = res & _ - " " & vbCrLf & _ - " " & vbCrLf & _ - " " & vbCrLf & _ - " " & vbCrLf & _ - " " vcxproj = vcxproj & _ " " & vbCrLf & _ " Generating " & file & " language file" & vbCrLf & _ @@ -272,29 +241,21 @@ Function load_lang_data(dir, ByRef vcxproj, ByRef files) " " End If Next - load_lang_data = res -End Function +End Sub -Function load_settings_data(dir, ByRef vcxproj, ByRef command, ByRef files) - Dim res, folder, file, first_time - res = "" +Sub load_settings_data(dir, ByRef vcxproj, ByRef command, ByRef files) + Dim folder, file, first_time command = "..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble" Set folder = FSO.GetFolder(dir) For Each file In folder.Files file = FSO.GetFileName(file) If FSO.GetExtensionName(file) = "ini" Then if first_time <> 0 Then - res = res & vbCrLf vcxproj = vcxproj & vbCrLf files = files & vbCrLf Else first_time = 1 End If - res = res & _ - " " & vbCrLf & _ - " " vcxproj = vcxproj & _ " " command = command & " ..\src\table\" & file @@ -304,8 +265,7 @@ Function load_settings_data(dir, ByRef vcxproj, ByRef command, ByRef files) " " End If Next - load_settings_data = res -End Function +End Sub Sub generate(data, dest, data2) Dim srcfile, destfile, line @@ -358,22 +318,22 @@ End If safety_check ROOT_DIR & "/source.list" headers_check ROOT_DIR & "/source.list", ROOT_DIR & "\src\" ' Backslashes needed for DoFiles -Dim openttd, openttdvcxproj, openttdfilters, openttdfiles -openttd = load_main_data(ROOT_DIR & "/source.list", openttdvcxproj, openttdfilters, openttdfiles) +Dim openttdvcxproj, openttdfilters, openttdfiles +load_main_data ROOT_DIR & "/source.list", openttdvcxproj, openttdfilters, openttdfiles generate openttdvcxproj, ROOT_DIR & "/projects/openttd_vs140.vcxproj", Null generate openttdfiles, ROOT_DIR & "/projects/openttd_vs140.vcxproj.filters", openttdfilters generate openttdvcxproj, ROOT_DIR & "/projects/openttd_vs141.vcxproj", Null generate openttdfiles, ROOT_DIR & "/projects/openttd_vs141.vcxproj.filters", openttdfilters -Dim lang, langvcxproj, langfiles -lang = load_lang_data(ROOT_DIR & "/src/lang", langvcxproj, langfiles) +Dim langvcxproj, langfiles +load_lang_data ROOT_DIR & "/src/lang", langvcxproj, langfiles generate langvcxproj, ROOT_DIR & "/projects/langs_vs140.vcxproj", Null generate langfiles, ROOT_DIR & "/projects/langs_vs140.vcxproj.filters", Null generate langvcxproj, ROOT_DIR & "/projects/langs_vs141.vcxproj", Null generate langfiles, ROOT_DIR & "/projects/langs_vs141.vcxproj.filters", Null -Dim settings, settingsvcxproj, settingscommand, settingsfiles -settings = load_settings_data(ROOT_DIR & "/src/table", settingsvcxproj, settingscommand, settingsfiles) +Dim settingsvcxproj, settingscommand, settingsfiles +load_settings_data ROOT_DIR & "/src/table", settingsvcxproj, settingscommand, settingsfiles generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs140.vcxproj", settingscommand generate settingsfiles, ROOT_DIR & "/projects/settings_vs140.vcxproj.filters", Null generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs141.vcxproj", settingscommand From c3dbe836b40215d48691356d7bf1298217ba8edc Mon Sep 17 00:00:00 2001 From: PeterN Date: Tue, 22 Jan 2019 12:42:52 +0000 Subject: [PATCH 218/622] Add: Draw network password indicator lock in company drop down list. (#7079) --- src/toolbar_gui.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index cd0f518dfd..afa9adacbd 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -119,12 +119,14 @@ public: */ class DropDownListCompanyItem : public DropDownListItem { Dimension icon_size; + Dimension lock_size; public: bool greyed; DropDownListCompanyItem(int result, bool masked, bool greyed) : DropDownListItem(result, masked), greyed(greyed) { this->icon_size = GetSpriteSize(SPR_COMPANY_ICON); + this->lock_size = GetSpriteSize(SPR_LOCK); } virtual ~DropDownListCompanyItem() {} @@ -139,12 +141,12 @@ public: CompanyID company = (CompanyID)this->result; SetDParam(0, company); SetDParam(1, company); - return GetStringBoundingBox(STR_COMPANY_NAME_COMPANY_NUM).width + this->icon_size.width + 3; + return GetStringBoundingBox(STR_COMPANY_NAME_COMPANY_NUM).width + this->icon_size.width + this->lock_size.width + 6; } uint Height(uint width) const { - return max(this->icon_size.height + 2U, (uint)FONT_HEIGHT_NORMAL); + return max(max(this->icon_size.height, this->lock_size.height) + 2U, (uint)FONT_HEIGHT_NORMAL); } void Draw(int left, int right, int top, int bottom, bool sel, int bg_colour) const @@ -157,8 +159,12 @@ public: int icon_offset = (bottom - top - icon_size.height) / 2; int text_offset = (bottom - top - FONT_HEIGHT_NORMAL) / 2; + int lock_offset = (bottom - top - lock_size.height) / 2; DrawCompanyIcon(company, rtl ? right - this->icon_size.width - WD_FRAMERECT_RIGHT : left + WD_FRAMERECT_LEFT, top + icon_offset); + if (NetworkCompanyIsPassworded(company)) { + DrawSprite(SPR_LOCK, PAL_NONE, rtl ? left + WD_FRAMERECT_LEFT : right - this->lock_size.width - WD_FRAMERECT_RIGHT, top + lock_offset); + } SetDParam(0, company); SetDParam(1, company); @@ -168,7 +174,7 @@ public: } else { col = sel ? TC_WHITE : TC_BLACK; } - DrawString(left + WD_FRAMERECT_LEFT + (rtl ? 0 : 3 + this->icon_size.width), right - WD_FRAMERECT_RIGHT - (rtl ? 3 + this->icon_size.width : 0), top + text_offset, STR_COMPANY_NAME_COMPANY_NUM, col); + DrawString(left + WD_FRAMERECT_LEFT + (rtl ? 3 + this->lock_size.width : 3 + this->icon_size.width), right - WD_FRAMERECT_RIGHT - (rtl ? 3 + this->icon_size.width : 3 + this->lock_size.width), top + text_offset, STR_COMPANY_NAME_COMPANY_NUM, col); } }; From 636fcc2cc02d502f6e0ebddf7fc2d1d2c60f0cb8 Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 8 Jan 2019 03:36:47 +0100 Subject: [PATCH 219/622] Fix: keep the line ending when generating widget enums with bash/gawk on windows --- src/script/api/generate_widget.awk | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/script/api/generate_widget.awk b/src/script/api/generate_widget.awk index 81d9592d77..cdbe59d970 100644 --- a/src/script/api/generate_widget.awk +++ b/src/script/api/generate_widget.awk @@ -24,6 +24,8 @@ BEGIN { skiptillend = 0; } +{ CR = (match($0, "\\r$") > 0 ? "\r" : "") } + /@enum/ { print; add_indent = gensub("[^ ]*", "", "g"); @@ -42,7 +44,7 @@ BEGIN { active_comment = 0; comment = ""; file = filearray[i]; - print add_indent "/* automatically generated from " file " */" + print add_indent "/* automatically generated from " file " */" CR while ((getline < file) > 0) { sub(rm_indent, ""); @@ -65,7 +67,7 @@ BEGIN { } # Forget doxygen comment, if no enum follows - if (active_comment == 2 && $0 != "") { + if (active_comment == 2 && $0 != "" CR) { active_comment = 0; comment = ""; } @@ -78,22 +80,21 @@ BEGIN { sub(" *//", " //"); match($0, "^( *)([A-Za-z0-9_]+),(.*)", parts); - enumwidth - length(parts[2]) - if (parts[3] == "") { - printf "%s%s%-45s= ::%s\n", add_indent, parts[1], parts[2], (parts[2] ",") + if (parts[3] == "" CR) { + printf "%s%s%-45s= ::%s\n", add_indent, parts[1], parts[2], (parts[2] "," CR) } else { - printf "%s%s%-45s= ::%-45s%s\n", add_indent, parts[1], parts[2], (parts[2] ","), parts[3]; + printf "%s%s%-45s= ::%-45s%s\n", add_indent, parts[1], parts[2], (parts[2] ","), (parts[3]); } - } else if ($0 == "") { - print ""; + } else if ($0 == "" CR) { + print "" CR; } else { print add_indent $0; } } if (match($0, "^ *\\};") > 0) { - if (active != 0) print ""; + if (active != 0) print "" CR; active = 0; } } From 72925919677baf3c0ebff3672afd4fbb977e6421 Mon Sep 17 00:00:00 2001 From: glx Date: Sun, 6 Jan 2019 16:36:44 +0100 Subject: [PATCH 220/622] Add: generate_widget.vbs to allow script_window.hpp enums generation for users unable to run bash/gawk scripts --- src/script/api/generate_widget.vbs | 192 +++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 src/script/api/generate_widget.vbs diff --git a/src/script/api/generate_widget.vbs b/src/script/api/generate_widget.vbs new file mode 100644 index 0000000000..0bd38bb299 --- /dev/null +++ b/src/script/api/generate_widget.vbs @@ -0,0 +1,192 @@ +Option Explicit + +' $Id$ +' +' This file is part of OpenTTD. +' OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. +' OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +' See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + +Dim FSO, filename, skiptillend, eof +Set FSO = CreateObject("Scripting.FileSystemObject") + +filename = "script_window.hpp" +skiptillend = False +eof = vbCrLf + +If Not FSO.FileExists(filename) Then + WScript.Echo filename & " not found" + WScript.Quit 1 +End If + +Function GetFiles(pattern) + Dim parent, re, files, f + Set files = CreateObject("Scripting.Dictionary") + Set re = New RegExp + + parent = FSO.GetParentFolderName(pattern) + pattern = FSO.GetFileName(pattern) + + ' Convert pattern to a valid regex + re.Global = True + re.Pattern = "\." + pattern = re.Replace(pattern, "\.") + re.Pattern = "\*" + pattern = re.Replace(pattern, ".*") + re.Pattern = pattern + + ' Get the file list + For Each f In FSO.GetFolder(parent).Files + If re.Test(f.Path) Then + f = parent & "/" & f.Name + files.Add f, f + End If + Next + + ' Sort the file list + Set GetFiles = CreateObject("Scripting.Dictionary") + While files.Count <> 0 + Dim first + first = "" + For Each f in files + If first = "" Or StrComp(first, f) = 1 Then first = f + Next + GetFiles.Add first, first + files.Remove(First) + Wend +End Function + +Sub Generate(line, file) + Dim re, add_indent, enum_pattern, file_pattern, f, active, active_comment, comment, rm_indent + Set re = New RegExp + + re.Global = True + re.Pattern = "[^ ]*" + add_indent = re.Replace(line, "") + re.Global = False + re.Pattern = ".*@enum *" + line = Split(re.Replace(line, "")) + enum_pattern = line(0) + file_pattern = line(1) + For Each f In GetFiles(file_pattern).Items + active = 0 + active_comment = 0 + comment = "" + file.Write add_indent & "/* automatically generated from " & f & " */" & eof + Set f = FSO.OpenTextFile(f, 1) + While Not f.AtEndOfStream + re.Pattern = rm_indent + line = re.Replace(f.ReadLine, "") + + ' Remember possible doxygen comment before enum declaration + re.Pattern = "/\*\*" + If active = 0 And re.Test(line) Then + comment = add_indent & line + active_comment = 1 + ElseIf active_comment = 1 Then + comment = comment & vbCrLf & add_indent & line + End If + + ' Check for enum match + re.Pattern = "^ *enum *" & enum_pattern & " *\{" + If re.Test(line) Then + re.Global = True + re.Pattern = "[^ ]*" + rm_indent = re.Replace(line, "") + re.Global = False + active = 1 + If active_comment > 0 Then file.Write comment & eof + active_comment = 0 + comment = "" + End If + + ' Forget doxygen comment, if no enum follows + If active_comment = 2 And line <> "" Then + active_comment = 0 + comment = "" + End If + re.Pattern = "\*/" + If active_comment = 1 And re.Test(line) Then active_comment = 2 + + If active <> 0 Then + re.Pattern = "^ *[A-Za-z0-9_]* *[,=]" + If re.Test(line) Then + Dim parts + ' Transform enum values + re.Pattern = " *=[^,]*" + line = re.Replace(line, "") + re.Pattern = " *//" + line = re.Replace(line, " //") + + re.Pattern = "^( *)([A-Za-z0-9_]+),(.*)" + Set parts = re.Execute(line) + + With parts.Item(0).SubMatches + If .Item(2) = "" Then + file.Write add_indent & .Item(0) & .Item(1) & String(45 - Len(.Item(1)), " ") & "= ::" & .Item(1) & "," & eof + Else + file.Write add_indent & .Item(0) & .Item(1) & String(45 - Len(.Item(1)), " ") & "= ::" & .Item(1) & "," & String(44 - Len(.Item(1)), " ") & .Item(2) & eof + End If + End With + ElseIf line = "" Then + file.Write eof + Else + file.Write add_indent & line & eof + End If + End If + + re.Pattern = "^ *\};" + If re.Test(line) Then + If active <> 0 Then file.Write eof + active = 0 + End If + Wend + f.Close + Next +End Sub + +Sub Parse(line, file) + Dim re + Set re = New RegExp + + re.pattern = "@enum" + If re.Test(line) Then + file.Write line & eof + Generate line, file + skiptillend = True + Exit Sub + End If + + re.pattern = "@endenum" + If re.Test(line) Then + file.Write line & eof + skiptillend = False + Exit Sub + End If + + If Not skiptillend Then + file.Write line & eof + End If +End Sub + +Dim file, source, lines, i + +WScript.Echo "Starting to parse " & filename +Set file = FSO.OpenTextFile(filename, 1) +If Not file.AtEndOfStream Then + source = file.ReadAll +End IF +file.Close + +lines = Split(source, eof) +If UBound(lines) = 0 Then + eof = vbLf + lines = Split(source, eof) +End If + +Set file = FSO.OpenTextFile(filename, 2) +For i = LBound(lines) To UBound(lines) - 1 ' Split adds an extra line, we must ignore it + Parse lines(i), file +Next +file.Close +WScript.Echo "Done" From ed325ada887f09904b3351020903899a033c6b51 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 23 Jan 2019 19:45:44 +0100 Subject: [PATCH 221/622] Update: Translations from eints spanish: 3 changes by SilverSurferZzZ --- src/lang/spanish.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 1c258e2e34..3fbc855eff 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -931,6 +931,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizada.. STR_GAME_OPTIONS_CURRENCY_GEL :Lari Georgiano (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iraní (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Nuevo Rublo Ruso (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Peso mexicano (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vehículos de carretera @@ -2722,6 +2723,7 @@ STR_FRAMERATE_SOUND :{BLACK}Mezcla d ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GL_TRAINS :Ticks de trenes +STR_FRAMETIME_CAPTION_GL_SHIPS :Ticks de barcos STR_FRAMETIME_CAPTION_DRAWING :Renderizado gráfico STR_FRAMETIME_CAPTION_VIDEO :Salida de vídeo STR_FRAMETIME_CAPTION_SOUND :Mezcla de sonido @@ -3826,6 +3828,7 @@ STR_ORDER_CONDITIONAL_AGE :Edad (años) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Requiere mantenimiento STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Siempre STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Tiempo de vida restante (años) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Fiabilidad máxima STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Como comparar los datos del vehículo al valor dado STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :es igual a From db924a4681f019a6372f5192693af5aede36d080 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Tue, 16 Jan 2018 23:23:52 +0000 Subject: [PATCH 222/622] Codechange: [Blitter] Change DrawLine to be templated This is remove per-pixel overheads due to use of the SetPixel virtual method. These overheads included: * expensive virtual method call which prevents inlining * palette lookup for every pixel * branch on whether palette animation is enabled on every pixel Regenerate project files. --- projects/openttd_vs140.vcxproj | 2 +- projects/openttd_vs140.vcxproj.filters | 6 +++--- projects/openttd_vs141.vcxproj | 2 +- projects/openttd_vs141.vcxproj.filters | 6 +++--- source.list | 2 +- src/blitter/32bpp_anim.cpp | 19 +++++++++++++++++++ src/blitter/32bpp_anim.hpp | 1 + src/blitter/32bpp_base.cpp | 9 +++++++++ src/blitter/32bpp_base.hpp | 1 + src/blitter/8bpp_base.cpp | 8 ++++++++ src/blitter/8bpp_base.hpp | 1 + src/blitter/base.hpp | 4 +++- src/blitter/{base.cpp => common.hpp} | 19 +++++++++++-------- 13 files changed, 62 insertions(+), 18 deletions(-) rename src/blitter/{base.cpp => common.hpp} (86%) diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index f08c26f09b..59f52a08da 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -1201,8 +1201,8 @@ - + diff --git a/projects/openttd_vs140.vcxproj.filters b/projects/openttd_vs140.vcxproj.filters index 7ad671fc7c..e93c94f1f7 100644 --- a/projects/openttd_vs140.vcxproj.filters +++ b/projects/openttd_vs140.vcxproj.filters @@ -2691,12 +2691,12 @@ Blitters - - Blitters - Blitters + + Blitters + Blitters diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj index 552b9b9a95..525119179d 100644 --- a/projects/openttd_vs141.vcxproj +++ b/projects/openttd_vs141.vcxproj @@ -1201,8 +1201,8 @@ - + diff --git a/projects/openttd_vs141.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters index 7ad671fc7c..e93c94f1f7 100644 --- a/projects/openttd_vs141.vcxproj.filters +++ b/projects/openttd_vs141.vcxproj.filters @@ -2691,12 +2691,12 @@ Blitters - - Blitters - Blitters + + Blitters + Blitters diff --git a/source.list b/source.list index f78b8cecff..358b16a7cd 100644 --- a/source.list +++ b/source.list @@ -948,8 +948,8 @@ blitter/8bpp_optimized.hpp blitter/8bpp_simple.cpp blitter/8bpp_simple.hpp #end -blitter/base.cpp blitter/base.hpp +blitter/common.hpp blitter/factory.hpp blitter/null.cpp blitter/null.hpp diff --git a/src/blitter/32bpp_anim.cpp b/src/blitter/32bpp_anim.cpp index 98ae22b00c..27b1fbd5b8 100644 --- a/src/blitter/32bpp_anim.cpp +++ b/src/blitter/32bpp_anim.cpp @@ -12,6 +12,7 @@ #include "../stdafx.h" #include "../video/video_driver.hpp" #include "32bpp_anim.hpp" +#include "common.hpp" #include "../table/sprites.h" @@ -321,6 +322,24 @@ void Blitter_32bppAnim::SetPixel(void *video, int x, int y, uint8 colour) this->anim_buf[this->ScreenToAnimOffset((uint32 *)video) + x + y * this->anim_buf_pitch] = colour | (DEFAULT_BRIGHTNESS << 8); } +void Blitter_32bppAnim::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash) +{ + const Colour c = LookupColourInPalette(colour); + + if (_screen_disable_anim) { + this->DrawLineGeneric(x, y, x2, y2, screen_width, screen_height, width, dash, [&](int x, int y) { + *((Colour *)video + x + y * _screen.pitch) = c; + }); + } else { + uint16 * const offset_anim_buf = this->anim_buf + this->ScreenToAnimOffset((uint32 *)video); + const uint16 anim_colour = colour | (DEFAULT_BRIGHTNESS << 8); + this->DrawLineGeneric(x, y, x2, y2, screen_width, screen_height, width, dash, [&](int x, int y) { + *((Colour *)video + x + y * _screen.pitch) = c; + offset_anim_buf[x + y * this->anim_buf_pitch] = anim_colour; + }); + } +} + void Blitter_32bppAnim::DrawRect(void *video, int width, int height, uint8 colour) { if (_screen_disable_anim) { diff --git a/src/blitter/32bpp_anim.hpp b/src/blitter/32bpp_anim.hpp index da33ec95bb..ecf6dcfca0 100644 --- a/src/blitter/32bpp_anim.hpp +++ b/src/blitter/32bpp_anim.hpp @@ -40,6 +40,7 @@ public: /* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom); /* virtual */ void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal); /* virtual */ void SetPixel(void *video, int x, int y, uint8 colour); + /* virtual */ void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash); /* virtual */ void DrawRect(void *video, int width, int height, uint8 colour); /* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height); /* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height); diff --git a/src/blitter/32bpp_base.cpp b/src/blitter/32bpp_base.cpp index c396e45410..b2e66b0be1 100644 --- a/src/blitter/32bpp_base.cpp +++ b/src/blitter/32bpp_base.cpp @@ -11,6 +11,7 @@ #include "../stdafx.h" #include "32bpp_base.hpp" +#include "common.hpp" #include "../safeguards.h" @@ -24,6 +25,14 @@ void Blitter_32bppBase::SetPixel(void *video, int x, int y, uint8 colour) *((Colour *)video + x + y * _screen.pitch) = LookupColourInPalette(colour); } +void Blitter_32bppBase::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash) +{ + const Colour c = LookupColourInPalette(colour); + this->DrawLineGeneric(x, y, x2, y2, screen_width, screen_height, width, dash, [=](int x, int y) { + *((Colour *)video + x + y * _screen.pitch) = c; + }); +} + void Blitter_32bppBase::DrawRect(void *video, int width, int height, uint8 colour) { Colour colour32 = LookupColourInPalette(colour); diff --git a/src/blitter/32bpp_base.hpp b/src/blitter/32bpp_base.hpp index 9b76271704..697593da6a 100644 --- a/src/blitter/32bpp_base.hpp +++ b/src/blitter/32bpp_base.hpp @@ -23,6 +23,7 @@ public: /* virtual */ uint8 GetScreenDepth() { return 32; } /* virtual */ void *MoveTo(void *video, int x, int y); /* virtual */ void SetPixel(void *video, int x, int y, uint8 colour); + /* virtual */ void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash); /* virtual */ void DrawRect(void *video, int width, int height, uint8 colour); /* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height); /* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height); diff --git a/src/blitter/8bpp_base.cpp b/src/blitter/8bpp_base.cpp index eab6eaa0db..dccfda3d70 100644 --- a/src/blitter/8bpp_base.cpp +++ b/src/blitter/8bpp_base.cpp @@ -12,6 +12,7 @@ #include "../stdafx.h" #include "../gfx_func.h" #include "8bpp_base.hpp" +#include "common.hpp" #include "../safeguards.h" @@ -35,6 +36,13 @@ void Blitter_8bppBase::SetPixel(void *video, int x, int y, uint8 colour) *((uint8 *)video + x + y * _screen.pitch) = colour; } +void Blitter_8bppBase::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash) +{ + this->DrawLineGeneric(x, y, x2, y2, screen_width, screen_height, width, dash, [=](int x, int y) { + *((uint8 *)video + x + y * _screen.pitch) = colour; + }); +} + void Blitter_8bppBase::DrawRect(void *video, int width, int height, uint8 colour) { do { diff --git a/src/blitter/8bpp_base.hpp b/src/blitter/8bpp_base.hpp index 2dff784992..8f75dda5d3 100644 --- a/src/blitter/8bpp_base.hpp +++ b/src/blitter/8bpp_base.hpp @@ -21,6 +21,7 @@ public: /* virtual */ void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal); /* virtual */ void *MoveTo(void *video, int x, int y); /* virtual */ void SetPixel(void *video, int x, int y, uint8 colour); + /* virtual */ void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash); /* virtual */ void DrawRect(void *video, int width, int height, uint8 colour); /* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height); /* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height); diff --git a/src/blitter/base.hpp b/src/blitter/base.hpp index a9403b339d..388359441f 100644 --- a/src/blitter/base.hpp +++ b/src/blitter/base.hpp @@ -122,7 +122,7 @@ public: * @param width Line width. * @param dash Length of dashes for dashed lines. 0 means solid line. */ - virtual void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash = 0); + virtual void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash = 0) = 0; /** * Copy from a buffer to the screen. @@ -203,6 +203,8 @@ public: virtual void PostResize() { }; virtual ~Blitter() { } + + template void DrawLineGeneric(int x, int y, int x2, int y2, int screen_width, int screen_height, int width, int dash, SetPixelT set_pixel); }; #endif /* BLITTER_BASE_HPP */ diff --git a/src/blitter/base.cpp b/src/blitter/common.hpp similarity index 86% rename from src/blitter/base.cpp rename to src/blitter/common.hpp index e83df2e714..0e255ca9a3 100644 --- a/src/blitter/base.cpp +++ b/src/blitter/common.hpp @@ -7,15 +7,16 @@ * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . */ -/** @file base.cpp Implementation of the base for all blitters. */ +/** @file common.hpp Common functionality for all blitter implementations. */ + +#ifndef BLITTER_COMMON_HPP +#define BLITTER_COMMON_HPP -#include "../stdafx.h" #include "base.hpp" #include "../core/math_func.hpp" -#include "../safeguards.h" - -void Blitter::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash) +template +void Blitter::DrawLineGeneric(int x, int y, int x2, int y2, int screen_width, int screen_height, int width, int dash, SetPixelT set_pixel) { int dy; int dx; @@ -40,7 +41,7 @@ void Blitter::DrawLine(void *video, int x, int y, int x2, int y2, int screen_wid if (dx == 0 && dy == 0) { /* The algorithm below cannot handle this special case; make it work at least for line width 1 */ - if (x >= 0 && x < screen_width && y >= 0 && y < screen_height) this->SetPixel(video, x, y, colour); + if (x >= 0 && x < screen_width && y >= 0 && y < screen_height) set_pixel(x, y); return; } @@ -83,7 +84,7 @@ void Blitter::DrawLine(void *video, int x, int y, int x2, int y2, int screen_wid while (x != x2) { if (dash_count < dash && x >= 0 && x < screen_width) { for (int y = y_low; y != y_high; y += stepy) { - if (y >= 0 && y < screen_height) this->SetPixel(video, x, y, colour); + if (y >= 0 && y < screen_height) set_pixel(x, y); } } if (frac_low >= 0) { @@ -118,7 +119,7 @@ void Blitter::DrawLine(void *video, int x, int y, int x2, int y2, int screen_wid while (y != y2) { if (dash_count < dash && y >= 0 && y < screen_height) { for (int x = x_low; x != x_high; x += stepx) { - if (x >= 0 && x < screen_width) this->SetPixel(video, x, y, colour); + if (x >= 0 && x < screen_width) set_pixel(x, y); } } if (frac_low >= 0) { @@ -136,3 +137,5 @@ void Blitter::DrawLine(void *video, int x, int y, int x2, int y2, int screen_wid } } } + +#endif /* BLITTER_COMMON_HPP */ From 0240e90169570f2ad2343c3cbbeade7886e599e9 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 17 Jan 2018 02:34:03 +0000 Subject: [PATCH 223/622] Fix: [Blitter] Avoid signed overflow when drawing long lines --- src/blitter/common.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/blitter/common.hpp b/src/blitter/common.hpp index 0e255ca9a3..9019dd359d 100644 --- a/src/blitter/common.hpp +++ b/src/blitter/common.hpp @@ -50,11 +50,11 @@ void Blitter::DrawLineGeneric(int x, int y, int x2, int y2, int screen_width, in /* compute frac_diff = width * sqrt(dx*dx + dy*dy) * Start interval: * max(dx, dy) <= sqrt(dx*dx + dy*dy) <= sqrt(2) * max(dx, dy) <= 3/2 * max(dx, dy) */ - int frac_sq = width * width * (dx * dx + dy * dy); + int64 frac_sq = ((int64) width) * ((int64) width) * (((int64) dx) * ((int64) dx) + ((int64) dy) * ((int64) dy)); int frac_max = 3 * frac_diff / 2; while (frac_diff < frac_max) { int frac_test = (frac_diff + frac_max) / 2; - if (frac_test * frac_test < frac_sq) { + if (((int64) frac_test) * ((int64) frac_test) < frac_sq) { frac_diff = frac_test + 1; } else { frac_max = frac_test - 1; From 4b256fed36f6edab42c6a18e5d31e17e38ac669b Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 17 Jan 2018 02:52:40 +0000 Subject: [PATCH 224/622] Codechange: [Blitter] Adjust line-drawing algorithm to reduce wasted off-screen work This clips the line segment to be within the screen area prior to pixel iteration. --- src/blitter/common.hpp | 76 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 66 insertions(+), 10 deletions(-) diff --git a/src/blitter/common.hpp b/src/blitter/common.hpp index 9019dd359d..3e4911d003 100644 --- a/src/blitter/common.hpp +++ b/src/blitter/common.hpp @@ -15,6 +15,8 @@ #include "base.hpp" #include "../core/math_func.hpp" +#include + template void Blitter::DrawLineGeneric(int x, int y, int x2, int y2, int screen_width, int screen_height, int width, int dash, SetPixelT set_pixel) { @@ -66,23 +68,50 @@ void Blitter::DrawLineGeneric(int x, int y, int x2, int y2, int screen_width, in if (dash == 0) dash = 1; int dash_count = 0; if (dx > dy) { + if (stepx < 0) { + std::swap(x, x2); + std::swap(y, y2); + stepy = -stepy; + } + if (x2 < 0 || x >= screen_width) return; + int y_low = y; int y_high = y; int frac_low = dy - frac_diff / 2; int frac_high = dy + frac_diff / 2; - while (frac_low + dx / 2 < 0) { + while (frac_low < -(dx / 2)) { frac_low += dx; y_low -= stepy; } - while (frac_high - dx / 2 >= 0) { + while (frac_high >= dx / 2) { frac_high -= dx; y_high += stepy; } - x2 += stepx; + + if (x < 0) { + dash_count = (-x) % (dash + gap); + auto adjust_frac = [&](int64 frac, int &y_bound) -> int { + frac -= ((int64) dy) * ((int64) x); + if (frac >= 0) { + int quotient = frac / dx; + int remainder = frac % dx; + y_bound += (1 + quotient) * stepy; + frac = remainder - dx; + } + return frac; + }; + frac_low = adjust_frac(frac_low, y_low); + frac_high = adjust_frac(frac_high, y_high); + x = 0; + } + x2++; + if (x2 > screen_width) { + x2 = screen_width; + } while (x != x2) { - if (dash_count < dash && x >= 0 && x < screen_width) { + if (dash_count < dash) { for (int y = y_low; y != y_high; y += stepy) { if (y >= 0 && y < screen_height) set_pixel(x, y); } @@ -95,29 +124,56 @@ void Blitter::DrawLineGeneric(int x, int y, int x2, int y2, int screen_width, in y_high += stepy; frac_high -= dx; } - x += stepx; + x++; frac_low += dy; frac_high += dy; if (++dash_count >= dash + gap) dash_count = 0; } } else { + if (stepy < 0) { + std::swap(x, x2); + std::swap(y, y2); + stepx = -stepx; + } + if (y2 < 0 || y >= screen_height) return; + int x_low = x; int x_high = x; int frac_low = dx - frac_diff / 2; int frac_high = dx + frac_diff / 2; - while (frac_low + dy / 2 < 0) { + while (frac_low < -(dy / 2)) { frac_low += dy; x_low -= stepx; } - while (frac_high - dy / 2 >= 0) { + while (frac_high >= dy / 2) { frac_high -= dy; x_high += stepx; } - y2 += stepy; + + if (y < 0) { + dash_count = (-y) % (dash + gap); + auto adjust_frac = [&](int64 frac, int &x_bound) -> int { + frac -= ((int64) dx) * ((int64) y); + if (frac >= 0) { + int quotient = frac / dy; + int remainder = frac % dy; + x_bound += (1 + quotient) * stepx; + frac = remainder - dy; + } + return frac; + }; + frac_low = adjust_frac(frac_low, x_low); + frac_high = adjust_frac(frac_high, x_high); + y = 0; + } + y2++; + if (y2 > screen_height) { + y2 = screen_height; + } while (y != y2) { - if (dash_count < dash && y >= 0 && y < screen_height) { + if (dash_count < dash) { for (int x = x_low; x != x_high; x += stepx) { if (x >= 0 && x < screen_width) set_pixel(x, y); } @@ -130,7 +186,7 @@ void Blitter::DrawLineGeneric(int x, int y, int x2, int y2, int screen_width, in x_high += stepx; frac_high -= dy; } - y += stepy; + y++; frac_low += dx; frac_high += dx; if (++dash_count >= dash + gap) dash_count = 0; From b934cdf0ab1ea24b301a43cadf0be924f0c5ae37 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 24 Jan 2019 19:45:44 +0100 Subject: [PATCH 225/622] Update: Translations from eints italian: 7 changes by lorenzodv --- src/lang/italian.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 3d2291fc7a..b1afa82abc 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -191,6 +191,7 @@ STR_COLOUR_ORANGE :Arancio STR_COLOUR_BROWN :Marrone STR_COLOUR_GREY :Grigio STR_COLOUR_WHITE :Bianco +STR_COLOUR_RANDOM :Casuale # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -931,6 +932,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizzata. STR_GAME_OPTIONS_CURRENCY_GEL :Lari georgiano (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Rial iraniano (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Nuovo rublo russo (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Peso messicano (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Automezzi @@ -1282,6 +1284,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Non è p STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Manutenzione infrastrutture: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Se abilitata, le infrastrutture causano dei costi di manutenzione. I costi crescono in modo più che proporzionale alla dimensione della rete, influenzando maggiormente le compagnie più grandi rispetto alle piccole +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Colore iniziale compagnia: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Sceglie il colore iniziale della compagnia STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Non rendere mai obsoleti i tipi di aeroporto: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Abilitando questa impostazione, tutti i tipi di aeroporto rimangono disponibili indefinitamente dopo essere stati introdotti @@ -3381,6 +3385,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centra l STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Livello di produzione: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}L'industria ha annunciato che a breve chiuderà! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Richiede: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Richiede: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} From 43852baace470938c71147d9029b4679d62a05a8 Mon Sep 17 00:00:00 2001 From: "Johannes E. Krause" Date: Sun, 13 Jan 2019 20:49:44 +0100 Subject: [PATCH 226/622] Codechange: Remove unused GetTilePixelZOutsideMap and GetTileMaxPixelZOutsideMap functions (Patch by adf88, #6583) --- src/tile_map.cpp | 36 ------------------------------------ src/tile_map.h | 5 ----- 2 files changed, 41 deletions(-) diff --git a/src/tile_map.cpp b/src/tile_map.cpp index d73beeb886..05b0ea1942 100644 --- a/src/tile_map.cpp +++ b/src/tile_map.cpp @@ -192,23 +192,6 @@ int GetTileZ(TileIndex tile) return h; } -/** - * Get bottom height of the tile outside map. - * - * @param x X-coordinate of the tile outside to compute height of. - * @param y Y-coordinate of the tile outside to compute height of. - * @return Minimum height of the tile outside the map. - */ -int GetTilePixelZOutsideMap(int x, int y) -{ - uint h = TileHeightOutsideMap(x, y); // N corner. - h = min(h, TileHeightOutsideMap(x + 1, y)); // W corner. - h = min(h, TileHeightOutsideMap(x, y + 1)); // E corner. - h = min(h, TileHeightOutsideMap(x + 1, y + 1)); // S corner - - return h * TILE_HEIGHT; -} - /** * Get top height of the tile inside the map. * @param t Tile to compute height of @@ -225,22 +208,3 @@ int GetTileMaxZ(TileIndex t) return h; } - -/** - * Get top height of the tile outside the map. - * - * @see Detailed description in header. - * - * @param x X-coordinate of the tile outside to compute height of. - * @param y Y-coordinate of the tile outside to compute height of. - * @return Maximum height of the tile. - */ -int GetTileMaxPixelZOutsideMap(int x, int y) -{ - uint h = TileHeightOutsideMap(x, y); - h = max(h, TileHeightOutsideMap(x + 1, y)); - h = max(h, TileHeightOutsideMap(x, y + 1)); - h = max(h, TileHeightOutsideMap(x + 1, y + 1)); - - return h * TILE_HEIGHT; -} diff --git a/src/tile_map.h b/src/tile_map.h index 89f532e4f0..3fad368cd7 100644 --- a/src/tile_map.h +++ b/src/tile_map.h @@ -289,8 +289,6 @@ static inline int GetTilePixelZ(TileIndex tile) return GetTileZ(tile) * TILE_HEIGHT; } -int GetTilePixelZOutsideMap(int x, int y); - /** * Get top height of the tile * @param tile Tile to compute height of @@ -301,9 +299,6 @@ static inline int GetTileMaxPixelZ(TileIndex tile) return GetTileMaxZ(tile) * TILE_HEIGHT; } -int GetTileMaxPixelZOutsideMap(int x, int y); - - /** * Calculate a hash value from a tile position * From f0290d5de77176718153a2d078bee7dae57c16dc Mon Sep 17 00:00:00 2001 From: "Johannes E. Krause" Date: Sun, 13 Jan 2019 20:52:04 +0100 Subject: [PATCH 227/622] Codechange: Add InverseRemapCoords2 function for remapping viewport coordinates to underlying tile coordinates (Patch by adf88, #6583) --- src/landscape.cpp | 51 +++++++++++++++++++++++++++++++++ src/landscape.h | 3 ++ src/smallmap_gui.cpp | 6 ++-- src/viewport.cpp | 68 ++++++++++---------------------------------- 4 files changed, 72 insertions(+), 56 deletions(-) diff --git a/src/landscape.cpp b/src/landscape.cpp index 18f27807d7..eb1e404f0c 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -89,6 +89,57 @@ extern const byte _slope_to_sprite_offset[32] = { */ static SnowLine *_snow_line = NULL; +/** + * Map 2D viewport or smallmap coordinate to 3D world or tile coordinate. + * Function takes into account height of tiles and foundations. + * + * @param x X viewport 2D coordinate. + * @param y Y viewport 2D coordinate. + * @param clamp_to_map Clamp the coordinate outside of the map to the closest, non-void tile within the map. + * @return 3D world coordinate of point visible at the given screen coordinate (3D perspective). + * + * @note Inverse of #RemapCoords2 function. Smaller values may get rounded. + * @see InverseRemapCoords + */ +Point InverseRemapCoords2(int x, int y, bool clamp_to_map) +{ + /* Initial x/y world coordinate is like if the landscape + * was completely flat on height 0. */ + Point pt = InverseRemapCoords(x, y); + + const uint min_coord = _settings_game.construction.freeform_edges ? TILE_SIZE : 0; + const uint max_x = MapMaxX() * TILE_SIZE - 1; + const uint max_y = MapMaxY() * TILE_SIZE - 1; + + if (clamp_to_map) { + /* Bring the coordinates near to a valid range. At the top we allow a number + * of extra tiles. This is mostly due to the tiles on the north side of + * the map possibly being drawn higher due to the extra height levels. */ + int extra_tiles = CeilDiv(_settings_game.construction.max_heightlevel * TILE_HEIGHT, TILE_PIXELS); + pt.x = Clamp(pt.x, -extra_tiles * TILE_SIZE, max_x); + pt.y = Clamp(pt.y, -extra_tiles * TILE_SIZE, max_y); + } + + /* Now find the Z-world coordinate by fix point iteration. + * This is a bit tricky because the tile height is non-continuous at foundations. + * The clicked point should be approached from the back, otherwise there are regions that are not clickable. + * (FOUNDATION_HALFTILE_LOWER on SLOPE_STEEP_S hides north halftile completely) + * So give it a z-malus of 4 in the first iterations. */ + int z = 0; + for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(pt.x + max(z, 4) - 4, min_coord, max_x), Clamp(pt.y + max(z, 4) - 4, min_coord, max_y)) / 2; + for (int m = 3; m > 0; m--) z = GetSlopePixelZ(Clamp(pt.x + max(z, m) - m, min_coord, max_x), Clamp(pt.y + max(z, m) - m, min_coord, max_y)) / 2; + for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(pt.x + z, min_coord, max_x), Clamp(pt.y + z, min_coord, max_y)) / 2; + + pt.x += z; + pt.y += z; + if (clamp_to_map) { + pt.x = Clamp(pt.x, min_coord, max_x); + pt.y = Clamp(pt.y, min_coord, max_y); + } + + return pt; +} + /** * Applies a foundation to a slope. * diff --git a/src/landscape.h b/src/landscape.h index cb08d9d9ec..cf366e09c9 100644 --- a/src/landscape.h +++ b/src/landscape.h @@ -108,6 +108,7 @@ static inline Point RemapCoords2(int x, int y) * @param y Y coordinate of the 2D coordinate. * @return X and Y components of equivalent world or tile coordinate. * @note Inverse of #RemapCoords function. Smaller values may get rounded. + * @see InverseRemapCoords2 */ static inline Point InverseRemapCoords(int x, int y) { @@ -115,6 +116,8 @@ static inline Point InverseRemapCoords(int x, int y) return pt; } +Point InverseRemapCoords2(int x, int y, bool clamp_to_map = false); + uint ApplyFoundationToSlope(Foundation f, Slope *s); /** * Applies a foundation to a slope. diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index df9fd2df23..10eeca5d36 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -923,8 +923,8 @@ void SmallMapWindow::DrawMapIndicators() const /* Find main viewport. */ const ViewPort *vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport; - Point upper_left_smallmap_coord = TranslateXYToTileCoord(vp, vp->left, vp->top, false); - Point lower_right_smallmap_coord = TranslateXYToTileCoord(vp, vp->left + vp->width - 1, vp->top + vp->height - 1, false); + Point upper_left_smallmap_coord = InverseRemapCoords2(vp->virtual_left, vp->virtual_top); + Point lower_right_smallmap_coord = InverseRemapCoords2(vp->virtual_left + vp->virtual_width - 1, vp->virtual_top + vp->virtual_height - 1); Point upper_left = this->RemapTile(upper_left_smallmap_coord.x / (int)TILE_SIZE, upper_left_smallmap_coord.y / (int)TILE_SIZE); upper_left.x -= this->subscroll; @@ -1645,7 +1645,7 @@ void SmallMapWindow::SetNewScroll(int sx, int sy, int sub) void SmallMapWindow::SmallMapCenterOnCurrentPos() { const ViewPort *vp = FindWindowById(WC_MAIN_WINDOW, 0)->viewport; - Point viewport_center = TranslateXYToTileCoord(vp, vp->left + vp->width / 2, vp->top + vp->height / 2); + Point viewport_center = InverseRemapCoords2(vp->virtual_left + vp->virtual_width / 2, vp->virtual_top + vp->virtual_height / 2); int sub; const NWidgetBase *wid = this->GetWidget(WID_SM_MAP); diff --git a/src/viewport.cpp b/src/viewport.cpp index 5e72aaa23e..da1085161d 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -399,65 +399,27 @@ ViewPort *IsPtInWindowViewport(const Window *w, int x, int y) } /** - * Translate screen coordinate in a viewport to a tile coordinate + * Translate screen coordinate in a viewport to underlying tile coordinate. + * + * Returns exact point of the map that is visible in the given place + * of the viewport (3D perspective), height of tiles and foundations matter. + * * @param vp Viewport that contains the (\a x, \a y) screen coordinate - * @param x Screen x coordinate - * @param y Screen y coordinate - * @param clamp_to_map Clamp the coordinate outside of the map to the closest tile within the map. - * @return Tile coordinate + * @param x Screen x coordinate, distance in pixels from the left edge of viewport frame + * @param y Screen y coordinate, distance in pixels from the top edge of viewport frame + * @param clamp_to_map Clamp the coordinate outside of the map to the closest, non-void tile within the map + * @return Tile coordinate or (-1, -1) if given x or y is not within viewport frame */ Point TranslateXYToTileCoord(const ViewPort *vp, int x, int y, bool clamp_to_map) { - Point pt; - int a, b; - int z; - - if ( (uint)(x -= vp->left) >= (uint)vp->width || - (uint)(y -= vp->top) >= (uint)vp->height) { - Point pt = {-1, -1}; - return pt; + if (!IsInsideBS(x, vp->left, vp->width) || !IsInsideBS(y, vp->top, vp->height)) { + Point pt = { -1, -1 }; + return pt; } - x = (ScaleByZoom(x, vp->zoom) + vp->virtual_left) >> (2 + ZOOM_LVL_SHIFT); - y = (ScaleByZoom(y, vp->zoom) + vp->virtual_top) >> (1 + ZOOM_LVL_SHIFT); - - a = y - x; - b = y + x; - - if (clamp_to_map) { - /* Bring the coordinates near to a valid range. This is mostly due to the - * tiles on the north side of the map possibly being drawn too high due to - * the extra height levels. So at the top we allow a number of extra tiles. - * This number is based on the tile height and pixels. */ - int extra_tiles = CeilDiv(_settings_game.construction.max_heightlevel * TILE_HEIGHT, TILE_PIXELS); - a = Clamp(a, -extra_tiles * TILE_SIZE, MapMaxX() * TILE_SIZE - 1); - b = Clamp(b, -extra_tiles * TILE_SIZE, MapMaxY() * TILE_SIZE - 1); - } - - /* (a, b) is the X/Y-world coordinate that belongs to (x,y) if the landscape would be completely flat on height 0. - * Now find the Z-world coordinate by fix point iteration. - * This is a bit tricky because the tile height is non-continuous at foundations. - * The clicked point should be approached from the back, otherwise there are regions that are not clickable. - * (FOUNDATION_HALFTILE_LOWER on SLOPE_STEEP_S hides north halftile completely) - * So give it a z-malus of 4 in the first iterations. - */ - z = 0; - - int min_coord = _settings_game.construction.freeform_edges ? TILE_SIZE : 0; - - for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(a + max(z, 4) - 4, min_coord, MapMaxX() * TILE_SIZE - 1), Clamp(b + max(z, 4) - 4, min_coord, MapMaxY() * TILE_SIZE - 1)) / 2; - for (int malus = 3; malus > 0; malus--) z = GetSlopePixelZ(Clamp(a + max(z, malus) - malus, min_coord, MapMaxX() * TILE_SIZE - 1), Clamp(b + max(z, malus) - malus, min_coord, MapMaxY() * TILE_SIZE - 1)) / 2; - for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(a + z, min_coord, MapMaxX() * TILE_SIZE - 1), Clamp(b + z, min_coord, MapMaxY() * TILE_SIZE - 1)) / 2; - - if (clamp_to_map) { - pt.x = Clamp(a + z, min_coord, MapMaxX() * TILE_SIZE - 1); - pt.y = Clamp(b + z, min_coord, MapMaxY() * TILE_SIZE - 1); - } else { - pt.x = a + z; - pt.y = b + z; - } - - return pt; + return InverseRemapCoords2( + ScaleByZoom(x - vp->left, vp->zoom) + vp->virtual_left, + ScaleByZoom(y - vp->top, vp->zoom) + vp->virtual_top, clamp_to_map); } /* When used for zooming, check area below current coordinates (x,y) From f744dea0ff7104a4ac9f1cfdc067caaf2c10acd0 Mon Sep 17 00:00:00 2001 From: "Johannes E. Krause" Date: Sun, 13 Jan 2019 20:54:21 +0100 Subject: [PATCH 228/622] Fix: jumping effect when scrolling viewport over bottom edge of the map (Patch by adf88, #6583) --- src/landscape.cpp | 9 ++- src/landscape.h | 2 +- src/viewport.cpp | 136 ++++++++-------------------------------------- 3 files changed, 33 insertions(+), 114 deletions(-) diff --git a/src/landscape.cpp b/src/landscape.cpp index eb1e404f0c..79b24baf72 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -96,13 +96,16 @@ static SnowLine *_snow_line = NULL; * @param x X viewport 2D coordinate. * @param y Y viewport 2D coordinate. * @param clamp_to_map Clamp the coordinate outside of the map to the closest, non-void tile within the map. + * @param[out] clamped Whether coordinates were clamped. * @return 3D world coordinate of point visible at the given screen coordinate (3D perspective). * * @note Inverse of #RemapCoords2 function. Smaller values may get rounded. * @see InverseRemapCoords */ -Point InverseRemapCoords2(int x, int y, bool clamp_to_map) +Point InverseRemapCoords2(int x, int y, bool clamp_to_map, bool *clamped) { + if (clamped != NULL) *clamped = false; // Not clamping yet. + /* Initial x/y world coordinate is like if the landscape * was completely flat on height 0. */ Point pt = InverseRemapCoords(x, y); @@ -116,8 +119,10 @@ Point InverseRemapCoords2(int x, int y, bool clamp_to_map) * of extra tiles. This is mostly due to the tiles on the north side of * the map possibly being drawn higher due to the extra height levels. */ int extra_tiles = CeilDiv(_settings_game.construction.max_heightlevel * TILE_HEIGHT, TILE_PIXELS); + Point old_pt = pt; pt.x = Clamp(pt.x, -extra_tiles * TILE_SIZE, max_x); pt.y = Clamp(pt.y, -extra_tiles * TILE_SIZE, max_y); + if (clamped != NULL) *clamped = (pt.x != old_pt.x) || (pt.y != old_pt.y); } /* Now find the Z-world coordinate by fix point iteration. @@ -133,8 +138,10 @@ Point InverseRemapCoords2(int x, int y, bool clamp_to_map) pt.x += z; pt.y += z; if (clamp_to_map) { + Point old_pt = pt; pt.x = Clamp(pt.x, min_coord, max_x); pt.y = Clamp(pt.y, min_coord, max_y); + if (clamped != NULL) *clamped = *clamped || (pt.x != old_pt.x) || (pt.y != old_pt.y); } return pt; diff --git a/src/landscape.h b/src/landscape.h index cf366e09c9..d24d0d190d 100644 --- a/src/landscape.h +++ b/src/landscape.h @@ -116,7 +116,7 @@ static inline Point InverseRemapCoords(int x, int y) return pt; } -Point InverseRemapCoords2(int x, int y, bool clamp_to_map = false); +Point InverseRemapCoords2(int x, int y, bool clamp_to_map = false, bool *clamped = NULL); uint ApplyFoundationToSlope(Foundation f, Slope *s); /** diff --git a/src/viewport.cpp b/src/viewport.cpp index da1085161d..7fe280a203 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1631,121 +1631,33 @@ void Window::DrawViewport() const } /** - * Continue criteria for the SearchMapEdge function. - * @param iter Value to check. - * @param iter_limit Maximum value for the iter - * @param sy Screen y coordinate calculated for the tile at hand - * @param sy_limit Limit to the screen y coordinate - * @return True when we should continue searching. + * Ensure that a given viewport has a valid scroll position. + * + * There must be a visible piece of the map in the center of the viewport. + * If there isn't, the viewport will be scrolled to nearest such location. + * + * @param vp The viewport. + * @param[in,out] scroll_x Viewport X scroll. + * @param[in,out] scroll_y Viewport Y scroll. */ -typedef bool ContinueMapEdgeSearch(int iter, int iter_limit, int sy, int sy_limit); - -/** Continue criteria for searching a no-longer-visible tile in negative direction, starting at some tile. */ -static inline bool ContinueLowerMapEdgeSearch(int iter, int iter_limit, int sy, int sy_limit) { return iter > 0 && sy > sy_limit; } -/** Continue criteria for searching a no-longer-visible tile in positive direction, starting at some tile. */ -static inline bool ContinueUpperMapEdgeSearch(int iter, int iter_limit, int sy, int sy_limit) { return iter < iter_limit && sy < sy_limit; } - -/** - * Searches, starting at the given tile, by applying the given offset to iter, for a no longer visible tile. - * The whole sense of this function is keeping the to-be-written code small, thus it is a little bit abstracted - * so the same function can be used for both the X and Y locations. As such a reference to one of the elements - * in curr_tile was needed. - * @param curr_tile A tile - * @param iter Reference to either the X or Y of curr_tile. - * @param iter_limit Upper search limit for the iter value. - * @param offset Search in steps of this size - * @param sy_limit Search limit to be passed to the criteria - * @param continue_criteria Search as long as this criteria is true - * @return The final value of iter. - */ -static int SearchMapEdge(Point &curr_tile, int &iter, int iter_limit, int offset, int sy_limit, ContinueMapEdgeSearch continue_criteria) +static inline void ClampViewportToMap(const ViewPort *vp, int *scroll_x, int *scroll_y) { - int sy; - do { - iter = Clamp(iter + offset, 0, iter_limit); - sy = GetViewportY(curr_tile); - } while (continue_criteria(iter, iter_limit, sy, sy_limit)); + /* Centre of the viewport is hot spot. */ + Point pt = { + *scroll_x + vp->virtual_width / 2, + *scroll_y + vp->virtual_height / 2 + }; - return iter; -} + /* Find nearest tile that is within borders of the map. */ + bool clamped; + pt = InverseRemapCoords2(pt.x, pt.y, true, &clamped); -/** - * Determine the clamping of either the X or Y coordinate to the map. - * @param curr_tile A tile - * @param iter Reference to either the X or Y of curr_tile. - * @param iter_limit Upper search limit for the iter value. - * @param start Start value for the iteration. - * @param other_ref Reference to the opposite axis in curr_tile than of iter. - * @param other_value Start value for of the opposite axis - * @param vp_value Value of the viewport location in the opposite axis as for iter. - * @param other_limit Limit for the other value, so if iter is X, then other_limit is for Y. - * @param vp_top Top of the viewport. - * @param vp_bottom Bottom of the viewport. - * @return Clamped version of vp_value. - */ -static inline int ClampXYToMap(Point &curr_tile, int &iter, int iter_limit, int start, int &other_ref, int other_value, int vp_value, int other_limit, int vp_top, int vp_bottom) -{ - bool upper_edge = other_value < _settings_game.construction.max_heightlevel / 4; - - /* - * First get an estimate of the tiles relevant for us at that edge. Relevant in the sense - * "at least close to the visible area". Thus, we don't look at exactly each tile, inspecting - * e.g. every tenth should be enough. After all, the desired screen limit is set such that - * the bordermost tiles are painted in the middle of the screen when one hits the limit, - * i.e. it is no harm if there is some small error in that calculation - */ - - other_ref = upper_edge ? 0 : other_limit; - iter = start; - int min_iter = SearchMapEdge(curr_tile, iter, iter_limit, upper_edge ? -10 : +10, vp_top, upper_edge ? ContinueLowerMapEdgeSearch : ContinueUpperMapEdgeSearch); - iter = start; - int max_iter = SearchMapEdge(curr_tile, iter, iter_limit, upper_edge ? +10 : -10, vp_bottom, upper_edge ? ContinueUpperMapEdgeSearch : ContinueLowerMapEdgeSearch); - - max_iter = min(max_iter + _settings_game.construction.max_heightlevel / 4, iter_limit); - min_iter = min(min_iter, max_iter); - - /* Now, calculate the highest heightlevel of these tiles. Again just as an estimate. */ - int max_heightlevel_at_edge = 0; - for (iter = min_iter; iter <= max_iter; iter += 10) { - max_heightlevel_at_edge = max(max_heightlevel_at_edge, (int)TileHeight(TileXY(curr_tile.x, curr_tile.y))); + if (clamped) { + /* Convert back to viewport coordinates and remove centering. */ + pt = RemapCoords2(pt.x, pt.y); + *scroll_x = pt.x - vp->virtual_width / 2; + *scroll_y = pt.y - vp->virtual_height / 2; } - - /* Based on that heightlevel, calculate the limit. For the upper edge a tile with height zero would - * get a limit of zero, on the other side it depends on the number of tiles along the axis. */ - return upper_edge ? - max(vp_value, -max_heightlevel_at_edge * (int)(TILE_HEIGHT * 2 * ZOOM_LVL_BASE)) : - min(vp_value, (other_limit * TILE_SIZE * 4 - max_heightlevel_at_edge * TILE_HEIGHT * 2) * ZOOM_LVL_BASE); -} - -static inline void ClampViewportToMap(const ViewPort *vp, int &x, int &y) -{ - int original_y = y; - - /* Centre of the viewport is hot spot */ - x += vp->virtual_width / 2; - y += vp->virtual_height / 2; - - /* Convert viewport coordinates to map coordinates - * Calculation is scaled by 4 to avoid rounding errors */ - int vx = -x + y * 2; - int vy = x + y * 2; - - /* Find out which tile corresponds to (vx,vy) if one assumes height zero. The cast is necessary to prevent C++ from - * converting the result to an uint, which gives an overflow instead of a negative result... */ - int tx = vx / (int)(TILE_SIZE * 4 * ZOOM_LVL_BASE); - int ty = vy / (int)(TILE_SIZE * 4 * ZOOM_LVL_BASE); - - Point curr_tile; - vx = ClampXYToMap(curr_tile, curr_tile.y, MapMaxY(), ty, curr_tile.x, tx, vx, MapMaxX(), original_y, original_y + vp->virtual_height); - vy = ClampXYToMap(curr_tile, curr_tile.x, MapMaxX(), tx, curr_tile.y, ty, vy, MapMaxY(), original_y, original_y + vp->virtual_height); - - /* Convert map coordinates to viewport coordinates */ - x = (-vx + vy) / 2; - y = ( vx + vy) / 4; - - /* Remove centering */ - x -= vp->virtual_width / 2; - y -= vp->virtual_height / 2; } /** @@ -1765,7 +1677,7 @@ void UpdateViewportPosition(Window *w) SetViewportPosition(w, pt.x, pt.y); } else { /* Ensure the destination location is within the map */ - ClampViewportToMap(vp, w->viewport->dest_scrollpos_x, w->viewport->dest_scrollpos_y); + ClampViewportToMap(vp, &w->viewport->dest_scrollpos_x, &w->viewport->dest_scrollpos_y); int delta_x = w->viewport->dest_scrollpos_x - w->viewport->scrollpos_x; int delta_y = w->viewport->dest_scrollpos_y - w->viewport->scrollpos_y; @@ -1785,7 +1697,7 @@ void UpdateViewportPosition(Window *w) w->viewport->scrollpos_y == w->viewport->dest_scrollpos_y); } - ClampViewportToMap(vp, w->viewport->scrollpos_x, w->viewport->scrollpos_y); + ClampViewportToMap(vp, &w->viewport->scrollpos_x, &w->viewport->scrollpos_y); SetViewportPosition(w, w->viewport->scrollpos_x, w->viewport->scrollpos_y); if (update_overlay) RebuildViewportOverlay(w); From 05da5a177c7e976d5da0da541a842482ab23017d Mon Sep 17 00:00:00 2001 From: "Johannes E. Krause" Date: Sun, 13 Jan 2019 20:56:10 +0100 Subject: [PATCH 229/622] Codechange: Simplify marking tiles dirty when terraforming (Patch by adf88, #6583) --- src/terraform_cmd.cpp | 93 ++++--------------------------------------- src/viewport.cpp | 21 ++-------- src/viewport_func.h | 15 +++++-- 3 files changed, 23 insertions(+), 106 deletions(-) diff --git a/src/terraform_cmd.cpp b/src/terraform_cmd.cpp index aad9822822..5b476da18e 100644 --- a/src/terraform_cmd.cpp +++ b/src/terraform_cmd.cpp @@ -309,6 +309,14 @@ CommandCost CmdTerraformLand(TileIndex tile, DoCommandFlag flags, uint32 p1, uin } if (flags & DC_EXEC) { + /* Mark affected areas dirty. */ + for (TileIndexSet::const_iterator it = ts.dirty_tiles.begin(); it != ts.dirty_tiles.end(); it++) { + MarkTileDirtyByTile(*it); + TileIndexToHeightMap::const_iterator new_height = ts.tile_to_new_height.find(tile); + if (new_height != ts.tile_to_new_height.end()) continue; + MarkTileDirtyByTile(*it, 0, new_height->second); + } + /* change the height */ for (TileIndexToHeightMap::const_iterator it = ts.tile_to_new_height.begin(); it != ts.tile_to_new_height.end(); it++) { @@ -318,91 +326,6 @@ CommandCost CmdTerraformLand(TileIndex tile, DoCommandFlag flags, uint32 p1, uin SetTileHeight(tile, (uint)height); } - /* Finally mark the dirty tiles dirty */ - for (TileIndexSet::const_iterator it = ts.dirty_tiles.begin(); it != ts.dirty_tiles.end(); it++) { - MarkTileDirtyByTile(*it); - - int height = TerraformGetHeightOfTile(&ts, *it); - - /* Now, if we alter the height of the map edge, we need to take care - * about repainting the affected areas outside map as well. - * Remember: - * Outside map, we assume that our landscape descends to - * height zero as fast as possible. - * Those simulated tiles (they don't exist as datastructure, - * only as concept in code) need to be repainted properly, - * otherwise we will get ugly glitches. - * - * Furthermore, note that we have to take care about the possibility, - * that landscape was higher before the change, - * so also tiles a bit outside need to be repainted. - */ - int x = TileX(*it); - int y = TileY(*it); - if (x == 0) { - if (y == 0) { - /* Height of the northern corner is altered. */ - for (int cx = 0; cx >= -height - 1; cx--) { - for (int cy = 0; cy >= -height - 1; cy--) { - /* This means, tiles in the sector north of that - * corner need to be repainted. - */ - if (cx + cy >= -height - 2) { - /* But only tiles that actually might have changed. */ - MarkTileDirtyByTileOutsideMap(cx, cy); - } - } - } - } else if (y < (int)MapMaxY()) { - for (int cx = 0; cx >= -height - 1; cx--) { - MarkTileDirtyByTileOutsideMap(cx, y); - } - } else { - for (int cx = 0; cx >= -height - 1; cx--) { - for (int cy = (int)MapMaxY(); cy <= (int)MapMaxY() + height + 1; cy++) { - if (cx + ((int)MapMaxY() - cy) >= -height - 2) { - MarkTileDirtyByTileOutsideMap(cx, cy); - } - } - } - } - } else if (x < (int)MapMaxX()) { - if (y == 0) { - for (int cy = 0; cy >= -height - 1; cy--) { - MarkTileDirtyByTileOutsideMap(x, cy); - } - } else if (y < (int)MapMaxY()) { - /* Nothing to be done here, we are inside the map. */ - } else { - for (int cy = (int)MapMaxY(); cy <= (int)MapMaxY() + height + 1; cy++) { - MarkTileDirtyByTileOutsideMap(x, cy); - } - } - } else { - if (y == 0) { - for (int cx = (int)MapMaxX(); cx <= (int)MapMaxX() + height + 1; cx++) { - for (int cy = 0; cy >= -height - 1; cy--) { - if (((int)MapMaxX() - cx) + cy >= -height - 2) { - MarkTileDirtyByTileOutsideMap(cx, cy); - } - } - } - } else if (y < (int)MapMaxY()) { - for (int cx = (int)MapMaxX(); cx <= (int)MapMaxX() + height + 1; cx++) { - MarkTileDirtyByTileOutsideMap(cx, y); - } - } else { - for (int cx = (int)MapMaxX(); cx <= (int)MapMaxX() + height + 1; cx++) { - for (int cy = (int)MapMaxY(); cy <= (int)MapMaxY() + height + 1; cy++) { - if (((int)MapMaxX() - cx) + ((int)MapMaxY() - cy) >= -height - 2) { - MarkTileDirtyByTileOutsideMap(cx, cy); - } - } - } - } - } - } - if (c != NULL) c->terraform_limit -= (uint32)ts.tile_to_new_height.size() << 16; } return total_cost; diff --git a/src/viewport.cpp b/src/viewport.cpp index 7fe280a203..11a1587126 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1779,11 +1779,12 @@ void ConstrainAllViewportsZoom() * Mark a tile given by its index dirty for repaint. * @param tile The tile to mark dirty. * @param bridge_level_offset Height of bridge on tile to also mark dirty. (Height level relative to north corner.) + * @param tile_height_override Height of the tile (#TileHeight). * @ingroup dirty */ -void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset) +void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset, int tile_height_override) { - Point pt = RemapCoords(TileX(tile) * TILE_SIZE, TileY(tile) * TILE_SIZE, TilePixelHeight(tile)); + Point pt = RemapCoords(TileX(tile) * TILE_SIZE, TileY(tile) * TILE_SIZE, tile_height_override * TILE_HEIGHT); MarkAllViewportsDirty( pt.x - MAX_TILE_EXTENT_LEFT, pt.y - MAX_TILE_EXTENT_TOP - ZOOM_LVL_BASE * TILE_HEIGHT * bridge_level_offset, @@ -1791,22 +1792,6 @@ void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset) pt.y + MAX_TILE_EXTENT_BOTTOM); } -/** - * Mark a (virtual) tile outside the map dirty for repaint. - * @param x Tile X position. - * @param y Tile Y position. - * @ingroup dirty - */ -void MarkTileDirtyByTileOutsideMap(int x, int y) -{ - Point pt = RemapCoords(x * TILE_SIZE, y * TILE_SIZE, TilePixelHeightOutsideMap(x, y)); - MarkAllViewportsDirty( - pt.x - MAX_TILE_EXTENT_LEFT, - pt.y, // no buildings outside of map - pt.x + MAX_TILE_EXTENT_RIGHT, - pt.y + MAX_TILE_EXTENT_BOTTOM); -} - /** * Marks the selected tiles as dirty. * diff --git a/src/viewport_func.h b/src/viewport_func.h index cbdcc5019a..319d4efd60 100644 --- a/src/viewport_func.h +++ b/src/viewport_func.h @@ -15,7 +15,7 @@ #include "gfx_type.h" #include "viewport_type.h" #include "window_type.h" -#include "tile_type.h" +#include "tile_map.h" #include "station_type.h" static const int TILE_HEIGHT_STEP = 50; ///< One Z unit tile height difference is displayed as 50m. @@ -78,9 +78,18 @@ void UpdateAllVirtCoords(); extern Point _tile_fract_coords; -void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset = 0); +void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset, int tile_height_override); -void MarkTileDirtyByTileOutsideMap(int x, int y); +/** + * Mark a tile given by its index dirty for repaint. + * @param tile The tile to mark dirty. + * @param bridge_level_offset Height of bridge on tile to also mark dirty. (Height level relative to north corner.) + * @ingroup dirty + */ +static inline void MarkTileDirtyByTile(TileIndex tile, int bridge_level_offset = 0) +{ + MarkTileDirtyByTile(tile, bridge_level_offset, TileHeight(tile)); +} Point GetViewportStationMiddle(const ViewPort *vp, const Station *st); From c33596fe4af59213a8a6119fee61a75ed91abdc4 Mon Sep 17 00:00:00 2001 From: "Johannes E. Krause" Date: Sun, 13 Jan 2019 20:58:48 +0100 Subject: [PATCH 230/622] Codechange: Unify tile height model in all functions (Patch by adf88, #6583) --- src/landscape.cpp | 29 +++++++++-- src/landscape.h | 1 + src/tile_map.cpp | 126 +++++++++++++--------------------------------- src/tile_map.h | 21 +++++--- src/void_cmd.cpp | 9 +++- 5 files changed, 85 insertions(+), 101 deletions(-) diff --git a/src/landscape.cpp b/src/landscape.cpp index 79b24baf72..991a445ad8 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -131,9 +131,15 @@ Point InverseRemapCoords2(int x, int y, bool clamp_to_map, bool *clamped) * (FOUNDATION_HALFTILE_LOWER on SLOPE_STEEP_S hides north halftile completely) * So give it a z-malus of 4 in the first iterations. */ int z = 0; - for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(pt.x + max(z, 4) - 4, min_coord, max_x), Clamp(pt.y + max(z, 4) - 4, min_coord, max_y)) / 2; - for (int m = 3; m > 0; m--) z = GetSlopePixelZ(Clamp(pt.x + max(z, m) - m, min_coord, max_x), Clamp(pt.y + max(z, m) - m, min_coord, max_y)) / 2; - for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(pt.x + z, min_coord, max_x), Clamp(pt.y + z, min_coord, max_y)) / 2; + if (clamp_to_map) { + for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(pt.x + max(z, 4) - 4, min_coord, max_x), Clamp(pt.y + max(z, 4) - 4, min_coord, max_y)) / 2; + for (int m = 3; m > 0; m--) z = GetSlopePixelZ(Clamp(pt.x + max(z, m) - m, min_coord, max_x), Clamp(pt.y + max(z, m) - m, min_coord, max_y)) / 2; + for (int i = 0; i < 5; i++) z = GetSlopePixelZ(Clamp(pt.x + z, min_coord, max_x), Clamp(pt.y + z, min_coord, max_y)) / 2; + } else { + for (int i = 0; i < 5; i++) z = GetSlopePixelZOutsideMap(pt.x + max(z, 4) - 4, pt.y + max(z, 4) - 4) / 2; + for (int m = 3; m > 0; m--) z = GetSlopePixelZOutsideMap(pt.x + max(z, m) - m, pt.y + max(z, m) - m) / 2; + for (int i = 0; i < 5; i++) z = GetSlopePixelZOutsideMap(pt.x + z, pt.y + z ) / 2; + } pt.x += z; pt.y += z; @@ -342,6 +348,23 @@ int GetSlopePixelZ(int x, int y) return _tile_type_procs[GetTileType(tile)]->get_slope_z_proc(tile, x, y); } +/** + * Return world \c z coordinate of a given point of a tile, + * also for tiles outside the map (virtual "black" tiles). + * + * @param x World X coordinate in tile "units", may be ouside the map. + * @param y World Y coordinate in tile "units", may be ouside the map. + * @return World Z coordinate at tile ground level, including slopes and foundations. + */ +int GetSlopePixelZOutsideMap(int x, int y) +{ + if (IsInsideBS(x, 0, MapSizeX() * TILE_SIZE) && IsInsideBS(y, 0, MapSizeY() * TILE_SIZE)) { + return GetSlopePixelZ(x, y); + } else { + return _tile_type_procs[MP_VOID]->get_slope_z_proc(INVALID_TILE, x, y); + } +} + /** * Determine the Z height of a corner relative to TileZ. * diff --git a/src/landscape.h b/src/landscape.h index d24d0d190d..43d9e5f2e6 100644 --- a/src/landscape.h +++ b/src/landscape.h @@ -40,6 +40,7 @@ Slope GetFoundationSlope(TileIndex tile, int *z = NULL); uint GetPartialPixelZ(int x, int y, Slope corners); int GetSlopePixelZ(int x, int y); +int GetSlopePixelZOutsideMap(int x, int y); void GetSlopePixelZOnEdge(Slope tileh, DiagDirection edge, int *z1, int *z2); /** diff --git a/src/tile_map.cpp b/src/tile_map.cpp index 05b0ea1942..200a203089 100644 --- a/src/tile_map.cpp +++ b/src/tile_map.cpp @@ -14,60 +14,6 @@ #include "safeguards.h" -/** - * Returns the tile height for a coordinate outside map. Such a height is - * needed for painting the area outside map using completely black tiles. - * The idea is descending to heightlevel 0 as fast as possible. - * @param x The X-coordinate (same unit as TileX). - * @param y The Y-coordinate (same unit as TileY). - * @return The height in the same unit as TileHeight. - */ -uint TileHeightOutsideMap(int x, int y) -{ - /* In all cases: Descend to heightlevel 0 as fast as possible. - * So: If we are at the 0-side of the map (x<0 or y<0), we must - * subtract the distance to coordinate 0 from the heightlevel at - * coordinate 0. - * In other words: Subtract e.g. -x. If we are at the MapMax - * side of the map, we also need to subtract the distance to - * the edge of map, e.g. MapMaxX - x. - * - * NOTE: Assuming constant heightlevel outside map would be - * simpler here. However, then we run into painting problems, - * since whenever a heightlevel change at the map border occurs, - * we would need to repaint anything outside map. - * In contrast, by doing it this way, we can localize this change, - * which means we may assume constant heightlevel for all tiles - * at more than distance from the - * map border. - */ - if (x < 0) { - if (y < 0) { - return max((int)TileHeight(TileXY(0, 0)) - (-x) - (-y), 0); - } else if (y < (int)MapMaxY()) { - return max((int)TileHeight(TileXY(0, y)) - (-x), 0); - } else { - return max((int)TileHeight(TileXY(0, (int)MapMaxY())) - (-x) - (y - (int)MapMaxY()), 0); - } - } else if (x < (int)MapMaxX()) { - if (y < 0) { - return max((int)TileHeight(TileXY(x, 0)) - (-y), 0); - } else if (y < (int)MapMaxY()) { - return TileHeight(TileXY(x, y)); - } else { - return max((int)TileHeight(TileXY(x, (int)MapMaxY())) - (y - (int)MapMaxY()), 0); - } - } else { - if (y < 0) { - return max((int)TileHeight(TileXY((int)MapMaxX(), 0)) - (x - (int)MapMaxX()) - (-y), 0); - } else if (y < (int)MapMaxY()) { - return max((int)TileHeight(TileXY((int)MapMaxX(), y)) - (x - (int)MapMaxX()), 0); - } else { - return max((int)TileHeight(TileXY((int)MapMaxX(), (int)MapMaxY())) - (x - (int)MapMaxX()) - (y - (int)MapMaxY()), 0); - } - } -} - /** * Get a tile's slope given the heigh of its four corners. * @param hnorth The height at the northern corner in the same unit as TileHeight. @@ -114,30 +60,26 @@ static Slope GetTileSlopeGivenHeight(int hnorth, int hwest, int heast, int hsout */ Slope GetTileSlope(TileIndex tile, int *h) { - assert(tile < MapSize()); + uint x1 = TileX(tile); + uint y1 = TileY(tile); + uint x2 = min(x1 + 1, MapMaxX()); + uint y2 = min(y1 + 1, MapMaxY()); - uint x = TileX(tile); - uint y = TileY(tile); - if (x == MapMaxX() || y == MapMaxY()) { - if (h != NULL) *h = TileHeight(tile); - return SLOPE_FLAT; - } - - int hnorth = TileHeight(tile); // Height of the North corner. - int hwest = TileHeight(tile + TileDiffXY(1, 0)); // Height of the West corner. - int heast = TileHeight(tile + TileDiffXY(0, 1)); // Height of the East corner. - int hsouth = TileHeight(tile + TileDiffXY(1, 1)); // Height of the South corner. + int hnorth = TileHeight(tile); // Height of the North corner. + int hwest = TileHeight(TileXY(x2, y1)); // Height of the West corner. + int heast = TileHeight(TileXY(x1, y2)); // Height of the East corner. + int hsouth = TileHeight(TileXY(x2, y2)); // Height of the South corner. return GetTileSlopeGivenHeight(hnorth, hwest, heast, hsouth, h); } /** - * Return the slope of a given tile outside the map. + * Return the slope of a given tile, also for tiles outside the map (virtual "black" tiles). * - * @param x X-coordinate of the tile outside to compute height of. - * @param y Y-coordinate of the tile outside to compute height of. - * @param h If not \c NULL, pointer to storage of z height. - * @return Slope of the tile outside map, except for the HALFTILE part. + * @param x X coordinate of the tile to compute slope of, may be ouside the map. + * @param y Y coordinate of the tile to compute slope of, may be ouside the map. + * @param h If not \c NULL, pointer to storage of z height. + * @return Slope of the tile, except for the HALFTILE part. */ Slope GetTilePixelSlopeOutsideMap(int x, int y, int *h) { @@ -159,17 +101,15 @@ Slope GetTilePixelSlopeOutsideMap(int x, int y, int *h) */ bool IsTileFlat(TileIndex tile, int *h) { - assert(tile < MapSize()); - - if (!IsInnerTile(tile)) { - if (h != NULL) *h = TileHeight(tile); - return true; - } + uint x1 = TileX(tile); + uint y1 = TileY(tile); + uint x2 = min(x1 + 1, MapMaxX()); + uint y2 = min(y1 + 1, MapMaxY()); uint z = TileHeight(tile); - if (TileHeight(tile + TileDiffXY(1, 0)) != z) return false; - if (TileHeight(tile + TileDiffXY(0, 1)) != z) return false; - if (TileHeight(tile + TileDiffXY(1, 1)) != z) return false; + if (TileHeight(TileXY(x2, y1)) != z) return false; + if (TileHeight(TileXY(x1, y2)) != z) return false; + if (TileHeight(TileXY(x2, y2)) != z) return false; if (h != NULL) *h = z; return true; @@ -182,12 +122,15 @@ bool IsTileFlat(TileIndex tile, int *h) */ int GetTileZ(TileIndex tile) { - if (TileX(tile) == MapMaxX() || TileY(tile) == MapMaxY()) return 0; + uint x1 = TileX(tile); + uint y1 = TileY(tile); + uint x2 = min(x1 + 1, MapMaxX()); + uint y2 = min(y1 + 1, MapMaxY()); - int h = TileHeight(tile); // N corner - h = min(h, TileHeight(tile + TileDiffXY(1, 0))); // W corner - h = min(h, TileHeight(tile + TileDiffXY(0, 1))); // E corner - h = min(h, TileHeight(tile + TileDiffXY(1, 1))); // S corner + int h = TileHeight(tile); // N corner + h = min(h, TileHeight(TileXY(x2, y1))); // W corner + h = min(h, TileHeight(TileXY(x1, y2))); // E corner + h = min(h, TileHeight(TileXY(x2, y2))); // S corner return h; } @@ -199,12 +142,15 @@ int GetTileZ(TileIndex tile) */ int GetTileMaxZ(TileIndex t) { - if (TileX(t) == MapMaxX() || TileY(t) == MapMaxY()) return TileHeightOutsideMap(TileX(t), TileY(t)); + uint x1 = TileX(t); + uint y1 = TileY(t); + uint x2 = min(x1 + 1, MapMaxX()); + uint y2 = min(y1 + 1, MapMaxY()); - int h = TileHeight(t); // N corner - h = max(h, TileHeight(t + TileDiffXY(1, 0))); // W corner - h = max(h, TileHeight(t + TileDiffXY(0, 1))); // E corner - h = max(h, TileHeight(t + TileDiffXY(1, 1))); // S corner + int h = TileHeight(t); // N corner + h = max(h, TileHeight(TileXY(x2, y1))); // W corner + h = max(h, TileHeight(TileXY(x1, y2))); // E corner + h = max(h, TileHeight(TileXY(x2, y2))); // S corner return h; } diff --git a/src/tile_map.h b/src/tile_map.h index 3fad368cd7..7a76f2b974 100644 --- a/src/tile_map.h +++ b/src/tile_map.h @@ -34,7 +34,17 @@ static inline uint TileHeight(TileIndex tile) return _m[tile].height; } -uint TileHeightOutsideMap(int x, int y); +/** + * Returns the height of a tile, also for tiles outside the map (virtual "black" tiles). + * + * @param x X coordinate of the tile, may be ouside the map. + * @param y Y coordinate of the tile, may be ouside the map. + * @return The height in the same unit as TileHeight. + */ +static inline uint TileHeightOutsideMap(int x, int y) +{ + return TileHeight(TileXY(Clamp(x, 0, MapMaxX()), Clamp(y, 0, MapMaxY()))); +} /** * Sets the height of a tile. @@ -67,11 +77,10 @@ static inline uint TilePixelHeight(TileIndex tile) } /** - * Returns the tile height for a coordinate outside map. Such a height is - * needed for painting the area outside map using completely black tiles. - * The idea is descending to heightlevel 0 as fast as possible. - * @param x The X-coordinate (same unit as TileX). - * @param y The Y-coordinate (same unit as TileY). + * Returns the height of a tile in pixels, also for tiles outside the map (virtual "black" tiles). + * + * @param x X coordinate of the tile, may be ouside the map. + * @param y Y coordinate of the tile, may be ouside the map. * @return The height in pixels in the same unit as TilePixelHeight. */ static inline uint TilePixelHeightOutsideMap(int x, int y) diff --git a/src/void_cmd.cpp b/src/void_cmd.cpp index ffe54df992..a2a45e7227 100644 --- a/src/void_cmd.cpp +++ b/src/void_cmd.cpp @@ -10,7 +10,7 @@ /** @file void_cmd.cpp Handling of void tiles. */ #include "stdafx.h" -#include "tile_cmd.h" +#include "landscape.h" #include "command_func.h" #include "viewport_func.h" #include "slope_func.h" @@ -28,7 +28,12 @@ static void DrawTile_Void(TileInfo *ti) static int GetSlopePixelZ_Void(TileIndex tile, uint x, uint y) { - return TilePixelHeight(tile); + /* This function may be called on tiles outside the map, don't asssume + * that 'tile' is a valid tile index. See GetSlopePixelZOutsideMap. */ + int z; + Slope tileh = GetTilePixelSlopeOutsideMap(x >> 4, y >> 4, &z); + + return z + GetPartialPixelZ(x & 0xF, y & 0xF, tileh); } static Foundation GetFoundation_Void(TileIndex tile, Slope tileh) From 479f13fc4133f2970aff82d2d0fb9b3c0cb919da Mon Sep 17 00:00:00 2001 From: "Johannes E. Krause" Date: Sun, 13 Jan 2019 21:00:40 +0100 Subject: [PATCH 231/622] Codechange: Tweak ViewportAddLandscape so it no more relies on "go down as fast as possible" tile height model (Patch by adf88, #6583) --- src/viewport.cpp | 170 +++++++++++++++++++++++------------------------ 1 file changed, 82 insertions(+), 88 deletions(-) diff --git a/src/viewport.cpp b/src/viewport.cpp index 11a1587126..cb4307f0af 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1044,29 +1044,41 @@ draw_inner: } /** - * Returns the y coordinate in the viewport coordinate system where the given - * tile is painted. - * @param tile Any tile. - * @return The viewport y coordinate where the tile is painted. + * Returns the Y coordinate in the viewport coordinate system where a given + * tile should be painted. Can be used on virtual "black" tiles outside map. + * + * @param tile Tile coordinates of the tile. Map outside is allowed. + * @return Viewport Y coordinate where the northern corner of the tile is located (foundations not included). */ -static int GetViewportY(Point tile) +static inline int GetTilePaintY(Point tile) { - /* Each increment in X or Y direction moves down by half a tile, i.e. TILE_PIXELS / 2. */ - return (tile.y * (int)(TILE_PIXELS / 2) + tile.x * (int)(TILE_PIXELS / 2) - TilePixelHeightOutsideMap(tile.x, tile.y)) << ZOOM_LVL_SHIFT; + return RemapCoords(tile.x * TILE_SIZE, tile.y * TILE_SIZE, TilePixelHeightOutsideMap(tile.x, tile.y)).y; } /** - * Add the landscape to the viewport, i.e. all ground tiles and buildings. + * Add sprites of a single tile to the viewport. + * + * @param[in,out] ti Filled-in tile information of the tile. On return, \a z coordinate will be updated and include foundations (if any). + * @param tile_type Type of the tile (#GetTileType) or #MP_VOID for virtual "black" tiles outside map. + */ +static void ViewportAddTile(TileInfo *ti, TileType tile_type) +{ + _vd.foundation_part = FOUNDATION_PART_NONE; + _vd.foundation[0] = -1; + _vd.foundation[1] = -1; + _vd.last_foundation_child[0] = NULL; + _vd.last_foundation_child[1] = NULL; + + _cur_ti = ti; + _tile_type_procs[tile_type]->draw_tile_proc(ti); +} + +/** + * Add the landscape to the viewport, i.e. all ground tiles, buildings and bridges. */ static void ViewportAddLandscape() { - assert(_vd.dpi.top <= _vd.dpi.top + _vd.dpi.height); - assert(_vd.dpi.left <= _vd.dpi.left + _vd.dpi.width); - - Point upper_left = InverseRemapCoords(_vd.dpi.left, _vd.dpi.top); - Point upper_right = InverseRemapCoords(_vd.dpi.left + _vd.dpi.width, _vd.dpi.top); - - /* Transformations between tile coordinates and viewport rows/columns: See vp_column_row + /* Transformations between tile x/y coordinates and 45-degree rotated rows/columns: * column = y - x * row = x + y * x = (row - column) / 2 @@ -1074,38 +1086,46 @@ static void ViewportAddLandscape() * Note: (row, columns) pairs are only valid, if they are both even or both odd. */ - /* Columns overlap with neighbouring columns by a half tile. - * - Left column is column of upper_left (rounded down) and one column to the left. - * - Right column is column of upper_right (rounded up) and one column to the right. - * Note: Integer-division does not round down for negative numbers, so ensure rounding with another increment/decrement. - */ - int left_column = (upper_left.y - upper_left.x) / (int)TILE_SIZE - 2; - int right_column = (upper_right.y - upper_right.x) / (int)TILE_SIZE + 2; + /* Rectangle to repaint. Includes oversize for tile sprites. + * There is no oversize for the bottom side of a tile so the first tile we draw + * in a column must have its northern corner above or at the 'top' bound. */ + const int left = _vd.dpi.left - MAX_TILE_EXTENT_RIGHT; // inclusive + const int top = _vd.dpi.top; // unlike to other bounds, this one is relative to S tile corner, not N, not inclusive (for S corner) + const int right = _vd.dpi.left + _vd.dpi.width + MAX_TILE_EXTENT_LEFT; // not inclusive + const int bottom_empty = _vd.dpi.top + _vd.dpi.height; // bottom bound for void tiles and tiles outside map, includes only clear ground sprites, not inclusive + const int bottom_building = bottom_empty + MAX_TILE_EXTENT_TOP; // bottom bound that accounts for buildings but does not include oversize for bridges, not inclusive + const int bottom = bottom_building + ZOOM_LVL_BASE * TILE_HEIGHT * _settings_game.construction.max_bridge_height; // bottom bound that includes entire oversize, also for bridges, not inclusive + assert(left < right && top < bottom); - int potential_bridge_height = ZOOM_LVL_BASE * TILE_HEIGHT * _settings_game.construction.max_bridge_height; + /* Base 2 logarithm of the distance between tile columns in a viewport. + * It will be used to achieve proper rounding easily. */ + assert_compile(TILE_SIZE == 1 << 4); + static const uint column_log = ZOOM_LVL_SHIFT + 4 + 1; // +1 comes from the factor 2 that is used when remapping to horizontal 'x' screen coordinate (see RemapCoords) - /* Rows overlap with neighbouring rows by a half tile. - * The first row that could possibly be visible is the row above upper_left (if it is at height 0). - * Due to integer-division not rounding down for negative numbers, we need another decrement. - */ - int row = (upper_left.x + upper_left.y) / (int)TILE_SIZE - 2; - bool last_row = false; - for (; !last_row; row++) { - last_row = true; - for (int column = left_column; column <= right_column; column++) { - /* Valid row/column? */ - if ((row + column) % 2 != 0) continue; + /* Horizontal iteration bounds. */ + int first_col = left >> column_log; // inclusive, round toward -inf + int last_col = -(-right >> column_log); // not inclusive, round toward +inf - Point tilecoord; - tilecoord.x = (row - column) / 2; - tilecoord.y = (row + column) / 2; - assert(column == tilecoord.y - tilecoord.x); - assert(row == tilecoord.y + tilecoord.x); + /* Use tile that intersects with the left-top corner of the repaint + * rectangle as an approximate start row of the iteration. */ + Point start = InverseRemapCoords2(left, top, false); // warning, it will take foundations into account, might return a tile that is further to S, but that's OK because coordinates will be moved toward N later if needed + int first_row = (start.x >> 4) + (start.y >> 4); + /* Combine with the first column, round toward S. */ + start.x = (first_row - first_col + 1) >> 1; + start.y = (first_row + first_col + 1) >> 1; + /* Iterate over columns of tiles. */ + while (first_col++ < last_col) { + /* Fix column start tile - move it toward N until it reaches the 'top' bound. */ + int y_pos; + while (top < (y_pos = GetTilePaintY(start))) start.x--, start.y--; + + /* Iterate over tiles in a column. */ + Point tilecoord = start; + do { TileType tile_type; TileInfo tile_info; - _cur_ti = &tile_info; - tile_info.x = tilecoord.x * TILE_SIZE; // FIXME tile_info should use signed integers + tile_info.x = tilecoord.x * TILE_SIZE; // FIXME: tile_info should use signed integers tile_info.y = tilecoord.y * TILE_SIZE; if (IsInsideBS(tilecoord.x, 0, MapSizeX()) && IsInsideBS(tilecoord.y, 0, MapSizeY())) { @@ -1117,58 +1137,32 @@ static void ViewportAddLandscape() tile_type = MP_VOID; } - if (tile_type != MP_VOID) { - /* We are inside the map => paint landscape. */ - tile_info.tileh = GetTilePixelSlope(tile_info.tile, &tile_info.z); - } else { - /* We are outside the map => paint black. */ - tile_info.tileh = GetTilePixelSlopeOutsideMap(tilecoord.x, tilecoord.y, &tile_info.z); - } + /* Check if tile is "visible". + * + * Until 'bottom_empty' every tile is visible, also "black" tiles outside map. + * Since 'bottom_empty' only tiles with a content might be visible. */ + if (y_pos >= bottom_empty) { + if (tilecoord.x >= (int)MapSizeX() || tilecoord.y >= (int)MapSizeY()) break; // No more non-void tiles in this column? Then stop. + if (tile_type == MP_VOID) continue; // No content on the tile? Then skip. - int viewport_y = GetViewportY(tilecoord); - - if (viewport_y + MAX_TILE_EXTENT_BOTTOM < _vd.dpi.top) { - /* The tile in this column is not visible yet. - * Tiles in other columns may be visible, but we need more rows in any case. */ - last_row = false; - continue; - } - - int min_visible_height = viewport_y - (_vd.dpi.top + _vd.dpi.height); - bool tile_visible = min_visible_height <= 0; - - if (tile_type != MP_VOID) { - /* Is tile with buildings visible? */ - if (min_visible_height < MAX_TILE_EXTENT_TOP) tile_visible = true; - - if (IsBridgeAbove(tile_info.tile)) { - /* Is the bridge visible? */ - TileIndex bridge_tile = GetNorthernBridgeEnd(tile_info.tile); - int bridge_height = ZOOM_LVL_BASE * (GetBridgePixelHeight(bridge_tile) - TilePixelHeight(tile_info.tile)); - if (min_visible_height < bridge_height + MAX_TILE_EXTENT_TOP) tile_visible = true; + /* Since 'bottom_building' only bridges might be visible. */ + if (y_pos >= bottom_building) { + if (!IsBridgeAbove(tile_info.tile)) continue; // no bridge above, skip + if (RemapCoords(tile_info.x, tile_info.y, GetBridgePixelHeight(GetNorthernBridgeEnd(tile_info.tile))).y >= bottom_building) continue; // bridge isn't high enough, skip } - - /* Would a higher bridge on a more southern tile be visible? - * If yes, we need to loop over more rows to possibly find one. */ - if (min_visible_height < potential_bridge_height + MAX_TILE_EXTENT_TOP) last_row = false; - } else { - /* Outside of map. If we are on the north border of the map, there may still be a bridge visible, - * so we need to loop over more rows to possibly find one. */ - if ((tilecoord.x <= 0 || tilecoord.y <= 0) && min_visible_height < potential_bridge_height + MAX_TILE_EXTENT_TOP) last_row = false; } - if (tile_visible) { - last_row = false; - _vd.foundation_part = FOUNDATION_PART_NONE; - _vd.foundation[0] = -1; - _vd.foundation[1] = -1; - _vd.last_foundation_child[0] = NULL; - _vd.last_foundation_child[1] = NULL; + /* Paint the tile. */ + tile_info.tileh = (tile_info.tile != INVALID_TILE) ? GetTilePixelSlope(tile_info.tile, &tile_info.z) : GetTilePixelSlopeOutsideMap(tilecoord.x, tilecoord.y, &tile_info.z); + ViewportAddTile(&tile_info, tile_type); + if (tile_info.tile != INVALID_TILE) DrawTileSelection(&tile_info); - _tile_type_procs[tile_type]->draw_tile_proc(&tile_info); - if (tile_info.tile != INVALID_TILE) DrawTileSelection(&tile_info); - } - } + /* Next tile. */ + } while (tilecoord.x++, tilecoord.y++, y_pos = GetTilePaintY(tilecoord), y_pos < bottom); + + /* Go one tile toward SE. This will advance us to next column. Bias toward S will + * take care of slopes too. Coordinates will be moved toward N later if needed. */ + start.y++; } } From 225790892d923eb208af3844f4c08606afab046a Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 20 May 2018 11:03:14 +0100 Subject: [PATCH 232/622] Change: Make ships stop and change direction slowly instead of instantly turning. --- src/saveload/saveload.cpp | 3 ++- src/saveload/vehicle_sl.cpp | 13 ++++++++++-- src/ship.h | 5 +++-- src/ship_cmd.cpp | 40 ++++++++++++++++++++++++++++++------- 4 files changed, 49 insertions(+), 12 deletions(-) diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 7f5b10ac52..29adb40c9b 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -273,8 +273,9 @@ * 201 #6885 Extend NewGRF persistant storages. * 202 #6867 Increase industry cargo slots to 16 in, 16 out * 203 #7072 Add path cache for ships + * 204 #7065 Add extra rotation stages for ships. */ -extern const uint16 SAVEGAME_VERSION = 203; ///< Current savegame version of OpenTTD. +extern const uint16 SAVEGAME_VERSION = 204; ///< Current savegame version of OpenTTD. SavegameType _savegame_type; ///< type of savegame we are loading FileToSaveLoad _file_to_saveload; ///< File to save or load in the openttd loop. diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 1e01f3f67e..76fd5af5a5 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -368,6 +368,14 @@ void AfterLoadVehicles(bool part_of_load) v->SetServiceIntervalIsPercent(c->settings.vehicle.servint_ispercent); } } + + if (IsSavegameVersionBefore(204)) { + /* Ship rotation added */ + Ship *s; + FOR_ALL_SHIPS(s) { + s->rotation = s->direction; + } + } } CheckValidVehicles(); @@ -753,8 +761,9 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) static const SaveLoad _ship_desc[] = { SLE_WRITEBYTE(Vehicle, type, VEH_SHIP), SLE_VEH_INCLUDE(), - SLE_VAR(Ship, state, SLE_UINT8), - SLE_CONDDEQUE(Ship, path, SLE_UINT8, 203, SL_MAX_VERSION), + SLE_VAR(Ship, state, SLE_UINT8), + SLE_CONDDEQUE(Ship, path, SLE_UINT8, 203, SL_MAX_VERSION), + SLE_CONDVAR(Ship, rotation, SLE_UINT8, 204, SL_MAX_VERSION), SLE_CONDNULL(16, 2, 143), // old reserved space diff --git a/src/ship.h b/src/ship.h index 6e73332a57..adbc322282 100644 --- a/src/ship.h +++ b/src/ship.h @@ -26,8 +26,9 @@ typedef std::deque ShipPathCache; * All ships have this type. */ struct Ship FINAL : public SpecializedVehicle { - TrackBitsByte state; ///< The "track" the ship is following. - ShipPathCache path; ///< Cached path. + TrackBitsByte state; ///< The "track" the ship is following. + ShipPathCache path; ///< Cached path. + DirectionByte rotation; ///< Visible direction. /** We don't want GCC to zero our struct! It already is zeroed and has an index! */ Ship() : SpecializedVehicleBase() {} diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index e3886aa34a..4603043d6e 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -129,6 +129,8 @@ void Ship::GetImage(Direction direction, EngineImageType image_type, VehicleSpri { uint8 spritenum = this->spritenum; + if (image_type == EIT_ON_MAP) direction = this->rotation; + if (is_custom_sprite(spritenum)) { GetCustomVehicleSprite(this, direction, image_type, result); if (result->IsValid()) return; @@ -311,7 +313,7 @@ void Ship::UpdateDeltaXY() {32, 6, -16, -3}, // NW }; - const int8 *bb = _delta_xy_table[this->direction]; + const int8 *bb = _delta_xy_table[this->rotation]; this->x_offs = bb[3]; this->y_offs = bb[2]; this->x_extent = bb[1]; @@ -370,10 +372,10 @@ static bool CheckShipLeaveDepot(Ship *v) if (north_tracks) { /* Leave towards north */ - v->direction = DiagDirToDir(north_dir); + v->rotation = v->direction = DiagDirToDir(north_dir); } else if (south_tracks) { /* Leave towards south */ - v->direction = DiagDirToDir(south_dir); + v->rotation = v->direction = DiagDirToDir(south_dir); } else { /* Both ways blocked */ return false; @@ -543,7 +545,6 @@ static void ShipController(Ship *v) { uint32 r; const byte *b; - Direction dir; Track track; TrackBits tracks; @@ -563,6 +564,16 @@ static void ShipController(Ship *v) v->ShowVisualEffect(); + /* Rotating on spot */ + if (v->direction != v->rotation) { + if ((v->tick_counter & 7) == 0) { + DirDiff diff = DirDifference(v->direction, v->rotation); + v->rotation = ChangeDir(v->rotation, diff > DIRDIFF_REVERSE ? DIRDIFF_45LEFT : DIRDIFF_45RIGHT); + v->UpdateViewport(true, true); + } + return; + } + if (!ShipAccelerate(v)) return; GetNewVehiclePosResult gp = GetNewVehiclePos(v); @@ -653,7 +664,22 @@ static void ShipController(Ship *v) if (old_wc != new_wc) v->UpdateCache(); } - v->direction = (Direction)b[2]; + Direction new_direction = (Direction)b[2]; + DirDiff diff = DirDifference(new_direction, v->direction); + switch (diff) { + case DIRDIFF_SAME: + case DIRDIFF_45RIGHT: + case DIRDIFF_45LEFT: + /* Continue at speed */ + v->rotation = v->direction = new_direction; + break; + + default: + /* Stop for rotation */ + v->cur_speed = 0; + v->direction = new_direction; + break; + } } } else { /* On a bridge */ @@ -677,8 +703,8 @@ getout: return; reverse_direction: - dir = ReverseDir(v->direction); - v->direction = dir; + v->direction = ReverseDir(v->direction); + v->cur_speed = 0; v->path.clear(); goto getout; } From 564077719affdb0678cde43d424f9675ec2471e2 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Thu, 24 Jan 2019 21:12:41 +0100 Subject: [PATCH 233/622] Add: [GitHub] enable probot/stale, to flush out stale issues/pull requests Stale bot checks if an issue hasn't had any attention in the last 60 days, or if a pull request hasn't had any attention in the last 30 days. If so, it marks it as stale. After 7 more days, it closes the issue/pull request. Any activity on the issue/pull request resets the timer. This helps keeping the counter low, and the work manageable. There is a lot of reasoning behind this idea, and other projects show it really helps to keep the issue/pull request count low. More information here: https://github.com/probot/stale --- .github/stale.yml | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 .github/stale.yml diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 0000000000..57d42d6921 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,34 @@ +daysUntilClose: 7 +staleLabel: stale +closeComment: false +exemptMilestones: true +exemptAssignees: true + +issues: + daysUntilStale: 60 + exemptLabels: + - pinned + - security + - "good first issue" + - regression + markComment: > + This issue has been automatically marked as stale because it has not had any activity in the last two months. + + If you believe the issue is still relevant, please test on the latest nightly and report back. + + It will be closed if no further activity occurs within 7 days. + + Thank you for your contributions. + +pulls: + daysUntilStale: 30 + exemptLabels: + - pinned + markComment: > + This pull request has been automatically marked as stale because it has not had any activity in the last month. + + Please feel free to give a status update now, ping for review, or re-open when it's ready. + + It will be closed if no further activity occurs within 7 days. + + Thank you for your contributions. From 4158c077cd9bba88096c3bf5b8727805f7e29369 Mon Sep 17 00:00:00 2001 From: Nikolas Nyby Date: Tue, 22 Jan 2019 17:05:38 -0500 Subject: [PATCH 234/622] Fix: Remove duplicate French and Slovak town names I've replaced some of the duplicate real town names with new real town names in the French and Slovak sets. Also, some Slovak town names were missing accents, so I've fixed those. --- src/table/townname.h | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/table/townname.h b/src/table/townname.h index ce4e961751..7680846841 100644 --- a/src/table/townname.h +++ b/src/table/townname.h @@ -758,7 +758,7 @@ static const char * const _name_french_real[] = { "Blois", "Troyes", "Charolles", - "Grenoble", + "Toulouse", "Chamb\xC3\xA9ry", "Tours", "St. Brieuc", @@ -769,7 +769,7 @@ static const char * const _name_french_real[] = { "Vichy", "St. Valery", "Beaujolais", - "Narbonne", + "Reims", "Albi", "Paris", "Biarritz", @@ -2037,8 +2037,8 @@ static const char * const _name_romanian_real[] = { static const char * const _name_slovak_real[] = { "Bratislava", "Banovce nad Bebravou", - "Banska Bystrica", - "Banska Stiavnica", + "Bansk\xC3\xA1 Bystrica", + "Bansk\xC3\xA1 \xC5\xA0tiavnica", "Bardejov", "Brezno", "Brezova pod Bradlom", @@ -2046,9 +2046,9 @@ static const char * const _name_slovak_real[] = { "Cadca", "Cierna nad Tisou", "Detva", - "Detva", - "Dolny Kubin", + "Pre\xC5\xA1ov", "Dolny Kubin", + "Spi\xC5\xA1sk\xC3\xA1 Nov\xC3\xA1 Ves", "Dunajska Streda", "Gabcikovo", "Galanta", @@ -2060,8 +2060,8 @@ static const char * const _name_slovak_real[] = { "Humenne", "Hurbanovo", "Kezmarok", - "Komarno", - "Kosice", + "Kom\xC3\xA1rno", + "Ko\xC5\xA1ice", "Kremnica", "Krompachy", "Kuty", @@ -2077,15 +2077,15 @@ static const char * const _name_slovak_real[] = { "Myjava", "Namestovo", "Nitra", - "Nova Bana", - "Nove Mesto nad Vahom", - "Nove Zamky", + "Nov\xC3\xA1 Ba\xC5\x88""a", + "Nov\xC3\xA9"" Mesto nad V\xC3\xA1hom", + "Nov\xC3\xA9"" Z\xC3\xA1""mky", "Partizanske", "Pezinok", "Piestany", "Poltar", "Poprad", - "Povazska Bystrica", + "Pova\xC5\xBEsk\xC3\xA1 Bystrica", "Prievidza", "Puchov", "Revuca", @@ -2119,7 +2119,7 @@ static const char * const _name_slovak_real[] = { "Zahorska Bystrica", "Zdiar", "Ziar nad Hronom", - "Zilina", + "\xC5\xBDilina", "Zlate Moravce", "Zvolen", }; From 255fa6e1a8586de75b33b9598467d47344ed6c5e Mon Sep 17 00:00:00 2001 From: glx Date: Fri, 25 Jan 2019 03:43:24 +0100 Subject: [PATCH 235/622] Fix: enable DPI-awareness for MINGW builds --- Makefile.src.in | 2 +- projects/dpi_aware.manifest | 28 +++++++++++++++++++++++++--- projects/os_versions.manifest | 2 +- src/os/windows/ottdres.rc.in | 6 +++++- 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/Makefile.src.in b/Makefile.src.in index c07015cfe8..e5a032d961 100644 --- a/Makefile.src.in +++ b/Makefile.src.in @@ -250,7 +250,7 @@ $(OBJS_MM): %.o: $(SRC_DIR)/%.mm $(DEP_MASK) $(FILE_DEP) $(OBJS_RC): %.o: $(SRC_DIR)/%.rc $(FILE_DEP) $(E) '$(STAGE) Compiling resource $(<:$(SRC_DIR)/%.rc=%.rc)' - $(Q)$(WINDRES) -o $@ -I `basename $<` $< + $(Q)$(WINDRES) -o $@ $< $(BIN_DIR)/$(TTD): $(TTD) $(Q)cp $(TTD) $(BIN_DIR)/$(TTD) diff --git a/projects/dpi_aware.manifest b/projects/dpi_aware.manifest index 6f04161596..ee1c7ea224 100644 --- a/projects/dpi_aware.manifest +++ b/projects/dpi_aware.manifest @@ -1,7 +1,29 @@ - + + + + + + + + + - - True/PM + + True/PM + + + + + + + + + + + + + + diff --git a/projects/os_versions.manifest b/projects/os_versions.manifest index 52ed17bcb9..c7905ee709 100644 --- a/projects/os_versions.manifest +++ b/projects/os_versions.manifest @@ -12,6 +12,6 @@ - + diff --git a/src/os/windows/ottdres.rc.in b/src/os/windows/ottdres.rc.in index 616d8bb3eb..ad51be76c6 100644 --- a/src/os/windows/ottdres.rc.in +++ b/src/os/windows/ottdres.rc.in @@ -14,7 +14,7 @@ #define APSTUDIO_HIDDEN_SYMBOLS #include "windows.h" #undef APSTUDIO_HIDDEN_SYMBOLS -#ifdef MSVC +#ifndef __MINGW32__ #include "winres.h" #else #define IDC_STATIC (-1) // all static controls @@ -117,5 +117,9 @@ END #endif // !_MAC +#ifdef __MINGW32__ +1 24 "..\\..\\..\\projects\\dpi_aware.manifest" +#endif + #endif // Neutral (Default) resources ///////////////////////////////////////////////////////////////////////////// From 9fa827ed78d33805dbb8536019d0268fe243592e Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 25 Jan 2019 19:45:45 +0100 Subject: [PATCH 236/622] Update: Translations from eints polish: 24 changes by p0358 --- src/lang/polish.txt | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 9ff5c6d0a7..6728551ac0 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -568,6 +568,7 @@ STR_COLOUR_ORANGE :Pomarańczowy STR_COLOUR_BROWN :Brązowy STR_COLOUR_GREY :Szary STR_COLOUR_WHITE :Biały +STR_COLOUR_RANDOM :Losowy # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -854,6 +855,7 @@ STR_ABOUT_MENU_SCREENSHOT :Zrzut ekranu STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Zrzut ekranu z pełnym przybliżeniem STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Zrzut ekranu z przybliżeniem domyślnym STR_ABOUT_MENU_GIANT_SCREENSHOT :Zrzut ekranu całej mapy +STR_ABOUT_MENU_SHOW_FRAMERATE :Pokaż ilość klatek na sekundę STR_ABOUT_MENU_ABOUT_OPENTTD :Info o 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Wyrównywanie sprite'ów STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Włącz/wyłącz ramki @@ -1056,6 +1058,7 @@ STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLA STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Wyczyść STR_PLAYLIST_CHANGE_SET :{BLACK}Zmień zestaw STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Wyczyść obecny program (tylko Wlasny1 lub Wlasny2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Zmień wybór muzyki na następny zainstalowany zestaw STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klik na ścieżce aby dodać do obecnego programu (Wlasny1 i Wlasny2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Kliknij na ścieżce muzycznej aby usunąć ją z wybranego programu (Wlasny1 lub Wlasny2) @@ -1192,6 +1195,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Prezes) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} sponsoruje konstrukcję nowego miasta {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Zostało wybudowane nowe miasto o nazwie {TOWN}! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Rozpoczęto budowę nowe{G go j go} {STRING.d} blisko {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Now{G y a e} {STRING} został{G 0 "" a o} posadzon{G 0 y a e} blisko {TOWN}! @@ -1304,6 +1308,8 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Rand Południow STR_GAME_OPTIONS_CURRENCY_CUSTOM :Własna... STR_GAME_OPTIONS_CURRENCY_GEL :Lari gruzińskie (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Rial irański (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Nowy rubel rosyjski (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Peso meksykańskie (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Pojazdy drogowe @@ -1633,6 +1639,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Zmiana t STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Utrzymywanie infrastruktury: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Kiedy włączone, utrzymanie infrastruktury jest naliczane w kosztach. Koszty wzrastają nadproporcjonalnie do rozmiarów sieci połączeń, a więc dotykają bardziej duże niż małe firmy +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Wybierz początkowy kolor dla firmy STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Pozwól budować stare lotniska: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Włączona opcja sprawia, że każdy typ lotniska będzie dostępny na zawsze od chwili wprowadzenia @@ -1776,7 +1783,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Wlącz obsług STR_CONFIG_SETTING_LOADING_INDICATORS :Pokazuj wskaźniki załadunku: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Wybierz, czy wskaźnik załadunku pokazuje się nad ładowanym/rozładowywanym pojazdem STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Pokazuj rozkłady jazdy w tickach, a nie w dniach: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :W tabelach czasu, czas podróży pokaż w tyknięciach gry zamiast w dniach +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :W tabelach czasu, czas podróży pokaż w tickach gry zamiast w dniach STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Pokazuj przyjazdy i odjazdy w rozkładach: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Wyświetlanie przewidywanego przyjazdu i odjazdu w rozkładach STR_CONFIG_SETTING_QUICKGOTO :Szybkie tworzenie poleceń pojazdu: {STRING} @@ -3073,14 +3080,28 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 Zespół OpenTTD # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Ilość klatek na sekundę +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Liczba ticków gry symulowanych na sekundę. STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Liczba renderowanych klatek wideo na sekundę. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Jak szybko gra obecnie działa, w porównaniu do oczekiwanej prędkości przy normalnym tempie symulacji. STR_FRAMERATE_CURRENT :{WHITE}Obecny +STR_FRAMERATE_AVERAGE :{WHITE}Średnia +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} klatek/sek. +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} klatek/sek. +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} klatek/sek. +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} sek. ############ Leave those lines in this order!! STR_FRAMERATE_GL_LINKGRAPH :{WHITE} Opóźnienie wykresu połączeń: +STR_FRAMERATE_DRAWING :{BLACK}Renderowanie grafiki: STR_FRAMERATE_VIDEO :{WHITE}Wyjście video: STR_FRAMERATE_SOUND :{WHITE}Miksowanie dźwięku: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_DRAWING :Renderowanie grafiki STR_FRAMETIME_CAPTION_VIDEO :Wyjście wideo STR_FRAMETIME_CAPTION_SOUND :Miksowanie dźwięku ############ End of leave-in-this-order @@ -3370,6 +3391,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Wpisz na STR_TOWN_DIRECTORY_CAPTION :{WHITE}Miasta STR_TOWN_DIRECTORY_NONE :{ORANGE}- Żaden - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Miasto){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Nazwy miast - klik na nazwie aby wycentrować widok na mieście. Ctrl+klik otwiera nowy podgląd na lokację miasta STR_TOWN_POPULATION :{BLACK}Populacja świata: {COMMA} @@ -4187,6 +4209,7 @@ STR_ORDER_CONDITIONAL_AGE :Wiek (w latach) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Wymaga serwisowania STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Zawsze STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Pozostały czas życia (w latach) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maksymalna niezawodność STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Jak porównać dane pojazdu z zadaną wartością STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :jest równy From e76fd99c472237125f03d46ed7bff915e2d6a20b Mon Sep 17 00:00:00 2001 From: glx Date: Fri, 25 Jan 2019 21:22:49 +0100 Subject: [PATCH 237/622] Fix #7007: deadlock when launched with -n switch --- src/gfx.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/gfx.cpp b/src/gfx.cpp index 605ff7664b..85cd3bfb59 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -1317,7 +1317,11 @@ void DrawDirtyBlocks() /* Wait a while and update _realtime_tick so we are given the rights */ if (!IsFirstModalProgressLoop()) CSleep(MODAL_PROGRESS_REDRAW_TIMEOUT); _realtime_tick += MODAL_PROGRESS_REDRAW_TIMEOUT; + + /* Modal progress thread may need blitter access while we are waiting for it. */ + VideoDriver::GetInstance()->ReleaseBlitterLock(); _modal_progress_paint_mutex->BeginCritical(); + VideoDriver::GetInstance()->AcquireBlitterLock(); _modal_progress_work_mutex->BeginCritical(); /* When we ended with the modal progress, do not draw the blocks. From 1334cfb3e5fd13fb51dc9cbf0690f55f5a57c4bf Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 13 Jan 2019 09:08:01 +0000 Subject: [PATCH 238/622] Change: Always build baseset metadata, instead of including it in the repo. This adds a script and project files to generate these files within MSVC. --- Makefile.grf.in | 26 +++- bin/baseset/no_music.obm | 103 -------------- bin/baseset/no_sound.obs | 70 --------- bin/baseset/orig_dos.obg | 84 ----------- bin/baseset/orig_dos.obm | 76 ---------- bin/baseset/orig_dos.obs | 70 --------- bin/baseset/orig_dos_de.obg | 82 ----------- bin/baseset/orig_tto.obm | 71 --------- bin/baseset/orig_win.obg | 83 ----------- bin/baseset/orig_win.obm | 158 --------------------- bin/baseset/orig_win.obs | 70 --------- media/baseset/translations.vbs | 123 ++++++++++++++++ projects/basesets_vs140.vcxproj | 99 +++++++++++++ projects/basesets_vs140.vcxproj.filters | 40 ++++++ projects/basesets_vs140.vcxproj.filters.in | 11 ++ projects/basesets_vs140.vcxproj.in | 40 ++++++ projects/basesets_vs141.vcxproj | 99 +++++++++++++ projects/basesets_vs141.vcxproj.filters | 40 ++++++ projects/basesets_vs141.vcxproj.filters.in | 11 ++ projects/basesets_vs141.vcxproj.in | 40 ++++++ projects/generate | 49 +++++++ projects/generate.vbs | 51 +++++++ projects/openttd_vs140.sln | 10 ++ projects/openttd_vs140.vcxproj | 4 + projects/openttd_vs140.vcxproj.in | 4 + projects/openttd_vs141.sln | 10 ++ projects/openttd_vs141.vcxproj | 4 + projects/openttd_vs141.vcxproj.in | 4 + 28 files changed, 661 insertions(+), 871 deletions(-) delete mode 100644 bin/baseset/no_music.obm delete mode 100644 bin/baseset/no_sound.obs delete mode 100644 bin/baseset/orig_dos.obg delete mode 100644 bin/baseset/orig_dos.obm delete mode 100644 bin/baseset/orig_dos.obs delete mode 100644 bin/baseset/orig_dos_de.obg delete mode 100644 bin/baseset/orig_tto.obm delete mode 100644 bin/baseset/orig_win.obg delete mode 100644 bin/baseset/orig_win.obm delete mode 100644 bin/baseset/orig_win.obs create mode 100644 media/baseset/translations.vbs create mode 100644 projects/basesets_vs140.vcxproj create mode 100644 projects/basesets_vs140.vcxproj.filters create mode 100644 projects/basesets_vs140.vcxproj.filters.in create mode 100644 projects/basesets_vs140.vcxproj.in create mode 100644 projects/basesets_vs141.vcxproj create mode 100644 projects/basesets_vs141.vcxproj.filters create mode 100644 projects/basesets_vs141.vcxproj.filters.in create mode 100644 projects/basesets_vs141.vcxproj.in diff --git a/Makefile.grf.in b/Makefile.grf.in index 1625b9e4c0..8e8113a033 100644 --- a/Makefile.grf.in +++ b/Makefile.grf.in @@ -42,11 +42,22 @@ MD5SUM := $(shell [ "$(OS)" = "OSX" ] && echo "md5 -r" || echo "md5sum") NFO_FILES := $(GRF_DIR)/*.nfo $(GRF_DIR)/rivers/*.nfo PNG_FILES := $(GRF_DIR)/*.png $(GRF_DIR)/rivers/*.png +# List of target files. +OBT_FILES := $(BIN_DIR)/orig_dos.obg +OBT_FILES += $(BIN_DIR)/orig_dos_de.obg +OBT_FILES += $(BIN_DIR)/orig_win.obg +OBT_FILES += $(BIN_DIR)/orig_dos.obs +OBT_FILES += $(BIN_DIR)/orig_win.obs +OBT_FILES += $(BIN_DIR)/no_sound.obs +OBT_FILES += $(BIN_DIR)/orig_dos.obm +OBT_FILES += $(BIN_DIR)/orig_win.obm +OBT_FILES += $(BIN_DIR)/no_music.obm +OBT_FILES += $(BIN_DIR)/orig_tto.obm + # Build the GRF. +all: $(OBT_FILES) ifdef GRFCODEC -all: $(BIN_DIR)/openttd.grf $(BIN_DIR)/orig_extra.grf $(BIN_DIR)/orig_dos.obg $(BIN_DIR)/orig_dos_de.obg $(BIN_DIR)/orig_win.obg $(BIN_DIR)/orig_dos.obs $(BIN_DIR)/orig_win.obs $(BIN_DIR)/no_sound.obs $(BIN_DIR)/orig_win.obm $(BIN_DIR)/no_music.obm -else -all: +all: $(BIN_DIR)/openttd.grf $(BIN_DIR)/orig_extra.grf endif $(OBJS_DIR)/langfiles.tmp: $(LANG_DIR)/*.txt @@ -67,6 +78,10 @@ $(BIN_DIR)/%.obm: $(BASESET_DIR)/%.obm $(OBJS_DIR)/langfiles.tmp $(BASESET_DIR)/ $(E) '$(STAGE) Updating $(notdir $@)' $(Q) awk -v langfiles='$(OBJS_DIR)/langfiles.tmp' -f $(BASESET_DIR)/translations.awk $< >$@ +# Guard against trying to run GRFCODEC/NFORENUM without either being set. +ifdef GRFCODEC +ifdef NFORENUM + # Compile extra grf $(BIN_DIR)/openttd.grf: $(PNG_FILES) $(NFO_FILES) $(GRF_DIR)/assemble_nfo.awk $(E) '$(STAGE) Assembling openttd.nfo' @@ -89,9 +104,12 @@ $(BIN_DIR)/orig_extra.grf: $(PNG_FILES) $(NFO_FILES) $(GRF_DIR)/assemble_nfo.awk $(Q) $(GRFCODEC) -n -s -e -p1 $(OBJS_DIR)/orig_extra.grf $(Q)cp $(OBJS_DIR)/orig_extra.grf $(BIN_DIR)/orig_extra.grf +endif +endif + # Clean up temporary files. clean: - $(Q)rm -f *.bak *.grf + $(Q)rm -f *.bak *.grf $(OBT_FILES) # Clean up temporary files mrproper: clean diff --git a/bin/baseset/no_music.obm b/bin/baseset/no_music.obm deleted file mode 100644 index 7a70e3b55d..0000000000 --- a/bin/baseset/no_music.obm +++ /dev/null @@ -1,103 +0,0 @@ -; $Id$ -; -; This represents more or less nothingness -; -[metadata] -name = NoMusic -shortname = NULL -version = 0 -fallback = true -description = A music pack without actual music. -description.af_ZA = 'n Musiek stel sonder enige musiek. -description.ar_EG = مجموعة موسيقى بدون موسيقى -description.be_BY = "Пусты" набор музычнага афармлення, які не зьмяшчае ніякай музыкі. -description.bg_BG = Празен музикален пакет. -description.ca_ES = Una llista de música sense cap peça. -description.cs_CZ = Prázná hudební sada. -description.cy_GB = Pecyn cerddoriaeth heb unrhyw gerddoriaeth ynddo. -description.da_DK = En musikpakke uden musik. -description.de_DE = Ein Musikset ohne Musik. -description.el_GR = Ένα πάκετο μουσικής χωρίς πραγματική μουσική. -description.en_AU = A music pack without actual music. -description.en_US = A music pack without actual music. -description.es_ES = Un conjunto de música vacío. -description.es_MX = Paquete de música vacío -description.et_EE = Muusikakogu ilma muusikata. -description.eu_ES = Musika gabeko musika paketea. -description.fi_FI = Musiikkipaketti, jossa ei ole musiikkia. -description.fr_FR = Un pack de musiques sans musiques. -description.ga_IE = Pacáiste ceoil gan aon cheol iarbhír ann. -description.gd_GB = Pacaid ciùil anns nach eil fonn sam bith. -description.gl_ES = Un conxunto de músicas sen ningunha música. -description.he_IL = אוסף מנגינות ללא מנגינות. -description.hr_HR = Glazbeni paket bez ikakve glazbe. -description.hu_HU = Zenei alapcsomag zene nélkül. -description.id_ID = Paket musik tanpa musik sungguhan. -description.is_IS = Tónlistarpakki sem er í raun án tónlistar. -description.it_IT = Un pacchetto musicale non contenente alcuna musica. -description.ja_JP = 空の音楽パック -description.ko_KR = 실제 음악이 없는 음악 목록입니다. -description.la_VA = Sarcina musicae sine ulla musica. -description.lb_LU = E Musikpack ouni aktuell Musik. -description.lt_LT = Muzikos pakas be muzikos. -description.lv_LV = Mūzikas kopa bez mūzikas -description.ms_MY = Pek muzik tanpa muzik sebenar. -description.nb_NO = En musikkpakke uten noe musikk. -description.nl_NL = Een muziekset zonder muziek. -description.nn_NO = Ei musikkpakke utan noko musikk. -description.pl_PL = Zestaw utworów muzycznych nie zawierający żadnej muzyki. -description.pt_BR = Um pacote de músicas sem músicas. -description.pt_PT = Um conjunto de música vazio. -description.ro_RO = Un set de muzică fără muzică inclusă. -description.ru_RU = "Пустой" набор музыкального оформления, не содержащий никакой музыки. -description.sk_SK = Sada hudby neobsahujúca hudbu. -description.sl_SI = Glasbeni paket z vključeno glasbo. -description.sr_RS = Prazan skup muzičkih numera. -description.sv_SE = Ett musikpaket utan någon musik. -description.ta_IN = இசை இல்லாத இசைத்தொகுப்பு. -description.th_TH = ชุดเพลงประกอบแบบไม่มีเสียงเพลง -description.tr_TR = Müzik içermeyen boş bir müzik paketi. -description.uk_UA = Порожній набір музики. -description.vi_VN = Gói âm nhạc này không có nhạc nào. -description.zh_CN = 一个没有实际内容的音乐包. -description.zh_TW = 不含任何音樂的音樂集。 - -[files] -theme = -old_0 = -old_1 = -old_2 = -old_3 = -old_4 = -old_5 = -old_6 = -old_7 = -old_8 = -old_9 = -new_0 = -new_1 = -new_2 = -new_3 = -new_4 = -new_5 = -new_6 = -new_7 = -new_8 = -new_9 = -ezy_0 = -ezy_1 = -ezy_2 = -ezy_3 = -ezy_4 = -ezy_5 = -ezy_6 = -ezy_7 = -ezy_8 = -ezy_9 = - -[md5s] - -[names] - -[origin] -default = This file was part of your OpenTTD installation. diff --git a/bin/baseset/no_sound.obs b/bin/baseset/no_sound.obs deleted file mode 100644 index 8bd8d30fe0..0000000000 --- a/bin/baseset/no_sound.obs +++ /dev/null @@ -1,70 +0,0 @@ -; $Id$ -; -; This represents more or less nothingness -; -[metadata] -name = NoSound -shortname = NULL -version = 2 -fallback = true -description = A sound pack without any sounds. -description.af_ZA = 'n Klank stel sonder enige klanke. -description.ar_EG = مجموعة صوت بدوت اصوات مضافة -description.be_BY = "Пусты" набор гукавога афармленьня, які не зьмяшчае ніякіх гукаў. -description.bg_BG = Празен звуков пакет. -description.ca_ES = Una llista de sons buida. -description.cs_CZ = Prázdná sada zvuků. -description.cy_GB = Pecyn sain heb unrhyw effeithiau sain ynddo. -description.da_DK = En lydpakke uden lyde. -description.de_DE = Basissounds ohne Sound. -description.el_GR = Ένα πάκετο ήχων χώρις ήχους. -description.en_AU = A sound pack without any sounds. -description.en_US = A sound pack without any sounds. -description.es_ES = Un conjunto de sonidos vacío. -description.es_MX = Paquete de sonidos vacío -description.et_EE = Helikogu ilma helideta. -description.eu_ES = Soinurik gabeko soinu pakete bat -description.fi_FI = Äänipaketti, jossa ei ole ääniä. -description.fr_FR = Un pack de sons sans sons. -description.ga_IE = Pacáiste fuaimeanna gan aon fhuaimeanna ann. -description.gd_GB = Pacaid fhuaimean anns nach eil fuaim sam bith. -description.gl_ES = Un conxunto de sons sen ningún son -description.he_IL = אוסף צלילים ללא צלילים. -description.hr_HR = Zvučni paket bez ikakvih zvukova. -description.hu_HU = Hang alapcsomag hangok nélkül. -description.id_ID = Paket efek suara tanpa suara apapun. -description.is_IS = Hljóðpakki án hljóðs. -description.it_IT = Un pacchetto sonoro non contenente alcun suono. -description.ja_JP = 空の効果音パック -description.ko_KR = 아무런 효과음도 없는 효과음 팩입니다. -description.la_VA = Sarcina sonorum sine ullis sonis. -description.lb_LU = E Soundpack ouni iergendee Sound. -description.lt_LT = Garsų pakas be jokių garsų. -description.lv_LV = Skaņu kopa bez skaņas. -description.nb_NO = En lydpakke uten noen lyder. -description.nl_NL = Een geluidset zonder geluid. -description.nn_NO = Ei lydpakke utan nokon lydar. -description.pl_PL = Zestaw dźwięków nie zawierający żadnych dźwięków. -description.pt_BR = Um pacote de sons sem sons. -description.pt_PT = Um conjunto de sons vazio. -description.ro_RO = Un set de sunete fără nici un sunet inclus. -description.ru_RU = "Пустой" набор звукового оформления, не содержащий никаких звуков. -description.sk_SK = Zvuková sada neobsahujúca zvuky. -description.sl_SI = Zvočni paket brez zvoka. -description.sr_RS = Prazan skup zvukova. -description.sv_SE = Ett ljudpaket utan några ljud. -description.ta_IN = ஒலிகள் இல்லாத ஒலி தொகுப்பு. -description.th_TH = ชุดเสียงแบบไร้เสียง -description.tr_TR = Ses içermeyen boş bir ses kümesi. -description.uk_UA = Порожній набір звуків. -description.vi_VN = Gói âm thanh này không có âm thanh nào. -description.zh_CN = 一个空的音效包. -description.zh_TW = 不含任何音效的音效集。 - -[files] -samples = - -[md5s] - -[origin] -default = This file was part of your OpenTTD installation. diff --git a/bin/baseset/orig_dos.obg b/bin/baseset/orig_dos.obg deleted file mode 100644 index 9d0db3e2af..0000000000 --- a/bin/baseset/orig_dos.obg +++ /dev/null @@ -1,84 +0,0 @@ -; $Id$ -; -; This represents the original graphics as on the non-German Transport -; Tycoon Deluxe DOS CD. -; -[metadata] -name = original_dos -shortname = TTDD -version = 1 -palette = DOS -description = Original Transport Tycoon Deluxe DOS edition graphics. -description.af_ZA = Oorspronklike Transport Tycoon Deluxe DOS uitgawe grafieke. -description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الرسومية نسخة الدوس -description.be_BY = Арыґінальная ґрафіка з Transport Tycoon Deluxe для DOS. -description.bg_BG = Оригинални графики на Transport Tycoon Deluxe за DOS. -description.ca_ES = Gràfics originals del Transport Tycoon Deluxe pel DOS. -description.cs_CZ = Původní sada grafik Transport Tycoon Deluxe (verze pro DOS). -description.cy_GB = Graffeg gwreiddiol fersiwn DOS o Transport Tycoon Deluxe. -description.da_DK = Originalgrafik fra Transport Tycoon Deluxe DOS-version. -description.de_DE = Original Transport Tycoon Deluxe DOS Basisgrafiken. -description.el_GR = Αρχικά γραφικά από το Transport Tycoon Deluxe έκδοση DOS. -description.en_AU = Original Transport Tycoon Deluxe DOS edition graphics. -description.en_US = Original Transport Tycoon Deluxe DOS edition graphics. -description.es_ES = Gráficos originales de Transport Tycoon Deluxe versión DOS. -description.es_MX = Gráficos originales de Transport Tycoon Deluxe para DOS. -description.et_EE = Algse Transport Tycoon Deluxe DOSi versiooni graafika. -description.eu_ES = Transport Tycoon Deluxe originaleko DOS edizioko grafikoak. -description.fi_FI = Alkuperäiset Transport Tycoon Deluxen DOS-version grafiikat. -description.fr_FR = Graphiques originaux de Transport Tycoon Deluxe (version DOS). -description.ga_IE = Grafaicí bunaidhTransport Tycoon Deluxe, eagrán DOS. -description.gd_GB = Grafaigeachd aig an deasachadh DOS tùsail aig Transport Tycoon Deluxe. -description.gl_ES = Graficos da edición orixinal de Transport Tycoon Deluxe para DOS. -description.he_IL = גרפיקות Transport Tycoon Deluxe המקורי בגרסת DOS. -description.hr_HR = Originalna grafika za Transport Tycoon Deluxe DOS izdanje. -description.hu_HU = Az eredeti Transport Tycoon Deluxe DOS verziójának grafikája. -description.id_ID = Grafik orisinil Transport Tycoon Deluxe versi DOS. -description.is_IS = Upprunalega grafíkin úr Transport Tycoon Deluxe DOS útgáfunni. -description.it_IT = Grafica originale di Transport Tycoon Deluxe, edizione DOS. -description.ja_JP = Transport Tycoon Deluxe オリジナル版 グラフィック (DOS) -description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 도스 에디션의 그래픽입니다. -description.la_VA = Graphica ex editione originale Transport Tycoon Deluxe DOS. -description.lb_LU = Original Transport Tycoon Deluxe DOS Editioun Grafik. -description.lt_LT = Originali Transport Tycoon Deluxe DOS leidimo grafika. -description.lv_LV = Oriģinālā Transport Tycoon Deluxe DOS izdevuma grafika. -description.ms_MY = Grafik asal Transport Tycoon Deluxe DOS edition. -description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for DOS. -description.nl_NL = Originele graphics van de Transport Tycoon Deluxe DOS-versie. -description.nn_NO = Original grafikk frå Transport Tycoon Deluxe for DOS. -description.pl_PL = Oryginalna edycja grafik dla Transport Tycoon Deluxe DOS. -description.pt_BR = Gráficos Originais do Transport Tycoon Deluxe, Edição DOS. -description.pt_PT = Gráficos originais da edição DOS de Transport Tycoon Deluxe. -description.ro_RO = Setul grafic original al Transport Tycoon Deluxe pentru DOS. -description.ru_RU = Оригинальная графика из Transport Tycoon Deluxe для DOS. -description.sk_SK = Pôvodná grafika Transport Tycoon Deluxe (DOS). -description.sl_SI = Originalna grafika Transport Tycoon Deluxe za različico DOS. -description.sr_RS = Originalni skup grafika Transport Tycoon Deluxe DOS izdanja. -description.sv_SE = Originalgrafiken från Transport Tycoon Deluxe, DOS-utgåvan. -description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் DOS பதிப்பு அசைவூட்டங்கள். -description.th_TH = กราฟฟิกต้นตำหรับของ Transport Tycoon Deluxe DOS edition -description.tr_TR = Özgün Transport Tycoon Deluxe DOS sürümü grafikleri. -description.uk_UA = Оригінальна графіка з Transport Tycoon Deluxe DOS edition. -description.vi_VN = Đồ họa gốc từ phiên bản Transport Tycoon Deluxe trên DOS -description.zh_CN = 运输大亨DOS豪华版原版图形包. -description.zh_TW = 原版 Transport Tycoon Deluxe DOS 版的圖形。 - -[files] -base = TRG1.GRF -logos = TRGI.GRF -arctic = TRGC.GRF -tropical = TRGH.GRF -toyland = TRGT.GRF -extra = ORIG_EXTRA.GRF - -[md5s] -TRG1.GRF = 9311676280e5b14077a8ee41c1b42192 -TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8 -TRGC.GRF = ed446637e034104c5559b32c18afe78d -TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9 -TRGT.GRF = e30e8a398ae86c03dc534a8ac7dfb3b6 -ORIG_EXTRA.GRF = 67bcfac5911667309d86b7749ea8d08c - -[origin] -default = You can find it on your Transport Tycoon Deluxe CD-ROM. -ORIG_EXTRA.GRF = This file was part of your OpenTTD installation. diff --git a/bin/baseset/orig_dos.obm b/bin/baseset/orig_dos.obm deleted file mode 100644 index cdacc8e7f5..0000000000 --- a/bin/baseset/orig_dos.obm +++ /dev/null @@ -1,76 +0,0 @@ -; $Id$ -; -; This represents the original music as on the Transport -; Tycoon Deluxe for DOS CD. -; -[metadata] -name = original_dos -shortname = TTDD -version = 1 -description = Original Transport Tycoon Deluxe DOS edition music. - -[files] -theme = gm.cat -old_0 = gm.cat -old_1 = gm.cat -old_2 = gm.cat -old_3 = gm.cat -old_4 = gm.cat -old_5 = gm.cat -old_6 = gm.cat -old_7 = gm.cat -old_8 = -old_9 = -new_0 = gm.cat -new_1 = gm.cat -new_2 = gm.cat -new_3 = gm.cat -new_4 = gm.cat -new_5 = gm.cat -new_6 = gm.cat -new_7 = -new_8 = -new_9 = -ezy_0 = gm.cat -ezy_1 = gm.cat -ezy_2 = gm.cat -ezy_3 = gm.cat -ezy_4 = gm.cat -ezy_5 = gm.cat -ezy_6 = -ezy_7 = -ezy_8 = -ezy_9 = - -[md5s] -gm.cat = 7a29d2d0c4f7d2e03091ffa9b2bdfffb - -[catindex] -theme = 0 -old_0 = 1 -old_1 = 8 -old_2 = 2 -old_3 = 9 -old_4 = 14 -old_5 = 15 -old_6 = 19 -old_7 = 13 -new_0 = 6 -new_1 = 11 -new_2 = 10 -new_3 = 17 -new_4 = 21 -new_5 = 18 -new_6 = 5 -ezy_0 = 12 -ezy_1 = 7 -ezy_2 = 16 -ezy_3 = 3 -ezy_4 = 20 -ezy_5 = 4 - -[names] -; Names get read from the CAT file - -[origin] -default = You can find it on your Transport Tycoon Deluxe CD-ROM. diff --git a/bin/baseset/orig_dos.obs b/bin/baseset/orig_dos.obs deleted file mode 100644 index ce2d6d22e6..0000000000 --- a/bin/baseset/orig_dos.obs +++ /dev/null @@ -1,70 +0,0 @@ -; $Id$ -; -; This represents the original sounds as on the Transport -; Tycoon Deluxe DOS CD. -; -[metadata] -name = original_dos -shortname = TTDO -version = 0 -description = Original Transport Tycoon Deluxe DOS edition sounds. -description.af_ZA = Oorspronklike Transport Tycoon Deluxe DOS uitgawe klanke. -description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الصوتية نسخة الدوس -description.be_BY = Арыґінальны набор гукавога афармленьня з гульні Transport Tycoon Deluxe для DOS. -description.bg_BG = Оригинални звуци на Transport Tycoon Deluxe за DOS. -description.ca_ES = Sons originals del Transport Tycoon Deluxe pel DOS. -description.cs_CZ = Původní sada zvuků Transport Tycoon Deluxe (verze pro DOS). -description.cy_GB = Effeithiau sain gwreiddiol fersiwn DOS o Transport Tycoon Deluxe. -description.da_DK = Originallyd fra Transport Tycoon Deluxe DOS-version. -description.de_DE = Original Transport Tycoon Deluxe DOS Basissounds. -description.el_GR = Αρχικοί ήχοι από το Transport Tycoon Deluxe έκδοση DOS. -description.en_AU = Original Transport Tycoon Deluxe DOS edition sounds. -description.en_US = Original Transport Tycoon Deluxe DOS edition sounds. -description.es_ES = Sonidos originales de Transport Tycoon Deluxe versión DOS. -description.es_MX = Sonidos originales de Transport Tycoon Deluxe para DOS. -description.et_EE = Algse Transport Tycoon Deluxe DOSi versiooni helid. -description.eu_ES = Transport Tycoon Deluxe originaleko DOS edizioko soinuak. -description.fi_FI = Alkuperäiset Transport Tycoon Deluxen DOS-version äänet. -description.fr_FR = Sons originaux de Transport Tycoon Deluxe (version DOS). -description.ga_IE = Fuaimeanna bunaidh Transport Tycoon Deluxe, eagrán DOS. -description.gd_GB = Fuaimean aig an deasachadh DOS tùsail aig Transport Tycoon Deluxe. -description.gl_ES = Sons da edición orixinal de Transport Tycoon Deluxe para DOS. -description.he_IL = צלילי Transport Tycoon Deluxe המקורי בגרסת DOS. -description.hr_HR = Originalni zvukovi za Transport Tycoon Deluxe DOS izdanje. -description.hu_HU = Az eredeti Transport Tycoon Deluxe DOS verziójának hangjai. -description.id_ID = Efek suara orisinil Transport Tycoon Deluxe versi DOS. -description.is_IS = Upprunalega hljóðið úr Transport Tycoon Deluxe DOS útgáfunni. -description.it_IT = Suoni originali di Transport Tycoon Deluxe, edizione DOS. -description.ja_JP = Transport Tycoon Deluxe オリジナル版 効果音 (DOS) -description.ko_KR = 오리지널 트랜스포트 타이쿤 도스 에디션의 효과음입니다. -description.la_VA = Soni ex editione originale Transport Tycoon Deluxe DOS. -description.lb_LU = Original Transport Tycoon Deluxe DOS Editioun Sound. -description.lt_LT = Originalūs Transport Tycoon Deluxe DOS leidimo garsai. -description.nb_NO = Originale lyder fra Transport Tycoon Deluxe for DOS. -description.nl_NL = Originele geluiden van de Transport Tycoon Deluxe DOS-versie. -description.nn_NO = Originale lydar frå Transport Tycoon Deluxe for DOS. -description.pl_PL = Oryginalna edycja dźwięków dla Transport Tycoon Deluxe DOS. -description.pt_BR = Sons Originais do Transport Tycoon Deluxe, Edição DOS. -description.pt_PT = Sons originais da edição DOS de Transport Tycoon Deluxe. -description.ro_RO = Setul de sunete original al Transport Tycoon Deluxe pentru DOS. -description.ru_RU = Оригинальный набор звукового оформления из игры Transport Tycoon Deluxe для DOS. -description.sk_SK = Pôvodné zvuky Transport Tycoon Deluxe (DOS). -description.sl_SI = Originalni zvoki Transport Tycoon Deluxe različice DOS. -description.sr_RS = Originalni skup zvukova Transport Tycoon Deluxe DOS izdanja. -description.sv_SE = Originalljuden från Transport Tycoon Deluxe, DOS-utgåvan. -description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் DOS பதிப்பு ஒலிகள். -description.th_TH = เสียงต้นตำหรับของ Transport Tycoon Deluxe DOS edition -description.tr_TR = Özgün Transport Tycoon Deluxe DOS sürümü sesleri. -description.uk_UA = Оригінальний набір звуків з Transport Tycoon Deluxe DOS edition. -description.vi_VN = Âm thanh gốc từ phiên bản Transport Tycoon Deluxe trên DOS -description.zh_CN = 运输大亨DOS豪华版原版音效包. -description.zh_TW = 原版 Transport Tycoon Deluxe DOS 版的音效。 - -[files] -samples = SAMPLE.CAT - -[md5s] -SAMPLE.CAT = 422ea3dd074d2859bb51639a6e0e85da - -[origin] -default = You can find it on your Transport Tycoon Deluxe CD-ROM. diff --git a/bin/baseset/orig_dos_de.obg b/bin/baseset/orig_dos_de.obg deleted file mode 100644 index 754ab5a2d4..0000000000 --- a/bin/baseset/orig_dos_de.obg +++ /dev/null @@ -1,82 +0,0 @@ -; $Id$ -; -; This represents the original graphics as on the German Transport -; Tycoon Deluxe DOS CD. It contains one broken sprite. -; -[metadata] -name = original_dos_de -shortname = TTDD -version = 0 -palette = DOS -description = Original Transport Tycoon Deluxe DOS (German) edition graphics. -description.af_ZA = Oorspronklike Transport Tycoon Deluxe DOS (German) uitgawe grafieke. -description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الالمانية نسخة الدوس -description.be_BY = Арыґінальная ґрафіка зь нямецкай версіі Transport Tycoon Deluxe для DOS. -description.bg_BG = Оригинални графики на Transport Tycoon Deluxe за DOS (немски) . -description.ca_ES = Gràfics originals del Transport Tycoon Deluxe (alemany) pel DOS. -description.cs_CZ = Původní sada grafik Transport Tycoon Deluxe (německá verze pro DOS). -description.cy_GB = Graffeg gwreiddiol fersiwn DOS (Almaenig) o Transport Tycoon Deluxe. -description.da_DK = Originalgrafik fra Transport Tycoon Deluxe DOS (Tysk) version. -description.de_DE = Original Transport Tycoon Deluxe DOS (Deutsch) Basisgrafiken. -description.el_GR = Αρχικά γραφικά από το Transport Tycoon Deluxe έκδοση DOS (Γερμανικό). -description.en_AU = Original Transport Tycoon Deluxe DOS (German) edition graphics. -description.en_US = Original Transport Tycoon Deluxe DOS (German) edition graphics. -description.es_ES = Gráficos originales de Transport Tycoon Deluxe versión DOS (Alemán). -description.es_MX = Gráficos originales de Transport Tycoon Deluxe para DOS (en alemán). -description.et_EE = Algse Transport Tycoon Deluxe DOSi (Saksa) versiooni graafika. -description.fi_FI = Alkuperäiset Saksassa julkaistun Transport Tycoon Deluxen DOS-version grafiikat. -description.fr_FR = Graphiques originaux de Transport Tycoon Deluxe (version DOS allemande). -description.ga_IE = Grafaicí bunaidhTransport Tycoon Deluxe, eagrán DOS (Gearmánach). -description.gd_GB = Grafaigeachd aig an deasachadh DOS (Gearmailteach) tùsail aig Transport Tycoon Deluxe. -description.gl_ES = Graficos da edición orixinal (alemá) de Transport Tycoon Deluxe para DOS. -description.he_IL = גרפיקות Transport Tycoon Deluxe המקורי בגרסת DOS (גרמנית). -description.hr_HR = Originalna grafika za Transport Tycoon Deluxe DOS (Njemački) izdanje. -description.hu_HU = Az eredeti Transport Tycoon Deluxe DOS (német) verziójának grafikája. -description.id_ID = Grafik orisinil Transport Tycoon Deluxe versi DOS (Jerman). -description.is_IS = Upprunalega grafíkin úr Transport Tycoon Deluxe DOS (þýsku) útgáfunni. -description.it_IT = Grafica originale di Transport Tycoon Deluxe (tedesco), edizione DOS. -description.ja_JP = Transport Tycoon Deluxe オリジナル版 グラフィック (DOS・ドイツ版) -description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 도스 에디션(독일)의 그래픽입니다. -description.la_VA = Graphica ex editione originale Transport Tycoon Deluxe DOS (Germanica). -description.lb_LU = Original Transport Tycoon Deluxe DOS (Däitsch) Editioun Grafik. -description.lt_LT = Originali Transport Tycoon Deluxe DOS (Vokiečių) leidimo grafika. -description.lv_LV = Oriģinālā Transport Tycoon Deluxe DOS (vācu) izdevuma grafika. -description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for DOS (tysk). -description.nl_NL = Originele graphics van de Duitse Transport Tycoon Deluxe DOS-versie. -description.nn_NO = Original grafikk frå Transport Tycoon Deluxe for DOS (tysk). -description.pl_PL = Oryginalna edycja grafik dla Transport Tycoon Deluxe DOS (German). -description.pt_BR = Gráficos Originais do Transport Tycoon Deluxe, Edição DOS alemã. -description.pt_PT = Gráficos originais da edição DOS (Alemã) de Transport Tycoon Deluxe. -description.ro_RO = Setul grafic original al Transport Tycoon Deluxe pentru DOS (ediţia germană). -description.ru_RU = Оригинальная графика из немецкой версии Transport Tycoon Deluxe для DOS. -description.sk_SK = Pôvodná grafika Transport Tycoon Deluxe (DOS) (v jazyku nemčina). -description.sl_SI = Originalna grafika Transport Tycoon Deluxe za nemško različico DOS. -description.sr_RS = Originalni skup grafika nemačkog Transport Tycoon Deluxe DOS izdanja. -description.sv_SE = Originalgrafiken från Transport Tycoon Deluxe, DOS-utgåvan (tyska). -description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் DOS (செருமன்) பதிப்பு அசைவூட்டங்கள். -description.th_TH = กราฟฟิกต้นตำหรับของ Transport Tycoon Deluxe DOS (German) edition -description.tr_TR = Özgün Transport Tycoon Deluxe DOS (Almanca) sürümü grafikleri. -description.uk_UA = Оригінальна графіка з Transport Tycoon Deluxe DOS edition (німецького). -description.vi_VN = Đồ họa gốc từ phiên bản Transport Tycoon Deluxe trên DOS (tiếng Đức) -description.zh_CN = 运输大亨DOS豪华德语版原版图形包. -description.zh_TW = 原版 Transport Tycoon Deluxe DOS 版 (德國版) 的圖形。 - -[files] -base = TRG1.GRF -logos = TRGI.GRF -arctic = TRGC.GRF -tropical = TRGH.GRF -toyland = TRGT.GRF -extra = ORIG_EXTRA.GRF - -[md5s] -TRG1.GRF = 9311676280e5b14077a8ee41c1b42192 -TRGI.GRF = da6a6c9dcc451eec88d79211437b76a8 -TRGC.GRF = ed446637e034104c5559b32c18afe78d -TRGH.GRF = ee6616fb0e6ef6b24892c58c93d86fc9 -TRGT.GRF = fcde1d7e8a74197d72a62695884b909e -ORIG_EXTRA.GRF = 67bcfac5911667309d86b7749ea8d08c - -[origin] -default = You can find it on your Transport Tycoon Deluxe CD-ROM. -ORIG_EXTRA.GRF = This file was part of your OpenTTD installation. diff --git a/bin/baseset/orig_tto.obm b/bin/baseset/orig_tto.obm deleted file mode 100644 index 13b3efb110..0000000000 --- a/bin/baseset/orig_tto.obm +++ /dev/null @@ -1,71 +0,0 @@ -; $Id$ -; -; This represents the original music as on the Transport -; Tycoon (with World Editor) for DOS CD. -; -[metadata] -name = original_tto -shortname = TTOD -version = 1 -description = Original Transport Tycoon (Original/World Editor) music. - -[files] -theme = gm-tto.cat -old_0 = gm-tto.cat -old_1 = gm-tto.cat -old_2 = gm-tto.cat -old_3 = gm-tto.cat -old_4 = gm-tto.cat -old_5 = gm-tto.cat -old_6 = gm-tto.cat -old_7 = gm-tto.cat -old_8 = -old_9 = -new_0 = gm-tto.cat -new_1 = gm-tto.cat -new_2 = gm-tto.cat -new_3 = gm-tto.cat -new_4 = gm-tto.cat -new_5 = gm-tto.cat -new_6 = gm-tto.cat -new_7 = gm-tto.cat -new_8 = -new_9 = -ezy_0 = -ezy_1 = -ezy_2 = -ezy_3 = -ezy_4 = -ezy_5 = -ezy_6 = -ezy_7 = -ezy_8 = -ezy_9 = - -[catindex] -theme = 0 -old_0 = 1 -old_1 = 6 -old_2 = 2 -old_3 = 7 -old_4 = 11 -old_5 = 12 -old_6 = 15 -old_7 = 10 -new_0 = 4 -new_1 = 5 -new_2 = 9 -new_3 = 8 -new_4 = 13 -new_5 = 16 -new_6 = 14 -new_7 = 3 - -[md5s] -gm-tto.cat = 26e85ff84b0063aa5da05dd4698fc76e - -[names] -; Names get read from the CAT file - -[origin] -default = You can find it on your Transport Tycoon CD-ROM. diff --git a/bin/baseset/orig_win.obg b/bin/baseset/orig_win.obg deleted file mode 100644 index ec00781488..0000000000 --- a/bin/baseset/orig_win.obg +++ /dev/null @@ -1,83 +0,0 @@ -; $Id$ -; -; This represents the original graphics as on the Transport -; Tycoon Deluxe for Windows CD. -; -[metadata] -name = original_windows -shortname = TTDW -version = 0 -palette = Windows -description = Original Transport Tycoon Deluxe Windows edition graphics. -description.af_ZA = Oorspronklike Transport Tycoon Deluxe Windows uitgawe grafieke. -description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الرسومية نسخة وندوز -description.be_BY = Арыґінальная ґрафіка з Transport Tycoon Deluxe для Windows. -description.bg_BG = Оригинални графики на Transport Tycoon Deluxe за Windows. -description.ca_ES = Gràfics originals del Transport Tycoon Deluxe pel Windows. -description.cs_CZ = Původní sada grafik Transport Tycoon Deluxe (verze pro Windows). -description.cy_GB = Graffeg gwreiddiol fersiwn Windows o Transport Tycoon Deluxe. -description.da_DK = Originalgrafik fra Transport Tycoon Deluxe Windows-version. -description.de_DE = Original Transport Tycoon Deluxe Windows Basisgrafiken. -description.el_GR = Αρχικά γραφικά από το Transport Tycoon Deluxe έκδοση Windows. -description.en_AU = Original Transport Tycoon Deluxe Windows edition graphics. -description.en_US = Original Transport Tycoon Deluxe Windows edition graphics. -description.es_ES = Gráficos originales de Transport Tycoon Deluxe versión Windows. -description.es_MX = Gráficos originales de Transport Tycoon Deluxe para Windows. -description.et_EE = Algse Transport Tycoon Deluxe Windowsi versiooni graafika. -description.fi_FI = Alkuperäiset Transport Tycoon Deluxen Windows-version grafiikat. -description.fr_FR = Graphiques originaux de Transport Tycoon Deluxe (version Windows). -description.ga_IE = Grafaicí bunaidhTransport Tycoon Deluxe, eagrán Windows. -description.gd_GB = Grafaigeachd aig an deasachadh Windows tùsail aig Transport Tycoon Deluxe. -description.gl_ES = Graficos da edición orixinal de Transport Tycoon Deluxe para Windows. -description.he_IL = גרפיקות Transport Tycoon Deluxe המקורי בגרסת Windows. -description.hr_HR = Originalna grafika za Transport Tycoon Deluxe Windows izdanje. -description.hu_HU = Az eredeti Transport Tycoon Deluxe Windows verziójának grafikája. -description.id_ID = Grafik orisinil Transport Tycoon Deluxe versi Windows. -description.is_IS = Upprunalega grafíkin úr Transport Tycoon Deluxe Windows útgáfunni. -description.it_IT = Grafica originale di Transport Tycoon Deluxe, edizione Windows. -description.ja_JP = Transport Tycoon Deluxe オリジナル版 グラフィック (Windows) -description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 윈도 에디션의 그래픽입니다. -description.la_VA = Graphica ex editione originale Transport Tycoon Deluxe Windows. -description.lb_LU = Original Transport Tycoon Deluxe Windows Editioun Grafik. -description.lt_LT = Originali Transport Tycoon Deluxe Windows leidimo grafika. -description.lv_LV = Oriģinālā Transport Tycoon Deluxe Windows izdevuma grafika. -description.ms_MY = Grafik asal Transport Tycoon Deluxe edisi Windows. -description.nb_NO = Original grafikk fra Transport Tycoon Deluxe for Windows. -description.nl_NL = Originele graphics van de Transport Tycoon Deluxe Windows-versie. -description.nn_NO = Original grafikk frå Transport Tycoon Deluxe for Windows. -description.pl_PL = Oryginalna edycja grafik dla Transport Tycoon Deluxe Windows. -description.pt_BR = Gráficos Originais do Transport Tycoon, Edição Windows. -description.pt_PT = Gráficos originais da edição Windows de Transport Tycoon Deluxe. -description.ro_RO = Setul grafic original al Transport Tycoon Deluxe pentru Windows. -description.ru_RU = Оригинальная графика из Transport Tycoon Deluxe для Windows. -description.sk_SK = Pôvodná grafika Transport Tycoon Deluxe (Windows). -description.sl_SI = Originalna grafika Transport Tycoon Deluxe za različico oken(windows). -description.sr_RS = Originalni skup grafika Transport Tycoon Deluxe Windows izdanja. -description.sv_SE = Originalgrafiken från Transport Tycoon Deluxe, Windows-utgåvan. -description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் விண்டோஸ் பதிப்பு அசைவூட்டங்கள். -description.th_TH = กราฟฟิกต้ำตำหรับของ Transport Tycoon Deluxe Windows edition -description.tr_TR = Özgün Transport Tycoon Deluxe Windows sürümü grafikleri. -description.uk_UA = Оригінальна графіка з Transport Tycoon Deluxe Windows edition. -description.vi_VN = Đồ họa gốc từ phiên bản Transport Tycoon Deluxe trên Windows -description.zh_CN = 运输大亨Windows豪华版原版图形包. -description.zh_TW = 原版 Transport Tycoon Deluxe Windows 版的圖形。 - -[files] -base = TRG1R.GRF -logos = TRGIR.GRF -arctic = TRGCR.GRF -tropical = TRGHR.GRF -toyland = TRGTR.GRF -extra = ORIG_EXTRA.GRF - -[md5s] -TRG1R.GRF = b04ce593d8c5016e07473a743d7d3358 -TRGIR.GRF = 0c2484ff6be49fc63a83be6ab5c38f32 -TRGCR.GRF = 3668f410c761a050b5e7095a2b14879b -TRGHR.GRF = 06bf2b7a31766f048baac2ebe43457b1 -TRGTR.GRF = de53650517fe661ceaa3138c6edb0eb8 -ORIG_EXTRA.GRF = 67bcfac5911667309d86b7749ea8d08c - -[origin] -default = You can find it on your Transport Tycoon Deluxe CD-ROM. -ORIG_EXTRA.GRF = This file was part of your OpenTTD installation. diff --git a/bin/baseset/orig_win.obm b/bin/baseset/orig_win.obm deleted file mode 100644 index c8c4923e0e..0000000000 --- a/bin/baseset/orig_win.obm +++ /dev/null @@ -1,158 +0,0 @@ -; $Id$ -; -; This represents the original music as on the Transport -; Tycoon Deluxe for Windows CD. -; -[metadata] -name = original_windows -shortname = TTDW -version = 1 -description = Original Transport Tycoon Deluxe Windows edition music. -description.af_ZA = Oorspronklike Transport Tycoon Deluxe Windows uitgawe musiek. -description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الموسيقية نسخة وندوز -description.be_BY = Арыґінальны набор музычнага афармленьня з гульні Transport Tycoon Deluxe для Windows. -description.bg_BG = Оригинална музика на Transport Tycoon Deluxe за Windows. -description.ca_ES = Música original del Transport Tycoon Deluxe pel Windows. -description.cs_CZ = Původní hudba Transport Tycoon Deluxe (verze pro Windows). -description.cy_GB = Cerddoriaeth gwreiddiol fersion Windows o Transport Tycoon Deluxe. -description.da_DK = Originalmusik fra Transport Tycoon Deluxe Windows-version. -description.de_DE = Original Transport Tycoon Deluxe Windows Musikset. -description.el_GR = Αρχική μουσική από το Transport Tycoon Deluxe έκδοση Windows. -description.en_AU = Original Transport Tycoon Deluxe Windows edition music. -description.en_US = Original Transport Tycoon Deluxe Windows edition music. -description.es_ES = Música original de Transport Tycoon Deluxe versión Windows. -description.es_MX = Música original de Transport Tycoon Deluxe para Windows. -description.et_EE = Algse Transport Tycoon Deluxe Windowsi versiooni muusika. -description.fi_FI = Alkuperäinen Transport Tycoon Deluxen Windows-version musiikki. -description.fr_FR = Musiques originales de Transport Tycoon Deluxe (version Windows). -description.ga_IE = Ceol bunaidh Transport Tycoon Deluxe, eagrán Windows. -description.gd_GB = Ceòl aig an deasachadh Windows tùsail aig Transport Tycoon Deluxe. -description.gl_ES = Música da edición orixinal de Transport Tycoon Deluxe para Windows. -description.he_IL = מנגינות Transport Tycoon Deluxe המקורי בגרסת Windows. -description.hr_HR = Originalna glazba za Transport Tycoon Deluxe Windows izdanje. -description.hu_HU = Az eredeti Transport Tycoon Deluxe Windows verziójának zenéje. -description.id_ID = Musik pengiring orisinil Transport Tycoon Deluxe versi Windows. -description.is_IS = Upprunalega tónlistin úr Transport Tycoon Deluxe Windows útgáfunni. -description.it_IT = Musica originale di Transport Tycoon Deluxe, edizione Windows. -description.ja_JP = Transport Tycoon Deluxe オリジナル版 音楽 (Windows) -description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 윈도 에디션의 음악입니다. -description.la_VA = Musica ex editione originale Transport Tycoon Deluxe Windows. -description.lb_LU = Original Transport Tycoon Deluxe Windows Editioun Musik. -description.lt_LT = Originali Transport Tycoon Deluxe Windows leidimo muzika. -description.lv_LV = Oriģinālā Transport Tycoon Deluxe Windows izdevuma mūzika. -description.ms_MY = Muzik asal Transport Tycoon Deluxe edisi Windows. -description.nb_NO = Original musikk fra Transport Tycoon Deluxe for Windows. -description.nl_NL = Originele muziek van de Transport Tycoon Deluxe Windows-versie. -description.nn_NO = Original musikk frå Transport Tycoon Deluxe for Windows. -description.pl_PL = Oryginalna edycja utworów muzycznych w Transport Tycoon Deluxe Windows. -description.pt_BR = Música Original do Transport Tycoon Deluxe, Edição Windows -description.pt_PT = Música original da edição Windows de Transport Tycoon Deluxe. -description.ro_RO = Setul de muzică original al Transport Tycoon Deluxe pentru Windows. -description.ru_RU = Оригинальный набор музыкального оформления из игры Transport Tycoon Deluxe для Windows. -description.sk_SK = Pôvodná hudba z Transport Tycoon Deluxe (Windows). -description.sl_SI = Originalna glasba Transport Tycoon Deluxe različice oken(windows). -description.sr_RS = Originalni skup muzičkih numera Transport Tycoon Deluxe Windows izdanja. -description.sv_SE = Originalmusiken från Transport Tycoon Deluxe, Windows-utgåvan. -description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் விண்டோஸ் பதிப்பு இசை. -description.th_TH = เพลงต้นตำหรับชอง Transport Tycoon Deluxe Windows edition -description.tr_TR = Özgün Transport Tycoon Deluxe Windows sürümü müzikleri. -description.uk_UA = Оригінальна музика з Transport Tycoon Deluxe Windows edition. -description.vi_VN = Nhạc gốc từ phiên bản Transport Tycoon Deluxe trên Windows -description.zh_CN = Transport Tycoon Deluxe(运输大亨Windows豪华版)的原版音乐包 -description.zh_TW = 原版 Transport Tycoon Deluxe Windows 版的音樂。 - -[files] -theme = GM_TT00.GM -old_0 = GM_TT02.GM -old_1 = GM_TT06.GM -old_2 = GM_TT03.GM -old_3 = GM_TT12.GM -old_4 = GM_TT08.GM -old_5 = GM_TT13.GM -old_6 = GM_TT14.GM -old_7 = GM_TT10.GM -old_8 = -old_9 = -new_0 = GM_TT04.GM -new_1 = GM_TT01.GM -new_2 = GM_TT05.GM -new_3 = GM_TT15.GM -new_4 = GM_TT11.GM -new_5 = GM_TT16.GM -new_6 = GM_TT09.GM -new_7 = -new_8 = -new_9 = -ezy_0 = GM_TT18.GM -ezy_1 = GM_TT19.GM -ezy_2 = GM_TT21.GM -ezy_3 = GM_TT17.GM -ezy_4 = GM_TT20.GM -ezy_5 = GM_TT07.GM -ezy_6 = -ezy_7 = -ezy_8 = -ezy_9 = - -[md5s] -GM_TT00.GM = 45cfec1b9d8c7a0ad45e755833cbf221 -GM_TT01.GM = ab14ed3392d848abd2a2e90a9d75d121 -GM_TT02.GM = dd4f696e4be5987ce738257b08b50171 -GM_TT03.GM = a1bfde23343df9e4063419bf29c166b8 -GM_TT04.GM = 4e6943aa0c455203d76c79389054747d -GM_TT05.GM = cee281cb85a2e2343552d97640545a47 -GM_TT06.GM = 26d1de5efa8675f94065784e9d539e49 -GM_TT07.GM = 6f2691e17558f552ec4c565e4ab7139c -GM_TT08.GM = a42bf2cb3340a822f1a69646fc7a487d -GM_TT09.GM = eb35761a58a8df3c59ed8929cce13916 -GM_TT10.GM = 42fecd686720a785d20a78590c466a82 -GM_TT11.GM = 50ef1ef02e49d2112786dd45e69dc3ee -GM_TT12.GM = 4ce707a0e0e72419f0681dd9bd95271b -GM_TT13.GM = e765753be29d889ec818f38009103619 -GM_TT14.GM = 270e2d63bd32b95a4d007ce15a6ce45f -GM_TT15.GM = 89e116a1c0c69f1845cc903a9bfbe460 -GM_TT16.GM = f824e2371b3bedfe61aad4b9c62dd6be -GM_TT17.GM = 1b23eebb0796c1ab99cd97fa7082cf7b -GM_TT18.GM = 15650de3bad645d0e88c4f5c7a2df92a -GM_TT19.GM = 7aec079e15bd09588660b85545ac4dfc -GM_TT20.GM = 1509097889dee617aa1e9a1738a5a930 -GM_TT21.GM = a8d0aaad02e1a762d8d54cf81da56bab - -[names] -GM_TT00.GM = Tycoon DELUXE Theme -GM_TT01.GM = Snarl Up -GM_TT02.GM = Easy Driver -GM_TT03.GM = Little Red Diesel -GM_TT04.GM = City Groove -GM_TT05.GM = Aliens Ate My Railway -GM_TT06.GM = Stoke It -GM_TT07.GM = Don't Walk! -GM_TT08.GM = Sawyer's Tune -GM_TT09.GM = Fell Apart On Me -GM_TT10.GM = Can't Get There From Here -GM_TT11.GM = Hard Drivin' -GM_TT12.GM = Road Hog -GM_TT13.GM = Hold That Train! -GM_TT14.GM = Broomer's Oil Rag -GM_TT15.GM = Goss Groove -GM_TT16.GM = Small Town -GM_TT17.GM = Cruise Control -GM_TT18.GM = Stroll On -GM_TT19.GM = Funk Central -GM_TT20.GM = Jammit -GM_TT21.GM = Movin' On - -; MIDI timecodes where the playback should attemp to start and stop short. -; This is to allow fixing undesired silences in original MIDI files. -; However not all music drivers may support this. -[timingtrim] -; Theme has two beats silence at the beginning which prevents clean looping. -GM_TT00.GM = 768:53760 -; Can't Get There From Here from the Windows version has a long silence at the end, -; followed by a solo repeat. This isn't in the original DOS version music and is likely -; unintentional from the people who converted the music from the DOS version. -; Actual song ends after measure 152. -GM_TT10.GM = 0:235008 - -[origin] -default = You can find it on your Transport Tycoon Deluxe CD-ROM. diff --git a/bin/baseset/orig_win.obs b/bin/baseset/orig_win.obs deleted file mode 100644 index c3e5fb7693..0000000000 --- a/bin/baseset/orig_win.obs +++ /dev/null @@ -1,70 +0,0 @@ -; $Id$ -; -; This represents the original sounds as on the Transport -; Tycoon Deluxe for Windows CD. -; -[metadata] -name = original_windows -shortname = TTDO -version = 0 -description = Original Transport Tycoon Deluxe Windows edition sounds. -description.af_ZA = Oorspronklike Transport Tycoon Deluxe Windows uitgawe klanke. -description.ar_EG = النسخة الاصلية من ترانسبورت تايكون ديلوكس الصوتية نسخة وندوز -description.be_BY = Арыґінальны набор гукавога афармленьня з гульні Transport Tycoon Deluxe для Windows. -description.bg_BG = Оригинални звуци на Transport Tycoon Deluxe за Windows. -description.ca_ES = Sons originals del Transport Tycoon Deluxe pel Windows. -description.cs_CZ = Původní sada zvuků Transport Tycoon Deluxe (verze pro Windows). -description.cy_GB = Effeithiau sain gwreiddiol fersiwn Windows o Transport Tycoon Deluxe. -description.da_DK = Originallyd fra Transport Tycoon Deluxe Windows-version. -description.de_DE = Original Transport Tycoon Deluxe Windows Basissounds. -description.el_GR = Αρχικοί ήχοι από το Transport Tycoon Deluxe έκδοση Windows. -description.en_AU = Original Transport Tycoon Deluxe Windows edition sounds. -description.en_US = Original Transport Tycoon Deluxe Windows edition sounds. -description.es_ES = Sonidos originales de Transport Tycoon Deluxe versión Windows. -description.es_MX = Sonidos originales de Transport Tycoon Deluxe para Windows. -description.et_EE = Algse Transport Tycoon Deluxe Windowsi versiooni helid. -description.eu_ES = Transport Tycoon Deluxe originaleko Windows edizioko grafikoak. -description.fi_FI = Alkuperäiset Transport Tycoon Deluxen Windows-version äänet. -description.fr_FR = Sons originaux de Transport Tycoon Deluxe (version Windows). -description.ga_IE = Fuaimeanna bunaidh Transport Tycoon Deluxe, eagrán Windows. -description.gd_GB = Fuaimean aig an deasachadh Windows tùsail aig Transport Tycoon Deluxe. -description.gl_ES = Sons da edición orixinal de Transport Tycoon Deluxe para Windows. -description.he_IL = צלילי Transport Tycoon Deluxe המקורי בגרסת Windows. -description.hr_HR = Originalni zvukovi za Transport Tycoon Deluxe Windows izdanje. -description.hu_HU = Az eredeti Transport Tycoon Deluxe Windows verziójának hangjai. -description.id_ID = Efek suara orisinil Transport Tycoon Deluxe versi Windows. -description.is_IS = Upprunalega hljóðið úr Transport Tycoon Deluxe Windows útgáfunni. -description.it_IT = Suoni originali di Transport Tycoon Deluxe, edizione Windows. -description.ja_JP = Transport Tycoon Deluxe オリジナル版 効果音 (Windows) -description.ko_KR = 오리지널 트랜스포트 타이쿤 디럭스 윈도 에디션의 효과음입니다. -description.la_VA = Soni ex editione originale Transport Tycoon Deluxe Windows. -description.lb_LU = Original Transport Tycoon Deluxe Windows Editioun Sound. -description.lt_LT = Originalūs Transport Tycoon Deluxe Windows leidimo garsai. -description.nb_NO = Originale lyder fra Transport Tycoon Deluxe for Windows. -description.nl_NL = Originele geluiden van de Transport Tycoon Deluxe Windows-versie. -description.nn_NO = Originale lydar frå Transport Tycoon Deluxe for Windows. -description.pl_PL = Oryginalna edycja dźwięków dla Transport Tycoon Deluxe Windows. -description.pt_BR = Sons Originais do Transport Tycoon Deluxe, Edição Windows. -description.pt_PT = Sons originais da edição Windows de Transport Tycoon Deluxe. -description.ro_RO = Setul de sunete original al Transport Tycoon Deluxe pentru Windows. -description.ru_RU = Оригинальный набор звукового оформления из игры Transport Tycoon Deluxe для Windows. -description.sk_SK = Pôvodné zvuky Transport Tycoon Deluxe (Windows). -description.sl_SI = Originalni zvoki Transport Tycoon Deluxe različice oken(windows). -description.sr_RS = Originalni skup zvukova Transport Tycoon Deluxe Windows izdanja. -description.sv_SE = Originalljuden från Transport Tycoon Deluxe, Windows-utgåvan. -description.ta_IN = அசல் டிரான்ஸ்ஃபோர்ட் டைகூன் டீலக்ஸ் விண்டோஸ் பதிப்பு ஒலிகள். -description.th_TH = เสียงต้นตำหรับของ Transport Tycoon Deluxe Windows edition -description.tr_TR = Özgün Transport Tycoon Deluxe Windows sürümü sesleri. -description.uk_UA = Оригінальний набір звуків з Transport Tycoon Deluxe Windows edition. -description.vi_VN = Âm thanh gốc từ phiên bản Transport Tycoon Deluxe trên Windows -description.zh_CN = Transport Tycoon Deluxe Windows (运输大亨Windows豪华版)的原版音效包. -description.zh_TW = 原版 Transport Tycoon Deluxe Windows 版的音效。 - -[files] -samples = SAMPLE.CAT - -[md5s] -SAMPLE.CAT = 9212e81e72badd4bbe1eaeae66458e10 - -[origin] -default = You can find it on your Transport Tycoon Deluxe CD-ROM. diff --git a/media/baseset/translations.vbs b/media/baseset/translations.vbs new file mode 100644 index 0000000000..fffb577482 --- /dev/null +++ b/media/baseset/translations.vbs @@ -0,0 +1,123 @@ +Option Explicit + +' This file is part of OpenTTD. +' OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. +' OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +' See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + +Dim FSO +Set FSO = CreateObject("Scripting.FileSystemObject") + +Dim inputfile, outputfile, langpath, extra_grf +inputfile = WScript.Arguments(0) +outputfile = WScript.Arguments(1) +langpath = WScript.Arguments(2) + +If WScript.Arguments.Length > 3 Then + extra_grf = WScript.Arguments(3) +End If + +Function GetExtraGrfHash + Dim WSO, exe, line + + Set WSO = WScript.CreateObject("WScript.Shell") + Set exe = WSO.Exec("certutil -hashfile " & extra_grf & " MD5") + + Do Until exe.StdOut.AtEndOfStream + line = exe.StdOut.ReadLine + If Len(line) = 32 Then GetExtraGrfHash = line + Loop + + Set WSO = Nothing +End Function + +' Simple insertion sort, copied from translations.awk +Sub ISort(a) + Dim i, j, n, hold + n = UBound(a) + + For i = 1 To n + j = i + hold = a(j) + Do While a(j - 1) > hold + j = j - 1 + a(j + 1) = a(j) + + If j = 0 Then Exit Do + Loop + a(j) = hold + Next +End Sub + +Sub Lookup(ini_key, str_id, outfile) + Dim folder, file, line, p, lang, i + + ' Ensure only complete string matches + str_id = str_id & " " + + Set folder = FSO.GetFolder(langpath) + + Dim output() + ReDim output(folder.Files.Count) + + For Each file In folder.Files + If UCase(FSO.GetExtensionName(file.Name)) = "TXT" Then + Dim f + Set f = FSO.OpenTextFile(file.Path) + + Do Until f.atEndOfStream + line = f.ReadLine() + + If InStr(1, line, "##isocode ") = 1 Then + p = Split(line) + lang = p(1) + ElseIf InStr(1, line, str_id) = 1 Then + p = Split(line, ":", 2) + If lang = "en_GB" Then + output(i) = ini_key & " = " & p(1) + Else + output(i) = ini_key & "." & lang & " = " & p(1) + End If + i = i + 1 + End If + + Loop + End If + Next + + ReDim Preserve output(i - 1) + ISort output + + For Each line In output + outfile.Write line & vbCrLf + Next + +End Sub + +Dim line, p + +Dim infile +Set infile = FSO.OpenTextFile(inputfile) + +Dim outfile +Set outfile = FSO.CreateTextFile(outputfile, True) + +Do Until infile.atEndOfStream + + line = infile.ReadLine() + + If InStr(1, line, "ORIG_EXTRA.GRF ") = 1 Then + p = Split(line, "=") + If Trim(p(1)) = "" Then + outfile.Write("ORIG_EXTRA.GRF = " & GetExtraGrfHash() & vbCrLf) + Else + outfile.Write(line & vbCrLf) + End If + ElseIf InStr(1, line, "!! ") = 1 Then + p = Split(line) + Lookup p(1), p(2), outfile + Else + outfile.Write(line & vbCrLf) + End If + +Loop diff --git a/projects/basesets_vs140.vcxproj b/projects/basesets_vs140.vcxproj new file mode 100644 index 0000000000..4e5ed52c4a --- /dev/null +++ b/projects/basesets_vs140.vcxproj @@ -0,0 +1,99 @@ + + + + + Debug + Win32 + + + + basesets + {E12E77CA-C0F1-4ADA-943F-4929274249D3} + basesets + MakeFileProj + + + + Utility + false + v140 + + + + + + + + + ..\src\lang\afrikaans.txt;..\src\lang\arabic_egypt.txt;..\src\lang\basque.txt;..\src\lang\belarusian.txt;..\src\lang\brazilian_portuguese.txt;..\src\lang\bulgarian.txt;..\src\lang\catalan.txt;..\src\lang\croatian.txt;..\src\lang\czech.txt;..\src\lang\danish.txt;..\src\lang\dutch.txt;..\src\lang\english.txt;..\src\lang\english_AU.txt;..\src\lang\english_US.txt;..\src\lang\esperanto.txt;..\src\lang\estonian.txt;..\src\lang\faroese.txt;..\src\lang\finnish.txt;..\src\lang\french.txt;..\src\lang\gaelic.txt;..\src\lang\galician.txt;..\src\lang\german.txt;..\src\lang\greek.txt;..\src\lang\hebrew.txt;..\src\lang\hungarian.txt;..\src\lang\icelandic.txt;..\src\lang\indonesian.txt;..\src\lang\irish.txt;..\src\lang\italian.txt;..\src\lang\japanese.txt;..\src\lang\korean.txt;..\src\lang\latin.txt;..\src\lang\latvian.txt;..\src\lang\lithuanian.txt;..\src\lang\luxembourgish.txt;..\src\lang\malay.txt;..\src\lang\norwegian_bokmal.txt;..\src\lang\norwegian_nynorsk.txt;..\src\lang\polish.txt;..\src\lang\portuguese.txt;..\src\lang\romanian.txt;..\src\lang\russian.txt;..\src\lang\serbian.txt;..\src\lang\simplified_chinese.txt;..\src\lang\slovak.txt;..\src\lang\slovenian.txt;..\src\lang\spanish.txt;..\src\lang\spanish_MX.txt;..\src\lang\swedish.txt;..\src\lang\tamil.txt;..\src\lang\thai.txt;..\src\lang\traditional_chinese.txt;..\src\lang\turkish.txt;..\src\lang\ukrainian.txt;..\src\lang\vietnamese.txt;..\src\lang\welsh.txt + + + ..\bin\baseset\ + ..\objs\baseset\ + + + + Generating no_music.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_music.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\no_music.obm;%(Outputs) + + + Generating no_sound.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_sound.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\no_sound.obs;%(Outputs) + + + Generating orig_dos.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obg;%(Outputs) + + + Generating orig_dos.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obm;%(Outputs) + + + Generating orig_dos.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obs;%(Outputs) + + + Generating orig_dos_de.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos_de.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos_de.obg;%(Outputs) + + + Generating orig_tto.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_tto.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_tto.obm;%(Outputs) + + + Generating orig_win.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obg;%(Outputs) + + + Generating orig_win.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obm;%(Outputs) + + + Generating orig_win.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obs;%(Outputs) + + + + + + diff --git a/projects/basesets_vs140.vcxproj.filters b/projects/basesets_vs140.vcxproj.filters new file mode 100644 index 0000000000..aa555f3fc3 --- /dev/null +++ b/projects/basesets_vs140.vcxproj.filters @@ -0,0 +1,40 @@ + + + + + {b5a3ac67-19a9-4276-80e9-2360367d2680} + + + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + diff --git a/projects/basesets_vs140.vcxproj.filters.in b/projects/basesets_vs140.vcxproj.filters.in new file mode 100644 index 0000000000..07bff4542f --- /dev/null +++ b/projects/basesets_vs140.vcxproj.filters.in @@ -0,0 +1,11 @@ + + + + + {b5a3ac67-19a9-4276-80e9-2360367d2680} + + + +!!FILES!! + + diff --git a/projects/basesets_vs140.vcxproj.in b/projects/basesets_vs140.vcxproj.in new file mode 100644 index 0000000000..0471100a3e --- /dev/null +++ b/projects/basesets_vs140.vcxproj.in @@ -0,0 +1,40 @@ + + + + + Debug + Win32 + + + + basesets + {E12E77CA-C0F1-4ADA-943F-4929274249D3} + basesets + MakeFileProj + + + + Utility + false + v140 + + + + + + + + +!!FILTERS!! + + + ..\bin\baseset\ + ..\objs\baseset\ + + +!!FILES!! + + + + + diff --git a/projects/basesets_vs141.vcxproj b/projects/basesets_vs141.vcxproj new file mode 100644 index 0000000000..a01f24989b --- /dev/null +++ b/projects/basesets_vs141.vcxproj @@ -0,0 +1,99 @@ + + + + + Debug + Win32 + + + + basesets + {E12E77CA-C0F1-4ADA-943F-4929274249D3} + basesets + MakeFileProj + + + + Utility + false + v141 + + + + + + + + + ..\src\lang\afrikaans.txt;..\src\lang\arabic_egypt.txt;..\src\lang\basque.txt;..\src\lang\belarusian.txt;..\src\lang\brazilian_portuguese.txt;..\src\lang\bulgarian.txt;..\src\lang\catalan.txt;..\src\lang\croatian.txt;..\src\lang\czech.txt;..\src\lang\danish.txt;..\src\lang\dutch.txt;..\src\lang\english.txt;..\src\lang\english_AU.txt;..\src\lang\english_US.txt;..\src\lang\esperanto.txt;..\src\lang\estonian.txt;..\src\lang\faroese.txt;..\src\lang\finnish.txt;..\src\lang\french.txt;..\src\lang\gaelic.txt;..\src\lang\galician.txt;..\src\lang\german.txt;..\src\lang\greek.txt;..\src\lang\hebrew.txt;..\src\lang\hungarian.txt;..\src\lang\icelandic.txt;..\src\lang\indonesian.txt;..\src\lang\irish.txt;..\src\lang\italian.txt;..\src\lang\japanese.txt;..\src\lang\korean.txt;..\src\lang\latin.txt;..\src\lang\latvian.txt;..\src\lang\lithuanian.txt;..\src\lang\luxembourgish.txt;..\src\lang\malay.txt;..\src\lang\norwegian_bokmal.txt;..\src\lang\norwegian_nynorsk.txt;..\src\lang\polish.txt;..\src\lang\portuguese.txt;..\src\lang\romanian.txt;..\src\lang\russian.txt;..\src\lang\serbian.txt;..\src\lang\simplified_chinese.txt;..\src\lang\slovak.txt;..\src\lang\slovenian.txt;..\src\lang\spanish.txt;..\src\lang\spanish_MX.txt;..\src\lang\swedish.txt;..\src\lang\tamil.txt;..\src\lang\thai.txt;..\src\lang\traditional_chinese.txt;..\src\lang\turkish.txt;..\src\lang\ukrainian.txt;..\src\lang\vietnamese.txt;..\src\lang\welsh.txt + + + ..\bin\baseset\ + ..\objs\baseset\ + + + + Generating no_music.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_music.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\no_music.obm;%(Outputs) + + + Generating no_sound.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_sound.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\no_sound.obs;%(Outputs) + + + Generating orig_dos.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obg;%(Outputs) + + + Generating orig_dos.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obm;%(Outputs) + + + Generating orig_dos.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obs;%(Outputs) + + + Generating orig_dos_de.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos_de.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos_de.obg;%(Outputs) + + + Generating orig_tto.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_tto.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_tto.obm;%(Outputs) + + + Generating orig_win.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obg;%(Outputs) + + + Generating orig_win.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obm;%(Outputs) + + + Generating orig_win.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obs;%(Outputs) + + + + + + diff --git a/projects/basesets_vs141.vcxproj.filters b/projects/basesets_vs141.vcxproj.filters new file mode 100644 index 0000000000..aa555f3fc3 --- /dev/null +++ b/projects/basesets_vs141.vcxproj.filters @@ -0,0 +1,40 @@ + + + + + {b5a3ac67-19a9-4276-80e9-2360367d2680} + + + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + diff --git a/projects/basesets_vs141.vcxproj.filters.in b/projects/basesets_vs141.vcxproj.filters.in new file mode 100644 index 0000000000..07bff4542f --- /dev/null +++ b/projects/basesets_vs141.vcxproj.filters.in @@ -0,0 +1,11 @@ + + + + + {b5a3ac67-19a9-4276-80e9-2360367d2680} + + + +!!FILES!! + + diff --git a/projects/basesets_vs141.vcxproj.in b/projects/basesets_vs141.vcxproj.in new file mode 100644 index 0000000000..69dbd2e078 --- /dev/null +++ b/projects/basesets_vs141.vcxproj.in @@ -0,0 +1,40 @@ + + + + + Debug + Win32 + + + + basesets + {E12E77CA-C0F1-4ADA-943F-4929274249D3} + basesets + MakeFileProj + + + + Utility + false + v141 + + + + + + + + +!!FILTERS!! + + + ..\bin\baseset\ + ..\objs\baseset\ + + +!!FILES!! + + + + + diff --git a/projects/generate b/projects/generate index be3396c6f0..cb97ed3dea 100755 --- a/projects/generate +++ b/projects/generate @@ -30,6 +30,7 @@ fi # strgen_vs141.vcxproj.filters is for MSVC 2017 # generate_vs141.vcxproj is for MSVC 2017 # version_vs141.vcxproj is for MSVC 2017 +# basesets_vs141.vcxproj is for MSVC 2017 # openttd_vs140.sln is for MSVC 2015 # openttd_vs140.vcxproj is for MSVC 2015 @@ -39,6 +40,7 @@ fi # strgen_vs140.vcxproj.filters is for MSVC 2015 # generate_vs140.vcxproj is for MSVC 2015 # version_vs140.vcxproj is for MSVC 2015 +# basesets_vs140.vcxproj is for MSVC 2015 @@ -197,6 +199,44 @@ load_settings_data() { eval "$2=\"\$RES\$RES2\"" } +load_baseset_data() { + FIRST="" + RES="" + RES2=" +#4 " + # Windows Folder sort and Linux Folder sort are slightly different. + # By removing the extension and sorting it on Linux, they are the same. + for i in `ls $2 | sed s~.txt$~~g | sort` + do + if [ "$FIRST" != "" ]; then + RES2="$RES2;" + else + FIRST=1 + fi + i=`basename $i` + RES2="$RES2..\\src\\lang\\$i.txt" + done + RES2="$RES2" + # Windows Folder sort and Linux Folder sort are slightly different. + # By fiddling with the extension and sorting it on Linux, they are the same. + for i in `ls $1 | sed s~\\\.~000~g | sort | sed s~000~.~g` + do + i=`basename $i` + RES="$RES +#2 +#2 Generating "$i" baseset metadata file +#2 cscript //nologo ..\\media\\baseset\\translations.vbs \"%(FullPath)\" \"\$(OutputPath)$i\" ..\\src\\lang ..\\bin\\baseset\\orig_extra.grf +#2 \$(Langs);..\\bin\\baseset\\orig_extra.grf;%(AdditionalInputs) +#2 ..\\bin\\baseset\\"$i";%(Outputs) +#2 +#3 +#3 Baseset Metadata +#3 " + done + + eval "$3=\"\$RES\$RES2\"" +} + generate() { echo "Generating $2..." if [ $# -eq 3 ]; then @@ -263,6 +303,11 @@ settingsfiles=`echo "$settings" | grep "^#4" | sed "s~#4~~g"` settingscommand=`echo "$settings" | grep "^#3" | sed "s~#3~~g"` settingsvcxproj=`echo "$settings" | grep "^#2" | sed "s~#2~~g"` +load_baseset_data "$ROOT_DIR/media/baseset/*.ob?" "$ROOT_DIR/src/lang/*.txt" baseset +basesetfiles=`echo "$baseset" | grep "^#3" | sed "s-#3--g"` +basesetvcxproj=`echo "$baseset" | grep "^#2" | sed "s~#2~~g"` +basesetlangs=`echo "$baseset" | grep "^#4" | sed "s~#4~~g"` + generate "$openttdvcxproj" "openttd_vs140.vcxproj" generate "$openttdfiles" "openttd_vs140.vcxproj.filters" "$openttdfilters" generate "$openttdvcxproj" "openttd_vs141.vcxproj" @@ -275,3 +320,7 @@ generate "$settingsvcxproj" "settings_vs140.vcxproj" "$settingscommand" generate "$settingsfiles" "settings_vs140.vcxproj.filters" generate "$settingsvcxproj" "settings_vs141.vcxproj" "$settingscommand" generate "$settingsfiles" "settings_vs141.vcxproj.filters" +generate "$basesetvcxproj" "basesets_vs140.vcxproj" "$basesetlangs" +generate "$basesetfiles" "basesets_vs140.vcxproj.filters" +generate "$basesetvcxproj" "basesets_vs141.vcxproj" "$basesetlangs" +generate "$basesetfiles" "basesets_vs141.vcxproj.filters" diff --git a/projects/generate.vbs b/projects/generate.vbs index 218dcfc0ec..d4b61a6c82 100644 --- a/projects/generate.vbs +++ b/projects/generate.vbs @@ -18,6 +18,7 @@ Set FSO = CreateObject("Scripting.FileSystemObject") ' strgen_vs141.vcxproj.filters is for MSVC 2017 ' generate_vs141.vcxproj is for MSVC 2017 ' version_vs141.vcxproj is for MSVC 2017 +' basesets_vs141.vcxproj is for MSVC 2017 ' openttd_vs140.sln is for MSVC 2015 ' openttd_vs140.vcxproj is for MSVC 2015 @@ -27,6 +28,7 @@ Set FSO = CreateObject("Scripting.FileSystemObject") ' strgen_vs140.vcxproj.filters is for MSVC 2015 ' generate_vs140.vcxproj is for MSVC 2015 ' version_vs140.vcxproj is for MSVC 2015 +' basesets_vs140.vcxproj is for MSVC 2015 Sub safety_check(filename) Dim file, line, regexp, list @@ -267,6 +269,48 @@ Sub load_settings_data(dir, ByRef vcxproj, ByRef command, ByRef files) Next End Sub +Sub load_baseset_data(dir, langdir, ByRef vcxproj, ByRef files, ByRef langs) + Dim folder, file, ext, first_time + Set folder = FSO.GetFolder(langdir) + langs = " " + For Each file In folder.Files + If first_time <> 0 Then + langs = langs & ";" + Else + first_time = 1 + End If + file = FSO.GetFileName(file) + ext = FSO.GetExtensionName(file) + langs = langs & "..\src\lang\" & file + Next + langs = langs & "" + first_time = 0 + Set folder = FSO.GetFolder(dir) + For Each file In folder.Files + file = FSO.GetFileName(file) + ext = FSO.GetExtensionName(file) + If ext = "obm" Or ext = "obg" Or ext = "obs" Then + If first_time <> 0 Then + vcxproj = vcxproj & vbCrLf + files = files & vbCrLf + Else + first_time = 1 + End If + vcxproj = vcxproj & _ + " " & vbCrLf & _ + " Generating " & file & " baseset metadata file" & vbCrLf & _ + " cscript //nologo ..\media\baseset\translations.vbs " & Chr(34) & "%(FullPath)" & Chr(34) & " " & Chr(34) & "$(OutputPath)" & file & Chr(34) & " ..\src\lang ..\bin\baseset\orig_extra.grf" & vbCrLf & _ + " $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs)" & vbCrLf & _ + " ..\bin\baseset\" & file & ";%(Outputs)" & vbCrLf & _ + " " + files = files & _ + " " & vbCrLf & _ + " Baseset Metadata" & vbCrLf & _ + " " + End If + Next +End Sub + Sub generate(data, dest, data2) Dim srcfile, destfile, line WScript.Echo "Generating " & FSO.GetFileName(dest) & "..." @@ -338,3 +382,10 @@ generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs140.vcxproj", setting generate settingsfiles, ROOT_DIR & "/projects/settings_vs140.vcxproj.filters", Null generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs141.vcxproj", settingscommand generate settingsfiles, ROOT_DIR & "/projects/settings_vs141.vcxproj.filters", Null + +Dim basesetvcxproj, basesetfiles, basesetlangs +load_baseset_data ROOT_DIR & "/media/baseset", ROOT_DIR & "/src/lang", basesetvcxproj, basesetfiles, basesetlangs +generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs140.vcxproj", basesetlangs +generate basesetfiles, ROOT_DIR & "/projects/basesets_vs140.vcxproj.filters", Null +generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs141.vcxproj", basesetlangs +generate basesetfiles, ROOT_DIR & "/projects/basesets_vs141.vcxproj.filters", Null diff --git a/projects/openttd_vs140.sln b/projects/openttd_vs140.sln index c9beb2a1e1..e2b7632f7e 100644 --- a/projects/openttd_vs140.sln +++ b/projects/openttd_vs140.sln @@ -19,6 +19,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regression", "regression_vs140.vcxproj", "{4712B013-437D-42CE-947F-DEBABA15261F}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basesets", "basesets_vs140.vcxproj", "{E12E77CA-C0F1-4ADA-943F-4929274249D3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -83,6 +85,14 @@ Global {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|x64.ActiveCfg = Debug|Win32 {4712B013-437D-42CE-947F-DEBABA15261F}.Release|Win32.ActiveCfg = Debug|Win32 {4712B013-437D-42CE-947F-DEBABA15261F}.Release|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.Build.0 = Debug|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index 59f52a08da..b2dbfd2932 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -1361,6 +1361,10 @@ {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} false + + {e12e77ca-c0f1-4ada-943f-4929274249d3} + false + diff --git a/projects/openttd_vs140.vcxproj.in b/projects/openttd_vs140.vcxproj.in index c5e120401f..951f8b6048 100644 --- a/projects/openttd_vs140.vcxproj.in +++ b/projects/openttd_vs140.vcxproj.in @@ -365,6 +365,10 @@ {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} false + + {e12e77ca-c0f1-4ada-943f-4929274249d3} + false + diff --git a/projects/openttd_vs141.sln b/projects/openttd_vs141.sln index f163125cbe..6e328ba764 100644 --- a/projects/openttd_vs141.sln +++ b/projects/openttd_vs141.sln @@ -19,6 +19,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regression", "regression_vs141.vcxproj", "{4712B013-437D-42CE-947F-DEBABA15261F}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basesets", "basesets_vs141.vcxproj", "{E12E77CA-C0F1-4ADA-943F-4929274249D3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -83,6 +85,14 @@ Global {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|x64.ActiveCfg = Debug|Win32 {4712B013-437D-42CE-947F-DEBABA15261F}.Release|Win32.ActiveCfg = Debug|Win32 {4712B013-437D-42CE-947F-DEBABA15261F}.Release|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.Build.0 = Debug|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj index 525119179d..92edccd7c9 100644 --- a/projects/openttd_vs141.vcxproj +++ b/projects/openttd_vs141.vcxproj @@ -1361,6 +1361,10 @@ {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} false + + {e12e77ca-c0f1-4ada-943f-4929274249d3} + false + diff --git a/projects/openttd_vs141.vcxproj.in b/projects/openttd_vs141.vcxproj.in index 2a8a78af75..d28f500f1c 100644 --- a/projects/openttd_vs141.vcxproj.in +++ b/projects/openttd_vs141.vcxproj.in @@ -365,6 +365,10 @@ {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} false + + {e12e77ca-c0f1-4ada-943f-4929274249d3} + false + From b6de8c093010887a2962c677ca042faab9c87eeb Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 25 Jan 2019 23:16:34 +0000 Subject: [PATCH 239/622] Fix #7098, Fix #7061: Inverted test led to invalid iterator access. --- src/terraform_cmd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/terraform_cmd.cpp b/src/terraform_cmd.cpp index 5b476da18e..9839f5e34b 100644 --- a/src/terraform_cmd.cpp +++ b/src/terraform_cmd.cpp @@ -313,7 +313,7 @@ CommandCost CmdTerraformLand(TileIndex tile, DoCommandFlag flags, uint32 p1, uin for (TileIndexSet::const_iterator it = ts.dirty_tiles.begin(); it != ts.dirty_tiles.end(); it++) { MarkTileDirtyByTile(*it); TileIndexToHeightMap::const_iterator new_height = ts.tile_to_new_height.find(tile); - if (new_height != ts.tile_to_new_height.end()) continue; + if (new_height == ts.tile_to_new_height.end()) continue; MarkTileDirtyByTile(*it, 0, new_height->second); } From 65782af2f40973a71ab33f4437faeb5b3859c49b Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sat, 26 Jan 2019 11:03:54 +0100 Subject: [PATCH 240/622] Add: Visual Studio 2019 project files --- README.md | 6 +- docs/Readme_Windows_MSVC.md | 3 +- projects/basesets_vs142.vcxproj | 99 + projects/basesets_vs142.vcxproj.filters | 40 + projects/basesets_vs142.vcxproj.filters.in | 11 + projects/basesets_vs142.vcxproj.in | 40 + projects/generate | 18 + projects/generate.vbs | 18 + projects/generate_vs142.vcxproj | 40 + projects/langs_vs142.vcxproj | 390 +++ projects/langs_vs142.vcxproj.filters | 176 ++ projects/langs_vs142.vcxproj.filters.in | 12 + projects/langs_vs142.vcxproj.in | 61 + projects/openttd_vs142.sln | 103 + projects/openttd_vs142.vcxproj | 1370 +++++++++ projects/openttd_vs142.vcxproj.filters | 3101 ++++++++++++++++++++ projects/openttd_vs142.vcxproj.filters.in | 13 + projects/openttd_vs142.vcxproj.in | 374 +++ projects/regression_vs142.vcxproj | 41 + projects/settings_vs142.vcxproj | 60 + projects/settings_vs142.vcxproj.filters | 35 + projects/settings_vs142.vcxproj.filters.in | 15 + projects/settings_vs142.vcxproj.in | 54 + projects/settingsgen_vs142.vcxproj | 84 + projects/settingsgen_vs142.vcxproj.filters | 32 + projects/strgen_vs142.vcxproj | 96 + projects/strgen_vs142.vcxproj.filters | 35 + projects/version_vs142.vcxproj | 42 + 28 files changed, 6365 insertions(+), 4 deletions(-) create mode 100644 projects/basesets_vs142.vcxproj create mode 100644 projects/basesets_vs142.vcxproj.filters create mode 100644 projects/basesets_vs142.vcxproj.filters.in create mode 100644 projects/basesets_vs142.vcxproj.in create mode 100644 projects/generate_vs142.vcxproj create mode 100644 projects/langs_vs142.vcxproj create mode 100644 projects/langs_vs142.vcxproj.filters create mode 100644 projects/langs_vs142.vcxproj.filters.in create mode 100644 projects/langs_vs142.vcxproj.in create mode 100644 projects/openttd_vs142.sln create mode 100644 projects/openttd_vs142.vcxproj create mode 100644 projects/openttd_vs142.vcxproj.filters create mode 100644 projects/openttd_vs142.vcxproj.filters.in create mode 100644 projects/openttd_vs142.vcxproj.in create mode 100644 projects/regression_vs142.vcxproj create mode 100644 projects/settings_vs142.vcxproj create mode 100644 projects/settings_vs142.vcxproj.filters create mode 100644 projects/settings_vs142.vcxproj.filters.in create mode 100644 projects/settings_vs142.vcxproj.in create mode 100644 projects/settingsgen_vs142.vcxproj create mode 100644 projects/settingsgen_vs142.vcxproj.filters create mode 100644 projects/strgen_vs142.vcxproj create mode 100644 projects/strgen_vs142.vcxproj.filters create mode 100644 projects/version_vs142.vcxproj diff --git a/README.md b/README.md index 6004bdc7f5..7c842a1f86 100644 --- a/README.md +++ b/README.md @@ -593,8 +593,7 @@ no graphical user interface; you would be building a dedicated server. The following compilers are known to compile OpenTTD: -- Microsoft Visual C++ (MSVC) 2005, 2008 and 2010. - Version 2005 gives bogus warnings about scoping issues. +- Microsoft Visual C++ (MSVC) 2015, 2017 and 2019. - GNU Compiler Collection (GCC) 3.3 - 4.4, 4.6 - 4.8. - Versions 4.1 and earlier give bogus warnings about uninitialised variables. - Versions 4.4, 4.6 give bogus warnings about freeing non-heap objects. @@ -605,7 +604,8 @@ The following compilers are known to compile OpenTTD: The following compilers are known not to compile OpenTTD: -- Microsoft Visual C++ (MSVC) 2003 and earlier. +- Microsoft Visual C++ (MSVC) 2013 and earlier. + These old versions do not support modern C++ language features. - GNU Compiler Collection (GCC) 3.2 and earlier. These old versions fail due to OpenTTD's template usage. - GNU Compiler Collection (GCC) 4.5. It optimizes enums too aggressively. diff --git a/docs/Readme_Windows_MSVC.md b/docs/Readme_Windows_MSVC.md index c60904c72a..90ab2af657 100644 --- a/docs/Readme_Windows_MSVC.md +++ b/docs/Readme_Windows_MSVC.md @@ -18,7 +18,7 @@ done during installing Visual Studio, by selecting `Visual C++ ATL for x86 and x64` depending on your version). If not, you can get it at this location: -- [MS Windows Platform SDK](http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en) +- [MS Windows Platform SDK](https://developer.microsoft.com/en-US/windows/downloads/windows-10-sdk) Install the SDK by following the instructions as given. @@ -55,6 +55,7 @@ Open the appropriate `sln` (Solution) file for your version of Visual Studio: - VS 2015: projects/openttd_vs140.sln - VS 2017: projects/openttd_vs141.sln +- VS 2019: projects/openttd_vs142.sln Set the build mode to `Release` in `Build > Configuration manager > Active solution configuration`. diff --git a/projects/basesets_vs142.vcxproj b/projects/basesets_vs142.vcxproj new file mode 100644 index 0000000000..d483708aa7 --- /dev/null +++ b/projects/basesets_vs142.vcxproj @@ -0,0 +1,99 @@ + + + + + Debug + Win32 + + + + basesets + {E12E77CA-C0F1-4ADA-943F-4929274249D3} + basesets + MakeFileProj + + + + Utility + false + v142 + + + + + + + + + ..\src\lang\afrikaans.txt;..\src\lang\arabic_egypt.txt;..\src\lang\basque.txt;..\src\lang\belarusian.txt;..\src\lang\brazilian_portuguese.txt;..\src\lang\bulgarian.txt;..\src\lang\catalan.txt;..\src\lang\croatian.txt;..\src\lang\czech.txt;..\src\lang\danish.txt;..\src\lang\dutch.txt;..\src\lang\english.txt;..\src\lang\english_AU.txt;..\src\lang\english_US.txt;..\src\lang\esperanto.txt;..\src\lang\estonian.txt;..\src\lang\faroese.txt;..\src\lang\finnish.txt;..\src\lang\french.txt;..\src\lang\gaelic.txt;..\src\lang\galician.txt;..\src\lang\german.txt;..\src\lang\greek.txt;..\src\lang\hebrew.txt;..\src\lang\hungarian.txt;..\src\lang\icelandic.txt;..\src\lang\indonesian.txt;..\src\lang\irish.txt;..\src\lang\italian.txt;..\src\lang\japanese.txt;..\src\lang\korean.txt;..\src\lang\latin.txt;..\src\lang\latvian.txt;..\src\lang\lithuanian.txt;..\src\lang\luxembourgish.txt;..\src\lang\malay.txt;..\src\lang\norwegian_bokmal.txt;..\src\lang\norwegian_nynorsk.txt;..\src\lang\polish.txt;..\src\lang\portuguese.txt;..\src\lang\romanian.txt;..\src\lang\russian.txt;..\src\lang\serbian.txt;..\src\lang\simplified_chinese.txt;..\src\lang\slovak.txt;..\src\lang\slovenian.txt;..\src\lang\spanish.txt;..\src\lang\spanish_MX.txt;..\src\lang\swedish.txt;..\src\lang\tamil.txt;..\src\lang\thai.txt;..\src\lang\traditional_chinese.txt;..\src\lang\turkish.txt;..\src\lang\ukrainian.txt;..\src\lang\vietnamese.txt;..\src\lang\welsh.txt + + + ..\bin\baseset\ + ..\objs\baseset\ + + + + Generating no_music.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_music.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\no_music.obm;%(Outputs) + + + Generating no_sound.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)no_sound.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\no_sound.obs;%(Outputs) + + + Generating orig_dos.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obg;%(Outputs) + + + Generating orig_dos.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obm;%(Outputs) + + + Generating orig_dos.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos.obs;%(Outputs) + + + Generating orig_dos_de.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_dos_de.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_dos_de.obg;%(Outputs) + + + Generating orig_tto.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_tto.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_tto.obm;%(Outputs) + + + Generating orig_win.obg baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obg" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obg;%(Outputs) + + + Generating orig_win.obm baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obm" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obm;%(Outputs) + + + Generating orig_win.obs baseset metadata file + cscript //nologo ..\media\baseset\translations.vbs "%(FullPath)" "$(OutputPath)orig_win.obs" ..\src\lang ..\bin\baseset\orig_extra.grf + $(Langs);..\bin\baseset\orig_extra.grf;%(AdditionalInputs) + ..\bin\baseset\orig_win.obs;%(Outputs) + + + + + + diff --git a/projects/basesets_vs142.vcxproj.filters b/projects/basesets_vs142.vcxproj.filters new file mode 100644 index 0000000000..aa555f3fc3 --- /dev/null +++ b/projects/basesets_vs142.vcxproj.filters @@ -0,0 +1,40 @@ + + + + + {b5a3ac67-19a9-4276-80e9-2360367d2680} + + + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + Baseset Metadata + + + diff --git a/projects/basesets_vs142.vcxproj.filters.in b/projects/basesets_vs142.vcxproj.filters.in new file mode 100644 index 0000000000..07bff4542f --- /dev/null +++ b/projects/basesets_vs142.vcxproj.filters.in @@ -0,0 +1,11 @@ + + + + + {b5a3ac67-19a9-4276-80e9-2360367d2680} + + + +!!FILES!! + + diff --git a/projects/basesets_vs142.vcxproj.in b/projects/basesets_vs142.vcxproj.in new file mode 100644 index 0000000000..9743d83e7a --- /dev/null +++ b/projects/basesets_vs142.vcxproj.in @@ -0,0 +1,40 @@ + + + + + Debug + Win32 + + + + basesets + {E12E77CA-C0F1-4ADA-943F-4929274249D3} + basesets + MakeFileProj + + + + Utility + false + v142 + + + + + + + + +!!FILTERS!! + + + ..\bin\baseset\ + ..\objs\baseset\ + + +!!FILES!! + + + + + diff --git a/projects/generate b/projects/generate index cb97ed3dea..595fa3acc6 100755 --- a/projects/generate +++ b/projects/generate @@ -22,6 +22,16 @@ then exit 1 fi +# openttd_vs142.sln is for MSVC 2019 +# openttd_vs142.vcxproj is for MSVC 2019 +# openttd_vs142.vcxproj.filters is for MSVC 2019 +# langs_vs142.vcxproj is for MSVC 2019 +# strgen_vs142.vcxproj is for MSVC 2019 +# strgen_vs142.vcxproj.filters is for MSVC 2019 +# generate_vs142.vcxproj is for MSVC 2019 +# version_vs142.vcxproj is for MSVC 2019 +# basesets_vs142.vcxproj is for MSVC 2019 + # openttd_vs141.sln is for MSVC 2017 # openttd_vs141.vcxproj is for MSVC 2017 # openttd_vs141.vcxproj.filters is for MSVC 2017 @@ -312,15 +322,23 @@ generate "$openttdvcxproj" "openttd_vs140.vcxproj" generate "$openttdfiles" "openttd_vs140.vcxproj.filters" "$openttdfilters" generate "$openttdvcxproj" "openttd_vs141.vcxproj" generate "$openttdfiles" "openttd_vs141.vcxproj.filters" "$openttdfilters" +generate "$openttdvcxproj" "openttd_vs142.vcxproj" +generate "$openttdfiles" "openttd_vs142.vcxproj.filters" "$openttdfilters" generate "$langvcxproj" "langs_vs140.vcxproj" generate "$langfiles" "langs_vs140.vcxproj.filters" generate "$langvcxproj" "langs_vs141.vcxproj" generate "$langfiles" "langs_vs141.vcxproj.filters" +generate "$langvcxproj" "langs_vs142.vcxproj" +generate "$langfiles" "langs_vs142.vcxproj.filters" generate "$settingsvcxproj" "settings_vs140.vcxproj" "$settingscommand" generate "$settingsfiles" "settings_vs140.vcxproj.filters" generate "$settingsvcxproj" "settings_vs141.vcxproj" "$settingscommand" generate "$settingsfiles" "settings_vs141.vcxproj.filters" +generate "$settingsvcxproj" "settings_vs142.vcxproj" "$settingscommand" +generate "$settingsfiles" "settings_vs142.vcxproj.filters" generate "$basesetvcxproj" "basesets_vs140.vcxproj" "$basesetlangs" generate "$basesetfiles" "basesets_vs140.vcxproj.filters" generate "$basesetvcxproj" "basesets_vs141.vcxproj" "$basesetlangs" generate "$basesetfiles" "basesets_vs141.vcxproj.filters" +generate "$basesetvcxproj" "basesets_vs142.vcxproj" "$basesetlangs" +generate "$basesetfiles" "basesets_vs142.vcxproj.filters" diff --git a/projects/generate.vbs b/projects/generate.vbs index d4b61a6c82..e8cf13d03d 100644 --- a/projects/generate.vbs +++ b/projects/generate.vbs @@ -10,6 +10,16 @@ Option Explicit Dim FSO Set FSO = CreateObject("Scripting.FileSystemObject") +' openttd_vs142.sln is for MSVC 2019 +' openttd_vs142.vcxproj is for MSVC 2019 +' openttd_vs142.vcxproj.filters is for MSVC 2019 +' langs_vs142.vcxproj is for MSVC 2019 +' strgen_vs142.vcxproj is for MSVC 2019 +' strgen_vs142.vcxproj.filters is for MSVC 2019 +' generate_vs142.vcxproj is for MSVC 2019 +' version_vs142.vcxproj is for MSVC 2019 +' basesets_vs142.vcxproj is for MSVC 2019 + ' openttd_vs141.sln is for MSVC 2017 ' openttd_vs141.vcxproj is for MSVC 2017 ' openttd_vs141.vcxproj.filters is for MSVC 2017 @@ -368,6 +378,8 @@ generate openttdvcxproj, ROOT_DIR & "/projects/openttd_vs140.vcxproj", Null generate openttdfiles, ROOT_DIR & "/projects/openttd_vs140.vcxproj.filters", openttdfilters generate openttdvcxproj, ROOT_DIR & "/projects/openttd_vs141.vcxproj", Null generate openttdfiles, ROOT_DIR & "/projects/openttd_vs141.vcxproj.filters", openttdfilters +generate openttdvcxproj, ROOT_DIR & "/projects/openttd_vs142.vcxproj", Null +generate openttdfiles, ROOT_DIR & "/projects/openttd_vs142.vcxproj.filters", openttdfilters Dim langvcxproj, langfiles load_lang_data ROOT_DIR & "/src/lang", langvcxproj, langfiles @@ -375,6 +387,8 @@ generate langvcxproj, ROOT_DIR & "/projects/langs_vs140.vcxproj", Null generate langfiles, ROOT_DIR & "/projects/langs_vs140.vcxproj.filters", Null generate langvcxproj, ROOT_DIR & "/projects/langs_vs141.vcxproj", Null generate langfiles, ROOT_DIR & "/projects/langs_vs141.vcxproj.filters", Null +generate langvcxproj, ROOT_DIR & "/projects/langs_vs142.vcxproj", Null +generate langfiles, ROOT_DIR & "/projects/langs_vs142.vcxproj.filters", Null Dim settingsvcxproj, settingscommand, settingsfiles load_settings_data ROOT_DIR & "/src/table", settingsvcxproj, settingscommand, settingsfiles @@ -382,6 +396,8 @@ generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs140.vcxproj", setting generate settingsfiles, ROOT_DIR & "/projects/settings_vs140.vcxproj.filters", Null generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs141.vcxproj", settingscommand generate settingsfiles, ROOT_DIR & "/projects/settings_vs141.vcxproj.filters", Null +generate settingsvcxproj, ROOT_DIR & "/projects/settings_vs142.vcxproj", settingscommand +generate settingsfiles, ROOT_DIR & "/projects/settings_vs142.vcxproj.filters", Null Dim basesetvcxproj, basesetfiles, basesetlangs load_baseset_data ROOT_DIR & "/media/baseset", ROOT_DIR & "/src/lang", basesetvcxproj, basesetfiles, basesetlangs @@ -389,3 +405,5 @@ generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs140.vcxproj", basesetl generate basesetfiles, ROOT_DIR & "/projects/basesets_vs140.vcxproj.filters", Null generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs141.vcxproj", basesetlangs generate basesetfiles, ROOT_DIR & "/projects/basesets_vs141.vcxproj.filters", Null +generate settingsvcxproj, ROOT_DIR & "/projects/basesets_vs142.vcxproj", settingscommand +generate settingsfiles, ROOT_DIR & "/projects/basesets_vs142.vcxproj.filters", Null diff --git a/projects/generate_vs142.vcxproj b/projects/generate_vs142.vcxproj new file mode 100644 index 0000000000..3e55d7a1d4 --- /dev/null +++ b/projects/generate_vs142.vcxproj @@ -0,0 +1,40 @@ + + + + + Debug + Win32 + + + + generate + {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34} + generate + 8.1 + + + + Utility + v142 + + + + + + + + + + + + + Document + Running %27generate.vbs%27 ... + cscript "$(ProjectDir)generate.vbs" + %(FullPath);%(AdditionalInputs) + + + + + + diff --git a/projects/langs_vs142.vcxproj b/projects/langs_vs142.vcxproj new file mode 100644 index 0000000000..0a11156bb0 --- /dev/null +++ b/projects/langs_vs142.vcxproj @@ -0,0 +1,390 @@ + + + + + Debug + Win32 + + + + langs + {0F066B23-18DF-4284-8265-F4A5E7E3B966} + langs + MakeFileProj + + + + Utility + false + v142 + + + + + + + + + + ..\bin\lang\ + ..\objs\langs\ + + + + Generating strings.h + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table + + + ./langs.tlb + + + + + + + Generating english language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\english.lng;%(Outputs) + + + Generating afrikaans language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\afrikaans.lng;%(Outputs) + + + Generating arabic_egypt language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\arabic_egypt.lng;%(Outputs) + + + Generating basque language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\basque.lng;%(Outputs) + + + Generating belarusian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\belarusian.lng;%(Outputs) + + + Generating brazilian_portuguese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\brazilian_portuguese.lng;%(Outputs) + + + Generating bulgarian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\bulgarian.lng;%(Outputs) + + + Generating catalan language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\catalan.lng;%(Outputs) + + + Generating croatian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\croatian.lng;%(Outputs) + + + Generating czech language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\czech.lng;%(Outputs) + + + Generating danish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\danish.lng;%(Outputs) + + + Generating dutch language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\dutch.lng;%(Outputs) + + + Generating english_AU language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\english_AU.lng;%(Outputs) + + + Generating english_US language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\english_US.lng;%(Outputs) + + + Generating esperanto language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\esperanto.lng;%(Outputs) + + + Generating estonian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\estonian.lng;%(Outputs) + + + Generating faroese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\faroese.lng;%(Outputs) + + + Generating finnish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\finnish.lng;%(Outputs) + + + Generating french language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\french.lng;%(Outputs) + + + Generating gaelic language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\gaelic.lng;%(Outputs) + + + Generating galician language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\galician.lng;%(Outputs) + + + Generating german language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\german.lng;%(Outputs) + + + Generating greek language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\greek.lng;%(Outputs) + + + Generating hebrew language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\hebrew.lng;%(Outputs) + + + Generating hungarian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\hungarian.lng;%(Outputs) + + + Generating icelandic language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\icelandic.lng;%(Outputs) + + + Generating indonesian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\indonesian.lng;%(Outputs) + + + Generating irish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\irish.lng;%(Outputs) + + + Generating italian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\italian.lng;%(Outputs) + + + Generating japanese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\japanese.lng;%(Outputs) + + + Generating korean language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\korean.lng;%(Outputs) + + + Generating latin language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\latin.lng;%(Outputs) + + + Generating latvian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\latvian.lng;%(Outputs) + + + Generating lithuanian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\lithuanian.lng;%(Outputs) + + + Generating luxembourgish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\luxembourgish.lng;%(Outputs) + + + Generating malay language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\malay.lng;%(Outputs) + + + Generating norwegian_bokmal language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\norwegian_bokmal.lng;%(Outputs) + + + Generating norwegian_nynorsk language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\norwegian_nynorsk.lng;%(Outputs) + + + Generating polish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\polish.lng;%(Outputs) + + + Generating portuguese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\portuguese.lng;%(Outputs) + + + Generating romanian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\romanian.lng;%(Outputs) + + + Generating russian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\russian.lng;%(Outputs) + + + Generating serbian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\serbian.lng;%(Outputs) + + + Generating simplified_chinese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\simplified_chinese.lng;%(Outputs) + + + Generating slovak language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\slovak.lng;%(Outputs) + + + Generating slovenian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\slovenian.lng;%(Outputs) + + + Generating spanish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\spanish.lng;%(Outputs) + + + Generating spanish_MX language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\spanish_MX.lng;%(Outputs) + + + Generating swedish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\swedish.lng;%(Outputs) + + + Generating tamil language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\tamil.lng;%(Outputs) + + + Generating thai language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\thai.lng;%(Outputs) + + + Generating traditional_chinese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\traditional_chinese.lng;%(Outputs) + + + Generating turkish language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\turkish.lng;%(Outputs) + + + Generating ukrainian language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\ukrainian.lng;%(Outputs) + + + Generating vietnamese language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\vietnamese.lng;%(Outputs) + + + Generating welsh language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\welsh.lng;%(Outputs) + + + + + {a133a442-bd0a-4ade-b117-ad7545e4bdd1} + false + + + + + + diff --git a/projects/langs_vs142.vcxproj.filters b/projects/langs_vs142.vcxproj.filters new file mode 100644 index 0000000000..bf5257ec82 --- /dev/null +++ b/projects/langs_vs142.vcxproj.filters @@ -0,0 +1,176 @@ + + + + + {2a164580-9033-4a01-974b-b21da507efda} + + + + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + Translations + + + diff --git a/projects/langs_vs142.vcxproj.filters.in b/projects/langs_vs142.vcxproj.filters.in new file mode 100644 index 0000000000..0d60ee9595 --- /dev/null +++ b/projects/langs_vs142.vcxproj.filters.in @@ -0,0 +1,12 @@ + + + + + {2a164580-9033-4a01-974b-b21da507efda} + + + + +!!FILES!! + + diff --git a/projects/langs_vs142.vcxproj.in b/projects/langs_vs142.vcxproj.in new file mode 100644 index 0000000000..f24c7cad78 --- /dev/null +++ b/projects/langs_vs142.vcxproj.in @@ -0,0 +1,61 @@ + + + + + Debug + Win32 + + + + langs + {0F066B23-18DF-4284-8265-F4A5E7E3B966} + langs + MakeFileProj + + + + Utility + false + v142 + + + + + + + + + + ..\bin\lang\ + ..\objs\langs\ + + + + Generating strings.h + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\objs\langs\table + + + ./langs.tlb + + + + + + + Generating english language file + ..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "%(FullPath)" + ..\src\lang\english.txt;..\objs\strgen\strgen.exe;%(AdditionalInputs) + ..\bin\lang\english.lng;%(Outputs) + +!!FILES!! + + + + {a133a442-bd0a-4ade-b117-ad7545e4bdd1} + false + + + + + + diff --git a/projects/openttd_vs142.sln b/projects/openttd_vs142.sln new file mode 100644 index 0000000000..f07fb388d5 --- /dev/null +++ b/projects/openttd_vs142.sln @@ -0,0 +1,103 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.23107.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs142.vcxproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "strgen", "strgen_vs142.vcxproj", "{A133A442-BD0A-4ADE-B117-AD7545E4BDD1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "langs", "langs_vs142.vcxproj", "{0F066B23-18DF-4284-8265-F4A5E7E3B966}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "version", "version_vs142.vcxproj", "{1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "generate", "generate_vs142.vcxproj", "{2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settings", "settings_vs142.vcxproj", "{0817F629-589E-4A3B-B81A-8647BC571E35}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settingsgen", "settingsgen_vs142.vcxproj", "{E9548DE9-F089-49B7-93A6-30BE2CC311C7}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "regression", "regression_vs142.vcxproj", "{4712B013-437D-42CE-947F-DEBABA15261F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "basesets", "basesets_vs142.vcxproj", "{E12E77CA-C0F1-4ADA-943F-4929274249D3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.ActiveCfg = Debug|Win32 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|Win32.Build.0 = Debug|Win32 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.ActiveCfg = Debug|x64 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Debug|x64.Build.0 = Debug|x64 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.ActiveCfg = Release|Win32 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|Win32.Build.0 = Release|Win32 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.ActiveCfg = Release|x64 + {668328A0-B40E-4CDB-BD72-D0064424414A}.Release|x64.Build.0 = Release|x64 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.ActiveCfg = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|Win32.Build.0 = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.ActiveCfg = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Debug|x64.Build.0 = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.ActiveCfg = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|Win32.Build.0 = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.ActiveCfg = Debug|Win32 + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1}.Release|x64.Build.0 = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.ActiveCfg = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|Win32.Build.0 = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.ActiveCfg = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Debug|x64.Build.0 = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.ActiveCfg = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|Win32.Build.0 = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.ActiveCfg = Debug|Win32 + {0F066B23-18DF-4284-8265-F4A5E7E3B966}.Release|x64.Build.0 = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.ActiveCfg = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|Win32.Build.0 = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.ActiveCfg = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Debug|x64.Build.0 = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.ActiveCfg = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|Win32.Build.0 = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.ActiveCfg = Debug|Win32 + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC}.Release|x64.Build.0 = Debug|Win32 + {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|Win32.ActiveCfg = Debug|Win32 + {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Debug|x64.ActiveCfg = Debug|Win32 + {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|Win32.ActiveCfg = Debug|Win32 + {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34}.Release|x64.ActiveCfg = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.ActiveCfg = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|Win32.Build.0 = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.ActiveCfg = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Debug|x64.Build.0 = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.ActiveCfg = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|Win32.Build.0 = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.ActiveCfg = Debug|Win32 + {0817F629-589E-4A3B-B81A-8647BC571E35}.Release|x64.Build.0 = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.ActiveCfg = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|Win32.Build.0 = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.ActiveCfg = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Debug|x64.Build.0 = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.ActiveCfg = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|Win32.Build.0 = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.ActiveCfg = Debug|Win32 + {E9548DE9-F089-49B7-93A6-30BE2CC311C7}.Release|x64.Build.0 = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|Win32.ActiveCfg = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Debug|x64.ActiveCfg = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Release|Win32.ActiveCfg = Debug|Win32 + {4712B013-437D-42CE-947F-DEBABA15261F}.Release|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|Win32.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Debug|x64.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|Win32.Build.0 = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.ActiveCfg = Debug|Win32 + {E12E77CA-C0F1-4ADA-943F-4929274249D3}.Release|x64.Build.0 = Debug|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(DPCodeReviewSolutionGUID) = preSolution + DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} + EndGlobalSection +EndGlobal diff --git a/projects/openttd_vs142.vcxproj b/projects/openttd_vs142.vcxproj new file mode 100644 index 0000000000..34f7c5f280 --- /dev/null +++ b/projects/openttd_vs142.vcxproj @@ -0,0 +1,1370 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + openttd + {668328A0-B40E-4CDB-BD72-D0064424414A} + openttd + x86-windows-static + x64-windows-static + + + + Application + false + Unicode + v142 + + + Application + false + Unicode + true + v142 + + + Application + false + Unicode + v142 + + + Application + false + Unicode + true + v142 + + + + + + + + + + + + + + + + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + false + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + false + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(ProjectDir)..\bin + + + + .\Release/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Full + AnySuitable + true + Size + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + 4Bytes + false + true + + + + + + + All + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + %(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + true + false + + + MachineX86 + true + 5.01 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + .\Debug/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Disabled + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + false + + + MachineX86 + 5.01 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + X64 + .\Release/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Full + AnySuitable + true + Size + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + Default + false + true + + + + + + + All + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + %(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + true + MachineX64 + true + 5.02 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + X64 + .\Debug/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Disabled + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + + + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + Cdecl + Default + true + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + MachineX64 + 5.02 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {0f066b23-18df-4284-8265-f4a5e7e3b966} + false + + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + + {0817f629-589e-4a3b-b81a-8647bc571e35} + false + + + {a133a442-bd0a-4ade-b117-ad7545e4bdd1} + false + + + {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} + false + + + {e12e77ca-c0f1-4ada-943f-4929274249d3} + false + + + + diff --git a/projects/openttd_vs142.vcxproj.filters b/projects/openttd_vs142.vcxproj.filters new file mode 100644 index 0000000000..e93c94f1f7 --- /dev/null +++ b/projects/openttd_vs142.vcxproj.filters @@ -0,0 +1,3101 @@ + + + + + {c76ff9f1-1e62-46d8-8d55-000000000000} + + + {c76ff9f1-1e62-46d8-8d55-000000000001} + + + {c76ff9f1-1e62-46d8-8d55-000000000002} + + + {c76ff9f1-1e62-46d8-8d55-000000000003} + + + {c76ff9f1-1e62-46d8-8d55-000000000004} + + + {c76ff9f1-1e62-46d8-8d55-000000000005} + + + {c76ff9f1-1e62-46d8-8d55-000000000006} + + + {c76ff9f1-1e62-46d8-8d55-000000000007} + + + {c76ff9f1-1e62-46d8-8d55-000000000008} + + + {c76ff9f1-1e62-46d8-8d55-000000000009} + + + {c76ff9f1-1e62-46d8-8d55-000000000010} + + + {c76ff9f1-1e62-46d8-8d55-000000000011} + + + {c76ff9f1-1e62-46d8-8d55-000000000012} + + + {c76ff9f1-1e62-46d8-8d55-000000000013} + + + {c76ff9f1-1e62-46d8-8d55-000000000014} + + + {c76ff9f1-1e62-46d8-8d55-000000000015} + + + {c76ff9f1-1e62-46d8-8d55-000000000016} + + + {c76ff9f1-1e62-46d8-8d55-000000000017} + + + {c76ff9f1-1e62-46d8-8d55-000000000018} + + + {c76ff9f1-1e62-46d8-8d55-000000000019} + + + {c76ff9f1-1e62-46d8-8d55-000000000020} + + + {c76ff9f1-1e62-46d8-8d55-000000000021} + + + {c76ff9f1-1e62-46d8-8d55-000000000022} + + + {c76ff9f1-1e62-46d8-8d55-000000000023} + + + {c76ff9f1-1e62-46d8-8d55-000000000024} + + + {c76ff9f1-1e62-46d8-8d55-000000000025} + + + {c76ff9f1-1e62-46d8-8d55-000000000026} + + + {c76ff9f1-1e62-46d8-8d55-000000000027} + + + {c76ff9f1-1e62-46d8-8d55-000000000028} + + + {c76ff9f1-1e62-46d8-8d55-000000000029} + + + {c76ff9f1-1e62-46d8-8d55-000000000030} + + + {c76ff9f1-1e62-46d8-8d55-000000000031} + + + {c76ff9f1-1e62-46d8-8d55-000000000032} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + Core Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + GUI Source Code + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Widgets + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Command handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Save/Load handlers + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + Tables + + + MD5 + + + MD5 + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Script + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + Squirrel headers + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI Core + + + AI API + + + Game API + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Game Core + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Script API Implementation + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Blitters + + + Drivers + + + Drivers + + + Drivers + + + Sprite loaders + + + Sprite loaders + + + Sprite loaders + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + NewGRF + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Map Accessors + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Misc + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Network Core + + + Pathfinder + + + Pathfinder + + + Pathfinder + + + Pathfinder + + + Pathfinder + + + Pathfinder + + + NPF + + + NPF + + + NPF + + + NPF + + + NPF + + + NPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + YAPF + + + Video + + + Video + + + Video + + + Video + + + Music + + + Music + + + Music + + + Music + + + Sound + + + Sound + + + Sound + + + Sound + + + Windows files + + + Windows files + + + Windows files + + + Windows files + + + Threading + + + Threading + + + + + + + diff --git a/projects/openttd_vs142.vcxproj.filters.in b/projects/openttd_vs142.vcxproj.filters.in new file mode 100644 index 0000000000..126bd61459 --- /dev/null +++ b/projects/openttd_vs142.vcxproj.filters.in @@ -0,0 +1,13 @@ + + + +!!FILTERS!! + + +!!FILES!! + + + + + + diff --git a/projects/openttd_vs142.vcxproj.in b/projects/openttd_vs142.vcxproj.in new file mode 100644 index 0000000000..91689e8bde --- /dev/null +++ b/projects/openttd_vs142.vcxproj.in @@ -0,0 +1,374 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + openttd + {668328A0-B40E-4CDB-BD72-D0064424414A} + openttd + x86-windows-static + x64-windows-static + + + + Application + false + Unicode + v142 + + + Application + false + Unicode + true + v142 + + + Application + false + Unicode + v142 + + + Application + false + Unicode + true + v142 + + + + + + + + + + + + + + + + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + false + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + false + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + $(SolutionDir)..\objs\$(Platform)\$(Configuration)\ + $(ProjectDir)..\bin + + + + .\Release/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Full + AnySuitable + true + Size + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + 4Bytes + false + true + + + + + + + All + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + %(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + true + false + + + MachineX86 + true + 5.01 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + .\Debug/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Disabled + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + false + + + MachineX86 + 5.01 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + X64 + .\Release/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Full + AnySuitable + true + Size + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + true + Sync + MultiThreaded + Default + false + true + + + + + + + All + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + FastCall + Default + true + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + %(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + true + MachineX64 + true + 5.02 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + + + X64 + .\Debug/openttd.tlb + + + + + /J /Zc:throwingNew /std:c++latest %(AdditionalOptions) + Disabled + true + ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + + + + + + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + false + true + ProgramDatabase + Cdecl + Default + true + true + + + _DEBUG;%(PreprocessorDefinitions) + 0x0809 + + + winmm.lib;ws2_32.lib;imm32.lib;%(AdditionalDependencies) + true + LIBCMT.lib;%(IgnoreSpecificDefaultLibraries) + true + Windows + 1048576 + 1048576 + MachineX64 + 5.02 + + + os_versions.manifest + PerMonitorHighDPIAware + + + copy "$(OutDir)$(TargetName)$(TargetExt)" "$(SolutionDir)..\bin\$(TargetName)$(TargetExt)" + + + +!!FILES!! + + + + + + + + {0f066b23-18df-4284-8265-f4a5e7e3b966} + false + + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + + {0817f629-589e-4a3b-b81a-8647bc571e35} + false + + + {a133a442-bd0a-4ade-b117-ad7545e4bdd1} + false + + + {1a2b3c5e-1c23-41a5-9c9b-acba2aa75fec} + false + + + {e12e77ca-c0f1-4ada-943f-4929274249d3} + false + + + + diff --git a/projects/regression_vs142.vcxproj b/projects/regression_vs142.vcxproj new file mode 100644 index 0000000000..3ddcc6f37a --- /dev/null +++ b/projects/regression_vs142.vcxproj @@ -0,0 +1,41 @@ + + + + + Debug + Win32 + + + + {4712B013-437D-42CE-947F-DEBABA15261F} + regression + regression + + + + Makefile + v142 + + + + + + + + + + + + call regression.bat + call regression.bat + del ..\bin\tmp.regression + + + + {668328a0-b40e-4cdb-bd72-d0064424414a} + + + + + + diff --git a/projects/settings_vs142.vcxproj b/projects/settings_vs142.vcxproj new file mode 100644 index 0000000000..a2dda134b5 --- /dev/null +++ b/projects/settings_vs142.vcxproj @@ -0,0 +1,60 @@ + + + + + Debug + Win32 + + + + settings + {0817F629-589E-4A3B-B81A-8647BC571E35} + settings + + + + Makefile + v142 + + + + + + + + + +..\objs\settings\settings_gen.exe -o ..\objs\settings\table\settings.h -b ..\src\table\settings.h.preamble -a ..\src\table\settings.h.postamble ..\src\table\company_settings.ini ..\src\table\currency_settings.ini ..\src\table\gameopt_settings.ini ..\src\table\misc_settings.ini ..\src\table\settings.ini ..\src\table\win32_settings.ini ..\src\table\window_settings.ini + + + + ..\objs\settings\table\ + ..\objs\settings\table\ + $(SettingsCommandLine) + $(SettingsCommandLine) + del ..\objs\settings\table\settings.h + ..\objs\settings\table\settings.h + + + + + + + + + + + + + + + + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + + + + + diff --git a/projects/settings_vs142.vcxproj.filters b/projects/settings_vs142.vcxproj.filters new file mode 100644 index 0000000000..8caf9fa0a6 --- /dev/null +++ b/projects/settings_vs142.vcxproj.filters @@ -0,0 +1,35 @@ + + + + + {21deca6c-8df4-4f34-9dad-17d7781cd5a0} + + + + + INI + + + INI + + + INI + + + INI + + + INI + + + INI + + + INI + + + + + + + diff --git a/projects/settings_vs142.vcxproj.filters.in b/projects/settings_vs142.vcxproj.filters.in new file mode 100644 index 0000000000..08f90670d2 --- /dev/null +++ b/projects/settings_vs142.vcxproj.filters.in @@ -0,0 +1,15 @@ + + + + + {21deca6c-8df4-4f34-9dad-17d7781cd5a0} + + + +!!FILES!! + + + + + + diff --git a/projects/settings_vs142.vcxproj.in b/projects/settings_vs142.vcxproj.in new file mode 100644 index 0000000000..3e49b7ca02 --- /dev/null +++ b/projects/settings_vs142.vcxproj.in @@ -0,0 +1,54 @@ + + + + + Debug + Win32 + + + + settings + {0817F629-589E-4A3B-B81A-8647BC571E35} + settings + + + + Makefile + v142 + + + + + + + + + +!!FILTERS!! + + + + ..\objs\settings\table\ + ..\objs\settings\table\ + $(SettingsCommandLine) + $(SettingsCommandLine) + del ..\objs\settings\table\settings.h + ..\objs\settings\table\settings.h + + +!!FILES!! + + + + + + + + {e9548de9-f089-49b7-93a6-30be2cc311c7} + false + + + + + + diff --git a/projects/settingsgen_vs142.vcxproj b/projects/settingsgen_vs142.vcxproj new file mode 100644 index 0000000000..ca0418c15c --- /dev/null +++ b/projects/settingsgen_vs142.vcxproj @@ -0,0 +1,84 @@ + + + + + Debug + Win32 + + + + settingsgen + {E9548DE9-F089-49B7-93A6-30BE2CC311C7} + settings + 8.1 + + + + Application + MultiByte + v142 + + + + + + + + + + <_ProjectFileVersion>10.0.30319.1 + ..\objs\settings\ + ..\objs\settings\ + settings_gen + + + + + + + + %(Inputs) + + + MinSpace + Size + SETTINGSGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + All + $(IntDir)$(TargetName).pdb + Level3 + true + ProgramDatabase + MultiThreadedDebug + + + $(OutDir)settings_gen.exe + true + false + + + Console + 5.01 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/projects/settingsgen_vs142.vcxproj.filters b/projects/settingsgen_vs142.vcxproj.filters new file mode 100644 index 0000000000..c8afe0c8ed --- /dev/null +++ b/projects/settingsgen_vs142.vcxproj.filters @@ -0,0 +1,32 @@ + + + + + {a4678737-b3b3-4be5-9db1-fa6ccd164c59} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + + + + + + diff --git a/projects/strgen_vs142.vcxproj b/projects/strgen_vs142.vcxproj new file mode 100644 index 0000000000..5329d68daa --- /dev/null +++ b/projects/strgen_vs142.vcxproj @@ -0,0 +1,96 @@ + + + + + Debug + Win32 + + + + strgen + {A133A442-BD0A-4ADE-B117-AD7545E4BDD1} + strgen + 8.1 + + + + Application + false + MultiByte + v142 + + + + + + + + + + $(SolutionDir)..\objs\strgen\ + $(SolutionDir)..\objs\strgen\ + false + AllRules.ruleset + + + + + + .\Debug/strgen.tlb + + + + + /MP %(AdditionalOptions) + MinSpace + Size + STRGEN;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + Default + MultiThreadedDebug + + + All + $(IntDir) + $(IntDir) + $(IntDir)$(TargetName).pdb + Level3 + true + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x041d + + + true + true + $(IntDir)strgen.pdb + Console + false + + + MachineX86 + 5.01 + + + + + + + + + + + + + + + + + + + + + + diff --git a/projects/strgen_vs142.vcxproj.filters b/projects/strgen_vs142.vcxproj.filters new file mode 100644 index 0000000000..58864ee691 --- /dev/null +++ b/projects/strgen_vs142.vcxproj.filters @@ -0,0 +1,35 @@ + + + + + {5894294c-d4dc-41f0-be31-e56cff4e0405} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + + + + + + + + diff --git a/projects/version_vs142.vcxproj b/projects/version_vs142.vcxproj new file mode 100644 index 0000000000..31971e35c9 --- /dev/null +++ b/projects/version_vs142.vcxproj @@ -0,0 +1,42 @@ + + + + + Debug + Win32 + + + + version + {1A2B3C5E-1C23-41A5-9C9B-ACBA2AA75FEC} + version + + + + Makefile + MultiByte + v142 + + + + + + + + + + $(SolutionDir)..\objs\version\ + $(SolutionDir)..\objs\version\ + cscript "$(ProjectDir)/determineversion.vbs" + cscript "$(ProjectDir)/determineversion.vbs" + ..\src\rev.cpp + del ..\src\rev.cpp + + + + + + + + + From 36e299fb6dee0aff0d5f22533d4d589f7bf9948e Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 26 Jan 2019 19:45:43 +0100 Subject: [PATCH 241/622] Update: Translations from eints croatian: 3 changes by VoyagerOne russian: 18 changes by Lone_Wolf --- src/lang/croatian.txt | 3 +++ src/lang/russian.txt | 22 ++++++++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index de8a0e641a..79b6b1d9b0 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -3451,6 +3451,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrira STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Razina proizvodnje: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrija je najavila uskoro zatvaranje! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Treba: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Proizvodi: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Treba: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} diff --git a/src/lang/russian.txt b/src/lang/russian.txt index a56ff783e9..87a5b81c31 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2557,9 +2557,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Комб STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Маршрутный светофор{}Позволяет нескольким поездам находиться в одном сигнальном блоке, если каждый из них может зарезервировать безопасный путь. Допускает следование поездов в обе стороны. STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Односторонний маршрутн. светофор{}Позволяет нескольким поездам находиться в одном сигнальном блоке, если каждый из них может зарезервировать безопасный путь. Не допускает следования поездов в обратную сторону. STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Изменение типа сигнала{}Когда кнопка нажата, щёлкните для преобразования существующего сигнала в сигнал выбранного типа и варианта, или щёлкните с нажатым Ctrl для перебора существующих вариантов. Shift+щелчок - оценка стоимости преобразования. -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Плотность расстановки сигналов при протягивании. -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Уменьшить плотность сигналов при протягивании -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Увеличить плотность сигналов при протягивании +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Расстояние между сигналами при протягивании. +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Уменьшить расстояние между сигналами при протягивании +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Увеличить расстояние между сигналами при протягивании # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Выберите железнодорожный мост @@ -2886,9 +2886,16 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Команда разработчиков 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_GAMELOOP_TOOLTIP :{BLACK}Кол-во игровых циклов, рассчитываемых в секунду. +STR_FRAMERATE_RATE_BLITTER :{BLACK}Вывод на экран: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Кол-во отображаемых кадров в секунду. +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Текущая скорость игры: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Фактическая скорость игры +STR_FRAMERATE_CURRENT :{WHITE}Сейчас +STR_FRAMERATE_AVERAGE :{WHITE}В среднем STR_FRAMERATE_DATA_POINTS :{BLACK}Данные по {COMMA} измерени{P ю ям ям} STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} мс STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} мс @@ -2900,10 +2907,17 @@ STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COM STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} с ############ Leave those lines in this order!! STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Задержка графа распределения: +STR_FRAMERATE_DRAWING :{BLACK}Отрисовка изображения: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Дополнительные окна: +STR_FRAMERATE_VIDEO :{BLACK}Вывод на экран: +STR_FRAMERATE_SOUND :{BLACK}Обработка звука: ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Задержка графа распределения -STR_FRAMETIME_CAPTION_DRAWING :Отрисовка графики +STR_FRAMETIME_CAPTION_DRAWING :Отрисовка изображения +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Отрисовка изображения в доп. окнах +STR_FRAMETIME_CAPTION_VIDEO :Вывод на экран +STR_FRAMETIME_CAPTION_SOUND :Обработка звука ############ End of leave-in-this-order From a18b0eba5b1dc4c60eac9313e485d6912676ce31 Mon Sep 17 00:00:00 2001 From: glx Date: Sat, 26 Jan 2019 16:58:16 +0100 Subject: [PATCH 242/622] Add: more options for translators --- src/build_vehicle_gui.cpp | 2 +- src/lang/english.txt | 8 +++++++- src/newgrf_gui.cpp | 6 +++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 51247e84ba..713cc5bbe4 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1070,7 +1070,7 @@ struct BuildVehicleWindow : Window { * This could also be useful for eyecandy vehicles of other types, but is likely too confusing for joe, */ if (this->vehicle_type == VEH_TRAIN) { this->cargo_filter[filter_items] = CF_NONE; - this->cargo_filter_texts[filter_items] = STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE; + this->cargo_filter_texts[filter_items] = STR_PURCHASE_INFO_NONE; filter_items++; } diff --git a/src/lang/english.txt b/src/lang/english.txt index 7ad560bdff..a5188d05bc 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2894,8 +2894,13 @@ STR_NEWGRF_SETTINGS_GRF_ID :{BLACK}GRF ID: STR_NEWGRF_SETTINGS_VERSION :{BLACK}Version: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. compatible version: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{RAW_STRING} -STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palette: {SILVER}{RAW_STRING} +STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palette: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Default (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Default (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Legacy (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Legacy (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameters: {SILVER}{STRING1} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :None STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}No information available STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Matching file not found @@ -3458,6 +3463,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacity STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Powered Wagons: {GOLD}+{POWER}{BLACK} Weight: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Refittable to: {GOLD}{STRING2} STR_PURCHASE_INFO_ALL_TYPES :All cargo types +STR_PURCHASE_INFO_NONE :None STR_PURCHASE_INFO_ALL_BUT :All but {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Max. Tractive Effort: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Range: {GOLD}{COMMA} tiles diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 6a45304833..140e296571 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -113,15 +113,15 @@ static void ShowNewGRFInfo(const GRFConfig *c, uint x, uint y, uint right, uint SetDParam(0, STR_JUST_RAW_STRING); SetDParamStr(1, buff); } else { - SetDParam(0, STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE); + SetDParam(0, STR_NEWGRF_SETTINGS_PARAMETER_NONE); } y = DrawStringMultiLine(x, right, y, bottom, STR_NEWGRF_SETTINGS_PARAMETER); /* Draw the palette of the NewGRF */ if (c->palette & GRFP_BLT_32BPP) { - SetDParamStr(0, (c->palette & GRFP_USE_WINDOWS) ? "Legacy (W) / 32 bpp" : "Default (D) / 32 bpp"); + SetDParam(0, (c->palette & GRFP_USE_WINDOWS) ? STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP : STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP); } else { - SetDParamStr(0, (c->palette & GRFP_USE_WINDOWS) ? "Legacy (W)" : "Default (D)"); + SetDParam(0, (c->palette & GRFP_USE_WINDOWS) ? STR_NEWGRF_SETTINGS_PALETTE_LEGACY : STR_NEWGRF_SETTINGS_PALETTE_DEFAULT); } y = DrawStringMultiLine(x, right, y, bottom, STR_NEWGRF_SETTINGS_PALETTE); } From a5836874ef824f63d81e12064aba2f5c762109e8 Mon Sep 17 00:00:00 2001 From: J0an Josep Date: Tue, 15 Jan 2019 22:37:32 +0100 Subject: [PATCH 243/622] Codechange: Use track functions. --- src/pathfinder/yapf/yapf_ship.cpp | 2 +- src/ship_cmd.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pathfinder/yapf/yapf_ship.cpp b/src/pathfinder/yapf/yapf_ship.cpp index 7ca95ae698..c6e484feaa 100644 --- a/src/pathfinder/yapf/yapf_ship.cpp +++ b/src/pathfinder/yapf/yapf_ship.cpp @@ -59,7 +59,7 @@ public: /* handle special case - when next tile is destination tile */ if (tile == v->dest_tile) { /* convert tracks to trackdirs */ - TrackdirBits trackdirs = (TrackdirBits)(tracks | ((int)tracks << 8)); + TrackdirBits trackdirs = TrackBitsToTrackdirBits(tracks); /* limit to trackdirs reachable from enterdir */ trackdirs &= DiagdirReachesTrackdirs(enterdir); diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 4603043d6e..ec0d430896 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -464,7 +464,7 @@ static Track ChooseShipTrack(Ship *v, TileIndex tile, DiagDirection enterdir, Tr if (v->dest_tile == 0 || DistanceManhattan(tile, v->dest_tile) > SHIP_MAX_ORDER_DISTANCE + 5) { /* No destination or destination too far, don't invoke pathfinder. */ track = TrackBitsToTrack(v->state); - if (track != TRACK_X && track != TRACK_Y) track = TrackToOppositeTrack(track); + if (!IsDiagonalTrack(track)) track = TrackToOppositeTrack(track); if (!HasBit(tracks, track)) { /* Can't continue in same direction so pick first available track. */ if (_settings_game.pf.forbid_90_deg) { From 2084779b5a9d16d6d04744c913960fd59bde2356 Mon Sep 17 00:00:00 2001 From: Samu Date: Mon, 1 Oct 2018 14:56:12 +0100 Subject: [PATCH 244/622] Fix #6574: Go to takeoff if no hangar Sends the aircraft to takeoff if the airport it's currently at, got no hangar even if the order is to go to hangar. --- src/aircraft_cmd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 6799f7c643..5f36a75779 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -1546,7 +1546,7 @@ static void AircraftEventHandler_AtTerminal(Aircraft *v, const AirportFTAClass * go_to_hangar = Station::Get(v->targetairport)->airport.HasHangar(); } - if (go_to_hangar) { + if (go_to_hangar && Station::Get(v->targetairport)->airport.HasHangar()) { v->state = HANGAR; } else { /* airplane goto state takeoff, helicopter to helitakeoff */ From 3e0e3cfac150d7a63a714a0af073caaabfffbaa2 Mon Sep 17 00:00:00 2001 From: Samu Date: Tue, 2 Oct 2018 00:27:07 +0100 Subject: [PATCH 245/622] Fix: Direct the aircraft to the correct location of the hangar when skipping to a go to hangar order When manually skipping to a 'go to hangar' order in the order list, while the aircraft is flying, direct the aircraft to the correct location of the hangar. --- src/order_cmd.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index d9d741dbce..83dacdca45 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -2093,6 +2093,13 @@ bool UpdateOrderDest(Vehicle *v, const Order *order, int conditional_depth, bool } else { if (v->type != VEH_AIRCRAFT) { v->SetDestTile(Depot::Get(order->GetDestination())->xy); + } else { + Aircraft *a = Aircraft::From(v); + DestinationID destination = a->current_order.GetDestination(); + if (a->targetairport != destination) { + /* The aircraft is now heading for a different hangar than the next in the orders */ + a->SetDestTile(a->GetOrderStationLocation(destination)); + } } return true; } From 256b94a03d7eb3c2c0264b6c93f5d83c299ada8a Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 27 Jan 2019 01:34:30 +0000 Subject: [PATCH 246/622] Fix: Ignore company colour selection when showing different company's colour scheme. --- src/company_gui.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/company_gui.cpp b/src/company_gui.cpp index c62c6d61cf..208b798a7a 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -648,9 +648,11 @@ public: virtual void OnPaint() { + bool local = (CompanyID)this->window_number == _local_company; + /* Disable dropdown controls if no scheme is selected */ - this->SetWidgetDisabledState(WID_SCL_PRI_COL_DROPDOWN, this->sel == 0); - this->SetWidgetDisabledState(WID_SCL_SEC_COL_DROPDOWN, this->sel == 0); + this->SetWidgetDisabledState(WID_SCL_PRI_COL_DROPDOWN, !local || this->sel == 0); + this->SetWidgetDisabledState(WID_SCL_SEC_COL_DROPDOWN, !local || this->sel == 0); this->DrawWidgets(); } @@ -789,6 +791,9 @@ public: virtual void OnDropdownSelect(int widget, int index) { + bool local = (CompanyID)this->window_number == _local_company; + if (!local) return; + for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) { /* Changed colour for the selected scheme, or all visible schemes if CTRL is pressed. */ if (HasBit(this->sel, scheme) || (_ctrl_pressed && _livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme))) { From 6e5b90f4f726c0f53861d725cf5a5ecc4093f477 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 27 Jan 2019 01:34:30 +0000 Subject: [PATCH 247/622] Change: For consistency, add company name to colour scheme window. --- src/company_gui.cpp | 4 ++++ src/lang/english.txt | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 208b798a7a..dcf1f3695d 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -660,6 +660,10 @@ public: virtual void SetStringParameters(int widget) const { switch (widget) { + case WID_SCL_CAPTION: + SetDParam(0, (CompanyID)this->window_number); + break; + case WID_SCL_PRI_COL_DROPDOWN: case WID_SCL_SEC_COL_DROPDOWN: { const Company *c = Company::Get((CompanyID)this->window_number); diff --git a/src/lang/english.txt b/src/lang/english.txt index a5188d05bc..83406296cc 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1820,7 +1820,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Change c STR_CHEAT_SETUP_PROD :{LTBLUE}Enable modifying production values: {ORANGE}{STRING1} # Livery window -STR_LIVERY_CAPTION :{WHITE}New Colour Scheme +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Colour Scheme STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Show general colour schemes STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Show train colour schemes From b60b193a6d9b682f731b24763b44108d7fccd7f8 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 27 Jan 2019 01:34:32 +0000 Subject: [PATCH 248/622] Cleanup: Remove out of date translations for changed string. --- src/lang/afrikaans.txt | 1 - src/lang/arabic_egypt.txt | 1 - src/lang/basque.txt | 1 - src/lang/belarusian.txt | 1 - src/lang/brazilian_portuguese.txt | 1 - src/lang/bulgarian.txt | 1 - src/lang/catalan.txt | 1 - src/lang/croatian.txt | 1 - src/lang/czech.txt | 1 - src/lang/danish.txt | 1 - src/lang/dutch.txt | 1 - src/lang/english_AU.txt | 1 - src/lang/english_US.txt | 1 - src/lang/esperanto.txt | 1 - src/lang/estonian.txt | 1 - src/lang/faroese.txt | 1 - src/lang/finnish.txt | 1 - src/lang/french.txt | 1 - src/lang/gaelic.txt | 1 - src/lang/galician.txt | 1 - src/lang/german.txt | 1 - src/lang/greek.txt | 1 - src/lang/hebrew.txt | 1 - src/lang/hungarian.txt | 1 - src/lang/icelandic.txt | 1 - src/lang/indonesian.txt | 1 - src/lang/irish.txt | 1 - src/lang/italian.txt | 1 - src/lang/japanese.txt | 1 - src/lang/korean.txt | 1 - src/lang/latin.txt | 1 - src/lang/latvian.txt | 1 - src/lang/lithuanian.txt | 1 - src/lang/luxembourgish.txt | 1 - src/lang/malay.txt | 1 - src/lang/norwegian_bokmal.txt | 1 - src/lang/norwegian_nynorsk.txt | 1 - src/lang/polish.txt | 1 - src/lang/portuguese.txt | 1 - src/lang/romanian.txt | 1 - src/lang/russian.txt | 1 - src/lang/serbian.txt | 1 - src/lang/simplified_chinese.txt | 1 - src/lang/slovak.txt | 1 - src/lang/slovenian.txt | 1 - src/lang/spanish.txt | 1 - src/lang/spanish_MX.txt | 1 - src/lang/swedish.txt | 1 - src/lang/tamil.txt | 1 - src/lang/thai.txt | 1 - src/lang/traditional_chinese.txt | 1 - src/lang/turkish.txt | 1 - src/lang/ukrainian.txt | 1 - src/lang/unfinished/frisian.txt | 1 - src/lang/unfinished/persian.txt | 1 - src/lang/unfinished/urdu.txt | 1 - src/lang/vietnamese.txt | 1 - src/lang/welsh.txt | 1 - 58 files changed, 58 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 56cbe04a04..cf55383ea8 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1801,7 +1801,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Verander STR_CHEAT_SETUP_PROD :{LTBLUE}Aktiveer modifisering van produksie waardes: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nuwe Kleur Skema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Toon algemene kleurskemas STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Wys trein kleur skemas diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 2eb29baa31..5e7f918831 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1471,7 +1471,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}غير STR_CHEAT_SETUP_PROD :{LTBLUE}تفعيل تغيير قيمة الانتاج: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}الوان جديدة STR_LIVERY_GENERAL_TOOLTIP :{BLACK}اظهر اللون العام STR_LIVERY_TRAIN_TOOLTIP :{BLACK}اظهر لون القطائرات diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 0c2e09e24d..2c1309edab 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1711,7 +1711,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Aurtengo STR_CHEAT_SETUP_PROD :{LTBLUE}Ekoizpen balioak aldatzea baimendu: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Kolore eskema berria STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Erakutsi kolore eskema orokorrak STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Erakutsi trenen kolore eskemak diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index c2e3a1435d..cce68727e9 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -2126,7 +2126,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Зьмя STR_CHEAT_SETUP_PROD :{LTBLUE}Дазволіць зьмяненьне прадукцыйнасьці: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Новая каляровая схэма STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Паказаць асноўныя каляровыя схэмы STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Паказаць каляровыя схэмы цягнікоў diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index ffa56055fd..65cccee2ea 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1817,7 +1817,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Mudar an STR_CHEAT_SETUP_PROD :{LTBLUE}Ativar modificação de valores de produção: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Novo Esquema de Cores STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Exibir esquemas de cor gerais STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Exibe esquemas de cor de trens diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index d674c67d40..e88b498979 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1749,7 +1749,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Пром STR_CHEAT_SETUP_PROD :{LTBLUE}Промяна на производствените стойности: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Нова цветове STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Показване на общи цветови схеми STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Показване цветовите схеми на влаковете diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 57d4e57322..5e9a8d35dd 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1815,7 +1815,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Canvia l STR_CHEAT_SETUP_PROD :{LTBLUE}Activa la modificació dels valors de producció: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nou esquema de colors STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostra esquemes de colors generals STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Mostra els esquemes de colors dels trens diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 79b6b1d9b0..5ec2802826 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1916,7 +1916,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Promijen STR_CHEAT_SETUP_PROD :{LTBLUE}Omogući izmjeni produkcijskih vrijednosti: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nova boja STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Pokaži generalne sheme boja STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Pokaži sheme boja za vlak diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 17a09c6ac9..8b97a9ac96 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1895,7 +1895,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Změnit STR_CHEAT_SETUP_PROD :{LTBLUE}Povolit změnu produkce průmyslu: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nové barevné schéma STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Zobrazit všeobecná barevná schémata STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Zobrazit barevná schémata pro vlaky diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 93fa13575c..74b15ef57c 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1809,7 +1809,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Skift å STR_CHEAT_SETUP_PROD :{LTBLUE}Aktiver modifikation af produktion: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nyt farvetema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Vis generelle farveskemaer STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Vis farveskemaer for tog diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 3a932ae17f..8a6ae55e79 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1815,7 +1815,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Wijzig h STR_CHEAT_SETUP_PROD :{LTBLUE}Sta aanpassen productiewaarden toe: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nieuw kleurenschema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Toon algemene kleurenschema's STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Toon kleurenschema's voor treinen diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 403cd8eade..20365c9957 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1775,7 +1775,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Change c STR_CHEAT_SETUP_PROD :{LTBLUE}Enable modifying production values: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}New Colour Scheme STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Show general colour schemes STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Show train colour schemes diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 6e03e5b242..079ee24dce 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1813,7 +1813,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Change c STR_CHEAT_SETUP_PROD :{LTBLUE}Enable modifying production values: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}New Color Scheme STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Show general color schemes STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Show train color schemes diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index d8a78e8ed2..51500cafc4 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1458,7 +1458,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Ŝanĝu STR_CHEAT_SETUP_PROD :{LTBLUE}Ebligu ŝanĝi produktvalorojn: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nova Kolorskemo STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Montru ĝeneralajn kolorskemojn STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Montru trajnajn kolorskemojn diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 8ff3974270..a5324c6571 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1857,7 +1857,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Muuda jo STR_CHEAT_SETUP_PROD :{LTBLUE}Tootmisväärtuste muutmine: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Uus värvivalik STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Näita üldiseid värvistikke STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Näita rongide värvistikke diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 9dd30eb324..0fd7fc4352 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1621,7 +1621,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Broyt n STR_CHEAT_SETUP_PROD :{LTBLUE}Gilda broytingar av framleiðslu virðum: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nýggja lit samanseting STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Vís vanligu lit samansetingarnar STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Vís tok lit samansetingarnar diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 86edbf439c..2584fbc53e 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1816,7 +1816,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Muuta ny STR_CHEAT_SETUP_PROD :{LTBLUE}Salli tuotantomäärien muuttaminen: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Uusi väriteema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Näytä yleiset väriteemat STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Näytä junan väriteemat diff --git a/src/lang/french.txt b/src/lang/french.txt index c5d1526763..868ddfdca9 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1821,7 +1821,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Modifier STR_CHEAT_SETUP_PROD :{LTBLUE}Permettre la modification des valeurs de production{NBSP}: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nouvelle couleur STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Montrer les livrées générales STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Montrer les livrées de trains diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index af5049d114..26a2274e20 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -2005,7 +2005,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Atharrai STR_CHEAT_SETUP_PROD :{LTBLUE}Cuir an comas atharrachadh air luachan saothrachaidh: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Sgeama nan dath ùr STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Seall sgeamannan nan dath coitcheann STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Seall sgeamannan nan dath airson trèanaichean diff --git a/src/lang/galician.txt b/src/lang/galician.txt index f3fddb5821..6ee28d060d 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1804,7 +1804,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Cambiar STR_CHEAT_SETUP_PROD :{LTBLUE}Permitir a modificación dos valores de producción: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Novo esquema de cor STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostra-los esquemas de cor xerais STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Mostra-los esquemas de cor dos trens diff --git a/src/lang/german.txt b/src/lang/german.txt index 4902216617..19a26a3bba 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1804,7 +1804,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Ändert STR_CHEAT_SETUP_PROD :{LTBLUE}Erlaube manuelles Ändern der Produktionsleistungen: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Neues Farbschema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Allgemeines Farbschema anzeigen STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Zugfarbschema anzeigen diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 64471ad58e..fb43d490f9 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1920,7 +1920,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Αλλα STR_CHEAT_SETUP_PROD :{LTBLUE}Ενεργοποίηση δυνατότητας αλλαγής τιμών παραγωγής: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Νέος Χρωματισμός STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Εμφάνιση γενικών χρωματικών μοτίβων STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Εμφάνιση χρωματικών μοτίβων τρένων diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index bc5f563889..08c7950dea 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1826,7 +1826,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}שנה STR_CHEAT_SETUP_PROD :{LTBLUE}אפשר שינוי ערכי התפוקה: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}הגדרות צבע חדשות STR_LIVERY_GENERAL_TOOLTIP :{BLACK}הצג הגדרות צבע כלליות STR_LIVERY_TRAIN_TOOLTIP :{BLACK}הצג הגדרות צבע לרכבות diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 8eb63547f5..62d5141702 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1867,7 +1867,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Aktuáli STR_CHEAT_SETUP_PROD :{LTBLUE}A nyersanyagüzemek termelése változtatható: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Új színséma STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Általános színsémák mutatása STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Vonat színsémák mutatása diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 8b05505cfa..e39c42129a 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1663,7 +1663,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Breyta u STR_CHEAT_SETUP_PROD :{LTBLUE}Leyfa breytingar á verðmæti framleiðslu: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nýtt Litaskema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Grunnlitur fyrirtækis STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Litaskema lesta diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 1a7728cccc..a4eec663c6 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -1810,7 +1810,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Ubah tah STR_CHEAT_SETUP_PROD :{LTBLUE}Aktifkan modifikasi nilai produksi: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Warna tema baru STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Tampilkan skema warna umum STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Tampilkan skema warna kereta diff --git a/src/lang/irish.txt b/src/lang/irish.txt index d4679ded9e..b30e001565 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1800,7 +1800,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Athraigh STR_CHEAT_SETUP_PROD :{LTBLUE}Cumasaigh luachanna táirgeachta a athrú: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Scéim Dathanna Nua STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Taispeáin scéimeanna dathanna ginearálta STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Taispeáin scéimeanna dathanna na dtraenacha diff --git a/src/lang/italian.txt b/src/lang/italian.txt index b1afa82abc..f2b6bb8818 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1844,7 +1844,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Cambia l STR_CHEAT_SETUP_PROD :{LTBLUE}Permetti la modifica dei valori di produzione: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nuovo schema colori STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostra gli schemi di colorazione generali STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Mostra gli schemi di colorazione dei treni diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index a6aa2f127e..4381cc0959 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -1800,7 +1800,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}現在 STR_CHEAT_SETUP_PROD :{LTBLUE}生産量変更: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}コーポレートカラー STR_LIVERY_GENERAL_TOOLTIP :{BLACK}通常のコーポレートカラー(車両塗装色)を表示します STR_LIVERY_TRAIN_TOOLTIP :{BLACK}列車の塗装色を表示します diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 73cfe66b30..6d01b46db5 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1817,7 +1817,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}현재 STR_CHEAT_SETUP_PROD :{LTBLUE}1차 산업시설 생산량 조절 허용: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}새 색상 STR_LIVERY_GENERAL_TOOLTIP :{BLACK}기본 색상 선택 STR_LIVERY_TRAIN_TOOLTIP :{BLACK}열차 색상 선택 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 5de041dcf7..cc670da54a 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -2001,7 +2001,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Mutare a STR_CHEAT_SETUP_PROD :{LTBLUE}Sinere mutare productiones industriarum: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Schema Coloris Novum STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Monstrare schemata coloris generalia STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Monstrare schemata coloris traminum diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 0db5c191c9..1a109dd4bc 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1747,7 +1747,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Mainīt STR_CHEAT_SETUP_PROD :{LTBLUE}Ieslēgt ražojumu vērtības maiņu: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Jauna identitātes krāsu shēma STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Rādīt vispārējo identitates krāsu shēmas STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Rādīt vilcienu identitātes krāsu shēmas diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index f2309f9674..b1afa66193 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -2019,7 +2019,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Pakeisti STR_CHEAT_SETUP_PROD :{LTBLUE}Leisti keisti produkcijos vertes: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Naujos spalvos STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Rodyti pagrinidines spalvų parinktis STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Rodyti traukiniš spalvas diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index ae7f63000d..06309848de 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1803,7 +1803,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Wiessel STR_CHEAT_SETUP_PROD :{LTBLUE}Erlaabt d'ännere vun de Produktiounswäerter: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Neie Faarfschema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Weis generell Faarfschemen STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Weis Zuch Faarfschemen diff --git a/src/lang/malay.txt b/src/lang/malay.txt index d17a9c4437..2b54cb3348 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1561,7 +1561,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Tukar ta STR_CHEAT_SETUP_PROD :{LTBLUE}Bolehkan pengubahsuaian nilai-nilai pengeluaran: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Skim Warna Baru STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Tunjukkan skim warna am STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Tunjukkan skim warna keretapi diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 8573b31c8e..d71bf08376 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1806,7 +1806,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Endre n STR_CHEAT_SETUP_PROD :{LTBLUE}Tillat endring av produksjonsmengder: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Ny firmafarge STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Vis generelle fargetemaer STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Vis togfargetemaer diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index d102229539..fcf44f91fa 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1723,7 +1723,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Byt nove STR_CHEAT_SETUP_PROD :{LTBLUE}Tillet endring av produksjonsmengder: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Ny firmafarge STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Syne generelle fargetema STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Syne togfargetema diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 6728551ac0..5fde434c55 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2195,7 +2195,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Zmiana o STR_CHEAT_SETUP_PROD :{LTBLUE}Pozwól modyfikować wielkość produkcji przedsiębiorstw: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nowy schemat kolorów STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Pokaż ogólne schematy koloru STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Pokaż schematy koloru pociągów diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 020f304f76..20ee739d65 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1804,7 +1804,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Alterar STR_CHEAT_SETUP_PROD :{LTBLUE}Activar modificação de valores de produção: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Novo Esquema de Cores STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Exibir esquema de cores geral STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Exibir esquemas de cores dos comboios diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 45f6ad4158..b97cf52fc1 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -1765,7 +1765,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Schimbă STR_CHEAT_SETUP_PROD :{LTBLUE}Activează accesul la valorile de producţie: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Schemă de culori nouă STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Afişează schemele generale de culori STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Arată schemele de culori pentru trenuri diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 87a5b81c31..30b226379e 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1972,7 +1972,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Изме STR_CHEAT_SETUP_PROD :{LTBLUE}Разрешить изменение производительности: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Новая цветовая схема STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Настройка основной цветовой схемы STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Настройка цветовой схемы поездов diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 556d844512..6ed65b8ab4 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -2007,7 +2007,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Promena STR_CHEAT_SETUP_PROD :{LTBLUE}Dozvoliti promenu količine proizvodnje: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nova šema boja STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Prikaži generalnu mustru boja STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Prikaži mustre boja vozova diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 78365fe130..a1d165e0f1 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1810,7 +1810,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}改变 STR_CHEAT_SETUP_PROD :{LTBLUE}开启可调整产量模式:{ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}新色彩方案 STR_LIVERY_GENERAL_TOOLTIP :{BLACK}显示总体配色方案 STR_LIVERY_TRAIN_TOOLTIP :{BLACK}显示列车配色方案 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 6ef55d7cf0..ae6d9c98f6 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1868,7 +1868,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Zmeniť STR_CHEAT_SETUP_PROD :{LTBLUE}Povoliť zmenu objemu výroby: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nová farebná schéma STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Zobraziť všeobecné farebné schémy STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Zobraziť farebné schémy pre vlaky diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 657fa8af6f..63d9ff5802 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1954,7 +1954,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Spremeni STR_CHEAT_SETUP_PROD :{LTBLUE}Omogoči spreminjanje proizvodnih vrednosti: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nova barvna shema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Prikaz glavnih barvnih shem STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Prikaz barvnih shem vlakov diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 3fbc855eff..ccd3827c0b 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1813,7 +1813,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Cambiar STR_CHEAT_SETUP_PROD :{LTBLUE}Permitir modificación de los valores de producción: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nuevo Esquema de Color STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostrar esquema de colores general STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Ver esquema de color de los trenes diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index b2755ecb9e..8221c7ebe9 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1821,7 +1821,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Cambiar STR_CHEAT_SETUP_PROD :{LTBLUE}Permitir cambiar los valores de producción: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nueva cromática STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostrar cromática general STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Mostrar cromáticas para trenes diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 00ce1dd183..496a490b8b 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1803,7 +1803,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Ändra n STR_CHEAT_SETUP_PROD :{LTBLUE}Aktivera modifiering av produktionsvärden: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nytt färgval STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Visa generellt färgschema STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Visa färgscheman för tåg diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 7985fed264..ac130ce1ec 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1568,7 +1568,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}நட STR_CHEAT_SETUP_PROD :{LTBLUE}தயாரிப்பு மதிப்புகளை மாற்ற முடியும்: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}புதிய நிற கோட்பாடு STR_LIVERY_GENERAL_TOOLTIP :{BLACK}பொதுவான நிற கோட்பாடுகளைக் காட்டவும் STR_LIVERY_TRAIN_TOOLTIP :{BLACK}இரயில் நிற கோட்பாடுகளைக் காட்டவும் diff --git a/src/lang/thai.txt b/src/lang/thai.txt index c1e82e18f5..e6a876b4d8 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1749,7 +1749,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}เป STR_CHEAT_SETUP_PROD :{LTBLUE}เปิดใช้งานการแก้ไขปริมาณผลผลิต: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}สร้างแบบสีใหม่ STR_LIVERY_GENERAL_TOOLTIP :{BLACK}แสดงแบบสีทั่วไป STR_LIVERY_TRAIN_TOOLTIP :{BLACK}แสดงแบบสีรถไฟ diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index ae1170aee8..1ab4d7bba3 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1800,7 +1800,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}變更 STR_CHEAT_SETUP_PROD :{LTBLUE}允許修改產量:{ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}新配色 STR_LIVERY_GENERAL_TOOLTIP :{BLACK}顯示通用配色 STR_LIVERY_TRAIN_TOOLTIP :{BLACK}顯示列車配色 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index ac7f22c24e..fd45b398fc 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -1804,7 +1804,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Yılı d STR_CHEAT_SETUP_PROD :{LTBLUE}Üretim değerlerini değiştir: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Yeni Renk STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Genel renk şemalarını göster STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Tren renk düzenlerini göster diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index cacc4210dd..549e429878 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1928,7 +1928,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Змін STR_CHEAT_SETUP_PROD :{LTBLUE}Дозволити зміну рівня виробництва: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Нова кольорова схема STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Показати загальне фарбування STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Показати фарбування поїздів diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index 05cc5f6c8d..d50e9e2056 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -1732,7 +1732,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Wizigje STR_CHEAT_SETUP_PROD :{LTBLUE}Stea oanpassen fan produksje ta: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nei Kleurenskema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Lit gewoane kleurskemas sjen STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Lit kleurskema sjen fan treinen diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index 80059f1186..80fd612c90 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -1515,7 +1515,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}تغیی STR_CHEAT_SETUP_PROD :{LTBLUE}قابلیت تغییر سطح تولید صنایع: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}طرح رنگ جدید STR_LIVERY_GENERAL_TOOLTIP :{BLACK}نمایش طرح رنگهای اصلی STR_LIVERY_TRAIN_TOOLTIP :{BLACK}نمایش طرح رنگهای قطار diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index 0cc3ba7b68..faa83ddf41 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -1412,7 +1412,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}موجو STR_CHEAT_SETUP_PROD :{LTBLUE}پیداوار میں تبدیلی کو فعال کریں: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}نئے رنگوں کا انتخاب STR_LIVERY_GENERAL_TOOLTIP :{BLACK}رنگوں کا عام انتخاب دکھائیں STR_LIVERY_TRAIN_TOOLTIP :{BLACK}ریل گاڑیوں کے رنگوں کا انتخاب دکھائیں diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index e098ee47e6..2136e16d79 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1816,7 +1816,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Thay đ STR_CHEAT_SETUP_PROD :{LTBLUE}Cho phép khả năng sửa giá trị sản xuất: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Cách Phối Màu Mới STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Hiển thị phối màu chung STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Hiển thị phối màu tàu hỏa diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index a6444cc81c..1029140c26 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1803,7 +1803,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Newid y STR_CHEAT_SETUP_PROD :{LTBLUE}Galluogi newid graddfeydd cynhyrchu: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Cynllun Lliw Newydd STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Dangos cynllun lliw cyffredinol STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Dangos cynllun lliw trenau From 80c7965c65d5552482a51f39e5f1e03aeeb423c2 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 27 Jan 2019 19:45:42 +0100 Subject: [PATCH 249/622] Update: Translations from eints belarusian: 1 change by translators norwegian (nynorsk): 1 change by translators chinese (simplified): 1 change by translators serbian: 1 change by translators czech: 1 change by translators esperanto: 1 change by translators chinese (traditional): 1 change by translators portuguese (brazilian): 1 change by translators norwegian (bokmal): 1 change by translators swedish: 1 change by translators lithuanian: 1 change by translators hebrew: 1 change by translators croatian: 1 change by translators bulgarian: 1 change by translators catalan: 1 change by translators afrikaans: 1 change by translators vietnamese: 1 change by translators slovenian: 1 change by translators faroese: 1 change by translators thai: 1 change by translators frisian: 1 change by translators scottish gaelic: 1 change by translators persian: 1 change by translators korean: 1 change by translators greek: 1 change by translators latin: 1 change by translators welsh: 1 change by translators galician: 1 change by translators japanese: 1 change by translators english (au): 1 change by translators italian: 6 changes by lorenzodv, 1 change by translators urdu: 1 change by translators french: 7 changes by glx malay: 1 change by translators tamil: 1 change by translators spanish: 4 changes by SilverSurferZzZ, 1 change by translators slovak: 1 change by translators basque: 1 change by translators polish: 1 change by translators indonesian: 1 change by translators arabic (egypt): 1 change by translators russian: 2 changes by Lone_Wolf, 1 change by translators hungarian: 1 change by translators luxembourgish: 1 change by translators romanian: 1 change by translators irish: 1 change by translators latvian: 1 change by translators german: 1 change by translators danish: 1 change by translators spanish (mexican): 7 changes by Absay icelandic: 1 change by translators english (us): 1 change by translators turkish: 1 change by translators portuguese: 1 change by translators ukrainian: 1 change by translators finnish: 1 change by translators dutch: 1 change by translators estonian: 1 change by translators --- src/lang/afrikaans.txt | 1 + src/lang/arabic_egypt.txt | 1 + src/lang/basque.txt | 1 + src/lang/belarusian.txt | 1 + src/lang/brazilian_portuguese.txt | 1 + src/lang/bulgarian.txt | 1 + src/lang/catalan.txt | 1 + src/lang/croatian.txt | 1 + src/lang/czech.txt | 1 + src/lang/danish.txt | 1 + src/lang/dutch.txt | 1 + src/lang/english_AU.txt | 1 + src/lang/english_US.txt | 1 + src/lang/esperanto.txt | 1 + src/lang/estonian.txt | 1 + src/lang/faroese.txt | 1 + src/lang/finnish.txt | 1 + src/lang/french.txt | 7 +++++++ src/lang/gaelic.txt | 1 + src/lang/galician.txt | 1 + src/lang/german.txt | 1 + src/lang/greek.txt | 1 + src/lang/hebrew.txt | 1 + src/lang/hungarian.txt | 1 + src/lang/icelandic.txt | 1 + src/lang/indonesian.txt | 1 + src/lang/irish.txt | 1 + src/lang/italian.txt | 7 +++++++ src/lang/japanese.txt | 1 + src/lang/korean.txt | 1 + src/lang/latin.txt | 1 + src/lang/latvian.txt | 1 + src/lang/lithuanian.txt | 1 + src/lang/luxembourgish.txt | 1 + src/lang/malay.txt | 1 + src/lang/norwegian_bokmal.txt | 1 + src/lang/norwegian_nynorsk.txt | 1 + src/lang/polish.txt | 1 + src/lang/portuguese.txt | 1 + src/lang/romanian.txt | 1 + src/lang/russian.txt | 4 +++- src/lang/serbian.txt | 1 + src/lang/simplified_chinese.txt | 1 + src/lang/slovak.txt | 1 + src/lang/slovenian.txt | 1 + src/lang/spanish.txt | 7 +++++-- src/lang/spanish_MX.txt | 7 +++++++ src/lang/swedish.txt | 1 + src/lang/tamil.txt | 1 + src/lang/thai.txt | 1 + src/lang/traditional_chinese.txt | 1 + src/lang/turkish.txt | 1 + src/lang/ukrainian.txt | 1 + src/lang/unfinished/frisian.txt | 1 + src/lang/unfinished/persian.txt | 1 + src/lang/unfinished/urdu.txt | 1 + src/lang/vietnamese.txt | 1 + src/lang/welsh.txt | 1 + 58 files changed, 82 insertions(+), 3 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index cf55383ea8..56cbe04a04 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1801,6 +1801,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Verander STR_CHEAT_SETUP_PROD :{LTBLUE}Aktiveer modifisering van produksie waardes: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Nuwe Kleur Skema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Toon algemene kleurskemas STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Wys trein kleur skemas diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 5e7f918831..2eb29baa31 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1471,6 +1471,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}غير STR_CHEAT_SETUP_PROD :{LTBLUE}تفعيل تغيير قيمة الانتاج: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}الوان جديدة STR_LIVERY_GENERAL_TOOLTIP :{BLACK}اظهر اللون العام STR_LIVERY_TRAIN_TOOLTIP :{BLACK}اظهر لون القطائرات diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 2c1309edab..0c2e09e24d 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1711,6 +1711,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Aurtengo STR_CHEAT_SETUP_PROD :{LTBLUE}Ekoizpen balioak aldatzea baimendu: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Kolore eskema berria STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Erakutsi kolore eskema orokorrak STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Erakutsi trenen kolore eskemak diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index cce68727e9..c2e3a1435d 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -2126,6 +2126,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Зьмя STR_CHEAT_SETUP_PROD :{LTBLUE}Дазволіць зьмяненьне прадукцыйнасьці: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Новая каляровая схэма STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Паказаць асноўныя каляровыя схэмы STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Паказаць каляровыя схэмы цягнікоў diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 65cccee2ea..ffa56055fd 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1817,6 +1817,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Mudar an STR_CHEAT_SETUP_PROD :{LTBLUE}Ativar modificação de valores de produção: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Novo Esquema de Cores STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Exibir esquemas de cor gerais STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Exibe esquemas de cor de trens diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index e88b498979..d674c67d40 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1749,6 +1749,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Пром STR_CHEAT_SETUP_PROD :{LTBLUE}Промяна на производствените стойности: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Нова цветове STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Показване на общи цветови схеми STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Показване цветовите схеми на влаковете diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 5e9a8d35dd..57d4e57322 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1815,6 +1815,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Canvia l STR_CHEAT_SETUP_PROD :{LTBLUE}Activa la modificació dels valors de producció: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Nou esquema de colors STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostra esquemes de colors generals STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Mostra els esquemes de colors dels trens diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 5ec2802826..79b6b1d9b0 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1916,6 +1916,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Promijen STR_CHEAT_SETUP_PROD :{LTBLUE}Omogući izmjeni produkcijskih vrijednosti: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Nova boja STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Pokaži generalne sheme boja STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Pokaži sheme boja za vlak diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 8b97a9ac96..17a09c6ac9 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1895,6 +1895,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Změnit STR_CHEAT_SETUP_PROD :{LTBLUE}Povolit změnu produkce průmyslu: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Nové barevné schéma STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Zobrazit všeobecná barevná schémata STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Zobrazit barevná schémata pro vlaky diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 74b15ef57c..93fa13575c 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1809,6 +1809,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Skift å STR_CHEAT_SETUP_PROD :{LTBLUE}Aktiver modifikation af produktion: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Nyt farvetema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Vis generelle farveskemaer STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Vis farveskemaer for tog diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 8a6ae55e79..3a932ae17f 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1815,6 +1815,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Wijzig h STR_CHEAT_SETUP_PROD :{LTBLUE}Sta aanpassen productiewaarden toe: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Nieuw kleurenschema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Toon algemene kleurenschema's STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Toon kleurenschema's voor treinen diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 20365c9957..403cd8eade 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1775,6 +1775,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Change c STR_CHEAT_SETUP_PROD :{LTBLUE}Enable modifying production values: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}New Colour Scheme STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Show general colour schemes STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Show train colour schemes diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 079ee24dce..6e03e5b242 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1813,6 +1813,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Change c STR_CHEAT_SETUP_PROD :{LTBLUE}Enable modifying production values: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}New Color Scheme STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Show general color schemes STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Show train color schemes diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 51500cafc4..d8a78e8ed2 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1458,6 +1458,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Ŝanĝu STR_CHEAT_SETUP_PROD :{LTBLUE}Ebligu ŝanĝi produktvalorojn: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Nova Kolorskemo STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Montru ĝeneralajn kolorskemojn STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Montru trajnajn kolorskemojn diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index a5324c6571..8ff3974270 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1857,6 +1857,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Muuda jo STR_CHEAT_SETUP_PROD :{LTBLUE}Tootmisväärtuste muutmine: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Uus värvivalik STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Näita üldiseid värvistikke STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Näita rongide värvistikke diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 0fd7fc4352..9dd30eb324 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1621,6 +1621,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Broyt n STR_CHEAT_SETUP_PROD :{LTBLUE}Gilda broytingar av framleiðslu virðum: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Nýggja lit samanseting STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Vís vanligu lit samansetingarnar STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Vís tok lit samansetingarnar diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 2584fbc53e..86edbf439c 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1816,6 +1816,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Muuta ny STR_CHEAT_SETUP_PROD :{LTBLUE}Salli tuotantomäärien muuttaminen: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Uusi väriteema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Näytä yleiset väriteemat STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Näytä junan väriteemat diff --git a/src/lang/french.txt b/src/lang/french.txt index 868ddfdca9..dd7198db16 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1821,6 +1821,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Modifier STR_CHEAT_SETUP_PROD :{LTBLUE}Permettre la modification des valeurs de production{NBSP}: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Couleur STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Montrer les livrées générales STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Montrer les livrées de trains @@ -2895,7 +2896,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Version{ STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Version compatible min.{NBSP}: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum{NBSP}: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palette{NBSP}: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Défaut (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Défaut (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Ancienne (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Ancienne (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Paramètres{NBSP}: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Aucuns STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Pas d'informations disponibles STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Module correspondant non trouvé @@ -3458,6 +3464,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacit STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Wagons motorisés{NBSP}: {GOLD}+{POWER}{BLACK} − Poids{NBSP}: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Réaménageable pour{NBSP}: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Tous les types de cargaison +STR_PURCHASE_INFO_NONE :Aucune cargaison STR_PURCHASE_INFO_ALL_BUT :Tous sauf {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Effort de traction max.{NBSP}: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Rayon d'action{NBSP}: {GOLD}{COMMA}{NBSP}cases diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 26a2274e20..af5049d114 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -2005,6 +2005,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Atharrai STR_CHEAT_SETUP_PROD :{LTBLUE}Cuir an comas atharrachadh air luachan saothrachaidh: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Sgeama nan dath ùr STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Seall sgeamannan nan dath coitcheann STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Seall sgeamannan nan dath airson trèanaichean diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 6ee28d060d..f3fddb5821 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1804,6 +1804,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Cambiar STR_CHEAT_SETUP_PROD :{LTBLUE}Permitir a modificación dos valores de producción: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Novo esquema de cor STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostra-los esquemas de cor xerais STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Mostra-los esquemas de cor dos trens diff --git a/src/lang/german.txt b/src/lang/german.txt index 19a26a3bba..4902216617 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1804,6 +1804,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Ändert STR_CHEAT_SETUP_PROD :{LTBLUE}Erlaube manuelles Ändern der Produktionsleistungen: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Neues Farbschema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Allgemeines Farbschema anzeigen STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Zugfarbschema anzeigen diff --git a/src/lang/greek.txt b/src/lang/greek.txt index fb43d490f9..64471ad58e 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1920,6 +1920,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Αλλα STR_CHEAT_SETUP_PROD :{LTBLUE}Ενεργοποίηση δυνατότητας αλλαγής τιμών παραγωγής: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Νέος Χρωματισμός STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Εμφάνιση γενικών χρωματικών μοτίβων STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Εμφάνιση χρωματικών μοτίβων τρένων diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 08c7950dea..bc5f563889 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1826,6 +1826,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}שנה STR_CHEAT_SETUP_PROD :{LTBLUE}אפשר שינוי ערכי התפוקה: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}הגדרות צבע חדשות STR_LIVERY_GENERAL_TOOLTIP :{BLACK}הצג הגדרות צבע כלליות STR_LIVERY_TRAIN_TOOLTIP :{BLACK}הצג הגדרות צבע לרכבות diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 62d5141702..8eb63547f5 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1867,6 +1867,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Aktuáli STR_CHEAT_SETUP_PROD :{LTBLUE}A nyersanyagüzemek termelése változtatható: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Új színséma STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Általános színsémák mutatása STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Vonat színsémák mutatása diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index e39c42129a..8b05505cfa 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1663,6 +1663,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Breyta u STR_CHEAT_SETUP_PROD :{LTBLUE}Leyfa breytingar á verðmæti framleiðslu: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Nýtt Litaskema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Grunnlitur fyrirtækis STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Litaskema lesta diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index a4eec663c6..1a7728cccc 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -1810,6 +1810,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Ubah tah STR_CHEAT_SETUP_PROD :{LTBLUE}Aktifkan modifikasi nilai produksi: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Warna tema baru STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Tampilkan skema warna umum STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Tampilkan skema warna kereta diff --git a/src/lang/irish.txt b/src/lang/irish.txt index b30e001565..d4679ded9e 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1800,6 +1800,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Athraigh STR_CHEAT_SETUP_PROD :{LTBLUE}Cumasaigh luachanna táirgeachta a athrú: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Scéim Dathanna Nua STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Taispeáin scéimeanna dathanna ginearálta STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Taispeáin scéimeanna dathanna na dtraenacha diff --git a/src/lang/italian.txt b/src/lang/italian.txt index f2b6bb8818..ace459d6ec 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1844,6 +1844,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Cambia l STR_CHEAT_SETUP_PROD :{LTBLUE}Permetti la modifica dei valori di produzione: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Nuovo schema colori STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostra gli schemi di colorazione generali STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Mostra gli schemi di colorazione dei treni @@ -2924,7 +2925,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versione STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Versione minima compatibile: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}Somma MD5: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Tavolozza: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Predefinita (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Predefinita (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Legacy (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Legacy (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parametri: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Nessuno STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Informazioni non disponibili STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}File corrispondente non trovato @@ -3487,6 +3493,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacit STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagoni motorizzati: {GOLD}+{POWER}{BLACK} Peso: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Riadattabile per: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Tutti i tipi di carico +STR_PURCHASE_INFO_NONE :Niente STR_PURCHASE_INFO_ALL_BUT :Tutto tranne {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Sforzo di trazione massimo: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Autonomia: {GOLD}{COMMA} riquadr{P o i} diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 4381cc0959..a6aa2f127e 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -1800,6 +1800,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}現在 STR_CHEAT_SETUP_PROD :{LTBLUE}生産量変更: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}コーポレートカラー STR_LIVERY_GENERAL_TOOLTIP :{BLACK}通常のコーポレートカラー(車両塗装色)を表示します STR_LIVERY_TRAIN_TOOLTIP :{BLACK}列車の塗装色を表示します diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 6d01b46db5..73cfe66b30 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1817,6 +1817,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}현재 STR_CHEAT_SETUP_PROD :{LTBLUE}1차 산업시설 생산량 조절 허용: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}새 색상 STR_LIVERY_GENERAL_TOOLTIP :{BLACK}기본 색상 선택 STR_LIVERY_TRAIN_TOOLTIP :{BLACK}열차 색상 선택 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index cc670da54a..5de041dcf7 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -2001,6 +2001,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Mutare a STR_CHEAT_SETUP_PROD :{LTBLUE}Sinere mutare productiones industriarum: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Schema Coloris Novum STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Monstrare schemata coloris generalia STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Monstrare schemata coloris traminum diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 1a109dd4bc..0db5c191c9 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1747,6 +1747,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Mainīt STR_CHEAT_SETUP_PROD :{LTBLUE}Ieslēgt ražojumu vērtības maiņu: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Jauna identitātes krāsu shēma STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Rādīt vispārējo identitates krāsu shēmas STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Rādīt vilcienu identitātes krāsu shēmas diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index b1afa66193..f2309f9674 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -2019,6 +2019,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Pakeisti STR_CHEAT_SETUP_PROD :{LTBLUE}Leisti keisti produkcijos vertes: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Naujos spalvos STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Rodyti pagrinidines spalvų parinktis STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Rodyti traukiniš spalvas diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 06309848de..ae7f63000d 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1803,6 +1803,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Wiessel STR_CHEAT_SETUP_PROD :{LTBLUE}Erlaabt d'ännere vun de Produktiounswäerter: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Neie Faarfschema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Weis generell Faarfschemen STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Weis Zuch Faarfschemen diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 2b54cb3348..d17a9c4437 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1561,6 +1561,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Tukar ta STR_CHEAT_SETUP_PROD :{LTBLUE}Bolehkan pengubahsuaian nilai-nilai pengeluaran: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Skim Warna Baru STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Tunjukkan skim warna am STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Tunjukkan skim warna keretapi diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index d71bf08376..8573b31c8e 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1806,6 +1806,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Endre n STR_CHEAT_SETUP_PROD :{LTBLUE}Tillat endring av produksjonsmengder: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Ny firmafarge STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Vis generelle fargetemaer STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Vis togfargetemaer diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index fcf44f91fa..d102229539 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1723,6 +1723,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Byt nove STR_CHEAT_SETUP_PROD :{LTBLUE}Tillet endring av produksjonsmengder: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Ny firmafarge STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Syne generelle fargetema STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Syne togfargetema diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 5fde434c55..6728551ac0 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2195,6 +2195,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Zmiana o STR_CHEAT_SETUP_PROD :{LTBLUE}Pozwól modyfikować wielkość produkcji przedsiębiorstw: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Nowy schemat kolorów STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Pokaż ogólne schematy koloru STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Pokaż schematy koloru pociągów diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 20ee739d65..020f304f76 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1804,6 +1804,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Alterar STR_CHEAT_SETUP_PROD :{LTBLUE}Activar modificação de valores de produção: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Novo Esquema de Cores STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Exibir esquema de cores geral STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Exibir esquemas de cores dos comboios diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index b97cf52fc1..45f6ad4158 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -1765,6 +1765,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Schimbă STR_CHEAT_SETUP_PROD :{LTBLUE}Activează accesul la valorile de producţie: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Schemă de culori nouă STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Afişează schemele generale de culori STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Arată schemele de culori pentru trenuri diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 30b226379e..72132ac069 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -602,7 +602,7 @@ STR_ABOUT_MENU_SCREENSHOT :Снимок э STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Снимок экрана в макс. приближении STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Снимок экрана в обычном масштабе STR_ABOUT_MENU_GIANT_SCREENSHOT :Снимок всей карты -STR_ABOUT_MENU_SHOW_FRAMERATE :Показать кол-во кадров/с +STR_ABOUT_MENU_SHOW_FRAMERATE :Информация о скорости игры STR_ABOUT_MENU_ABOUT_OPENTTD :Об игре STR_ABOUT_MENU_SPRITE_ALIGNER :Выравнивание спрайтов STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Переключить ограничивающие рамки @@ -1972,6 +1972,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Изме STR_CHEAT_SETUP_PROD :{LTBLUE}Разрешить изменение производительности: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Новая цветовая схема STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Настройка основной цветовой схемы STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Настройка цветовой схемы поездов @@ -2905,6 +2906,7 @@ STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} мс STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} с ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{BLACK}Расчёт игрового цикла: STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Задержка графа распределения: STR_FRAMERATE_DRAWING :{BLACK}Отрисовка изображения: STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Дополнительные окна: diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 6ed65b8ab4..556d844512 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -2007,6 +2007,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Promena STR_CHEAT_SETUP_PROD :{LTBLUE}Dozvoliti promenu količine proizvodnje: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Nova šema boja STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Prikaži generalnu mustru boja STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Prikaži mustre boja vozova diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index a1d165e0f1..78365fe130 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1810,6 +1810,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}改变 STR_CHEAT_SETUP_PROD :{LTBLUE}开启可调整产量模式:{ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}新色彩方案 STR_LIVERY_GENERAL_TOOLTIP :{BLACK}显示总体配色方案 STR_LIVERY_TRAIN_TOOLTIP :{BLACK}显示列车配色方案 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index ae6d9c98f6..6ef55d7cf0 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1868,6 +1868,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Zmeniť STR_CHEAT_SETUP_PROD :{LTBLUE}Povoliť zmenu objemu výroby: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Nová farebná schéma STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Zobraziť všeobecné farebné schémy STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Zobraziť farebné schémy pre vlaky diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 63d9ff5802..657fa8af6f 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1954,6 +1954,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Spremeni STR_CHEAT_SETUP_PROD :{LTBLUE}Omogoči spreminjanje proizvodnih vrednosti: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Nova barvna shema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Prikaz glavnih barvnih shem STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Prikaz barvnih shem vlakov diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index ccd3827c0b..fee155edfb 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1074,7 +1074,7 @@ STR_RIVERS_FEW :Pocos STR_RIVERS_MODERATE :Medio STR_RIVERS_LOT :Muchos -STR_DISASTER_NONE :Ninguna +STR_DISASTER_NONE :Ninguno STR_DISASTER_REDUCED :Reducidas STR_DISASTER_NORMAL :Normales @@ -1598,7 +1598,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x STR_CONFIG_SETTING_TOWN_GROWTH :Velocidad crecimiento población: {STRING} STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Velocidad de crecimiento de los municipios -STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Ninguna +STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Ninguno STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :Lenta STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :Normal STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Rápida @@ -1813,6 +1813,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Cambiar STR_CHEAT_SETUP_PROD :{LTBLUE}Permitir modificación de los valores de producción: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Nuevo Esquema de Color STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostrar esquema de colores general STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Ver esquema de color de los trenes @@ -2723,6 +2724,7 @@ STR_FRAMERATE_SOUND :{BLACK}Mezcla d ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GL_TRAINS :Ticks de trenes STR_FRAMETIME_CAPTION_GL_SHIPS :Ticks de barcos +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Ticks de aeronaves STR_FRAMETIME_CAPTION_DRAWING :Renderizado gráfico STR_FRAMETIME_CAPTION_VIDEO :Salida de vídeo STR_FRAMETIME_CAPTION_SOUND :Mezcla de sonido @@ -2870,6 +2872,7 @@ STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Mín. ve STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parámetros: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Ninguno STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}No hay información disponible STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Archivo no encontrado diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 8221c7ebe9..58a127e84b 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1821,6 +1821,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Cambiar STR_CHEAT_SETUP_PROD :{LTBLUE}Permitir cambiar los valores de producción: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Nueva cromática STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostrar cromática general STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Mostrar cromáticas para trenes @@ -2895,7 +2896,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versión STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Mín. versión compatible: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Por defecto (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Por defecto (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Tradicional (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Tradicional (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parámetros: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Ninguna STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}No hay información disponible STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Archivo no encontrado @@ -3458,6 +3464,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacida STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagones con motor: {GOLD}+{POWER}{BLACK} Peso: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Reforma: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Todo tipo de carga +STR_PURCHASE_INFO_NONE :Ninguno STR_PURCHASE_INFO_ALL_BUT :Todo excepto {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Máx. fuerza de tracción: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Alcance: {GOLD}{COMMA} casillas diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 496a490b8b..00ce1dd183 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1803,6 +1803,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Ändra n STR_CHEAT_SETUP_PROD :{LTBLUE}Aktivera modifiering av produktionsvärden: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Nytt färgval STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Visa generellt färgschema STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Visa färgscheman för tåg diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index ac130ce1ec..7985fed264 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1568,6 +1568,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}நட STR_CHEAT_SETUP_PROD :{LTBLUE}தயாரிப்பு மதிப்புகளை மாற்ற முடியும்: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}புதிய நிற கோட்பாடு STR_LIVERY_GENERAL_TOOLTIP :{BLACK}பொதுவான நிற கோட்பாடுகளைக் காட்டவும் STR_LIVERY_TRAIN_TOOLTIP :{BLACK}இரயில் நிற கோட்பாடுகளைக் காட்டவும் diff --git a/src/lang/thai.txt b/src/lang/thai.txt index e6a876b4d8..c1e82e18f5 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1749,6 +1749,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}เป STR_CHEAT_SETUP_PROD :{LTBLUE}เปิดใช้งานการแก้ไขปริมาณผลผลิต: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}สร้างแบบสีใหม่ STR_LIVERY_GENERAL_TOOLTIP :{BLACK}แสดงแบบสีทั่วไป STR_LIVERY_TRAIN_TOOLTIP :{BLACK}แสดงแบบสีรถไฟ diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 1ab4d7bba3..ae1170aee8 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1800,6 +1800,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}變更 STR_CHEAT_SETUP_PROD :{LTBLUE}允許修改產量:{ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}新配色 STR_LIVERY_GENERAL_TOOLTIP :{BLACK}顯示通用配色 STR_LIVERY_TRAIN_TOOLTIP :{BLACK}顯示列車配色 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index fd45b398fc..ac7f22c24e 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -1804,6 +1804,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Yılı d STR_CHEAT_SETUP_PROD :{LTBLUE}Üretim değerlerini değiştir: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Yeni Renk STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Genel renk şemalarını göster STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Tren renk düzenlerini göster diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 549e429878..cacc4210dd 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1928,6 +1928,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Змін STR_CHEAT_SETUP_PROD :{LTBLUE}Дозволити зміну рівня виробництва: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Нова кольорова схема STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Показати загальне фарбування STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Показати фарбування поїздів diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index d50e9e2056..05cc5f6c8d 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -1732,6 +1732,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Wizigje STR_CHEAT_SETUP_PROD :{LTBLUE}Stea oanpassen fan produksje ta: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Nei Kleurenskema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Lit gewoane kleurskemas sjen STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Lit kleurskema sjen fan treinen diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index 80fd612c90..80059f1186 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -1515,6 +1515,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}تغیی STR_CHEAT_SETUP_PROD :{LTBLUE}قابلیت تغییر سطح تولید صنایع: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}طرح رنگ جدید STR_LIVERY_GENERAL_TOOLTIP :{BLACK}نمایش طرح رنگهای اصلی STR_LIVERY_TRAIN_TOOLTIP :{BLACK}نمایش طرح رنگهای قطار diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index faa83ddf41..0cc3ba7b68 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -1412,6 +1412,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}موجو STR_CHEAT_SETUP_PROD :{LTBLUE}پیداوار میں تبدیلی کو فعال کریں: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}نئے رنگوں کا انتخاب STR_LIVERY_GENERAL_TOOLTIP :{BLACK}رنگوں کا عام انتخاب دکھائیں STR_LIVERY_TRAIN_TOOLTIP :{BLACK}ریل گاڑیوں کے رنگوں کا انتخاب دکھائیں diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 2136e16d79..e098ee47e6 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1816,6 +1816,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Thay đ STR_CHEAT_SETUP_PROD :{LTBLUE}Cho phép khả năng sửa giá trị sản xuất: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Cách Phối Màu Mới STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Hiển thị phối màu chung STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Hiển thị phối màu tàu hỏa diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 1029140c26..a6444cc81c 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1803,6 +1803,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Newid y STR_CHEAT_SETUP_PROD :{LTBLUE}Galluogi newid graddfeydd cynhyrchu: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Cynllun Lliw Newydd STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Dangos cynllun lliw cyffredinol STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Dangos cynllun lliw trenau From 654b635f6fb866fcc3ccabcf8333f3b7495ebb26 Mon Sep 17 00:00:00 2001 From: glx22 Date: Sun, 27 Jan 2019 22:01:09 +0100 Subject: [PATCH 250/622] Fix #7122: OnClick() and DrawWidget() editability was inconsistent in AISettingsWindow (#7123) --- src/ai/ai_gui.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 4b248f5efc..8dad16fabc 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -378,7 +378,7 @@ struct AISettingsWindow : public Window { for (; this->vscroll->IsVisible(i) && it != visible_settings.end(); i++, it++) { const ScriptConfigItem &config_item = **it; int current_value = config->GetSetting((config_item).name); - bool editable = _game_mode == GM_MENU || ((this->slot != OWNER_DEITY) && !Company::IsValidID(this->slot)) || (config_item.flags & SCRIPTCONFIG_INGAME) != 0; + bool editable = this->IsEditableItem(config_item); StringID str; TextColour colour; @@ -441,7 +441,7 @@ struct AISettingsWindow : public Window { VisibleSettingsList::const_iterator it = this->visible_settings.begin(); for (int i = 0; i < num; i++) it++; const ScriptConfigItem config_item = **it; - if (_game_mode == GM_NORMAL && ((this->slot == OWNER_DEITY) || Company::IsValidID(this->slot)) && (config_item.flags & SCRIPTCONFIG_INGAME) == 0) return; + if (!this->IsEditableItem(config_item)) return; if (this->clicked_row != num) { DeleteChildWindows(WC_QUERY_STRING); @@ -586,6 +586,12 @@ struct AISettingsWindow : public Window { { this->RebuildVisibleSettings(); } + +private: + bool IsEditableItem(const ScriptConfigItem config_item) const + { + return _game_mode == GM_MENU || ((this->slot != OWNER_DEITY) && !Company::IsValidID(this->slot)) || (config_item.flags & SCRIPTCONFIG_INGAME) != 0; + } }; /** Widgets for the AI settings window. */ From b28a6784363254de49cc95747c4aada7477d8338 Mon Sep 17 00:00:00 2001 From: glx22 Date: Mon, 28 Jan 2019 17:16:19 +0100 Subject: [PATCH 251/622] Fix #7112, fef8b831a9: incorrect precondition check (#7127) --- src/script/api/script_town.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/api/script_town.cpp b/src/script/api/script_town.cpp index 4cdd6a9d0e..64f8e166ea 100644 --- a/src/script/api/script_town.cpp +++ b/src/script/api/script_town.cpp @@ -170,7 +170,7 @@ break; default: - EnforcePrecondition(false, days_between_town_growth <= MAX_TOWN_GROWTH_TICKS); + EnforcePrecondition(false, (days_between_town_growth * DAY_TICKS / TOWN_GROWTH_TICKS) <= MAX_TOWN_GROWTH_TICKS); /* Don't use growth_rate 0 as it means GROWTH_NORMAL */ growth_rate = max(days_between_town_growth * DAY_TICKS, 2u) - 1; break; From 9c6ac309e0b51fe7952f42ca9a8e2ee30debc473 Mon Sep 17 00:00:00 2001 From: Samu Date: Mon, 1 Oct 2018 23:44:12 +0100 Subject: [PATCH 252/622] Fix #6636: Airplanes could be sent to helicopter station depots --- src/aircraft_cmd.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 5f36a75779..d6d99ae242 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -128,16 +128,15 @@ static StationID FindNearestHangar(const Aircraft *v) const AircraftVehicleInfo *avi = AircraftVehInfo(v->engine_type); FOR_ALL_STATIONS(st) { - if (st->owner != v->owner || !(st->facilities & FACIL_AIRPORT)) continue; + if (st->owner != v->owner || !(st->facilities & FACIL_AIRPORT) || !st->airport.HasHangar()) continue; const AirportFTAClass *afc = st->airport.GetFTA(); - if (!st->airport.HasHangar() || ( - /* don't crash the plane if we know it can't land at the airport */ - (afc->flags & AirportFTAClass::SHORT_STRIP) && - (avi->subtype & AIR_FAST) && - !_cheats.no_jetcrash.value)) { - continue; - } + + /* don't crash the plane if we know it can't land at the airport */ + if ((afc->flags & AirportFTAClass::SHORT_STRIP) && (avi->subtype & AIR_FAST) && !_cheats.no_jetcrash.value) continue; + + /* the plane won't land at any helicopter station */ + if (!(afc->flags & AirportFTAClass::AIRPLANES) && (avi->subtype & AIR_CTOL)) continue; /* v->tile can't be used here, when aircraft is flying v->tile is set to 0 */ uint distance = DistanceSquare(vtile, st->airport.tile); @@ -380,7 +379,7 @@ bool Aircraft::FindClosestDepot(TileIndex *location, DestinationID *destination, { const Station *st = GetTargetAirportIfValid(this); /* If the station is not a valid airport or if it has no hangars */ - if (st == NULL || !st->airport.HasHangar()) { + if (st == NULL || !CanVehicleUseStation(this, st) || !st->airport.HasHangar()) { /* the aircraft has to search for a hangar on its own */ StationID station = FindNearestHangar(this); From 64f1847becbb6ec5c0cf6c1ceaa8812893031713 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Thu, 18 Jan 2018 20:38:27 +0000 Subject: [PATCH 253/622] Codechange: [Linkgraph GUI] Replace line visibility detection algorithm Use an implementation of the Cohen-Sutherland line-clipping algorithm. The previous algorithm had an excessive false-positive rate. Line-rendering is sufficiently expensive that using a line-clipping algorithm with a much lower false-positive rate is a net performance benefit. --- src/linkgraph/linkgraph_gui.cpp | 67 ++++++++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 6 deletions(-) diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index 30c4451ee7..7923fc26c8 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -125,12 +125,67 @@ inline bool LinkGraphOverlay::IsPointVisible(Point pt, const DrawPixelInfo *dpi, */ inline bool LinkGraphOverlay::IsLinkVisible(Point pta, Point ptb, const DrawPixelInfo *dpi, int padding) const { - return !((pta.x < dpi->left - padding && ptb.x < dpi->left - padding) || - (pta.y < dpi->top - padding && ptb.y < dpi->top - padding) || - (pta.x > dpi->left + dpi->width + padding && - ptb.x > dpi->left + dpi->width + padding) || - (pta.y > dpi->top + dpi->height + padding && - ptb.y > dpi->top + dpi->height + padding)); + const int left = dpi->left - padding; + const int right = dpi->left + dpi->width + padding; + const int top = dpi->top - padding; + const int bottom = dpi->top + dpi->height + padding; + + /* + * This method is an implementation of the Cohen-Sutherland line-clipping algorithm. + * See: https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm + */ + + const uint8 INSIDE = 0; // 0000 + const uint8 LEFT = 1; // 0001 + const uint8 RIGHT = 2; // 0010 + const uint8 BOTTOM = 4; // 0100 + const uint8 TOP = 8; // 1000 + + int x0 = pta.x; + int y0 = pta.y; + int x1 = ptb.x; + int y1 = ptb.y; + + auto out_code = [&](int x, int y) -> uint8 { + uint8 out = INSIDE; + if (x < left) { + out |= LEFT; + } else if (x > right) { + out |= RIGHT; + } + if (y < top) { + out |= TOP; + } else if (y > bottom) { + out |= BOTTOM; + } + return out; + }; + + uint8 c0 = out_code(x0, y0); + uint8 c1 = out_code(x1, y1); + + while (true) { + if (c0 == 0 || c1 == 0) return true; + if ((c0 & c1) != 0) return false; + + if (c0 & TOP) { // point 0 is above the clip window + x0 = x0 + (int)(((int64) (x1 - x0)) * ((int64) (top - y0)) / ((int64) (y1 - y0))); + y0 = top; + } else if (c0 & BOTTOM) { // point 0 is below the clip window + x0 = x0 + (int)(((int64) (x1 - x0)) * ((int64) (bottom - y0)) / ((int64) (y1 - y0))); + y0 = bottom; + } else if (c0 & RIGHT) { // point 0 is to the right of clip window + y0 = y0 + (int)(((int64) (y1 - y0)) * ((int64) (right - x0)) / ((int64) (x1 - x0))); + x0 = right; + } else if (c0 & LEFT) { // point 0 is to the left of clip window + y0 = y0 + (int)(((int64) (y1 - y0)) * ((int64) (left - x0)) / ((int64) (x1 - x0))); + x0 = left; + } + + c0 = out_code(x0, y0); + } + + NOT_REACHED(); } /** From 9f458ecb10cb738c496792a3c378374463125dde Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 28 Jan 2019 19:45:43 +0100 Subject: [PATCH 254/622] Update: Translations from eints korean: 15 changes by telk5093 spanish: 2 changes by SilverSurferZzZ russian: 21 changes by Lone_Wolf spanish (mexican): 13 changes by Absay --- src/lang/korean.txt | 16 +++++++++++++++- src/lang/russian.txt | 22 +++++++++++++++++++++- src/lang/spanish.txt | 3 ++- src/lang/spanish_MX.txt | 26 +++++++++++++------------- 4 files changed, 51 insertions(+), 16 deletions(-) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 73cfe66b30..c4dbffd992 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -190,6 +190,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}mph @@ -930,6 +931,7 @@ 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_MXN :멕시코 페소 (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}차량 통행 방식 @@ -1259,6 +1261,8 @@ 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 :시작시 회사 색상: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :새 회사에서 사용할 색상을 선택하세요. STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :옛날 공항을 사라지지 않고 계속 만들 수 있게 함: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :이 설정을 켜면, 소형 공항을 포함한 모든 공항 종류를 도입 이후에 계속 사용할 수 있게 됩니다. @@ -1817,7 +1821,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}현재 STR_CHEAT_SETUP_PROD :{LTBLUE}1차 산업시설 생산량 조절 허용: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}새 색상 +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - 색상 STR_LIVERY_GENERAL_TOOLTIP :{BLACK}기본 색상 선택 STR_LIVERY_TRAIN_TOOLTIP :{BLACK}열차 색상 선택 @@ -2892,7 +2896,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}버전: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}최소 이용 가능한 버전: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5합: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}색상표: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :도스 +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :도스 / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Windows +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Windows / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}매개 변숫값: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :없음 STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}관련 정보 없음 STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}일치하는 파일을 찾을 수 없습니다 @@ -3352,6 +3361,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}이 산 STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}생산 수준: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}산업시설이 곧 폐쇄됩니다! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}받는 화물: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_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} @@ -3452,6 +3464,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}수용 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} 칸 @@ -3851,6 +3864,7 @@ STR_ORDER_CONDITIONAL_AGE :연령 (년) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :정비 필요성 STR_ORDER_CONDITIONAL_UNCONDITIONALLY :항상 STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :남은 수명 (년) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :최대 신뢰도 STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}왼쪽의 비교조건과 오른쪽의 입력값을 비교할 연산자를 선택합니다. STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS := diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 72132ac069..ccc3c96202 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1972,7 +1972,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Изме STR_CHEAT_SETUP_PROD :{LTBLUE}Разрешить изменение производительности: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Новая цветовая схема +STR_LIVERY_CAPTION :{WHITE}Цвета компании «{COMPANY}» STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Настройка основной цветовой схемы STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Настройка цветовой схемы поездов @@ -2907,6 +2907,12 @@ STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COM STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} с ############ Leave those lines in this order!! STR_FRAMERATE_GAMELOOP :{BLACK}Расчёт игрового цикла: +STR_FRAMERATE_GL_ECONOMY :{BLACK} Расчёт объёмов груза: +STR_FRAMERATE_GL_TRAINS :{BLACK} Движение поездов: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Движение автомобилей: +STR_FRAMERATE_GL_SHIPS :{BLACK} Движение кораблей: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Движение воздушных судов: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Изменения на карте: STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Задержка графа распределения: STR_FRAMERATE_DRAWING :{BLACK}Отрисовка изображения: STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Дополнительные окна: @@ -2914,6 +2920,13 @@ STR_FRAMERATE_VIDEO :{BLACK}Выво STR_FRAMERATE_SOUND :{BLACK}Обработка звука: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Расчёт игрового цикла +STR_FRAMETIME_CAPTION_GL_ECONOMY :Расчёт объёмов груза +STR_FRAMETIME_CAPTION_GL_TRAINS :Движение поездов +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Движение автомобилей +STR_FRAMETIME_CAPTION_GL_SHIPS :Движение кораблей +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Движение воздушных судов +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Расчёт изменений на карте STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Задержка графа распределения STR_FRAMETIME_CAPTION_DRAWING :Отрисовка изображения STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Отрисовка изображения в доп. окнах @@ -3062,7 +3075,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Верс STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Совместимо с версией не ниже: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Палитра: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Стандартная (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Стандартная (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Устаревшая (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Устаревшая (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Параметры: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Нет STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Нет доступной информации STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Файл не найден @@ -3144,6 +3162,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Запроше STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} был отключён из-за {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Недопустимый/неизвестный формат расположения спрайтов (спрайт {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Слишком много элементов в списке значений (спрайт {3:NUM}, свойство {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Неверная обработка продукции предприятия (спрайт {3:NUM}, "{1:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Осторожно! @@ -3624,6 +3643,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Ёмко 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} клет{P ка ки ок} diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index fee155edfb..0409dfa106 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1813,7 +1813,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Cambiar STR_CHEAT_SETUP_PROD :{LTBLUE}Permitir modificación de los valores de producción: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nuevo Esquema de Color +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Esquema de Color STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostrar esquema de colores general STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Ver esquema de color de los trenes @@ -3331,6 +3331,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de producción: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La industria ha anunciado su cierre inminente! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Requiere: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necesita: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 58a127e84b..2043646630 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1548,12 +1548,12 @@ STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Activar interfa STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Mostrar una ventana para elegir los tipos de señales a instalar. Si no se activa, se instalan las señales y se selecciona un tipo determinado mediante Ctrl+Clic, sin que aparezca ninguna interfaz STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Tipo de señal predeterminada a instalar: {STRING} STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Tipo de señal predeterminada a utilizar -STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Señales de bloqueo +STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Señales de tramo STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :Señales de ruta STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :Señales de ruta de un sentido STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Cambiar entre tipos de señales: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Elegir entre qué señales se debe cambiar al usar Ctrl+Clic con la herramienta de señales -STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :Solo señales de bloqueo +STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :Solo señales de tramo STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Solo señales de ruta STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Todas @@ -2331,7 +2331,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Construi STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Construir depósito de trenes (para comprar y dar mantenimiento a trenes). Mayús muestra una estimación del precio STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Construir punto guía sobre vías férreas. Ctrl activa la unión de puntos guías. Mayús muestra una estimación del precio STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Construir estación de ferrocarril. Ctrl activa la ampliación de estaciones. Mayús muestra una estimación del precio -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Instalar señales de ferrocarril. Ctrl cambia entre señales mecánicas y eléctricas{}Al arrastrar sobre las vías se instalan señales a lo largo de un tramo recto elegido. Ctrl instala señales hasta el siguiente desvío u otra señal{}Ctrl+Clic cambia a la herramienta de selección de señales. Mayús muestra una estimación del precio +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Poner señales. Ctrl intercambia señales mecánicas y eléctricas{}Arrastrar sobre un tramo recto permite poner señales intercaladas. Ctrl pone señales hasta un desvío u otra señal{}Ctrl+Clic cambia al modo de selección de señales. Mayús muestra una estimación del precio STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Construir puente de ferrocarril. Mayús muestra una estimación del precio STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Construir túnel de ferrocarril. Mayús muestra una estimación del precio STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Quitar vías férreas, señales, estaciones y puntos guías. Al mantener pulsado Ctrl se quitan también las vías al retirar estaciones o puntos guías @@ -2369,17 +2369,17 @@ STR_STATION_CLASS_WAYP :Puntos guías # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Selección de señales -STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Señal de bloqueo (mecánica){}Es el tipo de señal más básico que permite a un único tren ocupar al mismo tiempo un tramo de vía entre dos señales -STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Señal de entrada (mecánica){}Abierta si existe una o más señales de salida en el siguiente tramo, de lo contrario se mostrará cerrada -STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Señal de salida (mecánica){}Igual que una señal de bloqueo pero es necesaria para activar la posición correcta de las señales de entrada y combo -STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Señal de combo (mecánica){}La señal hace lo mismo que una señal de entrada y salida a la vez, lo que permite construir grandes "árboles" de señales condicionales -STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Señal de ruta (mecánica){}Una señal de ruta permite a más de un tren entrar al mismo tiempo en un tramo de vía con señales, en tanto que el tren pueda reservar una ruta hasta un lugar seguro. Puede ser pasada por detrás +STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Señal de tramo (mecánica){}Es la señal más básica. Permite a un solo tren ocupar un tramo de vía entre dos señales +STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Señal de entrada (mecánica){}Se abre si existe una o más señales de salida en el siguiente tramo, de lo contrario se mostrará cerrada +STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Señal de salida (mecánica){}Igual que una señal de tramo pero es necesaria para activar la posición correcta de las señales de entrada y combo +STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Señal combo (mecánica){}Hace lo mismo que las señales de entrada y de salida, lo que permite construir amplios "árboles" de señales condicionales +STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Señal de ruta (mecánica){}Permite a más de un tren entrar al mismo tiempo en un tramo de vía con señales, en tanto que el tren pueda reservar una ruta hasta un lugar seguro. Puede ser pasada por detrás STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Señal de ruta de un sentido (mecánica){}Igual que una señal de ruta pero no puede ser pasada por detrás -STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Señal de bloqueo (eléctrica){}Es el tipo de señal más básico que permite a un único tren ocupar al mismo tiempo un tramo de vía entre dos señales -STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Señal de entrada (eléctrica){}Verde si existe una o más señales de salida en el siguiente tramo, de lo contrario se mostrará en rojo -STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Señal de salida (eléctrica){}Igual que una señal de bloqueo pero es necesaria para activar el color correcto de las señales de entrada y combo -STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Señal combo (eléctrica){}La señal hace lo mismo que una señal de entrada y salida a la vez, lo que permite construir grandes "árboles" de señales condicionales -STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Señal de ruta (eléctrica){}Una señal de ruta permite a más de un tren entrar al mismo tiempo en un tramo de vía con señales, en tanto que el tren pueda reservar una ruta hasta un lugar seguro. Puede ser pasada por detrás +STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Señal de tramo (eléctrica){}Es la señal más básica. Permite a un solo tren ocupar un tramo de vía entre dos señales +STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Señal de entrada (eléctrica){}En verde si existe una o más señales de salida en el siguiente tramo, de lo contrario se mostrará en rojo +STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Señal de salida (eléctrica){}Igual que una señal de tramo pero es necesaria para activar el color correcto de las señales de entrada y combo +STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Señal combo (eléctrica){}Hace lo mismo que las señales de entrada y de salida, lo que permite construir amplios "árboles" de señales condicionales +STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Señal de ruta (eléctrica){}Permite a más de un tren entrar al mismo tiempo en un tramo de vía con señales, en tanto que el tren pueda reservar una ruta hasta un lugar seguro. Puede ser pasada por detrás STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Señal de ruta de un sentido (eléctrica){}Igual que una señal de ruta pero no puede ser pasada por detrás STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Conversión de señal{}Activar para pulsar sobre una señal existente y convertirla en el tipo y variante elegidos. Ctrl+Clic permite cambiar entre variantes de señales. Mayús+Clic muestra una estimación del precio de conversión STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distancia entre señales From fe37b40385afa809f2c1bb5971b833e314fd1e32 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 27 Jan 2019 12:33:54 +0000 Subject: [PATCH 255/622] Fix: Group hierarchy not visible in RTL languages. --- src/group_gui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 7db04e9b35..811b46af8e 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -260,7 +260,7 @@ private: str = STR_GROUP_NAME; } int x = rtl ? right - WD_FRAMERECT_RIGHT - 8 - this->column_size[VGC_NAME].width + 1 : left + WD_FRAMERECT_LEFT + 8; - DrawString(x + indent * LEVEL_WIDTH, x + this->column_size[VGC_NAME].width - 1, y + (this->tiny_step_height - this->column_size[VGC_NAME].height) / 2, str, colour); + DrawString(x + (rtl ? 0 : indent), x + this->column_size[VGC_NAME].width - 1 - (rtl ? indent : 0), y + (this->tiny_step_height - this->column_size[VGC_NAME].height) / 2, str, colour); /* draw autoreplace protection */ x = rtl ? x - 8 - this->column_size[VGC_PROTECT].width : x + 8 + this->column_size[VGC_NAME].width; @@ -582,7 +582,7 @@ public: assert(g->owner == this->owner); - DrawGroupInfo(y1, r.left, r.right, g->index, this->indents[i], g->replace_protection); + DrawGroupInfo(y1, r.left, r.right, g->index, this->indents[i] * LEVEL_WIDTH, g->replace_protection); y1 += this->tiny_step_height; } From 310fa1af8863d84f9ebbe6b5ea36c21f3c4a43cf Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 27 Jan 2019 12:35:14 +0000 Subject: [PATCH 256/622] Codechange: Rename function to match what it does and reduce code indenting. --- src/group_gui.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 811b46af8e..a884920842 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -122,14 +122,13 @@ private: Dimension column_size[VGC_END]; ///< Size of the columns in the group list. - void AddParents(GUIGroupList *source, GroupID parent, int indent) + void AddChildren(GUIGroupList *source, GroupID parent, int indent) { for (const Group **g = source->Begin(); g != source->End(); g++) { - if ((*g)->parent == parent) { - *this->groups.Append() = *g; - *this->indents.Append() = indent; - AddParents(source, (*g)->index, indent + 1); - } + if ((*g)->parent != parent) continue; + *this->groups.Append() = *g; + *this->indents.Append() = indent; + AddChildren(source, (*g)->index, indent + 1); } } @@ -180,7 +179,7 @@ private: list.ForceResort(); list.Sort(&GroupNameSorter); - AddParents(&list, INVALID_GROUP, 0); + AddChildren(&list, INVALID_GROUP, 0); this->groups.Compact(); this->groups.RebuildDone(); From b22fbfbe3ddb1b965efdc948fe47cf9002cd3c71 Mon Sep 17 00:00:00 2001 From: glx Date: Mon, 28 Jan 2019 23:51:34 +0100 Subject: [PATCH 257/622] Add: allow opening of one TextfileWindow per type --- src/ai/ai_gui.cpp | 2 +- src/network/network_content_gui.cpp | 2 +- src/newgrf_gui.cpp | 2 +- src/settings_gui.cpp | 2 +- src/textfile_gui.cpp | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 8dad16fabc..aa56b3d830 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -660,7 +660,7 @@ struct ScriptTextfileWindow : public TextfileWindow { */ void ShowScriptTextfileWindow(TextfileType file_type, CompanyID slot) { - DeleteWindowByClass(WC_TEXTFILE); + DeleteWindowById(WC_TEXTFILE, file_type); new ScriptTextfileWindow(file_type, slot); } diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 1df2fc82c4..877dea9786 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -76,7 +76,7 @@ struct ContentTextfileWindow : public TextfileWindow { void ShowContentTextfileWindow(TextfileType file_type, const ContentInfo *ci) { - DeleteWindowByClass(WC_TEXTFILE); + DeleteWindowById(WC_TEXTFILE, file_type); new ContentTextfileWindow(file_type, ci); } diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 140e296571..868fad968b 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -561,7 +561,7 @@ struct NewGRFTextfileWindow : public TextfileWindow { void ShowNewGRFTextfileWindow(TextfileType file_type, const GRFConfig *c) { - DeleteWindowByClass(WC_TEXTFILE); + DeleteWindowById(WC_TEXTFILE, file_type); new NewGRFTextfileWindow(file_type, c); } diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 134b1f58ff..e94f96bc46 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -162,7 +162,7 @@ struct BaseSetTextfileWindow : public TextfileWindow { template void ShowBaseSetTextfileWindow(TextfileType file_type, const TBaseSet* baseset, StringID content_type) { - DeleteWindowByClass(WC_TEXTFILE); + DeleteWindowById(WC_TEXTFILE, file_type); new BaseSetTextfileWindow(file_type, baseset, content_type); } diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index b0f9b1125a..ff5226c2b5 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -65,7 +65,7 @@ TextfileWindow::TextfileWindow(TextfileType file_type) : Window(&_textfile_desc) this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_TF_VSCROLLBAR); this->hscroll = this->GetScrollbar(WID_TF_HSCROLLBAR); - this->FinishInitNested(); + this->FinishInitNested(file_type); this->GetWidget(WID_TF_CAPTION)->SetDataTip(STR_TEXTFILE_README_CAPTION + file_type, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS); this->hscroll->SetStepSize(10); // Speed up horizontal scrollbar From 6a56a4ce84165ad85d4e66944ef6691d94c9d0c3 Mon Sep 17 00:00:00 2001 From: Nikolas Nyby Date: Mon, 28 Jan 2019 21:54:32 -0500 Subject: [PATCH 258/622] Fix #6584: text layout problem in engine preview dialog With language set to German, there was a problem in this dialog box due to the long strings in this language. It looks like the call to `GetStringHeight()` here is using `r.top` to help calculate the max width, rather than `r.left`. --- src/engine_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine_gui.cpp b/src/engine_gui.cpp index 5e9e8cef7e..51c7e14836 100644 --- a/src/engine_gui.cpp +++ b/src/engine_gui.cpp @@ -108,7 +108,7 @@ struct EnginePreviewWindow : Window { EngineID engine = this->window_number; SetDParam(0, GetEngineCategoryName(engine)); - int y = r.top + GetStringHeight(STR_ENGINE_PREVIEW_MESSAGE, r.right - r.top + 1); + int y = r.top + GetStringHeight(STR_ENGINE_PREVIEW_MESSAGE, r.right - r.left + 1); y = DrawStringMultiLine(r.left, r.right, r.top, y, STR_ENGINE_PREVIEW_MESSAGE, TC_FROMSTRING, SA_CENTER) + WD_PAR_VSEP_WIDE; SetDParam(0, engine); From 7c6e10dbfccee23693cd6bffa6b8089555fe44d7 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Tue, 29 Jan 2019 17:18:12 +0100 Subject: [PATCH 259/622] Update: Visual Studio 2019 solution file version upgrade (#7135) --- projects/openttd_vs142.sln | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/projects/openttd_vs142.sln b/projects/openttd_vs142.sln index f07fb388d5..15cd430168 100644 --- a/projects/openttd_vs142.sln +++ b/projects/openttd_vs142.sln @@ -1,7 +1,6 @@ - Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.23107.0 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28516.95 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openttd", "openttd_vs142.vcxproj", "{668328A0-B40E-4CDB-BD72-D0064424414A}" EndProject @@ -97,6 +96,9 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {1DE4D2BD-DBC4-4304-907E-34994EEAA4C1} + EndGlobalSection GlobalSection(DPCodeReviewSolutionGUID) = preSolution DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} EndGlobalSection From 498ca6e4eba6477633e4efa28ad32889504c17a6 Mon Sep 17 00:00:00 2001 From: PeterN Date: Tue, 29 Jan 2019 17:15:54 +0000 Subject: [PATCH 260/622] Add: [GitHub] Add issue template to encourage better issue reporting. (#7137) --- .github/ISSUE_TEMPLATE.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000000..ba365bfe4f --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,7 @@ +## Version of OpenTTD + +## Expected result + +## Actual result + +## Steps to reproduce From 48fb57550240ea50497f1ab55dff91c583d71ebb Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 29 Jan 2019 08:01:28 +0000 Subject: [PATCH 261/622] Fix 11ab3c4ea2f: Vehicles could not be refitted to cargo IDs higher than 32. --- src/economy.cpp | 4 ++-- src/vehicle_cmd.cpp | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/economy.cpp b/src/economy.cpp index c7ffa96cc7..6d3c2a8b26 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1484,7 +1484,7 @@ static void HandleStationRefit(Vehicle *v, CargoArray &consist_capleft, Station if (st->goods[cid].cargo.HasCargoFor(next_station)) { /* Try to find out if auto-refitting would succeed. In case the refit is allowed, * the returned refit capacity will be greater than zero. */ - DoCommand(v_start->tile, v_start->index, cid | 1U << 6 | 0xFF << 8 | 1U << 16, DC_QUERY_COST, GetCmdRefitVeh(v_start)); // Auto-refit and only this vehicle including artic parts. + DoCommand(v_start->tile, v_start->index, cid | 1U << 24 | 0xFF << 8 | 1U << 16, DC_QUERY_COST, GetCmdRefitVeh(v_start)); // Auto-refit and only this vehicle including artic parts. /* Try to balance different loadable cargoes between parts of the consist, so that * all of them can be loaded. Avoid a situation where all vehicles suddenly switch * to the first loadable cargo for which there is only one packet. If the capacities @@ -1507,7 +1507,7 @@ static void HandleStationRefit(Vehicle *v, CargoArray &consist_capleft, Station * "via any station" before reserving. We rather produce some more "any station" cargo than * misrouting it. */ IterateVehicleParts(v_start, ReturnCargoAction(st, INVALID_STATION)); - CommandCost cost = DoCommand(v_start->tile, v_start->index, new_cid | 1U << 6 | 0xFF << 8 | 1U << 16, DC_EXEC, GetCmdRefitVeh(v_start)); // Auto-refit and only this vehicle including artic parts. + CommandCost cost = DoCommand(v_start->tile, v_start->index, new_cid | 1U << 24 | 0xFF << 8 | 1U << 16, DC_EXEC, GetCmdRefitVeh(v_start)); // Auto-refit and only this vehicle including artic parts. if (cost.Succeeded()) v->First()->profit_this_year -= cost.GetCost() << 8; } diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 9231ad689d..9f8e038877 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -420,12 +420,12 @@ static CommandCost RefitVehicle(Vehicle *v, bool only_this, uint8 num_vehicles, * @param flags type of operation * @param p1 vehicle ID to refit * @param p2 various bitstuffed elements - * - p2 = (bit 0-4) - New cargo type to refit to. - * - p2 = (bit 6) - Automatic refitting. - * - p2 = (bit 7) - Refit only this vehicle. Used only for cloning vehicles. + * - p2 = (bit 0-7) - New cargo type to refit to. * - p2 = (bit 8-15) - New cargo subtype to refit to. 0xFF means to try keeping the same subtype according to GetBestFittingSubType(). * - p2 = (bit 16-23) - Number of vehicles to refit (not counting articulated parts). Zero means all vehicles. * Only used if "refit only this vehicle" is false. + * - p2 = (bit 24) - Automatic refitting. + * - p2 = (bit 25) - Refit only this vehicle. Used only for cloning vehicles. * @param text unused * @return the cost of this operation or an error */ @@ -443,7 +443,7 @@ CommandCost CmdRefitVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint CommandCost ret = CheckOwnership(front->owner); if (ret.Failed()) return ret; - bool auto_refit = HasBit(p2, 6); + bool auto_refit = HasBit(p2, 24); bool free_wagon = v->type == VEH_TRAIN && Train::From(front)->IsFreeWagon(); // used by autoreplace/renew /* Don't allow shadows and such to be refitted. */ @@ -460,12 +460,12 @@ CommandCost CmdRefitVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint if (front->vehstatus & VS_CRASHED) return_cmd_error(STR_ERROR_VEHICLE_IS_DESTROYED); /* Check cargo */ - CargoID new_cid = GB(p2, 0, 5); + CargoID new_cid = GB(p2, 0, 8); byte new_subtype = GB(p2, 8, 8); if (new_cid >= NUM_CARGO) return CMD_ERROR; /* For ships and aircraft there is always only one. */ - bool only_this = HasBit(p2, 7) || front->type == VEH_SHIP || front->type == VEH_AIRCRAFT; + bool only_this = HasBit(p2, 25) || front->type == VEH_SHIP || front->type == VEH_AIRCRAFT; uint8 num_vehicles = GB(p2, 16, 8); CommandCost cost = RefitVehicle(v, only_this, num_vehicles, new_cid, new_subtype, flags, auto_refit); @@ -899,7 +899,7 @@ CommandCost CmdCloneVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint /* Find out what's the best sub type */ byte subtype = GetBestFittingSubType(v, w, v->cargo_type); if (w->cargo_type != v->cargo_type || w->cargo_subtype != subtype) { - CommandCost cost = DoCommand(0, w->index, v->cargo_type | 1U << 7 | (subtype << 8), flags, GetCmdRefitVeh(v)); + CommandCost cost = DoCommand(0, w->index, v->cargo_type | 1U << 25 | (subtype << 8), flags, GetCmdRefitVeh(v)); if (cost.Succeeded()) total_cost.AddCost(cost); } From a1c37810108492c64913c95f8db72b1beed32fb0 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 29 Jan 2019 19:45:47 +0100 Subject: [PATCH 262/622] Update: Translations from eints swedish: 13 changes by Joel_A croatian: 7 changes by VoyagerOne --- src/lang/croatian.txt | 8 +++++++- src/lang/swedish.txt | 20 +++++++++++++------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 79b6b1d9b0..8b0bd232fd 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1916,7 +1916,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Promijen STR_CHEAT_SETUP_PROD :{LTBLUE}Omogući izmjeni produkcijskih vrijednosti: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nova boja +STR_LIVERY_CAPTION :{WHITE}{COMPANY} -Boja STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Pokaži generalne sheme boja STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Pokaži sheme boja za vlak @@ -2991,7 +2991,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Verzija: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. kompatibilna verzija: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5 suma: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Osnovna postavka (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Osnovna postavka (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Legacy (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Legacy (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parametri: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Ništa STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Nema dostupnih informacija STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Nije pronađena odgovarajuća datoteka @@ -3554,6 +3559,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Nosivost STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK} Pokretni vagoni:.{GOLD}+{POWER}{BLACK} Težina: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Prenamjenjivo u: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Sve vrste tereta +STR_PURCHASE_INFO_NONE :Ništa STR_PURCHASE_INFO_ALL_BUT :Sve osim {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK} Najveća vučna sila: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Domet: {GOLD}{COMMA} polja diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 00ce1dd183..67eaa1ac6a 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -810,6 +810,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(VD) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} har sponsrat byggnationen av nya staden {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}En ny stad, kallad {TOWN}, har grundats! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Ny {STRING} under konstruktion nära {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Ny {STRING} planteras nära {TOWN}! @@ -1335,6 +1336,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Terrängens fä STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Grön STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Mörkgrön STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violett +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Beteende vid scrollning av kartan STR_CONFIG_SETTING_SMOOTH_SCROLLING :Mjuk scrollning av vy: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Kontrollera hur huvudvyn skrollar till en specifik position vid klick på minikartan eller när ett kommando används för att skrolla till ett specifikt objekt på kartan. Om det är aktiverat skrollar vyn mjukt, om det är inaktiverat hoppar den direkt till målet STR_CONFIG_SETTING_MEASURE_TOOLTIP :Visa måtthjälptext vid användning av byggverktyg: {STRING} @@ -1803,7 +1805,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Ändra n STR_CHEAT_SETUP_PROD :{LTBLUE}Aktivera modifiering av produktionsvärden: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nytt färgval +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Färgschema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Visa generellt färgschema STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Visa färgscheman för tåg @@ -2688,9 +2690,13 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD- STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD-teamet # Framerate display window +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms ############ Leave those lines in this order!! +STR_FRAMERATE_GL_SHIPS :{BLACK} Skepps-tick: +STR_FRAMERATE_DRAWING :{BLACK}Grafikåtergivning: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Vägfordons-tick ############ End of leave-in-this-order @@ -3214,7 +3220,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(VD) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Etablerades: {WHITE}{NUM} -STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Färgval: +STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Färgschema: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Fordon: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} tåg STR_COMPANY_VIEW_ROAD_VEHICLES :{WHITE}{COMMA} vägfordon @@ -3242,7 +3248,7 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Visa det STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nytt ansikte STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Välj nytt ansikte på VD:n -STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Färgval +STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Färgschema STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Byt färg på företaget STR_COMPANY_VIEW_COMPANY_NAME_BUTTON :{BLACK}Företagsnamn STR_COMPANY_VIEW_COMPANY_NAME_TOOLTIP :{BLACK}Byt företagets namn @@ -3778,7 +3784,7 @@ STR_ORDER_DROP_SERVICE_DEPOT :Service vid beh STR_ORDER_DROP_HALT_DEPOT :Stanna STR_ORDER_SERVICE_TOOLTIP :{BLACK}Skippa den här ordern om service ej behövs -STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Fordonsdata att basera hoppning på +STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Fordonsdata att basera hopp på # Conditional order variables, must follow order of OrderConditionVariable enum STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE :Laddningsprocent @@ -3880,9 +3886,9 @@ STR_ORDER_STOP_LOCATION_FAR_END :[slutet] STR_ORDER_OUT_OF_RANGE :{RED} (Nästa destination är utanför räckvidden) -STR_ORDER_CONDITIONAL_UNCONDITIONAL :Skippa till order {COMMA} -STR_ORDER_CONDITIONAL_NUM :Skippa till order {COMMA} när {STRING} {STRING} {COMMA} -STR_ORDER_CONDITIONAL_TRUE_FALSE :Skippa till order {COMMA} när {STRING} {STRING} +STR_ORDER_CONDITIONAL_UNCONDITIONAL :Hoppa till order {COMMA} +STR_ORDER_CONDITIONAL_NUM :Hoppa till order {COMMA} när {STRING} {STRING} {COMMA} +STR_ORDER_CONDITIONAL_TRUE_FALSE :Hoppa till order {COMMA} när {STRING} {STRING} STR_INVALID_ORDER :{RED} (Ogiltig order) From 2fcd4e61db3d6df40cf814718e3ab5d26777f47d Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 29 Jan 2019 22:11:18 +0100 Subject: [PATCH 263/622] Fix: make sure strgen fails when english.txt contains invalid commands --- src/strgen/strgen.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp index 44cbd127a1..98e11e2eb6 100644 --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -540,6 +540,7 @@ int CDECL main(int argc, char *argv[]) HeaderFileWriter writer(pathbuf); writer.WriteHeader(data); writer.Finalise(data); + if (_errors != 0) return 1; } else if (mgo.numleft >= 1) { char *r; From 90c7ef96ca546efa333f4e3c4ca4e09fbab2a912 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 29 Jan 2019 19:15:49 +0000 Subject: [PATCH 264/622] Fix 11ab3c4ea2f: Fix showing cargo capacity for auto-refits (missed in #7134) --- src/vehicle_gui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 450b0cc2d8..b4d6fdfabe 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -689,8 +689,8 @@ struct RefitWindow : public Window { { assert(_current_company == _local_company); Vehicle *v = Vehicle::Get(this->window_number); - CommandCost cost = DoCommand(v->tile, this->selected_vehicle, option->cargo | (int)this->auto_refit << 6 | option->subtype << 8 | - this->num_vehicles << 16, DC_QUERY_COST, GetCmdRefitVeh(v->type)); + CommandCost cost = DoCommand(v->tile, this->selected_vehicle, option->cargo | option->subtype << 8 | this->num_vehicles << 16 | + (int)this->auto_refit << 24, DC_QUERY_COST, GetCmdRefitVeh(v->type)); if (cost.Failed()) return INVALID_STRING_ID; From 8334a5733220d379a0d573e3bf61c4c9d9c874e4 Mon Sep 17 00:00:00 2001 From: nikolas Date: Wed, 30 Jan 2019 08:52:56 -0500 Subject: [PATCH 265/622] Fix: unicode characters in Romanian town names (#7141) Many of these town names were using the 'a with ~ above it' character, which should actually by 'a with u above it'. There were other missing accents as well which I've added. --- src/table/townname.h | 86 ++++++++++++++++++++++---------------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/src/table/townname.h b/src/table/townname.h index 7680846841..057583177d 100644 --- a/src/table/townname.h +++ b/src/table/townname.h @@ -1942,96 +1942,96 @@ static const char * const _name_romanian_real[] = { "Alba Iulia", "Alexandria", "Babadag", - "Bac\xC3\xA3u", + "Bac\xC4\x83u", "Baia Mare", - "B\xC3\xA3ile Herculane", - "B\xC3\xA3ilesti", + "B\xC4\x83ile Herculane", + "B\xC4\x83ilesti", "B\xC3\xA2rlad", "Bicaz", - "Bistrita", + "Bistri\xC8\x9B""a", "Blaj", "Borsec", - "Botosani", - "Br\xC3\xA3ila", - "Brasov", - "Bucuresti", + "Boto\xC8\x99""ani", + "Br\xC4\x83ila", + "Bra\xC8\x9Bov", + "Bucure\xC8\x99ti", "Buftea", - "Buz\xC3\xA3u", - "C\xC3\xA3l\xC3\xA3rasi", - "Caransebes", - "Cernavod\xC3\xA3", + "Buz\xC4\x83u", + "C\xC4\x83l\xC4\x83rasi", + "Caransebe\xC8\x99", + "Cernavod\xC4\x83", "Cluj-Napoca", - "Constanta", + "Constan\xC8\x9B""a", "Covasna", "Craiova", "Dej", "Deva", "Dorohoi", - "Dr.-Tr. Severin", - "Dr\xC3\xA3g\xC3\xA3sani", - "F\xC3\xA3g\xC3\xA3ras", - "F\xC3\xA3lticeni", - "Fetesti", - "Focsani", - "Galati", + "Drobeta-Turnu Severin", + "Dr\xC4\x83g\xC4\x83sani", + "F\xC4\x83g\xC4\x83ras", + "F\xC4\x83lticeni", + "Fete\xC8\x99ti", + "Foc\xC8\x99""ani", + "Gala\xC8\x99i", "Gheorgheni", "Giurgiu", - "H\xC3\xA2rsova", + "H\xC3\xA2r\xC8\x99ova", "Hunedoara", - "Husi", - "Iasi", + "Hu\xC8\x99i", + "Ia\xC8\x99i", "Isaccea", "Lugoj", - "M\xC3\xA3""cin", + "M\xC4\x83""cin", "Mangalia", "Medgidia", - "Medias", + "Media\xC8\x99", "Miercurea Ciuc", "Mizil", "Motru", - "N\xC3\xA3s\xC3\xA3ud", - "N\xC3\xA3vodari", - "Odobesti", - "Oltenita", - "Onesti", + "N\xC4\x83s\xC4\x83ud", + "N\xC4\x83vodari", + "Odobe\xC8x99ti", + "Olteni\xC8\x9B""a", + "One\xC8\x99ti", "Oradea", - "Orsova", - "Petrosani", - "Piatra Neamt", - "Pitesti", - "Ploiesti", + "Or\xC8\x99ova", + "Petro\xC8\x99""ani", + "Piatra Neam\xC8\x9B", + "Pite\xC8\x99ti", + "Ploie\xC8\x99ti", "Predeal", "R\xC3\xA2mnicu V\xC3\xA2lcea", "Reghin", - "Resita", + "Re\xC8\x99i\xC8\x9B""a", "Roman", - "Rosiorii de Vede", + "Ro\xC8\x99iorii de Vede", "Satu Mare", - "Sebes", + "Sebe\xC8\x99", "Sf\xC3\xA2ntu Gheorghe", "Sibiu", - "Sighisoara", + "Sighi\xC8\x99oara", "Sinaia", "Slatina", "Slobozia", "Sovata", "Suceava", "Sulina", - "T\xC3\xA3nd\xC3\xA3rei", + "T\xC4\x83nd\xC4\x83rei", "T\xC3\xA2rgoviste", "T\xC3\xA2rgu Jiu", "T\xC3\xA2rgu Mures", "Tecuci", - "Timisoara", + "Timi\xC8\x99oara", "Tulcea", "Turda", - "Turnu M\xC3\xA3gurele", + "Turnu M\xC4\x83gurele", "Urziceni", "Vaslui", "Vatra Dornei", "Victoria", "Videle", - "Zal\xC3\xA3u", + "Zal\xC4\x83u", }; static const char * const _name_slovak_real[] = { From e982b9131e9c92d70dd5994910c1eb8ca644f2f2 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 30 Jan 2019 09:20:07 +0000 Subject: [PATCH 266/622] Fix #7142: Missing map bounds check when building long roads. --- src/road_cmd.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 175e776e5e..d9825c9bfa 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -809,7 +809,9 @@ do_clear:; */ static bool CanConnectToRoad(TileIndex tile, RoadType rt, DiagDirection dir) { - RoadBits bits = GetAnyRoadBits(tile + TileOffsByDiagDir(dir), rt, false); + tile += TileOffsByDiagDir(dir); + if (!IsValidTile(tile)) return false; + RoadBits bits = GetAnyRoadBits(tile, rt, false); return (bits & DiagDirToRoadBits(ReverseDiagDir(dir))) != 0; } From 67633606b00f87dd11d7cc2ad186624fed38271f Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 29 Jan 2019 00:09:25 +0000 Subject: [PATCH 267/622] Codechange: Remove value mangling and field misuse in SLE_WRITEBYTE. The original translation functionality hasn't been used since 2007. --- src/saveload/saveload.cpp | 14 ++++++-------- src/saveload/saveload.h | 2 +- src/saveload/station_sl.cpp | 4 ++-- src/saveload/vehicle_sl.cpp | 12 ++++++------ 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 29adb40c9b..348ba93ba0 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -1710,17 +1710,15 @@ bool SlObjectMember(void *ptr, const SaveLoad *sld) } break; - /* SL_WRITEBYTE translates a value of a variable to another one upon - * saving or loading. - * XXX - variable renaming abuse - * game_value: the value of the variable ingame is abused by sld->version_from - * file_value: the value of the variable in the savegame is abused by sld->version_to */ + /* SL_WRITEBYTE writes a value to the savegame to identify the type of an object. + * When loading, the value is read explictly with SlReadByte() to determine which + * object description to use. */ case SL_WRITEBYTE: switch (_sl.action) { - case SLA_SAVE: SlWriteByte(sld->version_to); break; + case SLA_SAVE: SlWriteByte(*(uint8 *)ptr); break; case SLA_LOAD_CHECK: - case SLA_LOAD: *(byte *)ptr = sld->version_from; break; - case SLA_PTRS: break; + case SLA_LOAD: + case SLA_PTRS: case SLA_NULL: break; default: NOT_REACHED(); } diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index a5ef9d58c5..b6fc59c6e9 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -355,7 +355,7 @@ typedef SaveLoad SaveLoadGlobVarList; #define SLE_CONDNULL(length, from, to) SLE_CONDARR(NullStruct, null, SLE_FILE_U8 | SLE_VAR_NULL | SLF_NOT_IN_CONFIG, length, from, to) /** Translate values ingame to different values in the savegame and vv. */ -#define SLE_WRITEBYTE(base, variable, value) SLE_GENERAL(SL_WRITEBYTE, base, variable, 0, 0, value, value) +#define SLE_WRITEBYTE(base, variable) SLE_GENERAL(SL_WRITEBYTE, base, variable, 0, 0, 0, 0) #define SLE_VEH_INCLUDE() {false, SL_VEH_INCLUDE, 0, 0, 0, SL_MAX_VERSION, NULL, 0} #define SLE_ST_INCLUDE() {false, SL_ST_INCLUDE, 0, 0, 0, SL_MAX_VERSION, NULL, 0} diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index 670d6fcf06..ed2ee69545 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -414,7 +414,7 @@ static const SaveLoad _base_station_desc[] = { static OldPersistentStorage _old_st_persistent_storage; static const SaveLoad _station_desc[] = { - SLE_WRITEBYTE(Station, facilities, FACIL_NONE), + SLE_WRITEBYTE(Station, facilities), SLE_ST_INCLUDE(), SLE_VAR(Station, train_station.tile, SLE_UINT32), @@ -448,7 +448,7 @@ static const SaveLoad _station_desc[] = { }; static const SaveLoad _waypoint_desc[] = { - SLE_WRITEBYTE(Waypoint, facilities, FACIL_WAYPOINT), + SLE_WRITEBYTE(Waypoint, facilities), SLE_ST_INCLUDE(), SLE_VAR(Waypoint, town_cn, SLE_UINT16), diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 76fd5af5a5..2f3ace415a 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -718,7 +718,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) static const SaveLoad _train_desc[] = { - SLE_WRITEBYTE(Vehicle, type, VEH_TRAIN), + SLE_WRITEBYTE(Vehicle, type), SLE_VEH_INCLUDE(), SLE_VAR(Train, crash_anim_pos, SLE_UINT16), SLE_VAR(Train, force_proceed, SLE_UINT8), @@ -739,7 +739,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) }; static const SaveLoad _roadveh_desc[] = { - SLE_WRITEBYTE(Vehicle, type, VEH_ROAD), + SLE_WRITEBYTE(Vehicle, type), SLE_VEH_INCLUDE(), SLE_VAR(RoadVehicle, state, SLE_UINT8), SLE_VAR(RoadVehicle, frame, SLE_UINT8), @@ -759,7 +759,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) }; static const SaveLoad _ship_desc[] = { - SLE_WRITEBYTE(Vehicle, type, VEH_SHIP), + SLE_WRITEBYTE(Vehicle, type), SLE_VEH_INCLUDE(), SLE_VAR(Ship, state, SLE_UINT8), SLE_CONDDEQUE(Ship, path, SLE_UINT8, 203, SL_MAX_VERSION), @@ -771,7 +771,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) }; static const SaveLoad _aircraft_desc[] = { - SLE_WRITEBYTE(Vehicle, type, VEH_AIRCRAFT), + SLE_WRITEBYTE(Vehicle, type), SLE_VEH_INCLUDE(), SLE_VAR(Aircraft, crashed_counter, SLE_UINT16), SLE_VAR(Aircraft, pos, SLE_UINT8), @@ -794,7 +794,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) }; static const SaveLoad _special_desc[] = { - SLE_WRITEBYTE(Vehicle, type, VEH_EFFECT), + SLE_WRITEBYTE(Vehicle, type), SLE_VAR(Vehicle, subtype, SLE_UINT8), @@ -824,7 +824,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) }; static const SaveLoad _disaster_desc[] = { - SLE_WRITEBYTE(Vehicle, type, VEH_DISASTER), + SLE_WRITEBYTE(Vehicle, type), SLE_REF(Vehicle, next, REF_VEHICLE_OLD), From 530bdf33cc44d2d53c41eec19684959fd17107fa Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 30 Jan 2019 19:45:42 +0100 Subject: [PATCH 268/622] Update: Translations from eints swedish: 131 changes by Joel_A --- src/lang/swedish.txt | 191 +++++++++++++++++++++++++++++-------------- 1 file changed, 131 insertions(+), 60 deletions(-) diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 67eaa1ac6a..c1790863fb 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -189,6 +189,7 @@ STR_COLOUR_ORANGE :Orange STR_COLOUR_BROWN :Brun STR_COLOUR_GREY :Grå STR_COLOUR_WHITE :Vit +STR_COLOUR_RANDOM :Slumpmässig # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -241,7 +242,7 @@ STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Fönster STR_TOOLTIP_SHADE :{BLACK}Dölj fönster - Visa bara namnlisten STR_TOOLTIP_DEBUG :{BLACK}Visa NewGRF felsökningsinformation STR_TOOLTIP_DEFSIZE :{BLACK}Återställ fönstret till standardstorlek. Ctrl-klicka för att sätta nuvarande storlek som ny standard -STR_TOOLTIP_STICKY :{BLACK}Markera att fönstret ska lämnas öppet när 'Stäng alla fönster'-knappen används. Ctrl+Click för att spara som default +STR_TOOLTIP_STICKY :{BLACK}Markera att fönstret ska lämnas öppet när 'Stäng alla fönster'-knappen används. Ctrl+klick för att spara som standardinställning STR_TOOLTIP_RESIZE :{BLACK}Klicka och dra för att förstora fönstret STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Växla stor/liten fönsterstorlek STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Rullningslist - rullar listan upp/ned @@ -475,6 +476,7 @@ STR_ABOUT_MENU_SCREENSHOT :Skärmdump STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Fullt inzoomad skärmdump STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Normalt inzoomad skärmdump STR_ABOUT_MENU_GIANT_SCREENSHOT :Skärmdump av hela kartan +STR_ABOUT_MENU_SHOW_FRAMERATE :Visa bildfrekvens STR_ABOUT_MENU_ABOUT_OPENTTD :Om 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Justering av spriteobjekt STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Slå av/på yttre gränser för grafiska element @@ -650,6 +652,7 @@ STR_MUSIC_RULER_MARKER :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Ingen musik tillgänglig STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Spår STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Titel @@ -670,11 +673,14 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Växla s STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Visa fönstret för val av musikspår # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Musikprogram - '{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Spårindex STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Spellista - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Töm +STR_PLAYLIST_CHANGE_SET :{BLACK}Byt samling STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Töm aktuell spellista (enbart Personlig1 eller Personlig2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Ändra musikvalet till en annan installerad samling STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klicka på ett musikstycke för att lägga till det i spellistan (enbart Personlig1 eller Personlig2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klicka på ett musikstycke för att ta bort det från spellistan (endast Personlig1 och Personlig2) @@ -824,7 +830,7 @@ STR_NEWS_BEGIN_OF_RECESSION :{BIG_FONT}{BLAC STR_NEWS_END_OF_RECESSION :{BIG_FONT}{BLACK}Lågkonjunkturen över!{}{}Uppsving i handeln ger tillförsikt till industrier när ekonomin stärks! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL :{BIG_FONT}{BLACK}{INDUSTRY} ökar produktionen! -STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_COAL :{BIG_FONT}{BLACK}Nytt lager av kol funnet vid {INDUSTRY}!{}Produktionen fördubblas! +STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_COAL :{BIG_FONT}{BLACK}Ny fyndighet av kol upptäckt vid {INDUSTRY}!{}Produktionen fördubblas! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL :{BIG_FONT}{BLACK}Nya oljereserver funna vid {INDUSTRY}!{}Produktionen fördubblas! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM :{BIG_FONT}{BLACK}Nya jordbruksmetoder vid {INDUSTRY} ger fördubblad produktion! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK}Produktionen av {STRING} vid {INDUSTRY} upp med {COMMA}%! @@ -878,10 +884,10 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC # Extra view window STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Vyfönster {COMMA} -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopiera till vy +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Byt vy STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopiera huvudvyns position till detta vyfönster -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Klistra in vyn -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Flytta huvudvyns position till positionen i det här vyfönstret +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Byt huvudvy +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Kopiera denna vys position till huvudvyn # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Spelinställningar @@ -923,6 +929,8 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Sydafrikansk ra STR_GAME_OPTIONS_CURRENCY_CUSTOM :Egen... STR_GAME_OPTIONS_CURRENCY_GEL :Georgisk lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Iransk rial (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Ny rysk rubel (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Mexikansk peso (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vägfordon @@ -1045,7 +1053,7 @@ STR_VARIETY_VERY_LOW :Väldigt låg STR_VARIETY_LOW :Låg STR_VARIETY_MEDIUM :Medium STR_VARIETY_HIGH :Hög -STR_VARIETY_VERY_HIGH :Väldigt Hög +STR_VARIETY_VERY_HIGH :Väldigt hög STR_AI_SPEED_VERY_SLOW :Väldigt långsam STR_AI_SPEED_SLOW :Långsam @@ -1252,6 +1260,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Det är STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Underhåll av infrastruktur: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Om det är aktiverat så kostar underhåll av infrastruktur. Kostnaden ökar mer än proportionellt mot nätverkets storlek, vilket innebär att större företag drabbas hårdare än små företag av underhållskostnader. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Företagets startfärg: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Välj startfärg för företaget STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Flygplatser blir aldrig gamla: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Aktivering av denna inställning gör så att alla flygplatstyper finns kvar i obegränsad tid efter att de blivit tillgängliga @@ -1289,7 +1299,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Linjernas bredd STR_CONFIG_SETTING_LANDSCAPE :Landskap: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Landskap definiera grundläggande gameplay scenarier med olika last och krav stad tillväxt. NewGRF och Game skript tillåter finare kontroll. -STR_CONFIG_SETTING_LAND_GENERATOR :Land generator: {STRING} +STR_CONFIG_SETTING_LAND_GENERATOR :Landgenerator: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Den ursprungliga generatorn beror på bas grafik set, och komponerar fasta landskapsformer. TerraGenesis är en Perlin buller baserad generator med finare inställningar kontroll STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis @@ -1299,8 +1309,8 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industritäthet STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Ange hur många industrier som ska genereras och vilken nivå som ska bibehållas under spelet STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximalt avstånd mellan oljeraffinaderier och kartans kant: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Oljeraffinaderier byggs bara nära kartans kanter, alltså vid kusten om det är en ö-karta -STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snölinjeshöjd: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Kontroll på vilken höjd snön börjar i subarktiska landskapet. Snö påverkar också industrin generation och stad tillväxtkrav +STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snögränsens höjd: {STRING} +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Kontrollerar på vilken höjd snön börjar i det subarktiska landskapet. Snö påverkar även industrigeneration och städers tillväxtkrav STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Terrängens svårhetsgrad: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis endast) Välj frekvensen av kullar: Smooth landskap har färre, mer utbredda kullar. Rough landskap har många kullar, som kan se repetitiva STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Väldigt lätt @@ -1336,7 +1346,12 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Terrängens fä STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Grön STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Mörkgrön STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violett +STR_CONFIG_SETTING_SCROLLMODE :Vyfönsters skrollningsbeteende: {STRING} STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Beteende vid scrollning av kartan +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Rör vyn med höger musknapp, musens position låst +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Rör kartan med höger musknapp, musens position låst +STR_CONFIG_SETTING_SCROLLMODE_RMB :Rör kartan med höger musknapp +STR_CONFIG_SETTING_SCROLLMODE_LMB :Rör kartan med vänster musknapp STR_CONFIG_SETTING_SMOOTH_SCROLLING :Mjuk scrollning av vy: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Kontrollera hur huvudvyn skrollar till en specifik position vid klick på minikartan eller när ett kommando används för att skrolla till ett specifikt objekt på kartan. Om det är aktiverat skrollar vyn mjukt, om det är inaktiverat hoppar den direkt till målet STR_CONFIG_SETTING_MEASURE_TOOLTIP :Visa måtthjälptext vid användning av byggverktyg: {STRING} @@ -1495,7 +1510,7 @@ STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY :Produktionsför STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY_HELPTEXT :Visa nyhetstidning vid förändring av industriers produktionsnivåer för industrier som används av det egna företaget STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER :Produktionsförändring vid industri som motståndare betjänar: {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER_HELPTEXT :Visa nyhetstidning vid förändring av industriers produktionsnivåer för industrier som används av motståndare -STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :Andra produktionsförändringar vid industrier.: {STRING} +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :Andra produktionsförändringar vid industrier: {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :Visa nyhetstidning vid förändring av industriers produktionsnivåer för industrier som inte används av motståndare eller det egna företaget STR_CONFIG_SETTING_NEWS_ADVICE :Råd / information om företagets fordon: {STRING} STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Visa meddelande ifall att ett fordon behöver uppmärksamhet @@ -1550,7 +1565,7 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :3x3 rutnät STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Slumpmässig STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Städer tillåts bygga vägar: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Tillåt städer att bygga vägar för att kunna växa. Stäng av för att hindra städernas lokala myndigheter från att själva bygga vägar -STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Städer är tillåtna att bygga plankorsningar: {STRING} +STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Städer tillåts bygga plankorsningar: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Om denna inställning aktiveras så blir det tillåtet för städer att bygga plankorsningar STR_CONFIG_SETTING_NOISE_LEVEL :Tillåt stadskontrollerade bullernivåer för flygplatser: {STRING} STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Med denna inställning avstängd kan det finnas max två flygplatser i varje stad. Med inställningen påslagen begränsas antalet flygplatser i en stad istället av vilken bullernivå staden accepterar, vilket styrs av populationen, flygplatsens storlek och avstånd till staden @@ -2281,6 +2296,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Legend f STR_LINKGRAPH_LEGEND_ALL :{BLACK}Alla STR_LINKGRAPH_LEGEND_NONE :{BLACK}Inga STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Välj företag att visa +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}oanvänd @@ -2690,13 +2706,50 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD- STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD-teamet # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Bildfrekvens +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulationsfrekvens: {STRING} +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Antal spel-tick som simuleras per sekund. +STR_FRAMERATE_RATE_BLITTER :{BLACK}Bildfrekvens för grafik: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Antal bildrutor som återges per sekund. +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Spelets nuvarande hastighetsfaktor: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Hur snabbt spelet för närvarande körs, jämfört med förväntad hastighet vid normal simulationsfrekvens. +STR_FRAMERATE_CURRENT :{WHITE}Nuvarande +STR_FRAMERATE_AVERAGE :{WHITE}Genomsnittlig +STR_FRAMERATE_DATA_POINTS :{BLACK}Data baseras på {COMMA} mätvärden STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} bildrutor/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} bildrutor/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} bildrutor/s +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{BLACK}Totalt för spel-loopen: +STR_FRAMERATE_GL_ECONOMY :{BLACK} Godshantering: +STR_FRAMERATE_GL_TRAINS :{BLACK} Tåg-tick: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Vägfordons-tick: STR_FRAMERATE_GL_SHIPS :{BLACK} Skepps-tick: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Flygplans-tick: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Världs-tick: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Länkgrafens fördröjning: STR_FRAMERATE_DRAWING :{BLACK}Grafikåtergivning: +STR_FRAMERATE_VIDEO :{BLACK}Videoutmatning: +STR_FRAMERATE_SOUND :{BLACK}Ljudmixning: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Spel-loop +STR_FRAMETIME_CAPTION_GL_ECONOMY :Godshantering +STR_FRAMETIME_CAPTION_GL_TRAINS :Tåg-tick STR_FRAMETIME_CAPTION_GL_ROADVEHS :Vägfordons-tick +STR_FRAMETIME_CAPTION_GL_SHIPS :Skepps-tick +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Flygplans-tick +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Världs-tick +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Länkgrafens fördröjning +STR_FRAMETIME_CAPTION_DRAWING :Grafikåtergivning +STR_FRAMETIME_CAPTION_VIDEO :Videoutmatning +STR_FRAMETIME_CAPTION_SOUND :Ljudmixning ############ End of leave-in-this-order @@ -2722,11 +2775,12 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Speldeta STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Ingen information tillgänglig STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Sökfilter: STR_SAVELOAD_OSKTITLE :{BLACK}Mata in ett namn för detta sparade spel # World generation -STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}Generera Värld +STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}Generera värld STR_MAPGEN_MAPSIZE :{BLACK}Kartstorlek: STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Ange kartans storlek i rutor. Antalet tillgängliga rutor kommer att bli något lägre STR_MAPGEN_BY :{BLACK}* @@ -2737,8 +2791,8 @@ STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Maximal STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Öka maximal bergshöjd med ett STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Minska maximal bergshöjd med ett STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Snögränsens höjd: -STR_MAPGEN_SNOW_LINE_UP :{BLACK}Höj snögränsens höjd ett upp -STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Sänk snögränsens höjd ett ner +STR_MAPGEN_SNOW_LINE_UP :{BLACK}Höj snögränsens höjd ett steg +STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Sänk snögränsens höjd ett steg STR_MAPGEN_LAND_GENERATOR :{BLACK}Landgenerator: STR_MAPGEN_TREE_PLACER :{BLACK}Trädalgoritm: STR_MAPGEN_TERRAIN_TYPE :{BLACK}Terrängtyp: @@ -2776,7 +2830,7 @@ STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Generera STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Slumpat land STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Höjd av platt land: STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Sänk höjden av platt land ett ner -STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Öka höjden av platt land ett upp +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Öka höjden av platt land ett steg STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Ändra höjd av platt land @@ -2787,10 +2841,10 @@ STR_GENERATION_ABORT_CAPTION :{WHITE}Avbryt g STR_GENERATION_ABORT_MESSAGE :{YELLOW}Vill du verkligen avbryta genereringen? STR_GENERATION_PROGRESS :{WHITE}{NUM}% färdigt STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} -STR_GENERATION_WORLD_GENERATION :{BLACK}Generera Värld +STR_GENERATION_WORLD_GENERATION :{BLACK}Generera värld STR_GENERATION_RIVER_GENERATION :{BLACK}Generera Flod STR_GENERATION_TREE_GENERATION :{BLACK}Generera Träd -STR_GENERATION_OBJECT_GENERATION :{BLACK}Generera Objekt +STR_GENERATION_OBJECT_GENERATION :{BLACK}Generera objekt STR_GENERATION_CLEARING_TILES :{BLACK}Svår och stenig markgenerering STR_GENERATION_SETTINGUP_GAME :{BLACK}Ställer in spel STR_GENERATION_PREPARING_TILELOOP :{BLACK}Kör tile-loop @@ -2839,7 +2893,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Version: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. kompatibel version: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palett: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Standard (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Standard (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Äldre (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Äldre (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Paramerar: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Ingen STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Ingen information tillgänglig STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Matchande fil hittades ej @@ -2913,13 +2972,15 @@ STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :För många New STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Att ladda {1:STRING} som statisk NewGRF med {STRING} kan orsaka desynkronisering STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Oväntat spriteobjekt (spriteobjekt {3:NUM}) STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Okänd Action 0-egenskap {4:HEX} (spriteobjekt {3:NUM}) -STR_NEWGRF_ERROR_INVALID_ID :Försökt att använda ett ogiltligt ID (spriteobjekt {3:NUM}) +STR_NEWGRF_ERROR_INVALID_ID :Försök att använda ett ogiltligt ID (spriteobjekt {3:NUM}) STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} innehåller en skadad bild. Alla korrupta bilder kommer att visas som ett rött frågetecken (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Innehåller flera Action 8 (spriteobjekt {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Läste förbi slutet av pseudo-spriteobjekt (spriteobjekt {3:NUM}) STR_NEWGRF_ERROR_GRM_FAILED :Efterfrågade GRF-resurser är inte tillgängliga (spriteobjekt {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} har inaktiverats av {2:STRING} -STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Felaktig/okänd layout-format av spriteobjekt (spriteobjekt {3:NUM}) +STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Felaktigt/okänt layout-format av spriteobjekt (spriteobjekt {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :För många poster i listan med egenskapsvärden (spriteobjekt {3:NUM}, egenskap {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ogiltig industriproduktions-callback (spriteobjekt {3:NUM}, "{1:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Varning! @@ -2932,7 +2993,7 @@ STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}Kan inte STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}Kompatibel GRF laddad för saknade filer STR_NEWGRF_DISABLED_WARNING :{WHITE}Saknad GRF-fil har stängts av STR_NEWGRF_UNPAUSE_WARNING_TITLE :{YELLOW}Saknad(e) GRF-fil(er) -STR_NEWGRF_UNPAUSE_WARNING :{WHITE}Avpausning kan krascha OpenTTD. Skicka ej igen bugg-rapport för möjlig krasch.{}Är du säker att du vill avpausa? +STR_NEWGRF_UNPAUSE_WARNING :{WHITE}Avpausning kan krascha OpenTTD. Skicka ej bugg-rapporter för eventuella resulterande krascher.{}Är du säker på att du vill avpausa? # NewGRF status STR_NEWGRF_LIST_NONE :Inga @@ -2949,7 +3010,7 @@ STR_BROKEN_VEHICLE_LENGTH :{WHITE}Tåg '{V STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' ger felaktig information STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Last/återställnings information för '{1:ENGINE}' är skilld ifrån köp lista efter konstruktion. Detta kan leda till att utomatisk förnyelse/uppgradering misslyckas med att anpassa fordonen/vagnarna korrekt -STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' skapade en ändlös loop i en produktions-callback-funktion +STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' skapade en oändlig loop i en produktions-callback-funktion STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback-funktion {1:HEX} returnerade ett okänt/ogiltligt resultat {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs @@ -2984,6 +3045,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Mata in STR_TOWN_DIRECTORY_CAPTION :{WHITE}Städer STR_TOWN_DIRECTORY_NONE :{ORANGE}- Inga - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Stad){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Stadsnamn - klicka på ett namn för att centrera huvudvyn på staden. Ctrl+klick öppnar en ny vy över stadens läge STR_TOWN_POPULATION :{BLACK}Global folkmängd: {COMMA} @@ -2991,6 +3053,7 @@ STR_TOWN_POPULATION :{BLACK}Global f STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Stad) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Invånare: {ORANGE}{COMMA}{BLACK} Hus: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} förra månaden: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Fraktgods behövs för ortens tillväxt: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} krävs STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} krävs under vintern @@ -3237,7 +3300,7 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} flygplats{P "" er} STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Inga -STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Bygg Högkvarter +STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Bygg högkvarter STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Bygg företagets huvudkontor STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Visa högkvarter STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Vy av företagets huvudkontor @@ -3295,6 +3358,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrera STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktionsnivå: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrin har annonserat att den snart kommer att stänga! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Kräver: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Producerar: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Kräver: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} @@ -3304,7 +3370,7 @@ STR_CONFIG_GAME_PRODUCTION :{WHITE}Ändra p STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Ändra produktionsnivå (procent, upp till 800%) # Vehicle lists -STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} Tåg +STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} tåg STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} - {COMMA} Vägfordon STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} skepp STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} flygplan @@ -3325,17 +3391,17 @@ STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Se lista STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Behandlingslista STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Skicka instruktioner till alla fordon på denna lista STR_VEHICLE_LIST_REPLACE_VEHICLES :Byt ut fordon -STR_VEHICLE_LIST_SEND_FOR_SERVICING :Skicka till Service +STR_VEHICLE_LIST_SEND_FOR_SERVICING :Skicka på service -STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Skicka till Depå -STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Skicka till Depå -STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Skicka till Depå -STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Skicka till Hangar +STR_VEHICLE_LIST_SEND_TRAIN_TO_DEPOT :Skicka till depå +STR_VEHICLE_LIST_SEND_ROAD_VEHICLE_TO_DEPOT :Skicka till depå +STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Skicka till depå +STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Skicka till hangar STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Klicka för att stoppa alla fordon i listan STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Klicka för att starta alla fordon i listan -STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}Delade instruktioner med {COMMA} Fordon{P "" s} +STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}Delade instruktioner med {COMMA} fordon # Group window STR_GROUP_ALL_TRAINS :Alla tåg @@ -3395,6 +3461,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapacite STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Motoriserade vagnar: {GOLD}+{POWER}{BLACK} Vikt: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Anpassningsbar till: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Alla typer av last +STR_PURCHASE_INFO_NONE :Ingen STR_PURCHASE_INFO_ALL_BUT :Allt utom {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Maximal Dragkraft: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Räckvidd: {GOLD}{COMMA} rutor @@ -3406,7 +3473,7 @@ STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Skeppsli STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Flygplanslista. Klicka på flygplan för information. Ctrl+klick visar eller döljer flygplanstypen STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Köp fordon -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Köp Fordon +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Köp fordon STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Köp skepp STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Köp flygplan @@ -3708,7 +3775,7 @@ STR_VEHICLE_DETAIL_TAB_INFORMATION :{BLACK}Informat STR_VEHICLE_DETAILS_TRAIN_INFORMATION_TOOLTIP :{BLACK}Visa detaljer för tågfordon STR_VEHICLE_DETAIL_TAB_CAPACITIES :{BLACK}Kapaciteter STR_VEHICLE_DETAILS_TRAIN_CAPACITIES_TOOLTIP :{BLACK}Visa kapaciteter för varje fordon -STR_VEHICLE_DETAIL_TAB_TOTAL_CARGO :{BLACK}Gods Totalt +STR_VEHICLE_DETAIL_TAB_TOTAL_CARGO :{BLACK}Gods totalt STR_VEHICLE_DETAILS_TRAIN_TOTAL_CARGO_TOOLTIP :{BLACK}Visa tågets totala kapacitet, separera för typ av gods STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}Kapacitet: {LTBLUE} @@ -3772,7 +3839,7 @@ STR_ORDER_DROP_NO_UNLOADING :Ej avlastning STR_ORDER_TOOLTIP_UNLOAD :{BLACK}Ändra avlastningsbeteende för markerad order STR_ORDER_REFIT :{BLACK}Anpassa -STR_ORDER_REFIT_TOOLTIP :{BLACK}Välj vilken godstyp anpassningen ska göras i denna order. Ctrl-klick för att ta bort anpassningsordern +STR_ORDER_REFIT_TOOLTIP :{BLACK}Välj vilken godstyp anpassningen ska göras till i denna order. Ctrl-klick för att ta bort anpassningsordern STR_ORDER_REFIT_AUTO :{BLACK}Auto-anpassning vid station STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Välj vilket lasttyp att auto-anpassa till i den här ordningen. Ctrl+klicka för att ta bort anpassningsinstruktionen. Auto-anpassning vid stationer kommer enbart att utföras om fordonet tillåter det STR_ORDER_DROP_REFIT_AUTO :Fast lasttyp @@ -3794,6 +3861,7 @@ STR_ORDER_CONDITIONAL_AGE :Ålder (år) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Behöver service STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Alltid STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Återstående livstid (år) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maximal tillförlitlighet STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Hur man jämför fordonsdata med givet värde STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :samma som @@ -3817,7 +3885,7 @@ STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Ta bort STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}Sluta dela STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Sluta dela orderlistan. Ctrl+Klick tar även bort alla order för det här fordonet -STR_ORDERS_GO_TO_BUTTON :{BLACK}Åk Till +STR_ORDERS_GO_TO_BUTTON :{BLACK}Åk till STR_ORDER_GO_TO_NEAREST_DEPOT :Åk till närmsta depå STR_ORDER_GO_TO_NEAREST_HANGAR :Åk till närmsta hangar STR_ORDER_CONDITIONAL :Villkorat order-hopp @@ -3912,7 +3980,7 @@ STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(resor för {ST STR_TIMETABLE_STAY_FOR :och stanna i {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :och res i {STRING} STR_TIMETABLE_DAYS :{COMMA}{NBSP}dag{P "" ar} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}tick{P "" s} +STR_TIMETABLE_TICKS :{COMMA}{NBSP}tick STR_TIMETABLE_TOTAL_TIME :{BLACK}Den här tidtabellen kommer ta {STRING} att slutföra STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Denna tidtabell kommer att ta åtminstonde {STRING} att slutföra (allt är inte inlagt i en tidtabell) @@ -3926,7 +3994,7 @@ STR_TIMETABLE_STATUS_START_AT :{BLACK}Den här STR_TIMETABLE_STARTING_DATE :{BLACK}Startdatum STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Välj ett datum som startpunkt för den här tidtabellen. Om tidtabellen är fullt tidssatt så innebär Ctrl+klick att startpunkten sätts för denna tidtabell och att startpunkten för övriga fordon som delar dessa order fördelas ut jämt baserat på deras relativa ordning -STR_TIMETABLE_CHANGE_TIME :{BLACK}Ändra Tid +STR_TIMETABLE_CHANGE_TIME :{BLACK}Ändra tid STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Ändra hur lång tid den markerade ordern bör ta STR_TIMETABLE_CLEAR_TIME :{BLACK}Rensa tid @@ -3982,7 +4050,7 @@ STR_AI_GAME_SCRIPT :{BLACK}Spelskri STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Visa debug-utskrifter för spelskript STR_ERROR_AI_NO_AI_FOUND :Ingen passande datorspelare hittades.{}Denna datorspelare är en test-datorspelare och kommer inte göra någonting.{}Du kan ladda ner nya datorspelare genom spelets 'Online-innehåll'-system -STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Ett av scripten som körs har krachat. Vänligen raportera detta till datorspelarens skapare med en skärmdump på förstret 'Felsökning av datorspelare / spelskript' +STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Ett av skripten som körs har kraschat. Vänligen rapportera detta till datorspelarens skapare med en skärmdump av förstret 'Felsökning av datorspelare / spelskript' STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Felsökning av datorspelare / spelskript är bara tillgänglig för servern # AI configuration window @@ -4226,6 +4294,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... dett STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... vägen pekar i fel riktning STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... genomfartshållplatser kan inte ha gatuhörn STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... genomfartshållplatser kan inte ha korsningar +STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... vägen är enkelriktad eller blockerad # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Kan ej ta bort del av station... @@ -4470,13 +4539,15 @@ STR_ERROR_CAN_T_DELETE_SIGN :{WHITE}Kan inte STR_DESKTOP_SHORTCUT_COMMENT :Ett simuleringsspel baserat på Transport Tycoon Deluxe # Translatable descriptions in media/baseset/*.ob* files -STR_BASEGRAPHICS_DOS_DESCRIPTION :Originalgrafiken från Transport Tycoon Deluxe, DOS-utgåvan. -STR_BASEGRAPHICS_DOS_DE_DESCRIPTION :Originalgrafiken från Transport Tycoon Deluxe, DOS-utgåvan (tyska). -STR_BASEGRAPHICS_WIN_DESCRIPTION :Originalgrafiken från Transport Tycoon Deluxe, Windows-utgåvan. -STR_BASESOUNDS_DOS_DESCRIPTION :Originalljuden från Transport Tycoon Deluxe, DOS-utgåvan. -STR_BASESOUNDS_WIN_DESCRIPTION :Originalljuden från Transport Tycoon Deluxe, Windows-utgåvan. +STR_BASEGRAPHICS_DOS_DESCRIPTION :Originalgrafiken från DOS-utgåvan av Transport Tycoon Deluxe. +STR_BASEGRAPHICS_DOS_DE_DESCRIPTION :Originalgrafiken från den tyska DOS-utgåvan av Transport Tycoon Deluxe. +STR_BASEGRAPHICS_WIN_DESCRIPTION :Originalgrafiken från Windows-utgåvan av Transport Tycoon Deluxe. +STR_BASESOUNDS_DOS_DESCRIPTION :Originalljuden från DOS-utgåvan av Transport Tycoon Deluxe. +STR_BASESOUNDS_WIN_DESCRIPTION :Originalljuden från Windows-utgåvan av Transport Tycoon Deluxe. STR_BASESOUNDS_NONE_DESCRIPTION :Ett ljudpaket utan några ljud. -STR_BASEMUSIC_WIN_DESCRIPTION :Originalmusiken från Transport Tycoon Deluxe, Windows-utgåvan. +STR_BASEMUSIC_WIN_DESCRIPTION :Originalmusiken från Windows-utgåvan av Transport Tycoon Deluxe. +STR_BASEMUSIC_DOS_DESCRIPTION :Originalmusiken från DOS-utgåvan av Transport Tycoon Deluxe. +STR_BASEMUSIC_TTO_DESCRIPTION :Originalmusiken från DOS-utgåvan av Transport Tycoon (Original/World Editor). STR_BASEMUSIC_NONE_DESCRIPTION :Ett musikpaket utan någon musik. ##id 0x2000 @@ -4494,11 +4565,11 @@ STR_TOWN_BUILDING_NAME_PARK_1 :Park STR_TOWN_BUILDING_NAME_OFFICE_BLOCK_2 :Kontorslokaler STR_TOWN_BUILDING_NAME_SHOPS_AND_OFFICES_1 :Affärer och kontor STR_TOWN_BUILDING_NAME_MODERN_OFFICE_BUILDING_1 :Modern kontorsbyggnad -STR_TOWN_BUILDING_NAME_WAREHOUSE_1 :Varuhus +STR_TOWN_BUILDING_NAME_WAREHOUSE_1 :Lagerbyggnad STR_TOWN_BUILDING_NAME_OFFICE_BLOCK_3 :Kontorsbyggnad STR_TOWN_BUILDING_NAME_STADIUM_1 :Arena STR_TOWN_BUILDING_NAME_OLD_HOUSES_1 :Gamla hus -STR_TOWN_BUILDING_NAME_COTTAGES_1 :Stuga +STR_TOWN_BUILDING_NAME_COTTAGES_1 :Stugor STR_TOWN_BUILDING_NAME_HOUSES_1 :Hus STR_TOWN_BUILDING_NAME_FLATS_1 :Lägenheter STR_TOWN_BUILDING_NAME_TALL_OFFICE_BLOCK_2 :Hög kontorsbyggnad @@ -4512,7 +4583,7 @@ STR_TOWN_BUILDING_NAME_CINEMA_1 :Biograf STR_TOWN_BUILDING_NAME_SHOPPING_MALL_1 :Shoppingcenter STR_TOWN_BUILDING_NAME_IGLOO_1 :Igloo STR_TOWN_BUILDING_NAME_TEPEES_1 :Kåtor -STR_TOWN_BUILDING_NAME_TEAPOT_HOUSE_1 :Tekanne-Hus +STR_TOWN_BUILDING_NAME_TEAPOT_HOUSE_1 :Tekanne-hus STR_TOWN_BUILDING_NAME_PIGGY_BANK_1 :Spargris ##id 0x4800 @@ -4570,29 +4641,29 @@ STR_SV_STNAME_NORTH :Norra {STRING} STR_SV_STNAME_SOUTH :Södra {STRING} STR_SV_STNAME_EAST :Östra {STRING} STR_SV_STNAME_WEST :Västra {STRING} -STR_SV_STNAME_CENTRAL :{STRING} Centralstation -STR_SV_STNAME_TRANSFER :{STRING} Övergång +STR_SV_STNAME_CENTRAL :{STRING} centralstation +STR_SV_STNAME_TRANSFER :{STRING} övergång STR_SV_STNAME_HALT :{STRING} hållplats -STR_SV_STNAME_VALLEY :{STRING} Dal +STR_SV_STNAME_VALLEY :{STRING} dal STR_SV_STNAME_HEIGHTS :{STRING} Höjder -STR_SV_STNAME_WOODS :{STRING} Skog -STR_SV_STNAME_LAKESIDE :{STRING} Sjöstrand +STR_SV_STNAME_WOODS :{STRING} skog +STR_SV_STNAME_LAKESIDE :{STRING} sjöstrand STR_SV_STNAME_EXCHANGE :{STRING} Växel -STR_SV_STNAME_AIRPORT :{STRING} Flygplats -STR_SV_STNAME_OILFIELD :{STRING} Oljefält -STR_SV_STNAME_MINES :{STRING} Gruva -STR_SV_STNAME_DOCKS :{STRING} Kaj +STR_SV_STNAME_AIRPORT :{STRING} flygplats +STR_SV_STNAME_OILFIELD :{STRING} oljefält +STR_SV_STNAME_MINES :{STRING} gruva +STR_SV_STNAME_DOCKS :{STRING} hamn STR_SV_STNAME_BUOY :{STRING} STR_SV_STNAME_WAYPOINT :{STRING} ##id 0x6020 -STR_SV_STNAME_ANNEXE :{STRING} Tillbyggnad -STR_SV_STNAME_SIDINGS :{STRING} Förort -STR_SV_STNAME_BRANCH :{STRING} Förgrening +STR_SV_STNAME_ANNEXE :{STRING} tillbyggnad +STR_SV_STNAME_SIDINGS :{STRING} förort +STR_SV_STNAME_BRANCH :{STRING} förgrening STR_SV_STNAME_UPPER :Övre {STRING} STR_SV_STNAME_LOWER :Nedre {STRING} -STR_SV_STNAME_HELIPORT :{STRING} Helikopterplats -STR_SV_STNAME_FOREST :{STRING} Skog -STR_SV_STNAME_FALLBACK :{STRING} Station #{NUM} +STR_SV_STNAME_HELIPORT :{STRING} helikopterplats +STR_SV_STNAME_FOREST :{STRING} skog +STR_SV_STNAME_FALLBACK :{STRING} station #{NUM} ############ end of savegame specific region! ##id 0x8000 From ba38a7ca652c00a1d0851f4d97f0b7d360df853c Mon Sep 17 00:00:00 2001 From: glx Date: Wed, 30 Jan 2019 22:28:07 +0100 Subject: [PATCH 269/622] Fix: don't show OS error box for non GUI video drivers --- src/openttd.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/openttd.cpp b/src/openttd.cpp index 65374f439f..585bcd4274 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -117,7 +117,9 @@ void CDECL error(const char *s, ...) vseprintf(buf, lastof(buf), s, va); va_end(va); - ShowOSErrorBox(buf, true); + if (VideoDriver::GetInstance() == NULL || VideoDriver::GetInstance()->HasGUI()) { + ShowOSErrorBox(buf, true); + } /* Set the error message for the crash log and then invoke it. */ CrashLog::SetErrorMessage(buf); From 23960d0f2c82a634e0ca1be720c229ac22f14962 Mon Sep 17 00:00:00 2001 From: PeterN Date: Thu, 31 Jan 2019 13:57:44 +0000 Subject: [PATCH 270/622] Feature: Group liveries, and livery window usability enhancements. (#7108) * Change: Replace checkbox in livery selection window with Default option in drop down selection. This reduces clutter in the UI and allows for primary/secondary colours to independently follow the default scheme if desired. * Feature: Add vehicle group liveries. --- bin/baseset/openttd.grf | Bin 501534 -> 502521 bytes media/extra_grf/openttd.nfo | 2 + media/extra_grf/openttdgui.nfo | 6 +- media/extra_grf/openttdgui_group_livery.png | Bin 0 -> 1426 bytes src/command.cpp | 2 + src/command_type.h | 1 + src/company_cmd.cpp | 98 ++--- src/company_gui.cpp | 417 +++++++++++++++----- src/company_gui.h | 2 + src/gfx_type.h | 2 +- src/group.h | 2 + src/group_cmd.cpp | 104 +++++ src/group_gui.cpp | 9 + src/lang/english.txt | 2 + src/livery.h | 6 +- src/saveload/company_sl.cpp | 11 +- src/saveload/group_sl.cpp | 10 + src/saveload/saveload.cpp | 3 +- src/script/api/script_window.hpp | 6 + src/settings.cpp | 2 +- src/table/sprites.h | 7 +- src/vehicle.cpp | 24 +- src/widgets/company_widget.h | 5 + src/widgets/group_widget.h | 1 + 24 files changed, 573 insertions(+), 149 deletions(-) create mode 100644 media/extra_grf/openttdgui_group_livery.png diff --git a/bin/baseset/openttd.grf b/bin/baseset/openttd.grf index 6c9afef2abe232b629d5d3241d3da59aa7dfb350..ea5f55ce1dcb859d86f74620b4869a07158a1f9a 100644 GIT binary patch delta 1015 zcmY+@ONbmr7zgnAs_WH{-N1IYL=tj|n2v)4K~GzZONKpoOQR^h;>_%@IY=&EJc)#4 zl-%Me<3)@UAqNk$>`t~ls3XEo%`0gLLLDpUq2}b~=qXmuBkI?uYP$LQ$N%5oJUH|B z?`JSBJ)K^|EetJ;TG(k}+{2`M8TJo*m&t1%aSCg`9CCI0$xq~Bz%e4se9-@ld;IYA zpUKl#Ztwj;qR-_?B8tggKma-<+uPgKYCmS+G61oy5*ZWl3Gq!xrW0{uy*Rs+xaJ(0 zjKzA8pT_{4WSfo>h-#DGzBy)&t3*FPEPM!)FuCs_e^9VOLTF^^<}gqM~HD%&*x;FsL<|NdUKKgN1LsvN0wShK{bBMQzS=9 z!X%FzxZX1N`O%;lIaCQQ!HqbJ&~PLp`_#_r=2Llq}}dBHV5Wfr;q?n#C0OBHMn9VJ-MywCe%mt7z?# zfU*99d4+)IG0?9*3pR9Y*7iJ)Rwjsfx@14{{-&u#P`3Z8tJyTUvsVLs&PORVl>|a?rP- ze!B?xRn~?|T&7Rhuo@{xX$<+^Of3)mlx{r1M}lmnBgAz!`o_}yE{of}_Pj>%!=nCkog03SGR Ad;kCd delta 80 zcmV-W0I&b~)gGSC9s~pc|H**_g#-bG1OkNw1BC_-1RQ_> diff --git a/media/extra_grf/openttd.nfo b/media/extra_grf/openttd.nfo index 7ece5c7149..460007d68e 100644 --- a/media/extra_grf/openttd.nfo +++ b/media/extra_grf/openttd.nfo @@ -14,6 +14,8 @@ // allowing it to be used. // +//@@WARNING DISABLE 60 + // // Number of sprites, it is wrong, but GRFcodec automagically gets it right. // diff --git a/media/extra_grf/openttdgui.nfo b/media/extra_grf/openttdgui.nfo index 1b17b8651b..d0fbba0e70 100644 --- a/media/extra_grf/openttdgui.nfo +++ b/media/extra_grf/openttdgui.nfo @@ -7,7 +7,7 @@ // See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . // -1 * 0 0C "OpenTTD GUI graphics" - -1 * 3 05 15 \b 175 // OPENTTD_SPRITE_COUNT + -1 * 3 05 15 \b 179 // OPENTTD_SPRITE_COUNT -1 sprites/openttdgui.png 8bpp 66 8 64 31 -31 7 normal -1 sprites/openttdgui.png 8bpp 146 8 64 31 -31 7 normal -1 sprites/openttdgui.png 8bpp 226 8 64 31 -31 7 normal @@ -183,3 +183,7 @@ -1 sprites/openttdgui.png 8bpp 440 440 20 20 0 0 normal -1 sprites/openttdgui.png 8bpp 466 440 20 20 0 0 normal -1 sprites/openttdgui.png 8bpp 490 440 20 20 0 0 normal + -1 sprites/openttdgui_group_livery.png 8bpp 0 0 20 20 0 0 normal + -1 sprites/openttdgui_group_livery.png 8bpp 21 0 20 20 0 0 normal + -1 sprites/openttdgui_group_livery.png 8bpp 42 0 20 20 0 0 normal + -1 sprites/openttdgui_group_livery.png 8bpp 63 0 20 20 0 0 normal diff --git a/media/extra_grf/openttdgui_group_livery.png b/media/extra_grf/openttdgui_group_livery.png new file mode 100644 index 0000000000000000000000000000000000000000..f45be670cb764012f3262295f526d2ddde0a3ae8 GIT binary patch literal 1426 zcmWkse{hR;9RAR(4T6~5EoZq2tuEFe^qsyc<3+l?)zsb*ym~oa_8zgtEhZ*M#@kAH zxr}hJm1ZQwU3Rj{9FZ@6H_x!kf?)l^Sb%jGJSiXaGzqF9zSo6RPvU@pwl^2SNx_lNzm_W=zIR#a`ob`vbvnv^Akp3JA4`(n=V;%wi#&PBsv* zMWa4aDWKI71EsVY$QqkI=(fZ{&hA8j00Au!o5XTnj=6DdNN0>1tO=VV9&z`u$C@ zSW+P|5lRP5_zl{yg-+TH$jzgW4}sJOc{ae@Kn8({Ni7N7(LwtPj>1t_3GVHU+}gi>0RXOLi4nZ~Zr zdvQyMtckP!q~3)Y1B5lAbtLu4ZWKxNolc}|p*UUR?}qLd@S+ELdZD)u`d-4ze&~M% zuMnWu@Ol6S(va3lg+`^+L1F=;?vMRjGZT>xkO7btkQ0y}P#B2Jn*mfRAPAr+NT)%r zG3AkFh1Q~^tSTKxvJTefi+3Z2^J*A-I-PD_TIK9CK-T zNzUCt!^OGpJu04(4={K_sb-E2Z$5sY?8`fZXvd`O?d6*;`X5YRPL=$0B$r#ie&4~L zv$m{R0QzysrTgEWx^TAfcHRl$(A_7!joYr&^G83v)Ad0l_gL~EH?_KRSw8G^tvmZ? zOa7+^e{d`kW*;tGIj(Zf?}9OHZQJ=-{!2n~|GfDJZfL8@E_zCeOR-aREnEHktboq5 zx_C!j#q2ppWyQ5?PZ9Cyx35}Ss(TKJRz0{%Kh5Q@lqFk7EXx0S-m?1oLv!1PVO3c9 zxWk?W-{tZou{-Nh)<6S0_Nix6;83o#a^c`5iws_R&$Ne+1`n5P3psDUs_lK4U0gZe zGpMk#qM$qMX}FspiW)W*w~sW7s>h!g%~!S;;v&i8qQ@=8Gph>Dwl{7T*6C-QcxT6} z8(*Ewk!Dxi8`$^qeseqV^i1`-R*XHPoD{-4&K0$G{=;W)PCVIjX`gMwiV=)+3v;kfziGkb-8azp;PR9o%xMB8M%x*+v@ zR@Lg8%#p=6u#GoeH4}y$|ModP>aBlA9~(dV*LPjx{^}jIrQ9(w$gVBi`G$|3ws*}g zI6r&Nt#7jHAL)PGd;ZuA+voW5M#r@^UCIYJe~+oGzc}*z-a(1Y+aLBnX&kG*J@(qj iQ*W-Ag1#8ogmUI}jk>V7W&7dGhoH1%fu?RQQ}rJlivery[scheme].in_use = false; + c->livery[scheme].in_use = 0; c->livery[scheme].colour1 = c->colour; c->livery[scheme].colour2 = c->colour; } + + Group *g; + FOR_ALL_GROUPS(g) { + if (g->owner == c->index) { + g->livery.in_use = 0; + g->livery.colour1 = c->colour; + g->livery.colour2 = c->colour; + } + } } /** @@ -946,23 +955,26 @@ CommandCost CmdSetCompanyManagerFace(TileIndex tile, DoCommandFlag flags, uint32 * @param flags operation to perform * @param p1 bitstuffed: * p1 bits 0-7 scheme to set - * p1 bits 8-9 set in use state or first/second colour + * p1 bit 8 set first/second colour * @param p2 new colour for vehicles, property, etc. * @param text unused * @return the cost of this operation or an error */ CommandCost CmdSetCompanyColour(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) { - Colours colour = Extract(p2); + Colours colour = Extract(p2); LiveryScheme scheme = Extract(p1); - byte state = GB(p1, 8, 2); + bool second = HasBit(p1, 8); - if (scheme >= LS_END || state >= 3 || colour == INVALID_COLOUR) return CMD_ERROR; + if (scheme >= LS_END || (colour >= COLOUR_END && colour != INVALID_COLOUR)) return CMD_ERROR; + + /* Default scheme can't be reset to invalid. */ + if (scheme == LS_DEFAULT && colour == INVALID_COLOUR) return CMD_ERROR; Company *c = Company::Get(_current_company); /* Ensure no two companies have the same primary colour */ - if (scheme == LS_DEFAULT && state == 0) { + if (scheme == LS_DEFAULT && !second) { const Company *cc; FOR_ALL_COMPANIES(cc) { if (cc != c && cc->colour == colour) return CMD_ERROR; @@ -970,52 +982,48 @@ CommandCost CmdSetCompanyColour(TileIndex tile, DoCommandFlag flags, uint32 p1, } if (flags & DC_EXEC) { - switch (state) { - case 0: - c->livery[scheme].colour1 = colour; + if (!second) { + if (scheme != LS_DEFAULT) SB(c->livery[scheme].in_use, 0, 1, colour != INVALID_COLOUR); + if (colour == INVALID_COLOUR) colour = (Colours)c->livery[LS_DEFAULT].colour1; + c->livery[scheme].colour1 = colour; - /* If setting the first colour of the default scheme, adjust the - * original and cached company colours too. */ - if (scheme == LS_DEFAULT) { - _company_colours[_current_company] = colour; - c->colour = colour; - CompanyAdminUpdate(c); + /* If setting the first colour of the default scheme, adjust the + * original and cached company colours too. */ + if (scheme == LS_DEFAULT) { + for (int i = 1; i < LS_END; i++) { + if (!HasBit(c->livery[i].in_use, 0)) c->livery[i].colour1 = colour; } - break; + _company_colours[_current_company] = colour; + c->colour = colour; + CompanyAdminUpdate(c); + } + } else { + if (scheme != LS_DEFAULT) SB(c->livery[scheme].in_use, 1, 1, colour != INVALID_COLOUR); + if (colour == INVALID_COLOUR) colour = (Colours)c->livery[LS_DEFAULT].colour2; + c->livery[scheme].colour2 = colour; - case 1: - c->livery[scheme].colour2 = colour; - break; + if (scheme == LS_DEFAULT) { + for (int i = 1; i < LS_END; i++) { + if (!HasBit(c->livery[i].in_use, 1)) c->livery[i].colour2 = colour; + } + } + } - case 2: - c->livery[scheme].in_use = colour != 0; - - /* Now handle setting the default scheme's in_use flag. - * This is different to the other schemes, as it signifies if any - * scheme is active at all. If this flag is not set, then no - * processing of vehicle types occurs at all, and only the default - * colours will be used. */ - - /* If enabling a scheme, set the default scheme to be in use too */ - if (colour != 0) { - c->livery[LS_DEFAULT].in_use = true; + if (c->livery[scheme].in_use != 0) { + /* If enabling a scheme, set the default scheme to be in use too */ + c->livery[LS_DEFAULT].in_use = 1; + } else { + /* Else loop through all schemes to see if any are left enabled. + * If not, disable the default scheme too. */ + c->livery[LS_DEFAULT].in_use = 0; + for (scheme = LS_DEFAULT; scheme < LS_END; scheme++) { + if (c->livery[scheme].in_use != 0) { + c->livery[LS_DEFAULT].in_use = 1; break; } - - /* Else loop through all schemes to see if any are left enabled. - * If not, disable the default scheme too. */ - c->livery[LS_DEFAULT].in_use = false; - for (scheme = LS_DEFAULT; scheme < LS_END; scheme++) { - if (c->livery[scheme].in_use) { - c->livery[LS_DEFAULT].in_use = true; - break; - } - } - break; - - default: - break; + } } + ResetVehicleColourMap(); MarkWholeScreenDirty(); diff --git a/src/company_gui.cpp b/src/company_gui.cpp index dcf1f3695d..ae7c8d6c63 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -36,6 +36,7 @@ #include "water.h" #include "station_func.h" #include "zoom_func.h" +#include "sortlist_type.h" #include "widgets/company_widget.h" @@ -522,7 +523,7 @@ public: StringID String() const { - return _colour_dropdown[this->result]; + return this->result >= COLOUR_END ? STR_COLOUR_DEFAULT : _colour_dropdown[this->result]; } uint Height(uint width) const @@ -541,7 +542,7 @@ public: int height = bottom - top; int icon_y_offset = height / 2; int text_y_offset = (height - FONT_HEIGHT_NORMAL) / 2 + 1; - DrawSprite(SPR_VEH_BUS_SIDE_VIEW, PALETTE_RECOLOUR_START + this->result, + DrawSprite(SPR_VEH_BUS_SIDE_VIEW, PALETTE_RECOLOUR_START + (this->result % COLOUR_END), rtl ? right - 2 - ScaleGUITrad(14) : left + ScaleGUITrad(14) + 2, top + icon_y_offset); DrawString(rtl ? left + 2 : left + ScaleGUITrad(28) + 4, @@ -550,60 +551,200 @@ public: } }; +static const int LEVEL_WIDTH = 10; ///< Indenting width of a sub-group in pixels + +typedef GUIList GUIGroupList; + /** Company livery colour scheme window. */ struct SelectCompanyLiveryWindow : public Window { private: uint32 sel; LiveryClass livery_class; Dimension square; - Dimension box; + uint livery_height; uint line_height; + GUIGroupList groups; + SmallVector indents; + Scrollbar *vscroll; void ShowColourDropDownMenu(uint32 widget) { uint32 used_colours = 0; - const Livery *livery; - LiveryScheme scheme; + const Company *c; + const Livery *livery, *default_livery = NULL; + bool primary = widget == WID_SCL_PRI_COL_DROPDOWN; + byte default_col; /* Disallow other company colours for the primary colour */ - if (HasBit(this->sel, LS_DEFAULT) && widget == WID_SCL_PRI_COL_DROPDOWN) { - const Company *c; + if (this->livery_class < LC_GROUP_RAIL && HasBit(this->sel, LS_DEFAULT) && primary) { FOR_ALL_COMPANIES(c) { if (c->index != _local_company) SetBit(used_colours, c->colour); } } - /* Get the first selected livery to use as the default dropdown item */ - for (scheme = LS_BEGIN; scheme < LS_END; scheme++) { - if (HasBit(this->sel, scheme)) break; + c = Company::Get((CompanyID)this->window_number); + + if (this->livery_class < LC_GROUP_RAIL) { + /* Get the first selected livery to use as the default dropdown item */ + LiveryScheme scheme; + for (scheme = LS_BEGIN; scheme < LS_END; scheme++) { + if (HasBit(this->sel, scheme)) break; + } + if (scheme == LS_END) scheme = LS_DEFAULT; + livery = &c->livery[scheme]; + if (scheme != LS_DEFAULT) default_livery = &c->livery[LS_DEFAULT]; + } else { + const Group *g = Group::Get(this->sel); + livery = &g->livery; + if (g->parent == INVALID_GROUP) { + default_livery = &c->livery[LS_DEFAULT]; + } else { + const Group *pg = Group::Get(g->parent); + default_livery = &pg->livery; + } } - if (scheme == LS_END) scheme = LS_DEFAULT; - livery = &Company::Get((CompanyID)this->window_number)->livery[scheme]; DropDownList *list = new DropDownList(); + if (default_livery != NULL) { + /* Add COLOUR_END to put the colour out of range, but also allow us to show what the default is */ + default_col = (primary ? default_livery->colour1 : default_livery->colour2) + COLOUR_END; + *list->Append() = new DropDownListColourItem(default_col, false); + } for (uint i = 0; i < lengthof(_colour_dropdown); i++) { *list->Append() = new DropDownListColourItem(i, HasBit(used_colours, i)); } - ShowDropDownList(this, list, widget == WID_SCL_PRI_COL_DROPDOWN ? livery->colour1 : livery->colour2, widget); + byte sel = (default_livery == NULL || HasBit(livery->in_use, primary ? 0 : 1)) ? (primary ? livery->colour1 : livery->colour2) : default_col; + ShowDropDownList(this, list, sel, widget); + } + + static int CDECL GroupNameSorter(const Group * const *a, const Group * const *b) + { + static const Group *last_group[2] = { NULL, NULL }; + static char last_name[2][64] = { "", "" }; + + if (*a != last_group[0]) { + last_group[0] = *a; + SetDParam(0, (*a)->index); + GetString(last_name[0], STR_GROUP_NAME, lastof(last_name[0])); + } + + if (*b != last_group[1]) { + last_group[1] = *b; + SetDParam(0, (*b)->index); + GetString(last_name[1], STR_GROUP_NAME, lastof(last_name[1])); + } + + int r = strnatcmp(last_name[0], last_name[1]); // Sort by name (natural sorting). + if (r == 0) return (*a)->index - (*b)->index; + return r; + } + + void AddChildren(GUIGroupList *source, GroupID parent, int indent) + { + for (const Group **g = source->Begin(); g != source->End(); g++) { + if ((*g)->parent != parent) continue; + *this->groups.Append() = *g; + *this->indents.Append() = indent; + AddChildren(source, (*g)->index, indent + 1); + } + } + + void BuildGroupList(CompanyID owner) + { + if (!this->groups.NeedRebuild()) return; + + this->groups.Clear(); + this->indents.Clear(); + + if (this->livery_class >= LC_GROUP_RAIL) { + GUIGroupList list; + VehicleType vtype = (VehicleType)(this->livery_class - LC_GROUP_RAIL); + + const Group *g; + FOR_ALL_GROUPS(g) { + if (g->owner == owner && g->vehicle_type == vtype) { + *list.Append() = g; + } + } + + list.ForceResort(); + list.Sort(&GroupNameSorter); + + AddChildren(&list, INVALID_GROUP, 0); + } + + this->groups.Compact(); + this->groups.RebuildDone(); + } + + void SetLiveryHeight() + { + if (this->livery_class < LC_GROUP_RAIL) { + this->livery_height = 0; + for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) { + if (_livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme)) { + this->livery_height++; + } + } + } else { + this->livery_height = this->groups.Length(); + } + + this->vscroll->SetCount(this->livery_height); } public: - SelectCompanyLiveryWindow(WindowDesc *desc, CompanyID company) : Window(desc) + SelectCompanyLiveryWindow(WindowDesc *desc, CompanyID company, GroupID group) : Window(desc) { - this->livery_class = LC_OTHER; - this->sel = 1; + this->CreateNestedTree(); + this->vscroll = this->GetScrollbar(WID_SCL_MATRIX_SCROLLBAR); this->square = GetSpriteSize(SPR_SQUARE); - this->box = maxdim(GetSpriteSize(SPR_BOX_CHECKED), GetSpriteSize(SPR_BOX_EMPTY)); - this->line_height = max(max(this->square.height, this->box.height), (uint)FONT_HEIGHT_NORMAL) + 4; + this->line_height = max(this->square.height, (uint)FONT_HEIGHT_NORMAL) + 4; - this->InitNested(company); + if (group == INVALID_GROUP) { + this->livery_class = LC_OTHER; + this->sel = 1; + this->LowerWidget(WID_SCL_CLASS_GENERAL); + this->BuildGroupList(company); + this->SetLiveryHeight(); + } else { + this->SetSelectedGroup(group); + } + + this->FinishInitNested(company); this->owner = company; - this->LowerWidget(WID_SCL_CLASS_GENERAL); this->InvalidateData(1); } + void SetSelectedGroup(GroupID group) + { + this->RaiseWidget(this->livery_class + WID_SCL_CLASS_GENERAL); + const Group *g = Group::Get(group); + switch (g->vehicle_type) { + case VEH_TRAIN: this->livery_class = LC_GROUP_RAIL; break; + case VEH_ROAD: this->livery_class = LC_GROUP_ROAD; break; + case VEH_SHIP: this->livery_class = LC_GROUP_SHIP; break; + case VEH_AIRCRAFT: this->livery_class = LC_GROUP_AIRCRAFT; break; + default: NOT_REACHED(); + } + this->sel = group; + this->LowerWidget(this->livery_class + WID_SCL_CLASS_GENERAL); + + this->groups.ForceRebuild(); + this->BuildGroupList((CompanyID)this->window_number); + this->SetLiveryHeight(); + + /* Position scrollbar to selected group */ + for (uint i = 0; i < this->livery_height; i++) { + if (this->groups[i]->index == sel) { + this->vscroll->SetPosition(Clamp(i - this->vscroll->GetCapacity() / 2, 0, max(this->vscroll->GetCount() - this->vscroll->GetCapacity(), 0))); + break; + } + } + } + virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) { switch (widget) { @@ -613,19 +754,25 @@ public: for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) { d = maxdim(d, GetStringBoundingBox(STR_LIVERY_DEFAULT + scheme)); } - size->width = max(size->width, 5 + this->box.width + d.width + WD_FRAMERECT_RIGHT); + + /* And group names */ + const Group *g; + FOR_ALL_GROUPS(g) { + if (g->owner == (CompanyID)this->window_number) { + SetDParam(0, g->index); + d = maxdim(d, GetStringBoundingBox(STR_GROUP_NAME)); + } + } + + size->width = max(size->width, 5 + d.width + WD_FRAMERECT_RIGHT); break; } case WID_SCL_MATRIX: { - uint livery_height = 0; - for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) { - if (_livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme)) { - livery_height++; - } - } - size->height = livery_height * this->line_height; - this->GetWidget(WID_SCL_MATRIX)->widget_data = (livery_height << MAT_ROW_START) | (1 << MAT_COL_START); + /* 11 items in the default rail class */ + size->height = 11 * this->line_height; + resize->width = 1; + resize->height = this->line_height; break; } @@ -641,6 +788,7 @@ public: for (const StringID *id = _colour_dropdown; id != endof(_colour_dropdown); id++) { size->width = max(size->width, GetStringBoundingBox(*id).width + padding); } + size->width = max(size->width, GetStringBoundingBox(STR_COLOUR_DEFAULT).width + padding); break; } } @@ -651,8 +799,11 @@ public: bool local = (CompanyID)this->window_number == _local_company; /* Disable dropdown controls if no scheme is selected */ - this->SetWidgetDisabledState(WID_SCL_PRI_COL_DROPDOWN, !local || this->sel == 0); - this->SetWidgetDisabledState(WID_SCL_SEC_COL_DROPDOWN, !local || this->sel == 0); + bool disabled = this->livery_class < LC_GROUP_RAIL ? (this->sel == 0) : (this->sel == INVALID_GROUP); + this->SetWidgetDisabledState(WID_SCL_PRI_COL_DROPDOWN, !local || disabled); + this->SetWidgetDisabledState(WID_SCL_SEC_COL_DROPDOWN, !local || disabled); + + this->BuildGroupList((CompanyID)this->window_number); this->DrawWidgets(); } @@ -667,15 +818,31 @@ public: case WID_SCL_PRI_COL_DROPDOWN: case WID_SCL_SEC_COL_DROPDOWN: { const Company *c = Company::Get((CompanyID)this->window_number); - LiveryScheme scheme = LS_DEFAULT; + bool primary = widget == WID_SCL_PRI_COL_DROPDOWN; + StringID colour = STR_COLOUR_DEFAULT; - if (this->sel != 0) { - for (scheme = LS_BEGIN; scheme < LS_END; scheme++) { - if (HasBit(this->sel, scheme)) break; + if (this->livery_class < LC_GROUP_RAIL) { + if (this->sel != 0) { + LiveryScheme scheme = LS_DEFAULT; + for (scheme = LS_BEGIN; scheme < LS_END; scheme++) { + if (HasBit(this->sel, scheme)) break; + } + if (scheme == LS_END) scheme = LS_DEFAULT; + const Livery *livery = &c->livery[scheme]; + if (scheme == LS_DEFAULT || HasBit(livery->in_use, primary ? 0 : 1)) { + colour = STR_COLOUR_DARK_BLUE + (primary ? livery->colour1 : livery->colour2); + } + } + } else { + if (this->sel != INVALID_GROUP) { + const Group *g = Group::Get(this->sel); + const Livery *livery = &g->livery; + if (HasBit(livery->in_use, primary ? 0 : 1)) { + colour = STR_COLOUR_DARK_BLUE + (primary ? livery->colour1 : livery->colour2); + } } - if (scheme == LS_END) scheme = LS_DEFAULT; } - SetDParam(0, STR_COLOUR_DARK_BLUE + ((widget == WID_SCL_PRI_COL_DROPDOWN) ? c->livery[scheme].colour1 : c->livery[scheme].colour2)); + SetDParam(0, colour); break; } } @@ -700,36 +867,45 @@ public: int sec_left = nwi->pos_x; int sec_right = sec_left + nwi->current_x - 1; - int text_left = (rtl ? (uint)WD_FRAMERECT_LEFT : (this->box.width + 5)); - int text_right = (rtl ? (this->box.width + 5) : (uint)WD_FRAMERECT_RIGHT); + int text_left = (rtl ? (uint)WD_FRAMERECT_LEFT : (this->square.width + 5)); + int text_right = (rtl ? (this->square.width + 5) : (uint)WD_FRAMERECT_RIGHT); - int box_offs = (this->line_height - this->box.height) / 2; int square_offs = (this->line_height - this->square.height) / 2 + 1; int text_offs = (this->line_height - FONT_HEIGHT_NORMAL) / 2 + 1; int y = r.top; - const Company *c = Company::Get((CompanyID)this->window_number); - for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) { - if (_livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme)) { - bool sel = HasBit(this->sel, scheme) != 0; - /* Optional check box + scheme name. */ - if (scheme != LS_DEFAULT) { - DrawSprite(c->livery[scheme].in_use ? SPR_BOX_CHECKED : SPR_BOX_EMPTY, PAL_NONE, (rtl ? sch_right - (this->box.width + 5) + WD_FRAMERECT_RIGHT : sch_left) + WD_FRAMERECT_LEFT, y + box_offs); + /* Helper function to draw livery info. */ + auto draw_livery = [&](StringID str, const Livery &liv, bool sel, bool def, int indent) { + /* Livery Label. */ + DrawString(sch_left + WD_FRAMERECT_LEFT + (rtl ? 0 : indent), sch_right - WD_FRAMERECT_RIGHT - (rtl ? indent : 0), y + text_offs, str, sel ? TC_WHITE : TC_BLACK); + + /* Text below the first dropdown. */ + DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOUR(liv.colour1), (rtl ? pri_right - (this->square.width + 5) + WD_FRAMERECT_RIGHT : pri_left) + WD_FRAMERECT_LEFT, y + square_offs); + DrawString(pri_left + text_left, pri_right - text_right, y + text_offs, (def || HasBit(liv.in_use, 0)) ? STR_COLOUR_DARK_BLUE + liv.colour1 : STR_COLOUR_DEFAULT, sel ? TC_WHITE : TC_GOLD); + + /* Text below the second dropdown. */ + if (sec_right > sec_left) { // Second dropdown has non-zero size. + DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOUR(liv.colour2), (rtl ? sec_right - (this->square.width + 5) + WD_FRAMERECT_RIGHT : sec_left) + WD_FRAMERECT_LEFT, y + square_offs); + DrawString(sec_left + text_left, sec_right - text_right, y + text_offs, (def || HasBit(liv.in_use, 1)) ? STR_COLOUR_DARK_BLUE + liv.colour2 : STR_COLOUR_DEFAULT, sel ? TC_WHITE : TC_GOLD); + } + + y += this->line_height; + }; + + if (livery_class < LC_GROUP_RAIL) { + const Company *c = Company::Get((CompanyID)this->window_number); + for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) { + if (_livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme)) { + draw_livery(STR_LIVERY_DEFAULT + scheme, c->livery[scheme], HasBit(this->sel, scheme), scheme == LS_DEFAULT, 0); } - DrawString(sch_left + text_left, sch_right - text_right, y + text_offs, STR_LIVERY_DEFAULT + scheme, sel ? TC_WHITE : TC_BLACK); - - /* Text below the first dropdown. */ - DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOUR(c->livery[scheme].colour1), (rtl ? pri_right - (this->box.width + 5) + WD_FRAMERECT_RIGHT : pri_left) + WD_FRAMERECT_LEFT, y + square_offs); - DrawString(pri_left + text_left, pri_right - text_right, y + text_offs, STR_COLOUR_DARK_BLUE + c->livery[scheme].colour1, sel ? TC_WHITE : TC_GOLD); - - /* Text below the second dropdown. */ - if (sec_right > sec_left) { // Second dropdown has non-zero size. - DrawSprite(SPR_SQUARE, GENERAL_SPRITE_COLOUR(c->livery[scheme].colour2), (rtl ? sec_right - (this->box.width + 5) + WD_FRAMERECT_RIGHT : sec_left) + WD_FRAMERECT_LEFT, y + square_offs); - DrawString(sec_left + text_left, sec_right - text_right, y + text_offs, STR_COLOUR_DARK_BLUE + c->livery[scheme].colour2, sel ? TC_WHITE : TC_GOLD); - } - - y += this->line_height; + } + } else { + uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->groups.Length()); + for (uint i = this->vscroll->GetPosition(); i < max; ++i) { + const Group *g = this->groups[i]; + SetDParam(0, g->index); + draw_livery(STR_GROUP_NAME, g->livery, this->sel == g->index, false, this->indents[i] * LEVEL_WIDTH); } } } @@ -743,20 +919,35 @@ public: case WID_SCL_CLASS_ROAD: case WID_SCL_CLASS_SHIP: case WID_SCL_CLASS_AIRCRAFT: + case WID_SCL_GROUPS_RAIL: + case WID_SCL_GROUPS_ROAD: + case WID_SCL_GROUPS_SHIP: + case WID_SCL_GROUPS_AIRCRAFT: this->RaiseWidget(this->livery_class + WID_SCL_CLASS_GENERAL); this->livery_class = (LiveryClass)(widget - WID_SCL_CLASS_GENERAL); this->LowerWidget(this->livery_class + WID_SCL_CLASS_GENERAL); /* Select the first item in the list */ - this->sel = 0; - for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) { - if (_livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme)) { - this->sel = 1 << scheme; - break; + if (this->livery_class < LC_GROUP_RAIL) { + this->sel = 0; + for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) { + if (_livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme)) { + this->sel = 1 << scheme; + break; + } + } + } else { + this->sel = INVALID_GROUP; + this->groups.ForceRebuild(); + this->BuildGroupList((CompanyID)this->window_number); + + if (this->groups.Length() > 0) { + this->sel = this->groups[0]->index; } } - this->ReInit(); + this->SetLiveryHeight(); + this->SetDirty(); break; case WID_SCL_PRI_COL_DROPDOWN: // First colour dropdown @@ -769,23 +960,27 @@ public: case WID_SCL_MATRIX: { const NWidgetBase *wid = this->GetWidget(WID_SCL_MATRIX); - LiveryScheme j = (LiveryScheme)((pt.y - wid->pos_y) / this->line_height); + if (this->livery_class < LC_GROUP_RAIL) { + LiveryScheme j = (LiveryScheme)((pt.y - wid->pos_y) / this->line_height); - for (LiveryScheme scheme = LS_BEGIN; scheme <= j; scheme++) { - if (_livery_class[scheme] != this->livery_class || !HasBit(_loaded_newgrf_features.used_liveries, scheme)) j++; - if (scheme >= LS_END) return; - } - if (j >= LS_END) return; + if (j >= this->livery_height) return; - /* If clicking on the left edge, toggle using the livery */ - if (_current_text_dir == TD_RTL ? pt.x - wid->pos_x > wid->current_x - (this->box.width + 5) : pt.x - wid->pos_x < (this->box.width + 5)) { - DoCommandP(0, j | (2 << 8), !Company::Get((CompanyID)this->window_number)->livery[j].in_use, CMD_SET_COMPANY_COLOUR); - } + for (LiveryScheme scheme = LS_BEGIN; scheme <= j; scheme++) { + if (_livery_class[scheme] != this->livery_class || !HasBit(_loaded_newgrf_features.used_liveries, scheme)) j++; + if (scheme >= LS_END) return; + } + if (j >= LS_END) return; - if (_ctrl_pressed) { - ToggleBit(this->sel, j); + if (_ctrl_pressed) { + ToggleBit(this->sel, j); + } else { + this->sel = 1 << j; + } } else { - this->sel = 1 << j; + uint id_g = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_SCL_MATRIX, 0, this->line_height); + if (id_g >= this->groups.Length()) return; + + this->sel = this->groups[id_g]->index; } this->SetDirty(); break; @@ -793,16 +988,29 @@ public: } } + virtual void OnResize() + { + this->vscroll->SetCapacityFromWidget(this, WID_SCL_MATRIX); + } + virtual void OnDropdownSelect(int widget, int index) { bool local = (CompanyID)this->window_number == _local_company; if (!local) return; - for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) { - /* Changed colour for the selected scheme, or all visible schemes if CTRL is pressed. */ - if (HasBit(this->sel, scheme) || (_ctrl_pressed && _livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme))) { - DoCommandP(0, scheme | (widget == WID_SCL_PRI_COL_DROPDOWN ? 0 : 256), index, CMD_SET_COMPANY_COLOUR); + if (index >= COLOUR_END) index = INVALID_COLOUR; + + if (this->livery_class < LC_GROUP_RAIL) { + /* Set company colour livery */ + for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) { + /* Changed colour for the selected scheme, or all visible schemes if CTRL is pressed. */ + if (HasBit(this->sel, scheme) || (_ctrl_pressed && _livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme))) { + DoCommandP(0, scheme | (widget == WID_SCL_PRI_COL_DROPDOWN ? 0 : 256), index, CMD_SET_COMPANY_COLOUR); + } } + } else { + /* Setting group livery */ + DoCommandP(0, this->sel, (widget == WID_SCL_PRI_COL_DROPDOWN ? 0 : 256) | (index << 16), CMD_SET_GROUP_LIVERY); } } @@ -814,15 +1022,27 @@ public: virtual void OnInvalidateData(int data = 0, bool gui_scope = true) { if (!gui_scope) return; + + if (data != -1) { + /* data contains a VehicleType, rebuild list if it displayed */ + if (this->livery_class == data + LC_GROUP_RAIL) { + if (!Group::IsValidID(this->sel)) this->sel = INVALID_GROUP; + this->groups.ForceRebuild(); + this->BuildGroupList((CompanyID)this->window_number); + this->SetDirty(); + } + return; + } + this->SetWidgetsDisabledState(true, WID_SCL_CLASS_RAIL, WID_SCL_CLASS_ROAD, WID_SCL_CLASS_SHIP, WID_SCL_CLASS_AIRCRAFT, WIDGET_LIST_END); - bool current_class_valid = this->livery_class == LC_OTHER; + bool current_class_valid = this->livery_class == LC_OTHER || this->livery_class >= LC_GROUP_RAIL; if (_settings_client.gui.liveries == LIT_ALL || (_settings_client.gui.liveries == LIT_COMPANY && this->window_number == _local_company)) { for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) { if (HasBit(_loaded_newgrf_features.used_liveries, scheme)) { if (_livery_class[scheme] == this->livery_class) current_class_valid = true; this->EnableWidget(WID_SCL_CLASS_GENERAL + _livery_class[scheme]); - } else { + } else if (this->livery_class < LC_GROUP_RAIL) { ClrBit(this->sel, scheme); } } @@ -831,8 +1051,6 @@ public: if (!current_class_valid) { Point pt = {0, 0}; this->OnClick(pt, WID_SCL_CLASS_GENERAL, 1); - } else if (data == 0) { - this->ReInit(); } } }; @@ -848,6 +1066,10 @@ static const NWidgetPart _nested_select_company_livery_widgets [] = { NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_CLASS_ROAD), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_IMG_TRUCKLIST, STR_LIVERY_ROAD_VEHICLE_TOOLTIP), NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_CLASS_SHIP), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_IMG_SHIPLIST, STR_LIVERY_SHIP_TOOLTIP), NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_CLASS_AIRCRAFT), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_IMG_AIRPLANESLIST, STR_LIVERY_AIRCRAFT_TOOLTIP), + NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_GROUPS_RAIL), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_GROUP_LIVERY_TRAIN, STR_LIVERY_TRAIN_TOOLTIP), + NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_GROUPS_ROAD), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_GROUP_LIVERY_ROADVEH, STR_LIVERY_ROAD_VEHICLE_TOOLTIP), + NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_GROUPS_SHIP), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_GROUP_LIVERY_SHIP, STR_LIVERY_SHIP_TOOLTIP), + NWidget(WWT_IMGBTN, COLOUR_GREY, WID_SCL_GROUPS_AIRCRAFT), SetMinimalSize(22, 22), SetFill(0, 1), SetDataTip(SPR_GROUP_LIVERY_AIRCRAFT, STR_LIVERY_AIRCRAFT_TOOLTIP), NWidget(WWT_PANEL, COLOUR_GREY), SetMinimalSize(90, 22), SetFill(1, 1), EndContainer(), EndContainer(), NWidget(NWID_HORIZONTAL), @@ -856,7 +1078,13 @@ static const NWidgetPart _nested_select_company_livery_widgets [] = { NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_SCL_SEC_COL_DROPDOWN), SetMinimalSize(125, 12), SetFill(0, 1), SetDataTip(STR_BLACK_STRING, STR_LIVERY_SECONDARY_TOOLTIP), EndContainer(), - NWidget(WWT_MATRIX, COLOUR_GREY, WID_SCL_MATRIX), SetMinimalSize(275, 15), SetFill(1, 0), SetMatrixDataTip(1, 1, STR_LIVERY_PANEL_TOOLTIP), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_MATRIX, COLOUR_GREY, WID_SCL_MATRIX), SetMinimalSize(275, 0), SetResize(1, 0), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_LIVERY_PANEL_TOOLTIP), SetScrollbar(WID_SCL_MATRIX_SCROLLBAR), + NWidget(NWID_VERTICAL), + NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_SCL_MATRIX_SCROLLBAR), + NWidget(WWT_RESIZEBOX, COLOUR_GREY), + EndContainer(), + EndContainer(), }; static WindowDesc _select_company_livery_desc( @@ -866,6 +1094,16 @@ static WindowDesc _select_company_livery_desc( _nested_select_company_livery_widgets, lengthof(_nested_select_company_livery_widgets) ); +void ShowCompanyLiveryWindow(CompanyID company, GroupID group) +{ + SelectCompanyLiveryWindow *w = (SelectCompanyLiveryWindow *)BringWindowToFrontById(WC_COMPANY_COLOUR, company); + if (w == NULL) { + new SelectCompanyLiveryWindow(&_select_company_livery_desc, company, group); + } else if (group != INVALID_GROUP) { + w->SetSelectedGroup(group); + } +} + /** * Draws the face of a company manager's face. * @param cmf the company manager's face @@ -2291,8 +2529,7 @@ struct CompanyWindow : Window case WID_C_NEW_FACE: DoSelectCompanyManagerFace(this); break; case WID_C_COLOUR_SCHEME: - if (BringWindowToFrontById(WC_COMPANY_COLOUR, this->window_number)) break; - new SelectCompanyLiveryWindow(&_select_company_livery_desc, (CompanyID)this->window_number); + ShowCompanyLiveryWindow((CompanyID)this->window_number, INVALID_GROUP); break; case WID_C_PRESIDENT_NAME: diff --git a/src/company_gui.h b/src/company_gui.h index f4964f3dc7..c5593d15d3 100644 --- a/src/company_gui.h +++ b/src/company_gui.h @@ -13,11 +13,13 @@ #define COMPANY_GUI_H #include "company_type.h" +#include "group.h" #include "gfx_type.h" TextColour GetDrawStringCompanyColour(CompanyID company); void DrawCompanyIcon(CompanyID c, int x, int y); +void ShowCompanyLiveryWindow(CompanyID company, GroupID group); void ShowCompanyStations(CompanyID company); void ShowCompanyFinances(CompanyID company); void ShowCompany(CompanyID company); diff --git a/src/gfx_type.h b/src/gfx_type.h index 4cfc149a86..7eeddb4078 100644 --- a/src/gfx_type.h +++ b/src/gfx_type.h @@ -241,7 +241,7 @@ enum Colours { COLOUR_END, INVALID_COLOUR = 0xFF, }; -template <> struct EnumPropsT : MakeEnumPropsT {}; +template <> struct EnumPropsT : MakeEnumPropsT {}; /** Colour of the strings, see _string_colourmap in table/string_colours.h or docs/ottd-colourtext-palette.png */ enum TextColour { diff --git a/src/group.h b/src/group.h index 91ee77e601..ea4f7e130e 100644 --- a/src/group.h +++ b/src/group.h @@ -17,6 +17,7 @@ #include "company_type.h" #include "vehicle_type.h" #include "engine_type.h" +#include "livery.h" typedef Pool GroupPool; extern GroupPool _group_pool; ///< Pool of groups. @@ -69,6 +70,7 @@ struct Group : GroupPool::PoolItem<&_group_pool> { VehicleTypeByte vehicle_type; ///< Vehicle type of the group bool replace_protection; ///< If set to true, the global autoreplace have no effect on the group + Livery livery; ///< Custom colour scheme for vehicles in this group GroupStatistics statistics; ///< NOSAVE: Statistics and caches on the vehicles in the group. GroupID parent; ///< Parent group diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp index 3edaf76271..7795d917d7 100644 --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -255,6 +255,45 @@ static inline void UpdateNumEngineGroup(const Vehicle *v, GroupID old_g, GroupID } +const Livery *GetParentLivery(const Group *g) +{ + if (g->parent == INVALID_GROUP) { + const Company *c = Company::Get(g->owner); + return &c->livery[LS_DEFAULT]; + } + + const Group *pg = Group::Get(g->parent); + return &pg->livery; +} + + +/** + * Propagate a livery change to a group's children. + * @param g Group. + */ +void PropagateChildLivery(const Group *g) +{ + /* Company colour data is indirectly cached. */ + Vehicle *v; + FOR_ALL_VEHICLES(v) { + if (v->group_id == g->index && (!v->IsGroundVehicle() || v->IsFrontEngine())) { + for (Vehicle *u = v; u != NULL; u = u->Next()) { + u->colourmap = PAL_NONE; + u->InvalidateNewGRFCache(); + } + } + } + + Group *cg; + FOR_ALL_GROUPS(cg) { + if (cg->parent == g->index) { + if (!HasBit(cg->livery.in_use, 0)) cg->livery.colour1 = g->livery.colour1; + if (!HasBit(cg->livery.in_use, 1)) cg->livery.colour2 = g->livery.colour2; + PropagateChildLivery(cg); + } + } +} + Group::Group(Owner owner) { @@ -289,9 +328,14 @@ CommandCost CmdCreateGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 g->vehicle_type = vt; g->parent = INVALID_GROUP; + const Company *c = Company::Get(_current_company); + g->livery.colour1 = c->livery[LS_DEFAULT].colour1; + g->livery.colour2 = c->livery[LS_DEFAULT].colour2; + _new_group_id = g->index; InvalidateWindowData(GetWindowClassForVehicleType(vt), VehicleListIdentifier(VL_GROUP_LIST, vt, _current_company).Pack()); + InvalidateWindowData(WC_COMPANY_COLOUR, g->owner, g->vehicle_type); } return CommandCost(); @@ -346,6 +390,7 @@ CommandCost CmdDeleteGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 delete g; InvalidateWindowData(GetWindowClassForVehicleType(vt), VehicleListIdentifier(VL_GROUP_LIST, vt, _current_company).Pack()); + InvalidateWindowData(WC_COMPANY_COLOUR, _current_company, vt); } return CommandCost(); @@ -410,12 +455,22 @@ CommandCost CmdAlterGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 if (flags & DC_EXEC) { g->parent = (pg == NULL) ? INVALID_GROUP : pg->index; GroupStatistics::UpdateAutoreplace(g->owner); + + if (g->livery.in_use == 0) { + const Livery *livery = GetParentLivery(g); + g->livery.colour1 = livery->colour1; + g->livery.colour2 = livery->colour2; + + PropagateChildLivery(g); + MarkWholeScreenDirty(); + } } } if (flags & DC_EXEC) { InvalidateWindowData(WC_REPLACE_VEHICLE, g->vehicle_type, 1); InvalidateWindowData(GetWindowClassForVehicleType(g->vehicle_type), VehicleListIdentifier(VL_GROUP_LIST, g->vehicle_type, _current_company).Pack()); + InvalidateWindowData(WC_COMPANY_COLOUR, g->owner, g->vehicle_type); } return CommandCost(); @@ -442,6 +497,11 @@ static void AddVehicleToGroup(Vehicle *v, GroupID new_g) case VEH_AIRCRAFT: if (v->IsEngineCountable()) UpdateNumEngineGroup(v, v->group_id, new_g); v->group_id = new_g; + for (Vehicle *u = v; u != NULL; u = u->Next()) { + u->colourmap = PAL_NONE; + u->InvalidateNewGRFCache(); + u->UpdateViewport(true); + } break; } @@ -496,6 +556,9 @@ CommandCost CmdAddVehicleGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, u /* Update the Replace Vehicle Windows */ SetWindowDirty(WC_REPLACE_VEHICLE, v->type); + SetWindowDirty(WC_VEHICLE_DEPOT, v->tile); + SetWindowDirty(WC_VEHICLE_VIEW, v->index); + SetWindowDirty(WC_VEHICLE_DETAILS, v->index); InvalidateWindowData(GetWindowClassForVehicleType(v->type), VehicleListIdentifier(VL_GROUP_LIST, v->type, _current_company).Pack()); } @@ -577,6 +640,42 @@ CommandCost CmdRemoveAllVehiclesGroup(TileIndex tile, DoCommandFlag flags, uint3 return CommandCost(); } +/** + * Set the livery for a vehicle group. + * @param tile Unused. + * @param flags Command flags. + * @param p1 + * - p1 bit 0-15 Group ID. + * @param p2 + * - p2 bit 8 Set secondary instead of primary colour + * - p2 bit 16-23 Colour. + */ +CommandCost CmdSetGroupLivery(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) +{ + Group *g = Group::GetIfValid(p1); + bool primary = !HasBit(p2, 8); + Colours colour = Extract(p2); + + if (g == NULL || g->owner != _current_company) return CMD_ERROR; + + if (flags & DC_EXEC) { + if (primary) { + SB(g->livery.in_use, 0, 1, colour != INVALID_COLOUR); + if (colour == INVALID_COLOUR) colour = (Colours)GetParentLivery(g)->colour1; + g->livery.colour1 = colour; + } else { + SB(g->livery.in_use, 1, 1, colour != INVALID_COLOUR); + if (colour == INVALID_COLOUR) colour = (Colours)GetParentLivery(g)->colour2; + g->livery.colour2 = colour; + } + + PropagateChildLivery(g); + MarkWholeScreenDirty(); + } + + return CommandCost(); +} + /** * Set replace protection for a group and its sub-groups. * @param g initial group. @@ -652,6 +751,9 @@ void SetTrainGroupID(Train *v, GroupID new_g) if (u->IsEngineCountable()) UpdateNumEngineGroup(u, u->group_id, new_g); u->group_id = new_g; + u->colourmap = PAL_NONE; + u->InvalidateNewGRFCache(); + u->UpdateViewport(true); } /* Update the Replace Vehicle Windows */ @@ -676,6 +778,8 @@ void UpdateTrainGroupID(Train *v) if (u->IsEngineCountable()) UpdateNumEngineGroup(u, u->group_id, new_g); u->group_id = new_g; + u->colourmap = PAL_NONE; + u->InvalidateNewGRFCache(); } /* Update the Replace Vehicle Windows */ diff --git a/src/group_gui.cpp b/src/group_gui.cpp index a884920842..ce607c3264 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -25,6 +25,7 @@ #include "vehicle_gui_base.h" #include "core/geometry_func.hpp" #include "company_base.h" +#include "company_gui.h" #include "widgets/group_widget.h" @@ -63,6 +64,8 @@ static const NWidgetPart _nested_group_widgets[] = { SetDataTip(SPR_GROUP_DELETE_TRAIN, STR_GROUP_DELETE_TOOLTIP), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_RENAME_GROUP), SetFill(0, 1), SetDataTip(SPR_GROUP_RENAME_TRAIN, STR_GROUP_RENAME_TOOLTIP), + NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_LIVERY_GROUP), SetFill(0, 1), + SetDataTip(SPR_GROUP_LIVERY_TRAIN, STR_GROUP_LIVERY_TOOLTIP), NWidget(WWT_PANEL, COLOUR_GREY), SetFill(1, 1), EndContainer(), NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_REPLACE_PROTECTION), SetFill(0, 1), SetDataTip(SPR_GROUP_REPLACE_OFF_TRAIN, STR_GROUP_REPLACE_PROTECTION_TOOLTIP), @@ -344,6 +347,7 @@ public: this->GetWidget(WID_GL_CREATE_GROUP)->widget_data += this->vli.vtype; this->GetWidget(WID_GL_RENAME_GROUP)->widget_data += this->vli.vtype; this->GetWidget(WID_GL_DELETE_GROUP)->widget_data += this->vli.vtype; + this->GetWidget(WID_GL_LIVERY_GROUP)->widget_data += this->vli.vtype; this->GetWidget(WID_GL_REPLACE_PROTECTION)->widget_data += this->vli.vtype; this->FinishInitNested(window_number); @@ -499,6 +503,7 @@ public: this->SetWidgetsDisabledState(IsDefaultGroupID(this->vli.index) || IsAllGroupID(this->vli.index) || _local_company != this->vli.company, WID_GL_DELETE_GROUP, WID_GL_RENAME_GROUP, + WID_GL_LIVERY_GROUP, WID_GL_REPLACE_PROTECTION, WIDGET_LIST_END); @@ -696,6 +701,10 @@ public: this->ShowRenameGroupWindow(this->vli.index, false); break; + case WID_GL_LIVERY_GROUP: // Set group livery + ShowCompanyLiveryWindow(this->owner, this->vli.index); + break; + case WID_GL_AVAILABLE_VEHICLES: ShowBuildVehicleWindow(INVALID_TILE, this->vli.vtype); break; diff --git a/src/lang/english.txt b/src/lang/english.txt index 83406296cc..be465cf229 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -190,6 +190,7 @@ STR_COLOUR_BROWN :Brown STR_COLOUR_GREY :Grey STR_COLOUR_WHITE :White STR_COLOUR_RANDOM :Random +STR_COLOUR_DEFAULT :Default # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -3420,6 +3421,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groups - STR_GROUP_CREATE_TOOLTIP :{BLACK}Click to create a group STR_GROUP_DELETE_TOOLTIP :{BLACK}Delete the selected group STR_GROUP_RENAME_TOOLTIP :{BLACK}Rename the selected group +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Change livery of the selected group STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Click to protect this group from global autoreplace STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Delete Group diff --git a/src/livery.h b/src/livery.h index 5845ffabb4..d6ed5bfdc7 100644 --- a/src/livery.h +++ b/src/livery.h @@ -69,12 +69,16 @@ enum LiveryClass { LC_ROAD, LC_SHIP, LC_AIRCRAFT, + LC_GROUP_RAIL, + LC_GROUP_ROAD, + LC_GROUP_SHIP, + LC_GROUP_AIRCRAFT, LC_END }; /** Information about a particular livery. */ struct Livery { - bool in_use; ///< Set if this livery should be used instead of the default livery. + byte in_use; ///< Bit 0 set if this livery should override the default livery first colour, Bit 1 for the second colour. byte colour1; ///< First colour, for all vehicles. byte colour2; ///< Second colour, for vehicles with 2CC support. }; diff --git a/src/saveload/company_sl.cpp b/src/saveload/company_sl.cpp index ce388e2141..1782e7c28a 100644 --- a/src/saveload/company_sl.cpp +++ b/src/saveload/company_sl.cpp @@ -403,7 +403,7 @@ static const SaveLoad _company_ai_build_rec_desc[] = { }; static const SaveLoad _company_livery_desc[] = { - SLE_CONDVAR(Livery, in_use, SLE_BOOL, 34, SL_MAX_VERSION), + SLE_CONDVAR(Livery, in_use, SLE_UINT8, 34, SL_MAX_VERSION), SLE_CONDVAR(Livery, colour1, SLE_UINT8, 34, SL_MAX_VERSION), SLE_CONDVAR(Livery, colour2, SLE_UINT8, 34, SL_MAX_VERSION), SLE_END() @@ -443,9 +443,18 @@ static void SaveLoad_PLYR_common(Company *c, CompanyProperties *cprops) /* Write each livery entry. */ int num_liveries = IsSavegameVersionBefore(63) ? LS_END - 4 : (IsSavegameVersionBefore(85) ? LS_END - 2: LS_END); + bool update_in_use = IsSavegameVersionBefore(205); if (c != NULL) { for (i = 0; i < num_liveries; i++) { SlObject(&c->livery[i], _company_livery_desc); + if (update_in_use && i != LS_DEFAULT) { + if (c->livery[i].in_use == 0) { + c->livery[i].colour1 = c->livery[LS_DEFAULT].colour1; + c->livery[i].colour2 = c->livery[LS_DEFAULT].colour2; + } else { + c->livery[i].in_use = 3; + } + } } if (num_liveries < LS_END) { diff --git a/src/saveload/group_sl.cpp b/src/saveload/group_sl.cpp index 93734f80f6..27112a5431 100644 --- a/src/saveload/group_sl.cpp +++ b/src/saveload/group_sl.cpp @@ -11,6 +11,7 @@ #include "../stdafx.h" #include "../group.h" +#include "../company_base.h" #include "saveload.h" @@ -23,6 +24,9 @@ static const SaveLoad _group_desc[] = { SLE_VAR(Group, owner, SLE_UINT8), SLE_VAR(Group, vehicle_type, SLE_UINT8), SLE_VAR(Group, replace_protection, SLE_BOOL), + SLE_CONDVAR(Group, livery.in_use, SLE_UINT8, 205, SL_MAX_VERSION), + SLE_CONDVAR(Group, livery.colour1, SLE_UINT8, 205, SL_MAX_VERSION), + SLE_CONDVAR(Group, livery.colour2, SLE_UINT8, 205, SL_MAX_VERSION), SLE_CONDVAR(Group, parent, SLE_UINT16, 189, SL_MAX_VERSION), SLE_END() }; @@ -47,6 +51,12 @@ static void Load_GRPS() SlObject(g, _group_desc); if (IsSavegameVersionBefore(189)) g->parent = INVALID_GROUP; + + if (IsSavegameVersionBefore(205)) { + const Company *c = Company::Get(g->owner); + g->livery.colour1 = c->livery[LS_DEFAULT].colour1; + g->livery.colour2 = c->livery[LS_DEFAULT].colour2; + } } } diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 348ba93ba0..e75e40d74e 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -274,8 +274,9 @@ * 202 #6867 Increase industry cargo slots to 16 in, 16 out * 203 #7072 Add path cache for ships * 204 #7065 Add extra rotation stages for ships. + * 205 #7108 Livery storage change and group liveries. */ -extern const uint16 SAVEGAME_VERSION = 204; ///< Current savegame version of OpenTTD. +extern const uint16 SAVEGAME_VERSION = 205; ///< Current savegame version of OpenTTD. SavegameType _savegame_type; ///< type of savegame we are loading FileToSaveLoad _file_to_saveload; ///< File to save or load in the openttd loop. diff --git a/src/script/api/script_window.hpp b/src/script/api/script_window.hpp index e11742bafb..8dfeafc4c5 100644 --- a/src/script/api/script_window.hpp +++ b/src/script/api/script_window.hpp @@ -1080,10 +1080,15 @@ public: WID_SCL_CLASS_ROAD = ::WID_SCL_CLASS_ROAD, ///< Class road. WID_SCL_CLASS_SHIP = ::WID_SCL_CLASS_SHIP, ///< Class ship. WID_SCL_CLASS_AIRCRAFT = ::WID_SCL_CLASS_AIRCRAFT, ///< Class aircraft. + WID_SCL_GROUPS_RAIL = ::WID_SCL_GROUPS_RAIL, ///< Rail groups. + WID_SCL_GROUPS_ROAD = ::WID_SCL_GROUPS_ROAD, ///< Road groups. + WID_SCL_GROUPS_SHIP = ::WID_SCL_GROUPS_SHIP, ///< Ship groups. + WID_SCL_GROUPS_AIRCRAFT = ::WID_SCL_GROUPS_AIRCRAFT, ///< Aircraft groups. WID_SCL_SPACER_DROPDOWN = ::WID_SCL_SPACER_DROPDOWN, ///< Spacer for dropdown. WID_SCL_PRI_COL_DROPDOWN = ::WID_SCL_PRI_COL_DROPDOWN, ///< Dropdown for primary colour. WID_SCL_SEC_COL_DROPDOWN = ::WID_SCL_SEC_COL_DROPDOWN, ///< Dropdown for secondary colour. WID_SCL_MATRIX = ::WID_SCL_MATRIX, ///< Matrix. + WID_SCL_MATRIX_SCROLLBAR = ::WID_SCL_MATRIX_SCROLLBAR, ///< Matrix scrollbar. }; /** @@ -1471,6 +1476,7 @@ public: WID_GL_CREATE_GROUP = ::WID_GL_CREATE_GROUP, ///< Create group button. WID_GL_DELETE_GROUP = ::WID_GL_DELETE_GROUP, ///< Delete group button. WID_GL_RENAME_GROUP = ::WID_GL_RENAME_GROUP, ///< Rename group button. + WID_GL_LIVERY_GROUP = ::WID_GL_LIVERY_GROUP, ///< Group livery button. WID_GL_REPLACE_PROTECTION = ::WID_GL_REPLACE_PROTECTION, ///< Replace protection button. WID_GL_INFO = ::WID_GL_INFO, ///< Group info. }; diff --git a/src/settings.cpp b/src/settings.cpp index ae797e09b9..220628b006 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1095,7 +1095,7 @@ static bool InvalidateNewGRFChangeWindows(int32 p1) static bool InvalidateCompanyLiveryWindow(int32 p1) { - InvalidateWindowClassesData(WC_COMPANY_COLOUR); + InvalidateWindowClassesData(WC_COMPANY_COLOUR, -1); return RedrawScreen(p1); } diff --git a/src/table/sprites.h b/src/table/sprites.h index 81d5388f99..da3bc76271 100644 --- a/src/table/sprites.h +++ b/src/table/sprites.h @@ -56,7 +56,7 @@ static const SpriteID SPR_LARGE_SMALL_WINDOW = 682; /** Extra graphic spritenumbers */ static const SpriteID SPR_OPENTTD_BASE = 4896; -static const uint16 OPENTTD_SPRITE_COUNT = 175; +static const uint16 OPENTTD_SPRITE_COUNT = 179; /* Halftile-selection sprites */ static const SpriteID SPR_HALFTILE_SELECTION_FLAT = SPR_OPENTTD_BASE; @@ -149,6 +149,11 @@ static const SpriteID SPR_GROUP_REPLACE_OFF_ROADVEH = SPR_OPENTTD_BASE + 131; static const SpriteID SPR_GROUP_REPLACE_OFF_SHIP = SPR_OPENTTD_BASE + 132; static const SpriteID SPR_GROUP_REPLACE_OFF_AIRCRAFT = SPR_OPENTTD_BASE + 133; +static const SpriteID SPR_GROUP_LIVERY_TRAIN = SPR_OPENTTD_BASE + 175; +static const SpriteID SPR_GROUP_LIVERY_ROADVEH = SPR_OPENTTD_BASE + 176; +static const SpriteID SPR_GROUP_LIVERY_SHIP = SPR_OPENTTD_BASE + 177; +static const SpriteID SPR_GROUP_LIVERY_AIRCRAFT = SPR_OPENTTD_BASE + 178; + static const SpriteID SPR_TOWN_RATING_NA = SPR_OPENTTD_BASE + 162; static const SpriteID SPR_TOWN_RATING_APALLING = SPR_OPENTTD_BASE + 163; static const SpriteID SPR_TOWN_RATING_MEDIOCRE = SPR_OPENTTD_BASE + 164; diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 46141ce265..a5fe2ffa7a 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1886,14 +1886,24 @@ const Livery *GetEngineLivery(EngineID engine_type, CompanyID company, EngineID const Company *c = Company::Get(company); LiveryScheme scheme = LS_DEFAULT; - /* The default livery is always available for use, but its in_use flag determines - * whether any _other_ liveries are in use. */ - if (c->livery[LS_DEFAULT].in_use && (livery_setting == LIT_ALL || (livery_setting == LIT_COMPANY && company == _local_company))) { - /* Determine the livery scheme to use */ - scheme = GetEngineLiveryScheme(engine_type, parent_engine_type, v); + if (livery_setting == LIT_ALL || (livery_setting == LIT_COMPANY && company == _local_company)) { + if (v != NULL) { + const Group *g = Group::GetIfValid(v->First()->group_id); + if (g != NULL) { + /* Traverse parents until we find a livery or reach the top */ + while (g->livery.in_use == 0 && g->parent != INVALID_GROUP) { + g = Group::Get(g->parent); + } + if (g->livery.in_use != 0) return &g->livery; + } + } - /* Switch back to the default scheme if the resolved scheme is not in use */ - if (!c->livery[scheme].in_use) scheme = LS_DEFAULT; + /* The default livery is always available for use, but its in_use flag determines + * whether any _other_ liveries are in use. */ + if (c->livery[LS_DEFAULT].in_use != 0) { + /* Determine the livery scheme to use */ + scheme = GetEngineLiveryScheme(engine_type, parent_engine_type, v); + } } return &c->livery[scheme]; diff --git a/src/widgets/company_widget.h b/src/widgets/company_widget.h index 4c1a5df4b4..ceb81ae195 100644 --- a/src/widgets/company_widget.h +++ b/src/widgets/company_widget.h @@ -86,10 +86,15 @@ enum SelectCompanyLiveryWidgets { WID_SCL_CLASS_ROAD, ///< Class road. WID_SCL_CLASS_SHIP, ///< Class ship. WID_SCL_CLASS_AIRCRAFT, ///< Class aircraft. + WID_SCL_GROUPS_RAIL, ///< Rail groups. + WID_SCL_GROUPS_ROAD, ///< Road groups. + WID_SCL_GROUPS_SHIP, ///< Ship groups. + WID_SCL_GROUPS_AIRCRAFT, ///< Aircraft groups. WID_SCL_SPACER_DROPDOWN, ///< Spacer for dropdown. WID_SCL_PRI_COL_DROPDOWN, ///< Dropdown for primary colour. WID_SCL_SEC_COL_DROPDOWN, ///< Dropdown for secondary colour. WID_SCL_MATRIX, ///< Matrix. + WID_SCL_MATRIX_SCROLLBAR, ///< Matrix scrollbar. }; diff --git a/src/widgets/group_widget.h b/src/widgets/group_widget.h index 41e0bcd45a..fe5ae81174 100644 --- a/src/widgets/group_widget.h +++ b/src/widgets/group_widget.h @@ -31,6 +31,7 @@ enum GroupListWidgets { WID_GL_CREATE_GROUP, ///< Create group button. WID_GL_DELETE_GROUP, ///< Delete group button. WID_GL_RENAME_GROUP, ///< Rename group button. + WID_GL_LIVERY_GROUP, ///< Group livery button. WID_GL_REPLACE_PROTECTION, ///< Replace protection button. WID_GL_INFO, ///< Group info. }; From 8e02b7952b3fa3e9caff3cc78abbe68ce0b5a63d Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 31 Jan 2019 19:45:43 +0100 Subject: [PATCH 271/622] Update: Translations from eints swedish: 36 changes by Joel_A spanish: 3 changes by SilverSurferZzZ russian: 2 changes by Lone_Wolf romanian: 18 changes by kneekoo portuguese: 37 changes by vesgo --- src/lang/portuguese.txt | 38 +++++++++++++++++++++- src/lang/romanian.txt | 20 ++++++++++-- src/lang/russian.txt | 2 ++ src/lang/spanish.txt | 3 ++ src/lang/swedish.txt | 70 +++++++++++++++++++++-------------------- 5 files changed, 96 insertions(+), 37 deletions(-) diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 020f304f76..7c6fd7c794 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -190,6 +190,7 @@ STR_COLOUR_ORANGE :Laranja STR_COLOUR_BROWN :Castanho STR_COLOUR_GREY :Cinzento STR_COLOUR_WHITE :Branco +STR_COLOUR_RANDOM :Aleatório # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA} mph @@ -476,6 +477,7 @@ STR_ABOUT_MENU_SCREENSHOT :Captura de ecr STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Captura com resolução máxima STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Captura com resolução normal STR_ABOUT_MENU_GIANT_SCREENSHOT :Captura de mapa +STR_ABOUT_MENU_SHOW_FRAMERATE :Mostrar taxa de fotograma STR_ABOUT_MENU_ABOUT_OPENTTD :Sobre o OpenTTD... STR_ABOUT_MENU_SPRITE_ALIGNER :Alinhador de gráficos STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Alternar as caixas envolventes @@ -651,6 +653,7 @@ STR_MUSIC_RULER_MARKER :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Nenhuma música disponível STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}'{STRING}' STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Faixa STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Título @@ -671,6 +674,7 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Ligar/De STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Mostrar janela de selecção de faixas de música # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Programa musical - '{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} '{STRING}' STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Índice de faixas STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Programa - '{STRING}' @@ -811,6 +815,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Presidente) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} subsidiou a construção da nova cidade de {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Uma nova cidade chamada {TOWN} foi construida! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Nov{G 0 o o a os as} {STRING} em construção em {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Nov{G 0 o o a os as} {STRING} est{G 0 á á á ão ão} a ser plantad{G 0 o o a os as} em {TOWN}! @@ -923,6 +928,8 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Rand Sul Africa STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizado... STR_GAME_OPTIONS_CURRENCY_GEL :Lari Georgiano (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iraniano (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Novo Rublo Russo (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Peso Mexicano (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Veículos rodoviários @@ -1336,6 +1343,8 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Cor do terreno STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Verde STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Verde Escuro STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violeta +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Mover janela de exibição com Botão Direito Rato, posição do rato bloqueada +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Mover mapa com Botão Direito Rato, posição do rato bloqueada STR_CONFIG_SETTING_SMOOTH_SCROLLING :Suavizar deslocamento da navegação no mapa: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controla como a vista principal navega para uma posição específica ao clicar no mapa pequeno ou ao dar um comando para navegar para um objecto específico no mapa. Se activo, a vista principal navega suavemente, se inactivo a vista salta directamente para o destino. STR_CONFIG_SETTING_MEASURE_TOOLTIP :Mostrar medidas nas várias ferramentas de construção: {STRING} @@ -2689,9 +2698,32 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 A equipa do OpenTTD # Framerate display window +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_BLITTER :{BLACK}Taxa de fotogramas dos gráficos: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Número de fotogramas de video renderizados por segundo. +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Factor de velocidade actual do jogo: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Quão rápido o jogo está a ser executado, comparado com a velocidade esperada na taxa de simulação normal. +STR_FRAMERATE_CURRENT :{WHITE}Actual +STR_FRAMERATE_AVERAGE :{WHITE}Média +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} frames/s ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :Total de loops no jogo +STR_FRAMERATE_GL_ECONOMY :{BLACK} Movimentação de carga: +STR_FRAMERATE_GL_ROADVEHS :{BLACK}Quantidade de atraso no percurso do veículo rodoviário: +STR_FRAMERATE_GL_SHIPS :{BLACK} Ship ticks: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} World ticks: +STR_FRAMERATE_DRAWING :{BLACK}Renderização gráfica: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Janelas de exibição do mundo: +STR_FRAMERATE_SOUND :{BLACK}Mistura de Som: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Loop de jogo +STR_FRAMETIME_CAPTION_GL_ECONOMY :Movimentação de carga +STR_FRAMETIME_CAPTION_GL_TRAINS :Quantidade de atraso no percurso do Comboio +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Renderização de janela de exibição do mundo +STR_FRAMETIME_CAPTION_VIDEO :Saída de video ############ End of leave-in-this-order @@ -2834,6 +2866,8 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versão: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Versão mínima compatível: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Padrão (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Padrão (D) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parâmetros: {SILVER}{STRING} STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Sem informação disponível @@ -3715,7 +3749,7 @@ STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nova cap STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}{}{BLACK}Lucro da conversão: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Custo da adaptação: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Nova capacidade: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Lucro da conversão: {GREEN}{CURRENCY_LONG} -STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Selecionar os veículos a reaparelhar. Arrastando com o rato permite selecionar vários veículos. Clicando sobre um espaço vazio irá selecionar todo o veículo. Ctrl+Clique irá selecionar um veículo e composição +STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Selecionar os veículos a readaptar. Arrastando com o rato permite selecionar vários veículos. Clicando sobre um espaço vazio irá selecionar todo o veículo. Ctrl+Clique irá selecionar um veículo e composição STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Seleccionar tipo de carga do comboio STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Seleccione o tipo de carga para o veículo @@ -3789,6 +3823,7 @@ STR_ORDER_CONDITIONAL_AGE :Idade (anos) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Requer manutenção STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Sempre STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Tempo de vida restante (anos) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Máxima fiabilidade STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Como comparar os dados do veículo com o parâmetro passado STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :é igual a @@ -4472,6 +4507,7 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Sons originais STR_BASESOUNDS_WIN_DESCRIPTION :Sons originais da edição Windows de Transport Tycoon Deluxe. STR_BASESOUNDS_NONE_DESCRIPTION :Um conjunto de sons vazio. STR_BASEMUSIC_WIN_DESCRIPTION :Música original da edição Windows de Transport Tycoon Deluxe. +STR_BASEMUSIC_DOS_DESCRIPTION :Música original da edição DOS do Transport Tycoon Deluxe. STR_BASEMUSIC_NONE_DESCRIPTION :Um conjunto de música vazio. ##id 0x2000 diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 45f6ad4158..305d99597f 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -674,7 +674,9 @@ STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTB STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Lista melodiilor STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Program - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Şterge +STR_PLAYLIST_CHANGE_SET :{BLACK}Schimbă setul STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Şterge programul curent (doar pentru cele personale) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Schimbă selecția muzicală pe un alt set instalat STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Click pe o melodie pentru a o adăuga în programul personal curent STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Apasă pe melodie pentru a o elimina din programul actual (doar Custom1 sau Custom2) @@ -997,6 +999,7 @@ STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selecta STR_GAME_OPTIONS_BASE_MUSIC_STATUS :{RED}{NUM} fişier{P "" e} corupt{P "" e} STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Informaţii adiţionale despre setul de muzică de bază +STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Nu s-a putut obține lista de rezoluții suportate STR_ERROR_FULLSCREEN_FAILED :{WHITE}Comutarea pe întreg ecranul a eşuat # Custom currency window @@ -1112,6 +1115,7 @@ STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Setări joc (st STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Setări joc (stocate în salvări; afectează doar jocul curent) STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Setări companie (stocate în salvări; afectează doar jocurile noi) STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Setări compenia (stocate în salvări; afectează doar compania curentă) +STR_CONFIG_SETTING_CATEGORY_HIDES :{BLACK}Arată toate rezultatele de căutare setând{}{SILVER}Categoria {BLACK}în {WHITE}{STRING} STR_CONFIG_SETTINGS_NONE :{WHITE}- Nespecificat - STR_CONFIG_SETTING_OFF :Inactiv @@ -1286,6 +1290,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR :Generator teren STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Tip teren: {STRING} +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Doar TerraGenesis) Frecvența dealurilor din peisaj STR_CONFIG_SETTING_INDUSTRY_DENSITY :Densitatea industriei: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distanța maximă de la marginea hărții pentru rafinării: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Rafinăriile de petrol vor fi construite doar la marginea hărţii, sau pe coastă, în cazul harţilor insulare @@ -1302,6 +1307,7 @@ STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Alegeți distri STR_CONFIG_SETTING_TREE_PLACER_NONE :Niciunul STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Original STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Îmbunătăţit +STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Alege banda pentru condus STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotaţie hartă înălţimi: {STRING} STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Spre stânga STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Spre dreapta @@ -1632,6 +1638,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (m) STR_CONFIG_SETTING_LOCALISATION :{ORANGE}Localizare STR_CONFIG_SETTING_SOUND :{ORANGE}Efecte sonore STR_CONFIG_SETTING_INTERFACE :{ORANGE}Interfaţă +STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE}General STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :{ORANGE}Câmpuri vizuale STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}Construcţie STR_CONFIG_SETTING_ADVISORS :{ORANGE}Știri / Consilieri @@ -1765,7 +1772,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Schimbă STR_CHEAT_SETUP_PROD :{LTBLUE}Activează accesul la valorile de producţie: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Schemă de culori nouă +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Schemă de culori STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Afişează schemele generale de culori STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Arată schemele de culori pentru trenuri @@ -2326,7 +2333,7 @@ STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Semnal d STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Semnal de cale cu sens unic (electric){}Un semnal de cale permite trecerea simultană a mai multor trenuri prin blocurile de semnale, dacă trenul poate rezerva o cale până la un punct sigur de oprire. Semnalele de cale cu sens unic permit trecerea intr-un singur sens STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Conversie semnal{}Când este selectat, click-ul pe un semafor existent îl va converti în tipul şi varianta selectată de semnalizare. Ctrl+Click va comuta varianta existentă. Shift+Click afişează costul estimat al conversiei STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Densitatea semnalelor plasate prin tragerea cu mouse-ul -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Scade densitatea semnalelor plasate prin tragerea cu mouse-ul +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Redu distanța semnalelor plasate prin tragerea cu mouse-ul STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Creşte densitatea semnalelor plasate prin tragerea cu mouse-ul # Bridge selection window @@ -2649,7 +2656,12 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Echipa OpenTTD # Framerate display window +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Număr de evenimente de joc simulate per secundă. +STR_FRAMERATE_AVERAGE :{WHITE}Medie +STR_FRAMERATE_DATA_POINTS :{BLACK}Date bazate pe măsurători {COMMA} +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms ############ Leave those lines in this order!! +STR_FRAMERATE_VIDEO :{BLACK}Ieșire video: ############ End of leave-in-this-order ############ Leave those lines in this order!! ############ End of leave-in-this-order @@ -2940,6 +2952,7 @@ STR_TOWN_POPULATION :{BLACK}Populaţ STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Metropolă) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Populaţia: {ORANGE}{COMMA}{BLACK} Locuinţe: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} luna trecută: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Transporturi necesare dezvoltării oraşului: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} necesare STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} necesare iarna @@ -3297,15 +3310,18 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupuri STR_GROUP_CREATE_TOOLTIP :{BLACK}Click pentru a creea un grup STR_GROUP_DELETE_TOOLTIP :{BLACK}Şterge grupul selectat STR_GROUP_RENAME_TOOLTIP :{BLACK}Redenumeşte grupul selectat +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Schimbă uniforma grupului selectat STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Click aici pentru a proteja acest grup de la înlocuirile automate globale STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Şterge Grup +STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Sigur dorești ștergerea grupului și a descendenților lui? STR_GROUP_ADD_SHARED_VEHICLE :Adaugă vehicule partajate STR_GROUP_REMOVE_ALL_VEHICLES :Elimină toate vehiculele STR_GROUP_RENAME_CAPTION :{BLACK}Redenumeşte un grup +STR_GROUP_OCCUPANCY :Utilizare curentă: # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Noi vehicule feroviare diff --git a/src/lang/russian.txt b/src/lang/russian.txt index ccc3c96202..eaa07783f7 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -316,6 +316,7 @@ STR_COLOUR_BROWN :Коричне STR_COLOUR_GREY :Серый STR_COLOUR_WHITE :Белый STR_COLOUR_RANDOM :Случайный +STR_COLOUR_DEFAULT :По умолчанию # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}мил{P я и ь}/ч @@ -3600,6 +3601,7 @@ 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_LIVERY_TOOLTIP :{BLACK}Изменить цвет выбранной группы STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Защита транспорта в группе от глобальной автозамены STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Удаление группы diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 0409dfa106..fbe369ce82 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -2871,6 +2871,8 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versión STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Mín. versión compatible: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Por Defecto (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Por Defecto (D) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parámetros: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PARAMETER_NONE :Ninguno @@ -3332,6 +3334,7 @@ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivel de STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La industria ha anunciado su cierre inminente! STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Requiere: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produce: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necesita: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index c1790863fb..40319f6cdc 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -717,8 +717,8 @@ STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Visa god STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Visa transportrutter på kartan STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Visa vegetation på kartan STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Visa markägare på kartan -STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Klicka på en typ av industri för att växla om den visas. Ctrl+Klick visar inga andra typer av industrier. Ctrl+Klick igen visar alla typer av industrier. -STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Klicka på ett företag för att växla om det företagets egendomar visas. Ctrl+Klick visar inga företag utom det valda. Ctrl+Klick igen visar alla företag. +STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Klicka på en typ av industri för att växla om den visas. Ctrl+klick visar inga andra typer av industrier. Ctrl+klick igen visar alla typer av industrier. +STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Klicka på ett företag för att växla om det företagets egendomar visas. Ctrl+klick visar inga företag utom det valda. Ctrl+klick igen visar alla företag. STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Klicka på en godstyp för att växla visning av dess egenskap. Ctrl+klick stänger av alla godstyper utom den valda. Ctrl+klicka igen för att aktivera alla godstyper STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Vägar @@ -977,13 +977,13 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_12_MONTHS :Var 12:e månad ############ end of autosave dropdown STR_GAME_OPTIONS_LANGUAGE :{BLACK}Språk -STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Välj språk att använda +STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Välj vilket språk som ska användas STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Helskärm STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Kryssa i den här rutan för att spela OpenTTD i helskärmsläge STR_GAME_OPTIONS_RESOLUTION :{BLACK}Skärmupplösning -STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Välj skärmupplösning att använda +STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Välj vilken skärmupplösning som ska användas STR_GAME_OPTIONS_RESOLUTION_OTHER :annan STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Gränssnittstorlek @@ -999,11 +999,11 @@ STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} sakn STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Ytterligare information om basgrafik-set STR_GAME_OPTIONS_BASE_SFX :{BLACK}Grundljudspaket -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Välj grundljudspaket att använda +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Välj vilket grundljudspaket som ska användas STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Ytterligare information om grundljudpaketet STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Musikpaket valt -STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Välj vilket musikpaket att använda +STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Välj vilket musikpaket som ska användas STR_GAME_OPTIONS_BASE_MUSIC_STATUS :{RED}{NUM} fil{P "" er} korrupt{P "" a} STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Yttligare information om musikpaketet @@ -1413,7 +1413,7 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Visa ankomster STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Visa förväntade ankomst- och avgångstider i tidtabeller STR_CONFIG_SETTING_QUICKGOTO :Snabbskapande av fordonsorder: {STRING} STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Förvälj 'åk till'-pekaren när orderfönstret öppnas -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Standard järnvägsräls (efter nytt/laddat spel): {STRING} +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Standardspår-typ (efter nytt/laddat spel): {STRING} STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Spårtyp som ska förväljas efter att ett spel startas eller laddas. 'Först tillgängliga' väljer den äldsta spårtypen, 'Senast tillgängliga' väljer den nyaste spårtypen och 'Mest använda' väljer den spårtyp som för närvarande är mest använd STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :Först tillgängliga STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Senast tillgängliga @@ -1546,7 +1546,7 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Välj vilket å STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Använd signal-GUI: {STRING} STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Visa ett fönster för att välja signaltyp att bygga, istället för enbart fönsterlös signaltyps-rotation genom Ctrl+klick på byggda signaler STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Standardsignal-typ: {STRING} -STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Signaltyp att använda som standard +STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Signaltyp som ska användas som standard STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Normal STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :Avancerad STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :Avancerad envägssignal @@ -1682,7 +1682,7 @@ STR_CONFIG_SETTING_GRAPHICS :{ORANGE}Grafik STR_CONFIG_SETTING_SOUND :{ORANGE}Ljud STR_CONFIG_SETTING_INTERFACE :{ORANGE}Gränssnitt STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE}Generelt -STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :{ORANGE}Vyportar +STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :{ORANGE}Vyfönster STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}Konstruktion STR_CONFIG_SETTING_ADVISORS :{ORANGE} Nyheter / Rådgivare STR_CONFIG_SETTING_COMPANY :{ORANGE}Företag @@ -1829,7 +1829,7 @@ STR_LIVERY_SHIP_TOOLTIP :{BLACK}Visa fä STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Visa färgschema för flygplan STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Välj huvudfärg för det aktuella schemat. Ctrl+klick kommer att välja färgen för alla scheman STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Välj andravalsfärgen för det aktuella schemat. Ctrl+klick kommer att välja färgen för alla scheman -STR_LIVERY_PANEL_TOOLTIP :{BLACK}Välj ett färgschema att ändra eller välj flera genom CTRL+klick. Bocka för rutan för att använda scheman +STR_LIVERY_PANEL_TOOLTIP :{BLACK}Välj ett färgschema att ändra eller välj flera genom Ctrl+klick. Bocka för rutan för att använda scheman STR_LIVERY_DEFAULT :Normalt färgschema STR_LIVERY_STEAM :Ånglok @@ -2342,8 +2342,8 @@ STR_RAIL_NAME_MONORAIL :Monorail STR_RAIL_NAME_MAGLEV :Maglev # Rail depot construction window -STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Riktning för depå -STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Välj riktning för depå +STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Riktning för tågdepå +STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Välj riktning för tågdepå # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Riktmärke @@ -2356,7 +2356,7 @@ STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP :{BLACK}Välj ri STR_STATION_BUILD_NUMBER_OF_TRACKS :{BLACK}Antal spår STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Välj antal plattformar för järnvägsstation STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}Längd på plattform -STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Välj längden på järnvägsstation +STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Välj längd på järnvägsstation STR_STATION_BUILD_DRAG_DROP :{BLACK}Drag & Släpp STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bygg en station genom att dra & släppa @@ -2408,7 +2408,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Bygg vä STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Bygg spårvägssektion. Ctrl växlar mellan att bygga/ta bort spårvagnssektion. Shift växlar mellan att bygga/visa beräknad kostnad STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Använd Automatvägläge för att bygga vägsektion. Ctrl växlar mellan att bygga/ta bort vägkonstruktion. Shift växlar mellan att bygga/visa beräknad kostnad STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Använd Automatspårläge för att bygga spårväg. Ctrl växlar mellan bygg/ta bort spårväg. Shift växlar mellan att bygga/visa beräknad kostnad -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Bygg bussgarage (för konstruktion eller service av vägfordon). Shift växlar mellan att bygga/visa beräknad kostnad +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Bygg vägfordonsdepå (för konstruktion och service av vägfordon). Shift växlar mellan att bygga/visa beräknad kostnad STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Bygg spårvagnsdepå (för konstruktion och service av fordon). Shift växlar mellan att bygga/visa beräknad kostnad STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Bygg busshållplats. Ctrl aktiverar sammansättning av stationer. Shift växlar mellan att bygga/visa beräknad kostnad STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Bygg passagerarspårvagnsstation. Ctrl aktiverar sammansättning av stationer. Shift växlar mellan att bygga/visa beräknad kostnad @@ -2423,10 +2423,10 @@ STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Växla m STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Växla mellan att bygga/riva spårväg # Road depot construction window -STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Riktning för bussgarage -STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP :{BLACK}Välj riktning för bussgarage -STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}Spårvagnsdepåns orientering -STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Välj spårvagnsdepåns orientering +STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Riktning för vägfordonsdepå +STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP :{BLACK}Välj riktning för vägfordonsdepå +STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}Riktning för spårvagnsdepå +STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Välj riktning för spårvagnsdepå # Road vehicle station construction window STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Riktining för busshållplats @@ -2434,9 +2434,9 @@ STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Välj ri STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Riktning för lastbrygga STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Välj riktning för lastbrygga STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Riktning för passagerarspårvagnsstation -STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Välj passagerarspårvagnsstationens orientering +STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Välj riktning för passagerarspårvagnsstation STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Riktning för godspårvagnsstation -STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Välj godsspårvagnsstationens orientering +STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Välj riktning för godsspårvagnsstation # Waterways toolbar (last two for SE only) STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Farledskonstruktion @@ -2451,8 +2451,8 @@ STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Definier STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Placera flod # Ship depot construction window -STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Orientering för Skeppsvarv -STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP :{BLACK}Välj skeppsvarvets orientering +STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Riktning för skeppsvarv +STR_DEPOT_BUILD_SHIP_ORIENTATION_TOOLTIP :{BLACK}Välj riktning för skeppsvarv # Dock construction window STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Hamn @@ -2644,7 +2644,7 @@ STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Järnvägsdepå STR_LAI_ROAD_DESCRIPTION_ROAD :Väg STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Väg med gatubelysning STR_LAI_ROAD_DESCRIPTION_TREE_LINED_ROAD :Väg kantad av träd -STR_LAI_ROAD_DESCRIPTION_ROAD_VEHICLE_DEPOT :Bussgarage +STR_LAI_ROAD_DESCRIPTION_ROAD_VEHICLE_DEPOT :Vägfordonsdepå STR_LAI_ROAD_DESCRIPTION_ROAD_RAIL_LEVEL_CROSSING :Väg-/Järnvägskorsning STR_LAI_ROAD_DESCRIPTION_TRAMWAY :Spårväg @@ -2735,6 +2735,7 @@ STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Flygpl STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Världs-tick: STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Länkgrafens fördröjning: STR_FRAMERATE_DRAWING :{BLACK}Grafikåtergivning: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Vyfönster: STR_FRAMERATE_VIDEO :{BLACK}Videoutmatning: STR_FRAMERATE_SOUND :{BLACK}Ljudmixning: ############ End of leave-in-this-order @@ -2748,6 +2749,7 @@ STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Flygplans-tick STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Världs-tick STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Länkgrafens fördröjning STR_FRAMETIME_CAPTION_DRAWING :Grafikåtergivning +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Återgivning av vyer STR_FRAMETIME_CAPTION_VIDEO :Videoutmatning STR_FRAMETIME_CAPTION_SOUND :Ljudmixning ############ End of leave-in-this-order @@ -2909,7 +2911,7 @@ STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Ej kompati STR_SAVE_PRESET_CAPTION :{WHITE}Spara förinställning STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Lista över tillgängliga förinställningar, väljer man att kopiera den till spara namn nedan STR_SAVE_PRESET_TITLE :{BLACK}Skriv in ett namn -STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}För tillfället vald namn för förinställningen att spara +STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Nuvarande valt namn för förinställningen att spara STR_SAVE_PRESET_CANCEL :{BLACK}Avbryt STR_SAVE_PRESET_CANCEL_TOOLTIP :{BLACK}Ändra inte det förinställda STR_SAVE_PRESET_SAVE :{BLACK}Spara @@ -3520,7 +3522,7 @@ STR_DEPOT_RENAME_DEPOT_CAPTION :Byt namn på te STR_DEPOT_NO_ENGINE :{BLACK}- STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING} -STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} fordon{P "" s}{STRING} +STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} fordon{STRING} STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Tåg - drag vagn/lok för att lägga till/ta bort från tåg. Högerklicka på tåg för information. Håll Ctrl nedtryckt för att respektive funktion även ska gälla resten av tåget @@ -3546,7 +3548,7 @@ STR_DEPOT_AUTOREPLACE_SHIP_TOOLTIP :{BLACK}Byt ut a STR_DEPOT_AUTOREPLACE_AIRCRAFT_TOOLTIP :{BLACK}Byt ut alla flygplan i hangaren STR_DEPOT_TRAIN_NEW_VEHICLES_BUTTON :{BLACK}Nytt fordon -STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_BUTTON :{BLACK}Nytt Fordon +STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_BUTTON :{BLACK}Nytt fordon STR_DEPOT_SHIP_NEW_VEHICLES_BUTTON :{BLACK}Nytt skepp STR_DEPOT_AIRCRAFT_NEW_VEHICLES_BUTTON :{BLACK}Nytt flygplan @@ -3566,7 +3568,7 @@ STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Köper e STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Köper en kopia av ett flygplan. Tryck på den här knappen och sedan på ett flygplan i eller utanför hangaren. Ctrl+klick gör så att de delar order. Shift+klick visar kostnad utan att köpa STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centrera huvudvyn ovanför depån. Ctrl+klick öppnar en ny vy över depåns läge -STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centrera huvudvyn ovanför bussgaraget. Ctrl+klick öppnar en ny vy över bussgaragets läge +STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centrera huvudvyn ovanför vägfordonsdepån. Ctrl+klick öppnar en ny vy över vägfordonsdepåns läge STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Centrera huvudvyn ovanför skeppdepån. Ctrl+klick öppnar en ny vy över skeppdepåns läge STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrera huvudvyn ovanför hangaren. Ctrl+klick öppnar en ny vy över hangarens läge @@ -3583,7 +3585,7 @@ STR_DEPOT_MASS_STOP_HANGAR_TOOLTIP :{BLACK}Klicka f STR_DEPOT_MASS_START_DEPOT_TRAIN_TOOLTIP :{BLACK}Klicka för att starta alla tåg i depån STR_DEPOT_MASS_START_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Klicka för att starta alla fordon i depån STR_DEPOT_MASS_START_DEPOT_SHIP_TOOLTIP :{BLACK}Klicka för att starta alla skepp i depån -STR_DEPOT_MASS_START_HANGAR_TOOLTIP :{BLACK}Klicka för att starta alla skepp i depån +STR_DEPOT_MASS_START_HANGAR_TOOLTIP :{BLACK}Klicka för att starta alla flygplan i hangaren STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Du är på väg att sälja alla fordon i depån. Är du säker? @@ -3654,9 +3656,9 @@ STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Centrera STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrera huvudvyn ovanför flygplanet. Ctrl+klick följer flygplanet i huvudvyn STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka tåg till depå. Ctrl+klick skickar tåget enbart på service -STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka fordon till depå. CTRL + klick servar endast -STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka skepp till depå. CTRL + klick servar endast -STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka flygplan till hangar. CTRL + klick servar endast +STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka fordon till depå. Ctrl+klick servar endast +STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka skepp till depå. Ctrl+klick servar endast +STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Skicka flygplan till hangar. Ctrl+klick servar endast STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Köper en kopia av tåget inklusive alla vagnar. Ctrl+klick gör så att de delar order. Shift+klick visar kostnad utan att köpa STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Köper en kopia av fordonet. Ctrl+klick gör så att de delar order. Shift+klick visar kostnad utan att köpa @@ -4329,7 +4331,7 @@ STR_ERROR_BUOY_IS_IN_USE :{WHITE}... boje # Depot related errors STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Kan inte bygga depå här... -STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Kan inte bygga bussgarage här... +STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Kan inte bygga vägfordonsdepå här... STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Kan inte bygga spårvagnsdepå här... STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Kan inte bygga skeppsdepå här... @@ -4942,8 +4944,8 @@ STR_FORMAT_WAYPOINT_NAME_SERIAL :Riktmärke {TOW STR_FORMAT_DEPOT_NAME_TRAIN :{TOWN} Järnvägsdepå STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :{TOWN} Järnvägsterminal #{COMMA} -STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :{TOWN} Vägfordonsdepå -STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :{TOWN} Vägfordons terminal #{COMMA} +STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :{TOWN} vägfordonsdepå +STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :{TOWN} vägfordonsdepå #{COMMA} STR_FORMAT_DEPOT_NAME_SHIP :{TOWN} Hamnterminal STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :{TOWN} Hamnterminal#{COMMA} STR_FORMAT_DEPOT_NAME_AIRCRAFT :{STATION} Hangar From bb9b8eb464a096e7bcffd4bcb67411d04b21aa0e Mon Sep 17 00:00:00 2001 From: glx22 Date: Thu, 31 Jan 2019 23:15:22 +0100 Subject: [PATCH 272/622] Fix #7089: Close NewGRF textfile windows when their data is invalid (#7106) --- src/newgrf_gui.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 868fad968b..5f32b5bad5 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -725,7 +725,11 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { GRFConfig *d = new GRFConfig(*a); d->next = (*c)->next; d->CopyParams(**c); - if (this->active_sel == *c) this->active_sel = NULL; + if (this->active_sel == *c) { + DeleteWindowByClass(WC_GRF_PARAMETERS); + DeleteWindowByClass(WC_TEXTFILE); + this->active_sel = NULL; + } delete *c; *c = d; iter->second = d; @@ -1022,7 +1026,10 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { GRFConfig *c; for (c = this->actives; c != NULL && i > 0; c = c->next, i--) {} - if (this->active_sel != c) DeleteWindowByClass(WC_GRF_PARAMETERS); + if (this->active_sel != c) { + DeleteWindowByClass(WC_GRF_PARAMETERS); + DeleteWindowByClass(WC_TEXTFILE); + } this->active_sel = c; this->avail_sel = NULL; this->avail_pos = -1; @@ -1039,6 +1046,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { case WID_NS_REMOVE: { // Remove GRF if (this->active_sel == NULL || !this->editable) break; DeleteWindowByClass(WC_GRF_PARAMETERS); + DeleteWindowByClass(WC_TEXTFILE); /* Choose the next GRF file to be the selected file. */ GRFConfig *newsel = this->active_sel->next; @@ -1080,6 +1088,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { this->active_sel = NULL; DeleteWindowByClass(WC_GRF_PARAMETERS); if (i < this->avails.Length()) { + if (this->avail_sel != this->avails[i]) DeleteWindowByClass(WC_TEXTFILE); this->avail_sel = this->avails[i]; this->avail_pos = i; } @@ -1152,11 +1161,11 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { virtual void OnNewGRFsScanned() { + if (this->active_sel == NULL) DeleteWindowByClass(WC_TEXTFILE); this->avail_sel = NULL; this->avail_pos = -1; this->avails.ForceRebuild(); this->DeleteChildWindows(WC_QUERY_STRING); // Remove the parameter query window - this->DeleteChildWindows(WC_TEXTFILE); // Remove the view textfile window } virtual void OnDropdownSelect(int widget, int index) @@ -1173,6 +1182,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { ResetObjectToPlace(); DeleteWindowByClass(WC_GRF_PARAMETERS); + DeleteWindowByClass(WC_TEXTFILE); this->active_sel = NULL; this->InvalidateData(GOID_NEWGRF_PRESET_LOADED); } @@ -1221,7 +1231,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { *l = new GRFConfig(*f); (*l)->next = c->next; - if (active_sel == c) active_sel = *l; + if (this->active_sel == c) this->active_sel = *l; delete c; } @@ -1347,6 +1357,9 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { if (this->avails.Length() == 0) this->avail_pos = -1; if (this->avail_pos >= 0) { + this->active_sel = NULL; + DeleteWindowByClass(WC_GRF_PARAMETERS); + if (this->avail_sel != this->avails[this->avail_pos]) DeleteWindowByClass(WC_TEXTFILE); this->avail_sel = this->avails[this->avail_pos]; this->vscroll2->ScrollTowards(this->avail_pos); this->InvalidateData(0); @@ -1509,6 +1522,8 @@ private: { if (this->avail_sel == NULL || !this->editable || HasBit(this->avail_sel->flags, GCF_INVALID)) return false; + DeleteWindowByClass(WC_TEXTFILE); + uint count = 0; GRFConfig **entry = NULL; GRFConfig **list; @@ -1968,6 +1983,7 @@ static void NewGRFConfirmationCallback(Window *w, bool confirmed) { if (confirmed) { DeleteWindowByClass(WC_GRF_PARAMETERS); + DeleteWindowByClass(WC_TEXTFILE); NewGRFWindow *nw = dynamic_cast(w); GamelogStartAction(GLAT_GRF); From 96c5e5e73adf5a0a902d0a305730eb18da0c17bd Mon Sep 17 00:00:00 2001 From: J0an Josep Date: Mon, 14 Jan 2019 22:34:59 +0100 Subject: [PATCH 273/622] Cleanup: [NPF] Remove unused parameters. --- src/pathfinder/npf/npf.cpp | 6 +++--- src/pathfinder/npf/npf_func.h | 8 ++------ src/ship_cmd.cpp | 2 +- src/train_cmd.cpp | 2 +- 4 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp index 9535ac0636..c9195c5aaa 100644 --- a/src/pathfinder/npf/npf.cpp +++ b/src/pathfinder/npf/npf.cpp @@ -1154,7 +1154,7 @@ Trackdir NPFRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDir /*** Ships ***/ -Track NPFShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found) +Track NPFShipChooseTrack(const Ship *v, TrackBits tracks, bool &path_found) { NPFFindStationOrTileData fstd; Trackdir trackdir = v->GetVehicleTrackdir(); @@ -1163,7 +1163,7 @@ Track NPFShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, NPFFillWithOrderData(&fstd, v); AyStarUserData user = { v->owner, TRANSPORT_WATER, INVALID_RAILTYPES, ROADTYPES_NONE }; - NPFFoundTargetData ftd = NPFRouteToStationOrTile(tile - TileOffsByDiagDir(enterdir), trackdir, true, &fstd, &user); + NPFFoundTargetData ftd = NPFRouteToStationOrTile(v->tile, trackdir, true, &fstd, &user); /* If ftd.best_bird_dist is 0, we found our target and ftd.best_trackdir contains * the direction we need to take to get there, if ftd.best_bird_dist is not 0, @@ -1256,7 +1256,7 @@ bool NPFTrainCheckReverse(const Train *v) return ftd.best_bird_dist == 0 && NPFGetFlag(&ftd.node, NPF_FLAG_REVERSE); } -Track NPFTrainChooseTrack(const Train *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, bool reserve_track, struct PBSTileInfo *target) +Track NPFTrainChooseTrack(const Train *v, TrackBits tracks, bool &path_found, bool reserve_track, struct PBSTileInfo *target) { NPFFindStationOrTileData fstd; NPFFillWithOrderData(&fstd, v, reserve_track); diff --git a/src/pathfinder/npf/npf_func.h b/src/pathfinder/npf/npf_func.h index 6507f4ec58..366727f9ce 100644 --- a/src/pathfinder/npf/npf_func.h +++ b/src/pathfinder/npf/npf_func.h @@ -41,13 +41,11 @@ Trackdir NPFRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDir /** * Finds the best path for given ship using NPF. * @param v the ship that needs to find a path - * @param tile the tile to find the path from (should be next tile the ship is about to enter) - * @param enterdir diagonal direction which the ship will enter this new tile from * @param tracks available tracks on the new tile (to choose from) * @param path_found [out] Whether a path has been found (true) or has been guessed (false) * @return the best trackdir for next turn or INVALID_TRACK if the path could not be found */ -Track NPFShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found); +Track NPFShipChooseTrack(const Ship *v, TrackBits tracks, bool &path_found); /** * Returns true if it is better to reverse the ship before leaving depot using NPF. @@ -87,14 +85,12 @@ bool NPFTrainCheckReverse(const Train *v); /** * Finds the best path for given train using NPF. * @param v the train that needs to find a path - * @param tile the tile to find the path from (should be next tile the train is about to enter) - * @param enterdir diagonal direction which the RV will enter this new tile from * @param tracks available trackdirs on the new tile (to choose from) * @param path_found [out] Whether a path has been found (true) or has been guessed (false) * @param reserve_track indicates whether YAPF should try to reserve the found path * @param target [out] the target tile of the reservation, free is set to true if path was reserved * @return the best track for next turn */ -Track NPFTrainChooseTrack(const Train *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, bool reserve_track, struct PBSTileInfo *target); +Track NPFTrainChooseTrack(const Train *v, TrackBits tracks, bool &path_found, bool reserve_track, struct PBSTileInfo *target); #endif /* NPF_FUNC_H */ diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index ec0d430896..56949ddf54 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -491,7 +491,7 @@ static Track ChooseShipTrack(Ship *v, TileIndex tile, DiagDirection enterdir, Tr switch (_settings_game.pf.pathfinder_for_ships) { case VPF_OPF: track = OPFShipChooseTrack(v, tile, enterdir, tracks, path_found); break; - case VPF_NPF: track = NPFShipChooseTrack(v, tile, enterdir, tracks, path_found); break; + case VPF_NPF: track = NPFShipChooseTrack(v, tracks, path_found); break; case VPF_YAPF: track = YapfShipChooseTrack(v, tile, enterdir, tracks, path_found, v->path); break; default: NOT_REACHED(); } diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 01aa946edb..5e715a373c 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -2313,7 +2313,7 @@ static const byte _initial_tile_subcoord[6][4][3] = { static Track DoTrainPathfind(const Train *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, bool do_track_reservation, PBSTileInfo *dest) { switch (_settings_game.pf.pathfinder_for_trains) { - case VPF_NPF: return NPFTrainChooseTrack(v, tile, enterdir, tracks, path_found, do_track_reservation, dest); + case VPF_NPF: return NPFTrainChooseTrack(v, tracks, path_found, do_track_reservation, dest); case VPF_YAPF: return YapfTrainChooseTrack(v, tile, enterdir, tracks, path_found, do_track_reservation, dest); default: NOT_REACHED(); From 19be1f4ace00f784270218cdb4041f302d2198c9 Mon Sep 17 00:00:00 2001 From: J0an Josep Date: Mon, 14 Jan 2019 23:13:12 +0100 Subject: [PATCH 274/622] Codechange: [NPF] Add some consts. --- src/landscape.cpp | 2 +- src/pathfinder/npf/aystar.h | 2 +- src/pathfinder/npf/npf.cpp | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/landscape.cpp b/src/landscape.cpp index 991a445ad8..2f14a69e4b 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -1098,7 +1098,7 @@ static bool FlowsDown(TileIndex begin, TileIndex end) } /* AyStar callback for checking whether we reached our destination. */ -static int32 River_EndNodeCheck(AyStar *aystar, OpenListNode *current) +static int32 River_EndNodeCheck(const AyStar *aystar, const OpenListNode *current) { return current->path.node.tile == *(TileIndex*)aystar->user_target ? AYSTAR_FOUND_END_NODE : AYSTAR_DONE; } diff --git a/src/pathfinder/npf/aystar.h b/src/pathfinder/npf/aystar.h index 4ee9df3329..052feb6e83 100644 --- a/src/pathfinder/npf/aystar.h +++ b/src/pathfinder/npf/aystar.h @@ -75,7 +75,7 @@ struct AyStar; * - #AYSTAR_FOUND_END_NODE : indicates this is the end tile * - #AYSTAR_DONE : indicates this is not the end tile (or direction was wrong) */ -typedef int32 AyStar_EndNodeCheck(AyStar *aystar, OpenListNode *current); +typedef int32 AyStar_EndNodeCheck(const AyStar *aystar, const OpenListNode *current); /** * Calculate the G-value for the %AyStar algorithm. diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp index c9195c5aaa..93c5f947a7 100644 --- a/src/pathfinder/npf/npf.cpp +++ b/src/pathfinder/npf/npf.cpp @@ -529,7 +529,7 @@ static int32 NPFRailPathCost(AyStar *as, AyStarNode *current, OpenListNode *pare } /* Will find any depot */ -static int32 NPFFindDepot(AyStar *as, OpenListNode *current) +static int32 NPFFindDepot(const AyStar *as, const OpenListNode *current) { AyStarUserData *user = (AyStarUserData *)as->user_data; /* It's not worth caching the result with NPF_FLAG_IS_TARGET here as below, @@ -539,7 +539,7 @@ static int32 NPFFindDepot(AyStar *as, OpenListNode *current) } /** Find any safe and free tile. */ -static int32 NPFFindSafeTile(AyStar *as, OpenListNode *current) +static int32 NPFFindSafeTile(const AyStar *as, const OpenListNode *current) { const Train *v = Train::From(((NPFFindStationOrTileData *)as->user_target)->v); @@ -549,10 +549,10 @@ static int32 NPFFindSafeTile(AyStar *as, OpenListNode *current) } /* Will find a station identified using the NPFFindStationOrTileData */ -static int32 NPFFindStationOrTile(AyStar *as, OpenListNode *current) +static int32 NPFFindStationOrTile(const AyStar *as, const OpenListNode *current) { NPFFindStationOrTileData *fstd = (NPFFindStationOrTileData*)as->user_target; - AyStarNode *node = ¤t->path.node; + const AyStarNode *node = ¤t->path.node; TileIndex tile = node->tile; if (fstd->station_index == INVALID_STATION && tile == fstd->dest_coords) return AYSTAR_FOUND_END_NODE; From aa63517c92e34facde14b0dc97850499a3ad42d3 Mon Sep 17 00:00:00 2001 From: J0an Josep Date: Mon, 14 Jan 2019 23:14:44 +0100 Subject: [PATCH 275/622] Fix #7060: [NPF] Do not check whether ignored first tiles are end nodes. --- src/pathfinder/npf/aystar.cpp | 2 +- src/pathfinder/npf/aystar.h | 2 ++ src/pathfinder/npf/npf.cpp | 15 +++++++++------ 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/pathfinder/npf/aystar.cpp b/src/pathfinder/npf/aystar.cpp index 8bd63beb7b..beac06291f 100644 --- a/src/pathfinder/npf/aystar.cpp +++ b/src/pathfinder/npf/aystar.cpp @@ -170,7 +170,7 @@ int AyStar::Loop() if (current == NULL) return AYSTAR_EMPTY_OPENLIST; /* Check for end node and if found, return that code */ - if (this->EndNodeCheck(this, current) == AYSTAR_FOUND_END_NODE) { + if (this->EndNodeCheck(this, current) == AYSTAR_FOUND_END_NODE && !CheckIgnoreFirstTile(¤t->path)) { if (this->FoundEndNode != NULL) { this->FoundEndNode(this, current); } diff --git a/src/pathfinder/npf/aystar.h b/src/pathfinder/npf/aystar.h index 052feb6e83..890b023e83 100644 --- a/src/pathfinder/npf/aystar.h +++ b/src/pathfinder/npf/aystar.h @@ -59,6 +59,8 @@ struct OpenListNode { PathNode path; }; +bool CheckIgnoreFirstTile(const PathNode *node); + struct AyStar; /** diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp index 93c5f947a7..c9a22f5f00 100644 --- a/src/pathfinder/npf/npf.cpp +++ b/src/pathfinder/npf/npf.cpp @@ -101,6 +101,11 @@ static inline void NPFSetFlag(AyStarNode *node, NPFNodeFlag flag, bool value) SB(node->user_data[NPF_NODE_FLAGS], flag, 1, value); } +bool CheckIgnoreFirstTile(const PathNode *node) +{ + return (node->parent == NULL && HasBit(node->node.user_data[NPF_NODE_FLAGS], NPF_FLAG_IGNORE_START_TILE)); +} + /** * Calculates the minimum distance travelled to get from t0 to t1 when only * using tracks (ie, only making 45 degree turns). Returns the distance in the @@ -853,11 +858,6 @@ static void NPFFollowTrack(AyStar *aystar, OpenListNode *current) TileIndex src_tile = current->path.node.tile; DiagDirection src_exitdir = TrackdirToExitdir(src_trackdir); - /* Is src_tile valid, and can be used? - * When choosing track on a junction src_tile is the tile neighboured to the junction wrt. exitdir. - * But we must not check the validity of this move, as src_tile is totally unrelated to the move, if a roadvehicle reversed on a junction. */ - bool ignore_src_tile = (current->path.parent == NULL && NPFGetFlag(¤t->path.node, NPF_FLAG_IGNORE_START_TILE)); - /* Information about the vehicle: TransportType (road/rail/water) and SubType (compatible rail/road types) */ TransportType type = user->type; uint subtype = user->roadtypes; @@ -871,7 +871,10 @@ static void NPFFollowTrack(AyStar *aystar, OpenListNode *current) TrackdirBits trackdirbits; /* Find dest tile */ - if (ignore_src_tile) { + /* Is src_tile valid, and can be used? + * When choosing track on a junction src_tile is the tile neighboured to the junction wrt. exitdir. + * But we must not check the validity of this move, as src_tile is totally unrelated to the move, if a roadvehicle reversed on a junction. */ + if (CheckIgnoreFirstTile(¤t->path)) { /* Do not perform any checks that involve src_tile */ dst_tile = src_tile + TileOffsByDiagDir(src_exitdir); trackdirbits = GetDriveableTrackdirBits(dst_tile, src_trackdir, type, subtype); From d814dd343410bb989162aa1daece20b60aa7a737 Mon Sep 17 00:00:00 2001 From: J0an Josep Date: Mon, 14 Jan 2019 23:49:44 +0100 Subject: [PATCH 276/622] Cleanup: [NPF] Assert that a track has been chosen. --- src/pathfinder/npf/npf.cpp | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp index c9a22f5f00..76c4fc7ce8 100644 --- a/src/pathfinder/npf/npf.cpp +++ b/src/pathfinder/npf/npf.cpp @@ -1139,13 +1139,8 @@ Trackdir NPFRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDir AyStarUserData user = { v->owner, TRANSPORT_ROAD, INVALID_RAILTYPES, v->compatible_roadtypes }; NPFFoundTargetData ftd = NPFRouteToStationOrTile(tile - TileOffsByDiagDir(enterdir), trackdir, true, &fstd, &user); - if (ftd.best_trackdir == INVALID_TRACKDIR) { - /* We are already at our target. Just do something - * @todo: maybe display error? - * @todo: go straight ahead if possible? */ - path_found = true; - return (Trackdir)FindFirstBit2x64(trackdirs); - } + + assert(ftd.best_trackdir != INVALID_TRACKDIR); /* If ftd.best_bird_dist is 0, we found our target and ftd.best_trackdir contains * the direction we need to take to get there, if ftd.best_bird_dist is not 0, @@ -1168,12 +1163,13 @@ Track NPFShipChooseTrack(const Ship *v, TrackBits tracks, bool &path_found) AyStarUserData user = { v->owner, TRANSPORT_WATER, INVALID_RAILTYPES, ROADTYPES_NONE }; NPFFoundTargetData ftd = NPFRouteToStationOrTile(v->tile, trackdir, true, &fstd, &user); + assert(ftd.best_trackdir != INVALID_TRACKDIR); + /* If ftd.best_bird_dist is 0, we found our target and ftd.best_trackdir contains * the direction we need to take to get there, if ftd.best_bird_dist is not 0, * we did not find our target, but ftd.best_trackdir contains the direction leading * to the tile closest to our target. */ path_found = (ftd.best_bird_dist == 0); - if (ftd.best_trackdir == INVALID_TRACKDIR) return INVALID_TRACK; return TrackdirToTrack(ftd.best_trackdir); } @@ -1276,13 +1272,7 @@ Track NPFTrainChooseTrack(const Train *v, TrackBits tracks, bool &path_found, bo target->okay = ftd.res_okay; } - if (ftd.best_trackdir == INVALID_TRACKDIR) { - /* We are already at our target. Just do something - * @todo maybe display error? - * @todo: go straight ahead if possible? */ - path_found = true; - return FindFirstTrack(tracks); - } + assert(ftd.best_trackdir != INVALID_TRACKDIR); /* If ftd.best_bird_dist is 0, we found our target and ftd.best_trackdir contains * the direction we need to take to get there, if ftd.best_bird_dist is not 0, From 029c48cf4a03b69838f3b347d0dcea9582f919e1 Mon Sep 17 00:00:00 2001 From: J0an Josep Date: Tue, 15 Jan 2019 00:09:04 +0100 Subject: [PATCH 277/622] Cleanup: [NPF] Remove unused parameter. --- src/pathfinder/npf/npf.cpp | 6 +++--- src/pathfinder/npf/npf_func.h | 9 +++------ src/roadveh_cmd.cpp | 2 +- src/ship_cmd.cpp | 2 +- src/train_cmd.cpp | 2 +- 5 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp index 76c4fc7ce8..7d19d4ef1d 100644 --- a/src/pathfinder/npf/npf.cpp +++ b/src/pathfinder/npf/npf.cpp @@ -1130,7 +1130,7 @@ FindDepotData NPFRoadVehicleFindNearestDepot(const RoadVehicle *v, int max_penal return FindDepotData(ftd.node.tile, ftd.best_path_dist); } -Trackdir NPFRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, TrackdirBits trackdirs, bool &path_found) +Trackdir NPFRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, bool &path_found) { NPFFindStationOrTileData fstd; @@ -1152,7 +1152,7 @@ Trackdir NPFRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDir /*** Ships ***/ -Track NPFShipChooseTrack(const Ship *v, TrackBits tracks, bool &path_found) +Track NPFShipChooseTrack(const Ship *v, bool &path_found) { NPFFindStationOrTileData fstd; Trackdir trackdir = v->GetVehicleTrackdir(); @@ -1255,7 +1255,7 @@ bool NPFTrainCheckReverse(const Train *v) return ftd.best_bird_dist == 0 && NPFGetFlag(&ftd.node, NPF_FLAG_REVERSE); } -Track NPFTrainChooseTrack(const Train *v, TrackBits tracks, bool &path_found, bool reserve_track, struct PBSTileInfo *target) +Track NPFTrainChooseTrack(const Train *v, bool &path_found, bool reserve_track, struct PBSTileInfo *target) { NPFFindStationOrTileData fstd; NPFFillWithOrderData(&fstd, v, reserve_track); diff --git a/src/pathfinder/npf/npf_func.h b/src/pathfinder/npf/npf_func.h index 366727f9ce..2429989ab9 100644 --- a/src/pathfinder/npf/npf_func.h +++ b/src/pathfinder/npf/npf_func.h @@ -32,20 +32,18 @@ FindDepotData NPFRoadVehicleFindNearestDepot(const RoadVehicle *v, int max_penal * @param v the RV that needs to find a path * @param tile the tile to find the path from (should be next tile the RV is about to enter) * @param enterdir diagonal direction which the RV will enter this new tile from - * @param trackdirs available trackdirs on the new tile (to choose from) * @param path_found [out] Whether a path has been found (true) or has been guessed (false) * @return the best trackdir for next turn or INVALID_TRACKDIR if the path could not be found */ -Trackdir NPFRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, TrackdirBits trackdirs, bool &path_found); +Trackdir NPFRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, bool &path_found); /** * Finds the best path for given ship using NPF. * @param v the ship that needs to find a path - * @param tracks available tracks on the new tile (to choose from) * @param path_found [out] Whether a path has been found (true) or has been guessed (false) * @return the best trackdir for next turn or INVALID_TRACK if the path could not be found */ -Track NPFShipChooseTrack(const Ship *v, TrackBits tracks, bool &path_found); +Track NPFShipChooseTrack(const Ship *v, bool &path_found); /** * Returns true if it is better to reverse the ship before leaving depot using NPF. @@ -85,12 +83,11 @@ bool NPFTrainCheckReverse(const Train *v); /** * Finds the best path for given train using NPF. * @param v the train that needs to find a path - * @param tracks available trackdirs on the new tile (to choose from) * @param path_found [out] Whether a path has been found (true) or has been guessed (false) * @param reserve_track indicates whether YAPF should try to reserve the found path * @param target [out] the target tile of the reservation, free is set to true if path was reserved * @return the best track for next turn */ -Track NPFTrainChooseTrack(const Train *v, TrackBits tracks, bool &path_found, bool reserve_track, struct PBSTileInfo *target); +Track NPFTrainChooseTrack(const Train *v, bool &path_found, bool reserve_track, struct PBSTileInfo *target); #endif /* NPF_FUNC_H */ diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index bd7dced9bf..9704770016 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -958,7 +958,7 @@ static Trackdir RoadFindPathToDest(RoadVehicle *v, TileIndex tile, DiagDirection } switch (_settings_game.pf.pathfinder_for_roadvehs) { - case VPF_NPF: best_track = NPFRoadVehicleChooseTrack(v, tile, enterdir, trackdirs, path_found); break; + case VPF_NPF: best_track = NPFRoadVehicleChooseTrack(v, tile, enterdir, path_found); break; case VPF_YAPF: best_track = YapfRoadVehicleChooseTrack(v, tile, enterdir, trackdirs, path_found); break; default: NOT_REACHED(); diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 56949ddf54..b357fa64c2 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -491,7 +491,7 @@ static Track ChooseShipTrack(Ship *v, TileIndex tile, DiagDirection enterdir, Tr switch (_settings_game.pf.pathfinder_for_ships) { case VPF_OPF: track = OPFShipChooseTrack(v, tile, enterdir, tracks, path_found); break; - case VPF_NPF: track = NPFShipChooseTrack(v, tracks, path_found); break; + case VPF_NPF: track = NPFShipChooseTrack(v, path_found); break; case VPF_YAPF: track = YapfShipChooseTrack(v, tile, enterdir, tracks, path_found, v->path); break; default: NOT_REACHED(); } diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 5e715a373c..c4deedde80 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -2313,7 +2313,7 @@ static const byte _initial_tile_subcoord[6][4][3] = { static Track DoTrainPathfind(const Train *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, bool do_track_reservation, PBSTileInfo *dest) { switch (_settings_game.pf.pathfinder_for_trains) { - case VPF_NPF: return NPFTrainChooseTrack(v, tracks, path_found, do_track_reservation, dest); + case VPF_NPF: return NPFTrainChooseTrack(v, path_found, do_track_reservation, dest); case VPF_YAPF: return YapfTrainChooseTrack(v, tile, enterdir, tracks, path_found, do_track_reservation, dest); default: NOT_REACHED(); From 1e5a6765d9553d85e4acfb68999921791b8dd560 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Thu, 31 Jan 2019 23:08:03 +0000 Subject: [PATCH 278/622] Change: Give AI/GSBridge::GetName an extra parameter to refer the vehicle type (#6988) --- bin/ai/compat_0.7.nut | 7 ++ bin/ai/compat_1.0.nut | 7 ++ bin/ai/compat_1.1.nut | 7 ++ bin/ai/compat_1.2.nut | 7 ++ bin/ai/compat_1.3.nut | 7 ++ bin/ai/compat_1.4.nut | 7 ++ bin/ai/compat_1.5.nut | 7 ++ bin/ai/compat_1.6.nut | 7 ++ bin/ai/compat_1.7.nut | 7 ++ bin/ai/compat_1.8.nut | 7 ++ bin/ai/regression/tst_regression/main.nut | 6 +- bin/ai/regression/tst_regression/result.txt | 90 +++++++++++++++++---- bin/game/compat_1.2.nut | 7 ++ bin/game/compat_1.3.nut | 7 ++ bin/game/compat_1.4.nut | 7 ++ bin/game/compat_1.5.nut | 7 ++ bin/game/compat_1.6.nut | 7 ++ bin/game/compat_1.7.nut | 7 ++ bin/game/compat_1.8.nut | 7 ++ src/script/api/ai/ai_bridge.hpp.sq | 2 +- src/script/api/ai_changelog.hpp | 3 + src/script/api/game/game_bridge.hpp.sq | 2 +- src/script/api/game_changelog.hpp | 3 + src/script/api/script_bridge.cpp | 6 +- src/script/api/script_bridge.hpp | 4 +- 25 files changed, 214 insertions(+), 21 deletions(-) diff --git a/bin/ai/compat_0.7.nut b/bin/ai/compat_0.7.nut index 44e6acff9d..98c03c6731 100644 --- a/bin/ai/compat_0.7.nut +++ b/bin/ai/compat_0.7.nut @@ -367,3 +367,10 @@ AIOrder.AIOF_UNLOAD_FLAGS <- AIOrder.OF_UNLOAD_FLAGS AIOrder.AIOF_LOAD_FLAGS <- AIOrder.OF_LOAD_FLAGS AIOrder.AIOF_DEPOT_FLAGS <- AIOrder.OF_DEPOT_FLAGS AIOrder.AIOF_INVALID <- AIOrder.OF_INVALID + +/* 1.9 adds a vehicle type parameter. */ +AIBridge._GetName <- AIBridge.GetName; +AIBridge.GetName <- function(bridge_id) +{ + return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL); +} diff --git a/bin/ai/compat_1.0.nut b/bin/ai/compat_1.0.nut index 5e7dd441f6..627c949cc3 100644 --- a/bin/ai/compat_1.0.nut +++ b/bin/ai/compat_1.0.nut @@ -119,3 +119,10 @@ AIOrder.AIOF_UNLOAD_FLAGS <- AIOrder.OF_UNLOAD_FLAGS AIOrder.AIOF_LOAD_FLAGS <- AIOrder.OF_LOAD_FLAGS AIOrder.AIOF_DEPOT_FLAGS <- AIOrder.OF_DEPOT_FLAGS AIOrder.AIOF_INVALID <- AIOrder.OF_INVALID + +/* 1.9 adds a vehicle type parameter. */ +AIBridge._GetName <- AIBridge.GetName; +AIBridge.GetName <- function(bridge_id) +{ + return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL); +} diff --git a/bin/ai/compat_1.1.nut b/bin/ai/compat_1.1.nut index 32127b438a..a47f3d5b16 100644 --- a/bin/ai/compat_1.1.nut +++ b/bin/ai/compat_1.1.nut @@ -56,3 +56,10 @@ AIOrder.AIOF_UNLOAD_FLAGS <- AIOrder.OF_UNLOAD_FLAGS AIOrder.AIOF_LOAD_FLAGS <- AIOrder.OF_LOAD_FLAGS AIOrder.AIOF_DEPOT_FLAGS <- AIOrder.OF_DEPOT_FLAGS AIOrder.AIOF_INVALID <- AIOrder.OF_INVALID + +/* 1.9 adds a vehicle type parameter. */ +AIBridge._GetName <- AIBridge.GetName; +AIBridge.GetName <- function(bridge_id) +{ + return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL); +} diff --git a/bin/ai/compat_1.2.nut b/bin/ai/compat_1.2.nut index 0082415e49..95ccabda24 100644 --- a/bin/ai/compat_1.2.nut +++ b/bin/ai/compat_1.2.nut @@ -8,3 +8,10 @@ */ AILog.Info("1.2 API compatibility in effect."); + +/* 1.9 adds a vehicle type parameter. */ +AIBridge._GetName <- AIBridge.GetName; +AIBridge.GetName <- function(bridge_id) +{ + return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL); +} diff --git a/bin/ai/compat_1.3.nut b/bin/ai/compat_1.3.nut index 036f3b5c34..fc8e06bf5e 100644 --- a/bin/ai/compat_1.3.nut +++ b/bin/ai/compat_1.3.nut @@ -8,3 +8,10 @@ */ AILog.Info("1.3 API compatibility in effect."); + +/* 1.9 adds a vehicle type parameter. */ +AIBridge._GetName <- AIBridge.GetName; +AIBridge.GetName <- function(bridge_id) +{ + return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL); +} diff --git a/bin/ai/compat_1.4.nut b/bin/ai/compat_1.4.nut index 3829bcc8e0..169ead959d 100644 --- a/bin/ai/compat_1.4.nut +++ b/bin/ai/compat_1.4.nut @@ -8,3 +8,10 @@ */ AILog.Info("1.4 API compatibility in effect."); + +/* 1.9 adds a vehicle type parameter. */ +AIBridge._GetName <- AIBridge.GetName; +AIBridge.GetName <- function(bridge_id) +{ + return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL); +} diff --git a/bin/ai/compat_1.5.nut b/bin/ai/compat_1.5.nut index 71a46ff7a0..681a708bee 100644 --- a/bin/ai/compat_1.5.nut +++ b/bin/ai/compat_1.5.nut @@ -8,3 +8,10 @@ */ AILog.Info("1.5 API compatibility in effect."); + +/* 1.9 adds a vehicle type parameter. */ +AIBridge._GetName <- AIBridge.GetName; +AIBridge.GetName <- function(bridge_id) +{ + return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL); +} diff --git a/bin/ai/compat_1.6.nut b/bin/ai/compat_1.6.nut index 8fb518e1b5..5242821d1d 100644 --- a/bin/ai/compat_1.6.nut +++ b/bin/ai/compat_1.6.nut @@ -8,3 +8,10 @@ */ AILog.Info("1.6 API compatibility in effect."); + +/* 1.9 adds a vehicle type parameter. */ +AIBridge._GetName <- AIBridge.GetName; +AIBridge.GetName <- function(bridge_id) +{ + return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL); +} diff --git a/bin/ai/compat_1.7.nut b/bin/ai/compat_1.7.nut index 6eb0c980ea..93884e6637 100644 --- a/bin/ai/compat_1.7.nut +++ b/bin/ai/compat_1.7.nut @@ -8,3 +8,10 @@ */ AILog.Info("1.7 API compatibility in effect."); + +/* 1.9 adds a vehicle type parameter. */ +AIBridge._GetName <- AIBridge.GetName; +AIBridge.GetName <- function(bridge_id) +{ + return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL); +} diff --git a/bin/ai/compat_1.8.nut b/bin/ai/compat_1.8.nut index 95ab6a76dd..f3fa1bc0a6 100644 --- a/bin/ai/compat_1.8.nut +++ b/bin/ai/compat_1.8.nut @@ -8,3 +8,10 @@ */ AILog.Info("1.8 API compatibility in effect."); + +/* 1.9 adds a vehicle type parameter. */ +AIBridge._GetName <- AIBridge.GetName; +AIBridge.GetName <- function(bridge_id) +{ + return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL); +} diff --git a/bin/ai/regression/tst_regression/main.nut b/bin/ai/regression/tst_regression/main.nut index d36db03da7..8b92b6f881 100644 --- a/bin/ai/regression/tst_regression/main.nut +++ b/bin/ai/regression/tst_regression/main.nut @@ -253,7 +253,11 @@ function Regression::Bridge() if (AIBridge.IsValidBridge(i)) j++; print(" Bridge " + i); print(" IsValidBridge(): " + AIBridge.IsValidBridge(i)); - print(" GetName(): " + AIBridge.GetName(i)); + print(" GetName():"); + print(" VT_RAIL: " + AIBridge.GetName(i, AIVehicle.VT_RAIL)); + print(" VT_ROAD: " + AIBridge.GetName(i, AIVehicle.VT_ROAD)); + print(" VT_WATER: " + AIBridge.GetName(i, AIVehicle.VT_WATER)); + print(" VT_AIR: " + AIBridge.GetName(i, AIVehicle.VT_AIR)); print(" GetMaxSpeed(): " + AIBridge.GetMaxSpeed(i)); print(" GetPrice(): " + AIBridge.GetPrice(i, 5)); print(" GetMaxLength(): " + AIBridge.GetMaxLength(i)); diff --git a/bin/ai/regression/tst_regression/result.txt b/bin/ai/regression/tst_regression/result.txt index 210cf2696a..e93b2e2343 100644 --- a/bin/ai/regression/tst_regression/result.txt +++ b/bin/ai/regression/tst_regression/result.txt @@ -867,105 +867,165 @@ ERROR: IsEnd() is invalid as Begin() is never called --Bridge-- Bridge -1 IsValidBridge(): false - GetName(): (null : 0x00000000) + GetName(): + VT_RAIL: (null : 0x00000000) + VT_ROAD: (null : 0x00000000) + VT_WATER: (null : 0x00000000) + VT_AIR: (null : 0x00000000) GetMaxSpeed(): -1 GetPrice(): -1 GetMaxLength(): -1 GetMinLength(): -1 Bridge 0 IsValidBridge(): true - GetName(): Wooden rail bridge + GetName(): + VT_RAIL: Wooden rail bridge + VT_ROAD: Wooden road bridge + VT_WATER: Aqueduct + VT_AIR: (null : 0x00000000) GetMaxSpeed(): 32 GetPrice(): 450 GetMaxLength(): 66 GetMinLength(): 2 Bridge 1 IsValidBridge(): true - GetName(): Concrete rail bridge + GetName(): + VT_RAIL: Concrete rail bridge + VT_ROAD: Concrete road bridge + VT_WATER: Aqueduct + VT_AIR: (null : 0x00000000) GetMaxSpeed(): 48 GetPrice(): 630 GetMaxLength(): 4 GetMinLength(): 2 Bridge 2 IsValidBridge(): true - GetName(): Steel girder rail bridge + GetName(): + VT_RAIL: Steel girder rail bridge + VT_ROAD: Steel girder road bridge + VT_WATER: Aqueduct + VT_AIR: (null : 0x00000000) GetMaxSpeed(): 64 GetPrice(): 811 GetMaxLength(): 7 GetMinLength(): 2 Bridge 3 IsValidBridge(): true - GetName(): Reinforced concrete suspension rail bridge + GetName(): + VT_RAIL: Reinforced concrete suspension rail bridge + VT_ROAD: Reinforced concrete suspension road bridge + VT_WATER: Aqueduct + VT_AIR: (null : 0x00000000) GetMaxSpeed(): 80 GetPrice(): 946 GetMaxLength(): 12 GetMinLength(): 4 Bridge 4 IsValidBridge(): true - GetName(): Steel suspension rail bridge + GetName(): + VT_RAIL: Steel suspension rail bridge + VT_ROAD: Steel suspension road bridge + VT_WATER: Aqueduct + VT_AIR: (null : 0x00000000) GetMaxSpeed(): 96 GetPrice(): 1042 GetMaxLength(): 66 GetMinLength(): 5 Bridge 5 IsValidBridge(): true - GetName(): Steel suspension rail bridge + GetName(): + VT_RAIL: Steel suspension rail bridge + VT_ROAD: Steel suspension road bridge + VT_WATER: Aqueduct + VT_AIR: (null : 0x00000000) GetMaxSpeed(): 112 GetPrice(): 1081 GetMaxLength(): 66 GetMinLength(): 5 Bridge 6 IsValidBridge(): true - GetName(): Steel cantilever rail bridge + GetName(): + VT_RAIL: Steel cantilever rail bridge + VT_ROAD: Steel cantilever road bridge + VT_WATER: Aqueduct + VT_AIR: (null : 0x00000000) GetMaxSpeed(): 160 GetPrice(): 1261 GetMaxLength(): 9 GetMinLength(): 5 Bridge 7 IsValidBridge(): true - GetName(): Steel cantilever rail bridge + GetName(): + VT_RAIL: Steel cantilever rail bridge + VT_ROAD: Steel cantilever road bridge + VT_WATER: Aqueduct + VT_AIR: (null : 0x00000000) GetMaxSpeed(): 208 GetPrice(): 1306 GetMaxLength(): 10 GetMinLength(): 5 Bridge 8 IsValidBridge(): true - GetName(): Steel cantilever rail bridge + GetName(): + VT_RAIL: Steel cantilever rail bridge + VT_ROAD: Steel cantilever road bridge + VT_WATER: Aqueduct + VT_AIR: (null : 0x00000000) GetMaxSpeed(): 240 GetPrice(): 1396 GetMaxLength(): 11 GetMinLength(): 5 Bridge 9 IsValidBridge(): true - GetName(): Steel girder rail bridge + GetName(): + VT_RAIL: Steel girder rail bridge + VT_ROAD: Steel girder road bridge + VT_WATER: Aqueduct + VT_AIR: (null : 0x00000000) GetMaxSpeed(): 256 GetPrice(): 1351 GetMaxLength(): 4 GetMinLength(): 2 Bridge 10 IsValidBridge(): false - GetName(): (null : 0x00000000) + GetName(): + VT_RAIL: (null : 0x00000000) + VT_ROAD: (null : 0x00000000) + VT_WATER: (null : 0x00000000) + VT_AIR: (null : 0x00000000) GetMaxSpeed(): -1 GetPrice(): -1 GetMaxLength(): -1 GetMinLength(): -1 Bridge 11 IsValidBridge(): false - GetName(): (null : 0x00000000) + GetName(): + VT_RAIL: (null : 0x00000000) + VT_ROAD: (null : 0x00000000) + VT_WATER: (null : 0x00000000) + VT_AIR: (null : 0x00000000) GetMaxSpeed(): -1 GetPrice(): -1 GetMaxLength(): -1 GetMinLength(): -1 Bridge 12 IsValidBridge(): false - GetName(): (null : 0x00000000) + GetName(): + VT_RAIL: (null : 0x00000000) + VT_ROAD: (null : 0x00000000) + VT_WATER: (null : 0x00000000) + VT_AIR: (null : 0x00000000) GetMaxSpeed(): -1 GetPrice(): -1 GetMaxLength(): -1 GetMinLength(): -1 Bridge 13 IsValidBridge(): false - GetName(): (null : 0x00000000) + GetName(): + VT_RAIL: (null : 0x00000000) + VT_ROAD: (null : 0x00000000) + VT_WATER: (null : 0x00000000) + VT_AIR: (null : 0x00000000) GetMaxSpeed(): -1 GetPrice(): -1 GetMaxLength(): -1 diff --git a/bin/game/compat_1.2.nut b/bin/game/compat_1.2.nut index aa5d48c3a3..7822a44d01 100644 --- a/bin/game/compat_1.2.nut +++ b/bin/game/compat_1.2.nut @@ -23,3 +23,10 @@ GSNews.Create <- function(type, text, company) { return GSNews._Create(type, text, company, GSNews.NR_NONE, 0); } + +/* 1.9 adds a vehicle type parameter. */ +GSBridge._GetName <- GSBridge.GetName; +GSBridge.GetName <- function(bridge_id) +{ + return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL); +} diff --git a/bin/game/compat_1.3.nut b/bin/game/compat_1.3.nut index 78a03534df..0d7a2afb60 100644 --- a/bin/game/compat_1.3.nut +++ b/bin/game/compat_1.3.nut @@ -23,3 +23,10 @@ GSNews.Create <- function(type, text, company) { return GSNews._Create(type, text, company, GSNews.NR_NONE, 0); } + +/* 1.9 adds a vehicle type parameter. */ +GSBridge._GetName <- GSBridge.GetName; +GSBridge.GetName <- function(bridge_id) +{ + return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL); +} diff --git a/bin/game/compat_1.4.nut b/bin/game/compat_1.4.nut index a00431ed64..3ff887727e 100644 --- a/bin/game/compat_1.4.nut +++ b/bin/game/compat_1.4.nut @@ -15,3 +15,10 @@ GSNews.Create <- function(type, text, company) { return GSNews._Create(type, text, company, GSNews.NR_NONE, 0); } + +/* 1.9 adds a vehicle type parameter. */ +GSBridge._GetName <- GSBridge.GetName; +GSBridge.GetName <- function(bridge_id) +{ + return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL); +} diff --git a/bin/game/compat_1.5.nut b/bin/game/compat_1.5.nut index 96a7647ff6..b29a8ed2f3 100644 --- a/bin/game/compat_1.5.nut +++ b/bin/game/compat_1.5.nut @@ -8,3 +8,10 @@ */ GSLog.Info("1.5 API compatibility in effect."); + +/* 1.9 adds a vehicle type parameter. */ +GSBridge._GetName <- GSBridge.GetName; +GSBridge.GetName <- function(bridge_id) +{ + return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL); +} diff --git a/bin/game/compat_1.6.nut b/bin/game/compat_1.6.nut index d25189db2a..a3f5975287 100644 --- a/bin/game/compat_1.6.nut +++ b/bin/game/compat_1.6.nut @@ -8,3 +8,10 @@ */ GSLog.Info("1.6 API compatibility in effect."); + +/* 1.9 adds a vehicle type parameter. */ +GSBridge._GetName <- GSBridge.GetName; +GSBridge.GetName <- function(bridge_id) +{ + return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL); +} diff --git a/bin/game/compat_1.7.nut b/bin/game/compat_1.7.nut index 1290443c4d..b4c4d1bb35 100644 --- a/bin/game/compat_1.7.nut +++ b/bin/game/compat_1.7.nut @@ -8,3 +8,10 @@ */ GSLog.Info("1.7 API compatibility in effect."); + +/* 1.9 adds a vehicle type parameter. */ +GSBridge._GetName <- GSBridge.GetName; +GSBridge.GetName <- function(bridge_id) +{ + return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL); +} diff --git a/bin/game/compat_1.8.nut b/bin/game/compat_1.8.nut index 6acdbc0609..5aac3f8c1d 100644 --- a/bin/game/compat_1.8.nut +++ b/bin/game/compat_1.8.nut @@ -8,3 +8,10 @@ */ GSLog.Info("1.8 API compatibility in effect."); + +/* 1.9 adds a vehicle type parameter. */ +GSBridge._GetName <- GSBridge.GetName; +GSBridge.GetName <- function(bridge_id) +{ + return GSBridge._GetName(bridge_id, GSVehicle.VT_RAIL); +} diff --git a/src/script/api/ai/ai_bridge.hpp.sq b/src/script/api/ai/ai_bridge.hpp.sq index d09f56421b..9a9b223009 100644 --- a/src/script/api/ai/ai_bridge.hpp.sq +++ b/src/script/api/ai/ai_bridge.hpp.sq @@ -37,7 +37,7 @@ void SQAIBridge_Register(Squirrel *engine) SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::IsValidBridge, "IsValidBridge", 2, ".i"); SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::IsBridgeTile, "IsBridgeTile", 2, ".i"); SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::GetBridgeID, "GetBridgeID", 2, ".i"); - SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::GetName, "GetName", 2, ".i"); + SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::GetName, "GetName", 3, ".ii"); SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::GetMaxSpeed, "GetMaxSpeed", 2, ".i"); SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::GetPrice, "GetPrice", 3, ".ii"); SQAIBridge.DefSQStaticMethod(engine, &ScriptBridge::GetMaxLength, "GetMaxLength", 2, ".i"); diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index 03e9831a11..eb2b3a5013 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -21,6 +21,9 @@ * API additions: * \li AIAirport::GetMonthlyMaintenanceCost * + * Other changes: + * \li AIBridge::GetName takes one extra parameter to refer the vehicle type + * * \b 1.8.0 * * No changes diff --git a/src/script/api/game/game_bridge.hpp.sq b/src/script/api/game/game_bridge.hpp.sq index 029a3ab3d0..df0a945024 100644 --- a/src/script/api/game/game_bridge.hpp.sq +++ b/src/script/api/game/game_bridge.hpp.sq @@ -37,7 +37,7 @@ void SQGSBridge_Register(Squirrel *engine) SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::IsValidBridge, "IsValidBridge", 2, ".i"); SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::IsBridgeTile, "IsBridgeTile", 2, ".i"); SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::GetBridgeID, "GetBridgeID", 2, ".i"); - SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::GetName, "GetName", 2, ".i"); + SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::GetName, "GetName", 3, ".ii"); SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::GetMaxSpeed, "GetMaxSpeed", 2, ".i"); SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::GetPrice, "GetPrice", 3, ".ii"); SQGSBridge.DefSQStaticMethod(engine, &ScriptBridge::GetMaxLength, "GetMaxLength", 2, ".i"); diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index 7aad75b442..094449d73b 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -28,6 +28,9 @@ * \li GSViewport::ScrollClientTo * \li GSGoal::QuestionClient * + * Other changes: + * \li GSBridge::GetName takes one extra parameter to refer the vehicle type + * * \b 1.8.0 * * No changes diff --git a/src/script/api/script_bridge.cpp b/src/script/api/script_bridge.cpp index 45bec466c8..f532f11b73 100644 --- a/src/script/api/script_bridge.cpp +++ b/src/script/api/script_bridge.cpp @@ -16,6 +16,7 @@ #include "../../bridge_map.h" #include "../../strings_func.h" #include "../../date_func.h" +#include "table/strings.h" #include "../../safeguards.h" @@ -135,11 +136,12 @@ static void _DoCommandReturnBuildBridge1(class ScriptInstance *instance) return ScriptObject::DoCommand(tile, 0, 0, CMD_LANDSCAPE_CLEAR); } -/* static */ char *ScriptBridge::GetName(BridgeID bridge_id) +/* static */ char *ScriptBridge::GetName(BridgeID bridge_id, ScriptVehicle::VehicleType vehicle_type) { + EnforcePrecondition(NULL, vehicle_type == ScriptVehicle::VT_ROAD || vehicle_type == ScriptVehicle::VT_RAIL || vehicle_type == ScriptVehicle::VT_WATER); if (!IsValidBridge(bridge_id)) return NULL; - return GetString(::GetBridgeSpec(bridge_id)->transport_name[0]); + return GetString(vehicle_type == ScriptVehicle::VT_WATER ? STR_LAI_BRIDGE_DESCRIPTION_AQUEDUCT : ::GetBridgeSpec(bridge_id)->transport_name[vehicle_type]); } /* static */ int32 ScriptBridge::GetMaxSpeed(BridgeID bridge_id) diff --git a/src/script/api/script_bridge.hpp b/src/script/api/script_bridge.hpp index e069285969..5327d42062 100644 --- a/src/script/api/script_bridge.hpp +++ b/src/script/api/script_bridge.hpp @@ -66,10 +66,12 @@ public: /** * Get the name of a bridge. * @param bridge_id The bridge to get the name of. + * @param vehicle_type The vehicle-type of bridge to get the name of. * @pre IsValidBridge(bridge_id). + * @pre vehicle_type == ScriptVehicle::VT_ROAD || vehicle_type == ScriptVehicle::VT_RAIL || vehicle_type == ScriptVehicle::VT_WATER * @return The name the bridge has. */ - static char *GetName(BridgeID bridge_id); + static char *GetName(BridgeID bridge_id, ScriptVehicle::VehicleType vehicle_type); /** * Get the maximum speed of a bridge. From 21dc725762070c0a91d656d68aea0142467f0573 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 31 Jan 2019 22:18:00 +0000 Subject: [PATCH 279/622] Fix: Don't consider engines not in the current climate towards used livery classes. --- src/newgrf.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 3b0af55170..74d29e3e50 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -8591,6 +8591,8 @@ static void FinaliseEngineArray() } } + if (!HasBit(e->info.climates, _settings_game.game_creation.landscape)) continue; + /* When the train does not set property 27 (misc flags), but it * is overridden by a NewGRF graphically we want to disable the * flipping possibility. */ From 12b6fe47c7eeb020f983d2dff813fa0b77ea2a25 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 31 Jan 2019 22:19:01 +0000 Subject: [PATCH 280/622] Fix: Set MU flag on some default engines. --- src/table/engines.h | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/table/engines.h b/src/table/engines.h index b79733c7ae..3b29a8dc17 100644 --- a/src/table/engines.h +++ b/src/table/engines.h @@ -28,6 +28,19 @@ */ #define MT(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 1 << EF_RAIL_FLIPS, 0, 0, STR_EMPTY, CARGO_AGING_TICKS } +/** + * Writes the properties of a multiple-unit train into the EngineInfo struct. + * @see EngineInfo + * @param a base introduction date (days since 1920-01-01) + * @param b decay speed + * @param c life length (years) + * @param d base life (years) + * @param e cargo type + * @param f Bitmask of the climates + * @note the 5 between b and f is the load amount + */ +#define MM(a, b, c, d, e, f) { DAYS_TILL_ORIGINAL_BASE_YEAR + a, c, d, b, 5, f, e, 0, 8, 1 << EF_RAIL_FLIPS | 1 << EF_RAIL_IS_MU, 0, 0, STR_EMPTY, CARGO_AGING_TICKS } + /** * Writes the properties of a train carriage into the EngineInfo struct. * @param a base introduction date (days since 1920-01-01) @@ -102,8 +115,8 @@ static const EngineInfo _orig_engine_info[] = { MT( 5114, 20, 21, 30, 0 , T ), // 8 Chaney 'Jubilee' (Steam) MT( 5479, 20, 20, 30, 0 , T ), // 9 Ginzu 'A4' (Steam) MT( 12419, 20, 23, 25, 0 , T ), // 10 SH '8P' (Steam) - MT( 13149, 20, 12, 30, CT_PASSENGERS , T ), // 11 Manley-Morel DMU (Diesel) - MT( 23376, 20, 15, 35, CT_PASSENGERS , T ), // 12 'Dash' (Diesel) + MM( 13149, 20, 12, 30, CT_PASSENGERS , T ), // 11 Manley-Morel DMU (Diesel) + MM( 23376, 20, 15, 35, CT_PASSENGERS , T ), // 12 'Dash' (Diesel) MT( 14976, 20, 18, 28, 0 , T ), // 13 SH/Hendry '25' (Diesel) MT( 14245, 20, 20, 30, 0 , T ), // 14 UU '37' (Diesel) MT( 15341, 20, 22, 33, 0 , T ), // 15 Floss '47' (Diesel) @@ -111,13 +124,13 @@ static const EngineInfo _orig_engine_info[] = { MT( 16437, 20, 20, 30, 0 , A|S ), // 17 CS 2400 (Diesel) MT( 18993, 20, 22, 30, 0 , A|S ), // 18 Centennial (Diesel) MT( 13880, 20, 22, 30, 0 , A|S ), // 19 Kelling 3100 (Diesel) - MT( 20454, 20, 22, 30, 0 , A|S ), // 20 Turner Turbo (Diesel) + MM( 20454, 20, 22, 30, 0 , A|S ), // 20 Turner Turbo (Diesel) MT( 16071, 20, 22, 30, 0 , A|S ), // 21 MJS 1000 (Diesel) MT( 20820, 20, 20, 25, CT_MAIL , T ), // 22 SH '125' (Diesel) MT( 16437, 20, 23, 30, 0 , T ), // 23 SH '30' (Electric) MT( 19359, 20, 23, 80, 0 , T ), // 24 SH '40' (Electric) - MT( 23376, 20, 25, 30, 0 , T ), // 25 'T.I.M.' (Electric) - MT( 26298, 20, 25, 50, 0 , T ), // 26 'AsiaStar' (Electric) + MM( 23376, 20, 25, 30, 0 , T ), // 25 'T.I.M.' (Electric) + MM( 26298, 20, 25, 50, 0 , T ), // 26 'AsiaStar' (Electric) MW( 1827, 20, 20, 50, CT_PASSENGERS , T|A|S|Y), // 27 Passenger Carriage MW( 1827, 20, 20, 50, CT_MAIL , T|A|S|Y), // 28 Mail Van MW( 1827, 20, 20, 50, CT_COAL , T|A ), // 29 Coal Truck From 9e9d485713a5441d7170be7c0fea9fb981342acd Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 31 Jan 2019 21:43:18 +0000 Subject: [PATCH 281/622] Fix 23960d0f2c: Scrollbar was broken for non-group liveries. Simplify how list position is determined by using existing functions. Also rename livery_height -> rows and SetLiveryHeight() -> SetRows(), as height implies pixels. --- src/company_gui.cpp | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/src/company_gui.cpp b/src/company_gui.cpp index ae7c8d6c63..5317d70898 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -561,7 +561,7 @@ private: uint32 sel; LiveryClass livery_class; Dimension square; - uint livery_height; + uint rows; uint line_height; GUIGroupList groups; SmallVector indents; @@ -678,20 +678,20 @@ private: this->groups.RebuildDone(); } - void SetLiveryHeight() + void SetRows() { if (this->livery_class < LC_GROUP_RAIL) { - this->livery_height = 0; + this->rows = 0; for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) { if (_livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme)) { - this->livery_height++; + this->rows++; } } } else { - this->livery_height = this->groups.Length(); + this->rows = this->groups.Length(); } - this->vscroll->SetCount(this->livery_height); + this->vscroll->SetCount(this->rows); } public: @@ -708,7 +708,7 @@ public: this->sel = 1; this->LowerWidget(WID_SCL_CLASS_GENERAL); this->BuildGroupList(company); - this->SetLiveryHeight(); + this->SetRows(); } else { this->SetSelectedGroup(group); } @@ -734,10 +734,10 @@ public: this->groups.ForceRebuild(); this->BuildGroupList((CompanyID)this->window_number); - this->SetLiveryHeight(); + this->SetRows(); /* Position scrollbar to selected group */ - for (uint i = 0; i < this->livery_height; i++) { + for (uint i = 0; i < this->rows; i++) { if (this->groups[i]->index == sel) { this->vscroll->SetPosition(Clamp(i - this->vscroll->GetCapacity() / 2, 0, max(this->vscroll->GetCount() - this->vscroll->GetCapacity(), 0))); break; @@ -894,9 +894,11 @@ public: }; if (livery_class < LC_GROUP_RAIL) { + int pos = this->vscroll->GetPosition(); const Company *c = Company::Get((CompanyID)this->window_number); for (LiveryScheme scheme = LS_DEFAULT; scheme < LS_END; scheme++) { if (_livery_class[scheme] == this->livery_class && HasBit(_loaded_newgrf_features.used_liveries, scheme)) { + if (pos-- > 0) continue; draw_livery(STR_LIVERY_DEFAULT + scheme, c->livery[scheme], HasBit(this->sel, scheme), scheme == LS_DEFAULT, 0); } } @@ -946,7 +948,7 @@ public: } } - this->SetLiveryHeight(); + this->SetRows(); this->SetDirty(); break; @@ -959,17 +961,16 @@ public: break; case WID_SCL_MATRIX: { - const NWidgetBase *wid = this->GetWidget(WID_SCL_MATRIX); + uint row = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_SCL_MATRIX, 0, this->line_height); + if (row >= this->rows) return; + if (this->livery_class < LC_GROUP_RAIL) { - LiveryScheme j = (LiveryScheme)((pt.y - wid->pos_y) / this->line_height); + LiveryScheme j = (LiveryScheme)row; - if (j >= this->livery_height) return; - - for (LiveryScheme scheme = LS_BEGIN; scheme <= j; scheme++) { + for (LiveryScheme scheme = LS_BEGIN; scheme <= j && scheme < LS_END; scheme++) { if (_livery_class[scheme] != this->livery_class || !HasBit(_loaded_newgrf_features.used_liveries, scheme)) j++; - if (scheme >= LS_END) return; } - if (j >= LS_END) return; + assert(j < LS_END); if (_ctrl_pressed) { ToggleBit(this->sel, j); @@ -977,10 +978,7 @@ public: this->sel = 1 << j; } } else { - uint id_g = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_SCL_MATRIX, 0, this->line_height); - if (id_g >= this->groups.Length()) return; - - this->sel = this->groups[id_g]->index; + this->sel = this->groups[row]->index; } this->SetDirty(); break; From 0355f887d99974d21d678f1b7a12a343dc9ab04a Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 1 Feb 2019 15:05:43 +0000 Subject: [PATCH 282/622] Fix #6438: Properly invalidate AI Settings window when max no competitor setting is changed. --- src/ai/ai_gui.cpp | 1 - src/settings.cpp | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index aa56b3d830..69476856ce 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -875,7 +875,6 @@ struct AIConfigWindow : public Window { new_value = min(MAX_COMPANIES - 1, GetGameSettings().difficulty.max_no_competitors + 1); } IConsoleSetSetting("difficulty.max_no_competitors", new_value); - this->InvalidateData(); break; } diff --git a/src/settings.cpp b/src/settings.cpp index 220628b006..d16cff7a1d 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1174,6 +1174,7 @@ static bool MaxNoAIsChange(int32 i) ShowErrorMessage(STR_WARNING_NO_SUITABLE_AI, INVALID_STRING_ID, WL_CRITICAL); } + InvalidateWindowClassesData(WC_GAME_OPTIONS, 0); return true; } From 8418e27403d587c393fb0cdd140d60198e444683 Mon Sep 17 00:00:00 2001 From: glx Date: Fri, 1 Feb 2019 16:35:25 +0100 Subject: [PATCH 283/622] Fix: close Textfile windows when closing Option window --- src/settings_gui.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index e94f96bc46..2faf2b150b 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -182,6 +182,7 @@ struct GameOptionsWindow : Window { ~GameOptionsWindow() { DeleteWindowById(WC_CUSTOM_CURRENCY, 0); + DeleteWindowByClass(WC_TEXTFILE); if (this->reload) _switch_mode = SM_MENU; } From 5a5861f245a25ea4e2b3ad56640d1d8728324383 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 1 Feb 2019 19:45:44 +0100 Subject: [PATCH 284/622] Update: Translations from eints french: 2 changes by glx german: 23 changes by planetmaker danish: 139 changes by nielsmh spanish (mexican): 3 changes by Absay portuguese: 55 changes by vesgo dutch: 214 changes by JanWillem estonian: 30 changes by rm87 --- src/lang/danish.txt | 204 +++++++++++++------- src/lang/dutch.txt | 408 +++++++++++++++++++++------------------- src/lang/estonian.txt | 35 +++- src/lang/french.txt | 2 + src/lang/german.txt | 23 +++ src/lang/portuguese.txt | 65 ++++++- src/lang/spanish_MX.txt | 4 +- 7 files changed, 466 insertions(+), 275 deletions(-) diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 93fa13575c..c8b8118920 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -189,6 +189,8 @@ STR_COLOUR_ORANGE :Orange STR_COLOUR_BROWN :Brun STR_COLOUR_GREY :Grå STR_COLOUR_WHITE :Hvid +STR_COLOUR_RANDOM :Tilfældig +STR_COLOUR_DEFAULT :Standard # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA} miles/t @@ -475,8 +477,9 @@ STR_ABOUT_MENU_SCREENSHOT :Skærmbillede ( STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Fuldt zoomet skærmbillede STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Standard zoom skærmbillede STR_ABOUT_MENU_GIANT_SCREENSHOT :Kæmpe skærmbillede (Ctrl-G) +STR_ABOUT_MENU_SHOW_FRAMERATE :Vis spilhastighed STR_ABOUT_MENU_ABOUT_OPENTTD :Om 'OpenTTD' -STR_ABOUT_MENU_SPRITE_ALIGNER :Tilpas grafikelement +STR_ABOUT_MENU_SPRITE_ALIGNER :Spritejustering STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Slå afgrænsningsrammerne til/fra STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Slå farvning af beskidte blokke til/fra ############ range ends here @@ -660,7 +663,7 @@ STR_MUSIC_TOOLTIP_SKIP_TO_PREVIOUS_TRACK :{BLACK}Hop til STR_MUSIC_TOOLTIP_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Hop til næste nummer STR_MUSIC_TOOLTIP_STOP_PLAYING_MUSIC :{BLACK}Stop musikken STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC :{BLACK}Start musikken -STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Flyt slideren for at justere musik- og effektlydstyrken +STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Flyt skyderen for at justere musik- og effektlydstyrken STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Vælg 'Alle numre' programmet STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Vælg 'Old style musik' programmet STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Vælg 'New style musik' programmet @@ -671,10 +674,12 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Tilfæld STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Vis vinduet med musiknummervalg # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Music Program - '{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Nummerliste STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Program - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Ryd +STR_PLAYLIST_CHANGE_SET :{BLACK}Skift sæt STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Ryd det valgte program (Gælder kun Custom1/Custom2) STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Ændre musik listen til et anden installeret sæt STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klik på et musiknummer for at tilføje det til programlisten (kun for Custom1/Custom2) @@ -812,6 +817,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Direktør) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} har sponsoreret stiftelsen af en ny by, {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}En by ved navn {TOWN} er blevet stiftet! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Ny {STRING} under opførelse tæt på {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Ny {STRING} bliver plantet tæt på {TOWN}! @@ -879,10 +885,10 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC # Extra view window STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Lokalitetsvindue {COMMA} -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Hent global -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Hent lokalitet fra global visning til dette vindue -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Sæt global -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Sæt den globale lokalitet til det samme som dette vindue +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Hent hovedvisning +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Bevæg denne visning til samme sted som hovedvisningen +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Flyt hovedvisning +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Bevæg hovedvisningen til samme sted som dette vindue # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Spilvalg @@ -924,6 +930,8 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Sydafrikansk Ra STR_GAME_OPTIONS_CURRENCY_CUSTOM :Brugerdefineret... STR_GAME_OPTIONS_CURRENCY_GEL :Georgiske Lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Iranske Rialer (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Ny Russisk Rubel (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Meksikansk Peso (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vejkøretøjer @@ -1253,6 +1261,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Denne in STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Infrastruktur vedligeholdelse: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Når aktiveret, infrastruktur forårsager vedligeholdelsesomkostninger. Omkostningerne vokser over-proportional med nettets størrelse, hvilket påvirker større virksomheder mere end de små +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Foretrukken selskabsfarve: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Vælg den foretrukne farve egne selskaber skal starte med STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Lufthavnenes levealder udløber aldrig: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Aktiveres denne indstilling gøres at hver lufthavnstype forbliver tilgængelig for evigt efter dens indførelse @@ -1337,6 +1347,8 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Land farve brug STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Grøn STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Mørkegrøn STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violet +STR_CONFIG_SETTING_SCROLLMODE :Visningsport bevægelse: {STRING} +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Virkemåde for bevægelse af kortet STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Bevæg syns vinduet med højre mussetast, musse position låst STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Bevæg kortet med højre mussetast, musse position låst STR_CONFIG_SETTING_SCROLLMODE_RMB :Bevæg kortet med højre musseknap @@ -1538,11 +1550,11 @@ STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Signaltype der STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Standard signaltype STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Normal STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :Avanceret -STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :Ensrettet avanceret +STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :Ensrettet togvejssignal STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Bladr gennem signaltyper: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Vælg hvilke signaltyper et vælge imellem, når der Ctrl+klikkes på byg signal med signalværktøjet STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :Kun normal -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Kun avanceret +STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Kun togvejssignaler STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Alle STR_CONFIG_SETTING_TOWN_LAYOUT :Vej-layout for nye byer: {STRING} @@ -1809,7 +1821,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Skift å STR_CHEAT_SETUP_PROD :{LTBLUE}Aktiver modifikation af produktion: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nyt farvetema +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Farvetema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Vis generelle farveskemaer STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Vis farveskemaer for tog @@ -1971,7 +1983,7 @@ STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} klient{P "" er} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maksimalt antal tilladte klienter: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Vælg det maksimale antal klienter. Det er ikke nødvendigt at fylde dem alle -STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} firma{P "" er} +STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} selskab{P "" er} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maks. selskaber: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Begræns serveren til et bestemt antal selskaber STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} tilskuer{P "" e} @@ -2165,7 +2177,7 @@ STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :det tog for lan ############ End of leave-in-this-order STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Mulig forbindelses tab -STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}De sidste {NUM} sekunder{P "" s} er der ikke ankommet data fra serveren +STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}De{P 0 t ""} sidste {NUM} sekund{P "" er} er der ikke ankommet data fra serveren # Network related errors STR_NETWORK_SERVER_MESSAGE :*** {1:STRING} @@ -2174,7 +2186,7 @@ STR_NETWORK_SERVER_MESSAGE_GAME_PAUSED :Spillet er paus STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Spillet er stadig pauset ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Spillet er stadig pauset. ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Spillet er stadig pauset. ({STRING}, {STRING}, {STRING}) -STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Spillet er stadig på pause ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Spillet er stadig pauset ({STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Spillet er sat igang ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :antal spillere spillere STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :forbinder klienter @@ -2184,12 +2196,12 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :spil script STR_NETWORK_MESSAGE_CLIENT_LEAVING :forlader STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} har tilsluttet sig spillet STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} har tilsluttet sig spillet (Klient #{2:NUM}) -STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} har tilsluttet sig firmaet #{2:NUM} +STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} har tilsluttet sig selskabet #{2:NUM} STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} har tilsluttet sig som tilskuer -STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} har startet et nyt firma (#{2:NUM}) +STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} har startet et nyt selskab (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} har forladt spillet ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} har ændret sit navn til {STRING} -STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} gav dit firma {2:CURRENCY_LONG} +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} gav dit selskab {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_GAVE_MONEY_AWAY :*** Du gav {1:STRING} {2:CURRENCY_LONG} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Serveren har lukket ned for dette spil STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Serveren genstarter...{}Vent venligst... @@ -2285,6 +2297,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Laststr STR_LINKGRAPH_LEGEND_ALL :{BLACK}Alle STR_LINKGRAPH_LEGEND_NONE :{BLACK}Ingen STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Vælg firmaer at vise +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}ubrugt @@ -2298,7 +2311,7 @@ STR_STATION_BUILD_COVERAGE_ON :{BLACK}Til STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Marker ikke dækningsområdet af den foreslåede placering STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Marker dækningsområdet af den foreslåede placering STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Accepterer: {GOLD}{CARGO_LIST} -STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Forsyninger: {GOLD}{CARGO_LIST} +STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Forsyner: {GOLD}{CARGO_LIST} # Join station window STR_JOIN_STATION_CAPTION :{WHITE}Sammenkæd station @@ -2360,18 +2373,18 @@ STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Standard STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Indgangssignal (semafor){}Grønt så længe der er et eller flere grønne udgangssignaler fra den efterfølgende sporsektion. Ellers vises rødt. STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Udgangssignal (semafor){}Fungerer som et normalt signal men er nødvendigt for at vise den korrekte farve ved indgangs- og kombisignaler. STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Kombisignal (semafor){}Kombisignalet fungerer både som indgangs- og udgangssignal. Dette muliggør opbygning af store forgreninger af signaler. -STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Avanceret signal (semafor){}Et avanceret signal tillader, at mere en et tog ad gangen kan køre inden for en signalblok, hvis toget kan reservere en rute til et sikkert sted at stoppe. Avancerede signaler kan passeres fra bagsiden. -STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Ensrettet avanceret signal (semafor){}Et avanceret signal tillader, at mere en et tog ad gangen kan køre inden for en signalblok, hvis toget kan reservere en rute til et sikkert sted at stoppe. Ensrettede avancerede signaler kan ikke passeres fra bagsiden. -STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Standardsignal (electrisk){}Dette er den mest almindelige type signal, og tillader kun et tog ad gangen på den samme signalblok +STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Togvejssignal (semafor){}Et togvejssignal tillader, at mere en et tog ad gangen kan køre inden for en signalblok, hvis toget kan reservere en togvej til et sikkert sted at stoppe. Togvejssignaler kan passeres fra bagsiden. +STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Ensrettet togvejssignal (semafor){}Et togvejssignal tillader, at mere en et tog ad gangen kan køre inden for en signalblok, hvis toget kan reservere en togvej til et sikkert sted at stoppe. Ensrettede togvejssignal kan ikke passeres fra bagsiden. +STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Standardsignal (elektrisk){}Dette er den mest almindelige type signal, og tillader kun et tog ad gangen på den samme signalblok STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Indgangssignal (elektrisk){}Grønt så længe der er et eller flere grønne udgangssignaler fra den efterfølgende sporsektion. Ellers vises rødt. STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Udgangssignal (elektrisk){}Fungerer som et normalt signal, men er nødvendigt for at vise den korrekte farve ved indgangs- og kombisignaler. STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Kombisignal (elektrisk){}Kombisignalet fungerer både som indgangs- og udgangssignal. Dette muliggør opbygning af store forgreninger af signaler. -STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Avanceret signal (elektrisk){}Et avanceret signal tillader, at mere en et tog ad gangen kan køre inden for en signalblok, hvis toget kan reservere en rute til et sikkert sted at stoppe. Avancerede signaler kan passeres fra bagsiden. -STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Ensrettet avanceret signal (elektrisk){}Et avanceret signal tillader, at mere en et tog ad gangen kan køre inden for en signalblok, hvis toget kan reservere en rute til et sikkert sted at stoppe. Ensrettede avancerede signaler kan ikke passeres fra bagsiden. +STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Togvejssignal (elektrisk){}Et togvejssignal tillader, at mere en et tog ad gangen kan køre inden for en signalblok, hvis toget kan reservere en togvej til et sikkert sted at stoppe. Togvejssignaler kan passeres fra bagsiden. +STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Ensrettet togvejssignal (elektrisk){}Et togvejssignal tillader, at mere en et tog ad gangen kan køre inden for en signalblok, hvis toget kan reservere en togvej til et sikkert sted at stoppe. Ensrettede togvejssignaler kan ikke passeres fra bagsiden. STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Signalombygning{}Når denne er valgt, vil klik på et eksisterende signal ombygge det til den valgte signaltype og -variant. Ctrl vil skifte den eksisterende signalvariant. Shift skifter mellem at bygge og vise prisoverslag. -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Træk-og-slip signaltæthed -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Formindsk træk-og-slip signaltæthed -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Forøg træk-og-slip signaltæthed +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Træk-og-slip signalafstand +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Formindsk træk-og-slip signalafstand +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Forøg træk-og-slip signalafstand # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Vælg togbro @@ -2452,7 +2465,7 @@ STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Byg en l # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Valg af lufthavn STR_STATION_BUILD_AIRPORT_TOOLTIP :{BLACK}Vælg lufthavnens størrelse/type -STR_STATION_BUILD_AIRPORT_CLASS_LABEL :{BLACK}Airport klasse +STR_STATION_BUILD_AIRPORT_CLASS_LABEL :{BLACK}Lufthavnsklasse STR_STATION_BUILD_AIRPORT_LAYOUT_NAME :{BLACK}Layout {NUM} STR_AIRPORT_SMALL :Lille @@ -2586,7 +2599,7 @@ STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Koordina STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Produceret: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Stationsklasse: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Stationstype: {LTBLUE}{STRING} -STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Lufthavns klasse: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Lufthavnsklasse: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORT_NAME :{BLACK}Lufthavns navn: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Lufthavn brik navn: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} @@ -2605,28 +2618,28 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Marker STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Snedækket land STR_LAI_CLEAR_DESCRIPTION_DESERT :Ørken -STR_LAI_RAIL_DESCRIPTION_TRACK :Jernbane spor -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Jernbane spor med bloksignaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Jernbane spor med with pre-signaler +STR_LAI_RAIL_DESCRIPTION_TRACK :Jernbanespor +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Jernbanespor med bloksignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Jernbanespor med with pre-signaler STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Jernbane spor med udgangs-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Jernbane spor med kombinerede signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Jernbane spor med rute-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Jernbane spor med en-vejs-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Jernbane spor med blok- og pre-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Jernbane spor med blok- og udgangs-signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Jernbanespor med kombinerede signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Jernbanespor med togvejssignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Jernbanespor med en-vejs togvejssignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Jernbanespor med blok- og pre-signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Jernbanespor med blok- og udgangs-signaler STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Jernbane spor med blok- og kombinerede signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Jernbane spor med blok- og rute-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Jernbane spor med blok og en-vejs rute-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Jernbane spor med pre- og udgangs-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Jernbane spor med pre- og kombinerede signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Jernbane spor med pre- og rute-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Jernbane spor med pre- og en-vejs rute-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Jernbane spor med udgangs- og kombinerede signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Jernbane spor med udgangs- og rute-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Jernbane spor med udgangs- og en-vejs rute-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Jernbane spor med kombinerede og rute-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Jernbane spor med kombinationede- og en-vejs rute-signaler -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Jernbane spor med rute- og en-vejs rute-signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Jernbanespor med blok- og togvejssignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Jernbanespor med blok- og en-vejs togvejssignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Jernbanespor med pre- og udgangs-signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Jernbanespor med pre- og kombinerede signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Jernbanespor med for- og togvejssignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Jernbanespor med pre- og en-vejs togvejssignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Jernbanespor med udgangs- og kombinerede signaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Jernbanespor med udgangs- og togvejssignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Jernbanespor med udgangs- og en-vejs togvejssignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Jernbanespor med kombinerede- og togvejssignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Jernbanespor med kombinerede- og en-vejs togvejssignaler +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Jernbanespor med togvejs- og en-vejs togvejssignaler STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Jernbane togdepot STR_LAI_ROAD_DESCRIPTION_ROAD :Vej @@ -2694,9 +2707,52 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD teamet # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Spilhastighed +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulationshastighed: {STRING} +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Antal spil-trin simuleret i sekundet. +STR_FRAMERATE_RATE_BLITTER :{BLACK}Grafik hastighed: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Antal billeder tegnet i sekundet. +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Aktuel spilhastighedsfaktor: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Hvor hurtigt spillet aktuelt kører, i forhold til det forventede ved normal simulationshastighed. +STR_FRAMERATE_CURRENT :{WHITE}Aktuel +STR_FRAMERATE_AVERAGE :{WHITE}Gennemsnit +STR_FRAMERATE_DATA_POINTS :{BLACK}Data baseret på {COMMA} målinger +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} billeder/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} billeder/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} billeder/s +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{BLACK}Spillogik total: +STR_FRAMERATE_GL_ECONOMY :{BLACK} Fragthåndtering: +STR_FRAMERATE_GL_TRAINS :{BLACK} Togtrin: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Køretøjstrin: +STR_FRAMERATE_GL_SHIPS :{BLACK} Skibstrin: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Flytrin: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Verdenstrin: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Forbindelsesgraf forsinkelser: +STR_FRAMERATE_DRAWING :{BLACK}Grafik-tegning: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Landskabsvisninger: +STR_FRAMERATE_VIDEO :{BLACK}Grafik-output: +STR_FRAMERATE_SOUND :{BLACK}Lydmiksning: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Spillogik +STR_FRAMETIME_CAPTION_GL_ECONOMY :Fragthåndtering +STR_FRAMETIME_CAPTION_GL_TRAINS :Togtrin +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Køretøjstrin +STR_FRAMETIME_CAPTION_GL_SHIPS :Skibstrin +STR_FRAMETIME_CAPTION_GL_AIRCRAFT : Flytrin +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Verdenstrin +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Forbindelsesgraf forsinkelser +STR_FRAMETIME_CAPTION_DRAWING :Grafik-tegning +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Tegning af landskabsvisninger +STR_FRAMETIME_CAPTION_VIDEO :Grafik-output +STR_FRAMETIME_CAPTION_SOUND :Lydmiksning ############ End of leave-in-this-order @@ -2722,6 +2778,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Spil Det STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Ingen information til rådighed STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Filter-udtryk: STR_SAVELOAD_OSKTITLE :{BLACK}Skriv et navn til det gemte spil @@ -2839,7 +2896,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Version: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. kompatible version: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palette: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Standard (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Standard (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Traditionel (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Traditionel (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameter: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Ingen STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Ingen information tilgængelig STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Tilsvarende fil blev ikke fundet @@ -2877,23 +2939,23 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Jernbanetype STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variabel 60+x parameter (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Tilpasser grafikelement {COMMA} ({STRING}) -STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Næste grafikelement -STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Fortsæt til næste normale grafikelement, spring pseudo/genfarvede/skrift-grafikelementer over og omsvøb til sidst -STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gå til grafikelement -STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Gå til det givne grafikelement. Hvis den ikke er et normalt grafikelement, fortsæt til næste normale element -STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Tidligere grafikelement -STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Fortsæt til den forrige normal sprite, springe over nogen pseudo / recolour / FONT sprites og indpakning rundt fra den første sprite til det sidste +STR_SPRITE_ALIGNER_CAPTION :{WHITE}Justerer sprite {COMMA} ({STRING}) +STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Næste sprite +STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Fortsæt til næste normale sprite, spring pseudo/omfarvning/font-sprites over og med omløb fra enden til starten +STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gå til sprite +STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Gå til den givne sprite. Hvis den ikke er en normalt sprite, fortsæt til næste normale sprite +STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Forrige sprite +STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Fortsæt til den forrige normal sprite, spring pseudo/omfarvning/font-sprites over og omløb fra starten til slutningen STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Repræsentation af den markerede sprite. Justeringen ignoreres når denne sprite tegnes. STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Flyt spriten rundt for at ændre X- og Y-forskydningen. Ctrl+Klik for at flytte spriten otte enheder af gangen STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Nulstil relativ STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Nulstil den nuværende relative forskydning STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X-forskydning: {NUM}, Y-forskydning: {NUM} (Absolut) STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}X-forskydning: {NUM}, Y-forskydning: {NUM} (Relativt) -STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Vælg grafikelement +STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Vælg sprite STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Vælg en sprite fra et vilkårligt sted på skærmen -STR_SPRITE_ALIGNER_GOTO_CAPTION :{WHITE}Gå til grafikelement +STR_SPRITE_ALIGNER_GOTO_CAPTION :{WHITE}Gå til sprite # NewGRF (self) generated warnings/errors STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING} @@ -2911,15 +2973,17 @@ STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} kræ STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF filen, som den er lavet til at oversætte, STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :For mange NewGRF sæt er indlæst. STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Indlæsning af {1:STRING} som statisk NewGRF med {STRING} kan forårsage de-sykronisering. -STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Uventet grafikelement (grafikelement {3:NUM}) -STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Ukendt handling 0 egenskab {4:HEX} (grafikelement {3:NUM}) -STR_NEWGRF_ERROR_INVALID_ID :Forsøg på at bruge ugyldigt ID (grafikelement {3:NUM}) +STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Uventet sprite (sprite {3:NUM}) +STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Ukendt handling 0 egenskab {4:HEX} (sprite {3:NUM}) +STR_NEWGRF_ERROR_INVALID_ID :Forsøg på at bruge ugyldigt ID (sprite {3:NUM}) STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} indeholder en ødelagt sprite. Alle ødelagte sprites vil blive vist som et rødt spørgsmålstegn (?). -STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Indeholder adskillige handling 8 indgange (grafikelement {3:NUM}) -STR_NEWGRF_ERROR_READ_BOUNDS :Læs forbi slutningen af pseudo-grafikelement (grafikelement {3:NUM}) -STR_NEWGRF_ERROR_GRM_FAILED :De ønskede GRF ressourcer er ikke tilgængelige (grafikelement {3:NUM}) +STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Indeholder adskillige handling 8 indgange (sprite {3:NUM}) +STR_NEWGRF_ERROR_READ_BOUNDS :Læste ud over slutningen af pseudo-sprite (sprite {3:NUM}) +STR_NEWGRF_ERROR_GRM_FAILED :De ønskede GRF ressourcer er ikke tilgængelige (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} blev deaktiveret af {2:STRING} -STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ugyldigt / ukendt grafikelement layoutformat (grafikelement {3:NUM}) +STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ugyldigt/ukendt sprite layoutformat (sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :For mange elementer i værdiliste for egenskab (sprite {3:NUM}, egenskab {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ugyldig produktion-callback for industri (sprite {3:NUM}, "{1:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Advarsel! @@ -2945,7 +3009,7 @@ STR_NEWGRF_BROKEN :{WHITE}Denne Ne STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Den ændrer status for '{1:ENGINE}' når den ikke er i depot STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Den ændrer toglængden for '{1:ENGINE}' mens den ikke er i depot STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Det ændrede køretøj kapacitet til '{1:ENGINE}' når det ikke er inde i et depot eller genmontering -STR_BROKEN_VEHICLE_LENGTH :{WHITE}Toget '{VEHICLE}' fra firmaet '{COMPANY}' har ugyldig længde. Det skyldes sandsynligvis at problem med en NewGRF. Spillet går muligvis ned. +STR_BROKEN_VEHICLE_LENGTH :{WHITE}Toget '{VEHICLE}' fra selskabet '{COMPANY}' har ugyldig længde. Det skyldes sandsynligvis at problem med en NewGRF. Risiko for at spillet mister synkronisering eller går ned. STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' indeholder forkert information STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Fragt-/ombygningsinformation for '{1:ENGINE}' afviger fra indkøbslisten efter konstruktion. Dette kan medføre, at autofornyelse ikke fungerer korrekt. @@ -2984,13 +3048,15 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Indtast STR_TOWN_DIRECTORY_CAPTION :{WHITE}Byer STR_TOWN_DIRECTORY_NONE :{ORANGE}- Ingen - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (storby){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Bynavne - klik på et navn for at centrere skærmen over byen. Ctrl+Klik åbner et nyt vindue ved byens lokalitet. STR_TOWN_POPULATION :{BLACK}Verdens befolkning: {COMMA} # Town view window STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} -STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (by) +STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (storby) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Indbyggere: {ORANGE}{COMMA}{BLACK} Huse: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} sidste måned: {ORANGE}{COMMA}{BLACK} mulig: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Nødvendig godsmængde for at byen kan vokse: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} krævet STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} kræves om vinteren @@ -3020,7 +3086,7 @@ STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPAN STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Handlinger til rådighed: STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Liste af ting der kan gøres i denne by - klik på en ting for yderligere detaljer STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Gør det -STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Udfør den markerede ting i listen herover +STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Udfør den valgte handling i listen herover STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN :Lille reklamekampagne STR_LOCAL_AUTHORITY_ACTION_MEDIUM_ADVERTISING_CAMPAIGN :Mellem reklamekampagne @@ -3295,6 +3361,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrer STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktions niveauet: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Industrien har rapporteret øjeblikkelig nedlukning! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Kræver: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Producerer: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Kræver: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} @@ -3352,6 +3421,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupper STR_GROUP_CREATE_TOOLTIP :{BLACK}Klik for at oprette en gruppe STR_GROUP_DELETE_TOOLTIP :{BLACK}Slet den valgte gruppe STR_GROUP_RENAME_TOOLTIP :{BLACK}Omdøb den valgte gruppe +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Skift farvetema for den valgte gruppe STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klik for at beskytte denne gruppe mod global auto-udskiftning STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Slet gruppe @@ -3395,6 +3465,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapacite STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Motoriserede Vogne: {GOLD}+{POWER}{BLACK} Vægt: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Kan ombygges til: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Alle lasttyper +STR_PURCHASE_INFO_NONE :Ingen STR_PURCHASE_INFO_ALL_BUT :Alle undtagen {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Maks. trækkraft: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Rækkevidde: {GOLD}{COMMA} felter @@ -3794,6 +3865,7 @@ STR_ORDER_CONDITIONAL_AGE :Alder (år) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Kræver service STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Altid STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Resterende levetid (år) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maksimal pålidelighed STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Hvordan data sammenlignes med den givne værdi STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :er lig med @@ -4478,6 +4550,8 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Originallyd fra STR_BASESOUNDS_WIN_DESCRIPTION :Originallyd fra Transport Tycoon Deluxe Windows-version. STR_BASESOUNDS_NONE_DESCRIPTION :En lydpakke uden lyde. STR_BASEMUSIC_WIN_DESCRIPTION :Originalmusik fra Transport Tycoon Deluxe Windows-version. +STR_BASEMUSIC_DOS_DESCRIPTION :Originalmusik fra Transport Tycoon Deluxe DOS-version. +STR_BASEMUSIC_TTO_DESCRIPTION :Originalmusik fra Transport Tycoon (Original/World Editor) DOS-version. STR_BASEMUSIC_NONE_DESCRIPTION :En musikpakke uden musik. ##id 0x2000 diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 3a932ae17f..d075ea0be9 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -149,14 +149,14 @@ STR_ABBREV_FOOD :{TINY_FONT}VD STR_ABBREV_PAPER :{TINY_FONT}PR STR_ABBREV_GOLD :{TINY_FONT}GO STR_ABBREV_WATER :{TINY_FONT}WA -STR_ABBREV_WHEAT :{TINY_FONT}TW +STR_ABBREV_WHEAT :{TINY_FONT}GN STR_ABBREV_RUBBER :{TINY_FONT}RB STR_ABBREV_SUGAR :{TINY_FONT}SU STR_ABBREV_TOYS :{TINY_FONT}SP STR_ABBREV_SWEETS :{TINY_FONT}SN STR_ABBREV_COLA :{TINY_FONT}CL STR_ABBREV_CANDYFLOSS :{TINY_FONT}SS -STR_ABBREV_BUBBLES :{TINY_FONT}BE +STR_ABBREV_BUBBLES :{TINY_FONT}BU STR_ABBREV_TOFFEE :{TINY_FONT}TF STR_ABBREV_BATTERIES :{TINY_FONT}BA STR_ABBREV_PLASTIC :{TINY_FONT}PL @@ -189,6 +189,8 @@ STR_COLOUR_ORANGE :Oranje STR_COLOUR_BROWN :Bruin STR_COLOUR_GREY :Grijs STR_COLOUR_WHITE :Wit +STR_COLOUR_RANDOM :Willekeurig +STR_COLOUR_DEFAULT :Standaard # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -232,13 +234,13 @@ STR_TOOLTIP_GROUP_ORDER :{BLACK}Kies gro STR_TOOLTIP_SORT_ORDER :{BLACK}Selecteer sorteerrichting (aflopend/oplopend) STR_TOOLTIP_SORT_CRITERIA :{BLACK}Selecteer sorteercriteria STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Kies filtercriteria -STR_BUTTON_SORT_BY :{BLACK}Sorteer op +STR_BUTTON_SORT_BY :{BLACK}Sorteren op STR_BUTTON_LOCATION :{BLACK}Locatie -STR_BUTTON_RENAME :{BLACK}Hernoem +STR_BUTTON_RENAME :{BLACK}Hernoemen STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Sluit venster STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Vensternaam - sleep om venster te verplaatsen -STR_TOOLTIP_SHADE :{BLACK}Klap venster in - toon alleen de titelbalk +STR_TOOLTIP_SHADE :{BLACK}Venster inklappen - alleen titelbalk weergeven STR_TOOLTIP_DEBUG :{BLACK}Toon NewGRF-debuginformatie STR_TOOLTIP_DEFSIZE :{BLACK}wijzig venster naar standaardgrootte. Ctrl+Klik om de huidige grootte als standaard op te slaan STR_TOOLTIP_STICKY :{BLACK}Markeer dit venster als niet-sluitbaar door de 'Sluit alle vensters'-knop. Ctrl+Klik om status als default op te slaan @@ -249,10 +251,10 @@ STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Schuifba STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Sloop gebouwen etc. op een stuk land. Ctrl selecteert het gebied diagonaal. Shift schakelt tussen bouwen/inschatting van de kosten # Show engines button -STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN :{BLACK}Toon verborgen -STR_SHOW_HIDDEN_ENGINES_VEHICLE_ROAD_VEHICLE :{BLACK}Toon verborgen -STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP :{BLACK}Toon verborgen -STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT :{BLACK}Toon verborgen +STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN :{BLACK}Verborgen weergeven +STR_SHOW_HIDDEN_ENGINES_VEHICLE_ROAD_VEHICLE :{BLACK}Verborgen weergeven +STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP :{BLACK}Verborgen weergeven +STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT :{BLACK}Verborgen weergeven STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP :{BLACK}Door het inschakelen van deze knop, worden de verborgen treinen ook weergegeven STR_SHOW_HIDDEN_ENGINES_VEHICLE_ROAD_VEHICLE_TOOLTIP :{BLACK}Door het inschakelen van deze knop, worden de verborgen wegvoertuigen ook weergegeven @@ -317,21 +319,21 @@ STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauzeer STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Verhoog de spelsnelheid STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opties STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Spel opslaan, spel stoppen, afsluiten -STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Toon kaart, extra kijkvenster of bordenlijst -STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Toon stedenlijst -STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Toon subsidies -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Toon lijst met stations van het bedrijf -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Toon financiële informatie over het bedrijf -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Toon algemene informatie over het bedrijf -STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Toon verhaallijn +STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Kaart, extra kijkvenster of lijst met bordjes weergeven +STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Stedenlijst weergeven +STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Subsidies weergeven +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Lijst met stations van het bedrijf weergeven +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Financiële informatie over het bedrijf weergeven +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Algemene informatie over het bedrijf weergeven +STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Verhaal weergeven STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Geef doellijst weer -STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Toon grafieken -STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Toon bedrijfscompetitietabel +STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Grafieken weergeven +STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Bedrijfsscoretabel weergeven STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Financier de bouw van nieuwe industrie of toon lijst van alle industrieën -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Toon lijst met treinen van het bedrijf. Ctrl+klik schakelt tussen lijst van groepen/voertuigen -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Toon lijst met wegvoertuigen van het bedrijf. Ctrl+klik schakelt tussen lijst van groepen/voertuigen -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Toon lijst met schepen van het bedrijf. Ctrl+klik schakelt tussen lijst van groepen/voertuigen -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Toon lijst met vliegtuigen van het bedrijf. Ctrl+klik schakelt tussen lijst van groepen/voertuigen +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Lijst met treinen van het bedrijf weergeven. Ctrl+klik schakelt tussen lijst van groepen/voertuigen. +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Lijst met wegvoertuigen van het bedrijf weergeven. Ctrl+klik schakelt tussen lijst van groepen/voertuigen. +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Lijst met schepen van het bedrijf weergeven. Ctrl+klik schakelt tussen lijst van groepen/voertuigen. +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Lijst met vliegtuigen van het bedrijf weergeven. Ctrl+klik schakelt tussen lijst van groepen/voertuigen. STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Inzoomen STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Uitzoomen STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Bouw spoorwegen @@ -339,7 +341,7 @@ STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Bouw weg STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Bouw havens STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Bouw vliegvelden STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Open de landschapsbalk om land te verhogen/verlagen, bomen te planten, etc. -STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Toon geluid/muziekscherm +STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Geluid-/muziekvenster weergeven STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Toon laatst (nieuws)bericht, toon berichtinstellingen STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Landinformatie, console, scriptdebug, screenshots, over OpenTTD STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Verwissel knoppenbalk @@ -351,7 +353,7 @@ STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Scenari STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Zet startdatum 1 jaar terug STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Zet startdatum 1 jaar vooruit STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Klik om het startjaar op te geven -STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Toon kaart, stedenlijst +STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Kaart, stedenlijst weergeven STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Landschapsontwikkeling STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Stadsontwikkeling STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Industrieontwikkeling @@ -376,10 +378,10 @@ STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Instellingen STR_SETTINGS_MENU_SCRIPT_SETTINGS :AI/Spelscriptinstellingen STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF-instellingen STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Doorzichtigheidsopties -STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Toon plaatsnamen -STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Toon stationsnamen -STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Toon controlepostnamen -STR_SETTINGS_MENU_SIGNS_DISPLAYED :Toon borden +STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Plaatsnamen weergeven +STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Stationsnamen weergeven +STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Seinhuisnamen weergeven +STR_SETTINGS_MENU_SIGNS_DISPLAYED :Bordjes weergeven STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Toon borden en namen van tegenstanders STR_SETTINGS_MENU_FULL_ANIMATION :Alle animaties STR_SETTINGS_MENU_FULL_DETAIL :Alle details @@ -448,7 +450,7 @@ STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Bouw waterwegen ############ range ends here ############ range for airport construction menu starts -STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Bouw vliegvelden +STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Vliegvelden bouwen ############ range ends here ############ range for landscaping menu starts @@ -469,17 +471,17 @@ STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Berichtengeschi ############ range for about menu starts STR_ABOUT_MENU_LAND_BLOCK_INFO :Landinformatie STR_ABOUT_MENU_SEPARATOR : -STR_ABOUT_MENU_TOGGLE_CONSOLE :Schakel console aan/uit -STR_ABOUT_MENU_AI_DEBUG :AI/Game Script debug -STR_ABOUT_MENU_SCREENSHOT :Screenshot -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Ingezoomd screenshot -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Screenshot met standaard zoom -STR_ABOUT_MENU_GIANT_SCREENSHOT :Screenshot van hele kaart -STR_ABOUT_MENU_SHOW_FRAMERATE :Toon frame rate +STR_ABOUT_MENU_TOGGLE_CONSOLE :Console in-uitschakelen +STR_ABOUT_MENU_AI_DEBUG :Probleemoplossing AI/spelscript +STR_ABOUT_MENU_SCREENSHOT :Schermafbeelding +STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Ingezoomde schermafbeelding +STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Schermafbeelding met standaardzoom +STR_ABOUT_MENU_GIANT_SCREENSHOT :Schermafbeelding van de hele kaart +STR_ABOUT_MENU_SHOW_FRAMERATE :Framesnelheid weergeven STR_ABOUT_MENU_ABOUT_OPENTTD :Over 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite-uitlijner -STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Schakel selectiekaders -STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Schakel kleuren van braakliggende grond aan/uit +STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Selectiekaders in-uitschakelen +STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Kleuren van vuile blokken in-uitschakelen ############ range ends here ############ range for ordinal numbers used for the place in the highscore window @@ -564,7 +566,7 @@ STR_MONTH_DEC :December # Graph window STR_GRAPH_KEY_BUTTON :{BLACK}Legenda -STR_GRAPH_KEY_TOOLTIP :{BLACK}Toon legenda bij deze grafiek +STR_GRAPH_KEY_TOOLTIP :{BLACK}Legenda bij deze grafiek weergeven STR_GRAPH_X_LABEL_MONTH :{TINY_FONT}{STRING}{} {STRING} STR_GRAPH_X_LABEL_MONTH_YEAR :{TINY_FONT}{STRING}{} {STRING}{}{NUM} STR_GRAPH_Y_LABEL :{TINY_FONT}{STRING} @@ -581,12 +583,12 @@ STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLA STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Betaling voor het leveren van 10 eenheden (of 10,000 liter) aan vracht over een afstand van 20 vakjes STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Alles aan STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Alles uit -STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Toon alle vrachtsoorten op de grafiek van vrachtprijzen -STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Toon geen vrachtsoorten op de grafiek van vrachtprijzen +STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Alle vrachtsoorten weergeven op de grafiek van vrachtprijzen +STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Geen vrachtsoorten weergeven op de grafiek van vrachtprijzen STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Schakel grafiek voor vrachttype aan/uit STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} -STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Toon gedetailleerde prestatiescores +STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Gedetailleerde prestatiescores weergeven # Graph key window STR_GRAPH_KEY_CAPTION :{WHITE}Legenda voor bedrijfsgrafieken @@ -611,7 +613,7 @@ STR_PERFORMANCE_DETAIL_KEY :{BLACK}Detail STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT}) STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA}) STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{NUM}% -STR_PERFORMANCE_DETAIL_SELECT_COMPANY_TOOLTIP :{BLACK}Toon details van dit bedrijf +STR_PERFORMANCE_DETAIL_SELECT_COMPANY_TOOLTIP :{BLACK}Details voor dit bedrijf weergeven ############ Those following lines need to be in this order!! STR_PERFORMANCE_DETAIL_VEHICLES :{BLACK}Voertuigen: STR_PERFORMANCE_DETAIL_STATIONS :{BLACK}Stations: @@ -669,7 +671,7 @@ STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Kies 'Ez STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Selecteer 'Aangepast1'-programma STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Selecteer 'Aangepast2'-programma STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Programmashuffle aan/uit -STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Toon nummerkeuzescherm +STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Venster voor muzieknummers weergeven # Playlist window STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Muziekprogramma - '{STRING}' @@ -709,13 +711,13 @@ STR_SMALLMAP_TYPE_ROUTEMAP :Vrachtstroom STR_SMALLMAP_TYPE_ROUTES :Routes STR_SMALLMAP_TYPE_VEGETATION :Begroeiing STR_SMALLMAP_TYPE_OWNERS :Eigenaren -STR_SMALLMAP_TOOLTIP_SHOW_LAND_CONTOURS_ON_MAP :{BLACK}Toon landcontouren op de kaart -STR_SMALLMAP_TOOLTIP_SHOW_VEHICLES_ON_MAP :{BLACK}Toon voertuigen op de kaart -STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRIES_ON_MAP :{BLACK}Toon industrieën op de kaart -STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Toon vrachtstroom op de kaart -STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Toon transportroutes op de kaart +STR_SMALLMAP_TOOLTIP_SHOW_LAND_CONTOURS_ON_MAP :{BLACK}Landcontouren op de kaart weergeven +STR_SMALLMAP_TOOLTIP_SHOW_VEHICLES_ON_MAP :{BLACK}Voertuigen op de kaart weergeven +STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRIES_ON_MAP :{BLACK}Industrieën op de kaart weergeven +STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Vrachtstroom op de kaart weergeven +STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Transportroutes op de kaart weergeven STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Toon begroeiing op de kaart -STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Toon landeigenaren op de kaart +STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Landeigenaren op de kaart weergeven STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Klik op een industriesoort om deze weer te geven. Ctrl+klik verbergt alle andere industriesoorten behalve de geselecteerde. Nogmaals Ctrl+klik geeft opnieuw alle industriesoorten weer. STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Klik op een bedrijf om de bedrijfseigendommen weer te geven. Ctrl+klik verbergt alle andere bedrijven behalve de geselecteerde. Nogmaals Ctrl+klik geeft opnieuw alle bedrijven weer. STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Klik op een vrachtsoort om de eigenschappen weer te geven. Ctrl+Klik verbergt alle vrachtsoorten behalve de geselecteerde. Ctrl+Klik opnieuw om alle vrachttypes te activeren @@ -757,14 +759,14 @@ STR_SMALLMAP_COMPANY :{TINY_FONT}{COM STR_SMALLMAP_TOWN :{TINY_FONT}{WHITE}{TOWN} STR_SMALLMAP_DISABLE_ALL :{BLACK}Alles uitschakelen STR_SMALLMAP_ENABLE_ALL :{BLACK}Alles inschakelen -STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Toon hoogte -STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Toon geen industrieën op de kaart -STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Toon alle industrieën op de kaart +STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Hoogte weergeven +STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Geen industrieën op de kaart weergeven +STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Alle industrieën op de kaart weergeven STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Schakel tonen van hoogte aan/uit STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Verberg bedrijfseigendommen op de kaart -STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Toon alle bedrijfseigendommen op de kaart -STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Toon geen vrachtsoorten op de kaart -STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Toon alle vrachtsoorten op de kaart +STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Alle bedrijfseigendommen op de kaart weergeven +STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Geen vrachtsoorten op de kaart weergeven +STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Alle vrachtsoorten op de kaart weergeven # Status bar messages STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Toon laatst (nieuws)bericht @@ -815,6 +817,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Directeur) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} betaalt bouw van nieuwe stad {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Er is een nieuwe stad gemaakt met de naam {TOWN}! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Nieuwe {STRING} in aanbouw bij {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Nieuw {STRING} in aanplant bij {TOWN}! @@ -928,6 +931,7 @@ STR_GAME_OPTIONS_CURRENCY_CUSTOM :Aangepast... STR_GAME_OPTIONS_CURRENCY_GEL :Georgische Lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Iraanse Rial (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Nieuwe Russische Roebel (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Mexicaanse peso (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Wegvoertuigen @@ -1052,11 +1056,11 @@ STR_VARIETY_MEDIUM :Gemiddeld STR_VARIETY_HIGH :Hoog STR_VARIETY_VERY_HIGH :Zeer Hoog -STR_AI_SPEED_VERY_SLOW :Zeer Langzaam +STR_AI_SPEED_VERY_SLOW :Zeer langzaam STR_AI_SPEED_SLOW :Langzaam STR_AI_SPEED_MEDIUM :Gemiddeld STR_AI_SPEED_FAST :Snel -STR_AI_SPEED_VERY_FAST :Zeer Snel +STR_AI_SPEED_VERY_FAST :Zeer snel STR_SEA_LEVEL_VERY_LOW :Zeer Laag STR_SEA_LEVEL_LOW :Laag @@ -1108,9 +1112,9 @@ STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Bedrijfsinstell STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categorie: STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Type: STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Beperkt de onderstaande lijst met vooraf gedefinieerde filters -STR_CONFIG_SETTING_RESTRICT_BASIC :Basis (toon alleen belangrijke instellingen) -STR_CONFIG_SETTING_RESTRICT_ADVANCED :Geavanceerd (toon de meeste instellingen) -STR_CONFIG_SETTING_RESTRICT_ALL :Expert (toon alle instellingen, inclusief vreemde) +STR_CONFIG_SETTING_RESTRICT_BASIC :Basis (alleen belangrijke instellingen weergeven) +STR_CONFIG_SETTING_RESTRICT_ADVANCED :Geavanceerd (meeste instellingen weergeven) +STR_CONFIG_SETTING_RESTRICT_ALL :Expert (alle instellingen weergeven, inclusief vreemde) STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Instellingen met een andere waarde dan de standaard STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Instellingen met een andere waarde dan je 'nieuw spel' instellingen @@ -1121,9 +1125,9 @@ STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Spelinstellinge STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Spelinstellingen (Opgeslagen in bestand; hebben alleen betrekking op huidig spel) STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Bedrijfsinstellingen (Opgeslagen in bestand; heeft alleen betrekking op nieuwe spellen) STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Bedrijfsinstellingen (Opgeslagen in bestand; hebben alleen betrekking op huidig bedrijf) -STR_CONFIG_SETTING_CATEGORY_HIDES :{BLACK}Toon alle zoekresultaten per instelling{}{SILVER}Categorie {BLACK}naar {WHITE}{STRING} -STR_CONFIG_SETTING_TYPE_HIDES :{BLACK}Toon alle zoekresultaten per instelling{}{SILVER}Type {BLACK}naar {WHITE}Alle instellingstypen -STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Toon alle zoekresultaten per instelling{}{SILVER}Categorie {BLACK}to {WHITE}{STRING} {BLACK}and {SILVER}Type {BLACK}naar {WHITE}Alle instellingstypen +STR_CONFIG_SETTING_CATEGORY_HIDES :{BLACK}Alle zoekresultaten per instelling weergeven{}{SILVER}Categorie {BLACK}naar {WHITE}{STRING} +STR_CONFIG_SETTING_TYPE_HIDES :{BLACK}Alle zoekresultaten per instelling weergeven{}{SILVER}Type {BLACK}naar {WHITE}alle instellingstypen +STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Alle zoekresultaten per instelling weergeven{}{SILVER}Categorie {BLACK}naar {WHITE}{STRING} {BLACK}en {SILVER}type {BLACK}naar {WHITE}Alle instellingstypen STR_CONFIG_SETTINGS_NONE :{WHITE}- Geen - STR_CONFIG_SETTING_OFF :Uit @@ -1209,7 +1213,7 @@ STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Plat gebied ron STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Hoeveelheid ruimte rond een industrie. Dit zorgt ervoor dat lege ruimte rond een industrie beschikbaar blijft voor sporen, stations, wegen enz. STR_CONFIG_SETTING_MULTIPINDTOWN :Meerdere vergelijkbare industrieën per stad toestaan: {STRING} STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normaal zal een stad niet meer dan één industrie van ieder type toestaan. Door deze optie in te schakelen zullen steden meerdere industrieën van één soort accepteren. -STR_CONFIG_SETTING_SIGNALSIDE :Toon seinen: {STRING} +STR_CONFIG_SETTING_SIGNALSIDE :Seinen weergeven: {STRING} STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Kies aan welke kans van het sppor de seinen worden geplaatst STR_CONFIG_SETTING_SIGNALSIDE_LEFT :Aan de linker kant STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :Aan de rij zijde @@ -1257,6 +1261,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Deze ins STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Onderhoud infrastructuur: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Wanneer dit is ingeschakeld, veroorzaakt de infrastructuur onderhoudskosten. De kosten groeien boven-proportioneel met de grootte van het netwerk, waardoor grotere bedrijven hierdoor meer worden beïnvloed dan kleinere +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Beginkleur voor bedrijf: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Kies de beginkleur voor het bedrijf STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Vliegvelden verlopen niet: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Het inschakelen van deze instelling zorgt ervoor dat elke luchthaven soort altijd beschikbaar blijft na de introductie @@ -1283,12 +1289,12 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minimale hoevee STR_CONFIG_SETTING_ERRMSG_DURATION :Duur van foutbericht: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duur voor het weergeven van foutberichten in een rood venster. Merk op dat sommige (kritische) foutmeldingen niet automatisch worden gesloten na deze tijd, deze moeten handmatig worden gesloten STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} seconde{P 0 "" n} -STR_CONFIG_SETTING_HOVER_DELAY :Toon tooltips: {STRING} +STR_CONFIG_SETTING_HOVER_DELAY :Knopinfo weergeven: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Vertraging voordat tooltips worden weergegeven wanneer de muis over een interface-element. Als alternatief kunnen tooltips worden gebonden aan de rechtermuisknop wanneer de waarde 0 is. STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Wijs aan voor {COMMA} seconde{P 0 "" n} STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Rechtsklik STR_CONFIG_SETTING_POPULATION_IN_LABEL :Geef het inwoneraantal bij een stad weer: {STRING} -STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Toon de populatie van een stad in hun tekst op de kaart +STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Aantal inwoners van een stad weergeven bij naam op de kaart STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Dikte van de lijnen in grafieken: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Breedte van de lijnen in de grafiek. Een dunne lijn is preciezer leesbaar, een dikke lijn is makkelijker te zien en kleuren zijn makkelijker om te onderscheiden @@ -1349,7 +1355,7 @@ STR_CONFIG_SETTING_SCROLLMODE_RMB :Verplaats kaart STR_CONFIG_SETTING_SCROLLMODE_LMB :Verplaats kaart met LMB STR_CONFIG_SETTING_SMOOTH_SCROLLING :Vloeiend scrollen kijkvenster: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Bepalen hoe de hoofdweergave naar een specifieke positie schuift bij het klikken op de minikaart of bij het uitvoeren van een commando om naar een specifiek object op de kaart te scrollen. Indien ingeschakeld, dan scrollt het kijkvenster soepel, als deze uitgeschakeld gaat u rechtstreeks naar de beoogde plek -STR_CONFIG_SETTING_MEASURE_TOOLTIP :Toon dimensie-informatie bij het gebruik van diverse bouwgereedschappen: {STRING} +STR_CONFIG_SETTING_MEASURE_TOOLTIP :Maten weergeven bij het gebruik van diverse bouwgereedschappen: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Geef tegelafstanden en hoogteverschillen weer bij het slepen tijdens het bouwen STR_CONFIG_SETTING_LIVERIES :Laat alle voertuigkleuren zien: {STRING} STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Beheer het gebruik van voertuigspecifieke levering voor voertuigen (in tegenstelling tot bedrijfsspecifieke leveringen). @@ -1402,9 +1408,9 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Gebruik groepen STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Schakel het gebruik van de geavanceerde voertuigenlijsten in voor het groeperen van voertuigen STR_CONFIG_SETTING_LOADING_INDICATORS :Gebruik laadindicatoren: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Geef aan of laadindicatoren worden weergegeven boven ladende of lossende voertuigen -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Toon dienstregeling in tikken ipv in dagen: {STRING} -STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Toon reistijden in tijdtabellen in het spelticks in plaats van dagen -STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Toon aankomst- en vertrektijden in dienstregeling: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Dienstregeling in tikken weergeven i.p.v. in dagen: {STRING} +STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Reistijden in tijdtabellen in speltikken weergeven in plaats van dagen +STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Aankomst- en vertrektijden in dienstregeling weergeven: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Geef de verwachte aankomst-en vertrektijden in de dienstregeling STR_CONFIG_SETTING_QUICKGOTO :Snel voertuigorders maken: {STRING} STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Pre-selecteer de 'Ga naar cursor' bij het openen van de orders venster @@ -1413,7 +1419,7 @@ STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Spoortype om te STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :Eerst beschikbare STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Laatst beschikbare STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :Meest gebruikte -STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Toon gereserveerd spoor: {STRING} +STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Gereserveerd spoor weergeven: {STRING} STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Geef gereserveerde tracks een andere kleur om te helpen met de problemen met treinen te weigeren een route op basis van blokken in te gaan STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Hou bouwgereedschappen actief na gebruik: {STRING} STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Houd de bouwhulpmiddelen voor bruggen, tunnels, enz. open na gebruik @@ -1423,7 +1429,7 @@ STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Definieer de la STR_CONFIG_SETTING_SOUND_TICKER :Nieuwsticker: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Speel geluidseffect voor samenvatting nieuwsberichten STR_CONFIG_SETTING_SOUND_NEWS :Krant: {STRING} -STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Speel geluidseffect bij het tonen van de krant +STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Geluidseffect weergeven bij nieuwsbericht STR_CONFIG_SETTING_SOUND_NEW_YEAR :Einde jaar: {STRING} STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Speel geluidseffecten bij de samenvatting van resultaten gedurende het jaar ten opzichte van het jaar ervoor aan het einde van het jaar STR_CONFIG_SETTING_SOUND_CONFIRM :Bouw: {STRING} @@ -1488,33 +1494,33 @@ STR_CONFIG_SETTING_DISABLE_ELRAILS :Schakel elektri STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Het inschakelen van deze instelling schakelt de verplichting voor spoorelektrificatie voor elektrische treinen uit STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Eerste voertuig bij eigen station: {STRING} -STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Toon een krant als het eerste voertuig arriveert op een station van de speler +STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Nieuwsbericht weergeven als het eerste voertuig arriveert op een station van de speler STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Eerste voertuig bij station van een concurrent: {STRING} -STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Toon een krant als het eerste voertuig arriveert op een nieuw station van een concurrent +STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Nieuwsbericht weergeven als het eerste voertuig arriveert op een nieuw station van een concurrent STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Ongelukken / rampen: {STRING} -STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Toon een krant bij ongevallen of rampen +STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Nieuwsbericht weergeven bij ongevallen of rampen STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Bedrijfsinformatie: {STRING} -STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Toon een krant als een nieuw bedrijf start, of wanneer een bedrijf het risico loopt om falliet te gaan +STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Nieuwsbericht weergeven als een nieuw bedrijf start en wanneer een bedrijf bijna falliet gaat STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN :Openen van industrieën: {STRING} -STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN_HELPTEXT :Toon een krant als nieuwe industrieën worden geopend +STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN_HELPTEXT :Nieuwsbericht weergeven als een nieuwe industrie worden opgericht STR_CONFIG_SETTING_NEWS_INDUSTRY_CLOSE :Sluiten van industrieën: {STRING} -STR_CONFIG_SETTING_NEWS_INDUSTRY_CLOSE_HELPTEXT :Toon een krant als industrieën sluiten +STR_CONFIG_SETTING_NEWS_INDUSTRY_CLOSE_HELPTEXT :Nieuwsbericht weergeven als een industrie sluit STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES :Veranderingen in de economie: {STRING} -STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES_HELPTEXT :Toon een krant over wereldwijde wijzigingen in de economie +STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES_HELPTEXT :Nieuwsbericht weergeven over wereldwijde wijzigingen in de economie STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY :Productieveranderingen van industrieën bediend door het bedrijf: {STRING} -STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY_HELPTEXT :Toon een krant als het productieniveau van een industrie verandert, die worden bediend door het bedrijf +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY_HELPTEXT :Nieuwsbericht weergeven als het productieniveau van een industrie verandert die wordt bediend door het bedrijf STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER :Productieveranderingen van industrieën bediend door concurrent(en): {STRING} -STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER_HELPTEXT :Toon een krant als het productieniveau van een industrie verandert, die worden bediend door concurrenten +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER_HELPTEXT :Nieuwsbericht weergeven als het productieniveau van een industrie verandert die wordt bediend door een concurrent STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :Andere productieveranderingen van industrieën: {STRING} -STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :Toon een krant als het productieniveau van de industrie verandert, die niet worden bediend door het bedrijf of de concurrenten +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :Nieuwsbericht weergeven als het productieniveau van een industrie verandert die niet wordt bediend door het bedrijf of een concurrent STR_CONFIG_SETTING_NEWS_ADVICE :Advies / informatie over voertuigen van het bedrijf: {STRING} -STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Toon berichten over voertuigen die aandacht nodig hebben +STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Berichten weergeven over voertuigen die aandacht nodig hebben STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Nieuwe voertuigen: {STRING} -STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Toon een krant als een nieuw type voertuig beschikbaar komt +STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Nieuwsbericht weergeven als een nieuw type voertuig beschikbaar komt STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Verandering van geaccepteerde vrachtsoorten: {STRING} -STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Toon een bericht over gewijzigde acceptatie van goederen van stations +STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Bericht weergeven over gewijzigde acceptatie van goederen van stations STR_CONFIG_SETTING_NEWS_SUBSIDIES :Subsidies: {STRING} -STR_CONFIG_SETTING_NEWS_SUBSIDIES_HELPTEXT :Toon een krant over subsidie gerelateerde gebeurtenissen +STR_CONFIG_SETTING_NEWS_SUBSIDIES_HELPTEXT :Nieuwsbericht weergeven over gebeurtenissen met subsidies STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION :Algemene informatie: {STRING} STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION_HELPTEXT :Geef krant weer over algemene gebeurtenissen, zoals de aankoop van exclusieve rechten of financiering van wegherstelling @@ -1761,12 +1767,12 @@ STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Kies sub STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Kies subtropisch klimaat STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Kies speelgoedlandschap -STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Toon spelopties +STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Spelopties weergeven STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Toon scoretabel STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Scherminstellingen -STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Toon NewGRF-instellingen +STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}NewGRF-instellingen weergeven STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Zoeken naar nieuwe en aangepaste inhoud om te downloaden -STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Toon AI/Game script instellingen +STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}AI-/spelscriptinstellingen weergeven STR_INTRO_TOOLTIP_QUIT :{BLACK}Verlaat 'OpenTTD' STR_INTRO_BASESET :{BLACK}De huidige gekozen graphics set mist {NUM} afbeelding{P "" en}. Controleer of er updates zijn voor deze basisset. @@ -1791,8 +1797,8 @@ STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS # Abandon game -STR_ABANDON_GAME_CAPTION :{WHITE}Verlaat spel -STR_ABANDON_GAME_QUERY :{YELLOW}Weet je zeker dat je dit spel wilt afsluiten? +STR_ABANDON_GAME_CAPTION :{WHITE}Spel sluiten +STR_ABANDON_GAME_QUERY :{YELLOW}Weet je zeker dat je dit spel wilt sluiten? STR_ABANDON_SCENARIO_QUERY :{YELLOW}Weet je zeker dat je dit scenario wilt sluiten? # Cheat window @@ -1815,13 +1821,13 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Wijzig h STR_CHEAT_SETUP_PROD :{LTBLUE}Sta aanpassen productiewaarden toe: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nieuw kleurenschema +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - kleurenschema -STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Toon algemene kleurenschema's -STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Toon kleurenschema's voor treinen -STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Toon kleurenschema's voor wegvoertuigen -STR_LIVERY_SHIP_TOOLTIP :{BLACK}Toon kleurenschema's voor schepen -STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Toon kleurenschema's voor vliegtuigen +STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Algemene kleurenschema's weergeven +STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Kleurenschema's voor treinen weergeven +STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Kleurenschema's voor wegvoertuigen weergeven +STR_LIVERY_SHIP_TOOLTIP :{BLACK}Kleurenschema's voor schepen weergeven +STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Kleurenschema's voor vliegtuigen weergeven STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Kies de hoofdkleur voor het geselecteerde schema. Ctrl+klik zal deze kleur instellen voor elk schema STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Kies de tweede kleur voor het geselecteerde schema. Ctrl+klik om deze kleur in alle schema's te gebruiken STR_LIVERY_PANEL_TOOLTIP :{BLACK}Kies een kleurenschema om te wijzigen, of meerdere schema's met Ctrl+klik. Vink de keuzevakjes aan/uit om het gebruik van het schema aan/uit te zetten @@ -2337,8 +2343,8 @@ STR_RAIL_NAME_MONORAIL :Monorail STR_RAIL_NAME_MAGLEV :Zweeftrein # Rail depot construction window -STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Richting van treindepot -STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Selecteer richting van treindepot +STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Richting van remise +STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Selecteer richting van remise # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Controlepost @@ -2362,11 +2368,11 @@ STR_STATION_CLASS_DFLT :Standaardstatio STR_STATION_CLASS_WAYP :Controleposten # Signal window -STR_BUILD_SIGNAL_CAPTION :{WHITE}Seinkeuze +STR_BUILD_SIGNAL_CAPTION :{WHITE}Seinselectie STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Bloksein (armsein){}Dit is het simpelste soort sein dat slechts één trein tegelijk in hetzelfde blok toelaat -STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Ingangssein (semafoor){}Groen zolang als er één of meer groene uitgangsseinen zijn volgend na dit sein. Anders is deze rood -STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Uitgangssein (armsein){}Gedraagt zich hetzelfde als een gewoon bloksein, maar is nodig om ingangs- en combinatieseinen te sturen -STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Combinatiesein (armsein){}Het combinatiesein gedraagt zich als zowel ingangs- als uitgangssein. Zo kun je grote netwerken van beginseinen maken +STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Ingangssein (armsein){}Groen als er een groen uitgangssein is uit het volgende blok. Anders rood. +STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Uitgangssein (armsein){}Gedraagt zich hetzelfde als een standaardsein, maar is nodig om ingangs- en combinatie-voorseinen aan te sturen +STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Combinatiesein (armsein){}Het combinatiesein gedraagt zich als zowel ingangs- als uitgangssein. Zo kun je grote netwerken van voorseinen maken STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Routesein (armsein){}Een routesein laat meer dan één trein tegelijk in een seinblok toe als de trein een route kan reserveren naar een veilige stopplaats. Routeseinen kunnen van achteren worden gepasseerd STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Eenrichtingsrouteseinen (armsein){}Een routesein laat meer dan één trein tegelijk in een seinblok toe als de trein een route kan reserveren naar een veilige stopplaats. Eenrichtingsrouteseinen kunnen niet van achteren worden gepasseerd STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Standaardsein (elektrisch){}Seinen zijn nodig om te voorkomen dat treinen botsen bij netwerken met meer dan één trein @@ -2376,9 +2382,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Combinat STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Routeseinen (elektrisch){}Een routesein laat meer dan één trein tegelijk op een seinblok toe als de trein een route kan reserveren naar een veilige stopplaats. Routeseinen kunnen van achteren worden gepasseerd STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Eenrichtingsrouteseinen (elektrisch){}Een routesein laat meer dan één trein tegelijk op een seinblok toe als de trein een route kan reserveren naar een veilige stopplaats. Eenrichtingsrouteseinen kunnen niet van achteren worden gepasseerd STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Sein ombouwen{}Als dit geselecteerd is, dan zal door te klikken op een bestaand sein deze worden omgebouwd naar het geselecteerde seintype en variant, Ctrl+klik verandert de bestaande variant (armsein/elektrisch). Shift+klik toont de geschatte ombouwkosten -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Dichtheid van seinen bij het slepen -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Verklein dichtheid van seinen bij het slepen -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Vergroot dichtheid van seinen bij het slepen +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Dichtheid van seinen bij slepen +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Dichtheid van seinen bij slepen verkleinen +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Dichtheid van seinen bij slepen vergroten # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Kies type spoorbrug @@ -2387,13 +2393,13 @@ STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Brugkeuz STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY} STR_BRIDGE_NAME_SUSPENSION_STEEL :Hangend, Staal -STR_BRIDGE_NAME_GIRDER_STEEL :Koker, Staal +STR_BRIDGE_NAME_GIRDER_STEEL :Ligger, staal STR_BRIDGE_NAME_CANTILEVER_STEEL :Vrijdragend, Staal STR_BRIDGE_NAME_SUSPENSION_CONCRETE :Hangend, Beton STR_BRIDGE_NAME_WOODEN :Hout STR_BRIDGE_NAME_CONCRETE :Beton -STR_BRIDGE_NAME_TUBULAR_STEEL :Buis, Staal -STR_BRIDGE_TUBULAR_SILICON :Buis, Silicium +STR_BRIDGE_NAME_TUBULAR_STEEL :Buis, staal +STR_BRIDGE_TUBULAR_SILICON :Buis, silicium # Road construction toolbar @@ -2420,8 +2426,8 @@ STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Kies tus # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Richting van garage STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP :{BLACK}Selecteer richting van garage -STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}Richting van tramdepot -STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Selecteer richting van tramdepot +STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}Richting van tramremise +STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Selecteer richting van tramremise # Road vehicle station construction window STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Richting van bushalte @@ -2466,7 +2472,7 @@ STR_AIRPORT_SMALL :Klein STR_AIRPORT_CITY :Stad STR_AIRPORT_METRO :Grootstedelijk STR_AIRPORT_INTERNATIONAL :Internationaal vliegveld -STR_AIRPORT_COMMUTER :Pendel +STR_AIRPORT_COMMUTER :Forens STR_AIRPORT_INTERCONTINENTAL :Intercontinentaal STR_AIRPORT_HELIPORT :Heliport STR_AIRPORT_HELIDEPOT :Helihangar @@ -2474,7 +2480,7 @@ STR_AIRPORT_HELISTATION :Helikopterstati STR_AIRPORT_CLASS_SMALL :Kleine vliegvelden STR_AIRPORT_CLASS_LARGE :Grote vliegvelden -STR_AIRPORT_CLASS_HUB :Centraal vliegveld +STR_AIRPORT_CLASS_HUB :Knooppuntvliegvelden STR_AIRPORT_CLASS_HELIPORTS :Helikoptervliegvelden STR_STATION_BUILD_NOISE :{BLACK}Geluidsoverlast: {GOLD}{COMMA} @@ -2500,7 +2506,7 @@ STR_OBJECT_CLASS_TRNS :Zendmasten STR_PLANT_TREE_CAPTION :{WHITE}Bomen STR_PLANT_TREE_TOOLTIP :{BLACK}Kies een soort boom om te planten. Als de tegel al bomen bevat, zullen er meer bomen van verschillende types bijkomen, onafhankelijk van het geselecteerde type. STR_TREES_RANDOM_TYPE :{BLACK}Willekeurige soorten bomen -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Plant bomen van willekeurige soort. Shift+klik wisselt tussen bouwen/toont verwachte kosten +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Willekeurig bomen planten. Shift+klik wisselt tussen bouwen/verwachte kosten. STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Willekeurige bomen STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plant bomen willekeurig over de kaart @@ -2521,7 +2527,7 @@ STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Weet je # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Stadsontwikkeling STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Nieuwe stad -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Sticht nieuwe stad. Shift+klik toont alleen de verwachte kosten +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Nieuwe stad stichten. Shift+klik geeft alleen de verwachte kosten. STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Willekeurige stad STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Sticht stad op willekeurige locatie STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Veel willekeurige steden @@ -2568,10 +2574,10 @@ STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Accepter STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Huizen STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Klik op de industrie om de leveranciers en klanten te zien STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Klik op de vracht om de leveranciers en klanten te zien -STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Toon keten -STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Toon vracht leverende en accepterende industrieën +STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Keten weergeven +STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Industrieën weergeven die vracht leveren en accepteren STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Link naar de kleine kaart -STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Kies de getoonde industrie ook in de kleine kaart +STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Weergegeven industrieën ook op de kleine kaart selecteren STR_INDUSTRY_CARGOES_SELECT_CARGO :{BLACK}Kies vracht STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}Kies de vracht om te tonen STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}Kies bedrijf @@ -2696,43 +2702,43 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terrein in bedr # About OpenTTD window STR_ABOUT_OPENTTD :{WHITE}Over OpenTTD -STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Originele copyright {COPYRIGHT} 1995 Chris Sawyer, alle rechten voorbehouden +STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Originele auteursrecht {COPYRIGHT} 1995 Chris Sawyer, alle rechten voorbehouden STR_ABOUT_VERSION :{BLACK}OpenTTD-versie {REV} STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Het OpenTTD-team # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Frame rate STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) -STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Simulatiesnelheid: {STRING} +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulatiesnelheid: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Aantal gesimuleerde gameticks per seconde. -STR_FRAMERATE_RATE_BLITTER :{WHITE}Graphics frame rate: {STRING} +STR_FRAMERATE_RATE_BLITTER :{BLACK}Grafische framesnelheid: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Aantal videoframes die weergegeven worden per seconde. -STR_FRAMERATE_SPEED_FACTOR :{WHITE}Huidige spelsnelheidsfactor: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Huidige spelsnelheidsfactor: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Hoe snel het spel momenteel draait, vergeleken met de verwachte snelheid bij een normale simulatiesnelheid. STR_FRAMERATE_CURRENT :{WHITE}Huidig STR_FRAMERATE_AVERAGE :{WHITE}Gemiddelde -STR_FRAMERATE_DATA_POINTS :{WHITE}Gegevens gebaseerd op {COMMA} metingen -STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms -STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms -STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms -STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE} frames/s -STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} frames/s -STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} frames/s +STR_FRAMERATE_DATA_POINTS :{BLACK}Gegevens gebaseerd op {COMMA} metingen +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} frames/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} frames/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} frames/s STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! -STR_FRAMERATE_GAMELOOP :{WHITE}Gamelooptotaal: -STR_FRAMERATE_GL_ECONOMY :{WHITE} Cargoafhandeling: -STR_FRAMERATE_GL_TRAINS :{WHITE} Treinticks: -STR_FRAMERATE_GL_ROADVEHS :{WHITE} Wegvoertuigticks: -STR_FRAMERATE_GL_SHIPS :{WHITE} Schipticks: -STR_FRAMERATE_GL_AIRCRAFT :{WHITE} Vliegtuigticks: -STR_FRAMERATE_GL_LANDSCAPE :{WHITE} Wereldticks: -STR_FRAMERATE_GL_LINKGRAPH :{WHITE} Link grafiekvertraging: -STR_FRAMERATE_DRAWING :{WHITE}Graphics weergeven: -STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Wereldkijkvensters: -STR_FRAMERATE_VIDEO :{WHITE}Video-output: -STR_FRAMERATE_SOUND :{WHITE}Geluid mixen: +STR_FRAMERATE_GAMELOOP :{BLACK}Spellustotaal: +STR_FRAMERATE_GL_ECONOMY :{BLACK} Vrachtafhandeling: +STR_FRAMERATE_GL_TRAINS :{BLACK} Treinticks: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Wegvoertuigticks: +STR_FRAMERATE_GL_SHIPS :{BLACK} Schipticks: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Vliegtuigticks: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Wereldticks: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Vertraging koppelinggrafiek: +STR_FRAMERATE_DRAWING :{WHITE}Grafische weergave: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Wereldkijkvensters: +STR_FRAMERATE_VIDEO :{BLACK}Video-uitvoer: +STR_FRAMERATE_SOUND :{BLACK}Geluid mengen: ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Gameloop @@ -2772,6 +2778,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Spel det STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Geen informatie beschikbaar STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtertekenreeks: STR_SAVELOAD_OSKTITLE :{BLACK}Voer een naam in voor het spel dat moet worden opgeslagen @@ -2889,7 +2896,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versie: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Laagste compatibele versie: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palet: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Standaard (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Standaard (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Oorspronkelijk (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Oorspronkelijk (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameters: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Geen STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Geen informatie beschikbaar STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Bestand niet gevonden @@ -2964,12 +2976,14 @@ STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Laden van {1:ST STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Onverwachte sprite (sprite {3:NUM}) STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Onbekende Action 0-eigenschap {4:HEX} (sprite {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :Poging om ongeldig ID te gebruiken (sprite {3:NUM}) -STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} bevat een ongeldige afbeelding. Alle ongeldige afbeeldingen worden getoond als een rood vraagteken (?) +STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} bevat een ongeldige sprite. Alle ongeldige sprites worden weergegeven als een rood vraagteken (?). STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Bevat meerdere Action 8-invoer (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Voorbij het einde van pseudo-sprite gelezen (sprite {3:NUM}) STR_NEWGRF_ERROR_GRM_FAILED :Gevraagde GRF-middelen niet beschikbaar (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} is uitgeschakeld door {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ongeldig/onbekend spritelay-outformaat (sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Te veel elementen in eigenschappenwaardelijst (sprite {3:NUM}, eigenschap {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ongeldige terugroep voor industriële productie (sprite {3:NUM}, "{1:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Waarschuwing! @@ -3232,8 +3246,8 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Voorkom STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centreer scherm op de locatie van de controlepost. Ctrl+klik opent een nieuw venster op de locatie van de controlepost STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Verander naam controlepost -STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centreer hoofdscherm op boeilocatie. Ctrl+klik opent een nieuw venster op de locatie van de boei -STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Verander naam boei +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_CHANGE_BUOY_NAME :{BLACK}Naam van boei aanpassen STR_EDIT_WAYPOINT_NAME :{WHITE}Naam controlepost aanpassen @@ -3292,7 +3306,7 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Geen STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Bouw bedrijfshoofdkwartier STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Bouw bedrijfshoofdkwartier STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Bekijk bedrijfshoofdkwartier -STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Toon bedrijfshoofdkwartier +STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Hoofdkantoor weergeven STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Verplaats bedrijfshoofdkwartier STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Herbouw bedrijfshoofdkwartier ergens anders voor 1% van de bedrijfswaarde. Shift+klik toont verwachte kosten zonder hoofdkwartier te verplaatsen STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Details @@ -3309,8 +3323,8 @@ STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Verander STR_COMPANY_VIEW_BUY_SHARE_BUTTON :{BLACK}Koop een aandeel van 25% in dit bedrijf STR_COMPANY_VIEW_SELL_SHARE_BUTTON :{BLACK}Verkoop een aandeel van 25% in dit bedrijf -STR_COMPANY_VIEW_BUY_SHARE_TOOLTIP :{BLACK}Koop een aandeel van 25% in dit bedrijf. Shift+klik toont verwachte kosten zonder te kopen -STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Verkoop een aandeel van 25% in dit bedrijf. Shift+klik toont verwachte kosten zonder te kopen +STR_COMPANY_VIEW_BUY_SHARE_TOOLTIP :{BLACK}Koop een aandeel van 25% in dit bedrijf. Shift+klik geeft de verwachte kosten zonder te kopen. +STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Verkoop een aandeel van 25% in dit bedrijf. Shift+klik geeft de verwachte kosten zonder te kopen. STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Bedrijfsnaam STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Naam van directeur @@ -3347,6 +3361,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centreer STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Productieniveau: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}De industrie heeft een dreigende sluiting aangekondigd! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Vereist: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produceert: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Vereist: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} @@ -3404,6 +3421,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groepen STR_GROUP_CREATE_TOOLTIP :{BLACK}Klik om een groep te creëren STR_GROUP_DELETE_TOOLTIP :{BLACK}Verwijder de geselecteerde groep STR_GROUP_RENAME_TOOLTIP :{BLACK}Hernoem de geselecteerde groep +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Wijzig het uiterlijk van de geselecteerde groep STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klik om deze groep te beschermen tegen globaal automatisch vervangen STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Verwijder groep @@ -3447,6 +3465,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacite STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Aangedreven wagons: {GOLD}+{POWER}{BLACK} Gewicht: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Om te bouwen naar: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Alle vrachttypen +STR_PURCHASE_INFO_NONE :Geen STR_PURCHASE_INFO_ALL_BUT :Alles behalve {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Max. trekkracht: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Bereik: {GOLD}{COMMA} tegels @@ -3458,19 +3477,19 @@ STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Schipske STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Vliegtuigkeuzelijst. Klik op een vliegtuig voor informatie. Ctrl+klik voor om het verbergen van het vliegtuigtype aan te zetten STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Koop spoorvoertuig -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Koop wegvoertuig +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Wegvoertuig kopen STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Koop schip -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Koop vliegtuig +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Vliegtuig kopen STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde spoorvoertuig. Shift+klik toont verwachte kosten zonder te kopen -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde wegvoertuig. Shift+klik toont verwachte kosten zonder te kopen -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde schip. Shift+klik toont verwachte kosten zonder te kopen -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde vliegtuig. Shift+klik toont verwachte kosten zonder te kopen +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde wegvoertuig. Shift+klik geeft de verwachte kosten zonder te kopen. +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde schip. Shift+klik geeft de verwachte kosten zonder te kopen +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde vliegtuig. Shift+klik geeft de verwachte kosten zonder te kopen. STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Hernoem -STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Hernoem +STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Hernoemen STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Hernoem -STR_BUY_VEHICLE_AIRCRAFT_RENAME_BUTTON :{BLACK}Hernoem +STR_BUY_VEHICLE_AIRCRAFT_RENAME_BUTTON :{BLACK}Hernoemen STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP :{BLACK}Hernoem type spoorvoertuig STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}Hernoem type wegvoertuig @@ -3478,14 +3497,14 @@ STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}Hernoem STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Hernoem type vliegtuig STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON :{BLACK}Verberg -STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_TOGGLE_BUTTON :{BLACK}Verberg +STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_TOGGLE_BUTTON :{BLACK}Verbergen STR_BUY_VEHICLE_SHIP_HIDE_TOGGLE_BUTTON :{BLACK}Verberg -STR_BUY_VEHICLE_AIRCRAFT_HIDE_TOGGLE_BUTTON :{BLACK}Verberg +STR_BUY_VEHICLE_AIRCRAFT_HIDE_TOGGLE_BUTTON :{BLACK}Verbergen -STR_BUY_VEHICLE_TRAIN_SHOW_TOGGLE_BUTTON :{BLACK}Toon -STR_BUY_VEHICLE_ROAD_VEHICLE_SHOW_TOGGLE_BUTTON :{BLACK}Toon -STR_BUY_VEHICLE_SHIP_SHOW_TOGGLE_BUTTON :{BLACK}Toon -STR_BUY_VEHICLE_AIRCRAFT_SHOW_TOGGLE_BUTTON :{BLACK}Toon +STR_BUY_VEHICLE_TRAIN_SHOW_TOGGLE_BUTTON :{BLACK}Weergeven +STR_BUY_VEHICLE_ROAD_VEHICLE_SHOW_TOGGLE_BUTTON :{BLACK}Weergeven +STR_BUY_VEHICLE_SHIP_SHOW_TOGGLE_BUTTON :{BLACK}Weergeven +STR_BUY_VEHICLE_AIRCRAFT_SHOW_TOGGLE_BUTTON :{BLACK}Weergeven STR_BUY_VEHICLE_TRAIN_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Wijzigt het verbergen/tonen van het treintype STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Wijzigt het verbergen/tonen van het wegvoertuigtype @@ -3545,10 +3564,10 @@ STR_DEPOT_CLONE_ROAD_VEHICLE :{BLACK}Kloon we STR_DEPOT_CLONE_SHIP :{BLACK}Kloon schip STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Kloon vliegtuig -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Hierdoor wordt een kopie gekocht van een trein inclusief wagons. Klik op deze knop en dan op een trein binnen of buiten het depot. Ctrl+klik deelt de orders. Shift+klik toont verwachte kosten zonder te kopen -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Hierdoor wordt een kopie gekocht van een wegvoertuig. Klik op deze knop en dan op een wegvoertuig binnen of buiten de garage. Ctrl+klik deelt de orders. Shift+klik toont verwachte kosten zonder te kopen -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Hierdoor wordt een kopie gekocht van een schip. Klik op deze knop en dan op een schip binnen of buiten het dok. Ctrl+klik deelt de orders. Shift+klik toont verwachte kosten zonder te kopen -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Hierdoor wordt een kopie gekocht van een vliegtuig. Klik op deze knop en dan op een vliegtuig binnen of buiten de hangar. Ctrl+klik deelt de orders. Shift+klik toont verwachte kosten zonder te kopen +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Hiermee koop je een kopie van een trein, inclusief wagons. Klik op deze knop en dan op een trein binnen of buiten het depot. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen. +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Hiermee koop je een kopie van een wegvoertuig. Klik op deze knop en dan op een wegvoertuig binnen of buiten de garage. Ctrl+klik deelt de orders. Shift+klik geeft de verwachte kosten zonder te kopen. +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}Centreer het scherm op de locatie van het treindepot. Ctrl+klik opent een nieuw scherm op de locatie van het treindepot 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 @@ -3643,10 +3662,10 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Stuur we STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Stuur schip naar dok. Ctrl+klik voor alleen onderhoud STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Stuur vliegtuig naar hangar. Ctrl+klik voor alleen onderhoud -STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Hierdoor wordt een kopie gekocht van deze trein inclusief wagons. Ctrl+klik deelt de orders. Shift+klik toont verwachte kosten zonder te kopen -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Hierdoor wordt een kopie gekocht van dit wegvoertuig. Ctrl+klik deelt de orders. Shift+klik toont verwachte kosten zonder te kopen -STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Hierdoor wordt een kopie gekocht van dit schip. Ctrl+klik deelt de orders. Shift+klik toont verwachte kosten zonder te kopen -STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Hierdoor wordt een kopie gekocht van dit vliegtuig. Ctrl+klik deelt de orders. Shift+klik toont verwachte kosten zonder te kopen +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_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 @@ -3659,14 +3678,14 @@ STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Keer tre STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Dwing het wegvoertuig te keren. STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Toon orders van de trein. Ctrl+klik toont het tijdschema van de trein -STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Toon orders van het wegvoertuig. Ctrl+klik toont tijdschema van het voertuig +STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Orders van wegvoertuig weergeven. Ctrl+klik geeft de dienstregeling van het voertuig. STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Toon orders van het schip. Ctrl+klik toont tijdschema van het schip -STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Toon orders van het vliegtuig. Ctrl+klik toont het tijdschema van het vliegtuig +STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Orders van vliegtuig weergeven. Ctrl+klik geeft de dienstregeling van het vliegtuig. STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Toon details van trein STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Toon details van wegvoertuig STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Toon details van schip -STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Toon details van vliegtuig +STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Details van vliegtuig weergeven STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Huidige actie van trein - klik hier om de trein te starten/stoppen. Ctrl+klik om naar bestemming te scrollen STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Huidige actie van wegvoertuig - klik hier om voertuig te starten/stoppen. Ctrl+klik om naar bestemming te scrollen @@ -3846,6 +3865,7 @@ STR_ORDER_CONDITIONAL_AGE :Leeftijd (jaren STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Heeft onderhoud nodig STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Altijd STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Resterende levensverwachting (jaren) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maximale betrouwbaarheid STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Op welke manier vergelijken van de voertuiginfo bij de opgegeven waarde STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :is gelijk aan @@ -3876,7 +3896,7 @@ STR_ORDER_CONDITIONAL :Voorwaardelijk STR_ORDER_SHARE :Orders delen STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Voeg een nieuwe order toe voor de geselecteerde order, of voeg het toe aan het eind van de lijst. Ctrl+klik maakt stationsorders "Eén soort vracht volledig laden", controlepost-orders "Ga non-stop via" en depot-orders "Onderhoud bij". "Orders delen" of Ctrl laat dit voertuig de orders delen met het geselecteerde voertuig. Klikken op een voertuig kopieert de orders van dat voertuig. Een depot order schakelt automatisch onderhoud van een voertuig uit. -STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Toon alle voertuigen met dezelfde gedeelde orders +STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Alle voertuigen weergeven met dezelfde gedeelde orders # String parts to build the order string STR_ORDER_GO_TO_WAYPOINT :Ga via {WAYPOINT} @@ -4018,9 +4038,9 @@ STR_AI_DEBUG :{WHITE}AI/Spels STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} (v{NUM}) STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Naam van het script STR_AI_DEBUG_SETTINGS :{BLACK}Instellingen -STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Wijzig de instellingen van het script -STR_AI_DEBUG_RELOAD :{BLACK}Herlaad computerspeler -STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Verwijder computerspeler, herlaad het script en herstart computerspeler +STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Instellingen van script wijzigen +STR_AI_DEBUG_RELOAD :{BLACK}Computerspeler opnieuw laden +STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Computerspeler verwijderen, script opnieuw laden en computerspeler opnieuw starten STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Afbreken in/uitschakelen als een AI-logbericht overeenstemt met de afbreektekst STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Afbreken op: STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Afbreken aan @@ -4048,18 +4068,18 @@ STR_AI_CONFIG_NONE :(geen) STR_AI_CONFIG_MOVE_UP :{BLACK}Omhoog verplaatsen STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Geselecteerde AI omhoog verplaatsen in de lijst STR_AI_CONFIG_MOVE_DOWN :{BLACK}Omlaag verplaatsen -STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}De geselecteerde AI naar omlaag verplaatsen in de lijst +STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Geselecteerde AI naar omlaag verplaatsen in de lijst STR_AI_CONFIG_GAMESCRIPT :{SILVER}Spelscript STR_AI_CONFIG_AI :{SILVER}AI's -STR_AI_CONFIG_CHANGE :{BLACK}Kies{STRING} +STR_AI_CONFIG_CHANGE :{BLACK}{STRING} selecteren STR_AI_CONFIG_CHANGE_NONE : STR_AI_CONFIG_CHANGE_AI :AI STR_AI_CONFIG_CHANGE_GAMESCRIPT :Spelscript -STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Laad een ander script -STR_AI_CONFIG_CONFIGURE :{BLACK}Configureer -STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configureer de parameters van het script +STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Ander script laden +STR_AI_CONFIG_CONFIGURE :{BLACK}Configureren +STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}De parameters van het script configureren # Available AIs window STR_AI_LIST_CAPTION :{WHITE}Beschikbaar {STRING} @@ -4069,19 +4089,19 @@ STR_AI_LIST_TOOLTIP :{BLACK}Klik om STR_AI_LIST_AUTHOR :{LTBLUE}Auteur: {ORANGE}{STRING} STR_AI_LIST_VERSION :{LTBLUE}Versie: {ORANGE}{NUM} -STR_AI_LIST_URL :{LTBLUE}URL: {ORANGE}{STRING} +STR_AI_LIST_URL :{LTBLUE}Webadres: {ORANGE}{STRING} -STR_AI_LIST_ACCEPT :{BLACK}Accepteer -STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Selecteer gemarkeerd script +STR_AI_LIST_ACCEPT :{BLACK}Accepteren +STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Gemarkeerd script selecteren STR_AI_LIST_CANCEL :{BLACK}Annuleren -STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Script niet veranderen +STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Script niet wijzigen # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters STR_AI_SETTINGS_CAPTION_AI :AI STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spelscript STR_AI_SETTINGS_CLOSE :{BLACK}Sluiten -STR_AI_SETTINGS_RESET :{BLACK}Herstellen +STR_AI_SETTINGS_RESET :{BLACK}Terugstellen STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} STR_AI_SETTINGS_START_DELAY :Aantal dagen dat deze AI start na de vorige (ongeveer): {ORANGE}{STRING} @@ -4523,15 +4543,15 @@ STR_ERROR_CAN_T_DELETE_SIGN :{WHITE}Kan bord STR_DESKTOP_SHORTCUT_COMMENT :Een simulatiespel gebaseerd op Transport Tycoon Deluxe # Translatable descriptions in media/baseset/*.ob* files -STR_BASEGRAPHICS_DOS_DESCRIPTION :Originele graphics van de Transport Tycoon Deluxe DOS-versie. -STR_BASEGRAPHICS_DOS_DE_DESCRIPTION :Originele graphics van de Duitse Transport Tycoon Deluxe DOS-versie. -STR_BASEGRAPHICS_WIN_DESCRIPTION :Originele graphics van de Transport Tycoon Deluxe Windows-versie. -STR_BASESOUNDS_DOS_DESCRIPTION :Originele geluiden van de Transport Tycoon Deluxe DOS-versie. -STR_BASESOUNDS_WIN_DESCRIPTION :Originele geluiden van de Transport Tycoon Deluxe Windows-versie. -STR_BASESOUNDS_NONE_DESCRIPTION :Een geluidset zonder geluid. +STR_BASEGRAPHICS_DOS_DESCRIPTION :Originele grafische elementen van Transport Tycoon Deluxe voor DOS. +STR_BASEGRAPHICS_DOS_DE_DESCRIPTION :Originele grafische elementen van Transport Tycoon Deluxe voor DOS, Duitse versie. +STR_BASEGRAPHICS_WIN_DESCRIPTION :Originele grafische elementen van Transport Tycoon Deluxe voor Windows. +STR_BASESOUNDS_DOS_DESCRIPTION :Originele geluiden van Transport Tycoon Deluxe voor DOS. +STR_BASESOUNDS_WIN_DESCRIPTION :Originele geluiden van Transport Tycoon Deluxe voor Windows. +STR_BASESOUNDS_NONE_DESCRIPTION :Een geluidenset zonder geluid. STR_BASEMUSIC_WIN_DESCRIPTION :Originele muziek van de Transport Tycoon Deluxe Windows-versie. -STR_BASEMUSIC_DOS_DESCRIPTION :Originele Transport Tycoon Deluxe DOS-editiemuziek. -STR_BASEMUSIC_TTO_DESCRIPTION :Originele Transport Tycoon (Original/World Editor) DOS-editiemuziek. +STR_BASEMUSIC_DOS_DESCRIPTION :Originele muziek van Transport Tycoon Deluxe voor DOS. +STR_BASEMUSIC_TTO_DESCRIPTION :Originele muziek van Transport Tycoon (Original/World Editor) voor DOS. STR_BASEMUSIC_NONE_DESCRIPTION :Een muziekset zonder muziek. ##id 0x2000 diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 8ff3974270..f59555868c 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -532,6 +532,7 @@ STR_ABOUT_MENU_SCREENSHOT :Ekraanitõmmis STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Suurendatud ekraanitõmmis STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Tavasuurendusega ekraanitõmmis STR_ABOUT_MENU_GIANT_SCREENSHOT :Terve kaardi ekraanitõmmis +STR_ABOUT_MENU_SHOW_FRAMERATE :Näita kaadrisagedust STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD' kohta STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite aligner STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Kontuuride kuvamine @@ -979,6 +980,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Lõuna-Aafrika STR_GAME_OPTIONS_CURRENCY_CUSTOM :Omatehtud... STR_GAME_OPTIONS_CURRENCY_GEL :Gruusia lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Iraani rial (IRR) +STR_GAME_OPTIONS_CURRENCY_MXN :Mehhiko Peeso (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Sõidukid @@ -1270,10 +1272,10 @@ STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Sisse lülitami STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Ülesanded on esialgselt «Peatusteta»: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Tavaliselt peatub sõiduk igas peatuses, mida ta läbib. Selle seadega sõidab sõiduk lõppsihini ilma vahejaamades peatumata. NB! See seade määrab vaid uute korralduste esialgse seadistuse. Korraldusi saab hiljem eraldi ümber seadistada STR_CONFIG_SETTING_STOP_LOCATION :Esialgne platvormi peatumisosa uute rongide ülesannetes: {STRING} -STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Esialgne peatumiskoht rongiplatvormil. «Lõpu lähedal» tähendab sisenemispunkti lähistel. «Keskel» tähendab keset platvormi. «Kaugel lõpus» tähendab kaugel sisenemispunktist. NB! Selle seadega sõidab sõiduk lõppsihini ilma vahejaamades peatumata. NB! See seade määrab vaid uute korralduste esialgse seadistuse. Korraldusi saab hiljem eraldi ümber seadistada -STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :lõpu lähedal +STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Esialgne peatumiskoht rongiplatvormil. «alguses» tähendab sisenemispunkti lähistel. «keskel» tähendab keset platvormi. «lõpus» tähendab sisenemispunktist kaugeimal. NB! See seade määrab vaid uute korralduste esialgse seadistuse. Korraldusi saab hiljem eraldi ümber seadistada +STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :alguses STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :keskel -STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :täiesti lõpus +STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :lõpus STR_CONFIG_SETTING_AUTOSCROLL :Vaate liikumine, kui hiireosuti on akna servas: {STRING} STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Sisse lülitamisel liigub vaade, kui hiireosuti on aknaserva lähedal STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Väljas @@ -1308,6 +1310,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Sõiduki STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Taristu hooldamine: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Taristuga kaasnevad halduskulud. Kulud kasvavad taristu hulga suhtes ebaproportsionaalselt, ning mõjutavad pigem suurettevõtteid +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Vali ettevõttele esialgne värvus STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aegumatud lennuväljad: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Selle seade sisse lülitamine jätab kõik lennujaamade tüübid avatuks lõpmata ajaks peale nende avanemist @@ -1423,6 +1426,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command+klõps STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+klõps STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Väljas +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Akna sulgemine paremklõpsuga: {STRING} STR_CONFIG_SETTING_AUTOSAVE :Automaatne salvestamine: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Vali automaatse salvestamise intervall @@ -2742,9 +2746,22 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 OpenTTD meeskond # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Kaadrisagedus +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Renderdatud videokaadrite arv sekundis. +STR_FRAMERATE_AVERAGE :{WHITE}Keskmine +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} kaadrit/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} kaadrit/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} kaadrit/s ############ Leave those lines in this order!! +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Õhusõiduki sammud: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Ahelgraafiku viide: +STR_FRAMERATE_DRAWING :{BLACK}Graafika renderdamine: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Õhusõiduki sammud ############ End of leave-in-this-order @@ -3032,6 +3049,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Sisesta STR_TOWN_DIRECTORY_CAPTION :{WHITE}Linnad STR_TOWN_DIRECTORY_NONE :{ORANGE}- Puudub - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Linn){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Linnanimed - vajuta linnanimele, et viia vaade linnale. Ctrl+klõps avab uue vaate linna asukohast STR_TOWN_POPULATION :{BLACK}Maailma rahvastik: {COMMA} @@ -3039,6 +3057,7 @@ STR_TOWN_POPULATION :{BLACK}Maailma STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Linn) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Rahvaarv: {ORANGE}{COMMA}{BLACK} Ehitisi: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} eelmisel kuul: {ORANGE}{COMMA}{BLACK} Suurim: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Veoseid linna kasvamiseks: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} vajalik STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} on talvel vajalik @@ -3407,6 +3426,7 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Eemalda kõik s STR_GROUP_RENAME_CAPTION :{BLACK}Rühma nime vahetamine +STR_GROUP_PROFIT_THIS_YEAR :Kasum sellel aastal: # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Uued rööbassõidukid @@ -3573,6 +3593,9 @@ STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :magnethõljukve STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Hind: {CURRENCY_LONG} Tühimass: {WEIGHT_SHORT}{}Tippkiirus: {VELOCITY} Võimsus: {POWER}{}Käituskulud: {CURRENCY_LONG}/aastas{}Kandevõime: {CARGO_LONG} STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Hind: {CURRENCY_LONG} Tühimass: {WEIGHT_SHORT}{}Kiirus: {VELOCITY} Võimsus: {POWER} Veojõud: {6:FORCE}{}Käituskulud: {4:CURRENCY_LONG}/aasta{}Mahutavus: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Hind: {CURRENCY_LONG} Tippkiirus: {VELOCITY}{}Kandevõime: {CARGO_LONG}{}Käituskulud: {CURRENCY_LONG}/a +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Hind: {CURRENCY_LONG} Tippkiirus: {VELOCITY}{}Lennuki tüüp: {STRING}{}kandevõime: {CARGO_LONG}{}Käitluskulud: {CURRENCY_LONG}/a +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Hind: {CURRENCY_LONG} Tippkiirus: {VELOCITY}{}Lennuki tüüp: {STRING} Lennukaugus: {COMMA} ruutu{}Kandevõime: {CARGO_LONG}, {CARGO_LONG}{}Käituskulud: {CURRENCY_LONG}/a +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Hind: {CURRENCY_LONG} Tippkiirus: {VELOCITY}{}Lennuki tüüp: {STRING} Lennukaugus: {COMMA} ruutu{}Kandevõime: {CARGO_LONG}{}Käituskulud: {CURRENCY_LONG}/a # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Asenda {STRING} - {STRING} @@ -3694,6 +3717,7 @@ STR_VEHICLE_INFO_AGE :{COMMA} aasta{P STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} aasta{P "" t} ({COMMA}) STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Tippkiirus: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Tippkiirus: {LTBLUE}{VELOCITY} {BLACK}Lennuki tüüp: {LTBLUE}{STRING} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Tühimass: {LTBLUE}{WEIGHT_SHORT} {BLACK}Võimsus: {LTBLUE}{POWER}{BLACK} Tippkiirus: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Tühimass: {LTBLUE}{WEIGHT_SHORT} {BLACK}Võimsus: {LTBLUE}{POWER}{BLACK} Tippkiirus: {LTBLUE}{VELOCITY} {BLACK}Veojõud: {LTBLUE}{FORCE} @@ -3913,9 +3937,9 @@ STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(Maha mitte laa STR_ORDER_AUTO_REFIT_ANY :võimalikud kaubad -STR_ORDER_STOP_LOCATION_NEAR_END :[lõpu lähedal] +STR_ORDER_STOP_LOCATION_NEAR_END :[alguses] STR_ORDER_STOP_LOCATION_MIDDLE :[keskel] -STR_ORDER_STOP_LOCATION_FAR_END :[täiesti lõpus] +STR_ORDER_STOP_LOCATION_FAR_END :[lõpus] STR_ORDER_OUT_OF_RANGE :{RED} (Järgmine sihtpunkt on väljaspool tegevusraadiust) @@ -4259,6 +4283,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... see STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... tee on vales suunas STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... nurgad ei saa läbisõidupeatustes olla STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... ristmikud ei saa olla läbisõidupeatustes +STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... tee on ühesuunaline või blokeeritud # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Siinset jaamablokki ei saa lammutada... diff --git a/src/lang/french.txt b/src/lang/french.txt index dd7198db16..32a197af6c 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -191,6 +191,7 @@ STR_COLOUR_BROWN :Marron STR_COLOUR_GREY :Gris STR_COLOUR_WHITE :Blanc STR_COLOUR_RANDOM :Aléatoire +STR_COLOUR_DEFAULT :Défaut # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -3421,6 +3422,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groupes STR_GROUP_CREATE_TOOLTIP :{BLACK}Créer un groupe de véhicules STR_GROUP_DELETE_TOOLTIP :{BLACK}Supprimer le groupe sélectionné STR_GROUP_RENAME_TOOLTIP :{BLACK}Renommer le groupe sélectionné +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Changer la couleur du groupe sélectionné STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Cliquer pour protéger ce groupe contre l'auto-remplacement global STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Supprimer un groupe diff --git a/src/lang/german.txt b/src/lang/german.txt index 4902216617..d36076dd9f 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -190,6 +190,7 @@ STR_COLOUR_ORANGE :Orange STR_COLOUR_BROWN :Braun STR_COLOUR_GREY :Grau STR_COLOUR_WHITE :Weiß +STR_COLOUR_DEFAULT :Standard # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -651,6 +652,7 @@ STR_MUSIC_RULER_MARKER :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Keine Musik verfügbar STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Track STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Titel @@ -676,6 +678,7 @@ STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLA STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Programm - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Bereinigen STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Lösche laufendes Programm (nur für Benutzerdefiniert 1 und 2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Ein anderes Musik-Set auswählen) STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klicke auf einen Musiktitel, um ihn in das laufende Programm zu übernehmen (nur für Benutzerdefiniert 1 und 2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klicke auf einen Musiktitel, um ihn aus der aktuellen Liste zu entfernen (nur für Benutzerdefiniert 1 und 2) @@ -1252,6 +1255,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Diese Ei STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Instandhaltung der Infrastruktur: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Unterhaltskosten für Infrastruktur einschalten. Die Unterhaltskosten wachsen mit zunehmender Netzwerkgröße überproportional an, so dass sie größere Firmen stärker belasten als kleinere +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Wähle die Firmenfarbe zu Spielbeginn STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Flughäfen veralten nie: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Wird diese Option aktiviert, können Flughäfen, die einmal eingeführt wurden, das ganze Spiel über gebaut werden und veralten nie @@ -2280,6 +2284,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Legende STR_LINKGRAPH_LEGEND_ALL :{BLACK}Alle STR_LINKGRAPH_LEGEND_NONE :{BLACK}Keine STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Anzuzeigende Firmen auswählen +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}unbenutzt @@ -2689,9 +2694,21 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD- STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD-Team # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Bildwiederholrate +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} Bilder/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} Bilder/s +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GL_SHIPS :{BLACK} Ticks (Schiffe): +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Ticks (Luftfahrzeuge) +STR_FRAMERATE_DRAWING :{BLACK}Grafik-Rendering: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Spiel-Schleife +STR_FRAMETIME_CAPTION_GL_TRAINS :Ticks (Züge) +STR_FRAMETIME_CAPTION_DRAWING :Grafik-Rendering +STR_FRAMETIME_CAPTION_SOUND :Sound mixing ############ End of leave-in-this-order @@ -2834,6 +2851,7 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Version: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. kompatible Version: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5-Summe: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Farbpalette: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :veraltet (W) STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameter: {SILVER}{STRING} STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Keine Informationen verfügbar @@ -2979,6 +2997,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Text fü STR_TOWN_DIRECTORY_CAPTION :{WHITE}Städte STR_TOWN_DIRECTORY_NONE :{ORANGE}- Keine - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (City){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Städtenamen - Klick auf den Namen zentriert Hauptansicht auf die Stadt. Strg+Klick öffnet neue Zusatzansicht zentriert auf die Stadt STR_TOWN_POPULATION :{BLACK}Weltbevölkerung: {COMMA} @@ -3290,6 +3309,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Hauptans STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktionsrate: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Diese Industrie wird in Kürze schließen! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Benötigt: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produziert: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}benötigt: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} @@ -4472,6 +4493,8 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Original Transp STR_BASESOUNDS_WIN_DESCRIPTION :Original Transport Tycoon Deluxe Windows Basissounds. STR_BASESOUNDS_NONE_DESCRIPTION :Basissounds ohne Sound. STR_BASEMUSIC_WIN_DESCRIPTION :Original Transport Tycoon Deluxe Windows Musikset. +STR_BASEMUSIC_DOS_DESCRIPTION :Original Transport Tycoon Deluxe DOS edition music. +STR_BASEMUSIC_TTO_DESCRIPTION :Original Transport Tycoon (Original/World Editor) DOS edition music. STR_BASEMUSIC_NONE_DESCRIPTION :Ein Musikset ohne Musik. ##id 0x2000 diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 7c6fd7c794..4dc8724e96 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -191,6 +191,7 @@ STR_COLOUR_BROWN :Castanho STR_COLOUR_GREY :Cinzento STR_COLOUR_WHITE :Branco STR_COLOUR_RANDOM :Aleatório +STR_COLOUR_DEFAULT :Padrão # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA} mph @@ -679,7 +680,9 @@ STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTB STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Índice de faixas STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Programa - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Limpar +STR_PLAYLIST_CHANGE_SET :{BLACK}Mudar conjunto STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Limpar programa actual (somente Personaliz. 1 ou Personaliz. 2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Mudar selecção musical para outro conjunto instalado STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Clique na faixa de música para a adicionar ao programa actual (somente Personaliz. 1 ou Personaliz. 2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Faça clique numa faixa para a remover da lista (Personaliz. 1 ou Personaliz. 2 apenas) @@ -883,10 +886,10 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC # Extra view window STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Visualizador {COMMA} -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Copiar p/ o visualizador +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Alterar janela de exibição STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Copiar a localização do visualizador global para este visualizador -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Colar do visualizador -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Colar a localização deste visualizador para o visualizador global +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Alterar vista principal +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Copiar a localização desta janela de exibição para a vista principal # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Opções do Jogo @@ -1259,6 +1262,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Não é STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Manutenção de infraestruturas: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Quando activo, as infraestruturas têm custos de manutenção. O custo cresce mais do que proporcionalmente com o tamanho da rede e com isso afecta mais as companhias maiores comparado com as mais pequeneas +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Côr de inicio da empresa: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Escolher côr de inicio da empresa STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aeroportos nunca expiram: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Activar esta preferência torna cada tipo de aeroporto disponível para sempre após a sua introdução @@ -1343,8 +1348,12 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Cor do terreno STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Verde STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Verde Escuro STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violeta +STR_CONFIG_SETTING_SCROLLMODE :Comportamento de deslocação da janela de exibição: {STRING} +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Comportamento na deslocação do mapa STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Mover janela de exibição com Botão Direito Rato, posição do rato bloqueada STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Mover mapa com Botão Direito Rato, posição do rato bloqueada +STR_CONFIG_SETTING_SCROLLMODE_RMB :Mover mapa com Botão Direito Rato +STR_CONFIG_SETTING_SCROLLMODE_LMB :Mover mapa com Botão Esquerdo Rato STR_CONFIG_SETTING_SMOOTH_SCROLLING :Suavizar deslocamento da navegação no mapa: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controla como a vista principal navega para uma posição específica ao clicar no mapa pequeno ou ao dar um comando para navegar para um objecto específico no mapa. Se activo, a vista principal navega suavemente, se inactivo a vista salta directamente para o destino. STR_CONFIG_SETTING_MEASURE_TOOLTIP :Mostrar medidas nas várias ferramentas de construção: {STRING} @@ -1474,7 +1483,7 @@ STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA} dia{P 0 STR_CONFIG_SETTING_SERVINT_DISABLED :Desativado STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Intervalo de serviço para veículos de estrada por omissão: {STRING} STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Definir o intervalo de manutenção por omissão para novos veículos de estrada, se não for configurado um intervalo de manutenção explícito para o veículo -STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Intervalo de serviço para aeronaves por omissão: {STRING} +STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Intervalo de serviço para aeronaves padrão: {STRING} STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Definir o intervalo de manutenção por omissão para novas aeronaves, se não for configurado um intervalo de manutenção explícito para o veículo STR_CONFIG_SETTING_SERVINT_SHIPS :Intervalo de serviço para navios por omissão: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Definir o intervalo de manutenção por omissão para novos navios, se não for configurado um intervalo de manutenção explícito para o veículo @@ -1813,7 +1822,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Alterar STR_CHEAT_SETUP_PROD :{LTBLUE}Activar modificação de valores de produção: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Novo Esquema de Cores +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Novo Esquema de Cores STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Exibir esquema de cores geral STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Exibir esquemas de cores dos comboios @@ -2289,6 +2298,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Legenda STR_LINKGRAPH_LEGEND_ALL :{BLACK}Todos STR_LINKGRAPH_LEGEND_NONE :{BLACK}Nenhuma STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Selecione as companhias a serem mostradas +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}não usado @@ -2373,9 +2383,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Sinal Co STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Sinal (eléctrico){}Os sinais permitem que vários comboios entrem na mesma linha ao mesmo tempo, desde que consigam chegar ao seu destino em segurança. Sinais padrão podem ser passados no sentido contrário. STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Sinal de sentido único (eléctrico){}Um sinal de trajecto permite que mais de um comboio passe ao mesmo tempo um sinal se, o comboio conseguir reservar um caminho para onde posteriormente possa parar sem prejudicar o seguinte. Sinais de um único sentido não podem ser passados no sentido contrário. STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Conversão de Sinal{}Quando seleccionado, ao fazer clique num sinal existente este será convertido no tipo e variante de sinal seleccionado, Ctrl+clique irá comutar a variante existente. Shift+Clique mostra estimativa do custo de conversão -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Densidade de sinais -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Diminuir densidade de sinais -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Aumentar densidade de sinais +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distância de arrasto de sinais +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Reduzir distância de arrasto de sinais +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Aumentar a distância de arrasto de sinais # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Seleccione Ponte Ferroviária @@ -2698,32 +2708,52 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 A equipa do OpenTTD # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Taxa de fotograma STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Taxa de simulação: {STRING} +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Numero de quantidades de atraso no percurso simulados por segundo. STR_FRAMERATE_RATE_BLITTER :{BLACK}Taxa de fotogramas dos gráficos: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Número de fotogramas de video renderizados por segundo. STR_FRAMERATE_SPEED_FACTOR :{BLACK}Factor de velocidade actual do jogo: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Quão rápido o jogo está a ser executado, comparado com a velocidade esperada na taxa de simulação normal. STR_FRAMERATE_CURRENT :{WHITE}Actual STR_FRAMERATE_AVERAGE :{WHITE}Média +STR_FRAMERATE_DATA_POINTS :{BLACK}Dados baseados em {COMMA} medições +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms -STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} frames/s +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} fotograma/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} fotograma/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} fotograma/s +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! STR_FRAMERATE_GAMELOOP :Total de loops no jogo STR_FRAMERATE_GL_ECONOMY :{BLACK} Movimentação de carga: +STR_FRAMERATE_GL_TRAINS :{BLACK} Quantidade de atraso no percurso do Comboio: STR_FRAMERATE_GL_ROADVEHS :{BLACK}Quantidade de atraso no percurso do veículo rodoviário: STR_FRAMERATE_GL_SHIPS :{BLACK} Ship ticks: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Quantidade de atraso no percurso de Aeronave: STR_FRAMERATE_GL_LANDSCAPE :{BLACK} World ticks: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Atraso no gráfico de ligação: STR_FRAMERATE_DRAWING :{BLACK}Renderização gráfica: STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Janelas de exibição do mundo: +STR_FRAMERATE_VIDEO :{BLACK}Saída de video: STR_FRAMERATE_SOUND :{BLACK}Mistura de Som: ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Loop de jogo STR_FRAMETIME_CAPTION_GL_ECONOMY :Movimentação de carga STR_FRAMETIME_CAPTION_GL_TRAINS :Quantidade de atraso no percurso do Comboio +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Quantidade de atraso no percurso do veículo rodoviário +STR_FRAMETIME_CAPTION_GL_SHIPS :Quantidade de atraso no percurso do barco +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Quantidade de atraso no percurso de Aeronave +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Quantidade de Atraso no Percurso Mundial +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Atraso no gráfico de ligação +STR_FRAMETIME_CAPTION_DRAWING :Renderização gráfica STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Renderização de janela de exibição do mundo STR_FRAMETIME_CAPTION_VIDEO :Saída de video +STR_FRAMETIME_CAPTION_SOUND :Mistura de Som ############ End of leave-in-this-order @@ -2749,6 +2779,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Detalhes STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nenhuma informação disponível STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtro de sequência: STR_SAVELOAD_OSKTITLE :{BLACK}Introduza um nome para o jogo gravado @@ -2830,7 +2861,7 @@ STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}Informa STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}Ficheiros NewGRF activos STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}Ficheiros NewGRF inactivos STR_NEWGRF_SETTINGS_SELECT_PRESET :{ORANGE}Seleccionar predefinição: -STR_NEWGRF_FILTER_TITLE :{ORANGE}Frase filtro: +STR_NEWGRF_FILTER_TITLE :{ORANGE}Filtro de sequência: STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}Carrega a predefinição seleccionada STR_NEWGRF_SETTINGS_PRESET_SAVE :{BLACK}Guardar STR_NEWGRF_SETTINGS_PRESET_SAVE_TOOLTIP :{BLACK}Guarda a lista numa predefinição @@ -2868,7 +2899,10 @@ STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Padrão (D) STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Padrão (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Legacy (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Legacy (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parâmetros: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Nenhum STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Sem informação disponível STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Ficheiro correspondente não encontrado @@ -2949,6 +2983,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Leitura além d STR_NEWGRF_ERROR_GRM_FAILED :Recursos GRF pedidos não disponíveis (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} foi desactivado por {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formato de Gráfico Inválido ou desconhecido (sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Demasiados elementos na lista de valores de propriedade (sprite {3:NUM}, propriedade {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Revogação da produção industrial inválida (sprite {3:NUM}, "{1:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Alerta! @@ -3013,6 +3049,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Introduz STR_TOWN_DIRECTORY_CAPTION :{WHITE}Cidades STR_TOWN_DIRECTORY_NONE :{ORANGE}- Nenhuma - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Cidade){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Nomes das cidades - clique no nome para centrar a visualização na cidade. Ctrl+Clique abre um novo visualizador na localização da cidade STR_TOWN_POPULATION :{BLACK}População Mundial: {COMMA} @@ -3020,6 +3057,7 @@ STR_TOWN_POPULATION :{BLACK}Populaç STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Metrópole) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}População: {ORANGE}{COMMA}{BLACK} Casas: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} ultimo mês: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Mercadoria necessária para o seu desenvolvimento: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{RED}É necessário {ORANGE}{STRING} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{BLACK}No inverno, é necessário {ORANGE}{STRING} @@ -3324,6 +3362,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centrar STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nível de produção: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A indústria anunciou encerramento iminente! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Requer: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produz: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requer: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} @@ -3381,6 +3422,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - STR_GROUP_CREATE_TOOLTIP :{BLACK}Clique para criar um grupo STR_GROUP_DELETE_TOOLTIP :{BLACK}Remover o grupo seleccionado STR_GROUP_RENAME_TOOLTIP :{BLACK}Mudar o nome do grupo seleccionado +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Alterar a imagem do grupo selecionado STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clique para proteger este grupo da autosubstituição global STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Apagar Grupo @@ -3424,6 +3466,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacida STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagões Motorizados: {GOLD}+{POWER}{BLACK} Peso: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Reconvertível para: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Todos os tipos de carga +STR_PURCHASE_INFO_NONE :Nenhum STR_PURCHASE_INFO_ALL_BUT :Todas menos {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Máx. Força de Tracção: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Alcance: {GOLD}{COMMA} quadrados @@ -4256,6 +4299,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... esta STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... estrada orientada na direcção incorrecta STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... estações de passagem não podem ter curvas STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... estações de passagem não podem ter cruzamentos +STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... estrada de sentido único ou bloqueada # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Não é possível remover parte da estação... @@ -4508,6 +4552,7 @@ STR_BASESOUNDS_WIN_DESCRIPTION :Sons originais STR_BASESOUNDS_NONE_DESCRIPTION :Um conjunto de sons vazio. STR_BASEMUSIC_WIN_DESCRIPTION :Música original da edição Windows de Transport Tycoon Deluxe. STR_BASEMUSIC_DOS_DESCRIPTION :Música original da edição DOS do Transport Tycoon Deluxe. +STR_BASEMUSIC_TTO_DESCRIPTION :Música original da edição DOS do Transport Tycoon (Original/Editor de Mundo) STR_BASEMUSIC_NONE_DESCRIPTION :Um conjunto de música vazio. ##id 0x2000 diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 2043646630..c4c3666a88 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -191,6 +191,7 @@ STR_COLOUR_BROWN :Café STR_COLOUR_GREY :Gris STR_COLOUR_WHITE :Blanco STR_COLOUR_RANDOM :Aleatorio +STR_COLOUR_DEFAULT :Predefinido # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -1821,7 +1822,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Cambiar STR_CHEAT_SETUP_PROD :{LTBLUE}Permitir cambiar los valores de producción: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nueva cromática +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Cromática STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostrar cromática general STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Mostrar cromáticas para trenes @@ -3421,6 +3422,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos: STR_GROUP_CREATE_TOOLTIP :{BLACK}Clic para crear un grupo STR_GROUP_DELETE_TOOLTIP :{BLACK}Eliminar el grupo seleccionado STR_GROUP_RENAME_TOOLTIP :{BLACK}Cambiar nombre del grupo seleccionado +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Cambiar cromática del grupo elegido STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clic para evitar que los vehículos en este grupo se reemplacen automáticamente. STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Eliminar grupo From 0bca36340147c3d2411ad473624b28df3b670fbe Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Fri, 1 Feb 2019 20:17:28 +0100 Subject: [PATCH 285/622] Add: Warn before overwriting an existing save file --- src/fios_gui.cpp | 24 ++++++++++++++++++++++-- src/lang/english.txt | 2 ++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index e149d07b47..63bb589d77 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -281,6 +281,18 @@ private: QueryString filter_editbox; ///< Filter editbox; SmallVector fios_items_shown; ///< Map of the filtered out fios items + static void SaveGameConfirmationCallback(Window *w, bool confirmed) + { + /* File name has already been written to _file_to_saveload */ + if (confirmed) _switch_mode = SM_SAVE_GAME; + } + + static void SaveHeightmapConfirmationCallback(Window *w, bool confirmed) + { + /* File name has already been written to _file_to_saveload */ + if (confirmed) _switch_mode = SM_SAVE_HEIGHTMAP; + } + public: /** Generate a default save filename. */ @@ -731,11 +743,19 @@ public: } } else if (this->IsWidgetLowered(WID_SL_SAVE_GAME)) { // Save button clicked if (this->abstract_filetype == FT_SAVEGAME || this->abstract_filetype == FT_SCENARIO) { - _switch_mode = SM_SAVE_GAME; FiosMakeSavegameName(_file_to_saveload.name, this->filename_editbox.text.buf, lastof(_file_to_saveload.name)); + if (FioCheckFileExists(_file_to_saveload.name, Subdirectory::SAVE_DIR)) { + ShowQuery(STR_SAVELOAD_OVERWRITE_TITLE, STR_SAVELOAD_OVERWRITE_WARNING, this, SaveLoadWindow::SaveGameConfirmationCallback); + } else { + _switch_mode = SM_SAVE_GAME; + } } else { - _switch_mode = SM_SAVE_HEIGHTMAP; FiosMakeHeightmapName(_file_to_saveload.name, this->filename_editbox.text.buf, lastof(_file_to_saveload.name)); + if (FioCheckFileExists(_file_to_saveload.name, Subdirectory::SAVE_DIR)) { + ShowQuery(STR_SAVELOAD_OVERWRITE_TITLE, STR_SAVELOAD_OVERWRITE_WARNING, this, SaveLoadWindow::SaveHeightmapConfirmationCallback); + } else { + _switch_mode = SM_SAVE_HEIGHTMAP; + } } /* In the editor set up the vehicle engines correctly (date might have changed) */ diff --git a/src/lang/english.txt b/src/lang/english.txt index be465cf229..56cc0522c4 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2779,6 +2779,8 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}No infor STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING1} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} STR_SAVELOAD_FILTER_TITLE :{BLACK}Filter string: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Overwrite File +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Are you sure you want to overwrite the existing file? STR_SAVELOAD_OSKTITLE :{BLACK}Enter a name for the savegame From fa53abe864a6939dc4dac8a6c61443e486e0eb04 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 1 Feb 2019 21:57:29 +0000 Subject: [PATCH 286/622] Doc: Yearly increment. --- os/debian/copyright | 2 +- os/rpm/openttd.spec | 2 +- src/lang/afrikaans.txt | 2 +- src/lang/arabic_egypt.txt | 2 +- src/lang/basque.txt | 2 +- src/lang/belarusian.txt | 2 +- src/lang/brazilian_portuguese.txt | 2 +- src/lang/bulgarian.txt | 2 +- src/lang/catalan.txt | 2 +- src/lang/croatian.txt | 2 +- src/lang/czech.txt | 2 +- src/lang/danish.txt | 2 +- src/lang/dutch.txt | 2 +- src/lang/english.txt | 2 +- src/lang/english_AU.txt | 2 +- src/lang/english_US.txt | 2 +- src/lang/esperanto.txt | 2 +- src/lang/estonian.txt | 2 +- src/lang/faroese.txt | 2 +- src/lang/finnish.txt | 2 +- src/lang/french.txt | 2 +- src/lang/gaelic.txt | 2 +- src/lang/galician.txt | 2 +- src/lang/german.txt | 2 +- src/lang/greek.txt | 2 +- src/lang/hebrew.txt | 2 +- src/lang/hungarian.txt | 2 +- src/lang/icelandic.txt | 2 +- src/lang/indonesian.txt | 2 +- src/lang/irish.txt | 2 +- src/lang/italian.txt | 2 +- src/lang/japanese.txt | 2 +- src/lang/korean.txt | 2 +- src/lang/latvian.txt | 2 +- src/lang/lithuanian.txt | 2 +- src/lang/luxembourgish.txt | 2 +- src/lang/malay.txt | 2 +- src/lang/norwegian_bokmal.txt | 2 +- src/lang/norwegian_nynorsk.txt | 2 +- src/lang/polish.txt | 2 +- src/lang/portuguese.txt | 2 +- src/lang/romanian.txt | 2 +- src/lang/russian.txt | 2 +- src/lang/serbian.txt | 2 +- src/lang/simplified_chinese.txt | 2 +- src/lang/slovak.txt | 2 +- src/lang/slovenian.txt | 2 +- src/lang/spanish.txt | 2 +- src/lang/spanish_MX.txt | 2 +- src/lang/swedish.txt | 2 +- src/lang/tamil.txt | 2 +- src/lang/thai.txt | 2 +- src/lang/traditional_chinese.txt | 2 +- src/lang/turkish.txt | 2 +- src/lang/ukrainian.txt | 2 +- src/lang/unfinished/frisian.txt | 2 +- src/lang/unfinished/ido.txt | 2 +- src/lang/unfinished/macedonian.txt | 2 +- src/lang/unfinished/persian.txt | 2 +- src/lang/vietnamese.txt | 2 +- src/lang/welsh.txt | 2 +- src/os/windows/ottdres.rc.in | 2 +- 62 files changed, 62 insertions(+), 62 deletions(-) diff --git a/os/debian/copyright b/os/debian/copyright index 05cbfc4328..24d6d7052f 100644 --- a/os/debian/copyright +++ b/os/debian/copyright @@ -5,7 +5,7 @@ Source: http://www.openttd.org Files: * -Copyright: © 2004-2018 Ludvig Strigeous and others. +Copyright: © 2004-2019 Ludvig Strigeous and others. License: GPL-2.0 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2.0 as diff --git a/os/rpm/openttd.spec b/os/rpm/openttd.spec index 5fa4d72a1e..28f3666186 100644 --- a/os/rpm/openttd.spec +++ b/os/rpm/openttd.spec @@ -2,7 +2,7 @@ # spec file for package openttd # # Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. -# Copyright (c) 2007-2018 The OpenTTD developers +# Copyright (c) 2007-2019 The OpenTTD developers # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 56cbe04a04..02efdd5aa4 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -2682,7 +2682,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Maatskappy-besi STR_ABOUT_OPENTTD :{WHITE}Oor OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Oorspronklike kopiereg {COPYRIGHT} 1995 Chris Sawyer, Alle regte voorbehou STR_ABOUT_VERSION :{BLACK}OpenTTD uitgawe {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Die OpenTTD span +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Die OpenTTD span # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 2eb29baa31..5cccd49091 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -2316,7 +2316,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :ارض مملو STR_ABOUT_OPENTTD :{WHITE}حول النسخة المفتوحة STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}الحقوق الاصلية {COPYRIGHT} كريس سوير 1995 , جميع الحقوق محفوظة STR_ABOUT_VERSION :{BLACK}النسخة المفتوحة رقم {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}النسخة المفتوحة {COPYRIGHT}2002-2018 فريق النسخة المفتوحة +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}النسخة المفتوحة {COPYRIGHT}2002-2019 فريق النسخة المفتوحة # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 0c2e09e24d..aa57bb9f70 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -2586,7 +2586,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Konpainia jabe STR_ABOUT_OPENTTD :{WHITE}OpenTTD-ri buruz STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD bertsioa {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 The OpenTTD team # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index c2e3a1435d..cb79266a70 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -3029,7 +3029,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Зямля на STR_ABOUT_OPENTTD :{WHITE}Аб OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Арыґінальныя аўтарскія правы {COPYRIGHT} 1995 Chris Sawyer. Усе правы абароненыя. STR_ABOUT_VERSION :{BLACK}OpenTTD вэрсія {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002–2018 Каманда распрацоўнікаў OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002–2019 Каманда распрацоўнікаў OpenTTD # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index ffa56055fd..52978f65da 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -2700,7 +2700,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :O terreno é pr STR_ABOUT_OPENTTD :{WHITE}Sobre o OpenTTD... STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Todos os direitos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versão {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 A equipe do OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 A equipe do OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Taxa de quadros diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index d674c67d40..9066f2cdda 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -2627,7 +2627,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Земя, пр STR_ABOUT_OPENTTD :{WHITE}Относно OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Авторски права {COPYRIGHT} 1995 Крис Сойер (Chris Sawyer), Всички права са запазени STR_ABOUT_VERSION :{BLACK}OpenTTD версия {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 The OpenTTD team # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 57d4e57322..15e2bff8f7 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -2698,7 +2698,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :terreny propiet STR_ABOUT_OPENTTD :{WHITE}Quant a l'OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer. Tots els drets reservats. STR_ABOUT_VERSION :{BLACK}Versió {REV} de l'OpenTTD -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 L'equip de l'OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 L'equip de l'OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Fotogrames per segon diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 8b0bd232fd..13fe1434b7 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -2799,7 +2799,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Zemlja u posjed STR_ABOUT_OPENTTD :{WHITE}O OpenTTD-u STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Izvorno autorsko pravo {COPYRIGHT} 1995 Chris Sawyer, sva prava pridržana STR_ABOUT_VERSION :{BLACK}OpenTTD verzija {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD tim +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD tim # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Broj sličica diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 17a09c6ac9..7d1486c992 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -2784,7 +2784,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Půda vlastněn STR_ABOUT_OPENTTD :{WHITE}O OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Původní copyright: {COPYRIGHT} 1995 Chris Sawyer, všechna práva vyhrazena STR_ABOUT_VERSION :{BLACK}OpenTTD verze {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Tým OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Tým OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Počet snímků za sekundu diff --git a/src/lang/danish.txt b/src/lang/danish.txt index c8b8118920..906e5ff1d5 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -2704,7 +2704,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Land ejet af se STR_ABOUT_OPENTTD :{WHITE}Om OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, Alle rettigheder reserveret STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD teamet +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD teamet # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Spilhastighed diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index d075ea0be9..1feff67694 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -2704,7 +2704,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terrein in bedr STR_ABOUT_OPENTTD :{WHITE}Over OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Originele auteursrecht {COPYRIGHT} 1995 Chris Sawyer, alle rechten voorbehouden STR_ABOUT_VERSION :{BLACK}OpenTTD-versie {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Het OpenTTD-team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Het OpenTTD-team # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Frame rate diff --git a/src/lang/english.txt b/src/lang/english.txt index 56cc0522c4..856ca2f81a 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2704,7 +2704,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Company-owned l STR_ABOUT_OPENTTD :{WHITE}About OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 The OpenTTD team # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Frame rate diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 403cd8eade..63b5461a53 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -2656,7 +2656,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Company-owned l STR_ABOUT_OPENTTD :{WHITE}About OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 The OpenTTD team # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 6e03e5b242..8e806f0e02 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -2696,7 +2696,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Company-owned l STR_ABOUT_OPENTTD :{WHITE}About OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 The OpenTTD team # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index d8a78e8ed2..a6346cb35d 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -2261,7 +2261,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Kompanie poseda STR_ABOUT_OPENTTD :{WHITE}Pri OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Origina kopirajto {COPYRIGHT} 1995 Chris Sawyer, Ĉiuj rajtoj rezervitaj STR_ABOUT_VERSION :{BLACK}OpenTTD-versio {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 La teamo de OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 La teamo de OpenTTD # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index f59555868c..92486aac56 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -2743,7 +2743,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ettevõtte maa STR_ABOUT_OPENTTD :{WHITE}OpenTTD lisainfo STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Algne autorikaitse {COPYRIGHT} 1995 Chris Sawyer, kõik õigused kaitstud STR_ABOUT_VERSION :{BLACK}OpenTTD osa {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 OpenTTD meeskond +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 OpenTTD meeskond # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Kaadrisagedus diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 9dd30eb324..e42bfe3bfa 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -2421,7 +2421,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ogn hjá fyrit STR_ABOUT_OPENTTD :{WHITE}Um OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Upprunalig upphavsrættindi {COPYRIGHT} 1995 Chris Sawyer, Øll rættindi umbiðin STR_ABOUT_VERSION :{BLACK}OpenTTD útgáva {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD toymi +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD toymi # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 86edbf439c..7fbb2a7fb1 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -2699,7 +2699,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Yhtiön omistam STR_ABOUT_OPENTTD :{WHITE}Tietoja OpenTTD:stä STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Alkuperäiset oikeudet {COPYRIGHT} 1995 Chris Sawyer, kaikki oikeudet pidätetään STR_ABOUT_VERSION :{BLACK}OpenTTD-versio {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 The OpenTTD team # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Kuvataajuus diff --git a/src/lang/french.txt b/src/lang/french.txt index 32a197af6c..3b108cb9ed 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -2705,7 +2705,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terrain apparte STR_ABOUT_OPENTTD :{WHITE}À propos de OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Tous droits réservés STR_ABOUT_VERSION :{BLACK}OpenTTD version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 L'équipe OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 L'équipe OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Fréquence d'images diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index af5049d114..42e7b17554 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -2926,7 +2926,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Tìr a' chompan STR_ABOUT_OPENTTD :{WHITE}Mu dheidhinn OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Còir-lethbhreac tùsail {COPYRIGHT} 1995 Chris Sawyer, a h-uile còir glèidhte STR_ABOUT_VERSION :{BLACK}OpenTTD tionndadh {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 An sgioba OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 An sgioba OpenTTD # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/galician.txt b/src/lang/galician.txt index f3fddb5821..604a82102b 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -2686,7 +2686,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreo propieda STR_ABOUT_OPENTTD :{WHITE}Acerca de OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright orixinal {COPYRIGHT} 1995 Chris Sawyer, Tódolos dereitos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versión {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 O equipo de OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 O equipo de OpenTTD # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/german.txt b/src/lang/german.txt index d36076dd9f..34b97a3bbe 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -2691,7 +2691,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Firmeneigenes G STR_ABOUT_OPENTTD :{WHITE}OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Transport Tycoon-Urheberrecht {COPYRIGHT} 1995 Chris Sawyer, alle Rechte vorbehalten STR_ABOUT_VERSION :{BLACK}OpenTTD-Version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD-Team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD-Team # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Bildwiederholrate diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 64471ad58e..76ff7a1755 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -2803,7 +2803,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ιδιοκτη STR_ABOUT_OPENTTD :{WHITE}Σχετικά με το OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Αρχικά Πνευματικά Δικαιώματα {COPYRIGHT} 1995 Chris Sawyer, Όλα τα δικαιώματα διατηρούνται STR_ABOUT_VERSION :{BLACK}Έκδοση OpenTTD{REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Η ομάδα του OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Η ομάδα του OpenTTD # Framerate display window STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Αριθμός στιγμών παιχνιδιού που προσομοιώνεται ανά δευτερόλεπτο. diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index bc5f563889..37630feeb0 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -2708,7 +2708,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :שטח בבעל STR_ABOUT_OPENTTD :{WHITE}OpenTTD אודות STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}כל הזכויות שמורות , {COPYRIGHT}1995 כריס סויר - זכויות יוצרים מקוריות STR_ABOUT_VERSION :{BLACK}{REV} גירסה , OpenTTD -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 The OpenTTD team # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}קצב ריענון diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 8eb63547f5..1b4de73eb1 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -2749,7 +2749,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Vállalat álta STR_ABOUT_OPENTTD :{WHITE}Az OpenTTD-ről STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Eredeti copyright {COPYRIGHT} 1995 Chris Sawyer, Minden jog fenntartva STR_ABOUT_VERSION :{BLACK}OpenTTD {REV} verzió -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 Az OpenTTD csapat +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 Az OpenTTD csapat # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 8b05505cfa..7cb78a8398 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -2530,7 +2530,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Land í eigu fy STR_ABOUT_OPENTTD :{WHITE}Um OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Upphaflegur höfundarréttur {COPYRIGHT} 1995 Chris Sawyer, Öll réttindi áskilin STR_ABOUT_VERSION :{BLACK}OpenTTD útgáfa {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 OpenTTD hópurinn +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 OpenTTD hópurinn # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 1a7728cccc..322b5840d9 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -2693,7 +2693,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Tanah milik Per STR_ABOUT_OPENTTD :{WHITE}Tentang OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Hak Cipta asli {COPYRIGHT} 1995 Chris Sawyer, Hak Cipta dilindungi STR_ABOUT_VERSION :{BLACK}OpenTTD versi {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Tim OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Tim OpenTTD # Framerate display window STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) diff --git a/src/lang/irish.txt b/src/lang/irish.txt index d4679ded9e..450c8e9689 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -2681,7 +2681,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Talamh faoi úi STR_ABOUT_OPENTTD :{WHITE}Maidir le OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Cóipcheart bunaidh {COPYRIGHT} 1995 Chris Sawyer, Gach ceart ar cosaint STR_ABOUT_VERSION :{BLACK}OpenTTD leagan {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 An fhoireann OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 An fhoireann OpenTTD # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/italian.txt b/src/lang/italian.txt index ace459d6ec..bd265fe7d3 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -2733,7 +2733,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno possedu STR_ABOUT_OPENTTD :{WHITE}Informazioni su OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright originale {COPYRIGHT} 1995 Chris Sawyer, Tutti i diritti riservati STR_ABOUT_VERSION :{BLACK}OpenTTD versione {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Il team OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Il team OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Frame rate diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index a6aa2f127e..d89ade38ae 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -2682,7 +2682,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :社有地 STR_ABOUT_OPENTTD :{WHITE}OpenTTDについて STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}オリジナル版権{COPYRIGHT} 1995 Chris Sawyer All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD バージョン {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 The OpenTTD team # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/korean.txt b/src/lang/korean.txt index c4dbffd992..eabe89b343 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -2704,7 +2704,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :회사 소유 STR_ABOUT_OPENTTD :{WHITE}OpenTTD에 대해서 STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD 버전 {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD 개발팀 +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD 개발팀 # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}프레임레이트 diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 0db5c191c9..34d12f9e6a 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -2627,7 +2627,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Uzņēmumam pie STR_ABOUT_OPENTTD :{WHITE}Par OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Oriģināla autortiesības {COPYRIGHT} 1995 Kriss Sojers. Visas tiesības paturētas STR_ABOUT_VERSION :{BLACK}OpenTTD versija {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD darba grupa +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD darba grupa # Framerate display window STR_FRAMERATE_SPEED_FACTOR :{WHITE}pašreizējās spēles ātruma pakāpe: {DECIMAL}x diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index f2309f9674..0942333483 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -2900,7 +2900,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Kompanijos žem STR_ABOUT_OPENTTD :{WHITE}Apie OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Pradinės versijos teisės priklauso {COPYRIGHT} 1995 Chris Sawyer, Visos teisės saugomos STR_ABOUT_VERSION :{BLACK}OpenTTD versija {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 OpenTTD komanda +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 OpenTTD komanda # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index ae7f63000d..27e5f1594b 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -2685,7 +2685,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Land am Firmenb STR_ABOUT_OPENTTD :{WHITE}Iwwert OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original Copyright {COPYRIGHT} 1995 Chris Sawyer, All Rechter virbehalen STR_ABOUT_VERSION :{BLACK}OpenTTD Versioun {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 D'OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 D'OpenTTD team # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/malay.txt b/src/lang/malay.txt index d17a9c4437..9bdbe9f443 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -2427,7 +2427,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Tanah dimiliki STR_ABOUT_OPENTTD :{WHITE}Tentang OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Hakcipta Asal {COPYRIGHT} 1995 Chris Sawyer, Hakcipta terpelihara STR_ABOUT_VERSION :{BLACK}OpenTTD versi {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 The OpenTTD team # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 8573b31c8e..203166898a 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -2689,7 +2689,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Firma-eid lando STR_ABOUT_OPENTTD :{WHITE}Om OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Opprinnelig opphavsbeskyttet {COPYRIGHT} 1995 Chris Sawyer, Alle rettigheter reservert STR_ABOUT_VERSION :{BLACK}OpenTTD versjon {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD-teamet +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD-teamet # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index d102229539..28f6fb3e37 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -2604,7 +2604,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Feltet eigast a STR_ABOUT_OPENTTD :{WHITE}Om OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Opphaveleg opphavsbeskytta av {COPYRIGHT} 1995 Chris Sawyer, Alle rettigheiter reservert STR_ABOUT_VERSION :{BLACK}OpenTTD versjon {REV}. Oversett til nynorsk av Thor Morten Skogrand med fleire. -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD-teamet +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD-teamet # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 6728551ac0..039ba954f3 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3077,7 +3077,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Teren w posiada STR_ABOUT_OPENTTD :{WHITE}OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Prawa Autorskie {COPYRIGHT} 1995 Chris Sawyer, Wszelkie prawa zastrzeżone STR_ABOUT_VERSION :{BLACK}OpenTTD wersja {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 Zespół OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 Zespół OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Ilość klatek na sekundę diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 4dc8724e96..484ffa3b71 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -2705,7 +2705,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno proprie STR_ABOUT_OPENTTD :{WHITE}Sobre o OpenTTD... STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Direitos de autor originais {COPYRIGHT} 1995 Chris Sawyer, Todos os direitos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versão {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 A equipa do OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 A equipa do OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Taxa de fotograma diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 305d99597f..5a86b952dc 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -2653,7 +2653,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Teren în propr STR_ABOUT_OPENTTD :{WHITE}Despre OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Toate drepturile rezervate STR_ABOUT_VERSION :{BLACK}OpenTTD versiunea {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Echipa OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Echipa OpenTTD # Framerate display window STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Număr de evenimente de joc simulate per secundă. diff --git a/src/lang/russian.txt b/src/lang/russian.txt index eaa07783f7..b54bbbaf1e 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2884,7 +2884,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Земля в STR_ABOUT_OPENTTD :{WHITE}Об OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Оригинальные авторские права {COPYRIGHT} 1995 Chris Sawyer. Все права защищены. STR_ABOUT_VERSION :{BLACK}OpenTTD версия {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Команда разработчиков OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Команда разработчиков OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Скорость игры diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 556d844512..081e216b3b 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -2890,7 +2890,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Zemljište u po STR_ABOUT_OPENTTD :{WHITE}O OpenTTD-u STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Originalni kopirajt {COPYRIGHT} 1995 Chris Sawyer, Sva prava zadržana STR_ABOUT_VERSION :{BLACK}OpenTTD verzija {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD tim +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD tim # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 78365fe130..ff5c5ec4ec 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -2692,7 +2692,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :公司属地 STR_ABOUT_OPENTTD :{WHITE}关于 OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}原始版权由 {COPYRIGHT} 1995 Chris Sawyer 所有,保留一切权力。 STR_ABOUT_VERSION :{BLACK}OpenTTD 版本 {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD 团队 +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD 团队 # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}帧率 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 6ef55d7cf0..f888fe61c0 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -2749,7 +2749,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Spoločnosťou STR_ABOUT_OPENTTD :{WHITE}OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Pôvodný copyright: {COPYRIGHT} 1995 Chris Sawyer, všetky práva vyhradené STR_ABOUT_VERSION :{BLACK}OpenTTD verzia {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 team OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 team OpenTTD # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 657fa8af6f..2e6554ce58 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -2835,7 +2835,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ozemlje v lasti STR_ABOUT_OPENTTD :{WHITE}O OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Prvotne avtorske pravice {COPYRIGHT} 1995 Chris Sawyer, vse pravice pridržane STR_ABOUT_VERSION :{BLACK}OpenTTD različica {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 ekipa OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 ekipa OpenTTD # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index fbe369ce82..d13421cc77 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -2696,7 +2696,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno propied STR_ABOUT_OPENTTD :{WHITE}Acerca de OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright Original {COPYRIGHT} 1995 Chris Sawyer, Todos los derechos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versión {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 El equipo OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 El equipo OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Fotogramas por segundo - FPS diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index c4c3666a88..287a73ce6c 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -2705,7 +2705,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno propied STR_ABOUT_OPENTTD :{WHITE}Acerca de OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Copyright original {COPYRIGHT} 1995 Chris Sawyer, Todos los derechos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versión {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018, el equipo de OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019, el equipo de OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}FPS diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 40319f6cdc..2a29a33b77 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -2703,7 +2703,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Mark som ägs a STR_ABOUT_OPENTTD :{WHITE}Om OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Ursprunglig upphovsrätt {COPYRIGHT} 1995 Chris Sawyer, Alla rättigheter hävdas STR_ABOUT_VERSION :{BLACK}OpenTTD-version {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD-teamet +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD-teamet # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Bildfrekvens diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 7985fed264..24349a53e5 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -2375,7 +2375,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :நிறுவ STR_ABOUT_OPENTTD :{WHITE}OpenTTD-ஐ பற்றி STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}அசல் உரிமைகள் {COPYRIGHT} 1995 கிறிஸ் சாயர், எல்லா உரிமைகளும் பதிவுசெய்யப்பட்டது STR_ABOUT_VERSION :{BLACK}OpenTTD பதிப்பு {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD குழுமம் +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD குழுமம் # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/thai.txt b/src/lang/thai.txt index c1e82e18f5..88a78054d6 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -2629,7 +2629,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :บริษั STR_ABOUT_OPENTTD :{WHITE}เกี่ยวกับ OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}ลิขสิทธิ์เดิม {COPYRIGHT} ค.ศ.1995 ของ Chris Sawyer, สงวนลิขสิทธิ์ STR_ABOUT_VERSION :{BLACK}OpenTTD รุ่นที่ {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}ลิขสิทธิ์ OpenTTD {COPYRIGHT}2002-2018 ของ The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}ลิขสิทธิ์ OpenTTD {COPYRIGHT}2002-2019 ของ The OpenTTD team # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index ae1170aee8..135fed42b0 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -2681,7 +2681,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :公司所有土 STR_ABOUT_OPENTTD :{WHITE}關於 OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}原著作權為 {COPYRIGHT} 1995 Chris Sawyer,保留所有權利 STR_ABOUT_VERSION :{BLACK}OpenTTD 版本 {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD 開發小組 +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD 開發小組 # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index ac7f22c24e..f143a3deb9 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -2686,7 +2686,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Satın alınmı STR_ABOUT_OPENTTD :{WHITE}OpenTTD Hakkında STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Telif hakkı {COPYRIGHT} 1995 Chris Sawyer, Her hakkı saklıdır STR_ABOUT_VERSION :{BLACK}OpenTTD sürüm {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 OpenTTD ekibi +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD ekibi # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index cacc4210dd..bb2e6afcb6 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -2812,7 +2812,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ця ділян STR_ABOUT_OPENTTD :{WHITE}Про OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Авторське право {COPYRIGHT} 1995 Кріс Сойєр, Всі права захищені STR_ABOUT_VERSION :{BLACK}OpenTTD версія {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 команда OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 команда OpenTTD # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index 05cc5f6c8d..5649ca310f 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -2469,7 +2469,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Lân fan bedriu STR_ABOUT_OPENTTD :{WHITE}Oer OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Orizjineel copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD-ferzje {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 It OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 It OpenTTD team # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/unfinished/ido.txt b/src/lang/unfinished/ido.txt index e843f645f3..4f353acaaf 100644 --- a/src/lang/unfinished/ido.txt +++ b/src/lang/unfinished/ido.txt @@ -776,7 +776,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Stabeyo di komp # About OpenTTD window STR_ABOUT_VERSION :{BLACK}OpenTTD versiono {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 La kruo OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 La kruo OpenTTD # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/unfinished/macedonian.txt b/src/lang/unfinished/macedonian.txt index 40e162d2ff..af62c00a81 100644 --- a/src/lang/unfinished/macedonian.txt +++ b/src/lang/unfinished/macedonian.txt @@ -1200,7 +1200,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Компани STR_ABOUT_OPENTTD :{WHITE}За OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Оригинален copyright {COPYRIGHT} 1995 Chris Sawyer, Сите права се задржани STR_ABOUT_VERSION :{BLACK}OpenTTD верзија {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 OpenTTD тимот +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 OpenTTD тимот # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index 80059f1186..eb14ae8035 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -2385,7 +2385,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :زمین خری STR_ABOUT_OPENTTD :{WHITE}OpenTTD در باره ی STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Original copyright {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD ویرایش {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 The OpenTTD team +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 The OpenTTD team # Framerate display window ############ Leave those lines in this order!! diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index e098ee47e6..2dde004aab 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -2699,7 +2699,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Đất công ty STR_ABOUT_OPENTTD :{WHITE}Về OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Nguyên tác bản quyền {COPYRIGHT} 1995 Chris Sawyer, All rights reserved STR_ABOUT_VERSION :{BLACK}OpenTTD phiên bản {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2018 Nhóm OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Nhóm OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Tốc độ khung hình diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index a6444cc81c..2ed53b3152 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -2685,7 +2685,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Tir cwmni STR_ABOUT_OPENTTD :{WHITE}Gwybodaeth am OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Hawlfraint Wreiddiol {COPYRIGHT} 1995 Chris Sawyer, Holl cedwir pob hawl STR_ABOUT_VERSION :{BLACK}fersiwn OpenTTD {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2018 Y tîm OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 Y tîm OpenTTD # Framerate display window ############ Leave those lines in this order!! diff --git a/src/os/windows/ottdres.rc.in b/src/os/windows/ottdres.rc.in index ad51be76c6..ebf0cc4afb 100644 --- a/src/os/windows/ottdres.rc.in +++ b/src/os/windows/ottdres.rc.in @@ -100,7 +100,7 @@ BEGIN VALUE "FileDescription", "OpenTTD\0" VALUE "FileVersion", "!!VERSION!!\0" VALUE "InternalName", "openttd\0" - VALUE "LegalCopyright", "Copyright \xA9 OpenTTD Developers 2002-2018. All Rights Reserved.\0" + VALUE "LegalCopyright", "Copyright \xA9 OpenTTD Developers 2002-2019. All Rights Reserved.\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "openttd.exe\0" VALUE "PrivateBuild", "\0" From 011257dc8804175dd7d1e839e97e796c0a88aee6 Mon Sep 17 00:00:00 2001 From: Samu Date: Thu, 31 Jan 2019 14:35:13 +0000 Subject: [PATCH 287/622] Change: Allow AI companies to start immediately. Allow multiple AIs to possibly start in the same tick. start_date = 0 becomes a special case, where random deviation does not occur. If start_date was not already 0, then a minimum value of 1 must apply. --- src/ai/ai.hpp | 2 +- src/ai/ai_config.cpp | 11 +++++++++++ src/ai/ai_config.hpp | 1 + src/company_cmd.cpp | 18 ++++++++++++------ src/script/script_config.hpp | 2 +- 5 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/ai/ai.hpp b/src/ai/ai.hpp index 065367d03b..1b5b6c07da 100644 --- a/src/ai/ai.hpp +++ b/src/ai/ai.hpp @@ -32,7 +32,7 @@ public: START_NEXT_EASY = DAYS_IN_YEAR * 2, START_NEXT_MEDIUM = DAYS_IN_YEAR, START_NEXT_HARD = DAYS_IN_YEAR / 2, - START_NEXT_MIN = 1, + START_NEXT_MIN = 0, START_NEXT_MAX = 3600, START_NEXT_DEVIATION = 60, }; diff --git a/src/ai/ai_config.cpp b/src/ai/ai_config.cpp index f920d31014..20e913c2e9 100644 --- a/src/ai/ai_config.cpp +++ b/src/ai/ai_config.cpp @@ -118,3 +118,14 @@ void AIConfig::SetSetting(const char *name, int value) ScriptConfig::SetSetting(name, value); } + +void AIConfig::AddRandomDeviation() +{ + int start_date = this->GetSetting("start_date"); + + ScriptConfig::AddRandomDeviation(); + + /* start_date = 0 is a special case, where random deviation does not occur. + * If start_date was not already 0, then a minimum value of 1 must apply. */ + this->SetSetting("start_date", start_date != 0 ? max(1, this->GetSetting("start_date")) : 0); +} diff --git a/src/ai/ai_config.hpp b/src/ai/ai_config.hpp index b02935902c..600ae1af93 100644 --- a/src/ai/ai_config.hpp +++ b/src/ai/ai_config.hpp @@ -34,6 +34,7 @@ public: /* virtual */ int GetSetting(const char *name) const; /* virtual */ void SetSetting(const char *name, int value); + /* virtual */ void AddRandomDeviation(); /** * When ever the AI Scanner is reloaded, all infos become invalid. This diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index be75d94c8c..cf66690f41 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -595,10 +595,10 @@ void StartupCompanies() } /** Start a new competitor company if possible. */ -static void MaybeStartNewCompany() +static bool MaybeStartNewCompany() { #ifdef ENABLE_NETWORK - if (_networking && Company::GetNumItems() >= _settings_client.network.max_companies) return; + if (_networking && Company::GetNumItems() >= _settings_client.network.max_companies) return false; #endif /* ENABLE_NETWORK */ Company *c; @@ -612,8 +612,10 @@ static void MaybeStartNewCompany() if (n < (uint)_settings_game.difficulty.max_no_competitors) { /* Send a command to all clients to start up a new AI. * Works fine for Multiplayer and Singleplayer */ - DoCommandP(0, 1 | INVALID_COMPANY << 16, 0, CMD_COMPANY_CTRL); + return DoCommandP(0, 1 | INVALID_COMPANY << 16, 0, CMD_COMPANY_CTRL); } + + return false; } /** Initialize the pool of companies. */ @@ -714,11 +716,15 @@ void OnTick_Companies() } if (_next_competitor_start == 0) { - _next_competitor_start = AI::GetStartNextTime() * DAY_TICKS; + /* AI::GetStartNextTime() can return 0. */ + _next_competitor_start = max(1, AI::GetStartNextTime() * DAY_TICKS); } - if (AI::CanStartNew() && _game_mode != GM_MENU && --_next_competitor_start == 0) { - MaybeStartNewCompany(); + if (_game_mode != GM_MENU && AI::CanStartNew() && --_next_competitor_start == 0) { + /* Allow multiple AIs to possibly start in the same tick. */ + do { + if (!MaybeStartNewCompany()) break; + } while (AI::GetStartNextTime() == 0); } _cur_company_tick_index = (_cur_company_tick_index + 1) % MAX_COMPANIES; diff --git a/src/script/script_config.hpp b/src/script/script_config.hpp index dfc675473c..3dfd6bb0b2 100644 --- a/src/script/script_config.hpp +++ b/src/script/script_config.hpp @@ -139,7 +139,7 @@ public: /** * Randomize all settings the Script requested to be randomized. */ - void AddRandomDeviation(); + virtual void AddRandomDeviation(); /** * Is this config attached to an Script? In other words, is there a Script From c9d801a98df5ea19ef8aa12b0f3f798729d6a1f1 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 2 Feb 2019 14:44:02 +0000 Subject: [PATCH 288/622] Fix: Make livery window resize properly if GUI scale changes whilst open. --- src/company_gui.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 5317d70898..5a751a3635 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -700,9 +700,6 @@ public: this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_SCL_MATRIX_SCROLLBAR); - this->square = GetSpriteSize(SPR_SQUARE); - this->line_height = max(this->square.height, (uint)FONT_HEIGHT_NORMAL) + 4; - if (group == INVALID_GROUP) { this->livery_class = LC_OTHER; this->sel = 1; @@ -770,6 +767,9 @@ public: case WID_SCL_MATRIX: { /* 11 items in the default rail class */ + this->square = GetSpriteSize(SPR_SQUARE); + this->line_height = max(this->square.height, (uint)FONT_HEIGHT_NORMAL) + 4; + size->height = 11 * this->line_height; resize->width = 1; resize->height = this->line_height; @@ -784,6 +784,7 @@ public: FALLTHROUGH; case WID_SCL_PRI_COL_DROPDOWN: { + this->square = GetSpriteSize(SPR_SQUARE); int padding = this->square.width + NWidgetScrollbar::GetVerticalDimension().width + 10; for (const StringID *id = _colour_dropdown; id != endof(_colour_dropdown); id++) { size->width = max(size->width, GetStringBoundingBox(*id).width + padding); From e8f1c446a6e164b5c37cc6d14010709becc52998 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 2 Feb 2019 15:12:33 +0000 Subject: [PATCH 289/622] Fix: DMU/EMU livery should apply to passenger carriages with DMU/EMU engines. --- src/vehicle.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index a5fe2ffa7a..62d279db62 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1813,11 +1813,12 @@ LiveryScheme GetEngineLiveryScheme(EngineID engine_type, EngineID parent_engine_ if (parent_engine_type == INVALID_ENGINE) { return LS_PASSENGER_WAGON_STEAM; } else { + bool is_mu = HasBit(EngInfo(parent_engine_type)->misc_flags, EF_RAIL_IS_MU); switch (RailVehInfo(parent_engine_type)->engclass) { default: NOT_REACHED(); case EC_STEAM: return LS_PASSENGER_WAGON_STEAM; - case EC_DIESEL: return LS_PASSENGER_WAGON_DIESEL; - case EC_ELECTRIC: return LS_PASSENGER_WAGON_ELECTRIC; + case EC_DIESEL: return is_mu ? LS_DMU : LS_PASSENGER_WAGON_DIESEL; + case EC_ELECTRIC: return is_mu ? LS_EMU : LS_PASSENGER_WAGON_ELECTRIC; case EC_MONORAIL: return LS_PASSENGER_WAGON_MONORAIL; case EC_MAGLEV: return LS_PASSENGER_WAGON_MAGLEV; } From 9dc36057eb60c85bae8f378ffb1fe067ae6a41c1 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 2 Feb 2019 15:39:16 +0000 Subject: [PATCH 290/622] Fix #7058, Fix #7161: Network chat messages did not expire. --- src/window.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/window.cpp b/src/window.cpp index 2d03310337..3f4adf5e98 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -3100,7 +3100,7 @@ void UpdateWindows() CallWindowRealtimeTickEvent(delta_ms); -#ifdef ENABLE_NETWORKING +#ifdef ENABLE_NETWORK static GUITimer network_message_timer = GUITimer(1); if (network_message_timer.Elapsed(delta_ms)) { network_message_timer.SetInterval(1000); From bdf0dc67e98ea551b9f96d91ced301404137620f Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 2 Feb 2019 19:45:42 +0100 Subject: [PATCH 291/622] Update: Translations from eints croatian: 4 changes by VoyagerOne korean: 4 changes by telk5093 russian: 2 changes by Lone_Wolf german: 4 changes by smwforever45, 4 changes by ShadowCop spanish (mexican): 2 changes by Absay portuguese: 52 changes by vesgo finnish: 3 changes by hpiirai dutch: 238 changes by JanWillem estonian: 1 change by rm87 --- src/lang/croatian.txt | 4 + src/lang/dutch.txt | 474 ++++++++++++++++++++-------------------- src/lang/estonian.txt | 2 +- src/lang/finnish.txt | 6 +- src/lang/german.txt | 11 +- src/lang/korean.txt | 4 + src/lang/portuguese.txt | 102 ++++----- src/lang/russian.txt | 2 + src/lang/spanish_MX.txt | 2 + 9 files changed, 314 insertions(+), 293 deletions(-) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 13fe1434b7..2d8ecc8f9f 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -286,6 +286,7 @@ STR_COLOUR_BROWN :Smeđa STR_COLOUR_GREY :Siva STR_COLOUR_WHITE :Bijela STR_COLOUR_RANDOM :Nasumično +STR_COLOUR_DEFAULT :Osnovna postavka # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -2874,6 +2875,8 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nema dos STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtriraj niz: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Presnimi datoteku +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Jeste li sigurano da želite presnimiti postojeću datoteku? STR_SAVELOAD_OSKTITLE :{BLACK}Upiši ime za spremanje igre @@ -3516,6 +3519,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupe - STR_GROUP_CREATE_TOOLTIP :{BLACK}Klikni za kreiranje grupe STR_GROUP_DELETE_TOOLTIP :{BLACK}Obriši odabranu grupu STR_GROUP_RENAME_TOOLTIP :{BLACK}Preimenuj odabranu grupu +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Promijeni livreju odabrane grupe STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klikni kako bi zaštitio ovu grupu od globalne automatske zamjene STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Izbriši grupu diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 1feff67694..1b48c5c1ff 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -241,7 +241,7 @@ STR_BUTTON_RENAME :{BLACK}Hernoeme STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Sluit venster STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Vensternaam - sleep om venster te verplaatsen STR_TOOLTIP_SHADE :{BLACK}Venster inklappen - alleen titelbalk weergeven -STR_TOOLTIP_DEBUG :{BLACK}Toon NewGRF-debuginformatie +STR_TOOLTIP_DEBUG :{BLACK}Probleemgegevens voor NewGRF weergeven STR_TOOLTIP_DEFSIZE :{BLACK}wijzig venster naar standaardgrootte. Ctrl+Klik om de huidige grootte als standaard op te slaan STR_TOOLTIP_STICKY :{BLACK}Markeer dit venster als niet-sluitbaar door de 'Sluit alle vensters'-knop. Ctrl+Klik om status als default op te slaan STR_TOOLTIP_RESIZE :{BLACK}Klik en sleep om de grootte van dit venster te veranderen @@ -264,7 +264,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Door het # Query window STR_BUTTON_DEFAULT :{BLACK}Standaard STR_BUTTON_CANCEL :{BLACK}Annuleren -STR_BUTTON_OK :{BLACK}Oké +STR_BUTTON_OK :{BLACK}OK # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . @@ -329,7 +329,7 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Verhaal STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Geef doellijst weer STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Grafieken weergeven STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Bedrijfsscoretabel weergeven -STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Financier de bouw van nieuwe industrie of toon lijst van alle industrieën +STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Financier de bouw van nieuwe industrie of geef lijst van alle industrieën weer STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Lijst met treinen van het bedrijf weergeven. Ctrl+klik schakelt tussen lijst van groepen/voertuigen. STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Lijst met wegvoertuigen van het bedrijf weergeven. Ctrl+klik schakelt tussen lijst van groepen/voertuigen. STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Lijst met schepen van het bedrijf weergeven. Ctrl+klik schakelt tussen lijst van groepen/voertuigen. @@ -342,7 +342,7 @@ STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Bouw hav STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Bouw vliegvelden STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Open de landschapsbalk om land te verhogen/verlagen, bomen te planten, etc. STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Geluid-/muziekvenster weergeven -STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Toon laatst (nieuws)bericht, toon berichtinstellingen +STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Laatste (nieuws-)bericht weergeven, berichtinstellingen weergeven STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Landinformatie, console, scriptdebug, screenshots, over OpenTTD STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Verwissel knoppenbalk @@ -380,9 +380,9 @@ STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF-instelli STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Doorzichtigheidsopties STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Plaatsnamen weergeven STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Stationsnamen weergeven -STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Seinhuisnamen weergeven +STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Namen van routepunten weergeven STR_SETTINGS_MENU_SIGNS_DISPLAYED :Bordjes weergeven -STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Toon borden en namen van tegenstanders +STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Bordjes en namen van tegenstanders weergeven STR_SETTINGS_MENU_FULL_ANIMATION :Alle animaties STR_SETTINGS_MENU_FULL_DETAIL :Alle details STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Transparante gebouwen @@ -585,7 +585,7 @@ STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLA STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Alles uit STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Alle vrachtsoorten weergeven op de grafiek van vrachtprijzen STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Geen vrachtsoorten weergeven op de grafiek van vrachtprijzen -STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Schakel grafiek voor vrachttype aan/uit +STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Grafiek voor vrachttype aan-uit STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Gedetailleerde prestatiescores weergeven @@ -670,7 +670,7 @@ STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Selectee STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Kies 'Ezy Street stylemuziek'-programma STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Selecteer 'Aangepast1'-programma STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Selecteer 'Aangepast2'-programma -STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Programmashuffle aan/uit +STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Willekeurige volgorde aan-uit STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Venster voor muzieknummers weergeven # Playlist window @@ -716,7 +716,7 @@ STR_SMALLMAP_TOOLTIP_SHOW_VEHICLES_ON_MAP :{BLACK}Voertuig STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRIES_ON_MAP :{BLACK}Industrieën op de kaart weergeven STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Vrachtstroom op de kaart weergeven STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Transportroutes op de kaart weergeven -STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Toon begroeiing op de kaart +STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Begroeiing op de kaart weergeven STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Landeigenaren op de kaart weergeven STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Klik op een industriesoort om deze weer te geven. Ctrl+klik verbergt alle andere industriesoorten behalve de geselecteerde. Nogmaals Ctrl+klik geeft opnieuw alle industriesoorten weer. STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Klik op een bedrijf om de bedrijfseigendommen weer te geven. Ctrl+klik verbergt alle andere bedrijven behalve de geselecteerde. Nogmaals Ctrl+klik geeft opnieuw alle bedrijven weer. @@ -751,7 +751,7 @@ STR_SMALLMAP_LEGENDA_INDUSTRIES :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_DESERT :{TINY_FONT}{BLACK}Woestijn STR_SMALLMAP_LEGENDA_SNOW :{TINY_FONT}{BLACK}Sneeuw -STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Plaatsnamen op de kaart aan/uit +STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Plaatsnamen op de kaart weergeven-verbergen. STR_SMALLMAP_CENTER :{BLACK}Centreer de kaart op huidige positie STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STRING} ({NUM}) STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} @@ -762,14 +762,14 @@ STR_SMALLMAP_ENABLE_ALL :{BLACK}Alles in STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Hoogte weergeven STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Geen industrieën op de kaart weergeven STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Alle industrieën op de kaart weergeven -STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Schakel tonen van hoogte aan/uit +STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Hoogtekaart weergeven-verbergen STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Verberg bedrijfseigendommen op de kaart STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Alle bedrijfseigendommen op de kaart weergeven STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Geen vrachtsoorten op de kaart weergeven STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Alle vrachtsoorten op de kaart weergeven # Status bar messages -STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Toon laatst (nieuws)bericht +STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Laatste (nieuws-)bericht weergeven STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * GEPAUZEERD * * STR_STATUSBAR_AUTOSAVE :{RED}AUTOMATISCH OPSLAAN @@ -783,13 +783,13 @@ STR_MESSAGE_NEWS_FORMAT :{STRING} - {S STR_NEWS_MESSAGE_CAPTION :{WHITE}Bericht STR_NEWS_CUSTOM_ITEM :{BIG_FONT}{BLACK}{STRING} -STR_NEWS_FIRST_TRAIN_ARRIVAL :{BIG_FONT}{BLACK}Inwoners feesten . . .{}Eerste trein arriveert in {STATION}! -STR_NEWS_FIRST_BUS_ARRIVAL :{BIG_FONT}{BLACK}Inwoners feesten . . .{}Eerste bus arriveert in {STATION}! -STR_NEWS_FIRST_TRUCK_ARRIVAL :{BIG_FONT}{BLACK}Inwoners feesten . . .{}Eerste vrachtwagen arriveert in {STATION}! -STR_NEWS_FIRST_PASSENGER_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Inwoners feesten . . .{}Eerste passagierstram arriveert in {STATION}! -STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Inwoners feesten . . .{}Eerste vrachttram arriveert in {STATION}! -STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Inwoners feesten . . .{}Eerste schip arriveert in {STATION}! -STR_NEWS_FIRST_AIRCRAFT_ARRIVAL :{BIG_FONT}{BLACK}Inwoners feesten . . .{}Eerste vliegtuig arriveert in {STATION}! +STR_NEWS_FIRST_TRAIN_ARRIVAL :{BIG_FONT}{BLACK}Inwoners vieren feest. . .{}Eerste trein arriveert bij {STATION}! +STR_NEWS_FIRST_BUS_ARRIVAL :{BIG_FONT}{BLACK}Inwoners vieren feest. . .{}Eerste bus arriveert bij {STATION}! +STR_NEWS_FIRST_TRUCK_ARRIVAL :{BIG_FONT}{BLACK}Inwoners vieren feest. . .{}Eerste vrachtwagen arriveert bij {STATION}! +STR_NEWS_FIRST_PASSENGER_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Inwoners vieren feest. . .{}Eerste passagierstram arriveert bij {STATION}! +STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Inwoners vieren feest. . .{}Eerste vrachttram arriveert bij {STATION}! +STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Inwoners vieren feest. . .{}Eerste schip arriveert in {STATION}! +STR_NEWS_FIRST_AIRCRAFT_ARRIVAL :{BIG_FONT}{BLACK}Inwoners vieren feest . . .{}Eerste vliegtuig arriveert op {STATION}! STR_NEWS_TRAIN_CRASH :{BIG_FONT}{BLACK}Treinongeluk!{}{COMMA} komen om in explosie na de botsing STR_NEWS_ROAD_VEHICLE_CRASH_DRIVER :{BIG_FONT}{BLACK}Wegvoertuig verongelukt!{}Bestuurder komt om in explosie na botsing met trein @@ -799,10 +799,10 @@ STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLAC STR_NEWS_DISASTER_ZEPPELIN :{BIG_FONT}{BLACK}Zeppelinongeluk bij {STATION}! STR_NEWS_DISASTER_SMALL_UFO :{BIG_FONT}{BLACK}Wegvoertuig vernietigd in botsing met 'UFO' -STR_NEWS_DISASTER_AIRPLANE_OIL_REFINERY :{BIG_FONT}{BLACK}Olieraffinaderij in de buurt van {TOWN} is geëxplodeerd! +STR_NEWS_DISASTER_AIRPLANE_OIL_REFINERY :{BIG_FONT}{BLACK}Olieraffinaderij bij {TOWN} is ontploft! STR_NEWS_DISASTER_HELICOPTER_FACTORY :{BIG_FONT}{BLACK}Fabriek in de buurt van {TOWN} is vernietigd onder verdachte omstandigheden! STR_NEWS_DISASTER_BIG_UFO :{BIG_FONT}{BLACK}'UFO' landt in de buurt van {TOWN}! -STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLACK}Instorting van kolenmijn laat spoor van vernietiging achter in de buurt van {TOWN}! +STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLACK}Instorting van kolenmijn laat spoor van vernieling achter bij {TOWN}! STR_NEWS_DISASTER_FLOOD_VEHICLE :{BIG_FONT}{BLACK}Overstromingen!{}Minstens {COMMA} zijn vermist of dood na overstromingen! STR_NEWS_COMPANY_IN_TROUBLE_TITLE :{BIG_FONT}{BLACK}Transportbedrijf in de problemen! @@ -817,7 +817,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Directeur) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} betaalt bouw van nieuwe stad {TOWN}! -STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Er is een nieuwe stad gemaakt met de naam {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Er is een nieuwe stad gebouwd met de naam {TOWN}! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Nieuwe {STRING} in aanbouw bij {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Nieuw {STRING} in aanplant bij {TOWN}! @@ -839,7 +839,7 @@ STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLAC STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Insectenplaag zorgt voor ravage bij {INDUSTRY}!{}Productie gezakt met 50% STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}{STRING} productie van {INDUSTRY} daalt met {COMMA}%! -STR_NEWS_TRAIN_IS_WAITING :{WHITE}{VEHICLE} wacht in treindepot +STR_NEWS_TRAIN_IS_WAITING :{WHITE}{VEHICLE} wacht in remise STR_NEWS_ROAD_VEHICLE_IS_WAITING :{WHITE}{VEHICLE} wacht in garage STR_NEWS_SHIP_IS_WAITING :{WHITE}{VEHICLE} wacht in dok STR_NEWS_AIRCRAFT_IS_WAITING :{WHITE}{VEHICLE} wacht in hangar @@ -874,14 +874,14 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Subsidieaanbod is verlopen:{}{}{STRING} van {STRING} naar {STRING} wordt nu niet meer gesubsidieerd STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsidie ingetrokken:{}{}{STRING}route van {STRING} naar {STRING} wordt nu niet meer gesubsidieerd STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subsidie aangeboden:{}{}Eerste {STRING}route van {STRING} naar {STRING} krijgt een jaar lang subsidie van de gemeente! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subsidie uitgereikt aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt volgend jaar 50% extra betaald! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subsidie uitgereikt aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt volgend jaar dubbel betaald! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subsidie uitgereikt aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt volgend jaar driedubbel betaald! -STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subsidie uitgereikt aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt volgend jaar vierdubbel betaald! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subsidie toegekend aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt volgend jaar 50% extra betaald! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subsidie toegekend aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt volgend jaar dubbel betaald! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subsidie toegekend aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt volgend jaar driedubbel betaald! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subsidie toegekend aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt volgend jaar vierdubbel betaald! STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Verkeerschaos in {TOWN}!{}{}Wegherstelling betaald door {STRING} zorgt voor 6 maanden van miserie bij weggebruikers! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transportmonopolie! -STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Lokale overheid van {TOWN} tekent contract met {STRING} voor een jaar exclusieve transportrechten! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Gemeentebestuur van {TOWN} tekent contract met {STRING} voor een jaar exclusieve transportrechten! # Extra view window STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Kijkvenster {COMMA} @@ -967,7 +967,7 @@ STR_GAME_OPTIONS_TOWN_NAME_CATALAN :Catalaans ############ end of townname region STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Automatisch opslaan -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Kies interval tussen automatisch opgeslagen spellen +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Kies tijdsduur tussen automatisch opgeslagen spellen ############ start of autosave dropdown STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Uit @@ -1166,24 +1166,24 @@ STR_CONFIG_SETTING_TRAIN_REVERSING :Niet toestaan d STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Indien ingeschakeld zullen treinen niet omkeren in niet-eind stations, zelfs als er een kortere weg naar hun volgende bestemming is bij omkeren STR_CONFIG_SETTING_DISASTERS :Rampen: {STRING} STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Schakel rampen die af en toe voertuigen of infrastructuur kunnen blokkeren of vernietigen in/uit -STR_CONFIG_SETTING_CITY_APPROVAL :De houding van de gemeenteraad ten opzichte van herstructurering gebied: {STRING} +STR_CONFIG_SETTING_CITY_APPROVAL :Houding van gemeentebestuur ten opzichte van herstructurering omgeving: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Kies hoeveel lawaai en schade aan het milieu door bedrijven de stadswaardering en hun acties beïnvloeden in hun bouwgebied -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Maximum kaarthoogte: {STRING} +STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Maximale kaarthoogte: {STRING} STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Stel de maximum toegestane hoogte voor bergen op de kaart in -STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Je kunt de maximum kaarthoogte niet in deze waarde wijzigen. Minstens één berg op de kaart is hoger +STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Je kunt de maximale kaarthoogte niet in deze waarde wijzigen. Minstens één berg op de kaart is hoger. STR_CONFIG_SETTING_AUTOSLOPE :Omgeving aanpassen onder gebouwen, spoorwegen, enz. toestaan: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Staat het aanpassen van funderingen onder gebouwen en sporen toe zonder deze te verwijderen STR_CONFIG_SETTING_CATCHMENT :Gebruik meer realistische handelsgebieden: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Heb verschillende grootte verzorgingsgebied voor verschillende typen stations en luchthavens STR_CONFIG_SETTING_EXTRADYNAMITE :Sta verwijderen van meer stedelijke wegen, bruggen en tunnels toe: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Maakt het gemakkelijker om door de stad beheerde infrastructuur en gebouwen te verwijderen. -STR_CONFIG_SETTING_TRAIN_LENGTH :Maximum lengte van treinen: {STRING} -STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Stel de maximum lengte van treinen in +STR_CONFIG_SETTING_TRAIN_LENGTH :Maximale lengte van treinen: {STRING} +STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Stel de maximale lengte van treinen in STR_CONFIG_SETTING_TILE_LENGTH :{COMMA} tegel{P 0 "" s} STR_CONFIG_SETTING_SMOKE_AMOUNT :Hoeveelheid rook/vonken: {STRING} STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Bepaal hoeveel rook of hoeveel vonken door de voertuigen worden uitgestoten. -STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Trein acceleratie model: {STRING} +STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Treinacceleratiemodel: {STRING} STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Selecteer de physics model voor de trein acceleratie. Het "originele" model straft hellingen gelijk voor alle voertuigen. Het "realistische" model bestraft hellingen en bochten, afhankelijk van de verschillende eigenschappen van de inhoud, zoals lengte en trekkracht STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Wegvoertuig acceleratie model: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Selecteer de physics model voor wegvoertuigacceleratie. Het "originele" model straft hellingen gelijk voor alle voertuigen. Het "realistische" model bestraft hellingen, afhankelijk van verschillende eigenschappen van het voertuig, bijvoorbeeld 'trekkracht' @@ -1192,18 +1192,18 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Steilheid van e STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Hellingsterkte voor wegvoertuigen: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Steilheid van een schuine tegel voor een wegvoertuig. Hogere waarden maken het moeilijker om een heuvel te beklimmen -STR_CONFIG_SETTING_FORBID_90_DEG :Verbied treinen en schepen om 90° te draaien: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG :Treinen en schepen mogen niet 90° draaien: {STRING} STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Draaiingen met 90° treden op wanneer een horizontale baan direct gevolgd wordt door een verticaal baanstuk op de aangrenzende tegel, waardoor de trein daarna 90 graden draait wanneer de tegelrand wordt overgestoken in plaats van de gebruikelijke 45 graden voor andere spoorcombinaties. Dit geldt ook voor de draaicirkel van schepen STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Sta het samenvoegen van indirect aansluitende stations toe: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Sta toe dat er aanvullende onderdelen aan een station worden geplaatst zonder dat reeds bestaande onderdelen beïnvloed worden. Ctrl+klik is vereist tijdens het plaatsen van nieuwe onderdelen. STR_CONFIG_SETTING_INFLATION :Inflatie: {STRING} STR_CONFIG_SETTING_INFLATION_HELPTEXT :Schakel inflatie in de economie in, waardoor de kosten iets sneller stijgen dan de betalingen STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :Maximum bruglengte: {STRING} -STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Maximum lengte voor te bouwen bruggen -STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT :Maximum brughoogte: {STRING} +STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Maximale lengte voor te bouwen bruggen +STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT :Maximale brughoogte: {STRING} STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Maximum hoogte om bruggen te bouwen STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :Maximum tunnellengte: {STRING} -STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Maximum lengte voor te bouwen tunnels +STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Maximale lengte voor te bouwen tunnels STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :Handmatige bouwmethode voor primaire industrieën: {STRING} STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Wijze van financiering van een primaire industrie. 'geen' betekent dat het niet mogelijk is om te financieren, 'prospectie' betekent dat financiering mogelijk is, maar de bouw vindt plaats in een willekeurige plek op de kaart en kan mislukken ook, "als andere bedrijfstakken": ruwe industrieën kan worden geconstrueerd door bedrijven als verwerkende industrie in elke positie zij willen STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :Geen @@ -1233,13 +1233,13 @@ STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Uitgeschakeld STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Hoofdkijkvenster, alleen volledig scherm STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Hoofdkijkvenster STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Elk kijkvenster -STR_CONFIG_SETTING_BRIBE :Omkopen van de gemeente toestaan: {STRING} +STR_CONFIG_SETTING_BRIBE :Omkopen van gemeentebestuur toestaan: {STRING} STR_CONFIG_SETTING_BRIBE_HELPTEXT :Toestaan dat bedrijven mogen proberen de plaatselijke autoriteiten om te kopen. Als de omkoping wordt opgemerkt door een inspecteur, zal de onderneming niet in staat zijn om in de stad actie te ondernemen voor zes maanden STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Kopen van exclusieve transportrechten toestaan: {STRING} STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Wanneer een bedrijf de exclusieve transportrechten van een stad koopt, ontvangen de stations (zowel passagiers als vracht) van de tegenstanders geen vracht voor één heel jaar. STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Financiering van gebouwen toestaan: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Deze optie staat bedrijven toe meer geld te geven aan steden voor de financiering van nieuwe huizen. -STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Financieren van lokale wegherbouwing toestaan: {STRING} +STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Financieren van lokale wegreconstructie toestaan: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Deze optie staat bedrijven toe geld te geven aan steden voor het herbouwen van wegen, zodat op wegbedrijven gesaboteerd worden. STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Geld geven aan andere bedrijven toestaan: {STRING} STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Sta toe dat bedrijven geld naar elkaar overmaken in een multiplayerspel. @@ -1253,7 +1253,7 @@ STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Kies de kans op STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Geen STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Verminderd STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normaal -STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Sta toe dat doorrijwegstops worden geplaatst op door stad beheerde wegen: {STRING} +STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Haltes plaatsen op door stad beheerde wegen toestaan: {STRING} STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Laat het bouwen van doorrijhaltes toe op stedelijke wegen STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Sta doorrijhaltes op wegen van tegenstanders toe: {STRING} STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Laat het bouwen van doorrijhaltes toe op wegen van andere bedrijven @@ -1280,7 +1280,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Voertuigen verl STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Wanneer ingeschakeld, alle voertuig modellen blijven voor altijd beschikbaar na hun introductie STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Vernieuw voertuig automatisch wanneer deze oud wordt: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Wanneer ingeschakeld, wordt een voertuig die het einde van zijn levensduur nadert automatisch vervangen als aan de vernieuw voorwaarden worden voldaan -STR_CONFIG_SETTING_AUTORENEW_MONTHS :Vernieuw voertuigen automatisch na {STRING} maximum leeftijd +STR_CONFIG_SETTING_AUTORENEW_MONTHS :Vernieuw voertuigen automatisch na {STRING} maximumleeftijd STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Relatieve leeftijd van een voertuig wanneer deze in aanmerking komt voor automatisch vervangen STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} maand{P 0 "" en} voor STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} maand{P 0 "" en} na @@ -1308,7 +1308,7 @@ STR_CONFIG_SETTING_TERRAIN_TYPE :Terrein type: { STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Alleen TerraGenesis) Heuvelachtigheid van het landschap STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industriedichtheid: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Stel in hoeveel industrieën moeten worden gegenereerd en welk niveau tijdens het spel moet worden gehandhaafd -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximum afstand van de rand voor Olierafinaderijen: {STRING} +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximumafstand van de rand voor Olierafinaderijen: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Olieraffinaderijen worden alleen gebouwd nabij de kaart grens, dat is aan de kust van eiland kaarten STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Sneeuwhoogte: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Instellen op welke hoogte de sneeuw begint in sub-arctische landschap. Sneeuw heeft ook invloed op de industrie generatie en stadsgroei eisen @@ -1337,9 +1337,9 @@ STR_CONFIG_SETTING_EDGES_NOT_EMPTY :{WHITE}Eén of STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}Eén of meer vakjes aan de rand zijn geen water STR_CONFIG_SETTING_STATION_SPREAD :Maximale stationsgrootte: {STRING} -STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :Maximum gebied waar onderdelen van één station op verspreid mogen zijn. Grotere gebieden vertragen het spel! +STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :Maximaal oppervlak waarover onderdelen van één station verspreid mogen zijn. Grotere oppervlakken vertragen het spel! STR_CONFIG_SETTING_SERVICEATHELIPAD :Helikopters automatisch repareren op helipads: {STRING} -STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :Pleeg onderhoud aan elke helikopter na een landing, ook wanneer er geen depot aanwezig is op de luchthaven. +STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :Helikopteronderhoud na landing, ook als er geen hangar is op de luchthaven. STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :Verbind de knoppenbalk voor terreinvorming met die voor spoor/weg/water/vliegveld: {STRING} STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :Bij het openen van een werkbalk voor constructie van transport ook een werkbalk openen voor landschapsvorming. STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR :Gebruiker land kleur op de kleine kaart: {STRING} @@ -1388,7 +1388,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Sluit window me STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Sluit een venster door met de rechtermuisknop erin te klikken. Schakelt de tooltip uit met de rechtermuisknop! STR_CONFIG_SETTING_AUTOSAVE :Automatisch opslaan: {STRING} -STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Kies interval tussen automatische spelopslag +STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Kies tijdsduur voor automatische spelopslag STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Gebruik {STRING} datumformaat voor naamgeving van opgeslagen spellen STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Formaat van de datum in savegamebestandsnamen @@ -1406,7 +1406,7 @@ STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :Alles behalve l STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :Alle mogelijkheden STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Gebruik groepen voor voertuigenlijst: {STRING} STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Schakel het gebruik van de geavanceerde voertuigenlijsten in voor het groeperen van voertuigen -STR_CONFIG_SETTING_LOADING_INDICATORS :Gebruik laadindicatoren: {STRING} +STR_CONFIG_SETTING_LOADING_INDICATORS :Laadpercentages gebruiken: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Geef aan of laadindicatoren worden weergegeven boven ladende of lossende voertuigen STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Dienstregeling in tikken weergeven i.p.v. in dagen: {STRING} STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Reistijden in tijdtabellen in speltikken weergeven in plaats van dagen @@ -1427,11 +1427,11 @@ STR_CONFIG_SETTING_EXPENSES_LAYOUT :Groepeer uitgav STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Definieer de lay-out voor het bedrijfsuitgavenvenster STR_CONFIG_SETTING_SOUND_TICKER :Nieuwsticker: {STRING} -STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Speel geluidseffect voor samenvatting nieuwsberichten +STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Geluidseffect afspelen bij korte nieuwsberichten STR_CONFIG_SETTING_SOUND_NEWS :Krant: {STRING} STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Geluidseffect weergeven bij nieuwsbericht STR_CONFIG_SETTING_SOUND_NEW_YEAR :Einde jaar: {STRING} -STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Speel geluidseffecten bij de samenvatting van resultaten gedurende het jaar ten opzichte van het jaar ervoor aan het einde van het jaar +STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Geluidseffect afspelen bij jaaroverzicht van bedrijf t.o.v. vorig jaar STR_CONFIG_SETTING_SOUND_CONFIRM :Bouw: {STRING} STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Speel geluidseffecten bij succesvolle constructies of andere acties STR_CONFIG_SETTING_SOUND_CLICK :Knop kliks: {STRING} @@ -1445,14 +1445,14 @@ STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Speel omgevings STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING :Bouwen van infrastructuur uitschakelen wanneer geen geschikt voertuig beschikbaar is: {STRING} STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING_HELPTEXT :Wanneer je dit inschakelt, is de infrastructuur alleen beschikbaar als er ook voertuigen beschikbaar zijn. Dit voorkomt verspilling van tijd en geld aan onbruikbare infrastructuur -STR_CONFIG_SETTING_MAX_TRAINS :Maximum aantal treinen per bedrijf: {STRING} -STR_CONFIG_SETTING_MAX_TRAINS_HELPTEXT :Maximum aantal treinen dat een bedrijf kan hebben -STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :Maximum aantal wegvoertuigen per bedrijf: {STRING} +STR_CONFIG_SETTING_MAX_TRAINS :Maximumaantal treinen per bedrijf: {STRING} +STR_CONFIG_SETTING_MAX_TRAINS_HELPTEXT :Maximumaantal treinen dat een bedrijf kan hebben +STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :Maximumaantal wegvoertuigen per bedrijf: {STRING} STR_CONFIG_SETTING_MAX_ROAD_VEHICLES_HELPTEXT :Maximum aantal wegvoertuigen dat een bedrijf kan hebben -STR_CONFIG_SETTING_MAX_AIRCRAFT :Maximum aantal vliegtuigen per bedrijf: {STRING} -STR_CONFIG_SETTING_MAX_AIRCRAFT_HELPTEXT :Maximum aantal vliegtuigen dat een bedrijf kan hebben -STR_CONFIG_SETTING_MAX_SHIPS :Maximum aantal schepen per bedrijf: {STRING} -STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT :Maximum aantal schepen dat een bedrijf kan hebben +STR_CONFIG_SETTING_MAX_AIRCRAFT :Maximumaantal vliegtuigen per bedrijf: {STRING} +STR_CONFIG_SETTING_MAX_AIRCRAFT_HELPTEXT :Maximumaantal vliegtuigen dat een bedrijf kan hebben +STR_CONFIG_SETTING_MAX_SHIPS :Maximumaantal schepen per bedrijf: {STRING} +STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT :Maximumaantal schepen dat een bedrijf kan hebben STR_CONFIG_SETTING_AI_BUILDS_TRAINS :Treinen voor de computer uitschakelen: {STRING} STR_CONFIG_SETTING_AI_BUILDS_TRAINS_HELPTEXT :Het inschakelen van deze instelling maakt het bouwen van treinen onmogelijk voor een computerspeler @@ -1472,22 +1472,22 @@ STR_CONFIG_SETTING_AI_PROFILE_HARD :Moeilijk STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Laat computerspelers toe in netwerkspel: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Sta door computer gegenereerde speler toe deel te nemen in multiplayerspellen STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes voordat scripts worden gestopt: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximum aantal berekeningsstappen die een script kan maken in een beurt +STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximumaantal berekeningsstappen die een script kan maken in een beurt -STR_CONFIG_SETTING_SERVINT_ISPERCENT :Interval tussen onderhoud is een percentage: {STRING} +STR_CONFIG_SETTING_SERVINT_ISPERCENT :Onderhoudstermijnen in procenten: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Kies of onderhoud van de voertuigen wordt geactiveerd door verstreken tijd sinds het laatste onderhoud of door het zakken van de betrouwbaarheid met een bepaald percentage van de maximale betrouwbaarheid -STR_CONFIG_SETTING_SERVINT_TRAINS :Standaard onderhoudsinterval voor treinen: {STRING} -STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Stel de standaard service-interval voor nieuwe railvoertuigen, als er geen expliciete service-interval is ingesteld voor het voertuig +STR_CONFIG_SETTING_SERVINT_TRAINS :Standaardonderhoudstermijn voor treinen: {STRING} +STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Standaardonderhoudstermijn instellen voor nieuwe treinen als er geen expliciete onderhoudstermijn is ingesteld voor het voertuig STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}dag{P 0 "" en}/% STR_CONFIG_SETTING_SERVINT_DISABLED :Uitgeschakeld -STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Standaard onderhoudsinterval voor wegvoertuigen: {STRING} -STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Stel de standaard service-interval voor nieuwe wegvoertuigen, als er geen expliciete service-interval is ingesteld voor het voertuig -STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Standaard onderhoudsinterval voor vliegtuigen: {STRING} -STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Stel de standaard service-interval voor nieuwe vliegtuigen, als er geen expliciete service-interval is ingesteld voor het voertuig -STR_CONFIG_SETTING_SERVINT_SHIPS :Standaard onderhoudsinterval voor schepen: {STRING} -STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Stel de standaard service-interval voor nieuwe schepen, als er geen expliciete service-interval is ingesteld voor het voertuig -STR_CONFIG_SETTING_NOSERVICE :Schakel onderhoud uit wanneer defecten uit staan: {STRING} -STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Als deze optie is ingeschakeld zullen voertuigen niet onderhouden worden als niet kapot kunnen gaan. +STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Standaardonderhoudstermijn voor wegvoertuigen: {STRING} +STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Standaardonderhoudstermijn voor nieuwe wegvoertuigen als er geen expliciete onderhoudstermijn is ingesteld voor het voertuig +STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Standaardonderhoudstermijn voor vliegtuigen: {STRING} +STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Standaardonderhoudsterrmijn voor nieuwe vliegtuigen als er geen expliciete onderhoudstermijn is ingesteld voor het voertuig +STR_CONFIG_SETTING_SERVINT_SHIPS :Standaardonderhoudstermijn voor schepen: {STRING} +STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Standaardonderhoudstermijn voor nieuwe schepen als er geen expliciete onderhoudstermijn is ingesteld voor het voertuig +STR_CONFIG_SETTING_NOSERVICE :Onderhoud uitschakelen wanneer defecten uit staan: {STRING} +STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Als deze optie is ingeschakeld worden voertuigen niet onderhouden als ze niet kapot kunnen gaan. STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Schakel snelheidslimieten voor wagons aan: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Wanneer ingeschakeld, ook gebruik maken van snelheidsbeperkingen van wagons voor het bepalen van de maximale snelheid van een trein STR_CONFIG_SETTING_DISABLE_ELRAILS :Schakel elektrische sporen uit: {STRING} @@ -1545,7 +1545,7 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Selecteer het g STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Plaats automatisch armseinen voor: {STRING} STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Stel het jaar waarin elektrische seinen zal worden gebruikt voor sporen. Voor dit jaar zal niet-elektrische seinen worden gebruikt (die exact dezelfde functie hebben, maar verschillend uiterlijk) STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Activeer de seininterface: {STRING} -STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Toon een venster waar je de soorten seinen kunt kiezen om te bouwen in plaats van alleen vensterloze seintyperotatie met Ctrl+klikken op gebouwde seinen +STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Een venster weergeven waar je de soorten seinen kunt kiezen om te bouwen in plaats van alleen bladeren door seintypes met Ctrl+klikken op gebouwde seinen STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Seintype dat standaard moet worden gebouwd: {STRING} STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Standaard te gebruiken sein. STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Normale seinen @@ -1565,7 +1565,7 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :2x2 raster STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :3x3 raster STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Willekeurig STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Steden mogen wegen bouwen: {STRING} -STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Sta steden toe om wegen te bouwen ten behoeve van groei. Schakel deze optie uit om gemeentebesturen ervan te weerhouden zelf wegen te bouwen. +STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Steden toestaan om wegen te bouwen ten behoeve van groei. Schakel deze optie uit als je niet wilt dat gemeenten zelf wegen bouwen. STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Steden mogen gelijkvloerse kruisingen bouwen: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Door deze optie in te schakelen, kunnen steden gelijkvloerse kruisingen bouwen. STR_CONFIG_SETTING_NOISE_LEVEL :Geluidsniveaucontrole door steden voor vliegvelden toestaan: {STRING} @@ -1590,7 +1590,7 @@ STR_CONFIG_SETTING_SNAP_RADIUS :Windowssnap rad STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Afstand tussen vensters voordat het venster wordt verplaatst wordt automatisch uitgelijnd naar de nabijgelegen vensters STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} pixel{P 0 "" s} STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :Uitgeschakeld -STR_CONFIG_SETTING_SOFT_LIMIT :Maximum aantal (niet-sticky) vensters: {STRING} +STR_CONFIG_SETTING_SOFT_LIMIT :Maximumaantal (niet-blijvende) vensters: {STRING} STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Aantal niet-klevende open vensters voor oude vensters automatisch worden gesloten om ruimte voor nieuwe vensters te maken STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA} STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :uitgeschakeld @@ -1611,7 +1611,7 @@ STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :Langzaam STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :Normaal STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Snel STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Heel snel -STR_CONFIG_SETTING_LARGER_TOWNS :Verhouding van gemeenten die steden zullen worden: {STRING} +STR_CONFIG_SETTING_LARGER_TOWNS :Verhouding van gemeenten die uitgroeien tot steden: {STRING} STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Aantal steden die een stad worden, dus een stad die groter begint en sneller groeit STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 op {COMMA} STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Geen @@ -1643,25 +1643,25 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Verzadiging van STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Vaak zijn er meerdere routes mogelijk tussen twee stations. Cargodist zal de kortste route eerst verzadigen, gebruik dan de tweede kortste route tot die verzadigd is en ga zo maar door. Verzadiging wordt bepaald door een schatting van de capaciteit en het geplande gebruik. Zodra alle routes verzadigd zijn, maar er is meer vraag, zal alle wegen overbelast worden, die met hoge capaciteit eerst. In veel gevallen zat het algoritme niet nauwkeurig de capaciteit inschatten, helaas. Met deze instelling kunt u aangeven tot welk percentage een korter pad moet worden verzadigd eer de eerst volgende langere route wordt gekozen. Zet deze op minder dan 100% om overvolle stations in geval van overschat capaciteit te voorkomen. STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Snelheidseenheden: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Wanneer een snelheid wordt weergegeven in de gebruikersinterface, dan moet het worden getoond in de geselecteerde eenheden +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Wanneer een snelheid wordt weergegeven in het gebruikersscherm, gebruik dan de geselecteerde eenheden STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperiaal (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrisch (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Voertuigkrachteenheden: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Als het verbruik van een voertuig wordt weergegeven in de gebruikersinterface, dan moet het worden getoond in de geselecteerde eenheden +STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Als het verbruik van een voertuig wordt weergegeven in het gebruikersscherm, gebruik dan de geselecteerde eenheden STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL :Imperiaal (hp) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_METRIC :Metrisch (hp) STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_SI :SI (kW) STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT :Gewichtseenheden: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_HELPTEXT :Wanneer er gewichten worden weergegeven in de gebruikersinterface, dan moeten ze worden getoond in de geselecteerde eenheden +STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_HELPTEXT :Wanneer gewichten worden weergegeven in het gebruikersscherm, gebruik dan de geselecteerde eenheden STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_IMPERIAL :Imperiaal (short t/ton) STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_METRIC :Metrisch (t/ton) STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_SI :SI (kg) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME :Volume-eenheden: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_HELPTEXT :Wanneer volumes worden getoond in de gebruikersinterface, dan moeten ze worden getoond in de geselecteerde eenheden +STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_HELPTEXT :Wanneer volumes worden weergeven in het gebruikersscherm, gebruik dan de geselecteerde eenheden STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL :Imperiaal (gal) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_METRIC :Metrisch (l) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_SI :SI (m³) @@ -1673,7 +1673,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_METRIC :Metrisch (kgf) STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_SI :SI (kN) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT :Hoogte-eenheden: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_HELPTEXT :Wanneer hoogtes worden weergegeven in de gebruikersinterface, moet het worden getoond in de geselecteerde eenheden +STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_HELPTEXT :Wanneer hoogtes worden weergegeven in het gebruikersscherm, gebruik dan de geselecteerde eenheden STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL :Imperiaal (ft) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :Metrisch (m) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (m) @@ -1713,7 +1713,7 @@ STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Routezoeker voo STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Routezoeker voor schepen: {STRING} STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Routezoeker voor schepen STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automatisch omdraaien bij seinen: {STRING} -STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Staat toe dat treinen omdraaien bij een sein als ze hier lang hebben staan wachten. +STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Treinen mogen keren bij een sein als ze hier lang staan wachten STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Verander waarde @@ -1752,7 +1752,7 @@ STR_INTRO_HIGHSCORE :{BLACK}Scoretab STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Instellingen STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF-instellingen STR_INTRO_ONLINE_CONTENT :{BLACK}Online inhoud zoeken -STR_INTRO_SCRIPT_SETTINGS :{BLACK}AI/Spel script Instellingen +STR_INTRO_SCRIPT_SETTINGS :{BLACK}AI-/spelscriptinstellingen STR_INTRO_QUIT :{BLACK}Afsluiten STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Start een nieuw spel. Ctrl+klik slaat de kaartconfiguratie over @@ -1768,7 +1768,7 @@ STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Kies sub STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Kies speelgoedlandschap STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Spelopties weergeven -STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Toon scoretabel +STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Scoretabel weergeven STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Scherminstellingen STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}NewGRF-instellingen weergeven STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Zoeken naar nieuwe en aangepaste inhoud om te downloaden @@ -1810,8 +1810,8 @@ STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Spelen STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magische bulldozer (industrieën en andere onverplaatsbare objecten verwijderen): {ORANGE}{STRING} STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunnels mogen elkaar kruisen: {ORANGE}{STRING} STR_CHEAT_NO_JETCRASH :{LTBLUE}Straalvliegtuigen storten niet (vaak) neer op kleine vliegvelden: {ORANGE} {STRING} -STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Wijzig de maximum kaarthoogte: {ORANGE}{NUM} -STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Wijzig de maximum hoogte van bergen op de kaart +STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Wijzig de maximale kaarthoogte: {ORANGE}{NUM} +STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Wijzig de maximale hoogte van bergen op de kaart STR_CHEAT_SWITCH_CLIMATE_TEMPERATE_LANDSCAPE :Gematigd landschap STR_CHEAT_SWITCH_CLIMATE_SUB_ARCTIC_LANDSCAPE :Subarctisch landschap STR_CHEAT_SWITCH_CLIMATE_SUB_TROPICAL_LANDSCAPE :Subtropisch landschap @@ -1830,7 +1830,7 @@ STR_LIVERY_SHIP_TOOLTIP :{BLACK}Kleurens STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Kleurenschema's voor vliegtuigen weergeven STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Kies de hoofdkleur voor het geselecteerde schema. Ctrl+klik zal deze kleur instellen voor elk schema STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Kies de tweede kleur voor het geselecteerde schema. Ctrl+klik om deze kleur in alle schema's te gebruiken -STR_LIVERY_PANEL_TOOLTIP :{BLACK}Kies een kleurenschema om te wijzigen, of meerdere schema's met Ctrl+klik. Vink de keuzevakjes aan/uit om het gebruik van het schema aan/uit te zetten +STR_LIVERY_PANEL_TOOLTIP :{BLACK}Kies een kleurenschema om te wijzigen of meerdere schema's met Ctrl+klik. Vink de keuzevakjes aan-uit om het schema aan-uit te zetten STR_LIVERY_DEFAULT :Standaard kleurenschema STR_LIVERY_STEAM :Stoomlocomotief @@ -1981,13 +1981,13 @@ STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Bescherm STR_NETWORK_START_SERVER_UNADVERTISED :Nee STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} speler{P "" s} -STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maximum aantal spelers: +STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maximumaantal spelers: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Kies het maximaal aantal toegestane spelers. Niet alle posities hoeven gebruikt te worden STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} bedr{P ijf ijven} -STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maximum aantal bedrijven: +STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maximumaantal bedrijven: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Beperk de server tot een bepaald aantal bedrijven STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} toeschouwer{P "" s} -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Maximum aantal toeschouwers: +STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Maximumaantal toeschouwers: STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Beperk de server tot een bepaald aantal toeschouwers STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Gesproken taal: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Andere spelers zullen weten welke taal er wordt gesproken op de server @@ -2281,15 +2281,15 @@ STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Nee, Ope # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Doorzichtigheidsopties -STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Schakel transparantie voor stationsnamen aan/uit. Ctrl+klik om vast te zetten -STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Schakel transparantie voor bomen aan/uit. Ctrl+klik om vast te zetten -STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Schakel transparantie voor huizen aan/uit. Ctrl+klik om vast te zetten -STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Schakel transparantie voor industrieën aan/uit. Ctrl+klik om vast te zetten -STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Schakel transparantie voor gebouwen zoals stations, depots en controleposten aan/uit. Ctrl+klik om vast te zetten -STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Schakel transparantie voor bruggen aan/uit. Ctrl+klik om vast te zetten -STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Schakel transparantie voor gebouwen zoals vuurtorens en antennes aan/uit. Ctrl+klik om vast te zetten -STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Schakel transparantie voor bovenleiding aan/uit. Ctrl+klik voor onthouden -STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Schakel transparantie voor laadindicatoren aan/uit. Ctrl+klik om vast te zetten +STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Transparantie voor stationsnamen aan-uit. Ctrl+klik om vast te zetten. +STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Transparantie voor bomen aan-uit. Ctrl+klik om vast te zetten. +STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Transparantie voor huizen aan-uit. Ctrl+klik om vast te zetten. +STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Transparantie voor industrieën aan-uit. Ctrl+klik om vast te zetten. +STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Transparantie aan-uit voor gebouwen zoals stations, remises en routepunten. Ctrl+klik om vast te zetten. +STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Transparantie voor bruggen aan-uit. Ctrl+klik om vast te zetten. +STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Transparantie voor gebouwen zoals vuurtorens en zendmasten aan-uit. Ctrl+klik om vast te zetten. +STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Transparantie voor bovenleiding aan-uit. Ctrl+klik om vast te zetten. +STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Transparantie voor laadpercentages aan-uit. Ctrl+klik om vast te zetten. STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Maak objecten onzichtbaar in plaats van transparant # Linkgraph legend window @@ -2317,8 +2317,8 @@ STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Biedt aa STR_JOIN_STATION_CAPTION :{WHITE}Station samenvoegen STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Bouw een losstaand station -STR_JOIN_WAYPOINT_CAPTION :{WHITE}Controlepost samenvoegen -STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Bouw een losstaande controlepost +STR_JOIN_WAYPOINT_CAPTION :{WHITE}Routepunt samenvoegen +STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Los routepunt bouwen # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Bouw spoorwegen @@ -2328,13 +2328,13 @@ STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Bouw magneetzwe STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Plaats spoor. Ctrl schakelt tussen bouwen/verwijderen van het spoor. Shift schakelt tussen bouwen/inschatting van de kosten STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Bouw spoor met de Autorail-methode. Ctrl schakelt tussen bouwen/verwijderen van het spoor. Shift schakelt tussen bouwen/inschatting van de kosten -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Bouw treindepot (om treinen te kopen en te onderhouden). Shift schakelt tussen bouwen/inschatting van de kosten -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Bouw spoor om naar controlepost. Houd Ctrl ingedrukt om samen te voegen met andere controlepost. Shift schakelt tussen bouwen/inschatting van de kosten +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Remise bouwen (om treinen te kopen en te onderhouden). Shift schakelt tussen bouwen/kosten weergeven. +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Spoor ombouwen naar routepunt. Ctrl om samen te voegen met ander routepunt. Shift schakelt tussen bouwen/kosten weergeven. STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Bouw treinstation. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Plaats seinen. Ctrl wisselt tussen armseinen/lichtseinen{}Slepen plaatst seinen langs een recht stuk spoor. Ctrl bouwt seinen tot de volgende wissel{}Ctrl+klik schakelt het openen van het keuzescherm voor seinen aan/uit. Shift schakelt tussen bouwen/inschatting van de kosten +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Seinen bouwen. Ctrl wisselt tussen armseinen/lichtseinen{}Slepen plaatst seinen langs een recht stuk spoor. Ctrl bouwt seinen tot de volgende wissel{}Ctrl+klik schakelt het openen van seinkeuzelijst aan-uit. Shift schakelt tussen bouwen/kosten weergeven. STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Bouw spoorbrug. Shift schakelt tussen bouwen/inschatting van de kosten STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Graaf spoortunnel. Shift schakelt tussen bouwen/inschatting van de kosten -STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Kies tussen bouwen en verwijderen van sporen, seinen, controleposten en stations. Houd Ctrl ingedrukt om ook het spoor van controleposten en stations te verwijderen +STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Schakelt tussen bouwen en verwijderen van sporen, seinen, routepunten en stations. Ctrl verwijdert ook het spoor van routepunten en stations. STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Verander spoortype. Shift schakelt tussen bouwen/inschatting van de kosten STR_RAIL_NAME_RAILROAD :Spoorweg @@ -2347,8 +2347,8 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Richting STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Selecteer richting van remise # Rail waypoint construction window -STR_WAYPOINT_CAPTION :{WHITE}Controlepost -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Selecteer type controlepost +STR_WAYPOINT_CAPTION :{WHITE}Routepunt +STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Type routepunt selecteren # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Stationskeuze @@ -2365,7 +2365,7 @@ STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Selectee STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Selecteer het type station om te bouwen STR_STATION_CLASS_DFLT :Standaardstation -STR_STATION_CLASS_WAYP :Controleposten +STR_STATION_CLASS_WAYP :Routepunten # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Seinselectie @@ -2374,14 +2374,14 @@ STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Ingangss STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Uitgangssein (armsein){}Gedraagt zich hetzelfde als een standaardsein, maar is nodig om ingangs- en combinatie-voorseinen aan te sturen STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Combinatiesein (armsein){}Het combinatiesein gedraagt zich als zowel ingangs- als uitgangssein. Zo kun je grote netwerken van voorseinen maken STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Routesein (armsein){}Een routesein laat meer dan één trein tegelijk in een seinblok toe als de trein een route kan reserveren naar een veilige stopplaats. Routeseinen kunnen van achteren worden gepasseerd -STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Eenrichtingsrouteseinen (armsein){}Een routesein laat meer dan één trein tegelijk in een seinblok toe als de trein een route kan reserveren naar een veilige stopplaats. Eenrichtingsrouteseinen kunnen niet van achteren worden gepasseerd +STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Eénrichtingsroutesein (armsein){}Een routesein laat meer dan één trein tegelijk in een seinblok toe als de trein een route kan reserveren naar een veilige stopplaats. Eénrichtingsrouteseinen kunnen niet van achteren worden gepasseerd. STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Standaardsein (elektrisch){}Seinen zijn nodig om te voorkomen dat treinen botsen bij netwerken met meer dan één trein STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Ingangssein (elektrisch){}Groen als er meer dan één groen uitgangssein is in de volgende sectie. Anders is deze rood STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Uitgangssein (elektrisch){}Gedraagt zich hetzelfde als een standaardsein, maar is nodig om ingangs- & combinatie-seinen aan te sturen STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Combinatiesein (elektrisch){}Het combinatiesein gedraagt zich als zowel ingangs- als uitgangssein. Zo kun je grote netwerken van beginseinen maken STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Routeseinen (elektrisch){}Een routesein laat meer dan één trein tegelijk op een seinblok toe als de trein een route kan reserveren naar een veilige stopplaats. Routeseinen kunnen van achteren worden gepasseerd -STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Eenrichtingsrouteseinen (elektrisch){}Een routesein laat meer dan één trein tegelijk op een seinblok toe als de trein een route kan reserveren naar een veilige stopplaats. Eenrichtingsrouteseinen kunnen niet van achteren worden gepasseerd -STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Sein ombouwen{}Als dit geselecteerd is, dan zal door te klikken op een bestaand sein deze worden omgebouwd naar het geselecteerde seintype en variant, Ctrl+klik verandert de bestaande variant (armsein/elektrisch). Shift+klik toont de geschatte ombouwkosten +STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Eénrichtingsroutesein (elektrisch){}Een routesein laat meer dan één trein tegelijk op een seinblok toe als de trein een route kan reserveren naar een veilige stopplaats. Eénrichtingsrouteseinen kunnen niet van achteren worden gepasseerd. +STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Sein ombouwen{}Als dit geselecteerd is, dan kun je door klikken een bestaand sein ombouwen naar het geselecteerde seintype en variant, Ctrl+klik verandert de bestaande variant (armsein/elektrisch). Shift+klik geeft de geschatte ombouwkosten. STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Dichtheid van seinen bij slepen STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Dichtheid van seinen bij slepen verkleinen STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Dichtheid van seinen bij slepen vergroten @@ -2392,10 +2392,10 @@ STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Kies typ STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Brugkeuze - klik op de gewenste brug om die te bouwen STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY} -STR_BRIDGE_NAME_SUSPENSION_STEEL :Hangend, Staal +STR_BRIDGE_NAME_SUSPENSION_STEEL :Hangend, staal STR_BRIDGE_NAME_GIRDER_STEEL :Ligger, staal -STR_BRIDGE_NAME_CANTILEVER_STEEL :Vrijdragend, Staal -STR_BRIDGE_NAME_SUSPENSION_CONCRETE :Hangend, Beton +STR_BRIDGE_NAME_CANTILEVER_STEEL :Vrijdragend, staal +STR_BRIDGE_NAME_SUSPENSION_CONCRETE :Hangend, beton STR_BRIDGE_NAME_WOODEN :Hout STR_BRIDGE_NAME_CONCRETE :Beton STR_BRIDGE_NAME_TUBULAR_STEEL :Buis, staal @@ -2489,12 +2489,12 @@ STR_STATION_BUILD_NOISE :{BLACK}Geluidso STR_LANDSCAPING_TOOLBAR :{WHITE}Terreinvorming STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Verlaag een hoek van het land. Slepen verlaagt de eerste geselecteerde hoek en brengt het geselecteerde gebied naar de hoogte van die hoek. Ctrl selecteert het gebied diagonaal. Shift maakt een inschatting van de kosten STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Verhoog een hoek van het land. Slepen verhoogt de eerste geselecteerde hoek en brengt het geselecteerde gebied naar de hoogte van die hoek. Ctrl selecteert het gebied diagonaal. Shift maakt een inschatting van de kosten -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Egaliseer land naar de hoogte van de eerst geselecteerde hoek. Ctrl selecteert een diagonaal gebied. Shift+klik wisselt tussen bouwen/tonen verwachte kosten -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Koop land voor toekomstig gebruik. Shift+klik wisselt tussen bouwen/tonen verwachte kosten +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Land egaliseren op hoogte van eerst geselecteerde hoek. Ctrl selecteert een diagonaal gebied. Shift+klik wisselt tussen bouwen/verwachte kosten weergeven. +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Land kopen voor toekomstig gebruik. Shift+klik wisselt tussen bouwen/verwachte kosten weergeven. # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Keuze van object -STR_OBJECT_BUILD_TOOLTIP :{BLACK}Kies het te bouwen object. Shift+Klik wisselt tussen bouwen/tonen verwachte kosten +STR_OBJECT_BUILD_TOOLTIP :{BLACK}Object selecteren voor bouwen. Shift+Klik wisselt tussen bouwen/verwachte kosten weergeven. STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Kies klasse van het te bouwen object STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Bekijk het object STR_OBJECT_BUILD_SIZE :{BLACK}Grootte: {GOLD}{NUM} x {NUM} tegels @@ -2579,9 +2579,9 @@ STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Industri STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Link naar de kleine kaart STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Weergegeven industrieën ook op de kleine kaart selecteren STR_INDUSTRY_CARGOES_SELECT_CARGO :{BLACK}Kies vracht -STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}Kies de vracht om te tonen +STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}Vracht selecteren voor weergeven STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}Kies bedrijf -STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Kies het bedrijf om te tonen +STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Bedrijf selecteren voor weergeven # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Landinformatie @@ -2663,7 +2663,7 @@ STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Vrachtwagenlaad STR_LAI_STATION_DESCRIPTION_BUS_STATION :Bushalte STR_LAI_STATION_DESCRIPTION_SHIP_DOCK :Haven STR_LAI_STATION_DESCRIPTION_BUOY :Boei -STR_LAI_STATION_DESCRIPTION_WAYPOINT :Controlepost +STR_LAI_STATION_DESCRIPTION_WAYPOINT :Routepunt STR_LAI_WATER_DESCRIPTION_WATER :Water STR_LAI_WATER_DESCRIPTION_CANAL :Kanaal @@ -2697,7 +2697,7 @@ STR_LAI_BRIDGE_DESCRIPTION_AQUEDUCT :Aquaduct STR_LAI_OBJECT_DESCRIPTION_TRANSMITTER :Radiomast STR_LAI_OBJECT_DESCRIPTION_LIGHTHOUSE :Vuurtoren -STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Bedrijfshoofdkwartier +STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Hoofdkantoor STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terrein in bedrijfseigendom # About OpenTTD window @@ -2710,7 +2710,7 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Frame rate STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulatiesnelheid: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Aantal gesimuleerde gameticks per seconde. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Aantal gesimuleerde speltikken per seconde. STR_FRAMERATE_RATE_BLITTER :{BLACK}Grafische framesnelheid: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Aantal videoframes die weergegeven worden per seconde. STR_FRAMERATE_SPEED_FACTOR :{BLACK}Huidige spelsnelheidsfactor: {DECIMAL}x @@ -2729,11 +2729,11 @@ STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COM ############ Leave those lines in this order!! STR_FRAMERATE_GAMELOOP :{BLACK}Spellustotaal: STR_FRAMERATE_GL_ECONOMY :{BLACK} Vrachtafhandeling: -STR_FRAMERATE_GL_TRAINS :{BLACK} Treinticks: -STR_FRAMERATE_GL_ROADVEHS :{BLACK} Wegvoertuigticks: -STR_FRAMERATE_GL_SHIPS :{BLACK} Schipticks: -STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Vliegtuigticks: -STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Wereldticks: +STR_FRAMERATE_GL_TRAINS :{BLACK} Treintikken: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Wegvoertuigtikken: +STR_FRAMERATE_GL_SHIPS :{BLACK} Scheepstikken: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Vliegtuigtikken: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Wereldtikken: STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Vertraging koppelinggrafiek: STR_FRAMERATE_DRAWING :{WHITE}Grafische weergave: STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Wereldkijkvensters: @@ -2743,11 +2743,11 @@ STR_FRAMERATE_SOUND :{BLACK}Geluid m ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Gameloop STR_FRAMETIME_CAPTION_GL_ECONOMY :Cargoafhandeling -STR_FRAMETIME_CAPTION_GL_TRAINS :Treinticks -STR_FRAMETIME_CAPTION_GL_ROADVEHS :Wegvoertuigticks -STR_FRAMETIME_CAPTION_GL_SHIPS :Schipticks -STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Vliegtuigticks -STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Wereldticks +STR_FRAMETIME_CAPTION_GL_TRAINS :Treintikken +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Wegvoertuigtikken +STR_FRAMETIME_CAPTION_GL_SHIPS :Scheepstikken +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Vliegtuigtikken +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Wereldtikken STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Link grafiekvertraging STR_FRAMETIME_CAPTION_DRAWING :Graphics weergeven STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Wereldkijkvenster weergeven @@ -2779,6 +2779,8 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Geen inf STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtertekenreeks: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Bestand overschrijven +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Weet je zeker dat je het bestaande bestand wilt overschrijven? STR_SAVELOAD_OSKTITLE :{BLACK}Voer een naam in voor het spel dat moet worden opgeslagen @@ -2790,9 +2792,9 @@ STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Aantal steden: STR_MAPGEN_DATE :{BLACK}Datum: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Aantal industrieën: -STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Maximum kaarthoogte -STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Verhoog de maximum hoogte van bergen op de kaart met één -STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Verklein de maximum hoogte van bergen op de kaart met één +STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Maximale kaarthoogte +STR_MAPGEN_MAX_HEIGHTLEVEL_UP :{BLACK}Verhoog de maximale hoogte van bergen op de kaart met één +STR_MAPGEN_MAX_HEIGHTLEVEL_DOWN :{BLACK}Verklein de maximale hoogte van bergen op de kaart met één STR_MAPGEN_SNOW_LINE_HEIGHT :{BLACK}Hoogte van sneeuwgrens: STR_MAPGEN_SNOW_LINE_UP :{BLACK}Verhoog de sneeuwgrens met één STR_MAPGEN_SNOW_LINE_DOWN :{BLACK}Verlaag de sneeuwgrens met één @@ -2822,7 +2824,7 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Naam van STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Grootte: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Wijzig maximum kaarthoogte +STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Maximale kaarthoogte wijzigen STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Verander hoogte van sneeuwgrens STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Verander startjaar @@ -3048,7 +3050,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Geef een STR_TOWN_DIRECTORY_CAPTION :{WHITE}Steden STR_TOWN_DIRECTORY_NONE :{ORANGE} Geen STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) -STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Groeistad){BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (groeistad){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Plaatsnamen - klik op naam om het scherm te centreren op de stad. Ctrl+klik opent een nieuw kijkvenster op de locatie van de stad STR_TOWN_POPULATION :{BLACK}Wereldbevolking: {COMMA} @@ -3084,7 +3086,7 @@ STR_LOCAL_AUTHORITY_CAPTION :{WHITE} Gemeent STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Reputatie van transportbedrijven: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Mogelijkheden: -STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lijst met dingen die mogelijk zijn in deze gemeente - klik op een item voor meer details +STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lijst met dingen die mogelijk zijn in deze gemeente - klik op een onderdeel voor meer details STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Doe het STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Voer de actie uit die in de bovenstaande lijst is geselecteerd @@ -3095,7 +3097,7 @@ STR_LOCAL_AUTHORITY_ACTION_ROAD_RECONSTRUCTION :Betaal wegrepar STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :Bouw standbeeld van directeur STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Financier nieuwe gebouwen STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Koop exclusieve transportrechten -STR_LOCAL_AUTHORITY_ACTION_BRIBE :Koop de gemeenteraad om +STR_LOCAL_AUTHORITY_ACTION_BRIBE :Gemeentebestuur omkopen STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Begin een kleine reclamecampagne, om meer passagiers en vracht naar jouw transportdiensten te trekken.{}Kosten: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Begin een middelgrote advertentiecampagne, om meer passagiers en vracht naar jouw transportdiensten te trekken.{}Kosten: {CURRENCY_LONG} @@ -3103,7 +3105,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Begin e STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Financier een herstelling van het wegennetwerk. Veroorzaakt tot 6 maanden lang een aanzienlijke verstoring van het wegverkeer.{}Kosten: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Bouw een standbeeld ter ere van jouw bedrijf.{}Kosten: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Financier de bouw van nieuwe commerciële gebouwen in de stad.{}Kosten: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Koop 1 jaar exclusieve transportrechten in deze plaats. De gemeenteraad staat passagiers en vracht alleen toe om jouw stations te gebruiken.{}Kosten: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}1 jaar exclusieve transportrechten kopen in deze plaats. Het gemeentebestuur staat alleen passagiers en vracht toe bij jouw stations.{}Kosten: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Koop het plaatselijk gezag om om je reputatie te verhogen met het risico op een strenge sanctie wanneer je gepakt wordt.{}Kosten: {CURRENCY_LONG} # Goal window @@ -3116,7 +3118,7 @@ STR_GOALS_SPECTATOR_NONE :{ORANGE}- Niet STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} STR_GOALS_COMPANY_TITLE :{BLACK}Bedrijfsdoelen: -STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik op doel om venster te centreren op industrie/stad/tegel. Ctrl+Klik opent een nieuw venster op industrie/stad/tegel locatie +STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik op doel centreert venster op industrie/stad/tegel. Ctrl+Klik opent een nieuw venster op de locatie van de industrie/stad/tegel. # Goal question window STR_GOAL_QUESTION_CAPTION_QUESTION :Vraag @@ -3155,8 +3157,8 @@ STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik op de dienst om het dorp/industrie te centreren. Ctrl+klik opent een nieuw venster op de locatie van het dorp/industrie # Story book window -STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Verhaallijn -STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Algemene verhaallijn +STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} - verhaal +STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Algemeen verhaal STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Pagina {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Spring naar een bepaalde pagina door deze te selecteren in deze keuzelijst. @@ -3168,7 +3170,7 @@ STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Ongeldige # Station list window STR_STATION_LIST_TOOLTIP :{BLACK}Stationsnamen - klik op naam om het scherm te centreren op het station. Ctrl+klik opent een nieuw venster op de locatie van het station -STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Houd Ctrl ingedrukt om meer items te kiezen +STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Houd Ctrl ingedrukt om meer onderdelen te kiezen STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} Station{P "" s} STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} @@ -3244,12 +3246,12 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Voorkom # Waypoint/buoy view window STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} -STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centreer scherm op de locatie van de controlepost. Ctrl+klik opent een nieuw venster op de locatie van de controlepost -STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Verander naam controlepost +STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Scherm centreren op 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_CHANGE_BUOY_NAME :{BLACK}Naam van boei aanpassen -STR_EDIT_WAYPOINT_NAME :{WHITE}Naam controlepost aanpassen +STR_EDIT_WAYPOINT_NAME :{WHITE}Naam routepunt aanpassen # Finances window STR_FINANCES_CAPTION :{WHITE}{COMPANY} Financiën {BLACK}{COMPANY_NUM} @@ -3273,7 +3275,7 @@ STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURREN STR_FINANCES_TOTAL_CAPTION :{WHITE}Totaal: STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Banksaldo STR_FINANCES_LOAN_TITLE :{WHITE}Lening -STR_FINANCES_MAX_LOAN :{WHITE}Maximum lening: {BLACK}{CURRENCY_LONG} +STR_FINANCES_MAX_LOAN :{WHITE}Maximale lening: {BLACK}{CURRENCY_LONG} STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG} STR_FINANCES_BORROW_BUTTON :{BLACK}Leen {CURRENCY_LONG} STR_FINANCES_BORROW_TOOLTIP :{BLACK}Vergroot lening. Ctrl+klik om zoveel als mogelijk te lenen @@ -3303,12 +3305,12 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} vliegveld{P "" en} STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Geen -STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Bouw bedrijfshoofdkwartier -STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Bouw bedrijfshoofdkwartier -STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Bekijk bedrijfshoofdkwartier +STR_COMPANY_VIEW_BUILD_HQ_BUTTON :{BLACK}Hoofdkantoor bouwen +STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Hoofdkantoor bouwen +STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Hoofdkantoor bekijken STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Hoofdkantoor weergeven -STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Verplaats bedrijfshoofdkwartier -STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Herbouw bedrijfshoofdkwartier ergens anders voor 1% van de bedrijfswaarde. Shift+klik toont verwachte kosten zonder hoofdkwartier te verplaatsen +STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Hoofdkantoor verplaatsen +STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Hoofdkantoor verplaatsen voor 1% van de bedrijfswaarde. Shift+klik geeft de verwachte kosten zonder hoofdkantoor te verplaatsen. STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Details STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Bekijken gedetailleerde aantallen infrastructuur @@ -3385,7 +3387,7 @@ STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Vliegtui STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Winst dit jaar: {CURRENCY_LONG} (vorig jaar: {CURRENCY_LONG}) -STR_VEHICLE_LIST_AVAILABLE_TRAINS :Beschikbare railvoertuigen +STR_VEHICLE_LIST_AVAILABLE_TRAINS :Beschikbare spoorvoertuigen STR_VEHICLE_LIST_AVAILABLE_ROAD_VEHICLES :Beschikbare wegvoertuigen STR_VEHICLE_LIST_AVAILABLE_SHIPS :Beschikbare schepen STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Beschikbare vliegtuigen @@ -3471,24 +3473,24 @@ STR_PURCHASE_INFO_MAX_TE :{BLACK}Max. tre STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Bereik: {GOLD}{COMMA} tegels STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Vliegtuig type: {GOLD}{STRING} -STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Spoorvoertuigkeuzelijst. Klik op een spoorvoertuig voor informatie. Ctrl+klik voor het aan/uitzetten van het verbergen van het voertuigtype -STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Wegvoertuigkeuzelijst. Klik op een wegvoertuig voor informatie. Ctrl+klik om het verbergen van het voertuigtype aan/uit te zetten. -STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Schipskeuzelijst. Klik op een schip voor informatie. Ctrl+klik voor het aan/uitzetten voor het verbergen van het schipstype -STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Vliegtuigkeuzelijst. Klik op een vliegtuig voor informatie. Ctrl+klik voor om het verbergen van het vliegtuigtype aan te zetten +STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Spoorvoertuigkeuzelijst. Klik op een spoorvoertuig voor informatie. Ctrl+klik voor spoorvoertuigtype weergeven-verbergen. +STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Wegvoertuigkeuzelijst. Klik op wegvoertuig voor informatie. Ctrl+klik voor voertuigtype weergeven-verbergen. +STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Scheepskeuzelijst. Klik op een schip voor informatie. Ctrl+klik voor scheepstype weergeven-verbergen. +STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Vliegtuigkeuzelijst. Klik op vliegtuig voor informatie. Ctrl+klik voor vliegtuigtype weergeven-verbergen. -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Koop spoorvoertuig +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Spoorvoertuig kopen STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Wegvoertuig kopen -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Koop schip +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Schip kopen STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Vliegtuig kopen -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde spoorvoertuig. Shift+klik toont verwachte kosten zonder te kopen +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Geselecteerd spoorvoertuig bouwen. Shift+klik geeft de verwachte kosten zonder te kopen. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde wegvoertuig. Shift+klik geeft de verwachte kosten zonder te kopen. STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde schip. Shift+klik geeft de verwachte kosten zonder te kopen STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde vliegtuig. Shift+klik geeft de verwachte kosten zonder te kopen. -STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Hernoem +STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Hernoemen STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Hernoemen -STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Hernoem +STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Hernoemen STR_BUY_VEHICLE_AIRCRAFT_RENAME_BUTTON :{BLACK}Hernoemen STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP :{BLACK}Hernoem type spoorvoertuig @@ -3498,7 +3500,7 @@ STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Hernoem STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON :{BLACK}Verberg STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_TOGGLE_BUTTON :{BLACK}Verbergen -STR_BUY_VEHICLE_SHIP_HIDE_TOGGLE_BUTTON :{BLACK}Verberg +STR_BUY_VEHICLE_SHIP_HIDE_TOGGLE_BUTTON :{BLACK}Verbergen STR_BUY_VEHICLE_AIRCRAFT_HIDE_TOGGLE_BUTTON :{BLACK}Verbergen STR_BUY_VEHICLE_TRAIN_SHOW_TOGGLE_BUTTON :{BLACK}Weergeven @@ -3506,12 +3508,12 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_SHOW_TOGGLE_BUTTON :{BLACK}Weergeve STR_BUY_VEHICLE_SHIP_SHOW_TOGGLE_BUTTON :{BLACK}Weergeven STR_BUY_VEHICLE_AIRCRAFT_SHOW_TOGGLE_BUTTON :{BLACK}Weergeven -STR_BUY_VEHICLE_TRAIN_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Wijzigt het verbergen/tonen van het treintype -STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Wijzigt het verbergen/tonen van het wegvoertuigtype -STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Wijzigt het verbergen/tonen van het schipstype -STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Wijzigt het verbergen/tonen van het vliegtuigtype +STR_BUY_VEHICLE_TRAIN_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Type spoorvoertuig weergeven-verbergen +STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Wegvoertuigtype weergeven-verbergen +STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Scheepstype weergeven-verbergen +STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Vliegtuigtype weergeven-verbergen -STR_QUERY_RENAME_TRAIN_TYPE_CAPTION :{WHITE}Hernoem type van railvoertuig +STR_QUERY_RENAME_TRAIN_TYPE_CAPTION :{WHITE}Hernoem type spoorvoertuig STR_QUERY_RENAME_ROAD_VEHICLE_TYPE_CAPTION :{WHITE}Hernoem type van wegvoertuig STR_QUERY_RENAME_SHIP_TYPE_CAPTION :{WHITE}Hernoem type van schip STR_QUERY_RENAME_AIRCRAFT_TYPE_CAPTION :{WHITE}Hernoem type van vliegtuig @@ -3520,7 +3522,7 @@ STR_QUERY_RENAME_AIRCRAFT_TYPE_CAPTION :{WHITE}Hernoem STR_DEPOT_CAPTION :{WHITE}{DEPOT} STR_DEPOT_RENAME_TOOLTIP :{BLACK}Hernoem depot -STR_DEPOT_RENAME_DEPOT_CAPTION :Hernoem depot +STR_DEPOT_RENAME_DEPOT_CAPTION :Depot hernoemen STR_DEPOT_NO_ENGINE :{BLACK}- STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING} @@ -3532,7 +3534,7 @@ STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Wegvoert STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Schepen - rechts-klik op schip voor informatie STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Vliegtuig - rechts-klik op vliegtuig voor informatie -STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Sleep railvoertuig hier om het te verkopen +STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Sleep trein hierheen om te verkopen STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Sleep wegvoertuig hier om het te verkopen STR_DEPOT_SHIP_SELL_TOOLTIP :{BLACK}Sleep schip hier om het te verkopen STR_DEPOT_AIRCRAFT_SELL_TOOLTIP :{BLACK}Sleep vliegtuig hier om het te verkopen @@ -3549,12 +3551,12 @@ STR_DEPOT_AUTOREPLACE_ROAD_VEHICLE_TOOLTIP :{BLACK}Vervang STR_DEPOT_AUTOREPLACE_SHIP_TOOLTIP :{BLACK}Vervang automatisch alle schepen in het dok STR_DEPOT_AUTOREPLACE_AIRCRAFT_TOOLTIP :{BLACK}Vervang automatisch alle vliegtuigen in de hangar -STR_DEPOT_TRAIN_NEW_VEHICLES_BUTTON :{BLACK}Nieuwe railvoertuigen +STR_DEPOT_TRAIN_NEW_VEHICLES_BUTTON :{BLACK}Nieuwe treinen STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_BUTTON :{BLACK}Nieuwe wegvoertuigen STR_DEPOT_SHIP_NEW_VEHICLES_BUTTON :{BLACK}Nieuwe schepen STR_DEPOT_AIRCRAFT_NEW_VEHICLES_BUTTON :{BLACK}Nieuwe vliegtuigen -STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP :{BLACK}Koop nieuw railvoertuig +STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP :{BLACK}Koop nieuwe trein STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_TOOLTIP :{BLACK}Koop nieuw wegvoertuig STR_DEPOT_SHIP_NEW_VEHICLES_TOOLTIP :{BLACK}Koop nieuw schip STR_DEPOT_AIRCRAFT_NEW_VEHICLES_TOOLTIP :{BLACK}Koop nieuw vliegtuig @@ -3569,10 +3571,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}Centreer het scherm op de locatie van het treindepot. Ctrl+klik opent een nieuw scherm op de locatie van het treindepot +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_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}Centreer het scherm op de locatie van de hangar. Ctrl+klik opent een nieuw venster op de hangar locatie +STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Scherm centreren op 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 @@ -3637,7 +3639,7 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Klik op STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Wissel tussen locomotief- en wagonvervangvensters STR_REPLACE_ENGINES :Motoren STR_REPLACE_WAGONS :Wagons -STR_REPLACE_ALL_RAILTYPE :Alle spoorvoertuigen +STR_REPLACE_ALL_RAILTYPE :Alle treinen STR_REPLACE_HELP_RAILTYPE :{BLACK}Selecteer een spoortype waar je locomotieven voor wilt vervangen STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Dit geeft weer waarmee de links geselecteerde locomotief vervangen wordt @@ -3677,14 +3679,14 @@ STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Bouw vli STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Keer trein om STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Dwing het wegvoertuig te keren. -STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Toon orders van de trein. Ctrl+klik toont het tijdschema van de trein +STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Orders van trein weergeven. Ctrl+klik geeft dienstregeling van trein. STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Orders van wegvoertuig weergeven. Ctrl+klik geeft de dienstregeling van het voertuig. -STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Toon orders van het schip. Ctrl+klik toont tijdschema van het schip +STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Orders van schip weergeven. Ctrl+klik geeft dienstregeling van schip. STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Orders van vliegtuig weergeven. Ctrl+klik geeft de dienstregeling van het vliegtuig. -STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Toon details van trein -STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Toon details van wegvoertuig -STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Toon details van schip +STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Details van trein weergeven +STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Details van wegvoertuig weergeven +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_STATE_START_STOP_TOOLTIP :{BLACK}Huidige actie van trein - klik hier om de trein te starten/stoppen. Ctrl+klik om naar bestemming te scrollen @@ -3746,10 +3748,10 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Capacite STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Geldoverdracht: {LTBLUE}{CURRENCY_LONG} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Onderhoudsinterval: {LTBLUE}{COMMA}{NBSP}dagen{BLACK} Laatste onderhoud: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Onderhoudsinterval: {LTBLUE}{COMMA}%{BLACK} Laatste onderhoud: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Vergroot onderhoudsinterval met 10. Ctrl+klik verhoogt interval met 5 -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Verklein onderhoudsinterval met 10. Ctrl+klik verlaagt interval met 5 +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Onderhoudstermijn: {LTBLUE}{COMMA}{NBSP}dagen{BLACK} Laatste onderhoud: {LTBLUE}{DATE_LONG} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Onderhoudstermijn: {LTBLUE}{COMMA}%{BLACK} Laatste onderhoud: {LTBLUE}{DATE_LONG} +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Onderhoudstermijn met 10 verlengen. Ctrl+klik verlengt termijn met 5. +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Onderhoudstermijn met 10 verkorten. Ctrl+klik verkort termijn met 5 STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Wijzig onderhoudsintervaltype STR_VEHICLE_DETAILS_DEFAULT :Standaard @@ -3907,7 +3909,7 @@ STR_ORDER_SERVICE_NON_STOP_AT :Onderhoud non-s STR_ORDER_NEAREST_DEPOT :het dichtstbijzijnde STR_ORDER_NEAREST_HANGAR :de dichtstbijzijnde hangar -STR_ORDER_TRAIN_DEPOT :Treindepot +STR_ORDER_TRAIN_DEPOT :Remise STR_ORDER_ROAD_VEHICLE_DEPOT :Garage STR_ORDER_SHIP_DEPOT :Dok STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING} {STRING} @@ -3974,20 +3976,20 @@ STR_TIMETABLE_TOOLTIP :{BLACK}Dienstre STR_TIMETABLE_NO_TRAVEL :Niet rijden STR_TIMETABLE_NOT_TIMETABLEABLE :Rijd (automatisch; volgens dienstregeling bij volgende handmatige bestemming) STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Reis (geen dienstregeling) -STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Reis met maximaal {2:VELOCITY} (geen tijdschema) +STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Reis met maximaal {2:VELOCITY} (geen dienstregeling) STR_TIMETABLE_TRAVEL_FOR :Reis naar {STRING} STR_TIMETABLE_TRAVEL_FOR_SPEED :Reis {STRING} met maximaal {VELOCITY} -STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Reis (gedurende {STRING}, geen tijdschema) -STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Reis (gedurende {STRING}, geen tijdschema) maximaal {VELOCITY} -STR_TIMETABLE_STAY_FOR_ESTIMATED :(wacht gedurende {STRING}, geen tijdschema) -STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(reis gedurende {STRING}, geen tijdschema) +STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Reis (gedurende {STRING}, geen dienstregeling) +STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Reis (gedurende {STRING}, geen dienstregeling) maximaal {VELOCITY} +STR_TIMETABLE_STAY_FOR_ESTIMATED :(wacht gedurende {STRING}, geen dienstregeling) +STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(reis gedurende {STRING}, geen dienstregeling) STR_TIMETABLE_STAY_FOR :en blijf voor {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :en rijd naar {STRING} STR_TIMETABLE_DAYS :{COMMA}{NBSP}dag{P "" en} STR_TIMETABLE_TICKS :{COMMA}{NBSP}tik{P "" ken} -STR_TIMETABLE_TOTAL_TIME :{BLACK}Dit tijdschema duurt {STRING} om te volbrengen -STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Dit tijdschema duurt minstens {STRING} om te volbrengen (niet alles geselecteerd) +STR_TIMETABLE_TOTAL_TIME :{BLACK}Deze dienstregeling duurt {STRING} +STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Deze dienstregeling duurt minstens {STRING} (niet alles ingeroosterd) STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Dit voertuig is op tijd STR_TIMETABLE_STATUS_LATE :{BLACK}Dit voertuig heeft {STRING} vertraging @@ -3996,7 +3998,7 @@ STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Deze die STR_TIMETABLE_STATUS_START_AT :{BLACK}Deze dienstregeling begint bij {STRING} STR_TIMETABLE_STARTING_DATE :{BLACK}Startdatum -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Selecteer een datum als uitgangspunt van dit tijdschema. Ctrl + klik geeft het startpunt van dit tijdschema en distribueert alle voertuigen die deze orders delen gelijkmatig op basis van hun relatieve volgorde, indien de order volledig is ingeroosterd +STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Selecteer een datum als startpunt voor deze dienstregeling. Ctrl + klik geeft het startpunt van deze dienstregeling en verdeelt alle voertuigen die deze orders delen gelijkmatig op basis van hun relatieve volgorde, als de order volledig is ingeroosterd. STR_TIMETABLE_CHANGE_TIME :{BLACK}Verander de tijd STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Verander de tijdsduur die de geselecteerde order mag duren @@ -4005,7 +4007,7 @@ STR_TIMETABLE_CLEAR_TIME :{BLACK}Verwijde STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Verwijder de tijdsduur die de geselecteerde order mag duren STR_TIMETABLE_CHANGE_SPEED :{BLACK}Wijzig Maximumsnelheid -STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Wijzig de maximum snelheid voor de gekozen order +STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Wijzig de maximumsnelheid voor de gekozen order STR_TIMETABLE_CLEAR_SPEED :{BLACK}Verwijder Snelheidslimiet STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Verwijder de maximumsnelheid van de gekozen order @@ -4034,28 +4036,28 @@ STR_DATE_YEAR_TOOLTIP :{BLACK}Selectee # AI debug window -STR_AI_DEBUG :{WHITE}AI/Spelscriptdebug +STR_AI_DEBUG :{WHITE}Probleemoplossing AI/spelscript STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} (v{NUM}) STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Naam van het script STR_AI_DEBUG_SETTINGS :{BLACK}Instellingen STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Instellingen van script wijzigen STR_AI_DEBUG_RELOAD :{BLACK}Computerspeler opnieuw laden STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Computerspeler verwijderen, script opnieuw laden en computerspeler opnieuw starten -STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Afbreken in/uitschakelen als een AI-logbericht overeenstemt met de afbreektekst +STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Afbreken in-uitschakelen als een AI-logbericht overeenstemt met de afbreektekst STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Afbreken op: STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Afbreken aan STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Als een AI-logbericht overeenstemt met deze string, dan wordt het spel gepauzeerd STR_AI_DEBUG_MATCH_CASE :{BLACK}Hoofdlettergevoelig -STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Hoofdlettergevoeligheid aan/uizetten bij het vergelijken van AI-logberichten t.o.v. de afbreekstring +STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Hoofdlettergevoeligheid aan-uitzetten bij het vergelijken van AI-logberichten t.o.v. de afbreektekst STR_AI_DEBUG_CONTINUE :{BLACK}Doorgaan STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Het spel vervolgen en de AI voortzetten -STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Toon debuggegevens van deze AI +STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Probleemgegevens van deze AI weergeven STR_AI_GAME_SCRIPT :{BLACK}Spelscript -STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Controleer de log van het spelscript +STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Controleer het logboek van het spelscript STR_ERROR_AI_NO_AI_FOUND :Geen geschikte AI gevonden.{} Deze AI is een 'dummy' en voert niets uit.{}Verschillende AI's kunnen worden gedownload via het 'Online Content' systeem -STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Eén van de actieve scripts is vastgelopen. Meld dit a.u.b. bij de auteur van dit script met een schermprint van het AI/Spel script Debugscherm -STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI/Spel script debugvenster is alleen beschikbaar voor de server +STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Eén van de actieve scripts is vastgelopen. Meld dit a.u.b. bij de auteur van dit script met een schermafdruk van het AI-/spelscript-probleemvenster. +STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI-/spelscript-probleemvenster is alleen beschikbaar voor de server # AI configuration window STR_AI_CONFIG_CAPTION :{WHITE}AI/Spelscriptconfiguratie @@ -4182,7 +4184,7 @@ STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Grote sc STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}De schermafdruk heeft een resolutie van {COMMA} x {COMMA} pixels. De schermafdruk maken kan even duren. Verder gaan? STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Schermafbeelding succesvol opgeslagen als '{STRING}' -STR_ERROR_SCREENSHOT_FAILED :{WHITE}Schermprint mislukt! +STR_ERROR_SCREENSHOT_FAILED :{WHITE}Schermfoto mislukt! # Error message titles STR_ERROR_MESSAGE_CAPTION :{YELLOW}Bericht @@ -4209,9 +4211,9 @@ STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}{1:STRIN STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Niet toegestaan wanneer gepauzeerd # Local authority errors -STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}De gemeenteraad van {TOWN} staat dit niet toe -STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}De gemeenteraad van {TOWN} staat bouwen van nog een vliegveld niet toe -STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}{TOWN} lokale autoriteiten weigeren toestemming te geven voor vliegveld wegens zorgen om geluidsoverlast +STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}Gemeentebestuur van {TOWN} staat dit niet toe +STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}Gemeentebestuur van {TOWN} staat bouwen van nog een vliegveld niet toe +STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}Gemeentebestuur van {TOWN} weigert toestemming voor vliegveld wegens zorgen om geluidsoverlast STR_ERROR_BRIBE_FAILED :{WHITE}Je omkopingspoging is ontdekt door een regionale controleur # Levelling errors @@ -4301,13 +4303,13 @@ STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... door STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... weg is eenrichtingsverkeer of geblokkeerd # Station destruction related errors -STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Kan deel van station niet weghalen... +STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Kan deel van station niet verwijderen... STR_ERROR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Treinstation moet eerst verwijderd worden STR_ERROR_CAN_T_REMOVE_BUS_STATION :{WHITE}Kan busstation niet verwijderen... STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Kan vrachtwagenlaadstation niet verwijderen... STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Kan passagierstramstation niet verwijderen... STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Kan vrachttramhalte niet verwijderen... -STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Moet wegstop eerst weghalen +STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Moet halte eerst verwijderen STR_ERROR_THERE_IS_NO_STATION :{WHITE}...er is hier geen station STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}Verwijder eerst treinstation @@ -4319,20 +4321,20 @@ STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Verwijde STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Verwijder eerst vliegveld # Waypoint related errors -STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Voegt meer dan één bestaande controlepost samen -STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Te dicht bij een andere controlepost +STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Ligt naast meer dan één bestaand routepunt +STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Te dicht bij een ander routepunt -STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Kan hier geen treincontrolepost bouwen... +STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Kan hier geen routepunt bouwen... STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Kan boei hier niet plaatsen... -STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Kan naam controlepost niet aanpassen... +STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Kan naam routepunt niet aanpassen... -STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Kan hier treincontrolepost niet weghalen... -STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Controlepost moet eerst verwijderd worden +STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Kan hier geen routepunt verwijderen... +STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Routepunt moet eerst verwijderd worden STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... boei in de weg STR_ERROR_BUOY_IS_IN_USE :{WHITE}... boei is in gebruik door een ander bedrijf! # Depot related errors -STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Kan hier geen treindepot bouwen... +STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Kan hier geen remise bouwen... STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Kan hier geen garage bouwen... STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Kan hier geen tramdepot bouwen... STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Kan dok hier niet bouwen... @@ -4352,7 +4354,7 @@ STR_ERROR_INCOMPATIBLE_RAIL_TYPES :spoortypes niet STR_ERROR_CAN_T_MOVE_VEHICLE :{WHITE}Kan voertuig niet verplaatsen... STR_ERROR_REAR_ENGINE_FOLLOW_FRONT :{WHITE}De achterste locomotief zal altijd het voorste deel volgen -STR_ERROR_UNABLE_TO_FIND_ROUTE_TO :{WHITE}Kan geen route naar lokale depot vinden +STR_ERROR_UNABLE_TO_FIND_ROUTE_TO :{WHITE}Kan geen route naar lokaal depot vinden STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Kan geen lokaal depot vinden STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Verkeerd depot-type @@ -4366,13 +4368,13 @@ STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(onvoldoende ge STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Onmogelijke spoorcombinatie STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Sein moet eerst worden verwijderd STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Geen bruikbaar spoor -STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Bestaand spoor moet eerst weggehaald worden +STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Moet spoor eerst verwijderen STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Weg is eenrichtingsverkeer of geblokkeerd STR_ERROR_CROSSING_DISALLOWED :{WHITE}Gelijkvloerse kruisingen zijn niet toegestaan voor dit type spoor STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Kan hier geen seinen plaatsen... STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Kan hier geen spoor leggen... -STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Kan hier geen spoor weghalen... -STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Kan hier geen seinen weghalen... +STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Kan hier geen spoor verwijderen... +STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Kan hier geen sein verwijderen... STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Kan sein hier niet ombouwen... STR_ERROR_THERE_IS_NO_RAILROAD_TRACK :{WHITE}...er is hier geen spoorlijn STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}...er zijn geen seinen @@ -4380,11 +4382,11 @@ STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}...er zi STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Kan spoortype hier niet veranderen... # Road construction errors -STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Moet weg eerst weghalen +STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Moet weg eerst verwijderen STR_ERROR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... eenrichtingswegen kunnen geen kruisingen hebben STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Kan hier geen weg bouwen... STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Kan hier geen tramrails bouwen... -STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Kan hier geen weg weghalen... +STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Kan hier geen weg verwijderen... STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Kan de tramrails hier niet verwijderen... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}...er is geen weg STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}...er is geen tramlijn @@ -4431,7 +4433,7 @@ STR_ERROR_TUNNEL_TOO_LONG :{WHITE}... tunn STR_ERROR_TOO_MANY_OBJECTS :{WHITE}... te veel objecten STR_ERROR_CAN_T_BUILD_OBJECT :{WHITE}Kan object niet bouwen... STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Object in de weg -STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... bedrijfshoofdkwartier in de weg +STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... hoofdkantoor in de weg STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Kan dit stuk land niet kopen... STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... het is al van jou! @@ -4470,28 +4472,28 @@ STR_ERROR_CAN_T_SEND_ROAD_VEHICLE_TO_DEPOT :{WHITE}Kan wegv STR_ERROR_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Kan schip niet naar dok sturen... STR_ERROR_CAN_T_SEND_AIRCRAFT_TO_HANGAR :{WHITE}Kan vliegtuig niet naar hangar sturen... -STR_ERROR_CAN_T_BUY_TRAIN :{WHITE}Kan railvoertuig niet kopen... +STR_ERROR_CAN_T_BUY_TRAIN :{WHITE}Kan trein niet kopen... STR_ERROR_CAN_T_BUY_ROAD_VEHICLE :{WHITE}Kan wegvoertuig niet kopen... STR_ERROR_CAN_T_BUY_SHIP :{WHITE}Kan schip niet kopen... STR_ERROR_CAN_T_BUY_AIRCRAFT :{WHITE}Kan vliegtuig niet kopen... -STR_ERROR_CAN_T_RENAME_TRAIN_TYPE :{WHITE}Kan type van railvoertuig niet hernoemen... +STR_ERROR_CAN_T_RENAME_TRAIN_TYPE :{WHITE}Kan treintype niet hernoemen... STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Kan type van wegvoertuig niet hernoemen... STR_ERROR_CAN_T_RENAME_SHIP_TYPE :{WHITE}Kan type van schip niet hernoemen... STR_ERROR_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Kan type van vliegtuig niet hernoemen... -STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}Kan railvoertuig niet verkopen... +STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}Kan spoorvoertuig niet verkopen... STR_ERROR_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Kan wegvoertuig niet verkopen... STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Kan schip niet verkopen... STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Kan vliegtuig niet verkopen... -STR_ERROR_RAIL_VEHICLE_NOT_AVAILABLE :{WHITE}Railvoertuig is niet beschikbaar +STR_ERROR_RAIL_VEHICLE_NOT_AVAILABLE :{WHITE}Spoorvoertuig is niet beschikbaar STR_ERROR_ROAD_VEHICLE_NOT_AVAILABLE :{WHITE}Wegvoertuig is niet beschikbaar STR_ERROR_SHIP_NOT_AVAILABLE :{WHITE}Schip is niet beschikbaar STR_ERROR_AIRCRAFT_NOT_AVAILABLE :{WHITE}Vliegtuig is niet beschikbaar STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Te veel voertuigen in het spel -STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Kan onderhoudsinterval niet aanpassen... +STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Kan onderhoudstermijn niet aanpassen... STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... voertuig is vernietigd @@ -4936,21 +4938,21 @@ STR_FORMAT_DATE_SHORT :{STRING} {NUM} STR_FORMAT_DATE_LONG :{STRING} {STRING} {NUM} STR_FORMAT_DATE_ISO :{2:NUM}-{1:STRING}-{0:STRING} -STR_FORMAT_BUOY_NAME :{TOWN} Boei -STR_FORMAT_BUOY_NAME_SERIAL :{TOWN} Boei #{COMMA} +STR_FORMAT_BUOY_NAME :Boei {TOWN} +STR_FORMAT_BUOY_NAME_SERIAL :Boei {TOWN} {COMMA} STR_FORMAT_COMPANY_NUM :(Bedrijf {COMMA}) STR_FORMAT_GROUP_NAME :Groep {COMMA} -STR_FORMAT_INDUSTRY_NAME :{TOWN} {STRING} -STR_FORMAT_WAYPOINT_NAME :{TOWN} Controlepost -STR_FORMAT_WAYPOINT_NAME_SERIAL :{TOWN} Controlepost #{COMMA} +STR_FORMAT_INDUSTRY_NAME :{1:STRING} {0:TOWN} +STR_FORMAT_WAYPOINT_NAME :Routepunt {TOWN} +STR_FORMAT_WAYPOINT_NAME_SERIAL :Routepunt {TOWN} {COMMA} -STR_FORMAT_DEPOT_NAME_TRAIN :{TOWN} Treindepot -STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :{TOWN} Treindepot #{COMMA} -STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :{TOWN} Garage -STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :{TOWN} Garage #{COMMA} -STR_FORMAT_DEPOT_NAME_SHIP :{TOWN} Dok -STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :{TOWN} Dok #{COMMA} -STR_FORMAT_DEPOT_NAME_AIRCRAFT :{STATION} Hangar +STR_FORMAT_DEPOT_NAME_TRAIN :Remise {TOWN} +STR_FORMAT_DEPOT_NAME_TRAIN_SERIAL :Remise {TOWN} {COMMA} +STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE :Garage {TOWN} +STR_FORMAT_DEPOT_NAME_ROAD_VEHICLE_SERIAL :Garage {TOWN} {COMMA} +STR_FORMAT_DEPOT_NAME_SHIP :Dok {TOWN} +STR_FORMAT_DEPOT_NAME_SHIP_SERIAL :Dok {TOWN} {COMMA} +STR_FORMAT_DEPOT_NAME_AIRCRAFT :Hangar {STATION} STR_UNKNOWN_STATION :onbekend station STR_DEFAULT_SIGN_NAME :Bord diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 92486aac56..862206a4d7 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1861,7 +1861,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Muuda jo STR_CHEAT_SETUP_PROD :{LTBLUE}Tootmisväärtuste muutmine: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Uus värvivalik +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Värvivalik STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Näita üldiseid värvistikke STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Näita rongide värvistikke diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 7fbb2a7fb1..8a49261424 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -132,7 +132,7 @@ STR_QUANTITY_N_A :- STR_ABBREV_NOTHING : STR_ABBREV_PASSENGERS :{TINY_FONT}MA STR_ABBREV_COAL :{TINY_FONT}HL -STR_ABBREV_MAIL :{TINY_FONT}SP +STR_ABBREV_MAIL :{TINY_FONT}PO STR_ABBREV_OIL :{TINY_FONT}ÖL STR_ABBREV_LIVESTOCK :{TINY_FONT}KA STR_ABBREV_GOODS :{TINY_FONT}TA @@ -1816,7 +1816,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Muuta ny STR_CHEAT_SETUP_PROD :{LTBLUE}Salli tuotantomäärien muuttaminen: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Uusi väriteema +STR_LIVERY_CAPTION :{WHITE}{COMPANY}: Väriteema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Näytä yleiset väriteemat STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Näytä junan väriteemat @@ -3832,7 +3832,7 @@ STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Miten ku STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :on yhtä kuin STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS :ei ole yhtä kuin STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN :on pienempi kuin -STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :on suurempi kuin +STR_ORDER_CONDITIONAL_COMPARATOR_LESS_EQUALS :on pienempi tai yhtä kuin STR_ORDER_CONDITIONAL_COMPARATOR_MORE_THAN :on enemmän kuin STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :on enemmän tai yhtä kuin STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :on tosi diff --git a/src/lang/german.txt b/src/lang/german.txt index 34b97a3bbe..8857344f93 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -190,6 +190,7 @@ STR_COLOUR_ORANGE :Orange STR_COLOUR_BROWN :Braun STR_COLOUR_GREY :Grau STR_COLOUR_WHITE :Weiß +STR_COLOUR_RANDOM :Zufällig STR_COLOUR_DEFAULT :Standard # Units used in OpenTTD @@ -477,6 +478,7 @@ STR_ABOUT_MENU_SCREENSHOT :Screenshot (Sta STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Screenshot in Nahaufnahme STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Screenshot mit normalem Zoom STR_ABOUT_MENU_GIANT_SCREENSHOT :Riesiger Screenshot (Standard: Strg+G) +STR_ABOUT_MENU_SHOW_FRAMERATE :Bildwiederholrate anzeigen STR_ABOUT_MENU_ABOUT_OPENTTD :Über OpenTTD STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite-Ausrichtung STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Hüllquader anzeigen/ausblenden @@ -814,6 +816,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Manager) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} finanziert die Gründung der Stadt {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Eine neue Stadt mit dem Namen {TOWN} wurde errichtet! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Neue{G r "" s ""} {STRING} {G 0 wird wird wird werden} nahe {TOWN} gebaut! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Neue{G r "" s ""} {STRING} {G 0 wird wird wird werden} nahe {TOWN} angepflanzt! @@ -881,9 +884,9 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC # Extra view window STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Ansicht {COMMA} -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}In Zusatzansicht kopieren +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Zusatzansicht ändern STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Aktuelle Position der Hauptansicht in diese Zusatzansicht kopieren -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Aus Zusatzansicht einfügen +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Hauptansicht ändern STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Hauptansicht zur Position dieser Zusatzansicht scrollen # Game options window @@ -1340,6 +1343,8 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Farbe von Landf STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Grün STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Dunkelgrün STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Lila +STR_CONFIG_SETTING_SCROLLMODE_RMB :Bewege die Karte mit rechter Maustaste +STR_CONFIG_SETTING_SCROLLMODE_LMB :Bewege die Karte mit linker Maustaste STR_CONFIG_SETTING_SMOOTH_SCROLLING :Weicher Bildlauf beim Springen zu einer Position: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Lege fest, auf welche Weise die Hauptansicht an eine bestimmte Position wechselt (z.B. wenn ein Punkt auf der Weltkarte angeklickt wird oder der Standort eines Bahnhofs angezeigt werden soll). Ist diese Option eingeschaltet, schwenkt die Ansicht über die Karte, bis sie am gewünschten Punkt angekommen ist. Ist sie ausgeschaltet, springt die Ansicht sofort an die gewünschte Position STR_CONFIG_SETTING_MEASURE_TOOLTIP :Beim Bauen Tooltip mit Abmessungen anzeigen: {STRING} @@ -1808,7 +1813,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Ändert STR_CHEAT_SETUP_PROD :{LTBLUE}Erlaube manuelles Ändern der Produktionsleistungen: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Neues Farbschema +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Farbschema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Allgemeines Farbschema anzeigen STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Zugfarbschema anzeigen diff --git a/src/lang/korean.txt b/src/lang/korean.txt index eabe89b343..8305819cb6 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -191,6 +191,7 @@ STR_COLOUR_BROWN :갈색 STR_COLOUR_GREY :회색 STR_COLOUR_WHITE :흰색 STR_COLOUR_RANDOM :무작위 +STR_COLOUR_DEFAULT :기본 # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -2779,6 +2780,8 @@ 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_OSKTITLE :{BLACK}게임을 저장할 파일명을 입력하세요 @@ -3421,6 +3424,7 @@ 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_LIVERY_TOOLTIP :{BLACK}선택한 그룹의 차량 색상을 변경합니다. STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}클릭하여 전체 자동 교체로부터 이 그룹을 보호합니다. STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}그룹 삭제 diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 484ffa3b71..1eff62076c 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -140,7 +140,7 @@ STR_ABBREV_GOODS :{TINY_FONT}BN STR_ABBREV_GRAIN :{TINY_FONT}CR STR_ABBREV_WOOD :{TINY_FONT}MD STR_ABBREV_IRON_ORE :{TINY_FONT}FR -STR_ABBREV_STEEL :{TINY_FONT}AÇ +STR_ABBREV_STEEL :{TINY_FONT}AC STR_ABBREV_VALUABLES :{TINY_FONT}VL STR_ABBREV_COPPER_ORE :{TINY_FONT}CO STR_ABBREV_MAIZE :{TINY_FONT}ML @@ -263,7 +263,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP_TOOLTIP :{BLACK}Ao activ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Ao activar este botão, os aviões ocultos também serão exibidos # Query window -STR_BUTTON_DEFAULT :{BLACK}Por Omissão +STR_BUTTON_DEFAULT :{BLACK}Padrão STR_BUTTON_CANCEL :{BLACK}Cancelar STR_BUTTON_OK :{BLACK}Confirmar @@ -479,7 +479,7 @@ STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Captura com res STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Captura com resolução normal STR_ABOUT_MENU_GIANT_SCREENSHOT :Captura de mapa STR_ABOUT_MENU_SHOW_FRAMERATE :Mostrar taxa de fotograma -STR_ABOUT_MENU_ABOUT_OPENTTD :Sobre o OpenTTD... +STR_ABOUT_MENU_ABOUT_OPENTTD :Sobre o 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Alinhador de gráficos STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Alternar as caixas envolventes STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Ligar/Desligar coloração de blocos sujos @@ -606,7 +606,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_DIRECTOR :Director STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHIEF_EXECUTIVE :Chefe Executivo STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Director Executivo STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :Presidente -STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Magnate +STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Magnata # Performance detail window STR_PERFORMANCE_DETAIL :{WHITE}Detalhes de rendimentos @@ -1173,11 +1173,11 @@ STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Escolha quanto STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Altura máxima do mapa: {STRING} STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Define altura máxima permitida para montanhas no mapa STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Pode aumentar a altura máxima do mapa para este valor. Pelo menos uma montanha no mapa é mais alta -STR_CONFIG_SETTING_AUTOSLOPE :Permitir formação de terra sob os edifícios, vias, etc. (auto-declive): {STRING} -STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permitir formação de terras debaixo de edifícios e linhas sem os remover +STR_CONFIG_SETTING_AUTOSLOPE :Permite alteração de terra sob edifícios, vias, etc. (auto-declive): {STRING} +STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permite alteração de terra sob edifícios e vias sem os remover STR_CONFIG_SETTING_CATCHMENT :Dimensionamento mais realista de áreas de abrangência: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Haver diferentes áreas de cobertura para diferentes tipos de estações e aeroportos -STR_CONFIG_SETTING_EXTRADYNAMITE :Permitir remover mais mais estradas, pontes e túneis detidos pela cidade: {STRING} +STR_CONFIG_SETTING_EXTRADYNAMITE :Permite remover mais estradas, pontes e túneis detidos pela cidade: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Facilitar a remoçar de edifícios e infraestruturas detidas pela cidade STR_CONFIG_SETTING_TRAIN_LENGTH :Tamanho máximo de comboios: {STRING} STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Assignar o tamanho máximo dos comboios @@ -1196,7 +1196,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Declive de um q STR_CONFIG_SETTING_FORBID_90_DEG :Proibir comboios e barcos fazer curvas de 90º: {STRING} STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Curvas de 90 graus ocorrem quando uma pista horizontal é directamente seguida por outra vertical num quadrado adjacente, fazendo com que o combóio vire 90 graus quando atravessa a fronteira dos quadrados, ao invés dos habituais 45 graus para outras combinações de pistas. Também se aplica ao raio de curvatura dos navios STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permitir juntar estações não adjacentes: {STRING} -STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permitir adicionar novas partes a uma estação sem tocar nas partes já existentes. Requer pressionar CTRL+click para adicionar as novas partes +STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permite adicionar novas partes a uma estação sem tocar nas partes já existentes. Requer pressionar CTRL+click para adicionar as novas partes STR_CONFIG_SETTING_INFLATION :Inflação: {STRING} STR_CONFIG_SETTING_INFLATION_HELPTEXT :Ativar inflação na economia, para que os preços subam ligeiramente mais rápido do que os pagamentos STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :Tamanho máximo de ponte: {STRING} @@ -1234,16 +1234,16 @@ STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Desligado STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Visualizador principal, só ecrã cheio STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Visualizador principal STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Todos os visualizadores -STR_CONFIG_SETTING_BRIBE :Permitir o suborno da autoridade local: {STRING} -STR_CONFIG_SETTING_BRIBE_HELPTEXT :Permitir que as companhias subornem as autoridades locais. Se o suborno for descoberto por um inspector, a companhia não poderá construir nessa localidade durante seis meses -STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Permitir comprar exclusivo dos direitos de transportes: {STRING} +STR_CONFIG_SETTING_BRIBE :Permite o suborno da autoridade local: {STRING} +STR_CONFIG_SETTING_BRIBE_HELPTEXT :Permite que as companhias tentem subornar a autoridade local. Se o suborno for descoberto por um inspector, a companhia não poderá construir nessa localidade durante seis meses +STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Permite comprar direitos de transporte em exclusividade: {STRING} STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Se uma empresa compra direitos exclusivos de transporte para uma cidade, as estações dos concorrentes (passageiros e carga) não receberão cargo durante um ano -STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Permitir investir em edificios: {STRING} -STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Permitir que empresas doem dinheiro às cidades para financiar creação de novas casas -STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Permitir o financiamento de reconstrução de estradas locais:{STRING} -STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Permitir que as companhias financiem reparações de estradas para sabotar serviços rodoviários dos oponentes. -STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Permitir enviar dinheiro para outras empresas: {STRING} -STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Permitir transferencias de dinheiro entre empresas em modo multi-jogador +STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Permite investir em edifícios: {STRING} +STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Permite que empresas doem dinheiro às cidades para financiar novas casas +STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Permite financiar a reconstrução de estradas locais:{STRING} +STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Permite que as companhias financiem reparações de estrada para sabotar serviços rodoviários dos oponentes. +STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Permite enviar dinheiro para outras empresas: {STRING} +STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Permite transferências de dinheiro entre empresas em modo multi-jogador STR_CONFIG_SETTING_FREIGHT_TRAINS :Multiplicador de peso para simular comboios pesados: {STRING} STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Define o impacto de carregar mercadoria nos combóios. Um valor superior torna o carregamento de meradoria mais exigente para os combóios, especialmente em terreno inclinado STR_CONFIG_SETTING_PLANE_SPEED :Fator de velocidade de avião: {STRING} @@ -1254,9 +1254,9 @@ STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Indicar a hipó STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Nenhum STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Reduzido STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal -STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Permitir estações de passagem em estradas das cidades: {STRING} +STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Permite estações de passagem em estradas das cidades: {STRING} STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Permite construção de paragens drive-through em ruas que são prorpiedade das povoações -STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Permitir estações de passagem em estradas do adversário: {STRING} +STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Permite estações de passagem em estradas do adversário: {STRING} STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Permite construção de paragens drive-through em ruas que são prorpiedade de outras companhias STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Não é possível mudar quando já existem veículos. STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Manutenção de infraestruturas: {STRING} @@ -1283,8 +1283,8 @@ STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Auto-renovaçã STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Quando activo, um veículo a chegar ao fim de vida é automaticamente substituído quando as condições de renovação estão reunidas STR_CONFIG_SETTING_AUTORENEW_MONTHS :Renovar automaticamente quando um veículo chega a {STRING} de idade STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Idade relativa a partir da qual um veículo deva ser indicado para auto-renovação -STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} mês{P 0 "" es} antes -STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} mês{P 0 "" es} após +STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} {P "mês" "meses"} antes +STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} {P "mês" "meses"} após STR_CONFIG_SETTING_AUTORENEW_MONEY :Dinheiro mínimo para fazer auto-renovação: {STRING} STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Quantidade mínima de dinheiro que tem que estar no banco para auto-renovação de veículos ser considerada STR_CONFIG_SETTING_ERRMSG_DURATION :Duração da mensagem de erro: {STRING} @@ -1465,13 +1465,13 @@ STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Desactivar barc STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Activar esta preferência impossibilita a construção de navios por um jogador controlado pelo computador STR_CONFIG_SETTING_AI_PROFILE :Perfil de preferências por omissão: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Escolher o perfil de preferências a usar para AIs aleatórias ou para valores iniciais ao adicionar uma nova AI ou Game Script +STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Escolher o perfil de preferências a usar para AIs aleatórias ou para valores iniciais ao adicionar uma nova AI ou Script de Jogo STR_CONFIG_SETTING_AI_PROFILE_EASY :Fácil STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Média STR_CONFIG_SETTING_AI_PROFILE_HARD :Difícil -STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permitir IAs em multi-jogador: {STRING} -STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permitir a jogadores controlados pelo computador a participação em jogos multijogador +STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permite IAs em multi-jogador: {STRING} +STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permite a jogadores controlados pelo computador a participação em jogos multi-jogador STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes antes de os scripts serem suspensos: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Número máximo de passos computacionais que um script pode executar num turno @@ -1566,7 +1566,7 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :grelha 2x2 STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :grelha 3x3 STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Aleatório STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :As cidades têm permissão para construir estradas: {STRING} -STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Permitir às cidades a construção de estradas para crescimento. Desactivar para não permitir às autoridades a construção de estradas +STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Permite às cidades a construção de estradas para crescimento. Desactivar para não permitir às autoridades a construção de estradas STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Cidades podem construir passagens de nível: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Activar esta preferência permite às cidades construir cruzamentos nivelados STR_CONFIG_SETTING_NOISE_LEVEL :Permitir que a cidade controle o nível de ruído dos aeroportos: {STRING} @@ -1701,7 +1701,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Cidades STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Industrias STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distribuição de Carga STR_CONFIG_SETTING_AI :{ORANGE}Oponentes -STR_CONFIG_SETTING_AI_NPC :{ORANGE}Jogadores computador +STR_CONFIG_SETTING_AI_NPC :{ORANGE}Jogadores Computador STR_CONFIG_SETTING_PATHFINDER_OPF :Original STR_CONFIG_SETTING_PATHFINDER_NPF :NPF @@ -1805,7 +1805,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_WARNING :{BLACK} Atenção! Está prestes a trair seus concorrentes. Tenha em mente que a desonra vai ser lembrada para a eternidade +STR_CHEATS_WARNING :{BLACK} Atenção! Está prestes a trair seus concorrentes. Tenha em mente que a desonra será lembrada para a eternidade 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} @@ -2394,10 +2394,10 @@ STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Selecç STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY} STR_BRIDGE_NAME_SUSPENSION_STEEL :Suspensa, Aço -STR_BRIDGE_NAME_GIRDER_STEEL :Vigas, Aço -STR_BRIDGE_NAME_CANTILEVER_STEEL :Cantilever, Aço +STR_BRIDGE_NAME_GIRDER_STEEL :Viga, Aço +STR_BRIDGE_NAME_CANTILEVER_STEEL :Consola, Aço STR_BRIDGE_NAME_SUSPENSION_CONCRETE :Suspensa, Betão -STR_BRIDGE_NAME_WOODEN :De madeira +STR_BRIDGE_NAME_WOODEN :Madeira STR_BRIDGE_NAME_CONCRETE :Betão STR_BRIDGE_NAME_TUBULAR_STEEL :Tubular, Aço STR_BRIDGE_TUBULAR_SILICON :Tubular, Silício @@ -2476,8 +2476,8 @@ STR_AIRPORT_INTERNATIONAL :Internacional STR_AIRPORT_COMMUTER :Transbordo STR_AIRPORT_INTERCONTINENTAL :Intercontinental STR_AIRPORT_HELIPORT :Heliporto -STR_AIRPORT_HELIDEPOT :Heli-depósito -STR_AIRPORT_HELISTATION :Heli-estação +STR_AIRPORT_HELIDEPOT :Heli Hangar +STR_AIRPORT_HELISTATION :Heliponto STR_AIRPORT_CLASS_SMALL :Aeroportos pequenos STR_AIRPORT_CLASS_LARGE :Aeroportos grandes @@ -2679,17 +2679,17 @@ STR_LAI_TUNNEL_DESCRIPTION_RAILROAD :Túnel ferrovi STR_LAI_TUNNEL_DESCRIPTION_ROAD :Túnel rodoviário STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_STEEL :Ponte ferroviária suspensa em aço -STR_LAI_BRIDGE_DESCRIPTION_RAIL_GIRDER_STEEL :Ponte ferroviária com vigas em aço -STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL :Ponte ferroviária cantilever em aço -STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_CONCRETE :Ponte ferroviária suspensa de betão reforçado +STR_LAI_BRIDGE_DESCRIPTION_RAIL_GIRDER_STEEL :Ponte ferroviária em vigas de aço +STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL :Ponte ferroviária em consolas de aço +STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_CONCRETE :Ponte ferroviária suspensa de betão armado STR_LAI_BRIDGE_DESCRIPTION_RAIL_WOODEN :Ponte ferroviária de madeira STR_LAI_BRIDGE_DESCRIPTION_RAIL_CONCRETE :Ponte ferroviária de betão STR_LAI_BRIDGE_DESCRIPTION_RAIL_TUBULAR_STEEL :Ponte rodoviária tubular STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_STEEL :Ponte rodoviária suspensa em aço STR_LAI_BRIDGE_DESCRIPTION_ROAD_GIRDER_STEEL :Ponte rodoviária com vigas em aço -STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL :Ponte rodoviária cantilever em aço -STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_CONCRETE :Ponte rodoviária suspensa de betão reforçado +STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL :Ponte rodoviária em consolas de aço +STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_CONCRETE :Ponte rodoviária suspensa de betão armado STR_LAI_BRIDGE_DESCRIPTION_ROAD_WOODEN :Ponte rodoviária de madeira STR_LAI_BRIDGE_DESCRIPTION_ROAD_CONCRETE :Ponte rodoviária de betão STR_LAI_BRIDGE_DESCRIPTION_ROAD_TUBULAR_STEEL :Ponte rodoviária tubular @@ -2702,7 +2702,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_HEADQUARTERS :Sede de empresa STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terreno propriedade de uma empresa # About OpenTTD window -STR_ABOUT_OPENTTD :{WHITE}Sobre o OpenTTD... +STR_ABOUT_OPENTTD :{WHITE}Sobre o OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Direitos de autor originais {COPYRIGHT} 1995 Chris Sawyer, Todos os direitos reservados STR_ABOUT_VERSION :{BLACK}OpenTTD versão {REV} STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 A equipa do OpenTTD @@ -2780,6 +2780,8 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nenhuma STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtro de sequência: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Substituir Ficheiro +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Tem a certeza que deseja substituir o ficheiro existente? STR_SAVELOAD_OSKTITLE :{BLACK}Introduza um nome para o jogo gravado @@ -3297,10 +3299,10 @@ STR_COMPANY_VIEW_VEHICLES_NONE :{WHITE}Nenhum STR_COMPANY_VIEW_COMPANY_VALUE :{GOLD}Valor da empresa: {WHITE}{CURRENCY_LONG} STR_COMPANY_VIEW_SHARES_OWNED_BY :{WHITE}({COMMA}% propriedade de {COMPANY}) STR_COMPANY_VIEW_INFRASTRUCTURE :{GOLD}Infraestrutura: -STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL :{WHITE}{COMMA} peça{P "" s} de caminho-de-ferro -STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD :{WHITE}{COMMA} peça{P "" s} de estrada -STR_COMPANY_VIEW_INFRASTRUCTURE_WATER :{WHITE}{COMMA} quadrado{P "" s} de água -STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} quadrado{P "" s} de estação +STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL :{WHITE}{COMMA} {P "secção" "secções" } de caminho-de-ferro +STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD :{WHITE}{COMMA} {P "secção" "secções"} de estrada +STR_COMPANY_VIEW_INFRASTRUCTURE_WATER :{WHITE}{COMMA} bloco{P "" s} de água +STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} bloco{P "" s} de estação STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} aeroporto{P "" s} STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Nenhum @@ -3334,15 +3336,15 @@ STR_BUY_COMPANY_MESSAGE :{WHITE}Estamos # Company infrastructure window STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infraestrutura de {COMPANY} -STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Peças de caminho-de-ferro: +STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Secções de caminho-de-ferro: STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Sinais -STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Peças de estrada: +STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Secções de estrada: STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD :{WHITE}Estrada STR_COMPANY_INFRASTRUCTURE_VIEW_TRAMWAY :{WHITE}Via para elétricos -STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Quadrados de água: +STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Blocos de água: STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Canais STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Estações: -STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Quadrados de estações +STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Blocos de estações STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}Aeroportos STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENCY_LONG}/ano @@ -3440,11 +3442,11 @@ STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Novos Veículos Ferroviários -STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Novos comboios para carris electrificados +STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Novos Veículos Ferroviários Elétricos STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Novos Veículos Monocarril STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Novos Veículos Maglev -STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Novos Veículos Sobre Carris +STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Novos Veículos Ferroviários STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Novos Veículos Rodoviários STR_BUY_VEHICLE_SHIP_CAPTION :Novos Barcos STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nova Aeronave @@ -3474,7 +3476,7 @@ STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Tipo de STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Lista de veículos ferroviários - clique num veículo para informações STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Lista de veículos rodoviários - clique num veículo para informações -STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Lista de selecção de navios. Clique num navio para informações. Ctrl+Clique para alternar/ocultar o tipo de navio +STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Lista de selecção de barcos. Clique num navio para informações. Ctrl+Clique para alternar/ocultar o tipo de barco STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lista de aeronaves - clique na aeronave para informações STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Comprar Veículo @@ -4041,7 +4043,7 @@ STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Nome do STR_AI_DEBUG_SETTINGS :{BLACK}Definições STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Alterar as definições do script STR_AI_DEBUG_RELOAD :{BLACK}Recarregar IA -STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Terminar a IA, recarrega o script e reinicia a IA +STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Termina a IA, recarrega o script e reinicia a IA STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Activar/desactivar paragem quando o registo da IA for igual à string de paragem STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Parar em: STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Parar em diff --git a/src/lang/russian.txt b/src/lang/russian.txt index b54bbbaf1e..ed24128997 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2959,6 +2959,8 @@ 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_OSKTITLE :{BLACK}Введите название сохраняемой игры diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 287a73ce6c..34493d885b 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -2780,6 +2780,8 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}No hay i STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtrar palabras: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Sobrescribir archivo +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}¿Estás seguro de sobrescribir el archivo? STR_SAVELOAD_OSKTITLE :{BLACK}Indicar un nombre para la partida a guardar From ea4ea628163c735db4c4714966c9bc1c560e0f61 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 28 Jan 2019 21:54:06 +0000 Subject: [PATCH 292/622] Codechange: Make saveload version upper bound exclusive, i.e. version object was removed instead of version object last appeared. --- src/saveload/cargopacket_sl.cpp | 2 +- src/saveload/company_sl.cpp | 100 ++++++++++++------------ src/saveload/depot_sl.cpp | 4 +- src/saveload/economy_sl.cpp | 10 +-- src/saveload/engine_sl.cpp | 14 ++-- src/saveload/group_sl.cpp | 4 +- src/saveload/industry_sl.cpp | 36 ++++----- src/saveload/linkgraph_sl.cpp | 2 +- src/saveload/misc_sl.cpp | 44 +++++------ src/saveload/order_sl.cpp | 10 +-- src/saveload/saveload.cpp | 2 +- src/saveload/saveload.h | 6 +- src/saveload/signs_sl.cpp | 8 +- src/saveload/station_sl.cpp | 64 ++++++++-------- src/saveload/storage_sl.cpp | 2 +- src/saveload/story_sl.cpp | 8 +- src/saveload/subsidy_sl.cpp | 4 +- src/saveload/town_sl.cpp | 70 ++++++++--------- src/saveload/vehicle_sl.cpp | 130 ++++++++++++++++---------------- src/saveload/waypoint_sl.cpp | 10 +-- src/table/gameopt_settings.ini | 8 +- src/table/settings.ini | 52 ++++++------- 22 files changed, 295 insertions(+), 295 deletions(-) diff --git a/src/saveload/cargopacket_sl.cpp b/src/saveload/cargopacket_sl.cpp index dc8d4145e3..9ed6e9e0dd 100644 --- a/src/saveload/cargopacket_sl.cpp +++ b/src/saveload/cargopacket_sl.cpp @@ -104,7 +104,7 @@ const SaveLoad *GetCargoPacketDesc() SLE_CONDVAR(CargoPacket, source_id, SLE_UINT16, 125, SL_MAX_VERSION), /* Used to be paid_for, but that got changed. */ - SLE_CONDNULL(1, 0, 120), + SLE_CONDNULL(1, 0, 121), SLE_END() }; diff --git a/src/saveload/company_sl.cpp b/src/saveload/company_sl.cpp index 1782e7c28a..9852933690 100644 --- a/src/saveload/company_sl.cpp +++ b/src/saveload/company_sl.cpp @@ -251,24 +251,24 @@ static const SaveLoad _company_desc[] = { SLE_VAR(CompanyProperties, face, SLE_UINT32), /* money was changed to a 64 bit field in savegame version 1. */ - SLE_CONDVAR(CompanyProperties, money, SLE_VAR_I64 | SLE_FILE_I32, 0, 0), + SLE_CONDVAR(CompanyProperties, money, SLE_VAR_I64 | SLE_FILE_I32, 0, 1), SLE_CONDVAR(CompanyProperties, money, SLE_INT64, 1, SL_MAX_VERSION), - SLE_CONDVAR(CompanyProperties, current_loan, SLE_VAR_I64 | SLE_FILE_I32, 0, 64), + SLE_CONDVAR(CompanyProperties, current_loan, SLE_VAR_I64 | SLE_FILE_I32, 0, 65), SLE_CONDVAR(CompanyProperties, current_loan, SLE_INT64, 65, SL_MAX_VERSION), SLE_VAR(CompanyProperties, colour, SLE_UINT8), SLE_VAR(CompanyProperties, money_fraction, SLE_UINT8), - SLE_CONDNULL(1, 0, 57), ///< avail_railtypes + SLE_CONDNULL(1, 0, 58), ///< avail_railtypes SLE_VAR(CompanyProperties, block_preview, SLE_UINT8), - SLE_CONDNULL(2, 0, 93), ///< cargo_types - SLE_CONDNULL(4, 94, 169), ///< cargo_types - SLE_CONDVAR(CompanyProperties, location_of_HQ, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), + SLE_CONDNULL(2, 0, 94), ///< cargo_types + SLE_CONDNULL(4, 94, 170), ///< cargo_types + SLE_CONDVAR(CompanyProperties, location_of_HQ, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), SLE_CONDVAR(CompanyProperties, location_of_HQ, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(CompanyProperties, last_build_coordinate, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), + SLE_CONDVAR(CompanyProperties, last_build_coordinate, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), SLE_CONDVAR(CompanyProperties, last_build_coordinate, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(CompanyProperties, inaugurated_year, SLE_FILE_U8 | SLE_VAR_I32, 0, 30), + SLE_CONDVAR(CompanyProperties, inaugurated_year, SLE_FILE_U8 | SLE_VAR_I32, 0, 31), SLE_CONDVAR(CompanyProperties, inaugurated_year, SLE_INT32, 31, SL_MAX_VERSION), SLE_ARR(CompanyProperties, share_owners, SLE_UINT8, 4), @@ -276,19 +276,19 @@ static const SaveLoad _company_desc[] = { SLE_VAR(CompanyProperties, num_valid_stat_ent, SLE_UINT8), SLE_VAR(CompanyProperties, months_of_bankruptcy, SLE_UINT8), - SLE_CONDVAR(CompanyProperties, bankrupt_asked, SLE_FILE_U8 | SLE_VAR_U16, 0, 103), + SLE_CONDVAR(CompanyProperties, bankrupt_asked, SLE_FILE_U8 | SLE_VAR_U16, 0, 104), SLE_CONDVAR(CompanyProperties, bankrupt_asked, SLE_UINT16, 104, SL_MAX_VERSION), SLE_VAR(CompanyProperties, bankrupt_timeout, SLE_INT16), - SLE_CONDVAR(CompanyProperties, bankrupt_value, SLE_VAR_I64 | SLE_FILE_I32, 0, 64), + SLE_CONDVAR(CompanyProperties, bankrupt_value, SLE_VAR_I64 | SLE_FILE_I32, 0, 65), SLE_CONDVAR(CompanyProperties, bankrupt_value, SLE_INT64, 65, SL_MAX_VERSION), /* yearly expenses was changed to 64-bit in savegame version 2. */ - SLE_CONDARR(CompanyProperties, yearly_expenses, SLE_FILE_I32 | SLE_VAR_I64, 3 * 13, 0, 1), + SLE_CONDARR(CompanyProperties, yearly_expenses, SLE_FILE_I32 | SLE_VAR_I64, 3 * 13, 0, 2), SLE_CONDARR(CompanyProperties, yearly_expenses, SLE_INT64, 3 * 13, 2, SL_MAX_VERSION), SLE_CONDVAR(CompanyProperties, is_ai, SLE_BOOL, 2, SL_MAX_VERSION), - SLE_CONDNULL(1, 107, 111), ///< is_noai - SLE_CONDNULL(1, 4, 99), + SLE_CONDNULL(1, 107, 112), ///< is_noai + SLE_CONDNULL(1, 4, 100), SLE_CONDVAR(CompanyProperties, terraform_limit, SLE_UINT32, 156, SL_MAX_VERSION), SLE_CONDVAR(CompanyProperties, clear_limit, SLE_UINT32, 156, SL_MAX_VERSION), @@ -299,7 +299,7 @@ static const SaveLoad _company_desc[] = { static const SaveLoad _company_settings_desc[] = { /* Engine renewal settings */ - SLE_CONDNULL(512, 16, 18), + SLE_CONDNULL(512, 16, 19), SLE_CONDREF(Company, engine_renew_list, REF_ENGINE_RENEWS, 19, SL_MAX_VERSION), SLE_CONDVAR(Company, settings.engine_renew, SLE_BOOL, 16, SL_MAX_VERSION), SLE_CONDVAR(Company, settings.engine_renew_months, SLE_INT16, 16, SL_MAX_VERSION), @@ -313,15 +313,15 @@ static const SaveLoad _company_settings_desc[] = { SLE_CONDVAR(Company, settings.vehicle.servint_aircraft, SLE_UINT16, 120, SL_MAX_VERSION), SLE_CONDVAR(Company, settings.vehicle.servint_ships, SLE_UINT16, 120, SL_MAX_VERSION), - SLE_CONDNULL(63, 2, 143), // old reserved space + SLE_CONDNULL(63, 2, 144), // old reserved space SLE_END() }; static const SaveLoad _company_settings_skip_desc[] = { /* Engine renewal settings */ - SLE_CONDNULL(512, 16, 18), - SLE_CONDNULL(2, 19, 68), // engine_renew_list + SLE_CONDNULL(512, 16, 19), + SLE_CONDNULL(2, 19, 69), // engine_renew_list SLE_CONDNULL(4, 69, SL_MAX_VERSION), // engine_renew_list SLE_CONDNULL(1, 16, SL_MAX_VERSION), // settings.engine_renew SLE_CONDNULL(2, 16, SL_MAX_VERSION), // settings.engine_renew_months @@ -335,22 +335,22 @@ static const SaveLoad _company_settings_skip_desc[] = { SLE_CONDNULL(2, 120, SL_MAX_VERSION), // settings.vehicle.servint_aircraft SLE_CONDNULL(2, 120, SL_MAX_VERSION), // settings.vehicle.servint_ships - SLE_CONDNULL(63, 2, 143), // old reserved space + SLE_CONDNULL(63, 2, 144), // old reserved space SLE_END() }; static const SaveLoad _company_economy_desc[] = { /* these were changed to 64-bit in savegame format 2 */ - SLE_CONDVAR(CompanyEconomyEntry, income, SLE_FILE_I32 | SLE_VAR_I64, 0, 1), + SLE_CONDVAR(CompanyEconomyEntry, income, SLE_FILE_I32 | SLE_VAR_I64, 0, 2), SLE_CONDVAR(CompanyEconomyEntry, income, SLE_INT64, 2, SL_MAX_VERSION), - SLE_CONDVAR(CompanyEconomyEntry, expenses, SLE_FILE_I32 | SLE_VAR_I64, 0, 1), + SLE_CONDVAR(CompanyEconomyEntry, expenses, SLE_FILE_I32 | SLE_VAR_I64, 0, 2), SLE_CONDVAR(CompanyEconomyEntry, expenses, SLE_INT64, 2, SL_MAX_VERSION), - SLE_CONDVAR(CompanyEconomyEntry, company_value, SLE_FILE_I32 | SLE_VAR_I64, 0, 1), + SLE_CONDVAR(CompanyEconomyEntry, company_value, SLE_FILE_I32 | SLE_VAR_I64, 0, 2), SLE_CONDVAR(CompanyEconomyEntry, company_value, SLE_INT64, 2, SL_MAX_VERSION), - SLE_CONDVAR(CompanyEconomyEntry, delivered_cargo[NUM_CARGO - 1], SLE_INT32, 0, 169), - SLE_CONDARR(CompanyEconomyEntry, delivered_cargo, SLE_UINT32, 32, 170, 198), + SLE_CONDVAR(CompanyEconomyEntry, delivered_cargo[NUM_CARGO - 1], SLE_INT32, 0, 170), + SLE_CONDARR(CompanyEconomyEntry, delivered_cargo, SLE_UINT32, 32, 170, 199), SLE_CONDARR(CompanyEconomyEntry, delivered_cargo, SLE_UINT32, NUM_CARGO, 199, SL_MAX_VERSION), SLE_VAR(CompanyEconomyEntry, performance_history, SLE_INT32), @@ -363,42 +363,42 @@ struct CompanyOldAI { }; static const SaveLoad _company_ai_desc[] = { - SLE_CONDNULL(2, 0, 106), - SLE_CONDNULL(2, 0, 12), - SLE_CONDNULL(4, 13, 106), - SLE_CONDNULL(8, 0, 106), - SLE_CONDVAR(CompanyOldAI, num_build_rec, SLE_UINT8, 0, 106), - SLE_CONDNULL(3, 0, 106), + SLE_CONDNULL(2, 0, 107), + SLE_CONDNULL(2, 0, 13), + SLE_CONDNULL(4, 13, 107), + SLE_CONDNULL(8, 0, 107), + SLE_CONDVAR(CompanyOldAI, num_build_rec, SLE_UINT8, 0, 107), + SLE_CONDNULL(3, 0, 107), - SLE_CONDNULL(2, 0, 5), - SLE_CONDNULL(4, 6, 106), - SLE_CONDNULL(2, 0, 5), - SLE_CONDNULL(4, 6, 106), - SLE_CONDNULL(2, 0, 106), + SLE_CONDNULL(2, 0, 6), + SLE_CONDNULL(4, 6, 107), + SLE_CONDNULL(2, 0, 6), + SLE_CONDNULL(4, 6, 107), + SLE_CONDNULL(2, 0, 107), - SLE_CONDNULL(2, 0, 5), - SLE_CONDNULL(4, 6, 106), - SLE_CONDNULL(2, 0, 5), - SLE_CONDNULL(4, 6, 106), - SLE_CONDNULL(2, 0, 106), + SLE_CONDNULL(2, 0, 6), + SLE_CONDNULL(4, 6, 107), + SLE_CONDNULL(2, 0, 6), + SLE_CONDNULL(4, 6, 107), + SLE_CONDNULL(2, 0, 107), - SLE_CONDNULL(2, 0, 68), - SLE_CONDNULL(4, 69, 106), + SLE_CONDNULL(2, 0, 69), + SLE_CONDNULL(4, 69, 107), - SLE_CONDNULL(18, 0, 106), - SLE_CONDNULL(20, 0, 106), - SLE_CONDNULL(32, 0, 106), + SLE_CONDNULL(18, 0, 107), + SLE_CONDNULL(20, 0, 107), + SLE_CONDNULL(32, 0, 107), - SLE_CONDNULL(64, 2, 106), + SLE_CONDNULL(64, 2, 107), SLE_END() }; static const SaveLoad _company_ai_build_rec_desc[] = { - SLE_CONDNULL(2, 0, 5), - SLE_CONDNULL(4, 6, 106), - SLE_CONDNULL(2, 0, 5), - SLE_CONDNULL(4, 6, 106), - SLE_CONDNULL(8, 0, 106), + SLE_CONDNULL(2, 0, 6), + SLE_CONDNULL(4, 6, 107), + SLE_CONDNULL(2, 0, 6), + SLE_CONDNULL(4, 6, 107), + SLE_CONDNULL(8, 0, 107), SLE_END() }; diff --git a/src/saveload/depot_sl.cpp b/src/saveload/depot_sl.cpp index 861a541730..14a255779b 100644 --- a/src/saveload/depot_sl.cpp +++ b/src/saveload/depot_sl.cpp @@ -20,9 +20,9 @@ static TownID _town_index; static const SaveLoad _depot_desc[] = { - SLE_CONDVAR(Depot, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), + SLE_CONDVAR(Depot, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), SLE_CONDVAR(Depot, xy, SLE_UINT32, 6, SL_MAX_VERSION), - SLEG_CONDVAR(_town_index, SLE_UINT16, 0, 140), + SLEG_CONDVAR(_town_index, SLE_UINT16, 0, 141), SLE_CONDREF(Depot, town, REF_TOWN, 141, SL_MAX_VERSION), SLE_CONDVAR(Depot, town_cn, SLE_UINT16, 141, SL_MAX_VERSION), SLE_CONDSTR(Depot, name, SLE_STR, 0, 141, SL_MAX_VERSION), diff --git a/src/saveload/economy_sl.cpp b/src/saveload/economy_sl.cpp index 0effb5b2ff..997a7ae6e0 100644 --- a/src/saveload/economy_sl.cpp +++ b/src/saveload/economy_sl.cpp @@ -36,11 +36,11 @@ static void Load_CAPR() } static const SaveLoad _economy_desc[] = { - SLE_CONDNULL(4, 0, 64), // max_loan - SLE_CONDNULL(8, 65, 143), // max_loan - SLE_CONDVAR(Economy, old_max_loan_unround, SLE_FILE_I32 | SLE_VAR_I64, 0, 64), - SLE_CONDVAR(Economy, old_max_loan_unround, SLE_INT64, 65, 125), - SLE_CONDVAR(Economy, old_max_loan_unround_fract, SLE_UINT16, 70, 125), + SLE_CONDNULL(4, 0, 65), // max_loan + SLE_CONDNULL(8, 65, 144), // max_loan + SLE_CONDVAR(Economy, old_max_loan_unround, SLE_FILE_I32 | SLE_VAR_I64, 0, 65), + SLE_CONDVAR(Economy, old_max_loan_unround, SLE_INT64, 65, 126), + SLE_CONDVAR(Economy, old_max_loan_unround_fract, SLE_UINT16, 70, 126), SLE_CONDVAR(Economy, inflation_prices, SLE_UINT64, 126, SL_MAX_VERSION), SLE_CONDVAR(Economy, inflation_payment, SLE_UINT64, 126, SL_MAX_VERSION), SLE_VAR(Economy, fluct, SLE_INT16), diff --git a/src/saveload/engine_sl.cpp b/src/saveload/engine_sl.cpp index a568fead7b..d9552bded2 100644 --- a/src/saveload/engine_sl.cpp +++ b/src/saveload/engine_sl.cpp @@ -18,9 +18,9 @@ #include "../safeguards.h" static const SaveLoad _engine_desc[] = { - SLE_CONDVAR(Engine, intro_date, SLE_FILE_U16 | SLE_VAR_I32, 0, 30), + SLE_CONDVAR(Engine, intro_date, SLE_FILE_U16 | SLE_VAR_I32, 0, 31), SLE_CONDVAR(Engine, intro_date, SLE_INT32, 31, SL_MAX_VERSION), - SLE_CONDVAR(Engine, age, SLE_FILE_U16 | SLE_VAR_I32, 0, 30), + SLE_CONDVAR(Engine, age, SLE_FILE_U16 | SLE_VAR_I32, 0, 31), SLE_CONDVAR(Engine, age, SLE_INT32, 31, SL_MAX_VERSION), SLE_VAR(Engine, reliability, SLE_UINT16), SLE_VAR(Engine, reliability_spd_dec, SLE_UINT16), @@ -31,19 +31,19 @@ static const SaveLoad _engine_desc[] = { SLE_VAR(Engine, duration_phase_2, SLE_UINT16), SLE_VAR(Engine, duration_phase_3, SLE_UINT16), - SLE_CONDNULL(1, 0, 120), + SLE_CONDNULL(1, 0, 121), SLE_VAR(Engine, flags, SLE_UINT8), - SLE_CONDNULL(1, 0, 178), // old preview_company_rank + SLE_CONDNULL(1, 0, 179), // old preview_company_rank SLE_CONDVAR(Engine, preview_asked, SLE_UINT16, 179, SL_MAX_VERSION), SLE_CONDVAR(Engine, preview_company, SLE_UINT8, 179, SL_MAX_VERSION), SLE_VAR(Engine, preview_wait, SLE_UINT8), - SLE_CONDNULL(1, 0, 44), - SLE_CONDVAR(Engine, company_avail, SLE_FILE_U8 | SLE_VAR_U16, 0, 103), + SLE_CONDNULL(1, 0, 45), + SLE_CONDVAR(Engine, company_avail, SLE_FILE_U8 | SLE_VAR_U16, 0, 104), SLE_CONDVAR(Engine, company_avail, SLE_UINT16, 104, SL_MAX_VERSION), SLE_CONDVAR(Engine, company_hidden, SLE_UINT16, 193, SL_MAX_VERSION), SLE_CONDSTR(Engine, name, SLE_STR, 0, 84, SL_MAX_VERSION), - SLE_CONDNULL(16, 2, 143), // old reserved space + SLE_CONDNULL(16, 2, 144), // old reserved space SLE_END() }; diff --git a/src/saveload/group_sl.cpp b/src/saveload/group_sl.cpp index 27112a5431..9142cceeaa 100644 --- a/src/saveload/group_sl.cpp +++ b/src/saveload/group_sl.cpp @@ -18,9 +18,9 @@ #include "../safeguards.h" static const SaveLoad _group_desc[] = { - SLE_CONDVAR(Group, name, SLE_NAME, 0, 83), + SLE_CONDVAR(Group, name, SLE_NAME, 0, 84), SLE_CONDSTR(Group, name, SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION), - SLE_CONDNULL(2, 0, 163), // num_vehicle + SLE_CONDNULL(2, 0, 164), // num_vehicle SLE_VAR(Group, owner, SLE_UINT8), SLE_VAR(Group, vehicle_type, SLE_UINT8), SLE_VAR(Group, replace_protection, SLE_BOOL), diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp index a9c84e62ab..7fe667f425 100644 --- a/src/saveload/industry_sl.cpp +++ b/src/saveload/industry_sl.cpp @@ -20,33 +20,33 @@ static OldPersistentStorage _old_ind_persistent_storage; static const SaveLoad _industry_desc[] = { - SLE_CONDVAR(Industry, location.tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), + SLE_CONDVAR(Industry, location.tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), SLE_CONDVAR(Industry, location.tile, SLE_UINT32, 6, SL_MAX_VERSION), SLE_VAR(Industry, location.w, SLE_FILE_U8 | SLE_VAR_U16), SLE_VAR(Industry, location.h, SLE_FILE_U8 | SLE_VAR_U16), SLE_REF(Industry, town, REF_TOWN), - SLE_CONDNULL( 2, 0, 60), ///< used to be industry's produced_cargo - SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 2, 78, 201), + SLE_CONDNULL( 2, 0, 61), ///< used to be industry's produced_cargo + SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 2, 78, 202), SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 16, 202, SL_MAX_VERSION), - SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 3, 70, 201), + SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 3, 70, 202), SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 16, 202, SL_MAX_VERSION), - SLE_CONDARR(Industry, produced_cargo_waiting, SLE_UINT16, 2, 0, 201), + SLE_CONDARR(Industry, produced_cargo_waiting, SLE_UINT16, 2, 0, 202), SLE_CONDARR(Industry, produced_cargo_waiting, SLE_UINT16, 16, 202, SL_MAX_VERSION), - SLE_CONDARR(Industry, production_rate, SLE_UINT8, 2, 0, 201), + SLE_CONDARR(Industry, production_rate, SLE_UINT8, 2, 0, 202), SLE_CONDARR(Industry, production_rate, SLE_UINT8, 16, 202, SL_MAX_VERSION), - SLE_CONDNULL( 3, 0, 60), ///< used to be industry's accepts_cargo - SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 3, 78, 201), + SLE_CONDNULL( 3, 0, 61), ///< used to be industry's accepts_cargo + SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 3, 78, 202), SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 16, 202, SL_MAX_VERSION), SLE_VAR(Industry, prod_level, SLE_UINT8), - SLE_CONDARR(Industry, this_month_production, SLE_UINT16, 2, 0, 201), + SLE_CONDARR(Industry, this_month_production, SLE_UINT16, 2, 0, 202), SLE_CONDARR(Industry, this_month_production, SLE_UINT16, 16, 202, SL_MAX_VERSION), - SLE_CONDARR(Industry, this_month_transported, SLE_UINT16, 2, 0, 201), + SLE_CONDARR(Industry, this_month_transported, SLE_UINT16, 2, 0, 202), SLE_CONDARR(Industry, this_month_transported, SLE_UINT16, 16, 202, SL_MAX_VERSION), - SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8, 2, 0, 201), + SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8, 2, 0, 202), SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8, 16, 202, SL_MAX_VERSION), - SLE_CONDARR(Industry, last_month_production, SLE_UINT16, 2, 0, 201), + SLE_CONDARR(Industry, last_month_production, SLE_UINT16, 2, 0, 202), SLE_CONDARR(Industry, last_month_production, SLE_UINT16, 16, 202, SL_MAX_VERSION), - SLE_CONDARR(Industry, last_month_transported, SLE_UINT16, 2, 0, 201), + SLE_CONDARR(Industry, last_month_transported, SLE_UINT16, 2, 0, 202), SLE_CONDARR(Industry, last_month_transported, SLE_UINT16, 16, 202, SL_MAX_VERSION), SLE_VAR(Industry, counter, SLE_UINT16), @@ -54,24 +54,24 @@ static const SaveLoad _industry_desc[] = { SLE_VAR(Industry, type, SLE_UINT8), SLE_VAR(Industry, owner, SLE_UINT8), SLE_VAR(Industry, random_colour, SLE_UINT8), - SLE_CONDVAR(Industry, last_prod_year, SLE_FILE_U8 | SLE_VAR_I32, 0, 30), + SLE_CONDVAR(Industry, last_prod_year, SLE_FILE_U8 | SLE_VAR_I32, 0, 31), SLE_CONDVAR(Industry, last_prod_year, SLE_INT32, 31, SL_MAX_VERSION), SLE_VAR(Industry, was_cargo_delivered, SLE_UINT8), SLE_CONDVAR(Industry, founder, SLE_UINT8, 70, SL_MAX_VERSION), SLE_CONDVAR(Industry, construction_date, SLE_INT32, 70, SL_MAX_VERSION), SLE_CONDVAR(Industry, construction_type, SLE_UINT8, 70, SL_MAX_VERSION), - SLE_CONDVAR(Industry, last_cargo_accepted_at[0], SLE_INT32, 70, 201), + SLE_CONDVAR(Industry, last_cargo_accepted_at[0], SLE_INT32, 70, 202), SLE_CONDARR(Industry, last_cargo_accepted_at, SLE_INT32, 16, 202, SL_MAX_VERSION), SLE_CONDVAR(Industry, selected_layout, SLE_UINT8, 73, SL_MAX_VERSION), - SLEG_CONDARR(_old_ind_persistent_storage.storage, SLE_UINT32, 16, 76, 160), + SLEG_CONDARR(_old_ind_persistent_storage.storage, SLE_UINT32, 16, 76, 161), SLE_CONDREF(Industry, psa, REF_STORAGE, 161, SL_MAX_VERSION), - SLE_CONDNULL(1, 82, 196), // random_triggers + SLE_CONDNULL(1, 82, 197), // random_triggers SLE_CONDVAR(Industry, random, SLE_UINT16, 82, SL_MAX_VERSION), - SLE_CONDNULL(32, 2, 143), // old reserved space + SLE_CONDNULL(32, 2, 144), // old reserved space SLE_END() }; diff --git a/src/saveload/linkgraph_sl.cpp b/src/saveload/linkgraph_sl.cpp index 6044316a47..93959370c6 100644 --- a/src/saveload/linkgraph_sl.cpp +++ b/src/saveload/linkgraph_sl.cpp @@ -121,7 +121,7 @@ static const SaveLoad _node_desc[] = { * SaveLoad desc for a link graph edge. */ static const SaveLoad _edge_desc[] = { - SLE_CONDNULL(4, 0, 190), // distance + SLE_CONDNULL(4, 0, 191), // distance SLE_VAR(Edge, capacity, SLE_UINT32), SLE_VAR(Edge, usage, SLE_UINT32), SLE_VAR(Edge, last_unrestricted_update, SLE_INT32), diff --git a/src/saveload/misc_sl.cpp b/src/saveload/misc_sl.cpp index c7bd31e81e..0be1077a7f 100644 --- a/src/saveload/misc_sl.cpp +++ b/src/saveload/misc_sl.cpp @@ -71,52 +71,52 @@ void ResetViewportAfterLoadGame() byte _age_cargo_skip_counter; ///< Skip aging of cargo? Used before savegame version 162. static const SaveLoadGlobVarList _date_desc[] = { - SLEG_CONDVAR(_date, SLE_FILE_U16 | SLE_VAR_I32, 0, 30), + SLEG_CONDVAR(_date, SLE_FILE_U16 | SLE_VAR_I32, 0, 31), SLEG_CONDVAR(_date, SLE_INT32, 31, SL_MAX_VERSION), SLEG_VAR(_date_fract, SLE_UINT16), SLEG_VAR(_tick_counter, SLE_UINT16), - SLE_CONDNULL(2, 0, 156), // _vehicle_id_ctr_day - SLEG_CONDVAR(_age_cargo_skip_counter, SLE_UINT8, 0, 161), - SLE_CONDNULL(1, 0, 45), - SLEG_CONDVAR(_cur_tileloop_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), + SLE_CONDNULL(2, 0, 157), // _vehicle_id_ctr_day + SLEG_CONDVAR(_age_cargo_skip_counter, SLE_UINT8, 0, 162), + SLE_CONDNULL(1, 0, 46), + SLEG_CONDVAR(_cur_tileloop_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), SLEG_CONDVAR(_cur_tileloop_tile, SLE_UINT32, 6, SL_MAX_VERSION), SLEG_VAR(_disaster_delay, SLE_UINT16), - SLE_CONDNULL(2, 0, 119), + SLE_CONDNULL(2, 0, 120), SLEG_VAR(_random.state[0], SLE_UINT32), SLEG_VAR(_random.state[1], SLE_UINT32), - SLE_CONDNULL(1, 0, 9), - SLE_CONDNULL(4, 10, 119), + SLE_CONDNULL(1, 0, 10), + SLE_CONDNULL(4, 10, 120), SLEG_VAR(_cur_company_tick_index, SLE_FILE_U8 | SLE_VAR_U32), - SLEG_CONDVAR(_next_competitor_start, SLE_FILE_U16 | SLE_VAR_U32, 0, 108), + SLEG_CONDVAR(_next_competitor_start, SLE_FILE_U16 | SLE_VAR_U32, 0, 109), SLEG_CONDVAR(_next_competitor_start, SLE_UINT32, 109, SL_MAX_VERSION), SLEG_VAR(_trees_tick_ctr, SLE_UINT8), SLEG_CONDVAR(_pause_mode, SLE_UINT8, 4, SL_MAX_VERSION), - SLE_CONDNULL(4, 11, 119), + SLE_CONDNULL(4, 11, 120), SLEG_END() }; static const SaveLoadGlobVarList _date_check_desc[] = { - SLEG_CONDVAR(_load_check_data.current_date, SLE_FILE_U16 | SLE_VAR_I32, 0, 30), + SLEG_CONDVAR(_load_check_data.current_date, SLE_FILE_U16 | SLE_VAR_I32, 0, 31), SLEG_CONDVAR(_load_check_data.current_date, SLE_INT32, 31, SL_MAX_VERSION), SLE_NULL(2), // _date_fract SLE_NULL(2), // _tick_counter - SLE_CONDNULL(2, 0, 156), // _vehicle_id_ctr_day - SLE_CONDNULL(1, 0, 161), // _age_cargo_skip_counter - SLE_CONDNULL(1, 0, 45), - SLE_CONDNULL(2, 0, 5), // _cur_tileloop_tile + SLE_CONDNULL(2, 0, 157), // _vehicle_id_ctr_day + SLE_CONDNULL(1, 0, 162), // _age_cargo_skip_counter + SLE_CONDNULL(1, 0, 46), + SLE_CONDNULL(2, 0, 6), // _cur_tileloop_tile SLE_CONDNULL(4, 6, SL_MAX_VERSION), // _cur_tileloop_tile SLE_NULL(2), // _disaster_delay - SLE_CONDNULL(2, 0, 119), + SLE_CONDNULL(2, 0, 120), SLE_NULL(4), // _random.state[0] SLE_NULL(4), // _random.state[1] - SLE_CONDNULL(1, 0, 9), - SLE_CONDNULL(4, 10, 119), + SLE_CONDNULL(1, 0, 10), + SLE_CONDNULL(4, 10, 120), SLE_NULL(1), // _cur_company_tick_index - SLE_CONDNULL(2, 0, 108), // _next_competitor_start + SLE_CONDNULL(2, 0, 109), // _next_competitor_start SLE_CONDNULL(4, 109, SL_MAX_VERSION), // _next_competitor_start SLE_NULL(1), // _trees_tick_ctr SLE_CONDNULL(1, 4, SL_MAX_VERSION), // _pause_mode - SLE_CONDNULL(4, 11, 119), + SLE_CONDNULL(4, 11, 120), SLEG_END() }; @@ -137,9 +137,9 @@ static void Check_DATE() static const SaveLoadGlobVarList _view_desc[] = { - SLEG_CONDVAR(_saved_scrollpos_x, SLE_FILE_I16 | SLE_VAR_I32, 0, 5), + SLEG_CONDVAR(_saved_scrollpos_x, SLE_FILE_I16 | SLE_VAR_I32, 0, 6), SLEG_CONDVAR(_saved_scrollpos_x, SLE_INT32, 6, SL_MAX_VERSION), - SLEG_CONDVAR(_saved_scrollpos_y, SLE_FILE_I16 | SLE_VAR_I32, 0, 5), + SLEG_CONDVAR(_saved_scrollpos_y, SLE_FILE_I16 | SLE_VAR_I32, 0, 6), SLEG_CONDVAR(_saved_scrollpos_y, SLE_INT32, 6, SL_MAX_VERSION), SLEG_VAR(_saved_scrollpos_zoom, SLE_UINT8), SLEG_END() diff --git a/src/saveload/order_sl.cpp b/src/saveload/order_sl.cpp index d55d577cb6..a56e56892b 100644 --- a/src/saveload/order_sl.cpp +++ b/src/saveload/order_sl.cpp @@ -109,14 +109,14 @@ const SaveLoad *GetOrderDescription() SLE_VAR(Order, dest, SLE_UINT16), SLE_REF(Order, next, REF_ORDER), SLE_CONDVAR(Order, refit_cargo, SLE_UINT8, 36, SL_MAX_VERSION), - SLE_CONDNULL(1, 36, 181), // refit_subtype + SLE_CONDNULL(1, 36, 182), // refit_subtype SLE_CONDVAR(Order, wait_time, SLE_UINT16, 67, SL_MAX_VERSION), SLE_CONDVAR(Order, travel_time, SLE_UINT16, 67, SL_MAX_VERSION), SLE_CONDVAR(Order, max_speed, SLE_UINT16, 172, SL_MAX_VERSION), /* Leftover from the minor savegame version stuff * We will never use those free bytes, but we have to keep this line to allow loading of old savegames */ - SLE_CONDNULL(10, 5, 35), + SLE_CONDNULL(10, 5, 36), SLE_END() }; @@ -253,17 +253,17 @@ const SaveLoad *GetOrderBackupDescription() SLE_VAR(OrderBackup, user, SLE_UINT32), SLE_VAR(OrderBackup, tile, SLE_UINT32), SLE_VAR(OrderBackup, group, SLE_UINT16), - SLE_CONDVAR(OrderBackup, service_interval, SLE_FILE_U32 | SLE_VAR_U16, 0, 191), + SLE_CONDVAR(OrderBackup, service_interval, SLE_FILE_U32 | SLE_VAR_U16, 0, 192), SLE_CONDVAR(OrderBackup, service_interval, SLE_UINT16, 192, SL_MAX_VERSION), SLE_STR(OrderBackup, name, SLE_STR, 0), - SLE_CONDNULL(2, 0, 191), // clone (2 bytes of pointer, i.e. garbage) + SLE_CONDNULL(2, 0, 192), // clone (2 bytes of pointer, i.e. garbage) SLE_CONDREF(OrderBackup, clone, REF_VEHICLE, 192, SL_MAX_VERSION), SLE_VAR(OrderBackup, cur_real_order_index, SLE_UINT8), SLE_CONDVAR(OrderBackup, cur_implicit_order_index, SLE_UINT8, 176, SL_MAX_VERSION), SLE_CONDVAR(OrderBackup, current_order_time, SLE_UINT32, 176, SL_MAX_VERSION), SLE_CONDVAR(OrderBackup, lateness_counter, SLE_INT32, 176, SL_MAX_VERSION), SLE_CONDVAR(OrderBackup, timetable_start, SLE_INT32, 176, SL_MAX_VERSION), - SLE_CONDVAR(OrderBackup, vehicle_flags, SLE_FILE_U8 | SLE_VAR_U16, 176, 179), + SLE_CONDVAR(OrderBackup, vehicle_flags, SLE_FILE_U8 | SLE_VAR_U16, 176, 180), SLE_CONDVAR(OrderBackup, vehicle_flags, SLE_UINT16, 180, SL_MAX_VERSION), SLE_REF(OrderBackup, orders, REF_ORDER), SLE_END() diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index e75e40d74e..b20e996cab 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -1551,7 +1551,7 @@ static void SlDeque(void *deque, VarType conv) /** Are we going to save this object or not? */ static inline bool SlIsObjectValidInSavegame(const SaveLoad *sld) { - if (_sl_version < sld->version_from || _sl_version > sld->version_to) return false; + if (_sl_version < sld->version_from || _sl_version >= sld->version_to) return false; if (sld->conv & SLF_NOT_IN_SAVE) return false; return true; diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index b6fc59c6e9..8a2eeead2f 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -483,14 +483,14 @@ static inline bool IsSavegameVersionBefore(uint16 major, byte minor = 0) /** * Checks if some version from/to combination falls within the range of the * active savegame version. - * @param version_from Lowest version number that falls within the range. - * @param version_to Highest version number that falls within the range. + * @param version_from Inclusive savegame version lower bound. + * @param version_to Exclusive savegame version upper bound. SL_MAX_VERSION if no upper bound. * @return Active savegame version falls within the given range. */ static inline bool SlIsObjectCurrentlyValid(uint16 version_from, uint16 version_to) { extern const uint16 SAVEGAME_VERSION; - if (SAVEGAME_VERSION < version_from || SAVEGAME_VERSION > version_to) return false; + if (SAVEGAME_VERSION < version_from || SAVEGAME_VERSION >= version_to) return false; return true; } diff --git a/src/saveload/signs_sl.cpp b/src/saveload/signs_sl.cpp index 132ac181e4..6b838cfc11 100644 --- a/src/saveload/signs_sl.cpp +++ b/src/saveload/signs_sl.cpp @@ -19,14 +19,14 @@ /** Description of a sign within the savegame. */ static const SaveLoad _sign_desc[] = { - SLE_CONDVAR(Sign, name, SLE_NAME, 0, 83), + SLE_CONDVAR(Sign, name, SLE_NAME, 0, 84), SLE_CONDSTR(Sign, name, SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION), - SLE_CONDVAR(Sign, x, SLE_FILE_I16 | SLE_VAR_I32, 0, 4), - SLE_CONDVAR(Sign, y, SLE_FILE_I16 | SLE_VAR_I32, 0, 4), + SLE_CONDVAR(Sign, x, SLE_FILE_I16 | SLE_VAR_I32, 0, 5), + SLE_CONDVAR(Sign, y, SLE_FILE_I16 | SLE_VAR_I32, 0, 5), SLE_CONDVAR(Sign, x, SLE_INT32, 5, SL_MAX_VERSION), SLE_CONDVAR(Sign, y, SLE_INT32, 5, SL_MAX_VERSION), SLE_CONDVAR(Sign, owner, SLE_UINT8, 6, SL_MAX_VERSION), - SLE_CONDVAR(Sign, z, SLE_FILE_U8 | SLE_VAR_I32, 0, 163), + SLE_CONDVAR(Sign, z, SLE_FILE_U8 | SLE_VAR_I32, 0, 164), SLE_CONDVAR(Sign, z, SLE_INT32, 164, SL_MAX_VERSION), SLE_END() }; diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index ed2ee69545..d9c026cd4d 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -150,42 +150,42 @@ void AfterLoadRoadStops() static const SaveLoad _roadstop_desc[] = { SLE_VAR(RoadStop, xy, SLE_UINT32), - SLE_CONDNULL(1, 0, 44), + SLE_CONDNULL(1, 0, 45), SLE_VAR(RoadStop, status, SLE_UINT8), /* Index was saved in some versions, but this is not needed */ - SLE_CONDNULL(4, 0, 8), - SLE_CONDNULL(2, 0, 44), - SLE_CONDNULL(1, 0, 25), + SLE_CONDNULL(4, 0, 9), + SLE_CONDNULL(2, 0, 45), + SLE_CONDNULL(1, 0, 26), SLE_REF(RoadStop, next, REF_ROADSTOPS), - SLE_CONDNULL(2, 0, 44), + SLE_CONDNULL(2, 0, 45), - SLE_CONDNULL(4, 0, 24), - SLE_CONDNULL(1, 25, 25), + SLE_CONDNULL(4, 0, 25), + SLE_CONDNULL(1, 25, 26), SLE_END() }; static const SaveLoad _old_station_desc[] = { - SLE_CONDVAR(Station, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), + SLE_CONDVAR(Station, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), SLE_CONDVAR(Station, xy, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDNULL(4, 0, 5), ///< bus/lorry tile - SLE_CONDVAR(Station, train_station.tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), + SLE_CONDNULL(4, 0, 6), ///< bus/lorry tile + SLE_CONDVAR(Station, train_station.tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), SLE_CONDVAR(Station, train_station.tile, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Station, airport.tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), + SLE_CONDVAR(Station, airport.tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), SLE_CONDVAR(Station, airport.tile, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Station, dock_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), + SLE_CONDVAR(Station, dock_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), SLE_CONDVAR(Station, dock_tile, SLE_UINT32, 6, SL_MAX_VERSION), SLE_REF(Station, town, REF_TOWN), SLE_VAR(Station, train_station.w, SLE_FILE_U8 | SLE_VAR_U16), SLE_CONDVAR(Station, train_station.h, SLE_FILE_U8 | SLE_VAR_U16, 2, SL_MAX_VERSION), - SLE_CONDNULL(1, 0, 3), ///< alpha_order + SLE_CONDNULL(1, 0, 4), ///< alpha_order SLE_VAR(Station, string_id, SLE_STRINGID), SLE_CONDSTR(Station, name, SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION), SLE_CONDVAR(Station, indtype, SLE_UINT8, 103, SL_MAX_VERSION), - SLE_CONDVAR(Station, had_vehicle_of_type, SLE_FILE_U16 | SLE_VAR_U8, 0, 121), + SLE_CONDVAR(Station, had_vehicle_of_type, SLE_FILE_U16 | SLE_VAR_U8, 0, 122), SLE_CONDVAR(Station, had_vehicle_of_type, SLE_UINT8, 122, SL_MAX_VERSION), SLE_VAR(Station, time_since_load, SLE_UINT8), @@ -195,18 +195,18 @@ static const SaveLoad _old_station_desc[] = { SLE_VAR(Station, facilities, SLE_UINT8), SLE_VAR(Station, airport.type, SLE_UINT8), - SLE_CONDNULL(2, 0, 5), ///< Truck/bus stop status - SLE_CONDNULL(1, 0, 4), ///< Blocked months + SLE_CONDNULL(2, 0, 6), ///< Truck/bus stop status + SLE_CONDNULL(1, 0, 5), ///< Blocked months - SLE_CONDVAR(Station, airport.flags, SLE_VAR_U64 | SLE_FILE_U16, 0, 2), - SLE_CONDVAR(Station, airport.flags, SLE_VAR_U64 | SLE_FILE_U32, 3, 45), + SLE_CONDVAR(Station, airport.flags, SLE_VAR_U64 | SLE_FILE_U16, 0, 3), + SLE_CONDVAR(Station, airport.flags, SLE_VAR_U64 | SLE_FILE_U32, 3, 46), SLE_CONDVAR(Station, airport.flags, SLE_UINT64, 46, SL_MAX_VERSION), - SLE_CONDNULL(2, 0, 25), ///< last-vehicle + SLE_CONDNULL(2, 0, 26), ///< last-vehicle SLE_CONDVAR(Station, last_vehicle_type, SLE_UINT8, 26, SL_MAX_VERSION), - SLE_CONDNULL(2, 3, 25), ///< custom station class and id - SLE_CONDVAR(Station, build_date, SLE_FILE_U16 | SLE_VAR_I32, 3, 30), + SLE_CONDNULL(2, 3, 26), ///< custom station class and id + SLE_CONDVAR(Station, build_date, SLE_FILE_U16 | SLE_VAR_I32, 3, 31), SLE_CONDVAR(Station, build_date, SLE_INT32, 31, SL_MAX_VERSION), SLE_CONDREF(Station, bus_stops, REF_ROADSTOPS, 6, SL_MAX_VERSION), @@ -266,21 +266,21 @@ static const SaveLoad _flow_desc[] = { const SaveLoad *GetGoodsDesc() { static const SaveLoad goods_desc[] = { - SLEG_CONDVAR( _waiting_acceptance, SLE_UINT16, 0, 67), + SLEG_CONDVAR( _waiting_acceptance, SLE_UINT16, 0, 68), SLE_CONDVAR(GoodsEntry, status, SLE_UINT8, 68, SL_MAX_VERSION), - SLE_CONDNULL(2, 51, 67), + SLE_CONDNULL(2, 51, 68), SLE_VAR(GoodsEntry, time_since_pickup, SLE_UINT8), SLE_VAR(GoodsEntry, rating, SLE_UINT8), - SLEG_CONDVAR( _cargo_source, SLE_FILE_U8 | SLE_VAR_U16, 0, 6), - SLEG_CONDVAR( _cargo_source, SLE_UINT16, 7, 67), - SLEG_CONDVAR( _cargo_source_xy, SLE_UINT32, 44, 67), - SLEG_CONDVAR( _cargo_days, SLE_UINT8, 0, 67), + SLEG_CONDVAR( _cargo_source, SLE_FILE_U8 | SLE_VAR_U16, 0, 7), + SLEG_CONDVAR( _cargo_source, SLE_UINT16, 7, 68), + SLEG_CONDVAR( _cargo_source_xy, SLE_UINT32, 44, 68), + SLEG_CONDVAR( _cargo_days, SLE_UINT8, 0, 68), SLE_VAR(GoodsEntry, last_speed, SLE_UINT8), SLE_VAR(GoodsEntry, last_age, SLE_UINT8), - SLEG_CONDVAR( _cargo_feeder_share, SLE_FILE_U32 | SLE_VAR_I64, 14, 64), - SLEG_CONDVAR( _cargo_feeder_share, SLE_INT64, 65, 67), + SLEG_CONDVAR( _cargo_feeder_share, SLE_FILE_U32 | SLE_VAR_I64, 14, 65), + SLEG_CONDVAR( _cargo_feeder_share, SLE_INT64, 65, 68), SLE_CONDVAR(GoodsEntry, amount_fract, SLE_UINT8, 150, SL_MAX_VERSION), - SLEG_CONDLST( _packets, REF_CARGO_PACKET, 68, 182), + SLEG_CONDLST( _packets, REF_CARGO_PACKET, 68, 183), SLEG_CONDVAR( _num_dests, SLE_UINT32, 183, SL_MAX_VERSION), SLE_CONDVAR(GoodsEntry, cargo.reserved_count, SLE_UINT, 181, SL_MAX_VERSION), SLE_CONDVAR(GoodsEntry, link_graph, SLE_UINT16, 183, SL_MAX_VERSION), @@ -431,7 +431,7 @@ static const SaveLoad _station_desc[] = { SLE_CONDVAR(Station, airport.layout, SLE_UINT8, 145, SL_MAX_VERSION), SLE_VAR(Station, airport.flags, SLE_UINT64), SLE_CONDVAR(Station, airport.rotation, SLE_UINT8, 145, SL_MAX_VERSION), - SLEG_CONDARR(_old_st_persistent_storage.storage, SLE_UINT32, 16, 145, 160), + SLEG_CONDARR(_old_st_persistent_storage.storage, SLE_UINT32, 16, 145, 161), SLE_CONDREF(Station, airport.psa, REF_STORAGE, 161, SL_MAX_VERSION), SLE_VAR(Station, indtype, SLE_UINT8), @@ -441,7 +441,7 @@ static const SaveLoad _station_desc[] = { SLE_VAR(Station, last_vehicle_type, SLE_UINT8), SLE_VAR(Station, had_vehicle_of_type, SLE_UINT8), SLE_LST(Station, loading_vehicles, REF_VEHICLE), - SLE_CONDVAR(Station, always_accepted, SLE_FILE_U32 | SLE_VAR_U64, 127, 198), + SLE_CONDVAR(Station, always_accepted, SLE_FILE_U32 | SLE_VAR_U64, 127, 199), SLE_CONDVAR(Station, always_accepted, SLE_UINT64, 199, SL_MAX_VERSION), SLE_END() diff --git a/src/saveload/storage_sl.cpp b/src/saveload/storage_sl.cpp index 04980c7c37..30d4386143 100644 --- a/src/saveload/storage_sl.cpp +++ b/src/saveload/storage_sl.cpp @@ -18,7 +18,7 @@ /** Description of the data to save and load in #PersistentStorage. */ static const SaveLoad _storage_desc[] = { SLE_CONDVAR(PersistentStorage, grfid, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDARR(PersistentStorage, storage, SLE_UINT32, 16, 161, 200), + SLE_CONDARR(PersistentStorage, storage, SLE_UINT32, 16, 161, 201), SLE_CONDARR(PersistentStorage, storage, SLE_UINT32, 256, 201, SL_MAX_VERSION), SLE_END() }; diff --git a/src/saveload/story_sl.cpp b/src/saveload/story_sl.cpp index 87e3720a62..cbfc847b6b 100644 --- a/src/saveload/story_sl.cpp +++ b/src/saveload/story_sl.cpp @@ -29,10 +29,10 @@ void AfterLoadStoryBook() } static const SaveLoad _story_page_elements_desc[] = { - SLE_CONDVAR(StoryPageElement, sort_value, SLE_FILE_U16 | SLE_VAR_U32, 0, 184), + SLE_CONDVAR(StoryPageElement, sort_value, SLE_FILE_U16 | SLE_VAR_U32, 0, 185), SLE_CONDVAR(StoryPageElement, sort_value, SLE_UINT32, 185, SL_MAX_VERSION), SLE_VAR(StoryPageElement, page, SLE_UINT16), - SLE_CONDVAR(StoryPageElement, type, SLE_FILE_U16 | SLE_VAR_U8, 0, 184), + SLE_CONDVAR(StoryPageElement, type, SLE_FILE_U16 | SLE_VAR_U8, 0, 185), SLE_CONDVAR(StoryPageElement, type, SLE_UINT8, 185, SL_MAX_VERSION), SLE_VAR(StoryPageElement, referenced_id, SLE_UINT32), SLE_STR(StoryPageElement, text, SLE_STR | SLF_ALLOW_CONTROL, 0), @@ -66,10 +66,10 @@ static void Load_STORY_PAGE_ELEMENT() } static const SaveLoad _story_pages_desc[] = { - SLE_CONDVAR(StoryPage, sort_value, SLE_FILE_U16 | SLE_VAR_U32, 0, 184), + SLE_CONDVAR(StoryPage, sort_value, SLE_FILE_U16 | SLE_VAR_U32, 0, 185), SLE_CONDVAR(StoryPage, sort_value, SLE_UINT32, 185, SL_MAX_VERSION), SLE_VAR(StoryPage, date, SLE_UINT32), - SLE_CONDVAR(StoryPage, company, SLE_FILE_U16 | SLE_VAR_U8, 0, 184), + SLE_CONDVAR(StoryPage, company, SLE_FILE_U16 | SLE_VAR_U8, 0, 185), SLE_CONDVAR(StoryPage, company, SLE_UINT8, 185, SL_MAX_VERSION), SLE_STR(StoryPage, title, SLE_STR | SLF_ALLOW_CONTROL, 0), SLE_END() diff --git a/src/saveload/subsidy_sl.cpp b/src/saveload/subsidy_sl.cpp index f6d650468c..d796bda1a0 100644 --- a/src/saveload/subsidy_sl.cpp +++ b/src/saveload/subsidy_sl.cpp @@ -22,9 +22,9 @@ static const SaveLoad _subsidies_desc[] = { SLE_CONDVAR(Subsidy, awarded, SLE_UINT8, 125, SL_MAX_VERSION), SLE_CONDVAR(Subsidy, src_type, SLE_UINT8, 125, SL_MAX_VERSION), SLE_CONDVAR(Subsidy, dst_type, SLE_UINT8, 125, SL_MAX_VERSION), - SLE_CONDVAR(Subsidy, src, SLE_FILE_U8 | SLE_VAR_U16, 0, 4), + SLE_CONDVAR(Subsidy, src, SLE_FILE_U8 | SLE_VAR_U16, 0, 5), SLE_CONDVAR(Subsidy, src, SLE_UINT16, 5, SL_MAX_VERSION), - SLE_CONDVAR(Subsidy, dst, SLE_FILE_U8 | SLE_VAR_U16, 0, 4), + SLE_CONDVAR(Subsidy, dst, SLE_FILE_U8 | SLE_VAR_U16, 0, 5), SLE_CONDVAR(Subsidy, dst, SLE_UINT16, 5, SL_MAX_VERSION), SLE_END() }; diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp index 13438d85bf..8a8d4a9f7c 100644 --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -116,12 +116,12 @@ void UpdateHousesAndTowns() /** Save and load of towns. */ static const SaveLoad _town_desc[] = { - SLE_CONDVAR(Town, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), + SLE_CONDVAR(Town, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), SLE_CONDVAR(Town, xy, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDNULL(2, 0, 2), ///< population, no longer in use - SLE_CONDNULL(4, 3, 84), ///< population, no longer in use - SLE_CONDNULL(2, 0, 91), ///< num_houses, no longer in use + SLE_CONDNULL(2, 0, 3), ///< population, no longer in use + SLE_CONDNULL(4, 3, 85), ///< population, no longer in use + SLE_CONDNULL(2, 0, 92), ///< num_houses, no longer in use SLE_CONDVAR(Town, townnamegrfid, SLE_UINT32, 66, SL_MAX_VERSION), SLE_VAR(Town, townnametype, SLE_UINT16), @@ -129,56 +129,56 @@ static const SaveLoad _town_desc[] = { SLE_CONDSTR(Town, name, SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION), SLE_VAR(Town, flags, SLE_UINT8), - SLE_CONDVAR(Town, statues, SLE_FILE_U8 | SLE_VAR_U16, 0, 103), + SLE_CONDVAR(Town, statues, SLE_FILE_U8 | SLE_VAR_U16, 0, 104), SLE_CONDVAR(Town, statues, SLE_UINT16, 104, SL_MAX_VERSION), - SLE_CONDNULL(1, 0, 1), ///< sort_index, no longer in use + SLE_CONDNULL(1, 0, 2), ///< sort_index, no longer in use - SLE_CONDVAR(Town, have_ratings, SLE_FILE_U8 | SLE_VAR_U16, 0, 103), + SLE_CONDVAR(Town, have_ratings, SLE_FILE_U8 | SLE_VAR_U16, 0, 104), SLE_CONDVAR(Town, have_ratings, SLE_UINT16, 104, SL_MAX_VERSION), - SLE_CONDARR(Town, ratings, SLE_INT16, 8, 0, 103), + SLE_CONDARR(Town, ratings, SLE_INT16, 8, 0, 104), SLE_CONDARR(Town, ratings, SLE_INT16, MAX_COMPANIES, 104, SL_MAX_VERSION), /* failed bribe attempts are stored since savegame format 4 */ - SLE_CONDARR(Town, unwanted, SLE_INT8, 8, 4, 103), + SLE_CONDARR(Town, unwanted, SLE_INT8, 8, 4, 104), SLE_CONDARR(Town, unwanted, SLE_INT8, MAX_COMPANIES, 104, SL_MAX_VERSION), - SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_max, SLE_FILE_U16 | SLE_VAR_U32, 0, 8), - SLE_CONDVAR(Town, supplied[CT_MAIL].old_max, SLE_FILE_U16 | SLE_VAR_U32, 0, 8), - SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_max, SLE_FILE_U16 | SLE_VAR_U32, 0, 8), - SLE_CONDVAR(Town, supplied[CT_MAIL].new_max, SLE_FILE_U16 | SLE_VAR_U32, 0, 8), - SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_act, SLE_FILE_U16 | SLE_VAR_U32, 0, 8), - SLE_CONDVAR(Town, supplied[CT_MAIL].old_act, SLE_FILE_U16 | SLE_VAR_U32, 0, 8), - SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_FILE_U16 | SLE_VAR_U32, 0, 8), - SLE_CONDVAR(Town, supplied[CT_MAIL].new_act, SLE_FILE_U16 | SLE_VAR_U32, 0, 8), + SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_max, SLE_FILE_U16 | SLE_VAR_U32, 0, 9), + SLE_CONDVAR(Town, supplied[CT_MAIL].old_max, SLE_FILE_U16 | SLE_VAR_U32, 0, 9), + SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_max, SLE_FILE_U16 | SLE_VAR_U32, 0, 9), + SLE_CONDVAR(Town, supplied[CT_MAIL].new_max, SLE_FILE_U16 | SLE_VAR_U32, 0, 9), + SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_act, SLE_FILE_U16 | SLE_VAR_U32, 0, 9), + SLE_CONDVAR(Town, supplied[CT_MAIL].old_act, SLE_FILE_U16 | SLE_VAR_U32, 0, 9), + SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_FILE_U16 | SLE_VAR_U32, 0, 9), + SLE_CONDVAR(Town, supplied[CT_MAIL].new_act, SLE_FILE_U16 | SLE_VAR_U32, 0, 9), - SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_max, SLE_UINT32, 9, 164), - SLE_CONDVAR(Town, supplied[CT_MAIL].old_max, SLE_UINT32, 9, 164), - SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_max, SLE_UINT32, 9, 164), - SLE_CONDVAR(Town, supplied[CT_MAIL].new_max, SLE_UINT32, 9, 164), - SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_act, SLE_UINT32, 9, 164), - SLE_CONDVAR(Town, supplied[CT_MAIL].old_act, SLE_UINT32, 9, 164), - SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_UINT32, 9, 164), - SLE_CONDVAR(Town, supplied[CT_MAIL].new_act, SLE_UINT32, 9, 164), + SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_max, SLE_UINT32, 9, 165), + SLE_CONDVAR(Town, supplied[CT_MAIL].old_max, SLE_UINT32, 9, 165), + SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_max, SLE_UINT32, 9, 165), + SLE_CONDVAR(Town, supplied[CT_MAIL].new_max, SLE_UINT32, 9, 165), + SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_act, SLE_UINT32, 9, 165), + SLE_CONDVAR(Town, supplied[CT_MAIL].old_act, SLE_UINT32, 9, 165), + SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_UINT32, 9, 165), + SLE_CONDVAR(Town, supplied[CT_MAIL].new_act, SLE_UINT32, 9, 165), - SLE_CONDNULL(2, 0, 163), ///< pct_pass_transported / pct_mail_transported, now computed on the fly + SLE_CONDNULL(2, 0, 164), ///< pct_pass_transported / pct_mail_transported, now computed on the fly - SLE_CONDVAR(Town, received[TE_FOOD].old_act, SLE_UINT16, 0, 164), - SLE_CONDVAR(Town, received[TE_WATER].old_act, SLE_UINT16, 0, 164), - SLE_CONDVAR(Town, received[TE_FOOD].new_act, SLE_UINT16, 0, 164), - SLE_CONDVAR(Town, received[TE_WATER].new_act, SLE_UINT16, 0, 164), + SLE_CONDVAR(Town, received[TE_FOOD].old_act, SLE_UINT16, 0, 165), + SLE_CONDVAR(Town, received[TE_WATER].old_act, SLE_UINT16, 0, 165), + SLE_CONDVAR(Town, received[TE_FOOD].new_act, SLE_UINT16, 0, 165), + SLE_CONDVAR(Town, received[TE_WATER].new_act, SLE_UINT16, 0, 165), SLE_CONDARR(Town, goal, SLE_UINT32, NUM_TE, 165, SL_MAX_VERSION), SLE_CONDSTR(Town, text, SLE_STR | SLF_ALLOW_CONTROL, 0, 168, SL_MAX_VERSION), - SLE_CONDVAR(Town, time_until_rebuild, SLE_FILE_U8 | SLE_VAR_U16, 0, 53), - SLE_CONDVAR(Town, grow_counter, SLE_FILE_U8 | SLE_VAR_U16, 0, 53), - SLE_CONDVAR(Town, growth_rate, SLE_FILE_U8 | SLE_VAR_I16, 0, 53), + SLE_CONDVAR(Town, time_until_rebuild, SLE_FILE_U8 | SLE_VAR_U16, 0, 54), + SLE_CONDVAR(Town, grow_counter, SLE_FILE_U8 | SLE_VAR_U16, 0, 54), + SLE_CONDVAR(Town, growth_rate, SLE_FILE_U8 | SLE_VAR_I16, 0, 54), SLE_CONDVAR(Town, time_until_rebuild, SLE_UINT16, 54, SL_MAX_VERSION), SLE_CONDVAR(Town, grow_counter, SLE_UINT16, 54, SL_MAX_VERSION), - SLE_CONDVAR(Town, growth_rate, SLE_FILE_I16 | SLE_VAR_U16, 54, 164), + SLE_CONDVAR(Town, growth_rate, SLE_FILE_I16 | SLE_VAR_U16, 54, 165), SLE_CONDVAR(Town, growth_rate, SLE_UINT16, 165, SL_MAX_VERSION), SLE_VAR(Town, fund_buildings_months, SLE_UINT8), @@ -192,7 +192,7 @@ static const SaveLoad _town_desc[] = { SLE_CONDLST(Town, psa_list, REF_STORAGE, 161, SL_MAX_VERSION), - SLE_CONDVAR(Town, cargo_produced, SLE_FILE_U32 | SLE_VAR_U64, 166, 198), + SLE_CONDVAR(Town, cargo_produced, SLE_FILE_U32 | SLE_VAR_U64, 166, 199), SLE_CONDVAR(Town, cargo_produced, SLE_UINT64, 199, SL_MAX_VERSION), /* reserve extra space in savegame here. (currently 30 bytes) */ diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 2f3ace415a..e2816e8d83 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -586,49 +586,49 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_VAR(Vehicle, subtype, SLE_UINT8), SLE_REF(Vehicle, next, REF_VEHICLE_OLD), - SLE_CONDVAR(Vehicle, name, SLE_NAME, 0, 83), + SLE_CONDVAR(Vehicle, name, SLE_NAME, 0, 84), SLE_CONDSTR(Vehicle, name, SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, unitnumber, SLE_FILE_U8 | SLE_VAR_U16, 0, 7), + SLE_CONDVAR(Vehicle, unitnumber, SLE_FILE_U8 | SLE_VAR_U16, 0, 8), SLE_CONDVAR(Vehicle, unitnumber, SLE_UINT16, 8, SL_MAX_VERSION), SLE_VAR(Vehicle, owner, SLE_UINT8), - SLE_CONDVAR(Vehicle, tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), + SLE_CONDVAR(Vehicle, tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), SLE_CONDVAR(Vehicle, tile, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, dest_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), + SLE_CONDVAR(Vehicle, dest_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), SLE_CONDVAR(Vehicle, dest_tile, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, x_pos, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), + SLE_CONDVAR(Vehicle, x_pos, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), SLE_CONDVAR(Vehicle, x_pos, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), + SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), SLE_CONDVAR(Vehicle, y_pos, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, 0, 163), + SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, 0, 164), SLE_CONDVAR(Vehicle, z_pos, SLE_INT32, 164, SL_MAX_VERSION), SLE_VAR(Vehicle, direction, SLE_UINT8), - SLE_CONDNULL(2, 0, 57), + SLE_CONDNULL(2, 0, 58), SLE_VAR(Vehicle, spritenum, SLE_UINT8), - SLE_CONDNULL(5, 0, 57), + SLE_CONDNULL(5, 0, 58), SLE_VAR(Vehicle, engine_type, SLE_UINT16), - SLE_CONDNULL(2, 0, 151), + SLE_CONDNULL(2, 0, 152), SLE_VAR(Vehicle, cur_speed, SLE_UINT16), SLE_VAR(Vehicle, subspeed, SLE_UINT8), SLE_VAR(Vehicle, acceleration, SLE_UINT8), SLE_VAR(Vehicle, progress, SLE_UINT8), SLE_VAR(Vehicle, vehstatus, SLE_UINT8), - SLE_CONDVAR(Vehicle, last_station_visited, SLE_FILE_U8 | SLE_VAR_U16, 0, 4), + SLE_CONDVAR(Vehicle, last_station_visited, SLE_FILE_U8 | SLE_VAR_U16, 0, 5), SLE_CONDVAR(Vehicle, last_station_visited, SLE_UINT16, 5, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, last_loading_station, SLE_UINT16, 182, SL_MAX_VERSION), SLE_VAR(Vehicle, cargo_type, SLE_UINT8), SLE_CONDVAR(Vehicle, cargo_subtype, SLE_UINT8, 35, SL_MAX_VERSION), - SLEG_CONDVAR( _cargo_days, SLE_UINT8, 0, 67), - SLEG_CONDVAR( _cargo_source, SLE_FILE_U8 | SLE_VAR_U16, 0, 6), - SLEG_CONDVAR( _cargo_source, SLE_UINT16, 7, 67), - SLEG_CONDVAR( _cargo_source_xy, SLE_UINT32, 44, 67), + SLEG_CONDVAR( _cargo_days, SLE_UINT8, 0, 68), + SLEG_CONDVAR( _cargo_source, SLE_FILE_U8 | SLE_VAR_U16, 0, 7), + SLEG_CONDVAR( _cargo_source, SLE_UINT16, 7, 68), + SLEG_CONDVAR( _cargo_source_xy, SLE_UINT32, 44, 68), SLE_VAR(Vehicle, cargo_cap, SLE_UINT16), SLE_CONDVAR(Vehicle, refit_cap, SLE_UINT16, 182, SL_MAX_VERSION), - SLEG_CONDVAR( _cargo_count, SLE_UINT16, 0, 67), + SLEG_CONDVAR( _cargo_count, SLE_UINT16, 0, 68), SLE_CONDLST(Vehicle, cargo.packets, REF_CARGO_PACKET, 68, SL_MAX_VERSION), SLE_CONDARR(Vehicle, cargo.action_counts, SLE_UINT, VehicleCargoList::NUM_MOVE_TO_ACTION, 181, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, cargo_age_counter, SLE_UINT16, 162, SL_MAX_VERSION), @@ -640,13 +640,13 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_VAR(Vehicle, cur_implicit_order_index, SLE_UINT8), SLE_CONDVAR(Vehicle, cur_real_order_index, SLE_UINT8, 158, SL_MAX_VERSION), /* num_orders is now part of OrderList and is not saved but counted */ - SLE_CONDNULL(1, 0, 104), + SLE_CONDNULL(1, 0, 105), /* This next line is for version 4 and prior compatibility.. it temporarily reads type and flags (which were both 4 bits) into type. Later on this is converted correctly */ - SLE_CONDVAR(Vehicle, current_order.type, SLE_UINT8, 0, 4), - SLE_CONDVAR(Vehicle, current_order.dest, SLE_FILE_U8 | SLE_VAR_U16, 0, 4), + SLE_CONDVAR(Vehicle, current_order.type, SLE_UINT8, 0, 5), + SLE_CONDVAR(Vehicle, current_order.dest, SLE_FILE_U8 | SLE_VAR_U16, 0, 5), /* Orders for version 5 and on */ SLE_CONDVAR(Vehicle, current_order.type, SLE_UINT8, 5, SL_MAX_VERSION), @@ -655,7 +655,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) /* Refit in current order */ SLE_CONDVAR(Vehicle, current_order.refit_cargo, SLE_UINT8, 36, SL_MAX_VERSION), - SLE_CONDNULL(1, 36, 181), // refit_subtype + SLE_CONDNULL(1, 36, 182), // refit_subtype /* Timetable in current order */ SLE_CONDVAR(Vehicle, current_order.wait_time, SLE_UINT16, 67, SL_MAX_VERSION), @@ -663,17 +663,17 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_CONDVAR(Vehicle, current_order.max_speed, SLE_UINT16, 174, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, timetable_start, SLE_INT32, 129, SL_MAX_VERSION), - SLE_CONDREF(Vehicle, orders, REF_ORDER, 0, 104), + SLE_CONDREF(Vehicle, orders, REF_ORDER, 0, 105), SLE_CONDREF(Vehicle, orders, REF_ORDERLIST, 105, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, age, SLE_FILE_U16 | SLE_VAR_I32, 0, 30), + SLE_CONDVAR(Vehicle, age, SLE_FILE_U16 | SLE_VAR_I32, 0, 31), SLE_CONDVAR(Vehicle, age, SLE_INT32, 31, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, max_age, SLE_FILE_U16 | SLE_VAR_I32, 0, 30), + SLE_CONDVAR(Vehicle, max_age, SLE_FILE_U16 | SLE_VAR_I32, 0, 31), SLE_CONDVAR(Vehicle, max_age, SLE_INT32, 31, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, date_of_last_service, SLE_FILE_U16 | SLE_VAR_I32, 0, 30), + SLE_CONDVAR(Vehicle, date_of_last_service, SLE_FILE_U16 | SLE_VAR_I32, 0, 31), SLE_CONDVAR(Vehicle, date_of_last_service, SLE_INT32, 31, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, service_interval, SLE_UINT16, 0, 30), - SLE_CONDVAR(Vehicle, service_interval, SLE_FILE_U32 | SLE_VAR_U16, 31, 179), + SLE_CONDVAR(Vehicle, service_interval, SLE_UINT16, 0, 31), + SLE_CONDVAR(Vehicle, service_interval, SLE_FILE_U32 | SLE_VAR_U16, 31, 180), SLE_CONDVAR(Vehicle, service_interval, SLE_UINT16, 180, SL_MAX_VERSION), SLE_VAR(Vehicle, reliability, SLE_UINT16), SLE_VAR(Vehicle, reliability_spd_dec, SLE_UINT16), @@ -681,37 +681,37 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_VAR(Vehicle, breakdown_delay, SLE_UINT8), SLE_VAR(Vehicle, breakdowns_since_last_service, SLE_UINT8), SLE_VAR(Vehicle, breakdown_chance, SLE_UINT8), - SLE_CONDVAR(Vehicle, build_year, SLE_FILE_U8 | SLE_VAR_I32, 0, 30), + SLE_CONDVAR(Vehicle, build_year, SLE_FILE_U8 | SLE_VAR_I32, 0, 31), SLE_CONDVAR(Vehicle, build_year, SLE_INT32, 31, SL_MAX_VERSION), SLE_VAR(Vehicle, load_unload_ticks, SLE_UINT16), SLEG_CONDVAR( _cargo_paid_for, SLE_UINT16, 45, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, vehicle_flags, SLE_FILE_U8 | SLE_VAR_U16, 40, 179), + SLE_CONDVAR(Vehicle, vehicle_flags, SLE_FILE_U8 | SLE_VAR_U16, 40, 180), SLE_CONDVAR(Vehicle, vehicle_flags, SLE_UINT16, 180, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, profit_this_year, SLE_FILE_I32 | SLE_VAR_I64, 0, 64), + SLE_CONDVAR(Vehicle, profit_this_year, SLE_FILE_I32 | SLE_VAR_I64, 0, 65), SLE_CONDVAR(Vehicle, profit_this_year, SLE_INT64, 65, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, profit_last_year, SLE_FILE_I32 | SLE_VAR_I64, 0, 64), + SLE_CONDVAR(Vehicle, profit_last_year, SLE_FILE_I32 | SLE_VAR_I64, 0, 65), SLE_CONDVAR(Vehicle, profit_last_year, SLE_INT64, 65, SL_MAX_VERSION), - SLEG_CONDVAR( _cargo_feeder_share, SLE_FILE_I32 | SLE_VAR_I64, 51, 64), - SLEG_CONDVAR( _cargo_feeder_share, SLE_INT64, 65, 67), - SLEG_CONDVAR( _cargo_loaded_at_xy, SLE_UINT32, 51, 67), - SLE_CONDVAR(Vehicle, value, SLE_FILE_I32 | SLE_VAR_I64, 0, 64), + SLEG_CONDVAR( _cargo_feeder_share, SLE_FILE_I32 | SLE_VAR_I64, 51, 65), + SLEG_CONDVAR( _cargo_feeder_share, SLE_INT64, 65, 68), + SLEG_CONDVAR( _cargo_loaded_at_xy, SLE_UINT32, 51, 68), + SLE_CONDVAR(Vehicle, value, SLE_FILE_I32 | SLE_VAR_I64, 0, 65), SLE_CONDVAR(Vehicle, value, SLE_INT64, 65, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, random_bits, SLE_UINT8, 2, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, waiting_triggers, SLE_UINT8, 2, SL_MAX_VERSION), SLE_CONDREF(Vehicle, next_shared, REF_VEHICLE, 2, SL_MAX_VERSION), - SLE_CONDNULL(2, 2, 68), - SLE_CONDNULL(4, 69, 100), + SLE_CONDNULL(2, 2, 69), + SLE_CONDNULL(4, 69, 101), SLE_CONDVAR(Vehicle, group_id, SLE_UINT16, 60, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, current_order_time, SLE_UINT32, 67, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, lateness_counter, SLE_INT32, 67, SL_MAX_VERSION), - SLE_CONDNULL(10, 2, 143), // old reserved space + SLE_CONDNULL(10, 2, 144), // old reserved space SLE_END() }; @@ -725,15 +725,15 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_VAR(Train, railtype, SLE_UINT8), SLE_VAR(Train, track, SLE_UINT8), - SLE_CONDVAR(Train, flags, SLE_FILE_U8 | SLE_VAR_U16, 2, 99), + SLE_CONDVAR(Train, flags, SLE_FILE_U8 | SLE_VAR_U16, 2, 100), SLE_CONDVAR(Train, flags, SLE_UINT16, 100, SL_MAX_VERSION), - SLE_CONDNULL(2, 2, 59), + SLE_CONDNULL(2, 2, 60), SLE_CONDVAR(Train, wait_counter, SLE_UINT16, 136, SL_MAX_VERSION), - SLE_CONDNULL(2, 2, 19), + SLE_CONDNULL(2, 2, 20), SLE_CONDVAR(Train, gv_flags, SLE_UINT16, 139, SL_MAX_VERSION), - SLE_CONDNULL(11, 2, 143), // old reserved space + SLE_CONDNULL(11, 2, 144), // old reserved space SLE_END() }; @@ -749,11 +749,11 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_VAR(RoadVehicle, crashed_ctr, SLE_UINT16), SLE_VAR(RoadVehicle, reverse_ctr, SLE_UINT8), - SLE_CONDNULL(2, 6, 68), + SLE_CONDNULL(2, 6, 69), SLE_CONDVAR(RoadVehicle, gv_flags, SLE_UINT16, 139, SL_MAX_VERSION), - SLE_CONDNULL(4, 69, 130), - SLE_CONDNULL(2, 6, 130), - SLE_CONDNULL(16, 2, 143), // old reserved space + SLE_CONDNULL(4, 69, 131), + SLE_CONDNULL(2, 6, 131), + SLE_CONDNULL(16, 2, 144), // old reserved space SLE_END() }; @@ -765,7 +765,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_CONDDEQUE(Ship, path, SLE_UINT8, 203, SL_MAX_VERSION), SLE_CONDVAR(Ship, rotation, SLE_UINT8, 204, SL_MAX_VERSION), - SLE_CONDNULL(16, 2, 143), // old reserved space + SLE_CONDNULL(16, 2, 144), // old reserved space SLE_END() }; @@ -776,7 +776,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_VAR(Aircraft, crashed_counter, SLE_UINT16), SLE_VAR(Aircraft, pos, SLE_UINT8), - SLE_CONDVAR(Aircraft, targetairport, SLE_FILE_U8 | SLE_VAR_U16, 0, 4), + SLE_CONDVAR(Aircraft, targetairport, SLE_FILE_U8 | SLE_VAR_U16, 0, 5), SLE_CONDVAR(Aircraft, targetairport, SLE_UINT16, 5, SL_MAX_VERSION), SLE_VAR(Aircraft, state, SLE_UINT8), @@ -788,7 +788,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_CONDVAR(Aircraft, turn_counter, SLE_UINT8, 136, SL_MAX_VERSION), SLE_CONDVAR(Aircraft, flags, SLE_UINT8, 167, SL_MAX_VERSION), - SLE_CONDNULL(13, 2, 143), // old reserved space + SLE_CONDNULL(13, 2, 144), // old reserved space SLE_END() }; @@ -798,18 +798,18 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_VAR(Vehicle, subtype, SLE_UINT8), - SLE_CONDVAR(Vehicle, tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), + SLE_CONDVAR(Vehicle, tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), SLE_CONDVAR(Vehicle, tile, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, x_pos, SLE_FILE_I16 | SLE_VAR_I32, 0, 5), + SLE_CONDVAR(Vehicle, x_pos, SLE_FILE_I16 | SLE_VAR_I32, 0, 6), SLE_CONDVAR(Vehicle, x_pos, SLE_INT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_I16 | SLE_VAR_I32, 0, 5), + SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_I16 | SLE_VAR_I32, 0, 6), SLE_CONDVAR(Vehicle, y_pos, SLE_INT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, 0, 163), + SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, 0, 164), SLE_CONDVAR(Vehicle, z_pos, SLE_INT32, 164, SL_MAX_VERSION), SLE_VAR(Vehicle, sprite_seq.seq[0].sprite, SLE_FILE_U16 | SLE_VAR_U32), - SLE_CONDNULL(5, 0, 57), + SLE_CONDNULL(5, 0, 59), SLE_VAR(Vehicle, progress, SLE_UINT8), SLE_VAR(Vehicle, vehstatus, SLE_UINT8), @@ -818,7 +818,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_CONDVAR(Vehicle, spritenum, SLE_UINT8, 2, SL_MAX_VERSION), - SLE_CONDNULL(15, 2, 143), // old reserved space + SLE_CONDNULL(15, 2, 144), // old reserved space SLE_END() }; @@ -829,37 +829,37 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_REF(Vehicle, next, REF_VEHICLE_OLD), SLE_VAR(Vehicle, subtype, SLE_UINT8), - SLE_CONDVAR(Vehicle, tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), + SLE_CONDVAR(Vehicle, tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), SLE_CONDVAR(Vehicle, tile, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, dest_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), + SLE_CONDVAR(Vehicle, dest_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), SLE_CONDVAR(Vehicle, dest_tile, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, x_pos, SLE_FILE_I16 | SLE_VAR_I32, 0, 5), + SLE_CONDVAR(Vehicle, x_pos, SLE_FILE_I16 | SLE_VAR_I32, 0, 6), SLE_CONDVAR(Vehicle, x_pos, SLE_INT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_I16 | SLE_VAR_I32, 0, 5), + SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_I16 | SLE_VAR_I32, 0, 6), SLE_CONDVAR(Vehicle, y_pos, SLE_INT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, 0, 163), + SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, 0, 164), SLE_CONDVAR(Vehicle, z_pos, SLE_INT32, 164, SL_MAX_VERSION), SLE_VAR(Vehicle, direction, SLE_UINT8), - SLE_CONDNULL(5, 0, 57), + SLE_CONDNULL(5, 0, 58), SLE_VAR(Vehicle, owner, SLE_UINT8), SLE_VAR(Vehicle, vehstatus, SLE_UINT8), - SLE_CONDVAR(Vehicle, current_order.dest, SLE_FILE_U8 | SLE_VAR_U16, 0, 4), + SLE_CONDVAR(Vehicle, current_order.dest, SLE_FILE_U8 | SLE_VAR_U16, 0, 5), SLE_CONDVAR(Vehicle, current_order.dest, SLE_UINT16, 5, SL_MAX_VERSION), SLE_VAR(Vehicle, sprite_seq.seq[0].sprite, SLE_FILE_U16 | SLE_VAR_U32), - SLE_CONDVAR(Vehicle, age, SLE_FILE_U16 | SLE_VAR_I32, 0, 30), + SLE_CONDVAR(Vehicle, age, SLE_FILE_U16 | SLE_VAR_I32, 0, 31), SLE_CONDVAR(Vehicle, age, SLE_INT32, 31, SL_MAX_VERSION), SLE_VAR(Vehicle, tick_counter, SLE_UINT8), - SLE_CONDVAR(DisasterVehicle, image_override, SLE_FILE_U16 | SLE_VAR_U32, 0, 190), + SLE_CONDVAR(DisasterVehicle, image_override, SLE_FILE_U16 | SLE_VAR_U32, 0, 191), SLE_CONDVAR(DisasterVehicle, image_override, SLE_UINT32, 191, SL_MAX_VERSION), - SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target, SLE_FILE_U16 | SLE_VAR_U32, 0, 190), + SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target, SLE_FILE_U16 | SLE_VAR_U32, 0, 191), SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target, SLE_UINT32, 191, SL_MAX_VERSION), SLE_CONDVAR(DisasterVehicle, flags, SLE_UINT8, 194, SL_MAX_VERSION), - SLE_CONDNULL(16, 2, 143), // old reserved space + SLE_CONDNULL(16, 2, 144), // old reserved space SLE_END() }; diff --git a/src/saveload/waypoint_sl.cpp b/src/saveload/waypoint_sl.cpp index 0f93969853..c525566b8a 100644 --- a/src/saveload/waypoint_sl.cpp +++ b/src/saveload/waypoint_sl.cpp @@ -150,17 +150,17 @@ void MoveWaypointsToBaseStations() } static const SaveLoad _old_waypoint_desc[] = { - SLE_CONDVAR(OldWaypoint, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), + SLE_CONDVAR(OldWaypoint, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), SLE_CONDVAR(OldWaypoint, xy, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(OldWaypoint, town_index, SLE_UINT16, 12, 121), + SLE_CONDVAR(OldWaypoint, town_index, SLE_UINT16, 12, 122), SLE_CONDREF(OldWaypoint, town, REF_TOWN, 122, SL_MAX_VERSION), - SLE_CONDVAR(OldWaypoint, town_cn, SLE_FILE_U8 | SLE_VAR_U16, 12, 88), + SLE_CONDVAR(OldWaypoint, town_cn, SLE_FILE_U8 | SLE_VAR_U16, 12, 89), SLE_CONDVAR(OldWaypoint, town_cn, SLE_UINT16, 89, SL_MAX_VERSION), - SLE_CONDVAR(OldWaypoint, string_id, SLE_STRINGID, 0, 83), + SLE_CONDVAR(OldWaypoint, string_id, SLE_STRINGID, 0, 84), SLE_CONDSTR(OldWaypoint, name, SLE_STR, 0, 84, SL_MAX_VERSION), SLE_VAR(OldWaypoint, delete_ctr, SLE_UINT8), - SLE_CONDVAR(OldWaypoint, build_date, SLE_FILE_U16 | SLE_VAR_I32, 3, 30), + SLE_CONDVAR(OldWaypoint, build_date, SLE_FILE_U16 | SLE_VAR_I32, 3, 31), SLE_CONDVAR(OldWaypoint, build_date, SLE_INT32, 31, SL_MAX_VERSION), SLE_CONDVAR(OldWaypoint, localidx, SLE_UINT8, 3, SL_MAX_VERSION), SLE_CONDVAR(OldWaypoint, grfid, SLE_UINT32, 17, SL_MAX_VERSION), diff --git a/src/table/gameopt_settings.ini b/src/table/gameopt_settings.ini index 3a47c09e33..ef38b15ff0 100644 --- a/src/table/gameopt_settings.ini +++ b/src/table/gameopt_settings.ini @@ -77,7 +77,7 @@ def = 0 min = 0 max = 0 full = NULL -to = 3 +to = 4 [SDTG_GENERAL] name = ""diff_custom"" @@ -152,16 +152,16 @@ type = SLE_UINT8 def = DEF_SNOWLINE_HEIGHT * TILE_HEIGHT min = MIN_SNOWLINE_HEIGHT * TILE_HEIGHT max = MAX_SNOWLINE_HEIGHT * TILE_HEIGHT -to = 21 +to = 22 [SDT_NULL] length = 1 from = 22 -to = 164 +to = 165 [SDT_NULL] length = 1 -to = 22 +to = 23 [SDTC_OMANY] var = gui.autosave diff --git a/src/table/settings.ini b/src/table/settings.ini index 7afdd80801..0d3109ad5f 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -112,7 +112,7 @@ cat = SC_BASIC [SDT_NULL] length = 1 from = 97 -to = 109 +to = 110 [SDT_VAR] base = GameSettings @@ -204,7 +204,7 @@ cat = SC_BASIC [SDT_NULL] length = 1 from = 97 -to = 109 +to = 110 [SDT_VAR] base = GameSettings @@ -324,7 +324,7 @@ var = _old_diff_level type = SLE_UINT8 flags = SLF_NOT_IN_CONFIG from = 97 -to = 177 +to = 178 def = 3 min = 0 max = 3 @@ -362,7 +362,7 @@ cat = SC_BASIC [SDT_NULL] length = 1 from = 97 -to = 163 +to = 164 [SDT_OMANY] base = GameSettings @@ -545,7 +545,7 @@ strval = STR_CONFIG_SETTING_TILE_LENGTH # construction.longbridges [SDT_NULL] length = 1 -to = 158 +to = 159 [SDT_VAR] base = GameSettings @@ -841,7 +841,7 @@ cat = SC_BASIC ; vehicle.mammoth_trains [SDT_NULL] length = 1 -to = 158 +to = 159 [SDT_VAR] base = GameSettings @@ -859,7 +859,7 @@ strval = STR_CONFIG_SETTING_NONE ; order.gotodepot [SDT_NULL] length = 1 -to = 158 +to = 159 ; path finder @@ -872,7 +872,7 @@ cat = SC_EXPERT [SDT_BOOL] base = GameSettings var = pf.new_pathfinding_all -to = 86 +to = 87 def = false cat = SC_EXPERT @@ -880,7 +880,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.ship_use_yapf from = 28 -to = 86 +to = 87 def = false cat = SC_EXPERT @@ -888,7 +888,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.road_use_yapf from = 28 -to = 86 +to = 87 def = true cat = SC_EXPERT @@ -896,7 +896,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_use_yapf from = 28 -to = 86 +to = 87 def = true cat = SC_EXPERT @@ -1012,7 +1012,7 @@ name = NULL guiflags = SGF_NO_NETWORK var = _old_vds.servint_ispercent def = false -to = 119 +to = 120 [SDTG_VAR] name = NULL @@ -1022,7 +1022,7 @@ var = _old_vds.servint_trains def = 150 min = 5 max = 800 -to = 119 +to = 120 [SDTG_VAR] name = NULL @@ -1032,7 +1032,7 @@ var = _old_vds.servint_roadveh def = 150 min = 5 max = 800 -to = 119 +to = 120 [SDTG_VAR] name = NULL @@ -1042,7 +1042,7 @@ var = _old_vds.servint_ships def = 360 min = 5 max = 800 -to = 119 +to = 120 [SDTG_VAR] name = NULL @@ -1052,7 +1052,7 @@ var = _old_vds.servint_aircraft def = 150 min = 5 max = 800 -to = 119 +to = 120 [SDT_BOOL] base = GameSettings @@ -1100,7 +1100,7 @@ proc = UpdateConsists [SDT_NULL] length = 1 from = 67 -to = 158 +to = 159 [SDT_VAR] base = GameSettings @@ -1142,12 +1142,12 @@ cat = SC_BASIC ; station.join_stations [SDT_NULL] length = 1 -to = 158 +to = 159 [SDTC_BOOL] var = gui.sg_full_load_any from = 22 -to = 92 +to = 93 def = true [SDT_BOOL] @@ -1166,13 +1166,13 @@ cat = SC_EXPERT [SDTC_BOOL] var = gui.sg_new_nonstop from = 22 -to = 92 +to = 93 def = false ; station.nonuniform_stations [SDT_NULL] length = 1 -to = 158 +to = 159 [SDT_VAR] base = GameSettings @@ -1301,7 +1301,7 @@ strhelp = STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT [SDT_NULL] length = 1 -to = 140 +to = 141 [SDT_BOOL] base = GameSettings @@ -1366,7 +1366,7 @@ cat = SC_BASIC [SDT_NULL] length = 4 -to = 143 +to = 144 [SDT_VAR] base = GameSettings @@ -1382,7 +1382,7 @@ cat = SC_BASIC [SDT_NULL] length = 4 -to = 104 +to = 105 [SDT_BOOL] base = GameSettings @@ -1464,7 +1464,7 @@ cat = SC_EXPERT ; previously ai-new setting. [SDT_NULL] length = 1 -to = 106 +to = 107 [SDT_OMANY] base = GameSettings @@ -2373,7 +2373,7 @@ name = ""units"" var = _old_units type = SLE_UINT8 from = 97 -to = 183 +to = 184 flags = SLF_NOT_IN_CONFIG def = 1 max = 2 From 9de12521ecec338160c37920e65fd02c0c742bef Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 26 Jan 2019 01:48:40 +0000 Subject: [PATCH 293/622] Codechange: Convert saveload numbers to enum values. (This was mostly achieved with a few in-place regexes) --- src/saveload/afterload.cpp | 294 ++++++++++++------------ src/saveload/ai_sl.cpp | 4 +- src/saveload/animated_tile_sl.cpp | 4 +- src/saveload/autoreplace_sl.cpp | 8 +- src/saveload/cargopacket_sl.cpp | 14 +- src/saveload/company_sl.cpp | 190 +++++++-------- src/saveload/depot_sl.cpp | 18 +- src/saveload/economy_sl.cpp | 26 +-- src/saveload/engine_sl.cpp | 30 +-- src/saveload/goal_sl.cpp | 4 +- src/saveload/group_sl.cpp | 18 +- src/saveload/industry_sl.cpp | 76 +++--- src/saveload/linkgraph_sl.cpp | 10 +- src/saveload/map_sl.cpp | 8 +- src/saveload/misc_sl.cpp | 66 +++--- src/saveload/newgrf_sl.cpp | 6 +- src/saveload/object_sl.cpp | 8 +- src/saveload/order_sl.cpp | 46 ++-- src/saveload/saveload.cpp | 243 +------------------- src/saveload/saveload.h | 321 ++++++++++++++++++++++++-- src/saveload/signs_sl.cpp | 22 +- src/saveload/station_sl.cpp | 164 ++++++------- src/saveload/storage_sl.cpp | 6 +- src/saveload/story_sl.cpp | 18 +- src/saveload/strings_sl.cpp | 2 +- src/saveload/subsidy_sl.cpp | 14 +- src/saveload/town_sl.cpp | 132 +++++------ src/saveload/vehicle_sl.cpp | 294 ++++++++++++------------ src/saveload/waypoint_sl.cpp | 36 +-- src/settings.cpp | 2 +- src/table/company_settings.ini | 2 +- src/table/currency_settings.ini | 2 +- src/table/gameopt_settings.ini | 16 +- src/table/misc_settings.ini | 2 +- src/table/settings.ini | 368 +++++++++++++++--------------- src/table/win32_settings.ini | 2 +- src/table/window_settings.ini | 2 +- 37 files changed, 1265 insertions(+), 1213 deletions(-) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 077f86bf62..40343b188f 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -533,14 +533,14 @@ bool AfterLoadGame() /* The LFSR used in RunTileLoop iteration cannot have a zeroed state, make it non-zeroed. */ if (_cur_tileloop_tile == 0) _cur_tileloop_tile = 1; - if (IsSavegameVersionBefore(98)) GamelogOldver(); + if (IsSavegameVersionBefore(SLV_98)) GamelogOldver(); GamelogTestRevision(); GamelogTestMode(); - if (IsSavegameVersionBefore(98)) GamelogGRFAddList(_grfconfig); + if (IsSavegameVersionBefore(SLV_98)) GamelogGRFAddList(_grfconfig); - if (IsSavegameVersionBefore(119)) { + if (IsSavegameVersionBefore(SLV_119)) { _pause_mode = (_pause_mode == 2) ? PM_PAUSED_NORMAL : PM_UNPAUSED; } else if (_network_dedicated && (_pause_mode & PM_PAUSED_ERROR) != 0) { DEBUG(net, 0, "The loading savegame was paused due to an error state."); @@ -565,7 +565,7 @@ bool AfterLoadGame() * Because the data stored by TTDPatch are unusable for rail stations > 7x7, * recompute the width and height. Doing this unconditionally for all old * savegames simplifies the code. */ - if (IsSavegameVersionBefore(2)) { + if (IsSavegameVersionBefore(SLV_2)) { Station *st; FOR_ALL_STATIONS(st) { st->train_station.w = st->train_station.h = 0; @@ -583,7 +583,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(194)) { + if (IsSavegameVersionBefore(SLV_194)) { _settings_game.construction.max_heightlevel = 15; /* In old savegame versions, the heightlevel was coded in bits 0..3 of the type field */ @@ -601,19 +601,19 @@ bool AfterLoadGame() } /* in version 2.1 of the savegame, town owner was unified. */ - if (IsSavegameVersionBefore(2, 1)) ConvertTownOwner(); + if (IsSavegameVersionBefore(SLV_2, 1)) ConvertTownOwner(); /* from version 4.1 of the savegame, exclusive rights are stored at towns */ - if (IsSavegameVersionBefore(4, 1)) UpdateExclusiveRights(); + if (IsSavegameVersionBefore(SLV_4, 1)) UpdateExclusiveRights(); /* from version 4.2 of the savegame, currencies are in a different order */ - if (IsSavegameVersionBefore(4, 2)) UpdateCurrencies(); + if (IsSavegameVersionBefore(SLV_4, 2)) UpdateCurrencies(); /* In old version there seems to be a problem that water is owned by * OWNER_NONE, not OWNER_WATER.. I can't replicate it for the current * (4.3) version, so I just check when versions are older, and then * walk through the whole map.. */ - if (IsSavegameVersionBefore(4, 3)) { + if (IsSavegameVersionBefore(SLV_4, 3)) { for (TileIndex t = 0; t < map_size; t++) { if (IsTileType(t, MP_WATER) && GetTileOwner(t) >= MAX_COMPANIES) { SetTileOwner(t, OWNER_WATER); @@ -621,7 +621,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(84)) { + if (IsSavegameVersionBefore(SLV_84)) { Company *c; FOR_ALL_COMPANIES(c) { c->name = CopyFromOldName(c->name_1); @@ -647,7 +647,7 @@ bool AfterLoadGame() /* From this point the old names array is cleared. */ ResetOldNames(); - if (IsSavegameVersionBefore(106)) { + if (IsSavegameVersionBefore(SLV_106)) { /* no station is determined by 'tile == INVALID_TILE' now (instead of '0') */ Station *st; FOR_ALL_STATIONS(st) { @@ -659,7 +659,7 @@ bool AfterLoadGame() /* the same applies to Company::location_of_HQ */ Company *c; FOR_ALL_COMPANIES(c) { - if (c->location_of_HQ == 0 || (IsSavegameVersionBefore(4) && c->location_of_HQ == 0xFFFF)) { + if (c->location_of_HQ == 0 || (IsSavegameVersionBefore(SLV_4) && c->location_of_HQ == 0xFFFF)) { c->location_of_HQ = INVALID_TILE; } } @@ -692,7 +692,7 @@ bool AfterLoadGame() } /* The value of _date_fract got divided, so make sure that old games are converted correctly. */ - if (IsSavegameVersionBefore(11, 1) || (IsSavegameVersionBefore(147) && _date_fract > DAY_TICKS)) _date_fract /= 885; + if (IsSavegameVersionBefore(SLV_11, 1) || (IsSavegameVersionBefore(SLV_147) && _date_fract > DAY_TICKS)) _date_fract /= 885; /* Update current year * must be done before loading sprites as some newgrfs check it */ @@ -711,29 +711,29 @@ bool AfterLoadGame() * right value has been chosen in the settings. Otherwise we will be converting * it incorrectly in half of the times without a means to correct that. */ - if (IsSavegameVersionBefore(4, 2)) _settings_game.station.modified_catchment = false; - if (IsSavegameVersionBefore(6, 1)) _settings_game.pf.forbid_90_deg = false; - if (IsSavegameVersionBefore(21)) _settings_game.vehicle.train_acceleration_model = 0; - if (IsSavegameVersionBefore(90)) _settings_game.vehicle.plane_speed = 4; - if (IsSavegameVersionBefore(95)) _settings_game.vehicle.dynamic_engines = 0; - if (IsSavegameVersionBefore(96)) _settings_game.economy.station_noise_level = false; - if (IsSavegameVersionBefore(133)) { + if (IsSavegameVersionBefore(SLV_4, 2)) _settings_game.station.modified_catchment = false; + if (IsSavegameVersionBefore(SLV_6, 1)) _settings_game.pf.forbid_90_deg = false; + if (IsSavegameVersionBefore(SLV_21)) _settings_game.vehicle.train_acceleration_model = 0; + if (IsSavegameVersionBefore(SLV_90)) _settings_game.vehicle.plane_speed = 4; + if (IsSavegameVersionBefore(SLV_95)) _settings_game.vehicle.dynamic_engines = 0; + if (IsSavegameVersionBefore(SLV_96)) _settings_game.economy.station_noise_level = false; + if (IsSavegameVersionBefore(SLV_133)) { _settings_game.vehicle.train_slope_steepness = 3; } - if (IsSavegameVersionBefore(134)) _settings_game.economy.feeder_payment_share = 75; - if (IsSavegameVersionBefore(138)) _settings_game.vehicle.plane_crashes = 2; - if (IsSavegameVersionBefore(139)) { + if (IsSavegameVersionBefore(SLV_134)) _settings_game.economy.feeder_payment_share = 75; + if (IsSavegameVersionBefore(SLV_138)) _settings_game.vehicle.plane_crashes = 2; + if (IsSavegameVersionBefore(SLV_139)) { _settings_game.vehicle.roadveh_acceleration_model = 0; _settings_game.vehicle.roadveh_slope_steepness = 7; } - if (IsSavegameVersionBefore(143)) _settings_game.economy.allow_town_level_crossings = true; - if (IsSavegameVersionBefore(159)) { + if (IsSavegameVersionBefore(SLV_143)) _settings_game.economy.allow_town_level_crossings = true; + if (IsSavegameVersionBefore(SLV_159)) { _settings_game.vehicle.max_train_length = 50; _settings_game.construction.max_bridge_length = 64; _settings_game.construction.max_tunnel_length = 64; } - if (IsSavegameVersionBefore(166)) _settings_game.economy.infrastructure_maintenance = false; - if (IsSavegameVersionBefore(183)) { + if (IsSavegameVersionBefore(SLV_166)) _settings_game.economy.infrastructure_maintenance = false; + if (IsSavegameVersionBefore(SLV_183)) { _settings_game.linkgraph.distribution_pax = DT_MANUAL; _settings_game.linkgraph.distribution_mail = DT_MANUAL; _settings_game.linkgraph.distribution_armoured = DT_MANUAL; @@ -749,7 +749,7 @@ bool AfterLoadGame() /* Connect front and rear engines of multiheaded trains and converts * subtype to the new format */ - if (IsSavegameVersionBefore(17, 1)) ConvertOldMultiheadToNew(); + if (IsSavegameVersionBefore(SLV_17, 1)) ConvertOldMultiheadToNew(); /* Connect front and rear engines of multiheaded trains */ ConnectMultiheadedTrains(); @@ -765,7 +765,7 @@ bool AfterLoadGame() /* Oilrig was moved from id 15 to 9. We have to do this conversion * here as AfterLoadVehicles can check it indirectly via the newgrf * code. */ - if (IsSavegameVersionBefore(139)) { + if (IsSavegameVersionBefore(SLV_139)) { Station *st; FOR_ALL_STATIONS(st) { if (st->airport.tile != INVALID_TILE && st->airport.type == 15) { @@ -797,7 +797,7 @@ bool AfterLoadGame() * This problem appears in savegame version 21 too, see r3455. But after loading the * savegame and saving again, the buggy map array could be converted to new savegame * version. It didn't show up before r12070. */ - if (IsSavegameVersionBefore(87)) UpdateVoidTiles(); + if (IsSavegameVersionBefore(SLV_87)) UpdateVoidTiles(); /* If Load Scenario / New (Scenario) Game is used, * a company does not exist yet. So create one here. @@ -816,7 +816,7 @@ bool AfterLoadGame() cp->current_station = cp->front->last_station_visited; } - if (IsSavegameVersionBefore(72)) { + if (IsSavegameVersionBefore(SLV_72)) { /* Locks in very old savegames had OWNER_WATER as owner */ for (TileIndex t = 0; t < MapSize(); t++) { switch (GetTileType(t)) { @@ -887,7 +887,7 @@ bool AfterLoadGame() switch (GetStationType(t)) { case STATION_TRUCK: case STATION_BUS: - if (IsSavegameVersionBefore(6)) { + if (IsSavegameVersionBefore(SLV_6)) { /* Before version 5 you could not have more than 250 stations. * Version 6 adds large maps, so you could only place 253*253 * road stops on a map (no freeform edges) = 64009. So, yes @@ -937,12 +937,12 @@ bool AfterLoadGame() /* In version 2.2 of the savegame, we have new airports, so status of all aircraft is reset. * This has to be called after the oilrig airport_type update above ^^^ ! */ - if (IsSavegameVersionBefore(2, 2)) UpdateOldAircraft(); + if (IsSavegameVersionBefore(SLV_2, 2)) UpdateOldAircraft(); /* In version 6.1 we put the town index in the map-array. To do this, we need * to use m2 (16bit big), so we need to clean m2, and that is where this is * all about ;) */ - if (IsSavegameVersionBefore(6, 1)) { + if (IsSavegameVersionBefore(SLV_6, 1)) { for (TileIndex t = 0; t < map_size; t++) { switch (GetTileType(t)) { case MP_HOUSE: @@ -965,20 +965,20 @@ bool AfterLoadGame() } /* Force the freeform edges to false for old savegames. */ - if (IsSavegameVersionBefore(111)) { + if (IsSavegameVersionBefore(SLV_111)) { _settings_game.construction.freeform_edges = false; } /* From version 9.0, we update the max passengers of a town (was sometimes negative * before that. */ - if (IsSavegameVersionBefore(9)) { + if (IsSavegameVersionBefore(SLV_9)) { Town *t; FOR_ALL_TOWNS(t) UpdateTownMaxPass(t); } /* From version 16.0, we included autorenew on engines, which are now saved, but * of course, we do need to initialize them for older savegames. */ - if (IsSavegameVersionBefore(16)) { + if (IsSavegameVersionBefore(SLV_16)) { Company *c; FOR_ALL_COMPANIES(c) { c->engine_renew_list = NULL; @@ -999,7 +999,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(48)) { + if (IsSavegameVersionBefore(SLV_48)) { for (TileIndex t = 0; t < map_size; t++) { switch (GetTileType(t)) { case MP_RAILWAY: @@ -1027,9 +1027,9 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(61)) { + if (IsSavegameVersionBefore(SLV_61)) { /* Added the RoadType */ - bool old_bridge = IsSavegameVersionBefore(42); + bool old_bridge = IsSavegameVersionBefore(SLV_42); for (TileIndex t = 0; t < map_size; t++) { switch (GetTileType(t)) { case MP_ROAD: @@ -1066,9 +1066,9 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(114)) { - bool fix_roadtypes = !IsSavegameVersionBefore(61); - bool old_bridge = IsSavegameVersionBefore(42); + if (IsSavegameVersionBefore(SLV_114)) { + bool fix_roadtypes = !IsSavegameVersionBefore(SLV_61); + bool old_bridge = IsSavegameVersionBefore(SLV_42); for (TileIndex t = 0; t < map_size; t++) { switch (GetTileType(t)) { @@ -1133,7 +1133,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(42)) { + if (IsSavegameVersionBefore(SLV_42)) { Vehicle *v; for (TileIndex t = 0; t < map_size; t++) { @@ -1214,8 +1214,8 @@ bool AfterLoadGame() } } - /* Railtype moved from m3 to m8 in version 200. */ - if (IsSavegameVersionBefore(200)) { + /* Railtype moved from m3 to m8 in version SLV_200. */ + if (IsSavegameVersionBefore(SLV_200)) { for (TileIndex t = 0; t < map_size; t++) { switch (GetTileType(t)) { case MP_RAILWAY: @@ -1247,7 +1247,7 @@ bool AfterLoadGame() } /* Elrails got added in rev 24 */ - if (IsSavegameVersionBefore(24)) { + if (IsSavegameVersionBefore(SLV_24)) { RailType min_rail = RAILTYPE_ELECTRIC; Train *v; @@ -1297,12 +1297,12 @@ bool AfterLoadGame() /* In version 16.1 of the savegame a company can decide if trains, which get * replaced, shall keep their old length. In all prior versions, just default * to false */ - if (IsSavegameVersionBefore(16, 1)) { + if (IsSavegameVersionBefore(SLV_16, 1)) { Company *c; FOR_ALL_COMPANIES(c) c->settings.renew_keep_length = false; } - if (IsSavegameVersionBefore(123)) { + if (IsSavegameVersionBefore(SLV_123)) { /* Waypoints became subclasses of stations ... */ MoveWaypointsToBaseStations(); /* ... and buoys were moved to waypoints. */ @@ -1311,7 +1311,7 @@ bool AfterLoadGame() /* From version 15, we moved a semaphore bit from bit 2 to bit 3 in m4, making * room for PBS. Now in version 21 move it back :P. */ - if (IsSavegameVersionBefore(21) && !IsSavegameVersionBefore(15)) { + if (IsSavegameVersionBefore(SLV_21) && !IsSavegameVersionBefore(SLV_15)) { for (TileIndex t = 0; t < map_size; t++) { switch (GetTileType(t)) { case MP_RAILWAY: @@ -1345,14 +1345,14 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(25)) { + if (IsSavegameVersionBefore(SLV_25)) { RoadVehicle *rv; FOR_ALL_ROADVEHICLES(rv) { rv->vehstatus &= ~0x40; } } - if (IsSavegameVersionBefore(26)) { + if (IsSavegameVersionBefore(SLV_26)) { Station *st; FOR_ALL_STATIONS(st) { st->last_vehicle_type = VEH_INVALID; @@ -1361,7 +1361,7 @@ bool AfterLoadGame() YapfNotifyTrackLayoutChange(INVALID_TILE, INVALID_TRACK); - if (IsSavegameVersionBefore(34)) { + if (IsSavegameVersionBefore(SLV_34)) { Company *c; FOR_ALL_COMPANIES(c) ResetCompanyLivery(c); } @@ -1372,11 +1372,11 @@ bool AfterLoadGame() c->avail_roadtypes = GetCompanyRoadtypes(c->index); } - if (!IsSavegameVersionBefore(27)) AfterLoadStations(); + if (!IsSavegameVersionBefore(SLV_27)) AfterLoadStations(); /* Time starts at 0 instead of 1920. * Account for this in older games by adding an offset */ - if (IsSavegameVersionBefore(31)) { + if (IsSavegameVersionBefore(SLV_31)) { Station *st; Waypoint *wp; Engine *e; @@ -1401,7 +1401,7 @@ bool AfterLoadGame() /* From 32 on we save the industry who made the farmland. * To give this prettiness to old savegames, we remove all farmfields and * plant new ones. */ - if (IsSavegameVersionBefore(32)) { + if (IsSavegameVersionBefore(SLV_32)) { Industry *i; for (TileIndex t = 0; t < map_size; t++) { @@ -1421,7 +1421,7 @@ bool AfterLoadGame() } /* Setting no refit flags to all orders in savegames from before refit in orders were added */ - if (IsSavegameVersionBefore(36)) { + if (IsSavegameVersionBefore(SLV_36)) { Order *order; Vehicle *v; @@ -1436,14 +1436,14 @@ bool AfterLoadGame() /* from version 38 we have optional elrails, since we cannot know the * preference of a user, let elrails enabled; it can be disabled manually */ - if (IsSavegameVersionBefore(38)) _settings_game.vehicle.disable_elrails = false; + if (IsSavegameVersionBefore(SLV_38)) _settings_game.vehicle.disable_elrails = false; /* do the same as when elrails were enabled/disabled manually just now */ SettingsDisableElrail(_settings_game.vehicle.disable_elrails); InitializeRailGUI(); /* From version 53, the map array was changed for house tiles to allow * space for newhouses grf features. A new byte, m7, was also added. */ - if (IsSavegameVersionBefore(53)) { + if (IsSavegameVersionBefore(SLV_53)) { for (TileIndex t = 0; t < map_size; t++) { if (IsTileType(t, MP_HOUSE)) { if (GB(_m[t].m3, 6, 2) != TOWN_HOUSE_COMPLETED) { @@ -1480,7 +1480,7 @@ bool AfterLoadGame() /* Check and update house and town values */ UpdateHousesAndTowns(); - if (IsSavegameVersionBefore(43)) { + if (IsSavegameVersionBefore(SLV_43)) { for (TileIndex t = 0; t < map_size; t++) { if (IsTileType(t, MP_INDUSTRY)) { switch (GetIndustryGfx(t)) { @@ -1507,7 +1507,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(45)) { + if (IsSavegameVersionBefore(SLV_45)) { Vehicle *v; /* Originally just the fact that some cargo had been paid for was * stored to stop people cheating and cashing in several times. This @@ -1521,14 +1521,14 @@ bool AfterLoadGame() /* Buoys do now store the owner of the previous water tile, which can never * be OWNER_NONE. So replace OWNER_NONE with OWNER_WATER. */ - if (IsSavegameVersionBefore(46)) { + if (IsSavegameVersionBefore(SLV_46)) { Waypoint *wp; FOR_ALL_WAYPOINTS(wp) { if ((wp->facilities & FACIL_DOCK) != 0 && IsTileOwner(wp->xy, OWNER_NONE) && TileHeight(wp->xy) == 0) SetTileOwner(wp->xy, OWNER_WATER); } } - if (IsSavegameVersionBefore(50)) { + if (IsSavegameVersionBefore(SLV_50)) { Aircraft *v; /* Aircraft units changed from 8 mph to 1 km-ish/h */ FOR_ALL_AIRCRAFT(v) { @@ -1541,9 +1541,9 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(49)) FOR_ALL_COMPANIES(c) c->face = ConvertFromOldCompanyManagerFace(c->face); + if (IsSavegameVersionBefore(SLV_49)) FOR_ALL_COMPANIES(c) c->face = ConvertFromOldCompanyManagerFace(c->face); - if (IsSavegameVersionBefore(52)) { + if (IsSavegameVersionBefore(SLV_52)) { for (TileIndex t = 0; t < map_size; t++) { if (IsTileType(t, MP_OBJECT) && _m[t].m5 == OBJECT_STATUE) { _m[t].m2 = CalcClosestTownFromTile(t)->index; @@ -1554,7 +1554,7 @@ bool AfterLoadGame() /* A setting containing the proportion of towns that grow twice as * fast was added in version 54. From version 56 this is now saved in the * town as cities can be built specifically in the scenario editor. */ - if (IsSavegameVersionBefore(56)) { + if (IsSavegameVersionBefore(SLV_56)) { Town *t; FOR_ALL_TOWNS(t) { @@ -1564,7 +1564,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(57)) { + if (IsSavegameVersionBefore(SLV_57)) { Vehicle *v; /* Added a FIFO queue of vehicles loading at stations */ FOR_ALL_VEHICLES(v) { @@ -1578,7 +1578,7 @@ bool AfterLoadGame() ClrBit(v->vehicle_flags, VF_LOADING_FINISHED); } } - } else if (IsSavegameVersionBefore(59)) { + } else if (IsSavegameVersionBefore(SLV_59)) { /* For some reason non-loading vehicles could be in the station's loading vehicle list */ Station *st; @@ -1592,7 +1592,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(58)) { + if (IsSavegameVersionBefore(SLV_58)) { /* Setting difficulty industry_density other than zero get bumped to +1 * since a new option (very low at position 1) has been added */ if (_settings_game.difficulty.industry_density > 0) { @@ -1603,7 +1603,7 @@ bool AfterLoadGame() _settings_game.difficulty.number_towns++; } - if (IsSavegameVersionBefore(64)) { + if (IsSavegameVersionBefore(SLV_64)) { /* Since now we allow different signal types and variants on a single tile. * Move signal states to m4 to make room and clone the signal type/variant. */ for (TileIndex t = 0; t < map_size; t++) { @@ -1617,7 +1617,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(69)) { + if (IsSavegameVersionBefore(SLV_69)) { /* In some old savegames a bit was cleared when it should not be cleared */ RoadVehicle *rv; FOR_ALL_ROADVEHICLES(rv) { @@ -1627,7 +1627,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(70)) { + if (IsSavegameVersionBefore(SLV_70)) { /* Added variables to support newindustries */ Industry *i; FOR_ALL_INDUSTRIES(i) i->founder = OWNER_NONE; @@ -1635,7 +1635,7 @@ bool AfterLoadGame() /* From version 82, old style canals (above sealevel (0), WATER owner) are no longer supported. Replace the owner for those by OWNER_NONE. */ - if (IsSavegameVersionBefore(82)) { + if (IsSavegameVersionBefore(SLV_82)) { for (TileIndex t = 0; t < map_size; t++) { if (IsTileType(t, MP_WATER) && GetWaterTileType(t) == WATER_TILE_CLEAR && @@ -1652,7 +1652,7 @@ bool AfterLoadGame() * someone can remove canals owned by somebody else and it prevents * making floods using the removal of ship depots. */ - if (IsSavegameVersionBefore(83)) { + if (IsSavegameVersionBefore(SLV_83)) { for (TileIndex t = 0; t < map_size; t++) { if (IsShipDepotTile(t)) { _m[t].m4 = (TileHeight(t) == 0) ? OWNER_WATER : OWNER_NONE; @@ -1660,7 +1660,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(74)) { + if (IsSavegameVersionBefore(SLV_74)) { Station *st; FOR_ALL_STATIONS(st) { for (CargoID c = 0; c < NUM_CARGO; c++) { @@ -1670,7 +1670,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(78)) { + if (IsSavegameVersionBefore(SLV_78)) { Industry *i; uint j; FOR_ALL_INDUSTRIES(i) { @@ -1688,7 +1688,7 @@ bool AfterLoadGame() * grassy trees were always drawn fully grassy. Furthermore, trees on rough * land used to have zero density, now they have full density. Therefore, * make all grassy/rough land trees have a density of 3. */ - if (IsSavegameVersionBefore(81)) { + if (IsSavegameVersionBefore(SLV_81)) { for (TileIndex t = 0; t < map_size; t++) { if (GetTileType(t) == MP_TREES) { TreeGround groundType = (TreeGround)GB(_m[t].m2, 4, 2); @@ -1698,7 +1698,7 @@ bool AfterLoadGame() } - if (IsSavegameVersionBefore(93)) { + if (IsSavegameVersionBefore(SLV_93)) { /* Rework of orders. */ Order *order; FOR_ALL_ORDERS(order) order->ConvertFromOldSavegame(); @@ -1715,7 +1715,7 @@ bool AfterLoadGame() FOR_VEHICLE_ORDERS(v, order) order->SetNonStopType(ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS); } } - } else if (IsSavegameVersionBefore(94)) { + } else if (IsSavegameVersionBefore(SLV_94)) { /* Unload and transfer are now mutual exclusive. */ Order *order; FOR_ALL_ORDERS(order) { @@ -1734,7 +1734,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(84)) { + if (IsSavegameVersionBefore(SLV_84)) { /* Set all share owners to INVALID_COMPANY for * 1) all inactive companies * (when inactive companies were stored in the savegame - TTD, TTDP and some @@ -1751,7 +1751,7 @@ bool AfterLoadGame() } /* The water class was moved/unified. */ - if (IsSavegameVersionBefore(146)) { + if (IsSavegameVersionBefore(SLV_146)) { for (TileIndex t = 0; t < map_size; t++) { switch (GetTileType(t)) { case MP_STATION: @@ -1785,7 +1785,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(86)) { + if (IsSavegameVersionBefore(SLV_86)) { for (TileIndex t = 0; t < map_size; t++) { /* Move river flag and update canals to use water class */ if (IsTileType(t, MP_WATER)) { @@ -1816,7 +1816,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(87)) { + if (IsSavegameVersionBefore(SLV_87)) { for (TileIndex t = 0; t < map_size; t++) { /* skip oil rigs at borders! */ if ((IsTileType(t, MP_WATER) || IsBuoyTile(t)) && @@ -1854,13 +1854,13 @@ bool AfterLoadGame() } /* Convert old PF settings to new */ - if (_settings_game.pf.yapf.rail_use_yapf || IsSavegameVersionBefore(28)) { + if (_settings_game.pf.yapf.rail_use_yapf || IsSavegameVersionBefore(SLV_28)) { _settings_game.pf.pathfinder_for_trains = VPF_YAPF; } else { _settings_game.pf.pathfinder_for_trains = VPF_NPF; } - if (_settings_game.pf.yapf.road_use_yapf || IsSavegameVersionBefore(28)) { + if (_settings_game.pf.yapf.road_use_yapf || IsSavegameVersionBefore(SLV_28)) { _settings_game.pf.pathfinder_for_roadvehs = VPF_YAPF; } else { _settings_game.pf.pathfinder_for_roadvehs = VPF_NPF; @@ -1873,7 +1873,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(88)) { + if (IsSavegameVersionBefore(SLV_88)) { /* Profits are now with 8 bit fract */ Vehicle *v; FOR_ALL_VEHICLES(v) { @@ -1883,7 +1883,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(91)) { + if (IsSavegameVersionBefore(SLV_91)) { /* Increase HouseAnimationFrame from 5 to 7 bits */ for (TileIndex t = 0; t < map_size; t++) { if (IsTileType(t, MP_HOUSE) && GetHouseType(t) >= NEW_HOUSE_OFFSET) { @@ -1893,7 +1893,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(62)) { + if (IsSavegameVersionBefore(SLV_62)) { /* Remove all trams from savegames without tram support. * There would be trams without tram track under causing crashes sooner or later. */ RoadVehicle *v; @@ -1905,7 +1905,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(99)) { + if (IsSavegameVersionBefore(SLV_99)) { for (TileIndex t = 0; t < map_size; t++) { /* Set newly introduced WaterClass of industry tiles */ if (IsTileType(t, MP_STATION) && IsOilRig(t)) { @@ -1929,7 +1929,7 @@ bool AfterLoadGame() /* Move the signal variant back up one bit for PBS. We don't convert the old PBS * format here, as an old layout wouldn't work properly anyway. To be safe, we * clear any possible PBS reservations as well. */ - if (IsSavegameVersionBefore(100)) { + if (IsSavegameVersionBefore(SLV_100)) { for (TileIndex t = 0; t < map_size; t++) { switch (GetTileType(t)) { case MP_RAILWAY: @@ -1967,21 +1967,21 @@ bool AfterLoadGame() } /* Reserve all tracks trains are currently on. */ - if (IsSavegameVersionBefore(101)) { + if (IsSavegameVersionBefore(SLV_101)) { const Train *t; FOR_ALL_TRAINS(t) { if (t->First() == t) t->ReserveTrackUnderConsist(); } } - if (IsSavegameVersionBefore(102)) { + if (IsSavegameVersionBefore(SLV_102)) { for (TileIndex t = 0; t < map_size; t++) { /* Now all crossings should be in correct state */ if (IsLevelCrossingTile(t)) UpdateLevelCrossing(t, false); } } - if (IsSavegameVersionBefore(103)) { + if (IsSavegameVersionBefore(SLV_103)) { /* Non-town-owned roads now store the closest town */ UpdateNearestTownForRoadTiles(false); @@ -1999,7 +1999,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(104)) { + if (IsSavegameVersionBefore(SLV_104)) { Aircraft *a; FOR_ALL_AIRCRAFT(a) { /* Set engine_type of shadow and rotor */ @@ -2026,7 +2026,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(112)) { + if (IsSavegameVersionBefore(SLV_112)) { for (TileIndex t = 0; t < map_size; t++) { /* Check for HQ bit being set, instead of using map accessor, * since we've already changed it code-wise */ @@ -2038,7 +2038,7 @@ bool AfterLoadGame() } } } - if (IsSavegameVersionBefore(144)) { + if (IsSavegameVersionBefore(SLV_144)) { for (TileIndex t = 0; t < map_size; t++) { if (!IsTileType(t, MP_OBJECT)) continue; @@ -2053,7 +2053,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(147) && Object::GetNumItems() == 0) { + if (IsSavegameVersionBefore(SLV_147) && Object::GetNumItems() == 0) { /* Make real objects for object tiles. */ for (TileIndex t = 0; t < map_size; t++) { if (!IsTileType(t, MP_OBJECT)) continue; @@ -2097,7 +2097,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(113)) { + if (IsSavegameVersionBefore(SLV_113)) { /* allow_town_roads is added, set it if town_layout wasn't TL_NO_ROADS */ if (_settings_game.economy.town_layout == 0) { // was TL_NO_ROADS _settings_game.economy.allow_town_roads = false; @@ -2127,7 +2127,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(114)) { + if (IsSavegameVersionBefore(SLV_114)) { /* There could be (deleted) stations with invalid owner, set owner to OWNER NONE. * The conversion affects oil rigs and buoys too, but it doesn't matter as * they have st->owner == OWNER_NONE already. */ @@ -2138,14 +2138,14 @@ bool AfterLoadGame() } /* Trains could now stop in a specific location. */ - if (IsSavegameVersionBefore(117)) { + if (IsSavegameVersionBefore(SLV_117)) { Order *o; FOR_ALL_ORDERS(o) { if (o->IsType(OT_GOTO_STATION)) o->SetStopLocation(OSL_PLATFORM_FAR_END); } } - if (IsSavegameVersionBefore(120)) { + if (IsSavegameVersionBefore(SLV_120)) { extern VehicleDefaultSettings _old_vds; Company *c; FOR_ALL_COMPANIES(c) { @@ -2153,7 +2153,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(121)) { + if (IsSavegameVersionBefore(SLV_121)) { /* Delete small ufos heading for non-existing vehicles */ Vehicle *v; FOR_ALL_DISASTERVEHICLES(v) { @@ -2185,7 +2185,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(122)) { + if (IsSavegameVersionBefore(SLV_122)) { /* Animated tiles would sometimes not be actually animated or * in case of old savegames duplicate. */ @@ -2208,7 +2208,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(124) && !IsSavegameVersionBefore(1)) { + if (IsSavegameVersionBefore(SLV_124) && !IsSavegameVersionBefore(SLV_1)) { /* The train station tile area was added, but for really old (TTDPatch) it's already valid. */ Waypoint *wp; FOR_ALL_WAYPOINTS(wp) { @@ -2224,7 +2224,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(125)) { + if (IsSavegameVersionBefore(SLV_125)) { /* Convert old subsidies */ Subsidy *s; FOR_ALL_SUBSIDIES(s) { @@ -2284,7 +2284,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(126)) { + if (IsSavegameVersionBefore(SLV_126)) { /* Recompute inflation based on old unround loan limit * Note: Max loan is 500000. With an inflation of 4% across 170 years * that results in a max loan of about 0.7 * 2^31. @@ -2302,7 +2302,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(128)) { + if (IsSavegameVersionBefore(SLV_128)) { const Depot *d; FOR_ALL_DEPOTS(d) { _m[d->xy].m2 = d->index; @@ -2312,7 +2312,7 @@ bool AfterLoadGame() /* The behaviour of force_proceed has been changed. Now * it counts signals instead of some random time out. */ - if (IsSavegameVersionBefore(131)) { + if (IsSavegameVersionBefore(SLV_131)) { Train *t; FOR_ALL_TRAINS(t) { if (t->force_proceed != TFP_NONE) { @@ -2323,7 +2323,7 @@ bool AfterLoadGame() /* The bits for the tree ground and tree density have * been swapped (m2 bits 7..6 and 5..4. */ - if (IsSavegameVersionBefore(135)) { + if (IsSavegameVersionBefore(SLV_135)) { for (TileIndex t = 0; t < map_size; t++) { if (IsTileType(t, MP_CLEAR)) { if (GetRawClearGround(t) == CLEAR_SNOW) { @@ -2343,7 +2343,7 @@ bool AfterLoadGame() } /* Wait counter and load/unload ticks got split. */ - if (IsSavegameVersionBefore(136)) { + if (IsSavegameVersionBefore(SLV_136)) { Aircraft *a; FOR_ALL_AIRCRAFT(a) { a->turn_counter = a->current_order.IsType(OT_LOADING) ? 0 : a->load_unload_ticks; @@ -2356,7 +2356,7 @@ bool AfterLoadGame() } /* Airport tile animation uses animation frame instead of other graphics id */ - if (IsSavegameVersionBefore(137)) { + if (IsSavegameVersionBefore(SLV_137)) { struct AirportTileConversion { byte old_start; byte num_frames; @@ -2392,7 +2392,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(140)) { + if (IsSavegameVersionBefore(SLV_140)) { Station *st; FOR_ALL_STATIONS(st) { if (st->airport.tile != INVALID_TILE) { @@ -2402,7 +2402,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(141)) { + if (IsSavegameVersionBefore(SLV_141)) { for (TileIndex t = 0; t < map_size; t++) { /* Reset tropic zone for VOID tiles, they shall not have any. */ if (IsTileType(t, MP_VOID)) SetTropicZone(t, TROPICZONE_NORMAL); @@ -2417,7 +2417,7 @@ bool AfterLoadGame() FOR_ALL_DEPOTS(d) MakeDefaultName(d); } - if (IsSavegameVersionBefore(142)) { + if (IsSavegameVersionBefore(SLV_142)) { Depot *d; FOR_ALL_DEPOTS(d) d->build_date = _date; } @@ -2427,7 +2427,7 @@ bool AfterLoadGame() * another airport in the same station so we don't allow that anymore. * For old savegames with such aircraft we just throw them in the air and * treat the aircraft like they were flying already. */ - if (IsSavegameVersionBefore(146)) { + if (IsSavegameVersionBefore(SLV_146)) { Aircraft *v; FOR_ALL_AIRCRAFT(v) { if (!v->IsNormalAircraft()) continue; @@ -2446,7 +2446,7 @@ bool AfterLoadGame() } /* Move the animation frame to the same location (m7) for all objects. */ - if (IsSavegameVersionBefore(147)) { + if (IsSavegameVersionBefore(SLV_147)) { for (TileIndex t = 0; t < map_size; t++) { switch (GetTileType(t)) { case MP_HOUSE: @@ -2478,7 +2478,7 @@ bool AfterLoadGame() } /* Add (random) colour to all objects. */ - if (IsSavegameVersionBefore(148)) { + if (IsSavegameVersionBefore(SLV_148)) { Object *o; FOR_ALL_OBJECTS(o) { Owner owner = GetTileOwner(o->location.tile); @@ -2486,7 +2486,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(149)) { + if (IsSavegameVersionBefore(SLV_149)) { for (TileIndex t = 0; t < map_size; t++) { if (!IsTileType(t, MP_STATION)) continue; if (!IsBuoy(t) && !IsOilRig(t) && !(IsDock(t) && IsTileFlat(t))) { @@ -2508,7 +2508,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(152)) { + if (IsSavegameVersionBefore(SLV_152)) { _industry_builder.Reset(); // Initialize industry build data. /* The moment vehicles go from hidden to visible changed. This means @@ -2577,7 +2577,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(153)) { + if (IsSavegameVersionBefore(SLV_153)) { RoadVehicle *rv; FOR_ALL_ROADVEHICLES(rv) { if (rv->state == RVSB_IN_DEPOT || rv->state == RVSB_WORMHOLE) continue; @@ -2592,7 +2592,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(156)) { + if (IsSavegameVersionBefore(SLV_156)) { /* The train's pathfinder lost flag got moved. */ Train *t; FOR_ALL_TRAINS(t) { @@ -2610,7 +2610,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(158)) { + if (IsSavegameVersionBefore(SLV_158)) { Vehicle *v; FOR_ALL_VEHICLES(v) { switch (v->type) { @@ -2707,14 +2707,14 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(159)) { + if (IsSavegameVersionBefore(SLV_159)) { /* If the savegame is old (before version 100), then the value of 255 * for these settings did not mean "disabled". As such everything * before then did reverse. * To simplify stuff we disable all turning around or we do not * disable anything at all. So, if some reversing was disabled we * will keep reversing disabled, otherwise it'll be turned on. */ - _settings_game.pf.reverse_at_signals = IsSavegameVersionBefore(100) || (_settings_game.pf.wait_oneway_signal != 255 && _settings_game.pf.wait_twoway_signal != 255 && _settings_game.pf.wait_for_pbs_path != 255); + _settings_game.pf.reverse_at_signals = IsSavegameVersionBefore(SLV_100) || (_settings_game.pf.wait_oneway_signal != 255 && _settings_game.pf.wait_twoway_signal != 255 && _settings_game.pf.wait_for_pbs_path != 255); Train *t; FOR_ALL_TRAINS(t) { @@ -2722,7 +2722,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(160)) { + if (IsSavegameVersionBefore(SLV_160)) { /* Setting difficulty industry_density other than zero get bumped to +1 * since a new option (minimal at position 1) has been added */ if (_settings_game.difficulty.industry_density > 0) { @@ -2730,10 +2730,10 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(161)) { + if (IsSavegameVersionBefore(SLV_161)) { /* Before savegame version 161, persistent storages were not stored in a pool. */ - if (!IsSavegameVersionBefore(76)) { + if (!IsSavegameVersionBefore(SLV_76)) { Industry *ind; FOR_ALL_INDUSTRIES(ind) { assert(ind->psa != NULL); @@ -2756,7 +2756,7 @@ bool AfterLoadGame() } } - if (!IsSavegameVersionBefore(145)) { + if (!IsSavegameVersionBefore(SLV_145)) { Station *st; FOR_ALL_STATIONS(st) { if (!(st->facilities & FACIL_AIRPORT)) continue; @@ -2783,11 +2783,11 @@ bool AfterLoadGame() } /* This triggers only when old snow_lines were copied into the snow_line_height. */ - if (IsSavegameVersionBefore(164) && _settings_game.game_creation.snow_line_height >= MIN_SNOWLINE_HEIGHT * TILE_HEIGHT) { + if (IsSavegameVersionBefore(SLV_164) && _settings_game.game_creation.snow_line_height >= MIN_SNOWLINE_HEIGHT * TILE_HEIGHT) { _settings_game.game_creation.snow_line_height /= TILE_HEIGHT; } - if (IsSavegameVersionBefore(164) && !IsSavegameVersionBefore(32)) { + if (IsSavegameVersionBefore(SLV_164) && !IsSavegameVersionBefore(SLV_32)) { /* We store 4 fences in the field tiles instead of only SE and SW. */ for (TileIndex t = 0; t < map_size; t++) { if (!IsTileType(t, MP_CLEAR) && !IsTileType(t, MP_TREES)) continue; @@ -2806,9 +2806,9 @@ bool AfterLoadGame() } /* The center of train vehicles was changed, fix up spacing. */ - if (IsSavegameVersionBefore(164)) FixupTrainLengths(); + if (IsSavegameVersionBefore(SLV_164)) FixupTrainLengths(); - if (IsSavegameVersionBefore(165)) { + if (IsSavegameVersionBefore(SLV_165)) { Town *t; FOR_ALL_TOWNS(t) { @@ -2826,7 +2826,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(165)) { + if (IsSavegameVersionBefore(SLV_165)) { /* Adjust zoom level to account for new levels */ _saved_scrollpos_zoom = _saved_scrollpos_zoom + ZOOM_LVL_SHIFT; _saved_scrollpos_x *= ZOOM_LVL_BASE; @@ -2838,7 +2838,7 @@ bool AfterLoadGame() * which is done by StartupEngines(). */ if (gcf_res != GLC_ALL_GOOD) StartupEngines(); - if (IsSavegameVersionBefore(166)) { + if (IsSavegameVersionBefore(SLV_166)) { /* Update cargo acceptance map of towns. */ for (TileIndex t = 0; t < map_size; t++) { if (!IsTileType(t, MP_HOUSE)) continue; @@ -2852,7 +2852,7 @@ bool AfterLoadGame() } /* The road owner of standard road stops was not properly accounted for. */ - if (IsSavegameVersionBefore(172)) { + if (IsSavegameVersionBefore(SLV_172)) { for (TileIndex t = 0; t < map_size; t++) { if (!IsStandardRoadStopTile(t)) continue; Owner o = GetTileOwner(t); @@ -2861,13 +2861,13 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(175)) { + if (IsSavegameVersionBefore(SLV_175)) { /* Introduced tree planting limit. */ Company *c; FOR_ALL_COMPANIES(c) c->tree_limit = _settings_game.construction.tree_frame_burst << 16; } - if (IsSavegameVersionBefore(177)) { + if (IsSavegameVersionBefore(SLV_177)) { /* Fix too high inflation rates */ if (_economy.inflation_prices > MAX_INFLATION) _economy.inflation_prices = MAX_INFLATION; if (_economy.inflation_payment > MAX_INFLATION) _economy.inflation_payment = MAX_INFLATION; @@ -2878,13 +2878,13 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(178)) { + if (IsSavegameVersionBefore(SLV_178)) { extern uint8 _old_diff_level; /* Initialise script settings profile */ _settings_game.script.settings_profile = IsInsideMM(_old_diff_level, SP_BEGIN, SP_END) ? _old_diff_level : (uint)SP_MEDIUM; } - if (IsSavegameVersionBefore(182)) { + if (IsSavegameVersionBefore(SLV_182)) { Aircraft *v; /* Aircraft acceleration variable was bonkers */ FOR_ALL_AIRCRAFT(v) { @@ -2903,7 +2903,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(184)) { + if (IsSavegameVersionBefore(SLV_184)) { /* The global units configuration is split up in multiple configurations. */ extern uint8 _old_units; _settings_game.locale.units_velocity = Clamp(_old_units, 0, 2); @@ -2914,7 +2914,7 @@ bool AfterLoadGame() _settings_game.locale.units_height = Clamp(_old_units, 0, 2); } - if (IsSavegameVersionBefore(186)) { + if (IsSavegameVersionBefore(SLV_186)) { /* Move ObjectType from map to pool */ for (TileIndex t = 0; t < map_size; t++) { if (IsTileType(t, MP_OBJECT)) { @@ -2925,7 +2925,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(188)) { + if (IsSavegameVersionBefore(SLV_188)) { /* Fix articulated road vehicles. * Some curves were shorter than other curves. * Now they have the same length, but that means that trailing articulated parts will @@ -2988,9 +2988,9 @@ bool AfterLoadGame() * Only keep order-backups for network clients (and when replaying). * If we are a network server or not networking, then we just loaded a previously * saved-by-server savegame. There are no clients with a backup, so clear it. - * Furthermore before savegame version 192 the actual content was always corrupt. + * Furthermore before savegame version SLV_192 the actual content was always corrupt. */ - if (!_networking || _network_server || IsSavegameVersionBefore(192)) { + if (!_networking || _network_server || IsSavegameVersionBefore(SLV_192)) { #ifndef DEBUG_DUMP_COMMANDS /* Note: We cannot use CleanPool since that skips part of the destructor * and then leaks un-reachable Orders in the order pool. */ @@ -3001,7 +3001,7 @@ bool AfterLoadGame() #endif } - if (IsSavegameVersionBefore(198)) { + if (IsSavegameVersionBefore(SLV_198)) { /* Convert towns growth_rate and grow_counter to ticks */ Town *t; FOR_ALL_TOWNS(t) { @@ -3015,7 +3015,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(202)) { + if (IsSavegameVersionBefore(SLV_202)) { /* Make sure added industry cargo slots are cleared */ Industry *i; FOR_ALL_INDUSTRIES(i) { @@ -3046,7 +3046,7 @@ bool AfterLoadGame() } /* Station acceptance is some kind of cache */ - if (IsSavegameVersionBefore(127)) { + if (IsSavegameVersionBefore(SLV_127)) { Station *st; FOR_ALL_STATIONS(st) UpdateStationAcceptance(st, false); } diff --git a/src/saveload/ai_sl.cpp b/src/saveload/ai_sl.cpp index e8b5339c0d..2492bb666a 100644 --- a/src/saveload/ai_sl.cpp +++ b/src/saveload/ai_sl.cpp @@ -30,8 +30,8 @@ static bool _ai_saveload_is_random; static const SaveLoad _ai_company[] = { SLEG_STR(_ai_saveload_name, SLE_STRB), SLEG_STR(_ai_saveload_settings, SLE_STRB), - SLEG_CONDVAR(_ai_saveload_version, SLE_UINT32, 108, SL_MAX_VERSION), - SLEG_CONDVAR(_ai_saveload_is_random, SLE_BOOL, 136, SL_MAX_VERSION), + SLEG_CONDVAR(_ai_saveload_version, SLE_UINT32, SLV_108, SL_MAX_VERSION), + SLEG_CONDVAR(_ai_saveload_is_random, SLE_BOOL, SLV_136, SL_MAX_VERSION), SLE_END() }; diff --git a/src/saveload/animated_tile_sl.cpp b/src/saveload/animated_tile_sl.cpp index 2152c42e34..c54c4724ab 100644 --- a/src/saveload/animated_tile_sl.cpp +++ b/src/saveload/animated_tile_sl.cpp @@ -35,10 +35,10 @@ static void Save_ANIT() static void Load_ANIT() { /* Before version 80 we did NOT have a variable length animated tile table */ - if (IsSavegameVersionBefore(80)) { + if (IsSavegameVersionBefore(SLV_80)) { /* In pre version 6, we has 16bit per tile, now we have 32bit per tile, convert it ;) */ TileIndex anim_list[256]; - SlArray(anim_list, 256, IsSavegameVersionBefore(6) ? (SLE_FILE_U16 | SLE_VAR_U32) : SLE_UINT32); + SlArray(anim_list, 256, IsSavegameVersionBefore(SLV_6) ? (SLE_FILE_U16 | SLE_VAR_U32) : SLE_UINT32); for (int i = 0; i < 256; i++) { if (anim_list[i] == 0) break; diff --git a/src/saveload/autoreplace_sl.cpp b/src/saveload/autoreplace_sl.cpp index 99e945503d..1798df1ada 100644 --- a/src/saveload/autoreplace_sl.cpp +++ b/src/saveload/autoreplace_sl.cpp @@ -21,8 +21,8 @@ static const SaveLoad _engine_renew_desc[] = { SLE_VAR(EngineRenew, to, SLE_UINT16), SLE_REF(EngineRenew, next, REF_ENGINE_RENEWS), - SLE_CONDVAR(EngineRenew, group_id, SLE_UINT16, 60, SL_MAX_VERSION), - SLE_CONDVAR(EngineRenew, replace_when_old, SLE_BOOL, 175, SL_MAX_VERSION), + SLE_CONDVAR(EngineRenew, group_id, SLE_UINT16, SLV_60, SL_MAX_VERSION), + SLE_CONDVAR(EngineRenew, replace_when_old, SLE_BOOL, SLV_175, SL_MAX_VERSION), SLE_END() }; @@ -45,9 +45,9 @@ static void Load_ERNW() SlObject(er, _engine_renew_desc); /* Advanced vehicle lists, ungrouped vehicles got added */ - if (IsSavegameVersionBefore(60)) { + if (IsSavegameVersionBefore(SLV_60)) { er->group_id = ALL_GROUP; - } else if (IsSavegameVersionBefore(71)) { + } else if (IsSavegameVersionBefore(SLV_71)) { if (er->group_id == DEFAULT_GROUP) er->group_id = ALL_GROUP; } } diff --git a/src/saveload/cargopacket_sl.cpp b/src/saveload/cargopacket_sl.cpp index 9ed6e9e0dd..e3f372e9a8 100644 --- a/src/saveload/cargopacket_sl.cpp +++ b/src/saveload/cargopacket_sl.cpp @@ -22,7 +22,7 @@ */ /* static */ void CargoPacket::AfterLoad() { - if (IsSavegameVersionBefore(44)) { + if (IsSavegameVersionBefore(SLV_44)) { Vehicle *v; /* If we remove a station while cargo from it is still en route, payment calculation will assume * 0, 0 to be the source of the cargo, resulting in very high payments usually. v->source_xy @@ -59,7 +59,7 @@ } } - if (IsSavegameVersionBefore(120)) { + if (IsSavegameVersionBefore(SLV_120)) { /* CargoPacket's source should be either INVALID_STATION or a valid station */ CargoPacket *cp; FOR_ALL_CARGOPACKETS(cp) { @@ -67,7 +67,7 @@ } } - if (!IsSavegameVersionBefore(68)) { + if (!IsSavegameVersionBefore(SLV_68)) { /* Only since version 68 we have cargo packets. Savegames from before used * 'new CargoPacket' + cargolist.Append so their caches are already * correct and do not need rebuilding. */ @@ -80,7 +80,7 @@ } } - if (IsSavegameVersionBefore(181)) { + if (IsSavegameVersionBefore(SLV_181)) { Vehicle *v; FOR_ALL_VEHICLES(v) v->cargo.KeepAll(); } @@ -100,11 +100,11 @@ const SaveLoad *GetCargoPacketDesc() SLE_VAR(CargoPacket, count, SLE_UINT16), SLE_VAR(CargoPacket, days_in_transit, SLE_UINT8), SLE_VAR(CargoPacket, feeder_share, SLE_INT64), - SLE_CONDVAR(CargoPacket, source_type, SLE_UINT8, 125, SL_MAX_VERSION), - SLE_CONDVAR(CargoPacket, source_id, SLE_UINT16, 125, SL_MAX_VERSION), + SLE_CONDVAR(CargoPacket, source_type, SLE_UINT8, SLV_125, SL_MAX_VERSION), + SLE_CONDVAR(CargoPacket, source_id, SLE_UINT16, SLV_125, SL_MAX_VERSION), /* Used to be paid_for, but that got changed. */ - SLE_CONDNULL(1, 0, 121), + SLE_CONDNULL(1, SL_MIN_VERSION, SLV_121), SLE_END() }; diff --git a/src/saveload/company_sl.cpp b/src/saveload/company_sl.cpp index 9852933690..882a0265b1 100644 --- a/src/saveload/company_sl.cpp +++ b/src/saveload/company_sl.cpp @@ -242,116 +242,116 @@ void AfterLoadCompanyStats() static const SaveLoad _company_desc[] = { SLE_VAR(CompanyProperties, name_2, SLE_UINT32), SLE_VAR(CompanyProperties, name_1, SLE_STRINGID), - SLE_CONDSTR(CompanyProperties, name, SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION), + SLE_CONDSTR(CompanyProperties, name, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION), SLE_VAR(CompanyProperties, president_name_1, SLE_STRINGID), SLE_VAR(CompanyProperties, president_name_2, SLE_UINT32), - SLE_CONDSTR(CompanyProperties, president_name, SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION), + SLE_CONDSTR(CompanyProperties, president_name, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION), SLE_VAR(CompanyProperties, face, SLE_UINT32), /* money was changed to a 64 bit field in savegame version 1. */ - SLE_CONDVAR(CompanyProperties, money, SLE_VAR_I64 | SLE_FILE_I32, 0, 1), - SLE_CONDVAR(CompanyProperties, money, SLE_INT64, 1, SL_MAX_VERSION), + SLE_CONDVAR(CompanyProperties, money, SLE_VAR_I64 | SLE_FILE_I32, SL_MIN_VERSION, SLV_1), + SLE_CONDVAR(CompanyProperties, money, SLE_INT64, SLV_1, SL_MAX_VERSION), - SLE_CONDVAR(CompanyProperties, current_loan, SLE_VAR_I64 | SLE_FILE_I32, 0, 65), - SLE_CONDVAR(CompanyProperties, current_loan, SLE_INT64, 65, SL_MAX_VERSION), + SLE_CONDVAR(CompanyProperties, current_loan, SLE_VAR_I64 | SLE_FILE_I32, SL_MIN_VERSION, SLV_65), + SLE_CONDVAR(CompanyProperties, current_loan, SLE_INT64, SLV_65, SL_MAX_VERSION), SLE_VAR(CompanyProperties, colour, SLE_UINT8), SLE_VAR(CompanyProperties, money_fraction, SLE_UINT8), - SLE_CONDNULL(1, 0, 58), ///< avail_railtypes + SLE_CONDNULL(1, SL_MIN_VERSION, SLV_58), ///< avail_railtypes SLE_VAR(CompanyProperties, block_preview, SLE_UINT8), - SLE_CONDNULL(2, 0, 94), ///< cargo_types - SLE_CONDNULL(4, 94, 170), ///< cargo_types - SLE_CONDVAR(CompanyProperties, location_of_HQ, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), - SLE_CONDVAR(CompanyProperties, location_of_HQ, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(CompanyProperties, last_build_coordinate, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), - SLE_CONDVAR(CompanyProperties, last_build_coordinate, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(CompanyProperties, inaugurated_year, SLE_FILE_U8 | SLE_VAR_I32, 0, 31), - SLE_CONDVAR(CompanyProperties, inaugurated_year, SLE_INT32, 31, SL_MAX_VERSION), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_94), ///< cargo_types + SLE_CONDNULL(4, SLV_94, SLV_170), ///< cargo_types + SLE_CONDVAR(CompanyProperties, location_of_HQ, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), + SLE_CONDVAR(CompanyProperties, location_of_HQ, SLE_UINT32, SLV_6, SL_MAX_VERSION), + SLE_CONDVAR(CompanyProperties, last_build_coordinate, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), + SLE_CONDVAR(CompanyProperties, last_build_coordinate, SLE_UINT32, SLV_6, SL_MAX_VERSION), + SLE_CONDVAR(CompanyProperties, inaugurated_year, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31), + SLE_CONDVAR(CompanyProperties, inaugurated_year, SLE_INT32, SLV_31, SL_MAX_VERSION), SLE_ARR(CompanyProperties, share_owners, SLE_UINT8, 4), SLE_VAR(CompanyProperties, num_valid_stat_ent, SLE_UINT8), SLE_VAR(CompanyProperties, months_of_bankruptcy, SLE_UINT8), - SLE_CONDVAR(CompanyProperties, bankrupt_asked, SLE_FILE_U8 | SLE_VAR_U16, 0, 104), - SLE_CONDVAR(CompanyProperties, bankrupt_asked, SLE_UINT16, 104, SL_MAX_VERSION), + SLE_CONDVAR(CompanyProperties, bankrupt_asked, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_104), + SLE_CONDVAR(CompanyProperties, bankrupt_asked, SLE_UINT16, SLV_104, SL_MAX_VERSION), SLE_VAR(CompanyProperties, bankrupt_timeout, SLE_INT16), - SLE_CONDVAR(CompanyProperties, bankrupt_value, SLE_VAR_I64 | SLE_FILE_I32, 0, 65), - SLE_CONDVAR(CompanyProperties, bankrupt_value, SLE_INT64, 65, SL_MAX_VERSION), + SLE_CONDVAR(CompanyProperties, bankrupt_value, SLE_VAR_I64 | SLE_FILE_I32, SL_MIN_VERSION, SLV_65), + SLE_CONDVAR(CompanyProperties, bankrupt_value, SLE_INT64, SLV_65, SL_MAX_VERSION), /* yearly expenses was changed to 64-bit in savegame version 2. */ - SLE_CONDARR(CompanyProperties, yearly_expenses, SLE_FILE_I32 | SLE_VAR_I64, 3 * 13, 0, 2), - SLE_CONDARR(CompanyProperties, yearly_expenses, SLE_INT64, 3 * 13, 2, SL_MAX_VERSION), + SLE_CONDARR(CompanyProperties, yearly_expenses, SLE_FILE_I32 | SLE_VAR_I64, 3 * 13, SL_MIN_VERSION, SLV_2), + SLE_CONDARR(CompanyProperties, yearly_expenses, SLE_INT64, 3 * 13, SLV_2, SL_MAX_VERSION), - SLE_CONDVAR(CompanyProperties, is_ai, SLE_BOOL, 2, SL_MAX_VERSION), - SLE_CONDNULL(1, 107, 112), ///< is_noai - SLE_CONDNULL(1, 4, 100), + SLE_CONDVAR(CompanyProperties, is_ai, SLE_BOOL, SLV_2, SL_MAX_VERSION), + SLE_CONDNULL(1, SLV_107, SLV_112), ///< is_noai + SLE_CONDNULL(1, SLV_4, SLV_100), - SLE_CONDVAR(CompanyProperties, terraform_limit, SLE_UINT32, 156, SL_MAX_VERSION), - SLE_CONDVAR(CompanyProperties, clear_limit, SLE_UINT32, 156, SL_MAX_VERSION), - SLE_CONDVAR(CompanyProperties, tree_limit, SLE_UINT32, 175, SL_MAX_VERSION), + SLE_CONDVAR(CompanyProperties, terraform_limit, SLE_UINT32, SLV_156, SL_MAX_VERSION), + SLE_CONDVAR(CompanyProperties, clear_limit, SLE_UINT32, SLV_156, SL_MAX_VERSION), + SLE_CONDVAR(CompanyProperties, tree_limit, SLE_UINT32, SLV_175, SL_MAX_VERSION), SLE_END() }; static const SaveLoad _company_settings_desc[] = { /* Engine renewal settings */ - SLE_CONDNULL(512, 16, 19), - SLE_CONDREF(Company, engine_renew_list, REF_ENGINE_RENEWS, 19, SL_MAX_VERSION), - SLE_CONDVAR(Company, settings.engine_renew, SLE_BOOL, 16, SL_MAX_VERSION), - SLE_CONDVAR(Company, settings.engine_renew_months, SLE_INT16, 16, SL_MAX_VERSION), - SLE_CONDVAR(Company, settings.engine_renew_money, SLE_UINT32, 16, SL_MAX_VERSION), - SLE_CONDVAR(Company, settings.renew_keep_length, SLE_BOOL, 2, SL_MAX_VERSION), + SLE_CONDNULL(512, SLV_16, SLV_19), + SLE_CONDREF(Company, engine_renew_list, REF_ENGINE_RENEWS, SLV_19, SL_MAX_VERSION), + SLE_CONDVAR(Company, settings.engine_renew, SLE_BOOL, SLV_16, SL_MAX_VERSION), + SLE_CONDVAR(Company, settings.engine_renew_months, SLE_INT16, SLV_16, SL_MAX_VERSION), + SLE_CONDVAR(Company, settings.engine_renew_money, SLE_UINT32, SLV_16, SL_MAX_VERSION), + SLE_CONDVAR(Company, settings.renew_keep_length, SLE_BOOL, SLV_2, SL_MAX_VERSION), /* Default vehicle settings */ - SLE_CONDVAR(Company, settings.vehicle.servint_ispercent, SLE_BOOL, 120, SL_MAX_VERSION), - SLE_CONDVAR(Company, settings.vehicle.servint_trains, SLE_UINT16, 120, SL_MAX_VERSION), - SLE_CONDVAR(Company, settings.vehicle.servint_roadveh, SLE_UINT16, 120, SL_MAX_VERSION), - SLE_CONDVAR(Company, settings.vehicle.servint_aircraft, SLE_UINT16, 120, SL_MAX_VERSION), - SLE_CONDVAR(Company, settings.vehicle.servint_ships, SLE_UINT16, 120, SL_MAX_VERSION), + SLE_CONDVAR(Company, settings.vehicle.servint_ispercent, SLE_BOOL, SLV_120, SL_MAX_VERSION), + SLE_CONDVAR(Company, settings.vehicle.servint_trains, SLE_UINT16, SLV_120, SL_MAX_VERSION), + SLE_CONDVAR(Company, settings.vehicle.servint_roadveh, SLE_UINT16, SLV_120, SL_MAX_VERSION), + SLE_CONDVAR(Company, settings.vehicle.servint_aircraft, SLE_UINT16, SLV_120, SL_MAX_VERSION), + SLE_CONDVAR(Company, settings.vehicle.servint_ships, SLE_UINT16, SLV_120, SL_MAX_VERSION), - SLE_CONDNULL(63, 2, 144), // old reserved space + SLE_CONDNULL(63, SLV_2, SLV_144), // old reserved space SLE_END() }; static const SaveLoad _company_settings_skip_desc[] = { /* Engine renewal settings */ - SLE_CONDNULL(512, 16, 19), - SLE_CONDNULL(2, 19, 69), // engine_renew_list - SLE_CONDNULL(4, 69, SL_MAX_VERSION), // engine_renew_list - SLE_CONDNULL(1, 16, SL_MAX_VERSION), // settings.engine_renew - SLE_CONDNULL(2, 16, SL_MAX_VERSION), // settings.engine_renew_months - SLE_CONDNULL(4, 16, SL_MAX_VERSION), // settings.engine_renew_money - SLE_CONDNULL(1, 2, SL_MAX_VERSION), // settings.renew_keep_length + SLE_CONDNULL(512, SLV_16, SLV_19), + SLE_CONDNULL(2, SLV_19, SLV_69), // engine_renew_list + SLE_CONDNULL(4, SLV_69, SL_MAX_VERSION), // engine_renew_list + SLE_CONDNULL(1, SLV_16, SL_MAX_VERSION), // settings.engine_renew + SLE_CONDNULL(2, SLV_16, SL_MAX_VERSION), // settings.engine_renew_months + SLE_CONDNULL(4, SLV_16, SL_MAX_VERSION), // settings.engine_renew_money + SLE_CONDNULL(1, SLV_2, SL_MAX_VERSION), // settings.renew_keep_length /* Default vehicle settings */ - SLE_CONDNULL(1, 120, SL_MAX_VERSION), // settings.vehicle.servint_ispercent - SLE_CONDNULL(2, 120, SL_MAX_VERSION), // settings.vehicle.servint_trains - SLE_CONDNULL(2, 120, SL_MAX_VERSION), // settings.vehicle.servint_roadveh - SLE_CONDNULL(2, 120, SL_MAX_VERSION), // settings.vehicle.servint_aircraft - SLE_CONDNULL(2, 120, SL_MAX_VERSION), // settings.vehicle.servint_ships + SLE_CONDNULL(1, SLV_120, SL_MAX_VERSION), // settings.vehicle.servint_ispercent + SLE_CONDNULL(2, SLV_120, SL_MAX_VERSION), // settings.vehicle.servint_trains + SLE_CONDNULL(2, SLV_120, SL_MAX_VERSION), // settings.vehicle.servint_roadveh + SLE_CONDNULL(2, SLV_120, SL_MAX_VERSION), // settings.vehicle.servint_aircraft + SLE_CONDNULL(2, SLV_120, SL_MAX_VERSION), // settings.vehicle.servint_ships - SLE_CONDNULL(63, 2, 144), // old reserved space + SLE_CONDNULL(63, SLV_2, SLV_144), // old reserved space SLE_END() }; static const SaveLoad _company_economy_desc[] = { /* these were changed to 64-bit in savegame format 2 */ - SLE_CONDVAR(CompanyEconomyEntry, income, SLE_FILE_I32 | SLE_VAR_I64, 0, 2), - SLE_CONDVAR(CompanyEconomyEntry, income, SLE_INT64, 2, SL_MAX_VERSION), - SLE_CONDVAR(CompanyEconomyEntry, expenses, SLE_FILE_I32 | SLE_VAR_I64, 0, 2), - SLE_CONDVAR(CompanyEconomyEntry, expenses, SLE_INT64, 2, SL_MAX_VERSION), - SLE_CONDVAR(CompanyEconomyEntry, company_value, SLE_FILE_I32 | SLE_VAR_I64, 0, 2), - SLE_CONDVAR(CompanyEconomyEntry, company_value, SLE_INT64, 2, SL_MAX_VERSION), + SLE_CONDVAR(CompanyEconomyEntry, income, SLE_FILE_I32 | SLE_VAR_I64, SL_MIN_VERSION, SLV_2), + SLE_CONDVAR(CompanyEconomyEntry, income, SLE_INT64, SLV_2, SL_MAX_VERSION), + SLE_CONDVAR(CompanyEconomyEntry, expenses, SLE_FILE_I32 | SLE_VAR_I64, SL_MIN_VERSION, SLV_2), + SLE_CONDVAR(CompanyEconomyEntry, expenses, SLE_INT64, SLV_2, SL_MAX_VERSION), + SLE_CONDVAR(CompanyEconomyEntry, company_value, SLE_FILE_I32 | SLE_VAR_I64, SL_MIN_VERSION, SLV_2), + SLE_CONDVAR(CompanyEconomyEntry, company_value, SLE_INT64, SLV_2, SL_MAX_VERSION), - SLE_CONDVAR(CompanyEconomyEntry, delivered_cargo[NUM_CARGO - 1], SLE_INT32, 0, 170), - SLE_CONDARR(CompanyEconomyEntry, delivered_cargo, SLE_UINT32, 32, 170, 199), - SLE_CONDARR(CompanyEconomyEntry, delivered_cargo, SLE_UINT32, NUM_CARGO, 199, SL_MAX_VERSION), + SLE_CONDVAR(CompanyEconomyEntry, delivered_cargo[NUM_CARGO - 1], SLE_INT32, SL_MIN_VERSION, SLV_170), + SLE_CONDARR(CompanyEconomyEntry, delivered_cargo, SLE_UINT32, 32, SLV_170, SLV_199), + SLE_CONDARR(CompanyEconomyEntry, delivered_cargo, SLE_UINT32, NUM_CARGO, SLV_199, SL_MAX_VERSION), SLE_VAR(CompanyEconomyEntry, performance_history, SLE_INT32), SLE_END() @@ -363,49 +363,49 @@ struct CompanyOldAI { }; static const SaveLoad _company_ai_desc[] = { - SLE_CONDNULL(2, 0, 107), - SLE_CONDNULL(2, 0, 13), - SLE_CONDNULL(4, 13, 107), - SLE_CONDNULL(8, 0, 107), - SLE_CONDVAR(CompanyOldAI, num_build_rec, SLE_UINT8, 0, 107), - SLE_CONDNULL(3, 0, 107), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_107), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_13), + SLE_CONDNULL(4, SLV_13, SLV_107), + SLE_CONDNULL(8, SL_MIN_VERSION, SLV_107), + SLE_CONDVAR(CompanyOldAI, num_build_rec, SLE_UINT8, SL_MIN_VERSION, SLV_107), + SLE_CONDNULL(3, SL_MIN_VERSION, SLV_107), - SLE_CONDNULL(2, 0, 6), - SLE_CONDNULL(4, 6, 107), - SLE_CONDNULL(2, 0, 6), - SLE_CONDNULL(4, 6, 107), - SLE_CONDNULL(2, 0, 107), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6), + SLE_CONDNULL(4, SLV_6, SLV_107), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6), + SLE_CONDNULL(4, SLV_6, SLV_107), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_107), - SLE_CONDNULL(2, 0, 6), - SLE_CONDNULL(4, 6, 107), - SLE_CONDNULL(2, 0, 6), - SLE_CONDNULL(4, 6, 107), - SLE_CONDNULL(2, 0, 107), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6), + SLE_CONDNULL(4, SLV_6, SLV_107), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6), + SLE_CONDNULL(4, SLV_6, SLV_107), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_107), - SLE_CONDNULL(2, 0, 69), - SLE_CONDNULL(4, 69, 107), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_69), + SLE_CONDNULL(4, SLV_69, SLV_107), - SLE_CONDNULL(18, 0, 107), - SLE_CONDNULL(20, 0, 107), - SLE_CONDNULL(32, 0, 107), + SLE_CONDNULL(18, SL_MIN_VERSION, SLV_107), + SLE_CONDNULL(20, SL_MIN_VERSION, SLV_107), + SLE_CONDNULL(32, SL_MIN_VERSION, SLV_107), - SLE_CONDNULL(64, 2, 107), + SLE_CONDNULL(64, SLV_2, SLV_107), SLE_END() }; static const SaveLoad _company_ai_build_rec_desc[] = { - SLE_CONDNULL(2, 0, 6), - SLE_CONDNULL(4, 6, 107), - SLE_CONDNULL(2, 0, 6), - SLE_CONDNULL(4, 6, 107), - SLE_CONDNULL(8, 0, 107), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6), + SLE_CONDNULL(4, SLV_6, SLV_107), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6), + SLE_CONDNULL(4, SLV_6, SLV_107), + SLE_CONDNULL(8, SL_MIN_VERSION, SLV_107), SLE_END() }; static const SaveLoad _company_livery_desc[] = { - SLE_CONDVAR(Livery, in_use, SLE_UINT8, 34, SL_MAX_VERSION), - SLE_CONDVAR(Livery, colour1, SLE_UINT8, 34, SL_MAX_VERSION), - SLE_CONDVAR(Livery, colour2, SLE_UINT8, 34, SL_MAX_VERSION), + SLE_CONDVAR(Livery, in_use, SLE_UINT8, SLV_34, SL_MAX_VERSION), + SLE_CONDVAR(Livery, colour1, SLE_UINT8, SLV_34, SL_MAX_VERSION), + SLE_CONDVAR(Livery, colour2, SLE_UINT8, SLV_34, SL_MAX_VERSION), SLE_END() }; @@ -422,7 +422,7 @@ static void SaveLoad_PLYR_common(Company *c, CompanyProperties *cprops) } /* Keep backwards compatible for savegames, so load the old AI block */ - if (IsSavegameVersionBefore(107) && cprops->is_ai) { + if (IsSavegameVersionBefore(SLV_107) && cprops->is_ai) { CompanyOldAI old_ai; char nothing; @@ -442,8 +442,8 @@ static void SaveLoad_PLYR_common(Company *c, CompanyProperties *cprops) } /* Write each livery entry. */ - int num_liveries = IsSavegameVersionBefore(63) ? LS_END - 4 : (IsSavegameVersionBefore(85) ? LS_END - 2: LS_END); - bool update_in_use = IsSavegameVersionBefore(205); + int num_liveries = IsSavegameVersionBefore(SLV_63) ? LS_END - 4 : (IsSavegameVersionBefore(SLV_85) ? LS_END - 2: LS_END); + bool update_in_use = IsSavegameVersionBefore(SLV_205); if (c != NULL) { for (i = 0; i < num_liveries; i++) { SlObject(&c->livery[i], _company_livery_desc); @@ -510,7 +510,7 @@ static void Check_PLYR() SaveLoad_PLYR_common(NULL, cprops); /* We do not load old custom names */ - if (IsSavegameVersionBefore(84)) { + if (IsSavegameVersionBefore(SLV_84)) { if (GetStringTab(cprops->name_1) == TEXT_TAB_OLD_CUSTOM) { cprops->name_1 = STR_GAME_SAVELOAD_NOT_AVAILABLE; } diff --git a/src/saveload/depot_sl.cpp b/src/saveload/depot_sl.cpp index 14a255779b..b92417693c 100644 --- a/src/saveload/depot_sl.cpp +++ b/src/saveload/depot_sl.cpp @@ -20,13 +20,13 @@ static TownID _town_index; static const SaveLoad _depot_desc[] = { - SLE_CONDVAR(Depot, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), - SLE_CONDVAR(Depot, xy, SLE_UINT32, 6, SL_MAX_VERSION), - SLEG_CONDVAR(_town_index, SLE_UINT16, 0, 141), - SLE_CONDREF(Depot, town, REF_TOWN, 141, SL_MAX_VERSION), - SLE_CONDVAR(Depot, town_cn, SLE_UINT16, 141, SL_MAX_VERSION), - SLE_CONDSTR(Depot, name, SLE_STR, 0, 141, SL_MAX_VERSION), - SLE_CONDVAR(Depot, build_date, SLE_INT32, 142, SL_MAX_VERSION), + SLE_CONDVAR(Depot, xy, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), + SLE_CONDVAR(Depot, xy, SLE_UINT32, SLV_6, SL_MAX_VERSION), + SLEG_CONDVAR(_town_index, SLE_UINT16, SL_MIN_VERSION, SLV_141), + SLE_CONDREF(Depot, town, REF_TOWN, SLV_141, SL_MAX_VERSION), + SLE_CONDVAR(Depot, town_cn, SLE_UINT16, SLV_141, SL_MAX_VERSION), + SLE_CONDSTR(Depot, name, SLE_STR, 0, SLV_141, SL_MAX_VERSION), + SLE_CONDVAR(Depot, build_date, SLE_INT32, SLV_142, SL_MAX_VERSION), SLE_END() }; @@ -49,7 +49,7 @@ static void Load_DEPT() SlObject(depot, _depot_desc); /* Set the town 'pointer' so we can restore it later. */ - if (IsSavegameVersionBefore(141)) depot->town = (Town *)(size_t)_town_index; + if (IsSavegameVersionBefore(SLV_141)) depot->town = (Town *)(size_t)_town_index; } } @@ -59,7 +59,7 @@ static void Ptrs_DEPT() FOR_ALL_DEPOTS(depot) { SlObject(depot, _depot_desc); - if (IsSavegameVersionBefore(141)) depot->town = Town::Get((size_t)depot->town); + if (IsSavegameVersionBefore(SLV_141)) depot->town = Town::Get((size_t)depot->town); } } diff --git a/src/saveload/economy_sl.cpp b/src/saveload/economy_sl.cpp index 997a7ae6e0..10ca8ec444 100644 --- a/src/saveload/economy_sl.cpp +++ b/src/saveload/economy_sl.cpp @@ -21,7 +21,7 @@ static void Load_PRIC() { /* Old games store 49 base prices, very old games store them as int32 */ - int vt = IsSavegameVersionBefore(65) ? SLE_FILE_I32 : SLE_FILE_I64; + int vt = IsSavegameVersionBefore(SLV_65) ? SLE_FILE_I32 : SLE_FILE_I64; SlArray(NULL, 49, vt | SLE_VAR_NULL); SlArray(NULL, 49, SLE_FILE_U16 | SLE_VAR_NULL); } @@ -29,25 +29,25 @@ static void Load_PRIC() /** Cargo payment rates in pre 126 savegames */ static void Load_CAPR() { - uint num_cargo = IsSavegameVersionBefore(55) ? 12 : IsSavegameVersionBefore(199) ? 32 : NUM_CARGO; - int vt = IsSavegameVersionBefore(65) ? SLE_FILE_I32 : SLE_FILE_I64; + uint num_cargo = IsSavegameVersionBefore(SLV_55) ? 12 : IsSavegameVersionBefore(SLV_199) ? 32 : NUM_CARGO; + int vt = IsSavegameVersionBefore(SLV_65) ? SLE_FILE_I32 : SLE_FILE_I64; SlArray(NULL, num_cargo, vt | SLE_VAR_NULL); SlArray(NULL, num_cargo, SLE_FILE_U16 | SLE_VAR_NULL); } static const SaveLoad _economy_desc[] = { - SLE_CONDNULL(4, 0, 65), // max_loan - SLE_CONDNULL(8, 65, 144), // max_loan - SLE_CONDVAR(Economy, old_max_loan_unround, SLE_FILE_I32 | SLE_VAR_I64, 0, 65), - SLE_CONDVAR(Economy, old_max_loan_unround, SLE_INT64, 65, 126), - SLE_CONDVAR(Economy, old_max_loan_unround_fract, SLE_UINT16, 70, 126), - SLE_CONDVAR(Economy, inflation_prices, SLE_UINT64, 126, SL_MAX_VERSION), - SLE_CONDVAR(Economy, inflation_payment, SLE_UINT64, 126, SL_MAX_VERSION), + SLE_CONDNULL(4, SL_MIN_VERSION, SLV_65), // max_loan + SLE_CONDNULL(8, SLV_65, SLV_144), // max_loan + SLE_CONDVAR(Economy, old_max_loan_unround, SLE_FILE_I32 | SLE_VAR_I64, SL_MIN_VERSION, SLV_65), + SLE_CONDVAR(Economy, old_max_loan_unround, SLE_INT64, SLV_65, SLV_126), + SLE_CONDVAR(Economy, old_max_loan_unround_fract, SLE_UINT16, SLV_70, SLV_126), + SLE_CONDVAR(Economy, inflation_prices, SLE_UINT64, SLV_126, SL_MAX_VERSION), + SLE_CONDVAR(Economy, inflation_payment, SLE_UINT64, SLV_126, SL_MAX_VERSION), SLE_VAR(Economy, fluct, SLE_INT16), SLE_VAR(Economy, interest_rate, SLE_UINT8), SLE_VAR(Economy, infl_amount, SLE_UINT8), SLE_VAR(Economy, infl_amount_pr, SLE_UINT8), - SLE_CONDVAR(Economy, industry_daily_change_counter, SLE_UINT32, 102, SL_MAX_VERSION), + SLE_CONDVAR(Economy, industry_daily_change_counter, SLE_UINT32, SLV_102, SL_MAX_VERSION), SLE_END() }; @@ -61,14 +61,14 @@ static void Save_ECMY() static void Load_ECMY() { SlObject(&_economy, _economy_desc); - StartupIndustryDailyChanges(IsSavegameVersionBefore(102)); // old savegames will need to be initialized + StartupIndustryDailyChanges(IsSavegameVersionBefore(SLV_102)); // old savegames will need to be initialized } static const SaveLoad _cargopayment_desc[] = { SLE_REF(CargoPayment, front, REF_VEHICLE), SLE_VAR(CargoPayment, route_profit, SLE_INT64), SLE_VAR(CargoPayment, visual_profit, SLE_INT64), - SLE_CONDVAR(CargoPayment, visual_transfer, SLE_INT64, 181, SL_MAX_VERSION), + SLE_CONDVAR(CargoPayment, visual_transfer, SLE_INT64, SLV_181, SL_MAX_VERSION), SLE_END() }; diff --git a/src/saveload/engine_sl.cpp b/src/saveload/engine_sl.cpp index d9552bded2..5221d1bbdc 100644 --- a/src/saveload/engine_sl.cpp +++ b/src/saveload/engine_sl.cpp @@ -18,10 +18,10 @@ #include "../safeguards.h" static const SaveLoad _engine_desc[] = { - SLE_CONDVAR(Engine, intro_date, SLE_FILE_U16 | SLE_VAR_I32, 0, 31), - SLE_CONDVAR(Engine, intro_date, SLE_INT32, 31, SL_MAX_VERSION), - SLE_CONDVAR(Engine, age, SLE_FILE_U16 | SLE_VAR_I32, 0, 31), - SLE_CONDVAR(Engine, age, SLE_INT32, 31, SL_MAX_VERSION), + SLE_CONDVAR(Engine, intro_date, SLE_FILE_U16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31), + SLE_CONDVAR(Engine, intro_date, SLE_INT32, SLV_31, SL_MAX_VERSION), + SLE_CONDVAR(Engine, age, SLE_FILE_U16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31), + SLE_CONDVAR(Engine, age, SLE_INT32, SLV_31, SL_MAX_VERSION), SLE_VAR(Engine, reliability, SLE_UINT16), SLE_VAR(Engine, reliability_spd_dec, SLE_UINT16), SLE_VAR(Engine, reliability_start, SLE_UINT16), @@ -31,19 +31,19 @@ static const SaveLoad _engine_desc[] = { SLE_VAR(Engine, duration_phase_2, SLE_UINT16), SLE_VAR(Engine, duration_phase_3, SLE_UINT16), - SLE_CONDNULL(1, 0, 121), + SLE_CONDNULL(1, SL_MIN_VERSION, SLV_121), SLE_VAR(Engine, flags, SLE_UINT8), - SLE_CONDNULL(1, 0, 179), // old preview_company_rank - SLE_CONDVAR(Engine, preview_asked, SLE_UINT16, 179, SL_MAX_VERSION), - SLE_CONDVAR(Engine, preview_company, SLE_UINT8, 179, SL_MAX_VERSION), + SLE_CONDNULL(1, SL_MIN_VERSION, SLV_179), // old preview_company_rank + SLE_CONDVAR(Engine, preview_asked, SLE_UINT16, SLV_179, SL_MAX_VERSION), + SLE_CONDVAR(Engine, preview_company, SLE_UINT8, SLV_179, SL_MAX_VERSION), SLE_VAR(Engine, preview_wait, SLE_UINT8), - SLE_CONDNULL(1, 0, 45), - SLE_CONDVAR(Engine, company_avail, SLE_FILE_U8 | SLE_VAR_U16, 0, 104), - SLE_CONDVAR(Engine, company_avail, SLE_UINT16, 104, SL_MAX_VERSION), - SLE_CONDVAR(Engine, company_hidden, SLE_UINT16, 193, SL_MAX_VERSION), - SLE_CONDSTR(Engine, name, SLE_STR, 0, 84, SL_MAX_VERSION), + SLE_CONDNULL(1, SL_MIN_VERSION, SLV_45), + SLE_CONDVAR(Engine, company_avail, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_104), + SLE_CONDVAR(Engine, company_avail, SLE_UINT16, SLV_104, SL_MAX_VERSION), + SLE_CONDVAR(Engine, company_hidden, SLE_UINT16, SLV_193, SL_MAX_VERSION), + SLE_CONDSTR(Engine, name, SLE_STR, 0, SLV_84, SL_MAX_VERSION), - SLE_CONDNULL(16, 2, 144), // old reserved space + SLE_CONDNULL(16, SLV_2, SLV_144), // old reserved space SLE_END() }; @@ -105,7 +105,7 @@ static void Load_ENGN() Engine *e = GetTempDataEngine(index); SlObject(e, _engine_desc); - if (IsSavegameVersionBefore(179)) { + if (IsSavegameVersionBefore(SLV_179)) { /* preview_company_rank was replaced with preview_company and preview_asked. * Just cancel any previews. */ e->flags &= ~4; // ENGINE_OFFER_WINDOW_OPEN diff --git a/src/saveload/goal_sl.cpp b/src/saveload/goal_sl.cpp index 4d1441787d..a8cdc2305d 100644 --- a/src/saveload/goal_sl.cpp +++ b/src/saveload/goal_sl.cpp @@ -21,8 +21,8 @@ static const SaveLoad _goals_desc[] = { SLE_VAR(Goal, type, SLE_FILE_U16 | SLE_VAR_U8), SLE_VAR(Goal, dst, SLE_UINT32), SLE_STR(Goal, text, SLE_STR | SLF_ALLOW_CONTROL, 0), - SLE_CONDSTR(Goal, progress, SLE_STR | SLF_ALLOW_CONTROL, 0, 182, SL_MAX_VERSION), - SLE_CONDVAR(Goal, completed, SLE_BOOL, 182, SL_MAX_VERSION), + SLE_CONDSTR(Goal, progress, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_182, SL_MAX_VERSION), + SLE_CONDVAR(Goal, completed, SLE_BOOL, SLV_182, SL_MAX_VERSION), SLE_END() }; diff --git a/src/saveload/group_sl.cpp b/src/saveload/group_sl.cpp index 9142cceeaa..31788141d9 100644 --- a/src/saveload/group_sl.cpp +++ b/src/saveload/group_sl.cpp @@ -18,16 +18,16 @@ #include "../safeguards.h" static const SaveLoad _group_desc[] = { - SLE_CONDVAR(Group, name, SLE_NAME, 0, 84), - SLE_CONDSTR(Group, name, SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION), - SLE_CONDNULL(2, 0, 164), // num_vehicle + SLE_CONDVAR(Group, name, SLE_NAME, SL_MIN_VERSION, SLV_84), + SLE_CONDSTR(Group, name, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_164), // num_vehicle SLE_VAR(Group, owner, SLE_UINT8), SLE_VAR(Group, vehicle_type, SLE_UINT8), SLE_VAR(Group, replace_protection, SLE_BOOL), - SLE_CONDVAR(Group, livery.in_use, SLE_UINT8, 205, SL_MAX_VERSION), - SLE_CONDVAR(Group, livery.colour1, SLE_UINT8, 205, SL_MAX_VERSION), - SLE_CONDVAR(Group, livery.colour2, SLE_UINT8, 205, SL_MAX_VERSION), - SLE_CONDVAR(Group, parent, SLE_UINT16, 189, SL_MAX_VERSION), + SLE_CONDVAR(Group, livery.in_use, SLE_UINT8, SLV_205, SL_MAX_VERSION), + SLE_CONDVAR(Group, livery.colour1, SLE_UINT8, SLV_205, SL_MAX_VERSION), + SLE_CONDVAR(Group, livery.colour2, SLE_UINT8, SLV_205, SL_MAX_VERSION), + SLE_CONDVAR(Group, parent, SLE_UINT16, SLV_189, SL_MAX_VERSION), SLE_END() }; @@ -50,9 +50,9 @@ static void Load_GRPS() Group *g = new (index) Group(); SlObject(g, _group_desc); - if (IsSavegameVersionBefore(189)) g->parent = INVALID_GROUP; + if (IsSavegameVersionBefore(SLV_189)) g->parent = INVALID_GROUP; - if (IsSavegameVersionBefore(205)) { + if (IsSavegameVersionBefore(SLV_205)) { const Company *c = Company::Get(g->owner); g->livery.colour1 = c->livery[LS_DEFAULT].colour1; g->livery.colour2 = c->livery[LS_DEFAULT].colour2; diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp index 7fe667f425..ba250603a0 100644 --- a/src/saveload/industry_sl.cpp +++ b/src/saveload/industry_sl.cpp @@ -20,58 +20,58 @@ static OldPersistentStorage _old_ind_persistent_storage; static const SaveLoad _industry_desc[] = { - SLE_CONDVAR(Industry, location.tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), - SLE_CONDVAR(Industry, location.tile, SLE_UINT32, 6, SL_MAX_VERSION), + SLE_CONDVAR(Industry, location.tile, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), + SLE_CONDVAR(Industry, location.tile, SLE_UINT32, SLV_6, SL_MAX_VERSION), SLE_VAR(Industry, location.w, SLE_FILE_U8 | SLE_VAR_U16), SLE_VAR(Industry, location.h, SLE_FILE_U8 | SLE_VAR_U16), SLE_REF(Industry, town, REF_TOWN), - SLE_CONDNULL( 2, 0, 61), ///< used to be industry's produced_cargo - SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 2, 78, 202), - SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 16, 202, SL_MAX_VERSION), - SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 3, 70, 202), - SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 16, 202, SL_MAX_VERSION), - SLE_CONDARR(Industry, produced_cargo_waiting, SLE_UINT16, 2, 0, 202), - SLE_CONDARR(Industry, produced_cargo_waiting, SLE_UINT16, 16, 202, SL_MAX_VERSION), - SLE_CONDARR(Industry, production_rate, SLE_UINT8, 2, 0, 202), - SLE_CONDARR(Industry, production_rate, SLE_UINT8, 16, 202, SL_MAX_VERSION), - SLE_CONDNULL( 3, 0, 61), ///< used to be industry's accepts_cargo - SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 3, 78, 202), - SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 16, 202, SL_MAX_VERSION), + SLE_CONDNULL( 2, SL_MIN_VERSION, SLV_61), ///< used to be industry's produced_cargo + SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 2, SLV_78, SLV_202), + SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 16, SLV_202, SL_MAX_VERSION), + SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 3, SLV_70, SLV_202), + SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 16, SLV_202, SL_MAX_VERSION), + SLE_CONDARR(Industry, produced_cargo_waiting, SLE_UINT16, 2, SL_MIN_VERSION, SLV_202), + SLE_CONDARR(Industry, produced_cargo_waiting, SLE_UINT16, 16, SLV_202, SL_MAX_VERSION), + SLE_CONDARR(Industry, production_rate, SLE_UINT8, 2, SL_MIN_VERSION, SLV_202), + SLE_CONDARR(Industry, production_rate, SLE_UINT8, 16, SLV_202, SL_MAX_VERSION), + SLE_CONDNULL( 3, SL_MIN_VERSION, SLV_61), ///< used to be industry's accepts_cargo + SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 3, SLV_78, SLV_202), + SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 16, SLV_202, SL_MAX_VERSION), SLE_VAR(Industry, prod_level, SLE_UINT8), - SLE_CONDARR(Industry, this_month_production, SLE_UINT16, 2, 0, 202), - SLE_CONDARR(Industry, this_month_production, SLE_UINT16, 16, 202, SL_MAX_VERSION), - SLE_CONDARR(Industry, this_month_transported, SLE_UINT16, 2, 0, 202), - SLE_CONDARR(Industry, this_month_transported, SLE_UINT16, 16, 202, SL_MAX_VERSION), - SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8, 2, 0, 202), - SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8, 16, 202, SL_MAX_VERSION), - SLE_CONDARR(Industry, last_month_production, SLE_UINT16, 2, 0, 202), - SLE_CONDARR(Industry, last_month_production, SLE_UINT16, 16, 202, SL_MAX_VERSION), - SLE_CONDARR(Industry, last_month_transported, SLE_UINT16, 2, 0, 202), - SLE_CONDARR(Industry, last_month_transported, SLE_UINT16, 16, 202, SL_MAX_VERSION), + SLE_CONDARR(Industry, this_month_production, SLE_UINT16, 2, SL_MIN_VERSION, SLV_202), + SLE_CONDARR(Industry, this_month_production, SLE_UINT16, 16, SLV_202, SL_MAX_VERSION), + SLE_CONDARR(Industry, this_month_transported, SLE_UINT16, 2, SL_MIN_VERSION, SLV_202), + SLE_CONDARR(Industry, this_month_transported, SLE_UINT16, 16, SLV_202, SL_MAX_VERSION), + SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8, 2, SL_MIN_VERSION, SLV_202), + SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8, 16, SLV_202, SL_MAX_VERSION), + SLE_CONDARR(Industry, last_month_production, SLE_UINT16, 2, SL_MIN_VERSION, SLV_202), + SLE_CONDARR(Industry, last_month_production, SLE_UINT16, 16, SLV_202, SL_MAX_VERSION), + SLE_CONDARR(Industry, last_month_transported, SLE_UINT16, 2, SL_MIN_VERSION, SLV_202), + SLE_CONDARR(Industry, last_month_transported, SLE_UINT16, 16, SLV_202, SL_MAX_VERSION), SLE_VAR(Industry, counter, SLE_UINT16), SLE_VAR(Industry, type, SLE_UINT8), SLE_VAR(Industry, owner, SLE_UINT8), SLE_VAR(Industry, random_colour, SLE_UINT8), - SLE_CONDVAR(Industry, last_prod_year, SLE_FILE_U8 | SLE_VAR_I32, 0, 31), - SLE_CONDVAR(Industry, last_prod_year, SLE_INT32, 31, SL_MAX_VERSION), + SLE_CONDVAR(Industry, last_prod_year, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31), + SLE_CONDVAR(Industry, last_prod_year, SLE_INT32, SLV_31, SL_MAX_VERSION), SLE_VAR(Industry, was_cargo_delivered, SLE_UINT8), - SLE_CONDVAR(Industry, founder, SLE_UINT8, 70, SL_MAX_VERSION), - SLE_CONDVAR(Industry, construction_date, SLE_INT32, 70, SL_MAX_VERSION), - SLE_CONDVAR(Industry, construction_type, SLE_UINT8, 70, SL_MAX_VERSION), - SLE_CONDVAR(Industry, last_cargo_accepted_at[0], SLE_INT32, 70, 202), - SLE_CONDARR(Industry, last_cargo_accepted_at, SLE_INT32, 16, 202, SL_MAX_VERSION), - SLE_CONDVAR(Industry, selected_layout, SLE_UINT8, 73, SL_MAX_VERSION), + SLE_CONDVAR(Industry, founder, SLE_UINT8, SLV_70, SL_MAX_VERSION), + SLE_CONDVAR(Industry, construction_date, SLE_INT32, SLV_70, SL_MAX_VERSION), + SLE_CONDVAR(Industry, construction_type, SLE_UINT8, SLV_70, SL_MAX_VERSION), + SLE_CONDVAR(Industry, last_cargo_accepted_at[0], SLE_INT32, SLV_70, SLV_202), + SLE_CONDARR(Industry, last_cargo_accepted_at, SLE_INT32, 16, SLV_202, SL_MAX_VERSION), + SLE_CONDVAR(Industry, selected_layout, SLE_UINT8, SLV_73, SL_MAX_VERSION), - SLEG_CONDARR(_old_ind_persistent_storage.storage, SLE_UINT32, 16, 76, 161), - SLE_CONDREF(Industry, psa, REF_STORAGE, 161, SL_MAX_VERSION), + SLEG_CONDARR(_old_ind_persistent_storage.storage, SLE_UINT32, 16, SLV_76, SLV_161), + SLE_CONDREF(Industry, psa, REF_STORAGE, SLV_161, SL_MAX_VERSION), - SLE_CONDNULL(1, 82, 197), // random_triggers - SLE_CONDVAR(Industry, random, SLE_UINT16, 82, SL_MAX_VERSION), + SLE_CONDNULL(1, SLV_82, SLV_197), // random_triggers + SLE_CONDVAR(Industry, random, SLE_UINT16, SLV_82, SL_MAX_VERSION), - SLE_CONDNULL(32, 2, 144), // old reserved space + SLE_CONDNULL(32, SLV_2, SLV_144), // old reserved space SLE_END() }; @@ -108,7 +108,7 @@ static void Load_INDY() SlObject(i, _industry_desc); /* Before savegame version 161, persistent storages were not stored in a pool. */ - if (IsSavegameVersionBefore(161) && !IsSavegameVersionBefore(76)) { + if (IsSavegameVersionBefore(SLV_161) && !IsSavegameVersionBefore(SLV_76)) { /* Store the old persistent storage. The GRFID will be added later. */ assert(PersistentStorage::CanAllocateItem()); i->psa = new PersistentStorage(0, 0, 0); diff --git a/src/saveload/linkgraph_sl.cpp b/src/saveload/linkgraph_sl.cpp index 93959370c6..76390a0101 100644 --- a/src/saveload/linkgraph_sl.cpp +++ b/src/saveload/linkgraph_sl.cpp @@ -109,7 +109,7 @@ const SaveLoad *GetLinkGraphScheduleDesc() * SaveLoad desc for a link graph node. */ static const SaveLoad _node_desc[] = { - SLE_CONDVAR(Node, xy, SLE_UINT32, 191, SL_MAX_VERSION), + SLE_CONDVAR(Node, xy, SLE_UINT32, SLV_191, SL_MAX_VERSION), SLE_VAR(Node, supply, SLE_UINT32), SLE_VAR(Node, demand, SLE_UINT32), SLE_VAR(Node, station, SLE_UINT16), @@ -121,11 +121,11 @@ static const SaveLoad _node_desc[] = { * SaveLoad desc for a link graph edge. */ static const SaveLoad _edge_desc[] = { - SLE_CONDNULL(4, 0, 191), // distance + SLE_CONDNULL(4, SL_MIN_VERSION, SLV_191), // distance SLE_VAR(Edge, capacity, SLE_UINT32), SLE_VAR(Edge, usage, SLE_UINT32), SLE_VAR(Edge, last_unrestricted_update, SLE_INT32), - SLE_CONDVAR(Edge, last_restricted_update, SLE_INT32, 187, SL_MAX_VERSION), + SLE_CONDVAR(Edge, last_restricted_update, SLE_INT32, SLV_187, SL_MAX_VERSION), SLE_VAR(Edge, next_edge, SLE_UINT16), SLE_END() }; @@ -140,7 +140,7 @@ void SaveLoad_LinkGraph(LinkGraph &lg) for (NodeID from = 0; from < size; ++from) { Node *node = &lg.nodes[from]; SlObject(node, _node_desc); - if (IsSavegameVersionBefore(191)) { + if (IsSavegameVersionBefore(SLV_191)) { /* We used to save the full matrix ... */ for (NodeID to = 0; to < size; ++to) { SlObject(&lg.edges[from][to], _edge_desc); @@ -229,7 +229,7 @@ static void Load_LGRS() */ void AfterLoadLinkGraphs() { - if (IsSavegameVersionBefore(191)) { + if (IsSavegameVersionBefore(SLV_191)) { LinkGraph *lg; FOR_ALL_LINK_GRAPHS(lg) { for (NodeID node_id = 0; node_id < lg->Size(); ++node_id) { diff --git a/src/saveload/map_sl.cpp b/src/saveload/map_sl.cpp index 693ddb7ce3..5402ecc0d2 100644 --- a/src/saveload/map_sl.cpp +++ b/src/saveload/map_sl.cpp @@ -22,8 +22,8 @@ static uint32 _map_dim_x; static uint32 _map_dim_y; static const SaveLoadGlobVarList _map_dimensions[] = { - SLEG_CONDVAR(_map_dim_x, SLE_UINT32, 6, SL_MAX_VERSION), - SLEG_CONDVAR(_map_dim_y, SLE_UINT32, 6, SL_MAX_VERSION), + SLEG_CONDVAR(_map_dim_x, SLE_UINT32, SLV_6, SL_MAX_VERSION), + SLEG_CONDVAR(_map_dim_y, SLE_UINT32, SLV_6, SL_MAX_VERSION), SLEG_END() }; @@ -126,7 +126,7 @@ static void Load_MAP2() for (TileIndex i = 0; i != size;) { SlArray(buf, MAP_SL_BUF_SIZE, /* In those versions the m2 was 8 bits */ - IsSavegameVersionBefore(5) ? SLE_FILE_U8 | SLE_VAR_U16 : SLE_UINT16 + IsSavegameVersionBefore(SLV_5) ? SLE_FILE_U8 | SLE_VAR_U16 : SLE_UINT16 ); for (uint j = 0; j != MAP_SL_BUF_SIZE; j++) _m[i++].m2 = buf[j]; } @@ -218,7 +218,7 @@ static void Load_MAP6() SmallStackSafeStackAlloc buf; TileIndex size = MapSize(); - if (IsSavegameVersionBefore(42)) { + if (IsSavegameVersionBefore(SLV_42)) { for (TileIndex i = 0; i != size;) { /* 1024, otherwise we overflow on 64x64 maps! */ SlArray(buf, 1024, SLE_UINT8); diff --git a/src/saveload/misc_sl.cpp b/src/saveload/misc_sl.cpp index 0be1077a7f..cca3365b57 100644 --- a/src/saveload/misc_sl.cpp +++ b/src/saveload/misc_sl.cpp @@ -71,52 +71,52 @@ void ResetViewportAfterLoadGame() byte _age_cargo_skip_counter; ///< Skip aging of cargo? Used before savegame version 162. static const SaveLoadGlobVarList _date_desc[] = { - SLEG_CONDVAR(_date, SLE_FILE_U16 | SLE_VAR_I32, 0, 31), - SLEG_CONDVAR(_date, SLE_INT32, 31, SL_MAX_VERSION), + SLEG_CONDVAR(_date, SLE_FILE_U16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31), + SLEG_CONDVAR(_date, SLE_INT32, SLV_31, SL_MAX_VERSION), SLEG_VAR(_date_fract, SLE_UINT16), SLEG_VAR(_tick_counter, SLE_UINT16), - SLE_CONDNULL(2, 0, 157), // _vehicle_id_ctr_day - SLEG_CONDVAR(_age_cargo_skip_counter, SLE_UINT8, 0, 162), - SLE_CONDNULL(1, 0, 46), - SLEG_CONDVAR(_cur_tileloop_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), - SLEG_CONDVAR(_cur_tileloop_tile, SLE_UINT32, 6, SL_MAX_VERSION), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_157), // _vehicle_id_ctr_day + SLEG_CONDVAR(_age_cargo_skip_counter, SLE_UINT8, SL_MIN_VERSION, SLV_162), + SLE_CONDNULL(1, SL_MIN_VERSION, SLV_46), + SLEG_CONDVAR(_cur_tileloop_tile, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), + SLEG_CONDVAR(_cur_tileloop_tile, SLE_UINT32, SLV_6, SL_MAX_VERSION), SLEG_VAR(_disaster_delay, SLE_UINT16), - SLE_CONDNULL(2, 0, 120), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_120), SLEG_VAR(_random.state[0], SLE_UINT32), SLEG_VAR(_random.state[1], SLE_UINT32), - SLE_CONDNULL(1, 0, 10), - SLE_CONDNULL(4, 10, 120), + SLE_CONDNULL(1, SL_MIN_VERSION, SLV_10), + SLE_CONDNULL(4, SLV_10, SLV_120), SLEG_VAR(_cur_company_tick_index, SLE_FILE_U8 | SLE_VAR_U32), - SLEG_CONDVAR(_next_competitor_start, SLE_FILE_U16 | SLE_VAR_U32, 0, 109), - SLEG_CONDVAR(_next_competitor_start, SLE_UINT32, 109, SL_MAX_VERSION), + SLEG_CONDVAR(_next_competitor_start, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_109), + SLEG_CONDVAR(_next_competitor_start, SLE_UINT32, SLV_109, SL_MAX_VERSION), SLEG_VAR(_trees_tick_ctr, SLE_UINT8), - SLEG_CONDVAR(_pause_mode, SLE_UINT8, 4, SL_MAX_VERSION), - SLE_CONDNULL(4, 11, 120), + SLEG_CONDVAR(_pause_mode, SLE_UINT8, SLV_4, SL_MAX_VERSION), + SLE_CONDNULL(4, SLV_11, SLV_120), SLEG_END() }; static const SaveLoadGlobVarList _date_check_desc[] = { - SLEG_CONDVAR(_load_check_data.current_date, SLE_FILE_U16 | SLE_VAR_I32, 0, 31), - SLEG_CONDVAR(_load_check_data.current_date, SLE_INT32, 31, SL_MAX_VERSION), + SLEG_CONDVAR(_load_check_data.current_date, SLE_FILE_U16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31), + SLEG_CONDVAR(_load_check_data.current_date, SLE_INT32, SLV_31, SL_MAX_VERSION), SLE_NULL(2), // _date_fract SLE_NULL(2), // _tick_counter - SLE_CONDNULL(2, 0, 157), // _vehicle_id_ctr_day - SLE_CONDNULL(1, 0, 162), // _age_cargo_skip_counter - SLE_CONDNULL(1, 0, 46), - SLE_CONDNULL(2, 0, 6), // _cur_tileloop_tile - SLE_CONDNULL(4, 6, SL_MAX_VERSION), // _cur_tileloop_tile + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_157), // _vehicle_id_ctr_day + SLE_CONDNULL(1, SL_MIN_VERSION, SLV_162), // _age_cargo_skip_counter + SLE_CONDNULL(1, SL_MIN_VERSION, SLV_46), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6), // _cur_tileloop_tile + SLE_CONDNULL(4, SLV_6, SL_MAX_VERSION), // _cur_tileloop_tile SLE_NULL(2), // _disaster_delay - SLE_CONDNULL(2, 0, 120), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_120), SLE_NULL(4), // _random.state[0] SLE_NULL(4), // _random.state[1] - SLE_CONDNULL(1, 0, 10), - SLE_CONDNULL(4, 10, 120), + SLE_CONDNULL(1, SL_MIN_VERSION, SLV_10), + SLE_CONDNULL(4, SLV_10, SLV_120), SLE_NULL(1), // _cur_company_tick_index - SLE_CONDNULL(2, 0, 109), // _next_competitor_start - SLE_CONDNULL(4, 109, SL_MAX_VERSION), // _next_competitor_start + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_109), // _next_competitor_start + SLE_CONDNULL(4, SLV_109, SL_MAX_VERSION), // _next_competitor_start SLE_NULL(1), // _trees_tick_ctr - SLE_CONDNULL(1, 4, SL_MAX_VERSION), // _pause_mode - SLE_CONDNULL(4, 11, 120), + SLE_CONDNULL(1, SLV_4, SL_MAX_VERSION), // _pause_mode + SLE_CONDNULL(4, SLV_11, SLV_120), SLEG_END() }; @@ -130,17 +130,17 @@ static void SaveLoad_DATE() static void Check_DATE() { SlGlobList(_date_check_desc); - if (IsSavegameVersionBefore(31)) { + if (IsSavegameVersionBefore(SLV_31)) { _load_check_data.current_date += DAYS_TILL_ORIGINAL_BASE_YEAR; } } static const SaveLoadGlobVarList _view_desc[] = { - SLEG_CONDVAR(_saved_scrollpos_x, SLE_FILE_I16 | SLE_VAR_I32, 0, 6), - SLEG_CONDVAR(_saved_scrollpos_x, SLE_INT32, 6, SL_MAX_VERSION), - SLEG_CONDVAR(_saved_scrollpos_y, SLE_FILE_I16 | SLE_VAR_I32, 0, 6), - SLEG_CONDVAR(_saved_scrollpos_y, SLE_INT32, 6, SL_MAX_VERSION), + SLEG_CONDVAR(_saved_scrollpos_x, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_6), + SLEG_CONDVAR(_saved_scrollpos_x, SLE_INT32, SLV_6, SL_MAX_VERSION), + SLEG_CONDVAR(_saved_scrollpos_y, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_6), + SLEG_CONDVAR(_saved_scrollpos_y, SLE_INT32, SLV_6, SL_MAX_VERSION), SLEG_VAR(_saved_scrollpos_zoom, SLE_UINT8), SLEG_END() }; diff --git a/src/saveload/newgrf_sl.cpp b/src/saveload/newgrf_sl.cpp index de261f02aa..e40b45926c 100644 --- a/src/saveload/newgrf_sl.cpp +++ b/src/saveload/newgrf_sl.cpp @@ -61,10 +61,10 @@ static const SaveLoad _grfconfig_desc[] = { SLE_STR(GRFConfig, filename, SLE_STR, 0x40), SLE_VAR(GRFConfig, ident.grfid, SLE_UINT32), SLE_ARR(GRFConfig, ident.md5sum, SLE_UINT8, 16), - SLE_CONDVAR(GRFConfig, version, SLE_UINT32, 151, SL_MAX_VERSION), + SLE_CONDVAR(GRFConfig, version, SLE_UINT32, SLV_151, SL_MAX_VERSION), SLE_ARR(GRFConfig, param, SLE_UINT32, 0x80), SLE_VAR(GRFConfig, num_params, SLE_UINT8), - SLE_CONDVAR(GRFConfig, palette, SLE_UINT8, 101, SL_MAX_VERSION), + SLE_CONDVAR(GRFConfig, palette, SLE_UINT8, SLV_101, SL_MAX_VERSION), SLE_END() }; @@ -87,7 +87,7 @@ static void Load_NGRF_common(GRFConfig *&grfconfig) while (SlIterateArray() != -1) { GRFConfig *c = new GRFConfig(); SlObject(c, _grfconfig_desc); - if (IsSavegameVersionBefore(101)) c->SetSuitablePalette(); + if (IsSavegameVersionBefore(SLV_101)) c->SetSuitablePalette(); AppendToGRFConfigList(&grfconfig, c); } } diff --git a/src/saveload/object_sl.cpp b/src/saveload/object_sl.cpp index dfb1d2cbf5..6b0b99e479 100644 --- a/src/saveload/object_sl.cpp +++ b/src/saveload/object_sl.cpp @@ -24,9 +24,9 @@ static const SaveLoad _object_desc[] = { SLE_VAR(Object, location.h, SLE_FILE_U8 | SLE_VAR_U16), SLE_REF(Object, town, REF_TOWN), SLE_VAR(Object, build_date, SLE_UINT32), - SLE_CONDVAR(Object, colour, SLE_UINT8, 148, SL_MAX_VERSION), - SLE_CONDVAR(Object, view, SLE_UINT8, 155, SL_MAX_VERSION), - SLE_CONDVAR(Object, type, SLE_UINT16, 186, SL_MAX_VERSION), + SLE_CONDVAR(Object, colour, SLE_UINT8, SLV_148, SL_MAX_VERSION), + SLE_CONDVAR(Object, view, SLE_UINT8, SLV_155, SL_MAX_VERSION), + SLE_CONDVAR(Object, type, SLE_UINT16, SLV_186, SL_MAX_VERSION), SLE_END() }; @@ -56,7 +56,7 @@ static void Ptrs_OBJS() Object *o; FOR_ALL_OBJECTS(o) { SlObject(o, _object_desc); - if (IsSavegameVersionBefore(148) && !IsTileType(o->location.tile, MP_OBJECT)) { + if (IsSavegameVersionBefore(SLV_148) && !IsTileType(o->location.tile, MP_OBJECT)) { /* Due to a small bug stale objects could remain. */ delete o; } diff --git a/src/saveload/order_sl.cpp b/src/saveload/order_sl.cpp index a56e56892b..b89514d479 100644 --- a/src/saveload/order_sl.cpp +++ b/src/saveload/order_sl.cpp @@ -28,7 +28,7 @@ void Order::ConvertFromOldSavegame() this->flags = 0; /* First handle non-stop - use value from savegame if possible, else use value from config file */ - if (_settings_client.gui.sg_new_nonstop || (IsSavegameVersionBefore(22) && _savegame_type != SGT_TTO && _savegame_type != SGT_TTD && _settings_client.gui.new_nonstop)) { + if (_settings_client.gui.sg_new_nonstop || (IsSavegameVersionBefore(SLV_22) && _savegame_type != SGT_TTO && _savegame_type != SGT_TTD && _settings_client.gui.new_nonstop)) { /* OFB_NON_STOP */ this->SetNonStopType((old_flags & 8) ? ONSF_NO_STOP_AT_ANY_STATION : ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS); } else { @@ -49,7 +49,7 @@ void Order::ConvertFromOldSavegame() this->SetLoadType(OLF_LOAD_IF_POSSIBLE); } else { /* old OTTD versions stored full_load_any in config file - assume it was enabled when loading */ - this->SetLoadType(_settings_client.gui.sg_full_load_any || IsSavegameVersionBefore(22) ? OLF_FULL_LOAD_ANY : OLFB_FULL_LOAD); + this->SetLoadType(_settings_client.gui.sg_full_load_any || IsSavegameVersionBefore(SLV_22) ? OLF_FULL_LOAD_ANY : OLFB_FULL_LOAD); } if (this->IsType(OT_GOTO_STATION)) this->SetStopLocation(OSL_PLATFORM_FAR_END); @@ -108,15 +108,15 @@ const SaveLoad *GetOrderDescription() SLE_VAR(Order, flags, SLE_UINT8), SLE_VAR(Order, dest, SLE_UINT16), SLE_REF(Order, next, REF_ORDER), - SLE_CONDVAR(Order, refit_cargo, SLE_UINT8, 36, SL_MAX_VERSION), - SLE_CONDNULL(1, 36, 182), // refit_subtype - SLE_CONDVAR(Order, wait_time, SLE_UINT16, 67, SL_MAX_VERSION), - SLE_CONDVAR(Order, travel_time, SLE_UINT16, 67, SL_MAX_VERSION), - SLE_CONDVAR(Order, max_speed, SLE_UINT16, 172, SL_MAX_VERSION), + SLE_CONDVAR(Order, refit_cargo, SLE_UINT8, SLV_36, SL_MAX_VERSION), + SLE_CONDNULL(1, SLV_36, SLV_182), // refit_subtype + SLE_CONDVAR(Order, wait_time, SLE_UINT16, SLV_67, SL_MAX_VERSION), + SLE_CONDVAR(Order, travel_time, SLE_UINT16, SLV_67, SL_MAX_VERSION), + SLE_CONDVAR(Order, max_speed, SLE_UINT16, SLV_172, SL_MAX_VERSION), /* Leftover from the minor savegame version stuff * We will never use those free bytes, but we have to keep this line to allow loading of old savegames */ - SLE_CONDNULL(10, 5, 36), + SLE_CONDNULL(10, SLV_5, SLV_36), SLE_END() }; @@ -135,12 +135,12 @@ static void Save_ORDR() static void Load_ORDR() { - if (IsSavegameVersionBefore(5, 2)) { + if (IsSavegameVersionBefore(SLV_5, 2)) { /* Version older than 5.2 did not have a ->next pointer. Convert them * (in the old days, the orderlist was 5000 items big) */ size_t len = SlGetFieldLength(); - if (IsSavegameVersionBefore(5)) { + if (IsSavegameVersionBefore(SLV_5)) { /* Pre-version 5 had another layout for orders * (uint16 instead of uint32) */ len /= sizeof(uint16); @@ -154,7 +154,7 @@ static void Load_ORDR() } free(orders); - } else if (IsSavegameVersionBefore(5, 2)) { + } else if (IsSavegameVersionBefore(SLV_5, 2)) { len /= sizeof(uint32); uint32 *orders = MallocT(len + 1); @@ -186,7 +186,7 @@ static void Load_ORDR() while ((index = SlIterateArray()) != -1) { Order *order = new (index) Order(); SlObject(order, GetOrderDescription()); - if (IsSavegameVersionBefore(190)) { + if (IsSavegameVersionBefore(SLV_190)) { order->SetTravelTimetabled(order->GetTravelTime() > 0); order->SetWaitTimetabled(order->GetWaitTime() > 0); } @@ -197,7 +197,7 @@ static void Load_ORDR() static void Ptrs_ORDR() { /* Orders from old savegames have pointers corrected in Load_ORDR */ - if (IsSavegameVersionBefore(5, 2)) return; + if (IsSavegameVersionBefore(SLV_5, 2)) return; Order *o; @@ -253,18 +253,18 @@ const SaveLoad *GetOrderBackupDescription() SLE_VAR(OrderBackup, user, SLE_UINT32), SLE_VAR(OrderBackup, tile, SLE_UINT32), SLE_VAR(OrderBackup, group, SLE_UINT16), - SLE_CONDVAR(OrderBackup, service_interval, SLE_FILE_U32 | SLE_VAR_U16, 0, 192), - SLE_CONDVAR(OrderBackup, service_interval, SLE_UINT16, 192, SL_MAX_VERSION), + SLE_CONDVAR(OrderBackup, service_interval, SLE_FILE_U32 | SLE_VAR_U16, SL_MIN_VERSION, SLV_192), + SLE_CONDVAR(OrderBackup, service_interval, SLE_UINT16, SLV_192, SL_MAX_VERSION), SLE_STR(OrderBackup, name, SLE_STR, 0), - SLE_CONDNULL(2, 0, 192), // clone (2 bytes of pointer, i.e. garbage) - SLE_CONDREF(OrderBackup, clone, REF_VEHICLE, 192, SL_MAX_VERSION), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_192), // clone (2 bytes of pointer, i.e. garbage) + SLE_CONDREF(OrderBackup, clone, REF_VEHICLE, SLV_192, SL_MAX_VERSION), SLE_VAR(OrderBackup, cur_real_order_index, SLE_UINT8), - SLE_CONDVAR(OrderBackup, cur_implicit_order_index, SLE_UINT8, 176, SL_MAX_VERSION), - SLE_CONDVAR(OrderBackup, current_order_time, SLE_UINT32, 176, SL_MAX_VERSION), - SLE_CONDVAR(OrderBackup, lateness_counter, SLE_INT32, 176, SL_MAX_VERSION), - SLE_CONDVAR(OrderBackup, timetable_start, SLE_INT32, 176, SL_MAX_VERSION), - SLE_CONDVAR(OrderBackup, vehicle_flags, SLE_FILE_U8 | SLE_VAR_U16, 176, 180), - SLE_CONDVAR(OrderBackup, vehicle_flags, SLE_UINT16, 180, SL_MAX_VERSION), + SLE_CONDVAR(OrderBackup, cur_implicit_order_index, SLE_UINT8, SLV_176, SL_MAX_VERSION), + SLE_CONDVAR(OrderBackup, current_order_time, SLE_UINT32, SLV_176, SL_MAX_VERSION), + SLE_CONDVAR(OrderBackup, lateness_counter, SLE_INT32, SLV_176, SL_MAX_VERSION), + SLE_CONDVAR(OrderBackup, timetable_start, SLE_INT32, SLV_176, SL_MAX_VERSION), + SLE_CONDVAR(OrderBackup, vehicle_flags, SLE_FILE_U8 | SLE_VAR_U16, SLV_176, SLV_180), + SLE_CONDVAR(OrderBackup, vehicle_flags, SLE_UINT16, SLV_180, SL_MAX_VERSION), SLE_REF(OrderBackup, orders, REF_ORDER), SLE_END() }; diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index b20e996cab..1d5eff8ba8 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -53,230 +53,7 @@ #include "../safeguards.h" -/* - * Previous savegame versions, the trunk revision where they were - * introduced and the released version that had that particular - * savegame version. - * Up to savegame version 18 there is a minor version as well. - * - * 1.0 0.1.x, 0.2.x - * 2.0 0.3.0 - * 2.1 0.3.1, 0.3.2 - * 3.x lost - * 4.0 1 - * 4.1 122 0.3.3, 0.3.4 - * 4.2 1222 0.3.5 - * 4.3 1417 - * 4.4 1426 - * 5.0 1429 - * 5.1 1440 - * 5.2 1525 0.3.6 - * 6.0 1721 - * 6.1 1768 - * 7.0 1770 - * 8.0 1786 - * 9.0 1909 - * 10.0 2030 - * 11.0 2033 - * 11.1 2041 - * 12.1 2046 - * 13.1 2080 0.4.0, 0.4.0.1 - * 14.0 2441 - * 15.0 2499 - * 16.0 2817 - * 16.1 3155 - * 17.0 3212 - * 17.1 3218 - * 18 3227 - * 19 3396 - * 20 3403 - * 21 3472 0.4.x - * 22 3726 - * 23 3915 - * 24 4150 - * 25 4259 - * 26 4466 - * 27 4757 - * 28 4987 - * 29 5070 - * 30 5946 - * 31 5999 - * 32 6001 - * 33 6440 - * 34 6455 - * 35 6602 - * 36 6624 - * 37 7182 - * 38 7195 - * 39 7269 - * 40 7326 - * 41 7348 0.5.x - * 42 7573 - * 43 7642 - * 44 8144 - * 45 8501 - * 46 8705 - * 47 8735 - * 48 8935 - * 49 8969 - * 50 8973 - * 51 8978 - * 52 9066 - * 53 9316 - * 54 9613 - * 55 9638 - * 56 9667 - * 57 9691 - * 58 9762 - * 59 9779 - * 60 9874 - * 61 9892 - * 62 9905 - * 63 9956 - * 64 10006 - * 65 10210 - * 66 10211 - * 67 10236 - * 68 10266 - * 69 10319 - * 70 10541 - * 71 10567 - * 72 10601 - * 73 10903 - * 74 11030 - * 75 11107 - * 76 11139 - * 77 11172 - * 78 11176 - * 79 11188 - * 80 11228 - * 81 11244 - * 82 11410 - * 83 11589 - * 84 11822 - * 85 11874 - * 86 12042 - * 87 12129 - * 88 12134 - * 89 12160 - * 90 12293 - * 91 12347 - * 92 12381 0.6.x - * 93 12648 - * 94 12816 - * 95 12924 - * 96 13226 - * 97 13256 - * 98 13375 - * 99 13838 - * 100 13952 - * 101 14233 - * 102 14332 - * 103 14598 - * 104 14735 - * 105 14803 - * 106 14919 - * 107 15027 - * 108 15045 - * 109 15075 - * 110 15148 - * 111 15190 - * 112 15290 - * 113 15340 - * 114 15601 - * 115 15695 - * 116 15893 0.7.x - * 117 16037 - * 118 16129 - * 119 16242 - * 120 16439 - * 121 16694 - * 122 16855 - * 123 16909 - * 124 16993 - * 125 17113 - * 126 17433 - * 127 17439 - * 128 18281 - * 129 18292 - * 130 18404 - * 131 18481 - * 132 18522 - * 133 18674 - * 134 18703 - * 135 18719 - * 136 18764 - * 137 18912 - * 138 18942 1.0.x - * 139 19346 - * 140 19382 - * 141 19799 - * 142 20003 - * 143 20048 - * 144 20334 - * 145 20376 - * 146 20446 - * 147 20621 - * 148 20659 - * 149 20832 - * 150 20857 - * 151 20918 - * 152 21171 - * 153 21263 - * 154 21426 - * 155 21453 - * 156 21728 - * 157 21862 - * 158 21933 - * 159 21962 - * 160 21974 1.1.x - * 161 22567 - * 162 22713 - * 163 22767 - * 164 23290 - * 165 23304 - * 166 23415 - * 167 23504 - * 168 23637 - * 169 23816 - * 170 23826 - * 171 23835 - * 172 23947 - * 173 23967 1.2.0-RC1 - * 174 23973 1.2.x - * 175 24136 - * 176 24446 - * 177 24619 - * 178 24789 - * 179 24810 - * 180 24998 1.3.x - * 181 25012 - * 182 25296 - * 183 25363 - * 184 25508 - * 185 25620 - * 186 25833 - * 187 25899 - * 188 26169 1.4.x - * 189 26450 - * 190 26547 - * 191 26646 - * 192 26700 - * 193 26802 - * 194 26881 1.5.x, 1.6.0 - * 195 27572 1.6.x - * 196 27778 1.7.x - * 197 27978 1.8.x - * 198 - * 199 - * 200 #6805 Extend railtypes to 64, adding uint16 to map array. - * 201 #6885 Extend NewGRF persistant storages. - * 202 #6867 Increase industry cargo slots to 16 in, 16 out - * 203 #7072 Add path cache for ships - * 204 #7065 Add extra rotation stages for ships. - * 205 #7108 Livery storage change and group liveries. - */ -extern const uint16 SAVEGAME_VERSION = 205; ///< Current savegame version of OpenTTD. +extern const uint16 SAVEGAME_VERSION = SL_MAX_VERSION - 1; ///< Current savegame version of OpenTTD. SavegameType _savegame_type; ///< type of savegame we are loading FileToSaveLoad _file_to_saveload; ///< File to save or load in the openttd loop. @@ -820,7 +597,7 @@ static inline byte SlCalcConvFileLen(VarType conv) /** Return the size in bytes of a reference (pointer) */ static inline size_t SlCalcRefLen() { - return IsSavegameVersionBefore(69) ? 2 : 4; + return IsSavegameVersionBefore(SLV_69) ? 2 : 4; } void SlSetArrayIndex(uint index) @@ -1161,7 +938,7 @@ static void SlString(void *ptr, size_t length, VarType conv) StringValidationSettings settings = SVS_REPLACE_WITH_QUESTION_MARK; if ((conv & SLF_ALLOW_CONTROL) != 0) { settings = settings | SVS_ALLOW_CONTROL_CODE; - if (IsSavegameVersionBefore(169)) { + if (IsSavegameVersionBefore(SLV_169)) { str_fix_scc_encoded((char *)ptr, (char *)ptr + len); } } @@ -1289,7 +1066,7 @@ static void *IntToReference(size_t index, SLRefType rt) /* After version 4.3 REF_VEHICLE_OLD is saved as REF_VEHICLE, * and should be loaded like that */ - if (rt == REF_VEHICLE_OLD && !IsSavegameVersionBefore(4, 4)) { + if (rt == REF_VEHICLE_OLD && !IsSavegameVersionBefore(SLV_4, 4)) { rt = REF_VEHICLE; } @@ -1308,7 +1085,7 @@ static void *IntToReference(size_t index, SLRefType rt) case REF_ORDER: if (Order::IsValidID(index)) return Order::Get(index); /* in old versions, invalid order was used to mark end of order list */ - if (IsSavegameVersionBefore(5, 2)) return NULL; + if (IsSavegameVersionBefore(SLV_5, 2)) return NULL; SlErrorCorrupt("Referencing invalid Order"); case REF_VEHICLE_OLD: @@ -1360,7 +1137,7 @@ static inline size_t SlCalcListLen(const void *list) { const std::list *l = (const std::list *) list; - int type_size = IsSavegameVersionBefore(69) ? 2 : 4; + int type_size = IsSavegameVersionBefore(SLV_69) ? 2 : 4; /* Each entry is saved as type_size bytes, plus type_size bytes are used for the length * of the list */ return l->size() * type_size + type_size; @@ -1397,11 +1174,11 @@ static void SlList(void *list, SLRefType conv) } case SLA_LOAD_CHECK: case SLA_LOAD: { - size_t length = IsSavegameVersionBefore(69) ? SlReadUint16() : SlReadUint32(); + size_t length = IsSavegameVersionBefore(SLV_69) ? SlReadUint16() : SlReadUint32(); /* Load each reference and push to the end of the list */ for (size_t i = 0; i < length; i++) { - size_t data = IsSavegameVersionBefore(69) ? SlReadUint16() : SlReadUint32(); + size_t data = IsSavegameVersionBefore(SLV_69) ? SlReadUint16() : SlReadUint32(); l->push_back((void *)data); } break; @@ -1692,7 +1469,7 @@ bool SlObjectMember(void *ptr, const SaveLoad *sld) break; case SLA_LOAD_CHECK: case SLA_LOAD: - *(size_t *)ptr = IsSavegameVersionBefore(69) ? SlReadUint16() : SlReadUint32(); + *(size_t *)ptr = IsSavegameVersionBefore(SLV_69) ? SlReadUint16() : SlReadUint32(); break; case SLA_PTRS: *(void **)ptr = IntToReference(*(size_t *)ptr, (SLRefType)conv); @@ -2838,7 +2615,7 @@ static SaveOrLoadResult DoLoad(LoadFilter *reader, bool load_check) GamelogReset(); - if (IsSavegameVersionBefore(4)) { + if (IsSavegameVersionBefore(SLV_4)) { /* * NewGRFs were introduced between 0.3,4 and 0.3.5, which both * shared savegame version 4. Anything before that 'obviously' diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 8a2eeead2f..f14f884d5c 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -15,6 +15,284 @@ #include "../fileio_type.h" #include "../strings_type.h" +/** SaveLoad versions + * Previous savegame versions, the trunk revision where they were + * introduced and the released version that had that particular + * savegame version. + * Up to savegame version 18 there is a minor version as well. + * + * Older entries keep their original numbering. + * + * Newer entries should use a descriptive labels, numeric version + * and PR can be added to comment. + * + * Note that this list must not be reordered. + */ +enum SaveLoadVersion : uint16 { + SL_MIN_VERSION, ///< First savegame version + + SLV_1, ///< 1.0 0.1.x, 0.2.x + SLV_2, /**< 2.0 0.3.0 + * 2.1 0.3.1, 0.3.2 */ + SLV_3, ///< 3.x lost + SLV_4, /**< 4.0 1 + * 4.1 122 0.3.3, 0.3.4 + * 4.2 1222 0.3.5 + * 4.3 1417 + * 4.4 1426 */ + + SLV_5, /**< 5.0 1429 + * 5.1 1440 + * 5.2 1525 0.3.6 */ + SLV_6, /**< 6.0 1721 + * 6.1 1768 */ + SLV_7, ///< 7.0 1770 + SLV_8, ///< 8.0 1786 + SLV_9, ///< 9.0 1909 + + SLV_10, ///< 10.0 2030 + SLV_11, /**< 11.0 2033 + * 11.1 2041 */ + SLV_12, ///< 12.1 2046 + SLV_13, ///< 13.1 2080 0.4.0, 0.4.0.1 + SLV_14, ///< 14.0 2441 + + SLV_15, ///< 15.0 2499 + SLV_16, /**< 16.0 2817 + * 16.1 3155 */ + SLV_17, /**< 17.0 3212 + * 17.1 3218 */ + SLV_18, ///< 18 3227 + SLV_19, ///< 19 3396 + + SLV_20, ///< 20 3403 + SLV_21, ///< 21 3472 0.4.x + SLV_22, ///< 22 3726 + SLV_23, ///< 23 3915 + SLV_24, ///< 24 4150 + + SLV_25, ///< 25 4259 + SLV_26, ///< 26 4466 + SLV_27, ///< 27 4757 + SLV_28, ///< 28 4987 + SLV_29, ///< 29 5070 + + SLV_30, ///< 30 5946 + SLV_31, ///< 31 5999 + SLV_32, ///< 32 6001 + SLV_33, ///< 33 6440 + SLV_34, ///< 34 6455 + + SLV_35, ///< 35 6602 + SLV_36, ///< 36 6624 + SLV_37, ///< 37 7182 + SLV_38, ///< 38 7195 + SLV_39, ///< 39 7269 + + SLV_40, ///< 40 7326 + SLV_41, ///< 41 7348 0.5.x + SLV_42, ///< 42 7573 + SLV_43, ///< 43 7642 + SLV_44, ///< 44 8144 + + SLV_45, ///< 45 8501 + SLV_46, ///< 46 8705 + SLV_47, ///< 47 8735 + SLV_48, ///< 48 8935 + SLV_49, ///< 49 8969 + + SLV_50, ///< 50 8973 + SLV_51, ///< 51 8978 + SLV_52, ///< 52 9066 + SLV_53, ///< 53 9316 + SLV_54, ///< 54 9613 + + SLV_55, ///< 55 9638 + SLV_56, ///< 56 9667 + SLV_57, ///< 57 9691 + SLV_58, ///< 58 9762 + SLV_59, ///< 59 9779 + + SLV_60, ///< 60 9874 + SLV_61, ///< 61 9892 + SLV_62, ///< 62 9905 + SLV_63, ///< 63 9956 + SLV_64, ///< 64 10006 + + SLV_65, ///< 65 10210 + SLV_66, ///< 66 10211 + SLV_67, ///< 67 10236 + SLV_68, ///< 68 10266 + SLV_69, ///< 69 10319 + + SLV_70, ///< 70 10541 + SLV_71, ///< 71 10567 + SLV_72, ///< 72 10601 + SLV_73, ///< 73 10903 + SLV_74, ///< 74 11030 + + SLV_75, ///< 75 11107 + SLV_76, ///< 76 11139 + SLV_77, ///< 77 11172 + SLV_78, ///< 78 11176 + SLV_79, ///< 79 11188 + + SLV_80, ///< 80 11228 + SLV_81, ///< 81 11244 + SLV_82, ///< 82 11410 + SLV_83, ///< 83 11589 + SLV_84, ///< 84 11822 + + SLV_85, ///< 85 11874 + SLV_86, ///< 86 12042 + SLV_87, ///< 87 12129 + SLV_88, ///< 88 12134 + SLV_89, ///< 89 12160 + + SLV_90, ///< 90 12293 + SLV_91, ///< 91 12347 + SLV_92, ///< 92 12381 0.6.x + SLV_93, ///< 93 12648 + SLV_94, ///< 94 12816 + + SLV_95, ///< 95 12924 + SLV_96, ///< 96 13226 + SLV_97, ///< 97 13256 + SLV_98, ///< 98 13375 + SLV_99, ///< 99 13838 + + SLV_100, ///< 100 13952 + SLV_101, ///< 101 14233 + SLV_102, ///< 102 14332 + SLV_103, ///< 103 14598 + SLV_104, ///< 104 14735 + + SLV_105, ///< 105 14803 + SLV_106, ///< 106 14919 + SLV_107, ///< 107 15027 + SLV_108, ///< 108 15045 + SLV_109, ///< 109 15075 + + SLV_110, ///< 110 15148 + SLV_111, ///< 111 15190 + SLV_112, ///< 112 15290 + SLV_113, ///< 113 15340 + SLV_114, ///< 114 15601 + + SLV_115, ///< 115 15695 + SLV_116, ///< 116 15893 0.7.x + SLV_117, ///< 117 16037 + SLV_118, ///< 118 16129 + SLV_119, ///< 119 16242 + + SLV_120, ///< 120 16439 + SLV_121, ///< 121 16694 + SLV_122, ///< 122 16855 + SLV_123, ///< 123 16909 + SLV_124, ///< 124 16993 + + SLV_125, ///< 125 17113 + SLV_126, ///< 126 17433 + SLV_127, ///< 127 17439 + SLV_128, ///< 128 18281 + SLV_129, ///< 129 18292 + + SLV_130, ///< 130 18404 + SLV_131, ///< 131 18481 + SLV_132, ///< 132 18522 + SLV_133, ///< 133 18674 + SLV_134, ///< 134 18703 + + SLV_135, ///< 135 18719 + SLV_136, ///< 136 18764 + SLV_137, ///< 137 18912 + SLV_138, ///< 138 18942 1.0.x + SLV_139, ///< 139 19346 + + SLV_140, ///< 140 19382 + SLV_141, ///< 141 19799 + SLV_142, ///< 142 20003 + SLV_143, ///< 143 20048 + SLV_144, ///< 144 20334 + + SLV_145, ///< 145 20376 + SLV_146, ///< 146 20446 + SLV_147, ///< 147 20621 + SLV_148, ///< 148 20659 + SLV_149, ///< 149 20832 + + SLV_150, ///< 150 20857 + SLV_151, ///< 151 20918 + SLV_152, ///< 152 21171 + SLV_153, ///< 153 21263 + SLV_154, ///< 154 21426 + + SLV_155, ///< 155 21453 + SLV_156, ///< 156 21728 + SLV_157, ///< 157 21862 + SLV_158, ///< 158 21933 + SLV_159, ///< 159 21962 + + SLV_160, ///< 160 21974 1.1.x + SLV_161, ///< 161 22567 + SLV_162, ///< 162 22713 + SLV_163, ///< 163 22767 + SLV_164, ///< 164 23290 + + SLV_165, ///< 165 23304 + SLV_166, ///< 166 23415 + SLV_167, ///< 167 23504 + SLV_168, ///< 168 23637 + SLV_169, ///< 169 23816 + + SLV_170, ///< 170 23826 + SLV_171, ///< 171 23835 + SLV_172, ///< 172 23947 + SLV_173, ///< 173 23967 1.2.0-RC1 + SLV_174, ///< 174 23973 1.2.x + + SLV_175, ///< 175 24136 + SLV_176, ///< 176 24446 + SLV_177, ///< 177 24619 + SLV_178, ///< 178 24789 + SLV_179, ///< 179 24810 + + SLV_180, ///< 180 24998 1.3.x + SLV_181, ///< 181 25012 + SLV_182, ///< 182 25115 FS#5492, r25259, r25296 Goal status + SLV_183, ///< 183 25363 Cargodist + SLV_184, ///< 184 25508 Unit localisation split + + SLV_185, ///< 185 25620 Storybooks + SLV_186, ///< 186 25833 Objects storage + SLV_187, ///< 187 25899 Linkgraph - restricted flows + SLV_188, ///< 188 26169 FS#5831 Unify RV travel time + SLV_189, ///< 189 26450 Heirarchical vehicle subgroups + + SLV_190, ///< 190 26547 Separate order travel and wait times + SLV_191, ///< 191 26636 FS#6026 Fix disaster vehicle storage (No bump) + ///< 191 26646 FS#6041 Linkgraph - store locations + SLV_192, ///< 192 26700 FS#6066 Fix saving of order backups + SLV_193, ///< 193 26802 + SLV_194, ///< 194 26881 v1.5 + + SLV_195, ///< 195 27572 v1.6.1 + SLV_196, ///< 196 27778 v1.7 + SLV_197, ///< 197 27978 v1.8 + SLV_198, ///< 198 PR#6763 Switch town growth rate and counter to actual game ticks + SLV_199, ///< 199 PR#6802 Extend cargotypes to 64 + + SLV_200, ///< 200 PR#6805 Extend railtypes to 64, adding uint16 to map array. + SLV_201, ///< 201 PR#6885 Extend NewGRF persistant storages. + SLV_202, ///< 202 PR#6867 Increase industry cargo slots to 16 in, 16 out + SLV_203, ///< 203 PR#7072 Add path cache for ships + SLV_204, ///< 204 PR#7065 Add extra rotation stages for ships. + + SLV_205, ///< 205 PR#7108 Livery storage change and group liveries. + + SL_MAX_VERSION, ///< Highest possible saveload version +}; + /** Save or load result codes. */ enum SaveOrLoadResult { SL_OK = 0, ///< completed successfully @@ -92,9 +370,6 @@ enum SLRefType { REF_LINK_GRAPH_JOB = 11, ///< Load/save a reference to a link graph job. }; -/** Highest possible savegame version. */ -#define SL_MAX_VERSION UINT16_MAX - /** Flags of a chunk. */ enum ChunkType { CH_RIFF = 0, @@ -211,8 +486,8 @@ struct SaveLoad { SaveLoadType cmd; ///< the action to take with the saved/loaded type, All types need different action VarType conv; ///< type of the variable to be saved, int uint16 length; ///< (conditional) length of the variable (eg. arrays) (max array size is 65536 elements) - uint16 version_from; ///< save/load the variable starting from this savegame version - uint16 version_to; ///< save/load the variable until this savegame version + SaveLoadVersion version_from; ///< save/load the variable starting from this savegame version + SaveLoadVersion version_to; ///< save/load the variable until this savegame version /* NOTE: This element either denotes the address of the variable for a global * variable, or the offset within a struct which is then bound to a variable * during runtime. Decision on which one to use is controlled by the function @@ -304,7 +579,7 @@ typedef SaveLoad SaveLoadGlobVarList; * @param variable Name of the variable in the class or struct referenced by \a base. * @param type Storage of the data in memory and in the savegame. */ -#define SLE_VAR(base, variable, type) SLE_CONDVAR(base, variable, type, 0, SL_MAX_VERSION) +#define SLE_VAR(base, variable, type) SLE_CONDVAR(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION) /** * Storage of a reference in every version of a savegame. @@ -312,7 +587,7 @@ typedef SaveLoad SaveLoadGlobVarList; * @param variable Name of the variable in the class or struct referenced by \a base. * @param type Type of the reference, a value from #SLRefType. */ -#define SLE_REF(base, variable, type) SLE_CONDREF(base, variable, type, 0, SL_MAX_VERSION) +#define SLE_REF(base, variable, type) SLE_CONDREF(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION) /** * Storage of an array in every version of a savegame. @@ -321,7 +596,7 @@ typedef SaveLoad SaveLoadGlobVarList; * @param type Storage of the data in memory and in the savegame. * @param length Number of elements in the array. */ -#define SLE_ARR(base, variable, type, length) SLE_CONDARR(base, variable, type, length, 0, SL_MAX_VERSION) +#define SLE_ARR(base, variable, type, length) SLE_CONDARR(base, variable, type, length, SL_MIN_VERSION, SL_MAX_VERSION) /** * Storage of a string in every savegame version. @@ -330,7 +605,7 @@ typedef SaveLoad SaveLoadGlobVarList; * @param type Storage of the data in memory and in the savegame. * @param length Number of elements in the string (only used for fixed size buffers). */ -#define SLE_STR(base, variable, type, length) SLE_CONDSTR(base, variable, type, length, 0, SL_MAX_VERSION) +#define SLE_STR(base, variable, type, length) SLE_CONDSTR(base, variable, type, length, SL_MIN_VERSION, SL_MAX_VERSION) /** * Storage of a list in every savegame version. @@ -338,13 +613,13 @@ typedef SaveLoad SaveLoadGlobVarList; * @param variable Name of the variable in the class or struct referenced by \a base. * @param type Storage of the data in memory and in the savegame. */ -#define SLE_LST(base, variable, type) SLE_CONDLST(base, variable, type, 0, SL_MAX_VERSION) +#define SLE_LST(base, variable, type) SLE_CONDLST(base, variable, type, SL_MIN_VERSION, SL_MAX_VERSION) /** * Empty space in every savegame version. * @param length Length of the empty space. */ -#define SLE_NULL(length) SLE_CONDNULL(length, 0, SL_MAX_VERSION) +#define SLE_NULL(length) SLE_CONDNULL(length, SL_MIN_VERSION, SL_MAX_VERSION) /** * Empty space in some savegame versions. @@ -355,13 +630,13 @@ typedef SaveLoad SaveLoadGlobVarList; #define SLE_CONDNULL(length, from, to) SLE_CONDARR(NullStruct, null, SLE_FILE_U8 | SLE_VAR_NULL | SLF_NOT_IN_CONFIG, length, from, to) /** Translate values ingame to different values in the savegame and vv. */ -#define SLE_WRITEBYTE(base, variable) SLE_GENERAL(SL_WRITEBYTE, base, variable, 0, 0, 0, 0) +#define SLE_WRITEBYTE(base, variable) SLE_GENERAL(SL_WRITEBYTE, base, variable, 0, 0, SL_MIN_VERSION, SL_MAX_VERSION) -#define SLE_VEH_INCLUDE() {false, SL_VEH_INCLUDE, 0, 0, 0, SL_MAX_VERSION, NULL, 0} -#define SLE_ST_INCLUDE() {false, SL_ST_INCLUDE, 0, 0, 0, SL_MAX_VERSION, NULL, 0} +#define SLE_VEH_INCLUDE() {false, SL_VEH_INCLUDE, 0, 0, SL_MIN_VERSION, SL_MAX_VERSION, NULL, 0} +#define SLE_ST_INCLUDE() {false, SL_ST_INCLUDE, 0, 0, SL_MIN_VERSION, SL_MAX_VERSION, NULL, 0} /** End marker of a struct/class save or load. */ -#define SLE_END() {false, SL_END, 0, 0, 0, 0, NULL, 0} +#define SLE_END() {false, SL_END, 0, 0, SL_MIN_VERSION, SL_MIN_VERSION, NULL, 0} /** * Storage of global simple variables, references (pointers), and arrays. @@ -426,35 +701,35 @@ typedef SaveLoad SaveLoadGlobVarList; * @param variable Name of the global variable. * @param type Storage of the data in memory and in the savegame. */ -#define SLEG_VAR(variable, type) SLEG_CONDVAR(variable, type, 0, SL_MAX_VERSION) +#define SLEG_VAR(variable, type) SLEG_CONDVAR(variable, type, SL_MIN_VERSION, SL_MAX_VERSION) /** * Storage of a global reference in every savegame version. * @param variable Name of the global variable. * @param type Storage of the data in memory and in the savegame. */ -#define SLEG_REF(variable, type) SLEG_CONDREF(variable, type, 0, SL_MAX_VERSION) +#define SLEG_REF(variable, type) SLEG_CONDREF(variable, type, SL_MIN_VERSION, SL_MAX_VERSION) /** * Storage of a global array in every savegame version. * @param variable Name of the global variable. * @param type Storage of the data in memory and in the savegame. */ -#define SLEG_ARR(variable, type) SLEG_CONDARR(variable, type, lengthof(variable), 0, SL_MAX_VERSION) +#define SLEG_ARR(variable, type) SLEG_CONDARR(variable, type, lengthof(variable), SL_MIN_VERSION, SL_MAX_VERSION) /** * Storage of a global string in every savegame version. * @param variable Name of the global variable. * @param type Storage of the data in memory and in the savegame. */ -#define SLEG_STR(variable, type) SLEG_CONDSTR(variable, type, sizeof(variable), 0, SL_MAX_VERSION) +#define SLEG_STR(variable, type) SLEG_CONDSTR(variable, type, sizeof(variable), SL_MIN_VERSION, SL_MAX_VERSION) /** * Storage of a global list in every savegame version. * @param variable Name of the global variable. * @param type Storage of the data in memory and in the savegame. */ -#define SLEG_LST(variable, type) SLEG_CONDLST(variable, type, 0, SL_MAX_VERSION) +#define SLEG_LST(variable, type) SLEG_CONDLST(variable, type, SL_MIN_VERSION, SL_MAX_VERSION) /** * Empty global space in some savegame versions. @@ -465,7 +740,7 @@ typedef SaveLoad SaveLoadGlobVarList; #define SLEG_CONDNULL(length, from, to) {true, SL_ARR, SLE_FILE_U8 | SLE_VAR_NULL | SLF_NOT_IN_CONFIG, length, from, to, (void*)NULL} /** End marker of global variables save or load. */ -#define SLEG_END() {true, SL_END, 0, 0, 0, 0, NULL, 0} +#define SLEG_END() {true, SL_END, 0, 0, SL_MIN_VERSION, SL_MIN_VERSION, NULL, 0} /** * Checks whether the savegame is below \a major.\a minor. @@ -473,7 +748,7 @@ typedef SaveLoad SaveLoadGlobVarList; * @param minor Minor number of the version to check against. If \a minor is 0 or not specified, only the major number is checked. * @return Savegame version is earlier than the specified version. */ -static inline bool IsSavegameVersionBefore(uint16 major, byte minor = 0) +static inline bool IsSavegameVersionBefore(SaveLoadVersion major, byte minor = 0) { extern uint16 _sl_version; extern byte _sl_minor_version; @@ -487,7 +762,7 @@ static inline bool IsSavegameVersionBefore(uint16 major, byte minor = 0) * @param version_to Exclusive savegame version upper bound. SL_MAX_VERSION if no upper bound. * @return Active savegame version falls within the given range. */ -static inline bool SlIsObjectCurrentlyValid(uint16 version_from, uint16 version_to) +static inline bool SlIsObjectCurrentlyValid(SaveLoadVersion version_from, SaveLoadVersion version_to) { extern const uint16 SAVEGAME_VERSION; if (SAVEGAME_VERSION < version_from || SAVEGAME_VERSION >= version_to) return false; diff --git a/src/saveload/signs_sl.cpp b/src/saveload/signs_sl.cpp index 6b838cfc11..545c628b36 100644 --- a/src/saveload/signs_sl.cpp +++ b/src/saveload/signs_sl.cpp @@ -19,15 +19,15 @@ /** Description of a sign within the savegame. */ static const SaveLoad _sign_desc[] = { - SLE_CONDVAR(Sign, name, SLE_NAME, 0, 84), - SLE_CONDSTR(Sign, name, SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION), - SLE_CONDVAR(Sign, x, SLE_FILE_I16 | SLE_VAR_I32, 0, 5), - SLE_CONDVAR(Sign, y, SLE_FILE_I16 | SLE_VAR_I32, 0, 5), - SLE_CONDVAR(Sign, x, SLE_INT32, 5, SL_MAX_VERSION), - SLE_CONDVAR(Sign, y, SLE_INT32, 5, SL_MAX_VERSION), - SLE_CONDVAR(Sign, owner, SLE_UINT8, 6, SL_MAX_VERSION), - SLE_CONDVAR(Sign, z, SLE_FILE_U8 | SLE_VAR_I32, 0, 164), - SLE_CONDVAR(Sign, z, SLE_INT32, 164, SL_MAX_VERSION), + SLE_CONDVAR(Sign, name, SLE_NAME, SL_MIN_VERSION, SLV_84), + SLE_CONDSTR(Sign, name, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION), + SLE_CONDVAR(Sign, x, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_5), + SLE_CONDVAR(Sign, y, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_5), + SLE_CONDVAR(Sign, x, SLE_INT32, SLV_5, SL_MAX_VERSION), + SLE_CONDVAR(Sign, y, SLE_INT32, SLV_5, SL_MAX_VERSION), + SLE_CONDVAR(Sign, owner, SLE_UINT8, SLV_6, SL_MAX_VERSION), + SLE_CONDVAR(Sign, z, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_164), + SLE_CONDVAR(Sign, z, SLE_INT32, SLV_164, SL_MAX_VERSION), SLE_END() }; @@ -55,12 +55,12 @@ static void Load_SIGN() * - we can't use IsValidCompany() now, so this is fixed in AfterLoadGame() * All signs that were saved are valid (including those with just 'Sign' and INVALID_OWNER). * - so set owner to OWNER_NONE if needed (signs from pre-version 6.1 would be lost) */ - if (IsSavegameVersionBefore(6, 1) || (IsSavegameVersionBefore(83) && si->owner == INVALID_OWNER)) { + if (IsSavegameVersionBefore(SLV_6, 1) || (IsSavegameVersionBefore(SLV_83) && si->owner == INVALID_OWNER)) { si->owner = OWNER_NONE; } /* Signs placed in scenario editor shall now be OWNER_DEITY */ - if (IsSavegameVersionBefore(171) && si->owner == OWNER_NONE && _file_to_saveload.abstract_ftype == FT_SCENARIO) { + if (IsSavegameVersionBefore(SLV_171) && si->owner == OWNER_NONE && _file_to_saveload.abstract_ftype == FT_SCENARIO) { si->owner = OWNER_DEITY; } } diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index d9c026cd4d..57f3bfdfb1 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -150,43 +150,43 @@ void AfterLoadRoadStops() static const SaveLoad _roadstop_desc[] = { SLE_VAR(RoadStop, xy, SLE_UINT32), - SLE_CONDNULL(1, 0, 45), + SLE_CONDNULL(1, SL_MIN_VERSION, SLV_45), SLE_VAR(RoadStop, status, SLE_UINT8), /* Index was saved in some versions, but this is not needed */ - SLE_CONDNULL(4, 0, 9), - SLE_CONDNULL(2, 0, 45), - SLE_CONDNULL(1, 0, 26), + SLE_CONDNULL(4, SL_MIN_VERSION, SLV_9), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_45), + SLE_CONDNULL(1, SL_MIN_VERSION, SLV_26), SLE_REF(RoadStop, next, REF_ROADSTOPS), - SLE_CONDNULL(2, 0, 45), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_45), - SLE_CONDNULL(4, 0, 25), - SLE_CONDNULL(1, 25, 26), + SLE_CONDNULL(4, SL_MIN_VERSION, SLV_25), + SLE_CONDNULL(1, SLV_25, SLV_26), SLE_END() }; static const SaveLoad _old_station_desc[] = { - SLE_CONDVAR(Station, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), - SLE_CONDVAR(Station, xy, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDNULL(4, 0, 6), ///< bus/lorry tile - SLE_CONDVAR(Station, train_station.tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), - SLE_CONDVAR(Station, train_station.tile, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Station, airport.tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), - SLE_CONDVAR(Station, airport.tile, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Station, dock_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), - SLE_CONDVAR(Station, dock_tile, SLE_UINT32, 6, SL_MAX_VERSION), + SLE_CONDVAR(Station, xy, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), + SLE_CONDVAR(Station, xy, SLE_UINT32, SLV_6, SL_MAX_VERSION), + SLE_CONDNULL(4, SL_MIN_VERSION, SLV_6), ///< bus/lorry tile + SLE_CONDVAR(Station, train_station.tile, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), + SLE_CONDVAR(Station, train_station.tile, SLE_UINT32, SLV_6, SL_MAX_VERSION), + SLE_CONDVAR(Station, airport.tile, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), + SLE_CONDVAR(Station, airport.tile, SLE_UINT32, SLV_6, SL_MAX_VERSION), + SLE_CONDVAR(Station, dock_tile, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), + SLE_CONDVAR(Station, dock_tile, SLE_UINT32, SLV_6, SL_MAX_VERSION), SLE_REF(Station, town, REF_TOWN), SLE_VAR(Station, train_station.w, SLE_FILE_U8 | SLE_VAR_U16), - SLE_CONDVAR(Station, train_station.h, SLE_FILE_U8 | SLE_VAR_U16, 2, SL_MAX_VERSION), + SLE_CONDVAR(Station, train_station.h, SLE_FILE_U8 | SLE_VAR_U16, SLV_2, SL_MAX_VERSION), - SLE_CONDNULL(1, 0, 4), ///< alpha_order + SLE_CONDNULL(1, SL_MIN_VERSION, SLV_4), ///< alpha_order SLE_VAR(Station, string_id, SLE_STRINGID), - SLE_CONDSTR(Station, name, SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION), - SLE_CONDVAR(Station, indtype, SLE_UINT8, 103, SL_MAX_VERSION), - SLE_CONDVAR(Station, had_vehicle_of_type, SLE_FILE_U16 | SLE_VAR_U8, 0, 122), - SLE_CONDVAR(Station, had_vehicle_of_type, SLE_UINT8, 122, SL_MAX_VERSION), + SLE_CONDSTR(Station, name, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION), + SLE_CONDVAR(Station, indtype, SLE_UINT8, SLV_103, SL_MAX_VERSION), + SLE_CONDVAR(Station, had_vehicle_of_type, SLE_FILE_U16 | SLE_VAR_U8, SL_MIN_VERSION, SLV_122), + SLE_CONDVAR(Station, had_vehicle_of_type, SLE_UINT8, SLV_122, SL_MAX_VERSION), SLE_VAR(Station, time_since_load, SLE_UINT8), SLE_VAR(Station, time_since_unload, SLE_UINT8), @@ -195,32 +195,32 @@ static const SaveLoad _old_station_desc[] = { SLE_VAR(Station, facilities, SLE_UINT8), SLE_VAR(Station, airport.type, SLE_UINT8), - SLE_CONDNULL(2, 0, 6), ///< Truck/bus stop status - SLE_CONDNULL(1, 0, 5), ///< Blocked months + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_6), ///< Truck/bus stop status + SLE_CONDNULL(1, SL_MIN_VERSION, SLV_5), ///< Blocked months - SLE_CONDVAR(Station, airport.flags, SLE_VAR_U64 | SLE_FILE_U16, 0, 3), - SLE_CONDVAR(Station, airport.flags, SLE_VAR_U64 | SLE_FILE_U32, 3, 46), - SLE_CONDVAR(Station, airport.flags, SLE_UINT64, 46, SL_MAX_VERSION), + SLE_CONDVAR(Station, airport.flags, SLE_VAR_U64 | SLE_FILE_U16, SL_MIN_VERSION, SLV_3), + SLE_CONDVAR(Station, airport.flags, SLE_VAR_U64 | SLE_FILE_U32, SLV_3, SLV_46), + SLE_CONDVAR(Station, airport.flags, SLE_UINT64, SLV_46, SL_MAX_VERSION), - SLE_CONDNULL(2, 0, 26), ///< last-vehicle - SLE_CONDVAR(Station, last_vehicle_type, SLE_UINT8, 26, SL_MAX_VERSION), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_26), ///< last-vehicle + SLE_CONDVAR(Station, last_vehicle_type, SLE_UINT8, SLV_26, SL_MAX_VERSION), - SLE_CONDNULL(2, 3, 26), ///< custom station class and id - SLE_CONDVAR(Station, build_date, SLE_FILE_U16 | SLE_VAR_I32, 3, 31), - SLE_CONDVAR(Station, build_date, SLE_INT32, 31, SL_MAX_VERSION), + SLE_CONDNULL(2, SLV_3, SLV_26), ///< custom station class and id + SLE_CONDVAR(Station, build_date, SLE_FILE_U16 | SLE_VAR_I32, SLV_3, SLV_31), + SLE_CONDVAR(Station, build_date, SLE_INT32, SLV_31, SL_MAX_VERSION), - SLE_CONDREF(Station, bus_stops, REF_ROADSTOPS, 6, SL_MAX_VERSION), - SLE_CONDREF(Station, truck_stops, REF_ROADSTOPS, 6, SL_MAX_VERSION), + SLE_CONDREF(Station, bus_stops, REF_ROADSTOPS, SLV_6, SL_MAX_VERSION), + SLE_CONDREF(Station, truck_stops, REF_ROADSTOPS, SLV_6, SL_MAX_VERSION), /* Used by newstations for graphic variations */ - SLE_CONDVAR(Station, random_bits, SLE_UINT16, 27, SL_MAX_VERSION), - SLE_CONDVAR(Station, waiting_triggers, SLE_UINT8, 27, SL_MAX_VERSION), - SLE_CONDVAR(Station, num_specs, SLE_UINT8, 27, SL_MAX_VERSION), + SLE_CONDVAR(Station, random_bits, SLE_UINT16, SLV_27, SL_MAX_VERSION), + SLE_CONDVAR(Station, waiting_triggers, SLE_UINT8, SLV_27, SL_MAX_VERSION), + SLE_CONDVAR(Station, num_specs, SLE_UINT8, SLV_27, SL_MAX_VERSION), - SLE_CONDLST(Station, loading_vehicles, REF_VEHICLE, 57, SL_MAX_VERSION), + SLE_CONDLST(Station, loading_vehicles, REF_VEHICLE, SLV_57, SL_MAX_VERSION), /* reserve extra space in savegame here. (currently 32 bytes) */ - SLE_CONDNULL(32, 2, SL_MAX_VERSION), + SLE_CONDNULL(32, SLV_2, SL_MAX_VERSION), SLE_END() }; @@ -233,8 +233,8 @@ static uint8 _cargo_days; static Money _cargo_feeder_share; static const SaveLoad _station_speclist_desc[] = { - SLE_CONDVAR(StationSpecList, grfid, SLE_UINT32, 27, SL_MAX_VERSION), - SLE_CONDVAR(StationSpecList, localidx, SLE_UINT8, 27, SL_MAX_VERSION), + SLE_CONDVAR(StationSpecList, grfid, SLE_UINT32, SLV_27, SL_MAX_VERSION), + SLE_CONDVAR(StationSpecList, localidx, SLE_UINT8, SLV_27, SL_MAX_VERSION), SLE_END() }; @@ -254,7 +254,7 @@ static const SaveLoad _flow_desc[] = { SLE_VAR(FlowSaveLoad, source, SLE_UINT16), SLE_VAR(FlowSaveLoad, via, SLE_UINT16), SLE_VAR(FlowSaveLoad, share, SLE_UINT32), - SLE_CONDVAR(FlowSaveLoad, restricted, SLE_BOOL, 187, SL_MAX_VERSION), + SLE_CONDVAR(FlowSaveLoad, restricted, SLE_BOOL, SLV_187, SL_MAX_VERSION), SLE_END() }; @@ -266,27 +266,27 @@ static const SaveLoad _flow_desc[] = { const SaveLoad *GetGoodsDesc() { static const SaveLoad goods_desc[] = { - SLEG_CONDVAR( _waiting_acceptance, SLE_UINT16, 0, 68), - SLE_CONDVAR(GoodsEntry, status, SLE_UINT8, 68, SL_MAX_VERSION), - SLE_CONDNULL(2, 51, 68), + SLEG_CONDVAR( _waiting_acceptance, SLE_UINT16, SL_MIN_VERSION, SLV_68), + SLE_CONDVAR(GoodsEntry, status, SLE_UINT8, SLV_68, SL_MAX_VERSION), + SLE_CONDNULL(2, SLV_51, SLV_68), SLE_VAR(GoodsEntry, time_since_pickup, SLE_UINT8), SLE_VAR(GoodsEntry, rating, SLE_UINT8), - SLEG_CONDVAR( _cargo_source, SLE_FILE_U8 | SLE_VAR_U16, 0, 7), - SLEG_CONDVAR( _cargo_source, SLE_UINT16, 7, 68), - SLEG_CONDVAR( _cargo_source_xy, SLE_UINT32, 44, 68), - SLEG_CONDVAR( _cargo_days, SLE_UINT8, 0, 68), + SLEG_CONDVAR( _cargo_source, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_7), + SLEG_CONDVAR( _cargo_source, SLE_UINT16, SLV_7, SLV_68), + SLEG_CONDVAR( _cargo_source_xy, SLE_UINT32, SLV_44, SLV_68), + SLEG_CONDVAR( _cargo_days, SLE_UINT8, SL_MIN_VERSION, SLV_68), SLE_VAR(GoodsEntry, last_speed, SLE_UINT8), SLE_VAR(GoodsEntry, last_age, SLE_UINT8), - SLEG_CONDVAR( _cargo_feeder_share, SLE_FILE_U32 | SLE_VAR_I64, 14, 65), - SLEG_CONDVAR( _cargo_feeder_share, SLE_INT64, 65, 68), - SLE_CONDVAR(GoodsEntry, amount_fract, SLE_UINT8, 150, SL_MAX_VERSION), - SLEG_CONDLST( _packets, REF_CARGO_PACKET, 68, 183), - SLEG_CONDVAR( _num_dests, SLE_UINT32, 183, SL_MAX_VERSION), - SLE_CONDVAR(GoodsEntry, cargo.reserved_count, SLE_UINT, 181, SL_MAX_VERSION), - SLE_CONDVAR(GoodsEntry, link_graph, SLE_UINT16, 183, SL_MAX_VERSION), - SLE_CONDVAR(GoodsEntry, node, SLE_UINT16, 183, SL_MAX_VERSION), - SLEG_CONDVAR( _num_flows, SLE_UINT32, 183, SL_MAX_VERSION), - SLE_CONDVAR(GoodsEntry, max_waiting_cargo, SLE_UINT32, 183, SL_MAX_VERSION), + SLEG_CONDVAR( _cargo_feeder_share, SLE_FILE_U32 | SLE_VAR_I64, SLV_14, SLV_65), + SLEG_CONDVAR( _cargo_feeder_share, SLE_INT64, SLV_65, SLV_68), + SLE_CONDVAR(GoodsEntry, amount_fract, SLE_UINT8, SLV_150, SL_MAX_VERSION), + SLEG_CONDLST( _packets, REF_CARGO_PACKET, SLV_68, SLV_183), + SLEG_CONDVAR( _num_dests, SLE_UINT32, SLV_183, SL_MAX_VERSION), + SLE_CONDVAR(GoodsEntry, cargo.reserved_count, SLE_UINT, SLV_181, SL_MAX_VERSION), + SLE_CONDVAR(GoodsEntry, link_graph, SLE_UINT16, SLV_183, SL_MAX_VERSION), + SLE_CONDVAR(GoodsEntry, node, SLE_UINT16, SLV_183, SL_MAX_VERSION), + SLEG_CONDVAR( _num_flows, SLE_UINT32, SLV_183, SL_MAX_VERSION), + SLE_CONDVAR(GoodsEntry, max_waiting_cargo, SLE_UINT32, SLV_183, SL_MAX_VERSION), SLE_END() }; @@ -329,7 +329,7 @@ static void Load_STNS() _cargo_days = 0; _cargo_feeder_share = 0; - uint num_cargo = IsSavegameVersionBefore(55) ? 12 : IsSavegameVersionBefore(199) ? 32 : NUM_CARGO; + uint num_cargo = IsSavegameVersionBefore(SLV_55) ? 12 : IsSavegameVersionBefore(SLV_199) ? 32 : NUM_CARGO; int index; while ((index = SlIterateArray()) != -1) { Station *st = new (index) Station(); @@ -342,11 +342,11 @@ static void Load_STNS() GoodsEntry *ge = &st->goods[i]; SlObject(ge, GetGoodsDesc()); SwapPackets(ge); - if (IsSavegameVersionBefore(68)) { + if (IsSavegameVersionBefore(SLV_68)) { SB(ge->status, GoodsEntry::GES_ACCEPTANCE, 1, HasBit(_waiting_acceptance, 15)); if (GB(_waiting_acceptance, 0, 12) != 0) { /* In old versions, enroute_from used 0xFF as INVALID_STATION */ - StationID source = (IsSavegameVersionBefore(7) && _cargo_source == 0xFF) ? INVALID_STATION : _cargo_source; + StationID source = (IsSavegameVersionBefore(SLV_7) && _cargo_source == 0xFF) ? INVALID_STATION : _cargo_source; /* Make sure we can allocate the CargoPacket. This is safe * as there can only be ~64k stations and 32 cargoes in these @@ -375,12 +375,12 @@ static void Load_STNS() static void Ptrs_STNS() { /* Don't run when savegame version is higher than or equal to 123. */ - if (!IsSavegameVersionBefore(123)) return; + if (!IsSavegameVersionBefore(SLV_123)) return; - uint num_cargo = IsSavegameVersionBefore(199) ? 32 : NUM_CARGO; + uint num_cargo = IsSavegameVersionBefore(SLV_199) ? 32 : NUM_CARGO; Station *st; FOR_ALL_STATIONS(st) { - if (!IsSavegameVersionBefore(68)) { + if (!IsSavegameVersionBefore(SLV_68)) { for (CargoID i = 0; i < num_cargo; i++) { GoodsEntry *ge = &st->goods[i]; SwapPackets(ge); @@ -425,14 +425,14 @@ static const SaveLoad _station_desc[] = { SLE_REF(Station, truck_stops, REF_ROADSTOPS), SLE_VAR(Station, dock_tile, SLE_UINT32), SLE_VAR(Station, airport.tile, SLE_UINT32), - SLE_CONDVAR(Station, airport.w, SLE_FILE_U8 | SLE_VAR_U16, 140, SL_MAX_VERSION), - SLE_CONDVAR(Station, airport.h, SLE_FILE_U8 | SLE_VAR_U16, 140, SL_MAX_VERSION), + SLE_CONDVAR(Station, airport.w, SLE_FILE_U8 | SLE_VAR_U16, SLV_140, SL_MAX_VERSION), + SLE_CONDVAR(Station, airport.h, SLE_FILE_U8 | SLE_VAR_U16, SLV_140, SL_MAX_VERSION), SLE_VAR(Station, airport.type, SLE_UINT8), - SLE_CONDVAR(Station, airport.layout, SLE_UINT8, 145, SL_MAX_VERSION), + SLE_CONDVAR(Station, airport.layout, SLE_UINT8, SLV_145, SL_MAX_VERSION), SLE_VAR(Station, airport.flags, SLE_UINT64), - SLE_CONDVAR(Station, airport.rotation, SLE_UINT8, 145, SL_MAX_VERSION), - SLEG_CONDARR(_old_st_persistent_storage.storage, SLE_UINT32, 16, 145, 161), - SLE_CONDREF(Station, airport.psa, REF_STORAGE, 161, SL_MAX_VERSION), + SLE_CONDVAR(Station, airport.rotation, SLE_UINT8, SLV_145, SL_MAX_VERSION), + SLEG_CONDARR(_old_st_persistent_storage.storage, SLE_UINT32, 16, SLV_145, SLV_161), + SLE_CONDREF(Station, airport.psa, REF_STORAGE, SLV_161, SL_MAX_VERSION), SLE_VAR(Station, indtype, SLE_UINT8), @@ -441,8 +441,8 @@ static const SaveLoad _station_desc[] = { SLE_VAR(Station, last_vehicle_type, SLE_UINT8), SLE_VAR(Station, had_vehicle_of_type, SLE_UINT8), SLE_LST(Station, loading_vehicles, REF_VEHICLE), - SLE_CONDVAR(Station, always_accepted, SLE_FILE_U32 | SLE_VAR_U64, 127, 199), - SLE_CONDVAR(Station, always_accepted, SLE_UINT64, 199, SL_MAX_VERSION), + SLE_CONDVAR(Station, always_accepted, SLE_FILE_U32 | SLE_VAR_U64, SLV_127, SLV_199), + SLE_CONDVAR(Station, always_accepted, SLE_UINT64, SLV_199, SL_MAX_VERSION), SLE_END() }; @@ -453,9 +453,9 @@ static const SaveLoad _waypoint_desc[] = { SLE_VAR(Waypoint, town_cn, SLE_UINT16), - SLE_CONDVAR(Waypoint, train_station.tile, SLE_UINT32, 124, SL_MAX_VERSION), - SLE_CONDVAR(Waypoint, train_station.w, SLE_FILE_U8 | SLE_VAR_U16, 124, SL_MAX_VERSION), - SLE_CONDVAR(Waypoint, train_station.h, SLE_FILE_U8 | SLE_VAR_U16, 124, SL_MAX_VERSION), + SLE_CONDVAR(Waypoint, train_station.tile, SLE_UINT32, SLV_124, SL_MAX_VERSION), + SLE_CONDVAR(Waypoint, train_station.w, SLE_FILE_U8 | SLE_VAR_U16, SLV_124, SL_MAX_VERSION), + SLE_CONDVAR(Waypoint, train_station.h, SLE_FILE_U8 | SLE_VAR_U16, SLV_124, SL_MAX_VERSION), SLE_END() }; @@ -522,7 +522,7 @@ static void Load_STNN() { _num_flows = 0; - uint num_cargo = IsSavegameVersionBefore(199) ? 32 : NUM_CARGO; + uint num_cargo = IsSavegameVersionBefore(SLV_199) ? 32 : NUM_CARGO; int index; while ((index = SlIterateArray()) != -1) { bool waypoint = (SlReadByte() & FACIL_WAYPOINT) != 0; @@ -534,7 +534,7 @@ static void Load_STNN() Station *st = Station::From(bst); /* Before savegame version 161, persistent storages were not stored in a pool. */ - if (IsSavegameVersionBefore(161) && !IsSavegameVersionBefore(145) && st->facilities & FACIL_AIRPORT) { + if (IsSavegameVersionBefore(SLV_161) && !IsSavegameVersionBefore(SLV_145) && st->facilities & FACIL_AIRPORT) { /* Store the old persistent storage. The GRFID will be added later. */ assert(PersistentStorage::CanAllocateItem()); st->airport.psa = new PersistentStorage(0, 0, 0); @@ -555,7 +555,7 @@ static void Load_STNN() } prev_source = flow.source; } - if (IsSavegameVersionBefore(183)) { + if (IsSavegameVersionBefore(SLV_183)) { SwapPackets(&st->goods[i]); } else { StationCargoPair pair; @@ -581,14 +581,14 @@ static void Load_STNN() static void Ptrs_STNN() { /* Don't run when savegame version lower than 123. */ - if (IsSavegameVersionBefore(123)) return; + if (IsSavegameVersionBefore(SLV_123)) return; - uint num_cargo = IsSavegameVersionBefore(199) ? 32 : NUM_CARGO; + uint num_cargo = IsSavegameVersionBefore(SLV_199) ? 32 : NUM_CARGO; Station *st; FOR_ALL_STATIONS(st) { for (CargoID i = 0; i < num_cargo; i++) { GoodsEntry *ge = &st->goods[i]; - if (IsSavegameVersionBefore(183)) { + if (IsSavegameVersionBefore(SLV_183)) { SwapPackets(ge); SlObject(ge, GetGoodsDesc()); SwapPackets(ge); diff --git a/src/saveload/storage_sl.cpp b/src/saveload/storage_sl.cpp index 30d4386143..1c6c442485 100644 --- a/src/saveload/storage_sl.cpp +++ b/src/saveload/storage_sl.cpp @@ -17,9 +17,9 @@ /** Description of the data to save and load in #PersistentStorage. */ static const SaveLoad _storage_desc[] = { - SLE_CONDVAR(PersistentStorage, grfid, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDARR(PersistentStorage, storage, SLE_UINT32, 16, 161, 201), - SLE_CONDARR(PersistentStorage, storage, SLE_UINT32, 256, 201, SL_MAX_VERSION), + SLE_CONDVAR(PersistentStorage, grfid, SLE_UINT32, SLV_6, SL_MAX_VERSION), + SLE_CONDARR(PersistentStorage, storage, SLE_UINT32, 16, SLV_161, SLV_201), + SLE_CONDARR(PersistentStorage, storage, SLE_UINT32, 256, SLV_201, SL_MAX_VERSION), SLE_END() }; diff --git a/src/saveload/story_sl.cpp b/src/saveload/story_sl.cpp index cbfc847b6b..f9bbf34b9b 100644 --- a/src/saveload/story_sl.cpp +++ b/src/saveload/story_sl.cpp @@ -19,7 +19,7 @@ /** Called after load to trash broken pages. */ void AfterLoadStoryBook() { - if (IsSavegameVersionBefore(185)) { + if (IsSavegameVersionBefore(SLV_185)) { /* Trash all story pages and page elements because * they were saved with wrong data types. */ @@ -29,11 +29,11 @@ void AfterLoadStoryBook() } static const SaveLoad _story_page_elements_desc[] = { - SLE_CONDVAR(StoryPageElement, sort_value, SLE_FILE_U16 | SLE_VAR_U32, 0, 185), - SLE_CONDVAR(StoryPageElement, sort_value, SLE_UINT32, 185, SL_MAX_VERSION), + SLE_CONDVAR(StoryPageElement, sort_value, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_185), + SLE_CONDVAR(StoryPageElement, sort_value, SLE_UINT32, SLV_185, SL_MAX_VERSION), SLE_VAR(StoryPageElement, page, SLE_UINT16), - SLE_CONDVAR(StoryPageElement, type, SLE_FILE_U16 | SLE_VAR_U8, 0, 185), - SLE_CONDVAR(StoryPageElement, type, SLE_UINT8, 185, SL_MAX_VERSION), + SLE_CONDVAR(StoryPageElement, type, SLE_FILE_U16 | SLE_VAR_U8, SL_MIN_VERSION, SLV_185), + SLE_CONDVAR(StoryPageElement, type, SLE_UINT8, SLV_185, SL_MAX_VERSION), SLE_VAR(StoryPageElement, referenced_id, SLE_UINT32), SLE_STR(StoryPageElement, text, SLE_STR | SLF_ALLOW_CONTROL, 0), SLE_END() @@ -66,11 +66,11 @@ static void Load_STORY_PAGE_ELEMENT() } static const SaveLoad _story_pages_desc[] = { - SLE_CONDVAR(StoryPage, sort_value, SLE_FILE_U16 | SLE_VAR_U32, 0, 185), - SLE_CONDVAR(StoryPage, sort_value, SLE_UINT32, 185, SL_MAX_VERSION), + SLE_CONDVAR(StoryPage, sort_value, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_185), + SLE_CONDVAR(StoryPage, sort_value, SLE_UINT32, SLV_185, SL_MAX_VERSION), SLE_VAR(StoryPage, date, SLE_UINT32), - SLE_CONDVAR(StoryPage, company, SLE_FILE_U16 | SLE_VAR_U8, 0, 185), - SLE_CONDVAR(StoryPage, company, SLE_UINT8, 185, SL_MAX_VERSION), + SLE_CONDVAR(StoryPage, company, SLE_FILE_U16 | SLE_VAR_U8, SL_MIN_VERSION, SLV_185), + SLE_CONDVAR(StoryPage, company, SLE_UINT8, SLV_185, SL_MAX_VERSION), SLE_STR(StoryPage, title, SLE_STR | SLF_ALLOW_CONTROL, 0), SLE_END() }; diff --git a/src/saveload/strings_sl.cpp b/src/saveload/strings_sl.cpp index aa2fdd3e60..d8fe81d113 100644 --- a/src/saveload/strings_sl.cpp +++ b/src/saveload/strings_sl.cpp @@ -63,7 +63,7 @@ char *CopyFromOldName(StringID id) /* Is this name an (old) custom name? */ if (GetStringTab(id) != TEXT_TAB_OLD_CUSTOM) return NULL; - if (IsSavegameVersionBefore(37)) { + if (IsSavegameVersionBefore(SLV_37)) { /* Allow for expansion when converted to UTF-8. */ char tmp[LEN_OLD_STRINGS * MAX_CHAR_LENGTH]; uint offs = _savegame_type == SGT_TTO ? LEN_OLD_STRINGS_TTO * GB(id, 0, 8) : LEN_OLD_STRINGS * GB(id, 0, 9); diff --git a/src/saveload/subsidy_sl.cpp b/src/saveload/subsidy_sl.cpp index d796bda1a0..6f10ec8d09 100644 --- a/src/saveload/subsidy_sl.cpp +++ b/src/saveload/subsidy_sl.cpp @@ -19,13 +19,13 @@ static const SaveLoad _subsidies_desc[] = { SLE_VAR(Subsidy, cargo_type, SLE_UINT8), SLE_VAR(Subsidy, remaining, SLE_UINT8), - SLE_CONDVAR(Subsidy, awarded, SLE_UINT8, 125, SL_MAX_VERSION), - SLE_CONDVAR(Subsidy, src_type, SLE_UINT8, 125, SL_MAX_VERSION), - SLE_CONDVAR(Subsidy, dst_type, SLE_UINT8, 125, SL_MAX_VERSION), - SLE_CONDVAR(Subsidy, src, SLE_FILE_U8 | SLE_VAR_U16, 0, 5), - SLE_CONDVAR(Subsidy, src, SLE_UINT16, 5, SL_MAX_VERSION), - SLE_CONDVAR(Subsidy, dst, SLE_FILE_U8 | SLE_VAR_U16, 0, 5), - SLE_CONDVAR(Subsidy, dst, SLE_UINT16, 5, SL_MAX_VERSION), + SLE_CONDVAR(Subsidy, awarded, SLE_UINT8, SLV_125, SL_MAX_VERSION), + SLE_CONDVAR(Subsidy, src_type, SLE_UINT8, SLV_125, SL_MAX_VERSION), + SLE_CONDVAR(Subsidy, dst_type, SLE_UINT8, SLV_125, SL_MAX_VERSION), + SLE_CONDVAR(Subsidy, src, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_5), + SLE_CONDVAR(Subsidy, src, SLE_UINT16, SLV_5, SL_MAX_VERSION), + SLE_CONDVAR(Subsidy, dst, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_5), + SLE_CONDVAR(Subsidy, dst, SLE_UINT16, SLV_5, SL_MAX_VERSION), SLE_END() }; diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp index 8a8d4a9f7c..cbfdad0bbe 100644 --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -116,105 +116,105 @@ void UpdateHousesAndTowns() /** Save and load of towns. */ static const SaveLoad _town_desc[] = { - SLE_CONDVAR(Town, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), - SLE_CONDVAR(Town, xy, SLE_UINT32, 6, SL_MAX_VERSION), + SLE_CONDVAR(Town, xy, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), + SLE_CONDVAR(Town, xy, SLE_UINT32, SLV_6, SL_MAX_VERSION), - SLE_CONDNULL(2, 0, 3), ///< population, no longer in use - SLE_CONDNULL(4, 3, 85), ///< population, no longer in use - SLE_CONDNULL(2, 0, 92), ///< num_houses, no longer in use + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_3), ///< population, no longer in use + SLE_CONDNULL(4, SLV_3, SLV_85), ///< population, no longer in use + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_92), ///< num_houses, no longer in use - SLE_CONDVAR(Town, townnamegrfid, SLE_UINT32, 66, SL_MAX_VERSION), + SLE_CONDVAR(Town, townnamegrfid, SLE_UINT32, SLV_66, SL_MAX_VERSION), SLE_VAR(Town, townnametype, SLE_UINT16), SLE_VAR(Town, townnameparts, SLE_UINT32), - SLE_CONDSTR(Town, name, SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION), + SLE_CONDSTR(Town, name, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION), SLE_VAR(Town, flags, SLE_UINT8), - SLE_CONDVAR(Town, statues, SLE_FILE_U8 | SLE_VAR_U16, 0, 104), - SLE_CONDVAR(Town, statues, SLE_UINT16, 104, SL_MAX_VERSION), + SLE_CONDVAR(Town, statues, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_104), + SLE_CONDVAR(Town, statues, SLE_UINT16, SLV_104, SL_MAX_VERSION), - SLE_CONDNULL(1, 0, 2), ///< sort_index, no longer in use + SLE_CONDNULL(1, SL_MIN_VERSION, SLV_2), ///< sort_index, no longer in use - SLE_CONDVAR(Town, have_ratings, SLE_FILE_U8 | SLE_VAR_U16, 0, 104), - SLE_CONDVAR(Town, have_ratings, SLE_UINT16, 104, SL_MAX_VERSION), - SLE_CONDARR(Town, ratings, SLE_INT16, 8, 0, 104), - SLE_CONDARR(Town, ratings, SLE_INT16, MAX_COMPANIES, 104, SL_MAX_VERSION), + SLE_CONDVAR(Town, have_ratings, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_104), + SLE_CONDVAR(Town, have_ratings, SLE_UINT16, SLV_104, SL_MAX_VERSION), + SLE_CONDARR(Town, ratings, SLE_INT16, 8, SL_MIN_VERSION, SLV_104), + SLE_CONDARR(Town, ratings, SLE_INT16, MAX_COMPANIES, SLV_104, SL_MAX_VERSION), /* failed bribe attempts are stored since savegame format 4 */ - SLE_CONDARR(Town, unwanted, SLE_INT8, 8, 4, 104), - SLE_CONDARR(Town, unwanted, SLE_INT8, MAX_COMPANIES, 104, SL_MAX_VERSION), + SLE_CONDARR(Town, unwanted, SLE_INT8, 8, SLV_4, SLV_104), + SLE_CONDARR(Town, unwanted, SLE_INT8, MAX_COMPANIES, SLV_104, SL_MAX_VERSION), - SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_max, SLE_FILE_U16 | SLE_VAR_U32, 0, 9), - SLE_CONDVAR(Town, supplied[CT_MAIL].old_max, SLE_FILE_U16 | SLE_VAR_U32, 0, 9), - SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_max, SLE_FILE_U16 | SLE_VAR_U32, 0, 9), - SLE_CONDVAR(Town, supplied[CT_MAIL].new_max, SLE_FILE_U16 | SLE_VAR_U32, 0, 9), - SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_act, SLE_FILE_U16 | SLE_VAR_U32, 0, 9), - SLE_CONDVAR(Town, supplied[CT_MAIL].old_act, SLE_FILE_U16 | SLE_VAR_U32, 0, 9), - SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_FILE_U16 | SLE_VAR_U32, 0, 9), - SLE_CONDVAR(Town, supplied[CT_MAIL].new_act, SLE_FILE_U16 | SLE_VAR_U32, 0, 9), + SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_max, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9), + SLE_CONDVAR(Town, supplied[CT_MAIL].old_max, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9), + SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_max, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9), + SLE_CONDVAR(Town, supplied[CT_MAIL].new_max, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9), + SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_act, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9), + SLE_CONDVAR(Town, supplied[CT_MAIL].old_act, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9), + SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9), + SLE_CONDVAR(Town, supplied[CT_MAIL].new_act, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9), - SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_max, SLE_UINT32, 9, 165), - SLE_CONDVAR(Town, supplied[CT_MAIL].old_max, SLE_UINT32, 9, 165), - SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_max, SLE_UINT32, 9, 165), - SLE_CONDVAR(Town, supplied[CT_MAIL].new_max, SLE_UINT32, 9, 165), - SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_act, SLE_UINT32, 9, 165), - SLE_CONDVAR(Town, supplied[CT_MAIL].old_act, SLE_UINT32, 9, 165), - SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_UINT32, 9, 165), - SLE_CONDVAR(Town, supplied[CT_MAIL].new_act, SLE_UINT32, 9, 165), + SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_max, SLE_UINT32, SLV_9, SLV_165), + SLE_CONDVAR(Town, supplied[CT_MAIL].old_max, SLE_UINT32, SLV_9, SLV_165), + SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_max, SLE_UINT32, SLV_9, SLV_165), + SLE_CONDVAR(Town, supplied[CT_MAIL].new_max, SLE_UINT32, SLV_9, SLV_165), + SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_act, SLE_UINT32, SLV_9, SLV_165), + SLE_CONDVAR(Town, supplied[CT_MAIL].old_act, SLE_UINT32, SLV_9, SLV_165), + SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_UINT32, SLV_9, SLV_165), + SLE_CONDVAR(Town, supplied[CT_MAIL].new_act, SLE_UINT32, SLV_9, SLV_165), - SLE_CONDNULL(2, 0, 164), ///< pct_pass_transported / pct_mail_transported, now computed on the fly + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_164), ///< pct_pass_transported / pct_mail_transported, now computed on the fly - SLE_CONDVAR(Town, received[TE_FOOD].old_act, SLE_UINT16, 0, 165), - SLE_CONDVAR(Town, received[TE_WATER].old_act, SLE_UINT16, 0, 165), - SLE_CONDVAR(Town, received[TE_FOOD].new_act, SLE_UINT16, 0, 165), - SLE_CONDVAR(Town, received[TE_WATER].new_act, SLE_UINT16, 0, 165), + SLE_CONDVAR(Town, received[TE_FOOD].old_act, SLE_UINT16, SL_MIN_VERSION, SLV_165), + SLE_CONDVAR(Town, received[TE_WATER].old_act, SLE_UINT16, SL_MIN_VERSION, SLV_165), + SLE_CONDVAR(Town, received[TE_FOOD].new_act, SLE_UINT16, SL_MIN_VERSION, SLV_165), + SLE_CONDVAR(Town, received[TE_WATER].new_act, SLE_UINT16, SL_MIN_VERSION, SLV_165), - SLE_CONDARR(Town, goal, SLE_UINT32, NUM_TE, 165, SL_MAX_VERSION), + SLE_CONDARR(Town, goal, SLE_UINT32, NUM_TE, SLV_165, SL_MAX_VERSION), - SLE_CONDSTR(Town, text, SLE_STR | SLF_ALLOW_CONTROL, 0, 168, SL_MAX_VERSION), + SLE_CONDSTR(Town, text, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_168, SL_MAX_VERSION), - SLE_CONDVAR(Town, time_until_rebuild, SLE_FILE_U8 | SLE_VAR_U16, 0, 54), - SLE_CONDVAR(Town, grow_counter, SLE_FILE_U8 | SLE_VAR_U16, 0, 54), - SLE_CONDVAR(Town, growth_rate, SLE_FILE_U8 | SLE_VAR_I16, 0, 54), + SLE_CONDVAR(Town, time_until_rebuild, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_54), + SLE_CONDVAR(Town, grow_counter, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_54), + SLE_CONDVAR(Town, growth_rate, SLE_FILE_U8 | SLE_VAR_I16, SL_MIN_VERSION, SLV_54), - SLE_CONDVAR(Town, time_until_rebuild, SLE_UINT16, 54, SL_MAX_VERSION), - SLE_CONDVAR(Town, grow_counter, SLE_UINT16, 54, SL_MAX_VERSION), + SLE_CONDVAR(Town, time_until_rebuild, SLE_UINT16, SLV_54, SL_MAX_VERSION), + SLE_CONDVAR(Town, grow_counter, SLE_UINT16, SLV_54, SL_MAX_VERSION), - SLE_CONDVAR(Town, growth_rate, SLE_FILE_I16 | SLE_VAR_U16, 54, 165), - SLE_CONDVAR(Town, growth_rate, SLE_UINT16, 165, SL_MAX_VERSION), + SLE_CONDVAR(Town, growth_rate, SLE_FILE_I16 | SLE_VAR_U16, SLV_54, SLV_165), + SLE_CONDVAR(Town, growth_rate, SLE_UINT16, SLV_165, SL_MAX_VERSION), SLE_VAR(Town, fund_buildings_months, SLE_UINT8), SLE_VAR(Town, road_build_months, SLE_UINT8), - SLE_CONDVAR(Town, exclusivity, SLE_UINT8, 2, SL_MAX_VERSION), - SLE_CONDVAR(Town, exclusive_counter, SLE_UINT8, 2, SL_MAX_VERSION), + SLE_CONDVAR(Town, exclusivity, SLE_UINT8, SLV_2, SL_MAX_VERSION), + SLE_CONDVAR(Town, exclusive_counter, SLE_UINT8, SLV_2, SL_MAX_VERSION), - SLE_CONDVAR(Town, larger_town, SLE_BOOL, 56, SL_MAX_VERSION), - SLE_CONDVAR(Town, layout, SLE_UINT8, 113, SL_MAX_VERSION), + SLE_CONDVAR(Town, larger_town, SLE_BOOL, SLV_56, SL_MAX_VERSION), + SLE_CONDVAR(Town, layout, SLE_UINT8, SLV_113, SL_MAX_VERSION), - SLE_CONDLST(Town, psa_list, REF_STORAGE, 161, SL_MAX_VERSION), + SLE_CONDLST(Town, psa_list, REF_STORAGE, SLV_161, SL_MAX_VERSION), - SLE_CONDVAR(Town, cargo_produced, SLE_FILE_U32 | SLE_VAR_U64, 166, 199), - SLE_CONDVAR(Town, cargo_produced, SLE_UINT64, 199, SL_MAX_VERSION), + SLE_CONDVAR(Town, cargo_produced, SLE_FILE_U32 | SLE_VAR_U64, SLV_166, SLV_199), + SLE_CONDVAR(Town, cargo_produced, SLE_UINT64, SLV_199, SL_MAX_VERSION), /* reserve extra space in savegame here. (currently 30 bytes) */ - SLE_CONDNULL(30, 2, SL_MAX_VERSION), + SLE_CONDNULL(30, SLV_2, SL_MAX_VERSION), SLE_END() }; static const SaveLoad _town_supplied_desc[] = { - SLE_CONDVAR(TransportedCargoStat, old_max, SLE_UINT32, 165, SL_MAX_VERSION), - SLE_CONDVAR(TransportedCargoStat, new_max, SLE_UINT32, 165, SL_MAX_VERSION), - SLE_CONDVAR(TransportedCargoStat, old_act, SLE_UINT32, 165, SL_MAX_VERSION), - SLE_CONDVAR(TransportedCargoStat, new_act, SLE_UINT32, 165, SL_MAX_VERSION), + SLE_CONDVAR(TransportedCargoStat, old_max, SLE_UINT32, SLV_165, SL_MAX_VERSION), + SLE_CONDVAR(TransportedCargoStat, new_max, SLE_UINT32, SLV_165, SL_MAX_VERSION), + SLE_CONDVAR(TransportedCargoStat, old_act, SLE_UINT32, SLV_165, SL_MAX_VERSION), + SLE_CONDVAR(TransportedCargoStat, new_act, SLE_UINT32, SLV_165, SL_MAX_VERSION), SLE_END() }; static const SaveLoad _town_received_desc[] = { - SLE_CONDVAR(TransportedCargoStat, old_max, SLE_UINT16, 165, SL_MAX_VERSION), - SLE_CONDVAR(TransportedCargoStat, new_max, SLE_UINT16, 165, SL_MAX_VERSION), - SLE_CONDVAR(TransportedCargoStat, old_act, SLE_UINT16, 165, SL_MAX_VERSION), - SLE_CONDVAR(TransportedCargoStat, new_act, SLE_UINT16, 165, SL_MAX_VERSION), + SLE_CONDVAR(TransportedCargoStat, old_max, SLE_UINT16, SLV_165, SL_MAX_VERSION), + SLE_CONDVAR(TransportedCargoStat, new_max, SLE_UINT16, SLV_165, SL_MAX_VERSION), + SLE_CONDVAR(TransportedCargoStat, old_act, SLE_UINT16, SLV_165, SL_MAX_VERSION), + SLE_CONDVAR(TransportedCargoStat, new_act, SLE_UINT16, SLV_165, SL_MAX_VERSION), SLE_END() }; @@ -253,7 +253,7 @@ static void RealSave_Town(Town *t) SlObject(&t->received[i], _town_received_desc); } - if (IsSavegameVersionBefore(166)) return; + if (IsSavegameVersionBefore(SLV_166)) return; SlObject(&t->cargo_accepted, GetTileMatrixDesc()); if (t->cargo_accepted.area.w != 0) { @@ -275,7 +275,7 @@ static void Save_TOWN() static void Load_TOWN() { int index; - uint num_cargo = IsSavegameVersionBefore(199) ? 32 : NUM_CARGO; + uint num_cargo = IsSavegameVersionBefore(SLV_199) ? 32 : NUM_CARGO; while ((index = SlIterateArray()) != -1) { Town *t = new (index) Town(); @@ -292,7 +292,7 @@ static void Load_TOWN() SlErrorCorrupt("Invalid town name generator"); } - if (IsSavegameVersionBefore(166)) continue; + if (IsSavegameVersionBefore(SLV_166)) continue; SlObject(&t->cargo_accepted, GetTileMatrixDesc()); if (t->cargo_accepted.area.w != 0) { @@ -310,7 +310,7 @@ static void Load_TOWN() static void Ptrs_TOWN() { /* Don't run when savegame version lower than 161. */ - if (IsSavegameVersionBefore(161)) return; + if (IsSavegameVersionBefore(SLV_161)) return; Town *t; FOR_ALL_TOWNS(t) { diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index e2816e8d83..d97b01d5e2 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -273,7 +273,7 @@ void AfterLoadVehicles(bool part_of_load) FOR_ALL_VEHICLES(v) { if (v->orders.old != NULL) { - if (IsSavegameVersionBefore(105)) { // Pre-105 didn't save an OrderList + if (IsSavegameVersionBefore(SLV_105)) { // Pre-105 didn't save an OrderList if (mapping[v->orders.old] == NULL) { /* This adds the whole shared vehicle chain for case b */ @@ -285,7 +285,7 @@ void AfterLoadVehicles(bool part_of_load) } else { v->orders.list = mapping[v->orders.old]; /* For old games (case a) we must create the shared vehicle chain */ - if (IsSavegameVersionBefore(5, 2)) { + if (IsSavegameVersionBefore(SLV_5, 2)) { v->AddToShared(v->orders.list->GetFirstSharedVehicle()); } } @@ -308,7 +308,7 @@ void AfterLoadVehicles(bool part_of_load) } if (part_of_load) { - if (IsSavegameVersionBefore(105)) { + if (IsSavegameVersionBefore(SLV_105)) { /* Before 105 there was no order for shared orders, thus it messed up horribly */ FOR_ALL_VEHICLES(v) { if (v->First() != v || v->orders.list != NULL || v->previous_shared != NULL || v->next_shared == NULL) continue; @@ -322,7 +322,7 @@ void AfterLoadVehicles(bool part_of_load) } } - if (IsSavegameVersionBefore(157)) { + if (IsSavegameVersionBefore(SLV_157)) { /* The road vehicle subtype was converted to a flag. */ RoadVehicle *rv; FOR_ALL_ROADVEHICLES(rv) { @@ -339,7 +339,7 @@ void AfterLoadVehicles(bool part_of_load) } } - if (IsSavegameVersionBefore(160)) { + if (IsSavegameVersionBefore(SLV_160)) { /* In some old savegames there might be some "crap" stored. */ FOR_ALL_VEHICLES(v) { if (!v->IsPrimaryVehicle() && v->type != VEH_DISASTER) { @@ -349,14 +349,14 @@ void AfterLoadVehicles(bool part_of_load) } } - if (IsSavegameVersionBefore(162)) { + if (IsSavegameVersionBefore(SLV_162)) { /* Set the vehicle-local cargo age counter from the old global counter. */ FOR_ALL_VEHICLES(v) { v->cargo_age_counter = _age_cargo_skip_counter; } } - if (IsSavegameVersionBefore(180)) { + if (IsSavegameVersionBefore(SLV_180)) { /* Set service interval flags */ FOR_ALL_VEHICLES(v) { if (!v->IsPrimaryVehicle()) continue; @@ -369,7 +369,7 @@ void AfterLoadVehicles(bool part_of_load) } } - if (IsSavegameVersionBefore(204)) { + if (IsSavegameVersionBefore(SLV_204)) { /* Ship rotation added */ Ship *s; FOR_ALL_SHIPS(s) { @@ -416,7 +416,7 @@ void AfterLoadVehicles(bool part_of_load) } /* Stop non-front engines */ - if (part_of_load && IsSavegameVersionBefore(112)) { + if (part_of_load && IsSavegameVersionBefore(SLV_112)) { FOR_ALL_VEHICLES(v) { if (v->type == VEH_TRAIN) { Train *t = Train::From(v); @@ -429,7 +429,7 @@ void AfterLoadVehicles(bool part_of_load) } /* trains weren't stopping gradually in old OTTD versions (and TTO/TTD) * other vehicle types didn't have zero speed while stopped (even in 'recent' OTTD versions) */ - if ((v->vehstatus & VS_STOPPED) && (v->type != VEH_TRAIN || IsSavegameVersionBefore(2, 1))) { + if ((v->vehstatus & VS_STOPPED) && (v->type != VEH_TRAIN || IsSavegameVersionBefore(SLV_2, 1))) { v->cur_speed = 0; } } @@ -586,132 +586,132 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_VAR(Vehicle, subtype, SLE_UINT8), SLE_REF(Vehicle, next, REF_VEHICLE_OLD), - SLE_CONDVAR(Vehicle, name, SLE_NAME, 0, 84), - SLE_CONDSTR(Vehicle, name, SLE_STR | SLF_ALLOW_CONTROL, 0, 84, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, unitnumber, SLE_FILE_U8 | SLE_VAR_U16, 0, 8), - SLE_CONDVAR(Vehicle, unitnumber, SLE_UINT16, 8, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, name, SLE_NAME, SL_MIN_VERSION, SLV_84), + SLE_CONDSTR(Vehicle, name, SLE_STR | SLF_ALLOW_CONTROL, 0, SLV_84, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, unitnumber, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_8), + SLE_CONDVAR(Vehicle, unitnumber, SLE_UINT16, SLV_8, SL_MAX_VERSION), SLE_VAR(Vehicle, owner, SLE_UINT8), - SLE_CONDVAR(Vehicle, tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), - SLE_CONDVAR(Vehicle, tile, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, dest_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), - SLE_CONDVAR(Vehicle, dest_tile, SLE_UINT32, 6, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, tile, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), + SLE_CONDVAR(Vehicle, tile, SLE_UINT32, SLV_6, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, dest_tile, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), + SLE_CONDVAR(Vehicle, dest_tile, SLE_UINT32, SLV_6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, x_pos, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), - SLE_CONDVAR(Vehicle, x_pos, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), - SLE_CONDVAR(Vehicle, y_pos, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, 0, 164), - SLE_CONDVAR(Vehicle, z_pos, SLE_INT32, 164, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, x_pos, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), + SLE_CONDVAR(Vehicle, x_pos, SLE_UINT32, SLV_6, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), + SLE_CONDVAR(Vehicle, y_pos, SLE_UINT32, SLV_6, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_164), + SLE_CONDVAR(Vehicle, z_pos, SLE_INT32, SLV_164, SL_MAX_VERSION), SLE_VAR(Vehicle, direction, SLE_UINT8), - SLE_CONDNULL(2, 0, 58), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_58), SLE_VAR(Vehicle, spritenum, SLE_UINT8), - SLE_CONDNULL(5, 0, 58), + SLE_CONDNULL(5, SL_MIN_VERSION, SLV_58), SLE_VAR(Vehicle, engine_type, SLE_UINT16), - SLE_CONDNULL(2, 0, 152), + SLE_CONDNULL(2, SL_MIN_VERSION, SLV_152), SLE_VAR(Vehicle, cur_speed, SLE_UINT16), SLE_VAR(Vehicle, subspeed, SLE_UINT8), SLE_VAR(Vehicle, acceleration, SLE_UINT8), SLE_VAR(Vehicle, progress, SLE_UINT8), SLE_VAR(Vehicle, vehstatus, SLE_UINT8), - SLE_CONDVAR(Vehicle, last_station_visited, SLE_FILE_U8 | SLE_VAR_U16, 0, 5), - SLE_CONDVAR(Vehicle, last_station_visited, SLE_UINT16, 5, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, last_loading_station, SLE_UINT16, 182, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, last_station_visited, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_5), + SLE_CONDVAR(Vehicle, last_station_visited, SLE_UINT16, SLV_5, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, last_loading_station, SLE_UINT16, SLV_182, SL_MAX_VERSION), SLE_VAR(Vehicle, cargo_type, SLE_UINT8), - SLE_CONDVAR(Vehicle, cargo_subtype, SLE_UINT8, 35, SL_MAX_VERSION), - SLEG_CONDVAR( _cargo_days, SLE_UINT8, 0, 68), - SLEG_CONDVAR( _cargo_source, SLE_FILE_U8 | SLE_VAR_U16, 0, 7), - SLEG_CONDVAR( _cargo_source, SLE_UINT16, 7, 68), - SLEG_CONDVAR( _cargo_source_xy, SLE_UINT32, 44, 68), + SLE_CONDVAR(Vehicle, cargo_subtype, SLE_UINT8, SLV_35, SL_MAX_VERSION), + SLEG_CONDVAR( _cargo_days, SLE_UINT8, SL_MIN_VERSION, SLV_68), + SLEG_CONDVAR( _cargo_source, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_7), + SLEG_CONDVAR( _cargo_source, SLE_UINT16, SLV_7, SLV_68), + SLEG_CONDVAR( _cargo_source_xy, SLE_UINT32, SLV_44, SLV_68), SLE_VAR(Vehicle, cargo_cap, SLE_UINT16), - SLE_CONDVAR(Vehicle, refit_cap, SLE_UINT16, 182, SL_MAX_VERSION), - SLEG_CONDVAR( _cargo_count, SLE_UINT16, 0, 68), - SLE_CONDLST(Vehicle, cargo.packets, REF_CARGO_PACKET, 68, SL_MAX_VERSION), - SLE_CONDARR(Vehicle, cargo.action_counts, SLE_UINT, VehicleCargoList::NUM_MOVE_TO_ACTION, 181, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, cargo_age_counter, SLE_UINT16, 162, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, refit_cap, SLE_UINT16, SLV_182, SL_MAX_VERSION), + SLEG_CONDVAR( _cargo_count, SLE_UINT16, SL_MIN_VERSION, SLV_68), + SLE_CONDLST(Vehicle, cargo.packets, REF_CARGO_PACKET, SLV_68, SL_MAX_VERSION), + SLE_CONDARR(Vehicle, cargo.action_counts, SLE_UINT, VehicleCargoList::NUM_MOVE_TO_ACTION, SLV_181, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, cargo_age_counter, SLE_UINT16, SLV_162, SL_MAX_VERSION), SLE_VAR(Vehicle, day_counter, SLE_UINT8), SLE_VAR(Vehicle, tick_counter, SLE_UINT8), - SLE_CONDVAR(Vehicle, running_ticks, SLE_UINT8, 88, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, running_ticks, SLE_UINT8, SLV_88, SL_MAX_VERSION), SLE_VAR(Vehicle, cur_implicit_order_index, SLE_UINT8), - SLE_CONDVAR(Vehicle, cur_real_order_index, SLE_UINT8, 158, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, cur_real_order_index, SLE_UINT8, SLV_158, SL_MAX_VERSION), /* num_orders is now part of OrderList and is not saved but counted */ - SLE_CONDNULL(1, 0, 105), + SLE_CONDNULL(1, SL_MIN_VERSION, SLV_105), /* This next line is for version 4 and prior compatibility.. it temporarily reads type and flags (which were both 4 bits) into type. Later on this is converted correctly */ - SLE_CONDVAR(Vehicle, current_order.type, SLE_UINT8, 0, 5), - SLE_CONDVAR(Vehicle, current_order.dest, SLE_FILE_U8 | SLE_VAR_U16, 0, 5), + SLE_CONDVAR(Vehicle, current_order.type, SLE_UINT8, SL_MIN_VERSION, SLV_5), + SLE_CONDVAR(Vehicle, current_order.dest, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_5), /* Orders for version 5 and on */ - SLE_CONDVAR(Vehicle, current_order.type, SLE_UINT8, 5, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, current_order.flags, SLE_UINT8, 5, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, current_order.dest, SLE_UINT16, 5, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, current_order.type, SLE_UINT8, SLV_5, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, current_order.flags, SLE_UINT8, SLV_5, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, current_order.dest, SLE_UINT16, SLV_5, SL_MAX_VERSION), /* Refit in current order */ - SLE_CONDVAR(Vehicle, current_order.refit_cargo, SLE_UINT8, 36, SL_MAX_VERSION), - SLE_CONDNULL(1, 36, 182), // refit_subtype + SLE_CONDVAR(Vehicle, current_order.refit_cargo, SLE_UINT8, SLV_36, SL_MAX_VERSION), + SLE_CONDNULL(1, SLV_36, SLV_182), // refit_subtype /* Timetable in current order */ - SLE_CONDVAR(Vehicle, current_order.wait_time, SLE_UINT16, 67, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, current_order.travel_time, SLE_UINT16, 67, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, current_order.max_speed, SLE_UINT16, 174, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, timetable_start, SLE_INT32, 129, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, current_order.wait_time, SLE_UINT16, SLV_67, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, current_order.travel_time, SLE_UINT16, SLV_67, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, current_order.max_speed, SLE_UINT16, SLV_174, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, timetable_start, SLE_INT32, SLV_129, SL_MAX_VERSION), - SLE_CONDREF(Vehicle, orders, REF_ORDER, 0, 105), - SLE_CONDREF(Vehicle, orders, REF_ORDERLIST, 105, SL_MAX_VERSION), + SLE_CONDREF(Vehicle, orders, REF_ORDER, SL_MIN_VERSION, SLV_105), + SLE_CONDREF(Vehicle, orders, REF_ORDERLIST, SLV_105, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, age, SLE_FILE_U16 | SLE_VAR_I32, 0, 31), - SLE_CONDVAR(Vehicle, age, SLE_INT32, 31, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, max_age, SLE_FILE_U16 | SLE_VAR_I32, 0, 31), - SLE_CONDVAR(Vehicle, max_age, SLE_INT32, 31, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, date_of_last_service, SLE_FILE_U16 | SLE_VAR_I32, 0, 31), - SLE_CONDVAR(Vehicle, date_of_last_service, SLE_INT32, 31, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, service_interval, SLE_UINT16, 0, 31), - SLE_CONDVAR(Vehicle, service_interval, SLE_FILE_U32 | SLE_VAR_U16, 31, 180), - SLE_CONDVAR(Vehicle, service_interval, SLE_UINT16, 180, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, age, SLE_FILE_U16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31), + SLE_CONDVAR(Vehicle, age, SLE_INT32, SLV_31, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, max_age, SLE_FILE_U16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31), + SLE_CONDVAR(Vehicle, max_age, SLE_INT32, SLV_31, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, date_of_last_service, SLE_FILE_U16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31), + SLE_CONDVAR(Vehicle, date_of_last_service, SLE_INT32, SLV_31, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, service_interval, SLE_UINT16, SL_MIN_VERSION, SLV_31), + SLE_CONDVAR(Vehicle, service_interval, SLE_FILE_U32 | SLE_VAR_U16, SLV_31, SLV_180), + SLE_CONDVAR(Vehicle, service_interval, SLE_UINT16, SLV_180, SL_MAX_VERSION), SLE_VAR(Vehicle, reliability, SLE_UINT16), SLE_VAR(Vehicle, reliability_spd_dec, SLE_UINT16), SLE_VAR(Vehicle, breakdown_ctr, SLE_UINT8), SLE_VAR(Vehicle, breakdown_delay, SLE_UINT8), SLE_VAR(Vehicle, breakdowns_since_last_service, SLE_UINT8), SLE_VAR(Vehicle, breakdown_chance, SLE_UINT8), - SLE_CONDVAR(Vehicle, build_year, SLE_FILE_U8 | SLE_VAR_I32, 0, 31), - SLE_CONDVAR(Vehicle, build_year, SLE_INT32, 31, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, build_year, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31), + SLE_CONDVAR(Vehicle, build_year, SLE_INT32, SLV_31, SL_MAX_VERSION), SLE_VAR(Vehicle, load_unload_ticks, SLE_UINT16), - SLEG_CONDVAR( _cargo_paid_for, SLE_UINT16, 45, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, vehicle_flags, SLE_FILE_U8 | SLE_VAR_U16, 40, 180), - SLE_CONDVAR(Vehicle, vehicle_flags, SLE_UINT16, 180, SL_MAX_VERSION), + SLEG_CONDVAR( _cargo_paid_for, SLE_UINT16, SLV_45, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, vehicle_flags, SLE_FILE_U8 | SLE_VAR_U16, SLV_40, SLV_180), + SLE_CONDVAR(Vehicle, vehicle_flags, SLE_UINT16, SLV_180, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, profit_this_year, SLE_FILE_I32 | SLE_VAR_I64, 0, 65), - SLE_CONDVAR(Vehicle, profit_this_year, SLE_INT64, 65, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, profit_last_year, SLE_FILE_I32 | SLE_VAR_I64, 0, 65), - SLE_CONDVAR(Vehicle, profit_last_year, SLE_INT64, 65, SL_MAX_VERSION), - SLEG_CONDVAR( _cargo_feeder_share, SLE_FILE_I32 | SLE_VAR_I64, 51, 65), - SLEG_CONDVAR( _cargo_feeder_share, SLE_INT64, 65, 68), - SLEG_CONDVAR( _cargo_loaded_at_xy, SLE_UINT32, 51, 68), - SLE_CONDVAR(Vehicle, value, SLE_FILE_I32 | SLE_VAR_I64, 0, 65), - SLE_CONDVAR(Vehicle, value, SLE_INT64, 65, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, profit_this_year, SLE_FILE_I32 | SLE_VAR_I64, SL_MIN_VERSION, SLV_65), + SLE_CONDVAR(Vehicle, profit_this_year, SLE_INT64, SLV_65, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, profit_last_year, SLE_FILE_I32 | SLE_VAR_I64, SL_MIN_VERSION, SLV_65), + SLE_CONDVAR(Vehicle, profit_last_year, SLE_INT64, SLV_65, SL_MAX_VERSION), + SLEG_CONDVAR( _cargo_feeder_share, SLE_FILE_I32 | SLE_VAR_I64, SLV_51, SLV_65), + SLEG_CONDVAR( _cargo_feeder_share, SLE_INT64, SLV_65, SLV_68), + SLEG_CONDVAR( _cargo_loaded_at_xy, SLE_UINT32, SLV_51, SLV_68), + SLE_CONDVAR(Vehicle, value, SLE_FILE_I32 | SLE_VAR_I64, SL_MIN_VERSION, SLV_65), + SLE_CONDVAR(Vehicle, value, SLE_INT64, SLV_65, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, random_bits, SLE_UINT8, 2, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, waiting_triggers, SLE_UINT8, 2, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, random_bits, SLE_UINT8, SLV_2, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, waiting_triggers, SLE_UINT8, SLV_2, SL_MAX_VERSION), - SLE_CONDREF(Vehicle, next_shared, REF_VEHICLE, 2, SL_MAX_VERSION), - SLE_CONDNULL(2, 2, 69), - SLE_CONDNULL(4, 69, 101), + SLE_CONDREF(Vehicle, next_shared, REF_VEHICLE, SLV_2, SL_MAX_VERSION), + SLE_CONDNULL(2, SLV_2, SLV_69), + SLE_CONDNULL(4, SLV_69, SLV_101), - SLE_CONDVAR(Vehicle, group_id, SLE_UINT16, 60, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, group_id, SLE_UINT16, SLV_60, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, current_order_time, SLE_UINT32, 67, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, lateness_counter, SLE_INT32, 67, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, current_order_time, SLE_UINT32, SLV_67, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, lateness_counter, SLE_INT32, SLV_67, SL_MAX_VERSION), - SLE_CONDNULL(10, 2, 144), // old reserved space + SLE_CONDNULL(10, SLV_2, SLV_144), // old reserved space SLE_END() }; @@ -725,15 +725,15 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_VAR(Train, railtype, SLE_UINT8), SLE_VAR(Train, track, SLE_UINT8), - SLE_CONDVAR(Train, flags, SLE_FILE_U8 | SLE_VAR_U16, 2, 100), - SLE_CONDVAR(Train, flags, SLE_UINT16, 100, SL_MAX_VERSION), - SLE_CONDNULL(2, 2, 60), + SLE_CONDVAR(Train, flags, SLE_FILE_U8 | SLE_VAR_U16, SLV_2, SLV_100), + SLE_CONDVAR(Train, flags, SLE_UINT16, SLV_100, SL_MAX_VERSION), + SLE_CONDNULL(2, SLV_2, SLV_60), - SLE_CONDVAR(Train, wait_counter, SLE_UINT16, 136, SL_MAX_VERSION), + SLE_CONDVAR(Train, wait_counter, SLE_UINT16, SLV_136, SL_MAX_VERSION), - SLE_CONDNULL(2, 2, 20), - SLE_CONDVAR(Train, gv_flags, SLE_UINT16, 139, SL_MAX_VERSION), - SLE_CONDNULL(11, 2, 144), // old reserved space + SLE_CONDNULL(2, SLV_2, SLV_20), + SLE_CONDVAR(Train, gv_flags, SLE_UINT16, SLV_139, SL_MAX_VERSION), + SLE_CONDNULL(11, SLV_2, SLV_144), // old reserved space SLE_END() }; @@ -749,11 +749,11 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_VAR(RoadVehicle, crashed_ctr, SLE_UINT16), SLE_VAR(RoadVehicle, reverse_ctr, SLE_UINT8), - SLE_CONDNULL(2, 6, 69), - SLE_CONDVAR(RoadVehicle, gv_flags, SLE_UINT16, 139, SL_MAX_VERSION), - SLE_CONDNULL(4, 69, 131), - SLE_CONDNULL(2, 6, 131), - SLE_CONDNULL(16, 2, 144), // old reserved space + SLE_CONDNULL(2, SLV_6, SLV_69), + SLE_CONDVAR(RoadVehicle, gv_flags, SLE_UINT16, SLV_139, SL_MAX_VERSION), + SLE_CONDNULL(4, SLV_69, SLV_131), + SLE_CONDNULL(2, SLV_6, SLV_131), + SLE_CONDNULL(16, SLV_2, SLV_144), // old reserved space SLE_END() }; @@ -762,10 +762,10 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_WRITEBYTE(Vehicle, type), SLE_VEH_INCLUDE(), SLE_VAR(Ship, state, SLE_UINT8), - SLE_CONDDEQUE(Ship, path, SLE_UINT8, 203, SL_MAX_VERSION), - SLE_CONDVAR(Ship, rotation, SLE_UINT8, 204, SL_MAX_VERSION), + SLE_CONDDEQUE(Ship, path, SLE_UINT8, SLV_203, SL_MAX_VERSION), + SLE_CONDVAR(Ship, rotation, SLE_UINT8, SLV_204, SL_MAX_VERSION), - SLE_CONDNULL(16, 2, 144), // old reserved space + SLE_CONDNULL(16, SLV_2, SLV_144), // old reserved space SLE_END() }; @@ -776,19 +776,19 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_VAR(Aircraft, crashed_counter, SLE_UINT16), SLE_VAR(Aircraft, pos, SLE_UINT8), - SLE_CONDVAR(Aircraft, targetairport, SLE_FILE_U8 | SLE_VAR_U16, 0, 5), - SLE_CONDVAR(Aircraft, targetairport, SLE_UINT16, 5, SL_MAX_VERSION), + SLE_CONDVAR(Aircraft, targetairport, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_5), + SLE_CONDVAR(Aircraft, targetairport, SLE_UINT16, SLV_5, SL_MAX_VERSION), SLE_VAR(Aircraft, state, SLE_UINT8), - SLE_CONDVAR(Aircraft, previous_pos, SLE_UINT8, 2, SL_MAX_VERSION), - SLE_CONDVAR(Aircraft, last_direction, SLE_UINT8, 2, SL_MAX_VERSION), - SLE_CONDVAR(Aircraft, number_consecutive_turns, SLE_UINT8, 2, SL_MAX_VERSION), + SLE_CONDVAR(Aircraft, previous_pos, SLE_UINT8, SLV_2, SL_MAX_VERSION), + SLE_CONDVAR(Aircraft, last_direction, SLE_UINT8, SLV_2, SL_MAX_VERSION), + SLE_CONDVAR(Aircraft, number_consecutive_turns, SLE_UINT8, SLV_2, SL_MAX_VERSION), - SLE_CONDVAR(Aircraft, turn_counter, SLE_UINT8, 136, SL_MAX_VERSION), - SLE_CONDVAR(Aircraft, flags, SLE_UINT8, 167, SL_MAX_VERSION), + SLE_CONDVAR(Aircraft, turn_counter, SLE_UINT8, SLV_136, SL_MAX_VERSION), + SLE_CONDVAR(Aircraft, flags, SLE_UINT8, SLV_167, SL_MAX_VERSION), - SLE_CONDNULL(13, 2, 144), // old reserved space + SLE_CONDNULL(13, SLV_2, SLV_144), // old reserved space SLE_END() }; @@ -798,27 +798,27 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_VAR(Vehicle, subtype, SLE_UINT8), - SLE_CONDVAR(Vehicle, tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), - SLE_CONDVAR(Vehicle, tile, SLE_UINT32, 6, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, tile, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), + SLE_CONDVAR(Vehicle, tile, SLE_UINT32, SLV_6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, x_pos, SLE_FILE_I16 | SLE_VAR_I32, 0, 6), - SLE_CONDVAR(Vehicle, x_pos, SLE_INT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_I16 | SLE_VAR_I32, 0, 6), - SLE_CONDVAR(Vehicle, y_pos, SLE_INT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, 0, 164), - SLE_CONDVAR(Vehicle, z_pos, SLE_INT32, 164, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, x_pos, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_6), + SLE_CONDVAR(Vehicle, x_pos, SLE_INT32, SLV_6, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_6), + SLE_CONDVAR(Vehicle, y_pos, SLE_INT32, SLV_6, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_164), + SLE_CONDVAR(Vehicle, z_pos, SLE_INT32, SLV_164, SL_MAX_VERSION), SLE_VAR(Vehicle, sprite_seq.seq[0].sprite, SLE_FILE_U16 | SLE_VAR_U32), - SLE_CONDNULL(5, 0, 59), + SLE_CONDNULL(5, SL_MIN_VERSION, SLV_59), SLE_VAR(Vehicle, progress, SLE_UINT8), SLE_VAR(Vehicle, vehstatus, SLE_UINT8), SLE_VAR(EffectVehicle, animation_state, SLE_UINT16), SLE_VAR(EffectVehicle, animation_substate, SLE_UINT8), - SLE_CONDVAR(Vehicle, spritenum, SLE_UINT8, 2, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, spritenum, SLE_UINT8, SLV_2, SL_MAX_VERSION), - SLE_CONDNULL(15, 2, 144), // old reserved space + SLE_CONDNULL(15, SLV_2, SLV_144), // old reserved space SLE_END() }; @@ -829,37 +829,37 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_REF(Vehicle, next, REF_VEHICLE_OLD), SLE_VAR(Vehicle, subtype, SLE_UINT8), - SLE_CONDVAR(Vehicle, tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), - SLE_CONDVAR(Vehicle, tile, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, dest_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), - SLE_CONDVAR(Vehicle, dest_tile, SLE_UINT32, 6, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, tile, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), + SLE_CONDVAR(Vehicle, tile, SLE_UINT32, SLV_6, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, dest_tile, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), + SLE_CONDVAR(Vehicle, dest_tile, SLE_UINT32, SLV_6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, x_pos, SLE_FILE_I16 | SLE_VAR_I32, 0, 6), - SLE_CONDVAR(Vehicle, x_pos, SLE_INT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_I16 | SLE_VAR_I32, 0, 6), - SLE_CONDVAR(Vehicle, y_pos, SLE_INT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, 0, 164), - SLE_CONDVAR(Vehicle, z_pos, SLE_INT32, 164, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, x_pos, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_6), + SLE_CONDVAR(Vehicle, x_pos, SLE_INT32, SLV_6, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, y_pos, SLE_FILE_I16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_6), + SLE_CONDVAR(Vehicle, y_pos, SLE_INT32, SLV_6, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, z_pos, SLE_FILE_U8 | SLE_VAR_I32, SL_MIN_VERSION, SLV_164), + SLE_CONDVAR(Vehicle, z_pos, SLE_INT32, SLV_164, SL_MAX_VERSION), SLE_VAR(Vehicle, direction, SLE_UINT8), - SLE_CONDNULL(5, 0, 58), + SLE_CONDNULL(5, SL_MIN_VERSION, SLV_58), SLE_VAR(Vehicle, owner, SLE_UINT8), SLE_VAR(Vehicle, vehstatus, SLE_UINT8), - SLE_CONDVAR(Vehicle, current_order.dest, SLE_FILE_U8 | SLE_VAR_U16, 0, 5), - SLE_CONDVAR(Vehicle, current_order.dest, SLE_UINT16, 5, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, current_order.dest, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_5), + SLE_CONDVAR(Vehicle, current_order.dest, SLE_UINT16, SLV_5, SL_MAX_VERSION), SLE_VAR(Vehicle, sprite_seq.seq[0].sprite, SLE_FILE_U16 | SLE_VAR_U32), - SLE_CONDVAR(Vehicle, age, SLE_FILE_U16 | SLE_VAR_I32, 0, 31), - SLE_CONDVAR(Vehicle, age, SLE_INT32, 31, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, age, SLE_FILE_U16 | SLE_VAR_I32, SL_MIN_VERSION, SLV_31), + SLE_CONDVAR(Vehicle, age, SLE_INT32, SLV_31, SL_MAX_VERSION), SLE_VAR(Vehicle, tick_counter, SLE_UINT8), - SLE_CONDVAR(DisasterVehicle, image_override, SLE_FILE_U16 | SLE_VAR_U32, 0, 191), - SLE_CONDVAR(DisasterVehicle, image_override, SLE_UINT32, 191, SL_MAX_VERSION), - SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target, SLE_FILE_U16 | SLE_VAR_U32, 0, 191), - SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target, SLE_UINT32, 191, SL_MAX_VERSION), - SLE_CONDVAR(DisasterVehicle, flags, SLE_UINT8, 194, SL_MAX_VERSION), + SLE_CONDVAR(DisasterVehicle, image_override, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_191), + SLE_CONDVAR(DisasterVehicle, image_override, SLE_UINT32, SLV_191, SL_MAX_VERSION), + SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_191), + SLE_CONDVAR(DisasterVehicle, big_ufo_destroyer_target, SLE_UINT32, SLV_191, SL_MAX_VERSION), + SLE_CONDVAR(DisasterVehicle, flags, SLE_UINT8, SLV_194, SL_MAX_VERSION), - SLE_CONDNULL(16, 2, 144), // old reserved space + SLE_CONDNULL(16, SLV_2, SLV_144), // old reserved space SLE_END() }; @@ -920,13 +920,13 @@ void Load_VEHS() } /* Old savegames used 'last_station_visited = 0xFF' */ - if (IsSavegameVersionBefore(5) && v->last_station_visited == 0xFF) { + if (IsSavegameVersionBefore(SLV_5) && v->last_station_visited == 0xFF) { v->last_station_visited = INVALID_STATION; } - if (IsSavegameVersionBefore(182)) v->last_loading_station = INVALID_STATION; + if (IsSavegameVersionBefore(SLV_182)) v->last_loading_station = INVALID_STATION; - if (IsSavegameVersionBefore(5)) { + if (IsSavegameVersionBefore(SLV_5)) { /* Convert the current_order.type (which is a mix of type and flags, because * in those versions, they both were 4 bits big) to type and flags */ v->current_order.flags = GB(v->current_order.type, 4, 4); @@ -934,7 +934,7 @@ void Load_VEHS() } /* Advanced vehicle lists got added */ - if (IsSavegameVersionBefore(60)) v->group_id = DEFAULT_GROUP; + if (IsSavegameVersionBefore(SLV_60)) v->group_id = DEFAULT_GROUP; } } diff --git a/src/saveload/waypoint_sl.cpp b/src/saveload/waypoint_sl.cpp index c525566b8a..ae74d812b1 100644 --- a/src/saveload/waypoint_sl.cpp +++ b/src/saveload/waypoint_sl.cpp @@ -70,7 +70,7 @@ void MoveWaypointsToBaseStations() * waypoints to make way for storing the index in m2. The custom graphics * id which was stored in m4 is now saved as a grf/id reference in the * waypoint struct. */ - if (IsSavegameVersionBefore(17)) { + if (IsSavegameVersionBefore(SLV_17)) { for (OldWaypoint *wp = _old_waypoints.Begin(); wp != _old_waypoints.End(); wp++) { if (wp->delete_ctr != 0) continue; // The waypoint was deleted @@ -113,7 +113,7 @@ void MoveWaypointsToBaseStations() TileIndex t = wp->xy; if (IsTileType(t, MP_RAILWAY) && GetRailTileType(t) == 2 /* RAIL_TILE_WAYPOINT */ && _m[t].m2 == wp->index) { /* The tile might've been reserved! */ - bool reserved = !IsSavegameVersionBefore(100) && HasBit(_m[t].m5, 4); + bool reserved = !IsSavegameVersionBefore(SLV_100) && HasBit(_m[t].m5, 4); /* The tile really has our waypoint, so reassign the map array */ MakeRailWaypoint(t, GetTileOwner(t), new_wp->index, (Axis)GB(_m[t].m5, 0, 1), 0, GetRailType(t)); @@ -150,21 +150,21 @@ void MoveWaypointsToBaseStations() } static const SaveLoad _old_waypoint_desc[] = { - SLE_CONDVAR(OldWaypoint, xy, SLE_FILE_U16 | SLE_VAR_U32, 0, 6), - SLE_CONDVAR(OldWaypoint, xy, SLE_UINT32, 6, SL_MAX_VERSION), - SLE_CONDVAR(OldWaypoint, town_index, SLE_UINT16, 12, 122), - SLE_CONDREF(OldWaypoint, town, REF_TOWN, 122, SL_MAX_VERSION), - SLE_CONDVAR(OldWaypoint, town_cn, SLE_FILE_U8 | SLE_VAR_U16, 12, 89), - SLE_CONDVAR(OldWaypoint, town_cn, SLE_UINT16, 89, SL_MAX_VERSION), - SLE_CONDVAR(OldWaypoint, string_id, SLE_STRINGID, 0, 84), - SLE_CONDSTR(OldWaypoint, name, SLE_STR, 0, 84, SL_MAX_VERSION), + SLE_CONDVAR(OldWaypoint, xy, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_6), + SLE_CONDVAR(OldWaypoint, xy, SLE_UINT32, SLV_6, SL_MAX_VERSION), + SLE_CONDVAR(OldWaypoint, town_index, SLE_UINT16, SLV_12, SLV_122), + SLE_CONDREF(OldWaypoint, town, REF_TOWN, SLV_122, SL_MAX_VERSION), + SLE_CONDVAR(OldWaypoint, town_cn, SLE_FILE_U8 | SLE_VAR_U16, SLV_12, SLV_89), + SLE_CONDVAR(OldWaypoint, town_cn, SLE_UINT16, SLV_89, SL_MAX_VERSION), + SLE_CONDVAR(OldWaypoint, string_id, SLE_STRINGID, SL_MIN_VERSION, SLV_84), + SLE_CONDSTR(OldWaypoint, name, SLE_STR, 0, SLV_84, SL_MAX_VERSION), SLE_VAR(OldWaypoint, delete_ctr, SLE_UINT8), - SLE_CONDVAR(OldWaypoint, build_date, SLE_FILE_U16 | SLE_VAR_I32, 3, 31), - SLE_CONDVAR(OldWaypoint, build_date, SLE_INT32, 31, SL_MAX_VERSION), - SLE_CONDVAR(OldWaypoint, localidx, SLE_UINT8, 3, SL_MAX_VERSION), - SLE_CONDVAR(OldWaypoint, grfid, SLE_UINT32, 17, SL_MAX_VERSION), - SLE_CONDVAR(OldWaypoint, owner, SLE_UINT8, 101, SL_MAX_VERSION), + SLE_CONDVAR(OldWaypoint, build_date, SLE_FILE_U16 | SLE_VAR_I32, SLV_3, SLV_31), + SLE_CONDVAR(OldWaypoint, build_date, SLE_INT32, SLV_31, SL_MAX_VERSION), + SLE_CONDVAR(OldWaypoint, localidx, SLE_UINT8, SLV_3, SL_MAX_VERSION), + SLE_CONDVAR(OldWaypoint, grfid, SLE_UINT32, SLV_17, SL_MAX_VERSION), + SLE_CONDVAR(OldWaypoint, owner, SLE_UINT8, SLV_101, SL_MAX_VERSION), SLE_END() }; @@ -190,10 +190,10 @@ static void Ptrs_WAYP() for (OldWaypoint *wp = _old_waypoints.Begin(); wp != _old_waypoints.End(); wp++) { SlObject(wp, _old_waypoint_desc); - if (IsSavegameVersionBefore(12)) { + if (IsSavegameVersionBefore(SLV_12)) { wp->town_cn = (wp->string_id & 0xC000) == 0xC000 ? (wp->string_id >> 8) & 0x3F : 0; wp->town = ClosestTownFromTile(wp->xy, UINT_MAX); - } else if (IsSavegameVersionBefore(122)) { + } else if (IsSavegameVersionBefore(SLV_122)) { /* Only for versions 12 .. 122 */ if (!Town::IsValidID(wp->town_index)) { /* Upon a corrupted waypoint we'll likely get here. The next step will be to @@ -206,7 +206,7 @@ static void Ptrs_WAYP() } wp->town = Town::Get(wp->town_index); } - if (IsSavegameVersionBefore(84)) { + if (IsSavegameVersionBefore(SLV_84)) { wp->name = CopyFromOldName(wp->string_id); } } diff --git a/src/settings.cpp b/src/settings.cpp index d16cff7a1d..41d3e28092 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1377,7 +1377,7 @@ static void PrepareOldDiffCustom() */ static void HandleOldDiffCustom(bool savegame) { - uint options_to_load = GAME_DIFFICULTY_NUM - ((savegame && IsSavegameVersionBefore(4)) ? 1 : 0); + uint options_to_load = GAME_DIFFICULTY_NUM - ((savegame && IsSavegameVersionBefore(SLV_4)) ? 1 : 0); if (!savegame) { /* If we did read to old_diff_custom, then at least one value must be non 0. */ diff --git a/src/table/company_settings.ini b/src/table/company_settings.ini index 71b95cc393..a6e873f659 100644 --- a/src/table/company_settings.ini +++ b/src/table/company_settings.ini @@ -31,7 +31,7 @@ strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT strval = STR_NULL proc = NULL load = NULL -from = 0 +from = SL_MIN_VERSION to = SL_MAX_VERSION cat = SC_ADVANCED diff --git a/src/table/currency_settings.ini b/src/table/currency_settings.ini index dede8b0fb7..bcce65801b 100644 --- a/src/table/currency_settings.ini +++ b/src/table/currency_settings.ini @@ -25,7 +25,7 @@ strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT strval = STR_NULL proc = NULL load = NULL -from = 0 +from = SL_MIN_VERSION to = SL_MAX_VERSION cat = SC_ADVANCED diff --git a/src/table/gameopt_settings.ini b/src/table/gameopt_settings.ini index ef38b15ff0..624d475c31 100644 --- a/src/table/gameopt_settings.ini +++ b/src/table/gameopt_settings.ini @@ -59,7 +59,7 @@ strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT strval = STR_NULL proc = NULL load = NULL -from = 0 +from = SL_MIN_VERSION to = SL_MAX_VERSION cat = SC_ADVANCED @@ -77,7 +77,7 @@ def = 0 min = 0 max = 0 full = NULL -to = 4 +to = SLV_4 [SDTG_GENERAL] name = ""diff_custom"" @@ -91,7 +91,7 @@ def = 0 min = 0 max = 0 full = NULL -from = 4 +from = SLV_4 ## [SDTG_VAR] @@ -152,21 +152,21 @@ type = SLE_UINT8 def = DEF_SNOWLINE_HEIGHT * TILE_HEIGHT min = MIN_SNOWLINE_HEIGHT * TILE_HEIGHT max = MAX_SNOWLINE_HEIGHT * TILE_HEIGHT -to = 22 +to = SLV_22 [SDT_NULL] length = 1 -from = 22 -to = 165 +from = SLV_22 +to = SLV_165 [SDT_NULL] length = 1 -to = 23 +to = SLV_23 [SDTC_OMANY] var = gui.autosave type = SLE_UINT8 -from = 23 +from = SLV_23 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC def = 1 max = 4 diff --git a/src/table/misc_settings.ini b/src/table/misc_settings.ini index 52ca2d16ef..b710478fba 100644 --- a/src/table/misc_settings.ini +++ b/src/table/misc_settings.ini @@ -32,7 +32,7 @@ strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT strval = STR_NULL proc = NULL load = NULL -from = 0 +from = SL_MIN_VERSION to = SL_MAX_VERSION cat = SC_ADVANCED diff --git a/src/table/settings.ini b/src/table/settings.ini index 0d3109ad5f..2b36e32b7c 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -89,7 +89,7 @@ strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT strval = STR_NULL proc = NULL load = NULL -from = 0 +from = SL_MIN_VERSION to = SL_MAX_VERSION cat = SC_ADVANCED @@ -101,7 +101,7 @@ cat = SC_ADVANCED base = GameSettings var = difficulty.max_no_competitors type = SLE_UINT8 -from = 97 +from = SLV_97 def = 0 min = 0 max = MAX_COMPANIES - 1 @@ -111,14 +111,14 @@ cat = SC_BASIC [SDT_NULL] length = 1 -from = 97 -to = 110 +from = SLV_97 +to = SLV_110 [SDT_VAR] base = GameSettings var = difficulty.number_towns type = SLE_UINT8 -from = 97 +from = SLV_97 guiflags = SGF_NEWGAME_ONLY def = 2 min = 0 @@ -131,7 +131,7 @@ cat = SC_BASIC base = GameSettings var = difficulty.industry_density type = SLE_UINT8 -from = 97 +from = SLV_97 guiflags = SGF_MULTISTRING def = ID_END - 1 min = 0 @@ -146,7 +146,7 @@ cat = SC_BASIC base = GameSettings var = difficulty.max_loan type = SLE_UINT32 -from = 97 +from = SLV_97 guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO | SGF_CURRENCY def = 300000 min = 100000 @@ -161,7 +161,7 @@ cat = SC_BASIC base = GameSettings var = difficulty.initial_interest type = SLE_UINT8 -from = 97 +from = SLV_97 guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO def = 2 min = 2 @@ -175,7 +175,7 @@ strval = STR_CONFIG_SETTING_PERCENTAGE base = GameSettings var = difficulty.vehicle_costs type = SLE_UINT8 -from = 97 +from = SLV_97 guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO | SGF_MULTISTRING def = 0 min = 0 @@ -190,7 +190,7 @@ cat = SC_BASIC base = GameSettings var = difficulty.competitor_speed type = SLE_UINT8 -from = 97 +from = SLV_97 guiflags = SGF_MULTISTRING def = 2 min = 0 @@ -203,14 +203,14 @@ cat = SC_BASIC [SDT_NULL] length = 1 -from = 97 -to = 110 +from = SLV_97 +to = SLV_110 [SDT_VAR] base = GameSettings var = difficulty.vehicle_breakdowns type = SLE_UINT8 -from = 97 +from = SLV_97 guiflags = SGF_MULTISTRING def = 1 min = 0 @@ -225,7 +225,7 @@ cat = SC_BASIC base = GameSettings var = difficulty.subsidy_multiplier type = SLE_UINT8 -from = 97 +from = SLV_97 guiflags = SGF_MULTISTRING def = 2 min = 0 @@ -239,7 +239,7 @@ strval = STR_SUBSIDY_X1_5 base = GameSettings var = difficulty.construction_cost type = SLE_UINT8 -from = 97 +from = SLV_97 guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO | SGF_MULTISTRING def = 0 min = 0 @@ -254,7 +254,7 @@ cat = SC_BASIC base = GameSettings var = difficulty.terrain_type type = SLE_UINT8 -from = 97 +from = SLV_97 guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY def = 1 min = 0 @@ -269,7 +269,7 @@ cat = SC_BASIC base = GameSettings var = difficulty.quantity_sea_lakes type = SLE_UINT8 -from = 97 +from = SLV_97 guiflags = SGF_NEWGAME_ONLY def = 0 min = 0 @@ -281,7 +281,7 @@ cat = SC_BASIC [SDT_BOOL] base = GameSettings var = difficulty.economy -from = 97 +from = SLV_97 def = false str = STR_CONFIG_SETTING_RECESSIONS strhelp = STR_CONFIG_SETTING_RECESSIONS_HELPTEXT @@ -289,7 +289,7 @@ strhelp = STR_CONFIG_SETTING_RECESSIONS_HELPTEXT [SDT_BOOL] base = GameSettings var = difficulty.line_reverse_mode -from = 97 +from = SLV_97 def = false str = STR_CONFIG_SETTING_TRAIN_REVERSING strhelp = STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT @@ -297,7 +297,7 @@ strhelp = STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT [SDT_BOOL] base = GameSettings var = difficulty.disasters -from = 97 +from = SLV_97 def = false str = STR_CONFIG_SETTING_DISASTERS strhelp = STR_CONFIG_SETTING_DISASTERS_HELPTEXT @@ -307,7 +307,7 @@ cat = SC_BASIC base = GameSettings var = difficulty.town_council_tolerance type = SLE_UINT8 -from = 97 +from = SLV_97 guiflags = SGF_MULTISTRING def = 0 min = 0 @@ -323,8 +323,8 @@ name = ""diff_level"" var = _old_diff_level type = SLE_UINT8 flags = SLF_NOT_IN_CONFIG -from = 97 -to = 178 +from = SLV_97 +to = SLV_178 def = 3 min = 0 max = 3 @@ -336,7 +336,7 @@ cat = SC_BASIC base = GameSettings var = game_creation.town_name type = SLE_UINT8 -from = 97 +from = SLV_97 guiflags = SGF_NO_NETWORK def = 0 max = 255 @@ -347,7 +347,7 @@ cat = SC_BASIC base = GameSettings var = game_creation.landscape type = SLE_UINT8 -from = 97 +from = SLV_97 guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY def = 0 max = 3 @@ -361,14 +361,14 @@ cat = SC_BASIC ; Snow line (or snow_line_height * TILE_HEIGHT) [SDT_NULL] length = 1 -from = 97 -to = 164 +from = SLV_97 +to = SLV_164 [SDT_OMANY] base = GameSettings var = vehicle.road_side type = SLE_UINT8 -from = 97 +from = SLV_97 guiflags = SGF_MULTISTRING | SGF_NO_NETWORK def = 1 max = 1 @@ -384,7 +384,7 @@ proc = CheckRoadSide base = GameSettings var = construction.max_heightlevel type = SLE_UINT8 -from = 194 +from = SLV_194 guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO def = DEF_MAX_HEIGHTLEVEL min = MIN_MAX_HEIGHTLEVEL @@ -407,7 +407,7 @@ cat = SC_EXPERT base = GameSettings var = construction.command_pause_level type = SLE_UINT8 -from = 154 +from = SLV_154 guiflags = SGF_MULTISTRING | SGF_NO_NETWORK def = 1 min = 0 @@ -421,7 +421,7 @@ strval = STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS base = GameSettings var = construction.terraform_per_64k_frames type = SLE_UINT32 -from = 156 +from = SLV_156 def = 64 << 16 min = 0 max = 1 << 30 @@ -432,7 +432,7 @@ cat = SC_EXPERT base = GameSettings var = construction.terraform_frame_burst type = SLE_UINT16 -from = 156 +from = SLV_156 def = 4096 min = 0 max = 1 << 30 @@ -443,7 +443,7 @@ cat = SC_EXPERT base = GameSettings var = construction.clear_per_64k_frames type = SLE_UINT32 -from = 156 +from = SLV_156 def = 64 << 16 min = 0 max = 1 << 30 @@ -454,7 +454,7 @@ cat = SC_EXPERT base = GameSettings var = construction.clear_frame_burst type = SLE_UINT16 -from = 156 +from = SLV_156 def = 4096 min = 0 max = 1 << 30 @@ -465,7 +465,7 @@ cat = SC_EXPERT base = GameSettings var = construction.tree_per_64k_frames type = SLE_UINT32 -from = 175 +from = SLV_175 def = 64 << 16 min = 0 max = 1 << 30 @@ -476,7 +476,7 @@ cat = SC_EXPERT base = GameSettings var = construction.tree_frame_burst type = SLE_UINT16 -from = 175 +from = SLV_175 def = 4096 min = 0 max = 1 << 30 @@ -486,7 +486,7 @@ cat = SC_EXPERT [SDT_BOOL] base = GameSettings var = construction.autoslope -from = 75 +from = SLV_75 def = true str = STR_CONFIG_SETTING_AUTOSLOPE strhelp = STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT @@ -503,7 +503,7 @@ strhelp = STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT base = GameSettings var = construction.max_bridge_length type = SLE_UINT16 -from = 159 +from = SLV_159 guiflags = SGF_NO_NETWORK def = 64 min = 1 @@ -517,7 +517,7 @@ strval = STR_CONFIG_SETTING_TILE_LENGTH base = GameSettings var = construction.max_bridge_height type = SLE_UINT8 -from = 194 +from = SLV_194 guiflags = SGF_NO_NETWORK def = 12 min = 1 @@ -532,7 +532,7 @@ cat = SC_EXPERT base = GameSettings var = construction.max_tunnel_length type = SLE_UINT16 -from = 159 +from = SLV_159 guiflags = SGF_NO_NETWORK def = 64 min = 1 @@ -545,7 +545,7 @@ strval = STR_CONFIG_SETTING_TILE_LENGTH # construction.longbridges [SDT_NULL] length = 1 -to = 159 +to = SLV_159 [SDT_VAR] base = GameSettings @@ -573,7 +573,7 @@ strhelp = STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT base = GameSettings var = economy.town_layout type = SLE_UINT8 -from = 59 +from = SLV_59 guiflags = SGF_MULTISTRING def = TL_ORIGINAL min = TL_BEGIN @@ -587,7 +587,7 @@ proc = TownFoundingChanged [SDT_BOOL] base = GameSettings var = economy.allow_town_roads -from = 113 +from = SLV_113 guiflags = SGF_NO_NETWORK def = true str = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS @@ -597,7 +597,7 @@ strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT base = GameSettings var = economy.found_town type = SLE_UINT8 -from = 128 +from = SLV_128 guiflags = SGF_MULTISTRING def = TF_FORBIDDEN min = TF_BEGIN @@ -612,7 +612,7 @@ cat = SC_BASIC [SDT_BOOL] base = GameSettings var = economy.allow_town_level_crossings -from = 143 +from = SLV_143 guiflags = SGF_NO_NETWORK def = true str = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS @@ -624,7 +624,7 @@ strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT base = GameSettings var = linkgraph.recalc_interval type = SLE_UINT16 -from = 183 +from = SLV_183 def = 4 min = 2 max = 32 @@ -637,7 +637,7 @@ strhelp = STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT base = GameSettings var = linkgraph.recalc_time type = SLE_UINT16 -from = 183 +from = SLV_183 def = 16 min = 1 max = 4096 @@ -650,7 +650,7 @@ strhelp = STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT base = GameSettings var = linkgraph.distribution_pax type = SLE_UINT8 -from = 183 +from = SLV_183 guiflags = SGF_MULTISTRING def = DT_MANUAL min = DT_MIN @@ -664,7 +664,7 @@ strhelp = STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT base = GameSettings var = linkgraph.distribution_mail type = SLE_UINT8 -from = 183 +from = SLV_183 guiflags = SGF_MULTISTRING def = DT_MANUAL min = DT_MIN @@ -678,7 +678,7 @@ strhelp = STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT base = GameSettings var = linkgraph.distribution_armoured type = SLE_UINT8 -from = 183 +from = SLV_183 guiflags = SGF_MULTISTRING def = DT_MANUAL min = DT_MIN @@ -692,7 +692,7 @@ strhelp = STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT base = GameSettings var = linkgraph.distribution_default type = SLE_UINT8 -from = 183 +from = SLV_183 guiflags = SGF_MULTISTRING def = DT_MANUAL min = DT_BEGIN @@ -706,7 +706,7 @@ strhelp = STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT base = GameSettings var = linkgraph.accuracy type = SLE_UINT8 -from = 183 +from = SLV_183 def = 16 min = 2 max = 64 @@ -719,7 +719,7 @@ strhelp = STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT base = GameSettings var = linkgraph.demand_distance type = SLE_UINT8 -from = 183 +from = SLV_183 def = 100 min = 0 max = 255 @@ -732,7 +732,7 @@ strhelp = STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT base = GameSettings var = linkgraph.demand_size type = SLE_UINT8 -from = 183 +from = SLV_183 def = 100 min = 0 max = 100 @@ -745,7 +745,7 @@ strhelp = STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT base = GameSettings var = linkgraph.short_path_saturation type = SLE_UINT8 -from = 183 +from = SLV_183 def = 80 min = 0 max = 250 @@ -774,7 +774,7 @@ proc = TrainAccelerationModelChanged base = GameSettings var = vehicle.roadveh_acceleration_model type = SLE_UINT8 -from = 139 +from = SLV_139 guiflags = SGF_MULTISTRING def = 1 min = 0 @@ -789,7 +789,7 @@ proc = RoadVehAccelerationModelChanged base = GameSettings var = vehicle.train_slope_steepness type = SLE_UINT8 -from = 133 +from = SLV_133 def = 3 min = 0 max = 10 @@ -804,7 +804,7 @@ cat = SC_EXPERT base = GameSettings var = vehicle.roadveh_slope_steepness type = SLE_UINT8 -from = 139 +from = SLV_139 def = 7 min = 0 max = 10 @@ -828,7 +828,7 @@ cat = SC_EXPERT base = GameSettings var = vehicle.max_train_length type = SLE_UINT8 -from = 159 +from = SLV_159 def = 7 min = 1 max = 64 @@ -841,13 +841,13 @@ cat = SC_BASIC ; vehicle.mammoth_trains [SDT_NULL] length = 1 -to = 159 +to = SLV_159 [SDT_VAR] base = GameSettings var = vehicle.smoke_amount type = SLE_UINT8 -from = 145 +from = SLV_145 guiflags = SGF_MULTISTRING def = 1 min = 0 @@ -859,7 +859,7 @@ strval = STR_CONFIG_SETTING_NONE ; order.gotodepot [SDT_NULL] length = 1 -to = 159 +to = SLV_159 ; path finder @@ -872,31 +872,31 @@ cat = SC_EXPERT [SDT_BOOL] base = GameSettings var = pf.new_pathfinding_all -to = 87 +to = SLV_87 def = false cat = SC_EXPERT [SDT_BOOL] base = GameSettings var = pf.yapf.ship_use_yapf -from = 28 -to = 87 +from = SLV_28 +to = SLV_87 def = false cat = SC_EXPERT [SDT_BOOL] base = GameSettings var = pf.yapf.road_use_yapf -from = 28 -to = 87 +from = SLV_28 +to = SLV_87 def = true cat = SC_EXPERT [SDT_BOOL] base = GameSettings var = pf.yapf.rail_use_yapf -from = 28 -to = 87 +from = SLV_28 +to = SLV_87 def = true cat = SC_EXPERT @@ -905,7 +905,7 @@ cat = SC_EXPERT base = GameSettings var = pf.pathfinder_for_trains type = SLE_UINT8 -from = 87 +from = SLV_87 guiflags = SGF_MULTISTRING def = 2 min = 1 @@ -920,7 +920,7 @@ cat = SC_EXPERT base = GameSettings var = pf.pathfinder_for_roadvehs type = SLE_UINT8 -from = 87 +from = SLV_87 guiflags = SGF_MULTISTRING def = 2 min = 1 @@ -935,7 +935,7 @@ cat = SC_EXPERT base = GameSettings var = pf.pathfinder_for_ships type = SLE_UINT8 -from = 87 +from = SLV_87 guiflags = SGF_MULTISTRING def = 2 min = 0 @@ -1012,7 +1012,7 @@ name = NULL guiflags = SGF_NO_NETWORK var = _old_vds.servint_ispercent def = false -to = 120 +to = SLV_120 [SDTG_VAR] name = NULL @@ -1022,7 +1022,7 @@ var = _old_vds.servint_trains def = 150 min = 5 max = 800 -to = 120 +to = SLV_120 [SDTG_VAR] name = NULL @@ -1032,7 +1032,7 @@ var = _old_vds.servint_roadveh def = 150 min = 5 max = 800 -to = 120 +to = SLV_120 [SDTG_VAR] name = NULL @@ -1042,7 +1042,7 @@ var = _old_vds.servint_ships def = 360 min = 5 max = 800 -to = 120 +to = SLV_120 [SDTG_VAR] name = NULL @@ -1052,7 +1052,7 @@ var = _old_vds.servint_aircraft def = 150 min = 5 max = 800 -to = 120 +to = SLV_120 [SDT_BOOL] base = GameSettings @@ -1073,7 +1073,7 @@ proc = UpdateConsists [SDT_BOOL] base = GameSettings var = vehicle.disable_elrails -from = 38 +from = SLV_38 guiflags = SGF_NO_NETWORK def = false str = STR_CONFIG_SETTING_DISABLE_ELRAILS @@ -1085,7 +1085,7 @@ cat = SC_EXPERT base = GameSettings var = vehicle.freight_trains type = SLE_UINT8 -from = 39 +from = SLV_39 guiflags = SGF_NO_NETWORK def = 1 min = 1 @@ -1099,14 +1099,14 @@ proc = UpdateConsists ; order.timetabling [SDT_NULL] length = 1 -from = 67 -to = 159 +from = SLV_67 +to = SLV_159 [SDT_VAR] base = GameSettings var = vehicle.plane_speed type = SLE_UINT8 -from = 90 +from = SLV_90 guiflags = SGF_NO_NETWORK def = 4 min = 1 @@ -1118,7 +1118,7 @@ strval = STR_CONFIG_SETTING_PLANE_SPEED_VALUE [SDT_BOOL] base = GameSettings var = vehicle.dynamic_engines -from = 95 +from = SLV_95 guiflags = SGF_NO_NETWORK def = true proc = ChangeDynamicEngines @@ -1128,7 +1128,7 @@ cat = SC_EXPERT base = GameSettings var = vehicle.plane_crashes type = SLE_UINT8 -from = 138 +from = SLV_138 guiflags = SGF_MULTISTRING def = 2 min = 0 @@ -1142,12 +1142,12 @@ cat = SC_BASIC ; station.join_stations [SDT_NULL] length = 1 -to = 159 +to = SLV_159 [SDTC_BOOL] var = gui.sg_full_load_any -from = 22 -to = 93 +from = SLV_22 +to = SLV_93 def = true [SDT_BOOL] @@ -1165,14 +1165,14 @@ cat = SC_EXPERT [SDTC_BOOL] var = gui.sg_new_nonstop -from = 22 -to = 93 +from = SLV_22 +to = SLV_93 def = false ; station.nonuniform_stations [SDT_NULL] length = 1 -to = 159 +to = SLV_159 [SDT_VAR] base = GameSettings @@ -1207,7 +1207,7 @@ cat = SC_EXPERT [SDT_BOOL] base = GameSettings var = order.gradual_loading -from = 40 +from = SLV_40 guiflags = SGF_NO_NETWORK def = true cat = SC_EXPERT @@ -1215,7 +1215,7 @@ cat = SC_EXPERT [SDT_BOOL] base = GameSettings var = construction.road_stop_on_town_road -from = 47 +from = SLV_47 def = true str = STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD strhelp = STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT @@ -1224,7 +1224,7 @@ cat = SC_BASIC [SDT_BOOL] base = GameSettings var = construction.road_stop_on_competitor_road -from = 114 +from = SLV_114 def = true str = STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD strhelp = STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT @@ -1233,14 +1233,14 @@ cat = SC_BASIC [SDT_BOOL] base = GameSettings var = station.adjacent_stations -from = 62 +from = SLV_62 def = true cat = SC_EXPERT [SDT_BOOL] base = GameSettings var = economy.station_noise_level -from = 96 +from = SLV_96 guiflags = SGF_NO_NETWORK def = false str = STR_CONFIG_SETTING_NOISE_LEVEL @@ -1250,7 +1250,7 @@ proc = InvalidateTownViewWindow [SDT_BOOL] base = GameSettings var = station.distant_join_stations -from = 106 +from = SLV_106 def = true str = STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS strhelp = STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT @@ -1283,7 +1283,7 @@ cat = SC_BASIC base = GameSettings var = construction.industry_platform type = SLE_UINT8 -from = 148 +from = SLV_148 def = 1 min = 0 max = 4 @@ -1301,7 +1301,7 @@ strhelp = STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT [SDT_NULL] length = 1 -to = 141 +to = SLV_141 [SDT_BOOL] base = GameSettings @@ -1315,7 +1315,7 @@ cat = SC_BASIC [SDT_BOOL] base = GameSettings var = economy.exclusive_rights -from = 79 +from = SLV_79 def = true str = STR_CONFIG_SETTING_ALLOW_EXCLUSIVE strhelp = STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT @@ -1325,7 +1325,7 @@ cat = SC_BASIC [SDT_BOOL] base = GameSettings var = economy.fund_buildings -from = 165 +from = SLV_165 def = true str = STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS strhelp = STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT @@ -1335,7 +1335,7 @@ cat = SC_BASIC [SDT_BOOL] base = GameSettings var = economy.fund_roads -from = 160 +from = SLV_160 def = true str = STR_CONFIG_SETTING_ALLOW_FUND_ROAD strhelp = STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT @@ -1345,7 +1345,7 @@ cat = SC_BASIC [SDT_BOOL] base = GameSettings var = economy.give_money -from = 79 +from = SLV_79 def = true str = STR_CONFIG_SETTING_ALLOW_GIVE_MONEY strhelp = STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT @@ -1366,7 +1366,7 @@ cat = SC_BASIC [SDT_NULL] length = 4 -to = 144 +to = SLV_144 [SDT_VAR] base = GameSettings @@ -1382,7 +1382,7 @@ cat = SC_BASIC [SDT_NULL] length = 4 -to = 105 +to = SLV_105 [SDT_BOOL] base = GameSettings @@ -1405,7 +1405,7 @@ proc = InvalidateCompanyWindow base = GameSettings var = economy.feeder_payment_share type = SLE_UINT8 -from = 134 +from = SLV_134 def = 75 min = 0 max = 100 @@ -1418,7 +1418,7 @@ cat = SC_EXPERT base = GameSettings var = economy.town_growth_rate type = SLE_UINT8 -from = 54 +from = SLV_54 guiflags = SGF_MULTISTRING def = 2 min = 0 @@ -1431,7 +1431,7 @@ strval = STR_CONFIG_SETTING_TOWN_GROWTH_NONE base = GameSettings var = economy.larger_towns type = SLE_UINT8 -from = 54 +from = SLV_54 guiflags = SGF_0ISDISABLED def = 4 min = 0 @@ -1445,7 +1445,7 @@ strval = STR_CONFIG_SETTING_LARGER_TOWNS_VALUE base = GameSettings var = economy.initial_city_size type = SLE_UINT8 -from = 56 +from = SLV_56 def = 2 min = 1 max = 10 @@ -1457,20 +1457,20 @@ strval = STR_JUST_COMMA [SDT_BOOL] base = GameSettings var = economy.mod_road_rebuild -from = 77 +from = SLV_77 def = true cat = SC_EXPERT ; previously ai-new setting. [SDT_NULL] length = 1 -to = 107 +to = SLV_107 [SDT_OMANY] base = GameSettings var = script.settings_profile type = SLE_UINT8 -from = 178 +from = SLV_178 guiflags = SGF_MULTISTRING def = SP_EASY min = SP_EASY @@ -1521,7 +1521,7 @@ strhelp = STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT base = GameSettings var = script.script_max_opcode_till_suspend type = SLE_UINT32 -from = 107 +from = SLV_107 guiflags = SGF_NEWGAME_ONLY def = 10000 min = 5000 @@ -1554,7 +1554,7 @@ cat = SC_EXPERT [SDT_BOOL] base = GameSettings var = pf.reverse_at_signals -from = 159 +from = SLV_159 def = false str = STR_CONFIG_SETTING_REVERSE_AT_SIGNALS strhelp = STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT @@ -1581,7 +1581,7 @@ cat = SC_EXPERT base = GameSettings var = economy.town_noise_population[0] type = SLE_UINT16 -from = 96 +from = SLV_96 def = 800 min = 200 max = 65535 @@ -1591,7 +1591,7 @@ cat = SC_EXPERT base = GameSettings var = economy.town_noise_population[1] type = SLE_UINT16 -from = 96 +from = SLV_96 def = 2000 min = 400 max = 65535 @@ -1601,7 +1601,7 @@ cat = SC_EXPERT base = GameSettings var = economy.town_noise_population[2] type = SLE_UINT16 -from = 96 +from = SLV_96 def = 4000 min = 800 max = 65535 @@ -1610,7 +1610,7 @@ cat = SC_EXPERT [SDT_BOOL] base = GameSettings var = economy.infrastructure_maintenance -from = 166 +from = SLV_166 def = false str = STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE strhelp = STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT @@ -1622,7 +1622,7 @@ cat = SC_BASIC base = GameSettings var = pf.wait_for_pbs_path type = SLE_UINT8 -from = 100 +from = SLV_100 def = 30 min = 2 max = 255 @@ -1631,7 +1631,7 @@ cat = SC_EXPERT [SDT_BOOL] base = GameSettings var = pf.reserve_paths -from = 100 +from = SLV_100 def = false cat = SC_EXPERT @@ -1639,7 +1639,7 @@ cat = SC_EXPERT base = GameSettings var = pf.path_backoff_interval type = SLE_UINT8 -from = 100 +from = SLV_100 def = 20 min = 1 max = 255 @@ -1741,7 +1741,7 @@ cat = SC_EXPERT base = GameSettings var = pf.npf.npf_rail_pbs_cross_penalty type = SLE_UINT -from = 100 +from = SLV_100 def = 3 * NPF_TILE_LENGTH min = 0 max = 100000 @@ -1751,7 +1751,7 @@ cat = SC_EXPERT base = GameSettings var = pf.npf.npf_rail_pbs_signal_back_penalty type = SLE_UINT -from = 100 +from = SLV_100 def = 15 * NPF_TILE_LENGTH min = 0 max = 100000 @@ -1797,7 +1797,7 @@ cat = SC_EXPERT base = GameSettings var = pf.npf.npf_road_drive_through_penalty type = SLE_UINT -from = 47 +from = SLV_47 def = 8 * NPF_TILE_LENGTH min = 0 max = 100000 @@ -1807,7 +1807,7 @@ cat = SC_EXPERT base = GameSettings var = pf.npf.npf_road_dt_occupied_penalty type = SLE_UINT -from = 130 +from = SLV_130 def = 8 * NPF_TILE_LENGTH min = 0 max = 100000 @@ -1817,7 +1817,7 @@ cat = SC_EXPERT base = GameSettings var = pf.npf.npf_road_bay_occupied_penalty type = SLE_UINT -from = 130 +from = SLV_130 def = 15 * NPF_TILE_LENGTH min = 0 max = 100000 @@ -1827,7 +1827,7 @@ cat = SC_EXPERT base = GameSettings var = pf.npf.maximum_go_to_depot_penalty type = SLE_UINT -from = 131 +from = SLV_131 def = 20 * NPF_TILE_LENGTH min = 0 max = 1000000 @@ -1837,7 +1837,7 @@ cat = SC_EXPERT [SDT_BOOL] base = GameSettings var = pf.yapf.disable_node_optimization -from = 28 +from = SLV_28 def = false cat = SC_EXPERT @@ -1845,7 +1845,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.max_search_nodes type = SLE_UINT -from = 28 +from = SLV_28 def = 10000 min = 500 max = 1000000 @@ -1854,7 +1854,7 @@ cat = SC_EXPERT [SDT_BOOL] base = GameSettings var = pf.yapf.rail_firstred_twoway_eol -from = 28 +from = SLV_28 def = false cat = SC_EXPERT @@ -1862,7 +1862,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_firstred_penalty type = SLE_UINT -from = 28 +from = SLV_28 def = 10 * YAPF_TILE_LENGTH min = 0 max = 1000000 @@ -1872,7 +1872,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_firstred_exit_penalty type = SLE_UINT -from = 28 +from = SLV_28 def = 100 * YAPF_TILE_LENGTH min = 0 max = 1000000 @@ -1882,7 +1882,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_lastred_penalty type = SLE_UINT -from = 28 +from = SLV_28 def = 10 * YAPF_TILE_LENGTH min = 0 max = 1000000 @@ -1892,7 +1892,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_lastred_exit_penalty type = SLE_UINT -from = 28 +from = SLV_28 def = 100 * YAPF_TILE_LENGTH min = 0 max = 1000000 @@ -1902,7 +1902,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_station_penalty type = SLE_UINT -from = 28 +from = SLV_28 def = 10 * YAPF_TILE_LENGTH min = 0 max = 1000000 @@ -1912,7 +1912,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_slope_penalty type = SLE_UINT -from = 28 +from = SLV_28 def = 2 * YAPF_TILE_LENGTH min = 0 max = 1000000 @@ -1922,7 +1922,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_curve45_penalty type = SLE_UINT -from = 28 +from = SLV_28 def = 1 * YAPF_TILE_LENGTH min = 0 max = 1000000 @@ -1932,7 +1932,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_curve90_penalty type = SLE_UINT -from = 28 +from = SLV_28 def = 6 * YAPF_TILE_LENGTH min = 0 max = 1000000 @@ -1942,7 +1942,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_depot_reverse_penalty type = SLE_UINT -from = 28 +from = SLV_28 def = 50 * YAPF_TILE_LENGTH min = 0 max = 1000000 @@ -1952,7 +1952,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_crossing_penalty type = SLE_UINT -from = 28 +from = SLV_28 def = 3 * YAPF_TILE_LENGTH min = 0 max = 1000000 @@ -1962,7 +1962,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_look_ahead_max_signals type = SLE_UINT -from = 28 +from = SLV_28 def = 10 min = 1 max = 100 @@ -1972,7 +1972,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_look_ahead_signal_p0 type = SLE_INT -from = 28 +from = SLV_28 def = 500 min = -1000000 max = 1000000 @@ -1982,7 +1982,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_look_ahead_signal_p1 type = SLE_INT -from = 28 +from = SLV_28 def = -100 min = -1000000 max = 1000000 @@ -1992,7 +1992,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_look_ahead_signal_p2 type = SLE_INT -from = 28 +from = SLV_28 def = 5 min = -1000000 max = 1000000 @@ -2002,7 +2002,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_pbs_cross_penalty type = SLE_UINT -from = 100 +from = SLV_100 def = 3 * YAPF_TILE_LENGTH min = 0 max = 1000000 @@ -2012,7 +2012,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_pbs_station_penalty type = SLE_UINT -from = 100 +from = SLV_100 def = 8 * YAPF_TILE_LENGTH min = 0 max = 1000000 @@ -2022,7 +2022,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_pbs_signal_back_penalty type = SLE_UINT -from = 100 +from = SLV_100 def = 15 * YAPF_TILE_LENGTH min = 0 max = 1000000 @@ -2032,7 +2032,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_doubleslip_penalty type = SLE_UINT -from = 100 +from = SLV_100 def = 1 * YAPF_TILE_LENGTH min = 0 max = 1000000 @@ -2042,7 +2042,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_longer_platform_penalty type = SLE_UINT -from = 33 +from = SLV_33 def = 8 * YAPF_TILE_LENGTH min = 0 max = 20000 @@ -2052,7 +2052,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_longer_platform_per_tile_penalty type = SLE_UINT -from = 33 +from = SLV_33 def = 0 * YAPF_TILE_LENGTH min = 0 max = 20000 @@ -2062,7 +2062,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_shorter_platform_penalty type = SLE_UINT -from = 33 +from = SLV_33 def = 40 * YAPF_TILE_LENGTH min = 0 max = 20000 @@ -2072,7 +2072,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.rail_shorter_platform_per_tile_penalty type = SLE_UINT -from = 33 +from = SLV_33 def = 0 * YAPF_TILE_LENGTH min = 0 max = 20000 @@ -2082,7 +2082,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.road_slope_penalty type = SLE_UINT -from = 33 +from = SLV_33 def = 2 * YAPF_TILE_LENGTH min = 0 max = 1000000 @@ -2092,7 +2092,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.road_curve_penalty type = SLE_UINT -from = 33 +from = SLV_33 def = 1 * YAPF_TILE_LENGTH min = 0 max = 1000000 @@ -2102,7 +2102,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.road_crossing_penalty type = SLE_UINT -from = 33 +from = SLV_33 def = 3 * YAPF_TILE_LENGTH min = 0 max = 1000000 @@ -2112,7 +2112,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.road_stop_penalty type = SLE_UINT -from = 47 +from = SLV_47 def = 8 * YAPF_TILE_LENGTH min = 0 max = 1000000 @@ -2122,7 +2122,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.road_stop_occupied_penalty type = SLE_UINT -from = 130 +from = SLV_130 def = 8 * YAPF_TILE_LENGTH min = 0 max = 1000000 @@ -2132,7 +2132,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.road_stop_bay_occupied_penalty type = SLE_UINT -from = 130 +from = SLV_130 def = 15 * YAPF_TILE_LENGTH min = 0 max = 1000000 @@ -2142,7 +2142,7 @@ cat = SC_EXPERT base = GameSettings var = pf.yapf.maximum_go_to_depot_penalty type = SLE_UINT -from = 131 +from = SLV_131 def = 20 * YAPF_TILE_LENGTH min = 0 max = 1000000 @@ -2153,7 +2153,7 @@ cat = SC_EXPERT base = GameSettings var = game_creation.land_generator type = SLE_UINT8 -from = 30 +from = SLV_30 guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY def = 1 min = 0 @@ -2166,7 +2166,7 @@ strval = STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL base = GameSettings var = game_creation.oil_refinery_limit type = SLE_UINT8 -from = 30 +from = SLV_30 def = 32 min = 12 max = 48 @@ -2178,7 +2178,7 @@ strhelp = STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT base = GameSettings var = game_creation.tgen_smoothness type = SLE_UINT8 -from = 30 +from = SLV_30 guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY def = 1 min = TGEN_SMOOTHNESS_BEGIN @@ -2192,7 +2192,7 @@ cat = SC_BASIC base = GameSettings var = game_creation.variety type = SLE_UINT8 -from = 197 +from = SLV_197 guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY def = 0 min = 0 @@ -2205,7 +2205,7 @@ strval = STR_VARIETY_NONE base = GameSettings var = game_creation.generation_seed type = SLE_UINT32 -from = 30 +from = SLV_30 def = GENERATE_NEW_SEED min = 0 max = UINT32_MAX @@ -2215,7 +2215,7 @@ cat = SC_EXPERT base = GameSettings var = game_creation.tree_placer type = SLE_UINT8 -from = 30 +from = SLV_30 guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO def = 2 min = 0 @@ -2273,7 +2273,7 @@ cat = SC_BASIC [SDT_BOOL] base = GameSettings var = construction.freeform_edges -from = 111 +from = SLV_111 def = true proc = CheckFreeformEdges cat = SC_EXPERT @@ -2282,7 +2282,7 @@ cat = SC_EXPERT base = GameSettings var = game_creation.water_borders type = SLE_UINT8 -from = 111 +from = SLV_111 def = 15 min = 0 max = 16 @@ -2291,7 +2291,7 @@ max = 16 base = GameSettings var = game_creation.custom_town_number type = SLE_UINT16 -from = 115 +from = SLV_115 def = 1 min = 1 max = 5000 @@ -2301,7 +2301,7 @@ cat = SC_BASIC base = GameSettings var = construction.extra_tree_placement type = SLE_UINT8 -from = 132 +from = SLV_132 guiflags = SGF_MULTISTRING def = 2 min = 0 @@ -2315,7 +2315,7 @@ cat = SC_BASIC base = GameSettings var = game_creation.custom_sea_level type = SLE_UINT8 -from = 149 +from = SLV_149 def = 1 min = 2 max = 90 @@ -2325,7 +2325,7 @@ cat = SC_BASIC base = GameSettings var = game_creation.min_river_length type = SLE_UINT8 -from = 163 +from = SLV_163 def = 16 min = 2 max = 255 @@ -2335,7 +2335,7 @@ cat = SC_EXPERT base = GameSettings var = game_creation.river_route_random type = SLE_UINT8 -from = 163 +from = SLV_163 def = 5 min = 1 max = 255 @@ -2345,7 +2345,7 @@ cat = SC_EXPERT base = GameSettings var = game_creation.amount_of_rivers type = SLE_UINT8 -from = 163 +from = SLV_163 guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY def = 2 min = 0 @@ -2360,7 +2360,7 @@ strval = STR_RIVERS_NONE base = GameSettings var = locale.currency type = SLE_UINT8 -from = 97 +from = SLV_97 flags = SLF_NO_NETWORK_SYNC def = 0 max = CURRENCY_END - 1 @@ -2372,8 +2372,8 @@ cat = SC_BASIC name = ""units"" var = _old_units type = SLE_UINT8 -from = 97 -to = 184 +from = SLV_97 +to = SLV_184 flags = SLF_NOT_IN_CONFIG def = 1 max = 2 @@ -2385,7 +2385,7 @@ cat = SC_BASIC base = GameSettings var = locale.units_velocity type = SLE_UINT8 -from = 184 +from = SLV_184 flags = SLF_NO_NETWORK_SYNC guiflags = SGF_MULTISTRING def = 1 @@ -2401,7 +2401,7 @@ strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL base = GameSettings var = locale.units_power type = SLE_UINT8 -from = 184 +from = SLV_184 flags = SLF_NO_NETWORK_SYNC guiflags = SGF_MULTISTRING def = 1 @@ -2417,7 +2417,7 @@ strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL base = GameSettings var = locale.units_weight type = SLE_UINT8 -from = 184 +from = SLV_184 flags = SLF_NO_NETWORK_SYNC guiflags = SGF_MULTISTRING def = 1 @@ -2433,7 +2433,7 @@ strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_IMPERIAL base = GameSettings var = locale.units_volume type = SLE_UINT8 -from = 184 +from = SLV_184 flags = SLF_NO_NETWORK_SYNC guiflags = SGF_MULTISTRING def = 1 @@ -2449,7 +2449,7 @@ strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL base = GameSettings var = locale.units_force type = SLE_UINT8 -from = 184 +from = SLV_184 flags = SLF_NO_NETWORK_SYNC guiflags = SGF_MULTISTRING def = 2 @@ -2465,7 +2465,7 @@ strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_IMPERIAL base = GameSettings var = locale.units_height type = SLE_UINT8 -from = 184 +from = SLV_184 flags = SLF_NO_NETWORK_SYNC guiflags = SGF_MULTISTRING def = 1 @@ -2481,7 +2481,7 @@ strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL base = GameSettings var = locale.digit_group_separator type = SLE_STRQ -from = 118 +from = SLV_118 flags = SLF_NO_NETWORK_SYNC def = NULL proc = RedrawScreen @@ -2491,7 +2491,7 @@ cat = SC_BASIC base = GameSettings var = locale.digit_group_separator_currency type = SLE_STRQ -from = 118 +from = SLV_118 flags = SLF_NO_NETWORK_SYNC def = NULL proc = RedrawScreen @@ -2501,7 +2501,7 @@ cat = SC_BASIC base = GameSettings var = locale.digit_decimal_separator type = SLE_STRQ -from = 126 +from = SLV_126 flags = SLF_NO_NETWORK_SYNC def = NULL proc = RedrawScreen diff --git a/src/table/win32_settings.ini b/src/table/win32_settings.ini index 70c18a424e..bb241f50cd 100644 --- a/src/table/win32_settings.ini +++ b/src/table/win32_settings.ini @@ -30,7 +30,7 @@ strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT strval = STR_NULL proc = NULL load = NULL -from = 0 +from = SL_MIN_VERSION to = SL_MAX_VERSION cat = SC_ADVANCED diff --git a/src/table/window_settings.ini b/src/table/window_settings.ini index ad77423d9d..41223586a6 100644 --- a/src/table/window_settings.ini +++ b/src/table/window_settings.ini @@ -26,7 +26,7 @@ strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT strval = STR_NULL proc = NULL load = NULL -from = 0 +from = SL_MIN_VERSION to = SL_MAX_VERSION cat = SC_ADVANCED From 0f37a683a2360c7cb3d56fc828b96d7ee7e997f0 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 29 Jan 2019 00:56:28 +0000 Subject: [PATCH 294/622] Codechange: Additional type safety for saveload version variables. --- src/gamelog.cpp | 8 ++++---- src/openttd.cpp | 2 +- src/saveload/saveload.cpp | 20 ++++++++++---------- src/saveload/saveload.h | 6 +++--- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/gamelog.cpp b/src/gamelog.cpp index 621117f01b..05653910d4 100644 --- a/src/gamelog.cpp +++ b/src/gamelog.cpp @@ -23,13 +23,13 @@ #include "safeguards.h" -extern const uint16 SAVEGAME_VERSION; ///< current savegame version +extern const SaveLoadVersion SAVEGAME_VERSION; ///< current savegame version extern SavegameType _savegame_type; ///< type of savegame we are loading -extern uint32 _ttdp_version; ///< version of TTDP savegame (if applicable) -extern uint16 _sl_version; ///< the major savegame version identifier -extern byte _sl_minor_version; ///< the minor savegame version, DO NOT USE! +extern uint32 _ttdp_version; ///< version of TTDP savegame (if applicable) +extern SaveLoadVersion _sl_version; ///< the major savegame version identifier +extern byte _sl_minor_version; ///< the minor savegame version, DO NOT USE! static GamelogActionType _gamelog_action_type = GLAT_NONE; ///< action to record if anything changes diff --git a/src/openttd.cpp b/src/openttd.cpp index 585bcd4274..e876ffda77 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -223,7 +223,7 @@ static void ShowHelp() static void WriteSavegameInfo(const char *name) { - extern uint16 _sl_version; + extern SaveLoadVersion _sl_version; uint32 last_ottd_rev = 0; byte ever_modified = 0; bool removed_newgrfs = false; diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 1d5eff8ba8..9be9506b15 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -53,16 +53,16 @@ #include "../safeguards.h" -extern const uint16 SAVEGAME_VERSION = SL_MAX_VERSION - 1; ///< Current savegame version of OpenTTD. +extern const SaveLoadVersion SAVEGAME_VERSION = (SaveLoadVersion)(SL_MAX_VERSION - 1); ///< Current savegame version of OpenTTD. SavegameType _savegame_type; ///< type of savegame we are loading FileToSaveLoad _file_to_saveload; ///< File to save or load in the openttd loop. -uint32 _ttdp_version; ///< version of TTDP savegame (if applicable) -uint16 _sl_version; ///< the major savegame version identifier -byte _sl_minor_version; ///< the minor savegame version, DO NOT USE! -char _savegame_format[8]; ///< how to compress savegames -bool _do_autosave; ///< are we doing an autosave at the moment? +uint32 _ttdp_version; ///< version of TTDP savegame (if applicable) +SaveLoadVersion _sl_version; ///< the major savegame version identifier +byte _sl_minor_version; ///< the minor savegame version, DO NOT USE! +char _savegame_format[8]; ///< how to compress savegames +bool _do_autosave; ///< are we doing an autosave at the moment? /** What are we currently doing? */ enum SaveLoadAction { @@ -1915,7 +1915,7 @@ struct LZOLoadFilter : LoadFilter { /* Check if size is bad */ ((uint32*)out)[0] = size = tmp[1]; - if (_sl_version != 0) { + if (_sl_version != SL_MIN_VERSION) { tmp[0] = TO_BE32(tmp[0]); size = TO_BE32(size); } @@ -2562,7 +2562,7 @@ static SaveOrLoadResult DoLoad(LoadFilter *reader, bool load_check) if (fmt == endof(_saveload_formats)) { DEBUG(sl, 0, "Unknown savegame type, trying to load it as the buggy format"); _sl.lf->Reset(); - _sl_version = 0; + _sl_version = SL_MIN_VERSION; _sl_minor_version = 0; /* Try to find the LZO savegame format; it uses 'OTTD' as tag. */ @@ -2580,7 +2580,7 @@ static SaveOrLoadResult DoLoad(LoadFilter *reader, bool load_check) if (fmt->tag == hdr[0]) { /* check version number */ - _sl_version = TO_BE32(hdr[1]) >> 16; + _sl_version = (SaveLoadVersion)(TO_BE32(hdr[1]) >> 16); /* Minor is not used anymore from version 18.0, but it is still needed * in versions before that (4 cases) which can't be removed easy. * Therefore it is loaded, but never saved (or, it saves a 0 in any scenario). */ @@ -2721,7 +2721,7 @@ SaveOrLoadResult SaveOrLoad(const char *filename, SaveLoadOperation fop, Detaile ClearGRFConfigList(&_grfconfig); GamelogReset(); if (!LoadOldSaveGame(filename)) return SL_REINIT; - _sl_version = 0; + _sl_version = SL_MIN_VERSION; _sl_minor_version = 0; GamelogStartAction(GLAT_LOAD); if (!AfterLoadGame()) { diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index f14f884d5c..0f4b80274e 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -750,8 +750,8 @@ typedef SaveLoad SaveLoadGlobVarList; */ static inline bool IsSavegameVersionBefore(SaveLoadVersion major, byte minor = 0) { - extern uint16 _sl_version; - extern byte _sl_minor_version; + extern SaveLoadVersion _sl_version; + extern byte _sl_minor_version; return _sl_version < major || (minor > 0 && _sl_version == major && _sl_minor_version < minor); } @@ -764,7 +764,7 @@ static inline bool IsSavegameVersionBefore(SaveLoadVersion major, byte minor = 0 */ static inline bool SlIsObjectCurrentlyValid(SaveLoadVersion version_from, SaveLoadVersion version_to) { - extern const uint16 SAVEGAME_VERSION; + extern const SaveLoadVersion SAVEGAME_VERSION; if (SAVEGAME_VERSION < version_from || SAVEGAME_VERSION >= version_to) return false; return true; From e21ade375ee008fa32db8e154f14fb18b37e8dc7 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 1 Feb 2019 22:46:12 +0000 Subject: [PATCH 295/622] Codechange: Change from numeric to descriptive SLV enum labels for last entries. --- src/saveload/afterload.cpp | 6 ++--- src/saveload/company_sl.cpp | 6 ++--- src/saveload/economy_sl.cpp | 2 +- src/saveload/group_sl.cpp | 8 +++---- src/saveload/industry_sl.cpp | 44 ++++++++++++++++++------------------ src/saveload/saveload.h | 14 ++++++------ src/saveload/station_sl.cpp | 12 +++++----- src/saveload/storage_sl.cpp | 4 ++-- src/saveload/town_sl.cpp | 6 ++--- src/saveload/vehicle_sl.cpp | 6 ++--- 10 files changed, 54 insertions(+), 54 deletions(-) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 40343b188f..872458b251 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -1214,8 +1214,8 @@ bool AfterLoadGame() } } - /* Railtype moved from m3 to m8 in version SLV_200. */ - if (IsSavegameVersionBefore(SLV_200)) { + /* Railtype moved from m3 to m8 in version SLV_EXTEND_RAILTYPES. */ + if (IsSavegameVersionBefore(SLV_EXTEND_RAILTYPES)) { for (TileIndex t = 0; t < map_size; t++) { switch (GetTileType(t)) { case MP_RAILWAY: @@ -3015,7 +3015,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(SLV_202)) { + if (IsSavegameVersionBefore(SLV_EXTEND_INDUSTRY_CARGO_SLOTS)) { /* Make sure added industry cargo slots are cleared */ Industry *i; FOR_ALL_INDUSTRIES(i) { diff --git a/src/saveload/company_sl.cpp b/src/saveload/company_sl.cpp index 882a0265b1..a51f8081b0 100644 --- a/src/saveload/company_sl.cpp +++ b/src/saveload/company_sl.cpp @@ -350,8 +350,8 @@ static const SaveLoad _company_economy_desc[] = { SLE_CONDVAR(CompanyEconomyEntry, company_value, SLE_INT64, SLV_2, SL_MAX_VERSION), SLE_CONDVAR(CompanyEconomyEntry, delivered_cargo[NUM_CARGO - 1], SLE_INT32, SL_MIN_VERSION, SLV_170), - SLE_CONDARR(CompanyEconomyEntry, delivered_cargo, SLE_UINT32, 32, SLV_170, SLV_199), - SLE_CONDARR(CompanyEconomyEntry, delivered_cargo, SLE_UINT32, NUM_CARGO, SLV_199, SL_MAX_VERSION), + SLE_CONDARR(CompanyEconomyEntry, delivered_cargo, SLE_UINT32, 32, SLV_170, SLV_EXTEND_CARGOTYPES), + SLE_CONDARR(CompanyEconomyEntry, delivered_cargo, SLE_UINT32, NUM_CARGO, SLV_EXTEND_CARGOTYPES, SL_MAX_VERSION), SLE_VAR(CompanyEconomyEntry, performance_history, SLE_INT32), SLE_END() @@ -443,7 +443,7 @@ static void SaveLoad_PLYR_common(Company *c, CompanyProperties *cprops) /* Write each livery entry. */ int num_liveries = IsSavegameVersionBefore(SLV_63) ? LS_END - 4 : (IsSavegameVersionBefore(SLV_85) ? LS_END - 2: LS_END); - bool update_in_use = IsSavegameVersionBefore(SLV_205); + bool update_in_use = IsSavegameVersionBefore(SLV_GROUP_LIVERIES); if (c != NULL) { for (i = 0; i < num_liveries; i++) { SlObject(&c->livery[i], _company_livery_desc); diff --git a/src/saveload/economy_sl.cpp b/src/saveload/economy_sl.cpp index 10ca8ec444..0ddab13514 100644 --- a/src/saveload/economy_sl.cpp +++ b/src/saveload/economy_sl.cpp @@ -29,7 +29,7 @@ static void Load_PRIC() /** Cargo payment rates in pre 126 savegames */ static void Load_CAPR() { - uint num_cargo = IsSavegameVersionBefore(SLV_55) ? 12 : IsSavegameVersionBefore(SLV_199) ? 32 : NUM_CARGO; + uint num_cargo = IsSavegameVersionBefore(SLV_55) ? 12 : IsSavegameVersionBefore(SLV_EXTEND_CARGOTYPES) ? 32 : NUM_CARGO; int vt = IsSavegameVersionBefore(SLV_65) ? SLE_FILE_I32 : SLE_FILE_I64; SlArray(NULL, num_cargo, vt | SLE_VAR_NULL); SlArray(NULL, num_cargo, SLE_FILE_U16 | SLE_VAR_NULL); diff --git a/src/saveload/group_sl.cpp b/src/saveload/group_sl.cpp index 31788141d9..025c8ee3a7 100644 --- a/src/saveload/group_sl.cpp +++ b/src/saveload/group_sl.cpp @@ -24,9 +24,9 @@ static const SaveLoad _group_desc[] = { SLE_VAR(Group, owner, SLE_UINT8), SLE_VAR(Group, vehicle_type, SLE_UINT8), SLE_VAR(Group, replace_protection, SLE_BOOL), - SLE_CONDVAR(Group, livery.in_use, SLE_UINT8, SLV_205, SL_MAX_VERSION), - SLE_CONDVAR(Group, livery.colour1, SLE_UINT8, SLV_205, SL_MAX_VERSION), - SLE_CONDVAR(Group, livery.colour2, SLE_UINT8, SLV_205, SL_MAX_VERSION), + SLE_CONDVAR(Group, livery.in_use, SLE_UINT8, SLV_GROUP_LIVERIES, SL_MAX_VERSION), + SLE_CONDVAR(Group, livery.colour1, SLE_UINT8, SLV_GROUP_LIVERIES, SL_MAX_VERSION), + SLE_CONDVAR(Group, livery.colour2, SLE_UINT8, SLV_GROUP_LIVERIES, SL_MAX_VERSION), SLE_CONDVAR(Group, parent, SLE_UINT16, SLV_189, SL_MAX_VERSION), SLE_END() }; @@ -52,7 +52,7 @@ static void Load_GRPS() if (IsSavegameVersionBefore(SLV_189)) g->parent = INVALID_GROUP; - if (IsSavegameVersionBefore(SLV_205)) { + if (IsSavegameVersionBefore(SLV_GROUP_LIVERIES)) { const Company *c = Company::Get(g->owner); g->livery.colour1 = c->livery[LS_DEFAULT].colour1; g->livery.colour2 = c->livery[LS_DEFAULT].colour2; diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp index ba250603a0..9e81861c4e 100644 --- a/src/saveload/industry_sl.cpp +++ b/src/saveload/industry_sl.cpp @@ -26,28 +26,28 @@ static const SaveLoad _industry_desc[] = { SLE_VAR(Industry, location.h, SLE_FILE_U8 | SLE_VAR_U16), SLE_REF(Industry, town, REF_TOWN), SLE_CONDNULL( 2, SL_MIN_VERSION, SLV_61), ///< used to be industry's produced_cargo - SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 2, SLV_78, SLV_202), - SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 16, SLV_202, SL_MAX_VERSION), - SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 3, SLV_70, SLV_202), - SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 16, SLV_202, SL_MAX_VERSION), - SLE_CONDARR(Industry, produced_cargo_waiting, SLE_UINT16, 2, SL_MIN_VERSION, SLV_202), - SLE_CONDARR(Industry, produced_cargo_waiting, SLE_UINT16, 16, SLV_202, SL_MAX_VERSION), - SLE_CONDARR(Industry, production_rate, SLE_UINT8, 2, SL_MIN_VERSION, SLV_202), - SLE_CONDARR(Industry, production_rate, SLE_UINT8, 16, SLV_202, SL_MAX_VERSION), + SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 2, SLV_78, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION), + SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 3, SLV_70, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLE_CONDARR(Industry, incoming_cargo_waiting, SLE_UINT16, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION), + SLE_CONDARR(Industry, produced_cargo_waiting, SLE_UINT16, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLE_CONDARR(Industry, produced_cargo_waiting, SLE_UINT16, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION), + SLE_CONDARR(Industry, production_rate, SLE_UINT8, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLE_CONDARR(Industry, production_rate, SLE_UINT8, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION), SLE_CONDNULL( 3, SL_MIN_VERSION, SLV_61), ///< used to be industry's accepts_cargo - SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 3, SLV_78, SLV_202), - SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 16, SLV_202, SL_MAX_VERSION), + SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 3, SLV_78, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLE_CONDARR(Industry, accepts_cargo, SLE_UINT8, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION), SLE_VAR(Industry, prod_level, SLE_UINT8), - SLE_CONDARR(Industry, this_month_production, SLE_UINT16, 2, SL_MIN_VERSION, SLV_202), - SLE_CONDARR(Industry, this_month_production, SLE_UINT16, 16, SLV_202, SL_MAX_VERSION), - SLE_CONDARR(Industry, this_month_transported, SLE_UINT16, 2, SL_MIN_VERSION, SLV_202), - SLE_CONDARR(Industry, this_month_transported, SLE_UINT16, 16, SLV_202, SL_MAX_VERSION), - SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8, 2, SL_MIN_VERSION, SLV_202), - SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8, 16, SLV_202, SL_MAX_VERSION), - SLE_CONDARR(Industry, last_month_production, SLE_UINT16, 2, SL_MIN_VERSION, SLV_202), - SLE_CONDARR(Industry, last_month_production, SLE_UINT16, 16, SLV_202, SL_MAX_VERSION), - SLE_CONDARR(Industry, last_month_transported, SLE_UINT16, 2, SL_MIN_VERSION, SLV_202), - SLE_CONDARR(Industry, last_month_transported, SLE_UINT16, 16, SLV_202, SL_MAX_VERSION), + SLE_CONDARR(Industry, this_month_production, SLE_UINT16, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLE_CONDARR(Industry, this_month_production, SLE_UINT16, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION), + SLE_CONDARR(Industry, this_month_transported, SLE_UINT16, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLE_CONDARR(Industry, this_month_transported, SLE_UINT16, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION), + SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLE_CONDARR(Industry, last_month_pct_transported, SLE_UINT8, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION), + SLE_CONDARR(Industry, last_month_production, SLE_UINT16, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLE_CONDARR(Industry, last_month_production, SLE_UINT16, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION), + SLE_CONDARR(Industry, last_month_transported, SLE_UINT16, 2, SL_MIN_VERSION, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLE_CONDARR(Industry, last_month_transported, SLE_UINT16, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION), SLE_VAR(Industry, counter, SLE_UINT16), @@ -61,8 +61,8 @@ static const SaveLoad _industry_desc[] = { SLE_CONDVAR(Industry, founder, SLE_UINT8, SLV_70, SL_MAX_VERSION), SLE_CONDVAR(Industry, construction_date, SLE_INT32, SLV_70, SL_MAX_VERSION), SLE_CONDVAR(Industry, construction_type, SLE_UINT8, SLV_70, SL_MAX_VERSION), - SLE_CONDVAR(Industry, last_cargo_accepted_at[0], SLE_INT32, SLV_70, SLV_202), - SLE_CONDARR(Industry, last_cargo_accepted_at, SLE_INT32, 16, SLV_202, SL_MAX_VERSION), + SLE_CONDVAR(Industry, last_cargo_accepted_at[0], SLE_INT32, SLV_70, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), + SLE_CONDARR(Industry, last_cargo_accepted_at, SLE_INT32, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION), SLE_CONDVAR(Industry, selected_layout, SLE_UINT8, SLV_73, SL_MAX_VERSION), SLEG_CONDARR(_old_ind_persistent_storage.storage, SLE_UINT32, 16, SLV_76, SLV_161), diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 0f4b80274e..613c9ce514 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -280,15 +280,15 @@ enum SaveLoadVersion : uint16 { SLV_196, ///< 196 27778 v1.7 SLV_197, ///< 197 27978 v1.8 SLV_198, ///< 198 PR#6763 Switch town growth rate and counter to actual game ticks - SLV_199, ///< 199 PR#6802 Extend cargotypes to 64 + SLV_EXTEND_CARGOTYPES, ///< 199 PR#6802 Extend cargotypes to 64 - SLV_200, ///< 200 PR#6805 Extend railtypes to 64, adding uint16 to map array. - SLV_201, ///< 201 PR#6885 Extend NewGRF persistant storages. - SLV_202, ///< 202 PR#6867 Increase industry cargo slots to 16 in, 16 out - SLV_203, ///< 203 PR#7072 Add path cache for ships - SLV_204, ///< 204 PR#7065 Add extra rotation stages for ships. + SLV_EXTEND_RAILTYPES, ///< 200 PR#6805 Extend railtypes to 64, adding uint16 to map array. + SLV_EXTEND_PERSISTENT_STORAGE, ///< 201 PR#6885 Extend NewGRF persistant storages. + SLV_EXTEND_INDUSTRY_CARGO_SLOTS, ///< 202 PR#6867 Increase industry cargo slots to 16 in, 16 out + SLV_SHIP_PATH_CACHE, ///< 203 PR#7072 Add path cache for ships + SLV_SHIP_ROTATION, ///< 204 PR#7065 Add extra rotation stages for ships. - SLV_205, ///< 205 PR#7108 Livery storage change and group liveries. + SLV_GROUP_LIVERIES, ///< 205 PR#7108 Livery storage change and group liveries. SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index 57f3bfdfb1..995483ee6d 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -329,7 +329,7 @@ static void Load_STNS() _cargo_days = 0; _cargo_feeder_share = 0; - uint num_cargo = IsSavegameVersionBefore(SLV_55) ? 12 : IsSavegameVersionBefore(SLV_199) ? 32 : NUM_CARGO; + uint num_cargo = IsSavegameVersionBefore(SLV_55) ? 12 : IsSavegameVersionBefore(SLV_EXTEND_CARGOTYPES) ? 32 : NUM_CARGO; int index; while ((index = SlIterateArray()) != -1) { Station *st = new (index) Station(); @@ -377,7 +377,7 @@ static void Ptrs_STNS() /* Don't run when savegame version is higher than or equal to 123. */ if (!IsSavegameVersionBefore(SLV_123)) return; - uint num_cargo = IsSavegameVersionBefore(SLV_199) ? 32 : NUM_CARGO; + uint num_cargo = IsSavegameVersionBefore(SLV_EXTEND_CARGOTYPES) ? 32 : NUM_CARGO; Station *st; FOR_ALL_STATIONS(st) { if (!IsSavegameVersionBefore(SLV_68)) { @@ -441,8 +441,8 @@ static const SaveLoad _station_desc[] = { SLE_VAR(Station, last_vehicle_type, SLE_UINT8), SLE_VAR(Station, had_vehicle_of_type, SLE_UINT8), SLE_LST(Station, loading_vehicles, REF_VEHICLE), - SLE_CONDVAR(Station, always_accepted, SLE_FILE_U32 | SLE_VAR_U64, SLV_127, SLV_199), - SLE_CONDVAR(Station, always_accepted, SLE_UINT64, SLV_199, SL_MAX_VERSION), + SLE_CONDVAR(Station, always_accepted, SLE_FILE_U32 | SLE_VAR_U64, SLV_127, SLV_EXTEND_CARGOTYPES), + SLE_CONDVAR(Station, always_accepted, SLE_UINT64, SLV_EXTEND_CARGOTYPES, SL_MAX_VERSION), SLE_END() }; @@ -522,7 +522,7 @@ static void Load_STNN() { _num_flows = 0; - uint num_cargo = IsSavegameVersionBefore(SLV_199) ? 32 : NUM_CARGO; + uint num_cargo = IsSavegameVersionBefore(SLV_EXTEND_CARGOTYPES) ? 32 : NUM_CARGO; int index; while ((index = SlIterateArray()) != -1) { bool waypoint = (SlReadByte() & FACIL_WAYPOINT) != 0; @@ -583,7 +583,7 @@ static void Ptrs_STNN() /* Don't run when savegame version lower than 123. */ if (IsSavegameVersionBefore(SLV_123)) return; - uint num_cargo = IsSavegameVersionBefore(SLV_199) ? 32 : NUM_CARGO; + uint num_cargo = IsSavegameVersionBefore(SLV_EXTEND_CARGOTYPES) ? 32 : NUM_CARGO; Station *st; FOR_ALL_STATIONS(st) { for (CargoID i = 0; i < num_cargo; i++) { diff --git a/src/saveload/storage_sl.cpp b/src/saveload/storage_sl.cpp index 1c6c442485..1396d25aee 100644 --- a/src/saveload/storage_sl.cpp +++ b/src/saveload/storage_sl.cpp @@ -18,8 +18,8 @@ /** Description of the data to save and load in #PersistentStorage. */ static const SaveLoad _storage_desc[] = { SLE_CONDVAR(PersistentStorage, grfid, SLE_UINT32, SLV_6, SL_MAX_VERSION), - SLE_CONDARR(PersistentStorage, storage, SLE_UINT32, 16, SLV_161, SLV_201), - SLE_CONDARR(PersistentStorage, storage, SLE_UINT32, 256, SLV_201, SL_MAX_VERSION), + SLE_CONDARR(PersistentStorage, storage, SLE_UINT32, 16, SLV_161, SLV_EXTEND_PERSISTENT_STORAGE), + SLE_CONDARR(PersistentStorage, storage, SLE_UINT32, 256, SLV_EXTEND_PERSISTENT_STORAGE, SL_MAX_VERSION), SLE_END() }; diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp index cbfdad0bbe..a31c886ec2 100644 --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -192,8 +192,8 @@ static const SaveLoad _town_desc[] = { SLE_CONDLST(Town, psa_list, REF_STORAGE, SLV_161, SL_MAX_VERSION), - SLE_CONDVAR(Town, cargo_produced, SLE_FILE_U32 | SLE_VAR_U64, SLV_166, SLV_199), - SLE_CONDVAR(Town, cargo_produced, SLE_UINT64, SLV_199, SL_MAX_VERSION), + SLE_CONDVAR(Town, cargo_produced, SLE_FILE_U32 | SLE_VAR_U64, SLV_166, SLV_EXTEND_CARGOTYPES), + SLE_CONDVAR(Town, cargo_produced, SLE_UINT64, SLV_EXTEND_CARGOTYPES, SL_MAX_VERSION), /* reserve extra space in savegame here. (currently 30 bytes) */ SLE_CONDNULL(30, SLV_2, SL_MAX_VERSION), @@ -275,7 +275,7 @@ static void Save_TOWN() static void Load_TOWN() { int index; - uint num_cargo = IsSavegameVersionBefore(SLV_199) ? 32 : NUM_CARGO; + uint num_cargo = IsSavegameVersionBefore(SLV_EXTEND_CARGOTYPES) ? 32 : NUM_CARGO; while ((index = SlIterateArray()) != -1) { Town *t = new (index) Town(); diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index d97b01d5e2..11935fa403 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -369,7 +369,7 @@ void AfterLoadVehicles(bool part_of_load) } } - if (IsSavegameVersionBefore(SLV_204)) { + if (IsSavegameVersionBefore(SLV_SHIP_ROTATION)) { /* Ship rotation added */ Ship *s; FOR_ALL_SHIPS(s) { @@ -762,8 +762,8 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_WRITEBYTE(Vehicle, type), SLE_VEH_INCLUDE(), SLE_VAR(Ship, state, SLE_UINT8), - SLE_CONDDEQUE(Ship, path, SLE_UINT8, SLV_203, SL_MAX_VERSION), - SLE_CONDVAR(Ship, rotation, SLE_UINT8, SLV_204, SL_MAX_VERSION), + SLE_CONDDEQUE(Ship, path, SLE_UINT8, SLV_SHIP_PATH_CACHE, SL_MAX_VERSION), + SLE_CONDVAR(Ship, rotation, SLE_UINT8, SLV_SHIP_ROTATION, SL_MAX_VERSION), SLE_CONDNULL(16, SLV_2, SLV_144), // old reserved space From cca952d94bad599541c3f3ca417a72355262649a Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 3 Feb 2019 09:16:48 +0000 Subject: [PATCH 296/622] Fix #7108: Group livery command did not check its parameters properly. --- src/group_cmd.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp index 7795d917d7..29dc17edd9 100644 --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -658,6 +658,8 @@ CommandCost CmdSetGroupLivery(TileIndex tile, DoCommandFlag flags, uint32 p1, ui if (g == NULL || g->owner != _current_company) return CMD_ERROR; + if (colour >= COLOUR_END && colour != INVALID_COLOUR) return CMD_ERROR; + if (flags & DC_EXEC) { if (primary) { SB(g->livery.in_use, 0, 1, colour != INVALID_COLOUR); From 67c6f945fbfd4cb2c59788eea572a7954e4a2583 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sun, 27 Jan 2019 14:04:49 +0100 Subject: [PATCH 297/622] Change: Include the full raw git revision hash in rev.cpp --- Makefile.src.in | 5 +++-- findversion.sh | 15 ++++++++++----- projects/determineversion.vbs | 31 ++++++++++++++++++------------- src/rev.cpp.in | 5 +++++ src/rev.h | 1 + 5 files changed, 37 insertions(+), 20 deletions(-) diff --git a/Makefile.src.in b/Makefile.src.in index e5a032d961..9cf3557c56 100644 --- a/Makefile.src.in +++ b/Makefile.src.in @@ -90,6 +90,7 @@ MODIFIED := $(shell echo "$(VERSIONS)" | cut -f 3 -d' ') # Use autodetected revisions VERSION := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ') ISODATE := $(shell echo "$(VERSIONS)" | cut -f 2 -d' ') +GITHASH := $(shell echo "$(VERSIONS)" | cut -f 3 -d' ') # Make sure we have something in VERSION and ISODATE ifeq ($(VERSION),) @@ -275,10 +276,10 @@ endif # Revision files $(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in - $(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g" > $(SRC_DIR)/rev.cpp + $(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g" > $(SRC_DIR)/rev.cpp $(SRC_DIR)/os/windows/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/os/windows/ottdres.rc.in - $(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g" > $(SRC_DIR)/os/windows/ottdres.rc + $(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g" > $(SRC_DIR)/os/windows/ottdres.rc FORCE: diff --git a/findversion.sh b/findversion.sh index ead908167e..5d2322adb7 100755 --- a/findversion.sh +++ b/findversion.sh @@ -67,20 +67,25 @@ if [ -d "$ROOT_DIR/.git" ]; then MODIFIED="2" fi HASH=`LC_ALL=C git rev-parse --verify HEAD 2>/dev/null` - SHORTHASH=`echo ${HASH} | cut -c1-8` + SHORTHASH=`echo ${HASH} | cut -c1-10` ISODATE=`LC_ALL=C git show -s --pretty='format:%ci' HEAD | "$AWK" '{ gsub("-", "", $1); print $1 }'` BRANCH="`git symbolic-ref -q HEAD 2>/dev/null | sed 's@.*/@@'`" TAG="`git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed 's@\^0$@@'`" + if [ "$MODIFIED" -eq "0" ]; then + hashprefix="-g" + elif [ "$MODIFIED" -eq "2" ]; then + hashprefix="-m" + else + hashprefix="-u" + fi + if [ -n "$TAG" ]; then VERSION="${TAG}" else - VERSION="${ISODATE}-${BRANCH}-g${SHORTHASH}" + VERSION="${ISODATE}-${BRANCH}${hashprefix}${SHORTHASH}" fi - if [ "$MODIFIED" -eq "2" ]; then - VERSION="${VERSION}M" - fi elif [ -f "$ROOT_DIR/.ottdrev" ]; then # We are an exported source bundle cat $ROOT_DIR/.ottdrev diff --git a/projects/determineversion.vbs b/projects/determineversion.vbs index b1f7886a4f..1446b6e438 100755 --- a/projects/determineversion.vbs +++ b/projects/determineversion.vbs @@ -21,31 +21,34 @@ Sub FindReplaceInFile(filename, to_find, replacement) file.Close End Sub -Sub UpdateFile(modified, isodate, version, cur_date, filename) +Sub UpdateFile(modified, isodate, version, cur_date, githash, filename) FSO.CopyFile filename & ".in", filename FindReplaceInFile filename, "!!MODIFIED!!", modified FindReplaceInFile filename, "!!ISODATE!!", isodate FindReplaceInFile filename, "!!VERSION!!", version FindReplaceInFile filename, "!!DATE!!", cur_date + FindReplaceInFile filename, "!!GITHASH!!", githash End Sub Sub UpdateFiles(version) - Dim modified, isodate, cur_date + Dim modified, isodate, cur_date, githash cur_date = DatePart("D", Date) & "." & DatePart("M", Date) & "." & DatePart("YYYY", Date) If InStr(version, Chr(9)) Then isodate = Mid(version, InStr(version, Chr(9)) + 1) modified = Mid(isodate, InStr(isodate, Chr(9)) + 1) + githash = Mid(modified, InStr(modified, Chr(9)) + 1) isodate = Mid(isodate, 1, InStr(isodate, Chr(9)) - 1) modified = Mid(modified, 1, InStr(modified, Chr(9)) - 1) version = Mid(version, 1, InStr(version, Chr(9)) - 1) Else isodate = 0 modified = 1 + githash = "" End If - UpdateFile modified, isodate, version, cur_date, "../src/rev.cpp" - UpdateFile modified, isodate, version, cur_date, "../src/os/windows/ottdres.rc" + UpdateFile modified, isodate, version, cur_date, githash, "../src/rev.cpp" + UpdateFile modified, isodate, version, cur_date, githash, "../src/os/windows/ottdres.rc" End Sub Function DetermineVersion() @@ -71,7 +74,7 @@ Function DetermineVersion() If oExec.ExitCode = 0 Then hash = oExec.StdOut.ReadLine() - shorthash = Mid(hash, 1, 8) + shorthash = Mid(hash, 1, 10) ' Make sure index is in sync with disk Set oExec = WshShell.Exec("git update-index --refresh") If Err.Number = 0 Then @@ -133,17 +136,19 @@ Function DetermineVersion() ElseIf hash = "" Then DetermineVersion = "norev000" Else - Dim version - If tag <> "" Then - version = tag - ElseIf branch = "master" Then - version = isodate & "-g" & shorthash + Dim version, hashprefix + If modified = 0 Then + hashprefix = "-g" + ElseIf modified = 2 Then + hashprefix = "-m" Else - version = isodate & "-" & branch & "-g" & shorthash + hashprefix = "-u" End If - If modified = 2 Then - version = version & "M" + If tag <> "" Then + version = tag + Else + version = isodate & "-" & branch & hashprefix & shorthash End If DetermineVersion = version & Chr(9) & isodate & Chr(9) & modified & Chr(9) & hash diff --git a/src/rev.cpp.in b/src/rev.cpp.in index 0f4b2a6b57..3c68e18ebf 100644 --- a/src/rev.cpp.in +++ b/src/rev.cpp.in @@ -47,6 +47,11 @@ const char _openttd_revision[] = "!!VERSION!!"; */ const char _openttd_build_date[] = __DATE__ " " __TIME__; +/** + * The git revision hash of this version. + */ +const char _openttd_revision_hash[] = "!!GITHASH!!"; + /** * Let us know if current build was modified. This detection * works even in the case when revision string is overridden by diff --git a/src/rev.h b/src/rev.h index d31dbb51cc..55fc086992 100644 --- a/src/rev.h +++ b/src/rev.h @@ -14,6 +14,7 @@ extern const char _openttd_revision[]; extern const char _openttd_build_date[]; +extern const char _openttd_revision_hash[]; extern const byte _openttd_revision_modified; extern const uint32 _openttd_newgrf_version; From faee0737e05c0eb42461b51807083ebc7078d2f5 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sun, 27 Jan 2019 15:35:12 +0100 Subject: [PATCH 298/622] Codechange: Separate gamelog revision length from network revision length --- src/gamelog_internal.h | 5 +++-- src/saveload/gamelog_sl.cpp | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/gamelog_internal.h b/src/gamelog_internal.h index ad9921f4e8..261a8cd579 100644 --- a/src/gamelog_internal.h +++ b/src/gamelog_internal.h @@ -12,7 +12,6 @@ #ifndef GAMELOG_INTERNAL_H #define GAMELOG_INTERNAL_H -#include "network/core/config.h" #include "gamelog.h" /** Type of logged change */ @@ -33,6 +32,8 @@ enum GamelogChangeType { }; +static const uint GAMELOG_REVISION_LENGTH = 15; + /** Contains information about one logged change */ struct LoggedChange { GamelogChangeType ct; ///< Type of change logged in this struct @@ -42,7 +43,7 @@ struct LoggedChange { byte landscape; ///< landscape (temperate, arctic, ...) } mode; struct { - char text[NETWORK_REVISION_LENGTH]; ///< revision string, _openttd_revision + char text[GAMELOG_REVISION_LENGTH]; ///< revision string, _openttd_revision uint32 newgrf; ///< _openttd_newgrf_version uint16 slver; ///< _sl_version byte modified; ///< _openttd_revision_modified diff --git a/src/saveload/gamelog_sl.cpp b/src/saveload/gamelog_sl.cpp index f818eca137..d1c502d3be 100644 --- a/src/saveload/gamelog_sl.cpp +++ b/src/saveload/gamelog_sl.cpp @@ -29,7 +29,7 @@ static const SaveLoad _glog_mode_desc[] = { }; static const SaveLoad _glog_revision_desc[] = { - SLE_ARR(LoggedChange, revision.text, SLE_UINT8, NETWORK_REVISION_LENGTH), + SLE_ARR(LoggedChange, revision.text, SLE_UINT8, GAMELOG_REVISION_LENGTH), SLE_VAR(LoggedChange, revision.newgrf, SLE_UINT32), SLE_VAR(LoggedChange, revision.slver, SLE_UINT16), SLE_VAR(LoggedChange, revision.modified, SLE_UINT8), From cd757ecbf4e9f56ff57328436841e3d1abaa6360 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sun, 27 Jan 2019 16:13:28 +0100 Subject: [PATCH 299/622] Change: Use git revision hash (with "modified" prefix) for gamelog --- src/gamelog.cpp | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/gamelog.cpp b/src/gamelog.cpp index 05653910d4..29910d7ad1 100644 --- a/src/gamelog.cpp +++ b/src/gamelog.cpp @@ -39,6 +39,30 @@ uint _gamelog_actions = 0; ///< number of actions static LoggedAction *_current_action = NULL; ///< current action we are logging, NULL when there is no action active +/** + * Return the revision string for the current client version, for use in gamelog. + * The string returned is at most GAMELOG_REVISION_LENGTH bytes long. + */ +static const char * GetGamelogRevisionString() +{ + /* Allocate a buffer larger than necessary (git revision hash is 40 bytes) to avoid truncation later */ + static char gamelog_revision[48] = { 0 }; + assert_compile(lengthof(gamelog_revision) > GAMELOG_REVISION_LENGTH); + + if (IsReleasedVersion()) { + return _openttd_revision; + } else if (gamelog_revision[0] == 0) { + /* Prefix character indication revision status */ + assert(_openttd_revision_modified < 3); + gamelog_revision[0] = "gum"[_openttd_revision_modified]; // g = "git", u = "unknown", m = "modified" + /* Append the revision hash */ + strecat(gamelog_revision, _openttd_revision_hash, lastof(gamelog_revision)); + /* Truncate string to GAMELOG_REVISION_LENGTH bytes */ + gamelog_revision[GAMELOG_REVISION_LENGTH - 1] = '\0'; + } + return gamelog_revision; +} + /** * Stores information about new action, but doesn't allocate it * Action is allocated only when there is at least one change @@ -415,7 +439,7 @@ void GamelogRevision() if (lc == NULL) return; memset(lc->revision.text, 0, sizeof(lc->revision.text)); - strecpy(lc->revision.text, _openttd_revision, lastof(lc->revision.text)); + strecpy(lc->revision.text, GetGamelogRevisionString(), lastof(lc->revision.text)); lc->revision.slver = SAVEGAME_VERSION; lc->revision.modified = _openttd_revision_modified; lc->revision.newgrf = _openttd_newgrf_version; @@ -484,7 +508,7 @@ void GamelogTestRevision() } } - if (rev == NULL || strcmp(rev->revision.text, _openttd_revision) != 0 || + if (rev == NULL || strcmp(rev->revision.text, GetGamelogRevisionString()) != 0 || rev->revision.modified != _openttd_revision_modified || rev->revision.newgrf != _openttd_newgrf_version) { GamelogRevision(); From c511b0e8017173bd9fee65a34dda23fc15c6644b Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sun, 27 Jan 2019 15:40:29 +0100 Subject: [PATCH 300/622] Change: Increase NETWORK_REVISION_LENGTH to 33 bytes --- src/network/core/config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/core/config.h b/src/network/core/config.h index f5e73dd12d..f6823b1a93 100644 --- a/src/network/core/config.h +++ b/src/network/core/config.h @@ -43,7 +43,7 @@ static const uint NETWORK_NAME_LENGTH = 80; ///< The maxim static const uint NETWORK_COMPANY_NAME_LENGTH = 128; ///< The maximum length of the company name, in bytes including '\0' static const uint NETWORK_HOSTNAME_LENGTH = 80; ///< The maximum length of the host name, in bytes including '\0' static const uint NETWORK_SERVER_ID_LENGTH = 33; ///< The maximum length of the network id of the servers, in bytes including '\0' -static const uint NETWORK_REVISION_LENGTH = 15; ///< The maximum length of the revision, in bytes including '\0' +static const uint NETWORK_REVISION_LENGTH = 33; ///< The maximum length of the revision, in bytes including '\0' static const uint NETWORK_PASSWORD_LENGTH = 33; ///< The maximum length of the password, in bytes including '\0' (must be >= NETWORK_SERVER_ID_LENGTH) static const uint NETWORK_CLIENTS_LENGTH = 200; ///< The maximum length for the list of clients that controls a company, in bytes including '\0' static const uint NETWORK_CLIENT_NAME_LENGTH = 25; ///< The maximum length of a client's name, in bytes including '\0' From 5f8354f3585dd1fb852a097253e38cb91ee909d2 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Mon, 28 Jan 2019 11:10:59 +0100 Subject: [PATCH 301/622] Change: Make a shortened network revision string for use in server queries --- src/network/core/game.h | 2 ++ src/network/core/tcp_http.cpp | 6 ++-- src/network/network.cpp | 57 +++++++++++++++++++++++++++++++++- src/network/network_admin.cpp | 2 +- src/network/network_client.cpp | 2 +- src/network/network_udp.cpp | 2 +- 6 files changed, 64 insertions(+), 7 deletions(-) diff --git a/src/network/core/game.h b/src/network/core/game.h index c82c5aefed..a9da29118e 100644 --- a/src/network/core/game.h +++ b/src/network/core/game.h @@ -56,6 +56,8 @@ struct NetworkGameInfo : NetworkServerGameInfo { byte map_set; ///< Graphical set }; +const char * GetNetworkRevisionString(); + #endif /* ENABLE_NETWORK */ #endif /* NETWORK_CORE_GAME_H */ diff --git a/src/network/core/tcp_http.cpp b/src/network/core/tcp_http.cpp index a8bb64080a..aec198bf55 100644 --- a/src/network/core/tcp_http.cpp +++ b/src/network/core/tcp_http.cpp @@ -45,14 +45,14 @@ NetworkHTTPSocketHandler::NetworkHTTPSocketHandler(SOCKET s, redirect_depth(depth), sock(s) { - size_t bufferSize = strlen(url) + strlen(host) + strlen(_openttd_revision) + (data == NULL ? 0 : strlen(data)) + 128; + size_t bufferSize = strlen(url) + strlen(host) + strlen(GetNetworkRevisionString()) + (data == NULL ? 0 : strlen(data)) + 128; char *buffer = AllocaM(char, bufferSize); DEBUG(net, 7, "[tcp/http] requesting %s%s", host, url); if (data != NULL) { - seprintf(buffer, buffer + bufferSize - 1, "POST %s HTTP/1.0\r\nHost: %s\r\nUser-Agent: OpenTTD/%s\r\nContent-Type: text/plain\r\nContent-Length: %d\r\n\r\n%s\r\n", url, host, _openttd_revision, (int)strlen(data), data); + seprintf(buffer, buffer + bufferSize - 1, "POST %s HTTP/1.0\r\nHost: %s\r\nUser-Agent: OpenTTD/%s\r\nContent-Type: text/plain\r\nContent-Length: %d\r\n\r\n%s\r\n", url, host, GetNetworkRevisionString(), (int)strlen(data), data); } else { - seprintf(buffer, buffer + bufferSize - 1, "GET %s HTTP/1.0\r\nHost: %s\r\nUser-Agent: OpenTTD/%s\r\n\r\n", url, host, _openttd_revision); + seprintf(buffer, buffer + bufferSize - 1, "GET %s HTTP/1.0\r\nHost: %s\r\nUser-Agent: OpenTTD/%s\r\n\r\n", url, host, GetNetworkRevisionString()); } ssize_t size = strlen(buffer); diff --git a/src/network/network.cpp b/src/network/network.cpp index 0bbdd0d06c..d70d800f9c 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -1100,13 +1100,68 @@ void NetworkShutDown() NetworkCoreShutdown(); } +/** + * How many hex digits of the git hash to include in network revision string. + * Determined as 10 hex digits + 2 characters for -g/-u/-m prefix. + */ +static const uint GITHASH_SUFFIX_LEN = 12; + +/** + * Get the network version string used by this build. + * The returned string is guaranteed to be at most NETWORK_REVISON_LENGTH bytes. + */ +const char * GetNetworkRevisionString() +{ + /* This will be allocated on heap and never free'd, but only once so not a "real" leak. */ + static char *network_revision = nullptr; + + if (!network_revision) { + /* Start by taking a chance on the full revision string. */ + network_revision = stredup(_openttd_revision); + /* Ensure it's not longer than the packet buffer length. */ + if (strlen(network_revision) >= NETWORK_REVISION_LENGTH) network_revision[NETWORK_REVISION_LENGTH - 1] = '\0'; + + /* Release version names are not mangled further. */ + if (IsReleasedVersion()) return network_revision; + + /* Prepare a prefix of the git hash. + * Size is length + 1 for terminator, +2 for -g prefix. */ + assert(_openttd_revision_modified < 3); + char githash_suffix[GITHASH_SUFFIX_LEN + 1] = "-"; + githash_suffix[1] = "gum"[_openttd_revision_modified]; + for (uint i = 2; i < GITHASH_SUFFIX_LEN; i++) { + githash_suffix[i] = _openttd_revision_hash[i-2]; + } + + /* Where did the hash start in the original string? + * Overwrite from that position, unless that would go past end of packet buffer length. */ + ptrdiff_t hashofs = strrchr(_openttd_revision, '-') - _openttd_revision; + if (hashofs + strlen(githash_suffix) + 1 > NETWORK_REVISION_LENGTH) hashofs = strlen(network_revision) - strlen(githash_suffix); + /* Replace the git hash in revision string. */ + strecpy(network_revision + hashofs, githash_suffix, network_revision + NETWORK_REVISION_LENGTH); + assert(strlen(network_revision) < NETWORK_REVISION_LENGTH); // strlen does not include terminator, constant does, hence strictly less than + } + + return network_revision; +} + +static const char *ExtractNetworkRevisionHash(const char *revstr) +{ + return strrchr(revstr, '-'); +} + /** * Checks whether the given version string is compatible with our version. + * First tries to match the full string, if that fails, attempts to compare just git hashes. * @param other the version string to compare to */ bool IsNetworkCompatibleVersion(const char *other) { - return strncmp(_openttd_revision, other, NETWORK_REVISION_LENGTH - 1) == 0; + if (strncmp(GetNetworkRevisionString(), other, NETWORK_REVISION_LENGTH - 1) == 0) return true; + + const char *hash1 = ExtractNetworkRevisionHash(GetNetworkRevisionString()); + const char *hash2 = ExtractNetworkRevisionHash(other); + return hash1 && hash2 && (strncmp(hash1, hash2, GITHASH_SUFFIX_LEN) == 0); } #endif /* ENABLE_NETWORK */ diff --git a/src/network/network_admin.cpp b/src/network/network_admin.cpp index c1ca3d3bb2..f70f3d1a51 100644 --- a/src/network/network_admin.cpp +++ b/src/network/network_admin.cpp @@ -172,7 +172,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendWelcome() Packet *p = new Packet(ADMIN_PACKET_SERVER_WELCOME); p->Send_string(_settings_client.network.server_name); - p->Send_string(_openttd_revision); + p->Send_string(GetNetworkRevisionString()); p->Send_bool (_network_dedicated); p->Send_string(_network_game_info.map_name); diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 4b066681d7..9e34ebb099 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -343,7 +343,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendJoin() SetWindowDirty(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN); Packet *p = new Packet(PACKET_CLIENT_JOIN); - p->Send_string(_openttd_revision); + p->Send_string(GetNetworkRevisionString()); p->Send_uint32(_openttd_newgrf_version); p->Send_string(_settings_client.network.client_name); // Client name p->Send_uint8 (_network_join_as); // PlayAs diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp index 1dc6960659..3fd0dd4853 100644 --- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -191,7 +191,7 @@ void ServerNetworkUDPSocketHandler::Receive_CLIENT_FIND_SERVER(Packet *p, Networ strecpy(ngi.map_name, _network_game_info.map_name, lastof(ngi.map_name)); strecpy(ngi.server_name, _settings_client.network.server_name, lastof(ngi.server_name)); - strecpy(ngi.server_revision, _openttd_revision, lastof(ngi.server_revision)); + strecpy(ngi.server_revision, GetNetworkRevisionString(), lastof(ngi.server_revision)); Packet packet(PACKET_UDP_SERVER_RESPONSE); this->SendNetworkGameInfo(&packet, &ngi); From de5614a4d80802af77a7dc17001fee5733bed036 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 3 Feb 2019 19:45:41 +0100 Subject: [PATCH 302/622] Update: Translations from eints german: 64 changes by smwforever45 --- src/lang/german.txt | 73 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 64 insertions(+), 9 deletions(-) diff --git a/src/lang/german.txt b/src/lang/german.txt index 8857344f93..03d338b19d 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -675,10 +675,12 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Zufälli STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Zeige Musiktitelauswahl # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Musikprogramm - '{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Track Inhalt STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Programm - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Bereinigen +STR_PLAYLIST_CHANGE_SET :{BLACK}Set ändern STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Lösche laufendes Programm (nur für Benutzerdefiniert 1 und 2) STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Ein anderes Musik-Set auswählen) STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klicke auf einen Musiktitel, um ihn in das laufende Programm zu übernehmen (nur für Benutzerdefiniert 1 und 2) @@ -916,7 +918,7 @@ STR_GAME_OPTIONS_CURRENCY_NLG :Niederländisch STR_GAME_OPTIONS_CURRENCY_NOK :Norwegische Kronen (NOK) STR_GAME_OPTIONS_CURRENCY_PLN :Polnische Zloty (PLN) STR_GAME_OPTIONS_CURRENCY_RON :Rumänische Lei (RON) -STR_GAME_OPTIONS_CURRENCY_RUR :Russische Rubel (RUR) +STR_GAME_OPTIONS_CURRENCY_RUR :Alte Russische Rubel (RUR) STR_GAME_OPTIONS_CURRENCY_SIT :Slovenische Taler (SIT) STR_GAME_OPTIONS_CURRENCY_SEK :Schwedische Kronen (SEK) STR_GAME_OPTIONS_CURRENCY_TRY :Türkische Lire (TRY) @@ -929,6 +931,8 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Südafrikanisch STR_GAME_OPTIONS_CURRENCY_CUSTOM :Eigene... STR_GAME_OPTIONS_CURRENCY_GEL :Georgischer Lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Iranischer Rial (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Russische Rubel (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Mexikanischer Peso (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Fahrzeuge @@ -1225,7 +1229,7 @@ STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :am Anfang STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :in der Mitte STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :am Ende STR_CONFIG_SETTING_AUTOSCROLL :Spielfeld scrollen, wenn die Maus am Bildrand anstößt: {STRING} -STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Falls aktiv wird der Kartenausschnit scrollen, wenn die Maus nahe dem Fensterrand ist +STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Falls aktiv, wird der Kartenausschnitt scrollen, wenn die Maus nahe dem Fensterrand ist STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Ausgeschaltet STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Hauptfenster, nur bei Vollbildschirm STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Hauptfenster @@ -1258,6 +1262,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Diese Ei STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Instandhaltung der Infrastruktur: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Unterhaltskosten für Infrastruktur einschalten. Die Unterhaltskosten wachsen mit zunehmender Netzwerkgröße überproportional an, so dass sie größere Firmen stärker belasten als kleinere +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Firmenfarbe zu Spielbeginn: {STRING} STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Wähle die Firmenfarbe zu Spielbeginn STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Flughäfen veralten nie: {STRING} @@ -1343,6 +1348,10 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Farbe von Landf STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Grün STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Dunkelgrün STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Lila +STR_CONFIG_SETTING_SCROLLMODE :Verhalten beim Verschieben der Zusatzansicht: {STRING} +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Verhalten beim Verschieben der Karte +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Bewege Zusatzansicht mit rechter Maustaste, Mausposition fixiert +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Bewege die Karte mit rechter Maustaste, Mausposition fixiert STR_CONFIG_SETTING_SCROLLMODE_RMB :Bewege die Karte mit rechter Maustaste STR_CONFIG_SETTING_SCROLLMODE_LMB :Bewege die Karte mit linker Maustaste STR_CONFIG_SETTING_SMOOTH_SCROLLING :Weicher Bildlauf beim Springen zu einer Position: {STRING} @@ -2700,20 +2709,51 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Bildwiederholrate +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulationsrate: {STRING} +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Anzahl an simulierten Ticks pro Sekunde. +STR_FRAMERATE_RATE_BLITTER :{BLACK}Bildwiederholrate: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Anzahl an Einzelbildern, die pro Sekunde gerendert werden. +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Aktueller Geschwindigkeitsfaktor des Spiels: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Wie schnell das Spiel aktuell läuft, verglichen mit der erwarteten Geschwindigkeit bei normaler Simulationsrate. +STR_FRAMERATE_CURRENT :{WHITE}Momentan +STR_FRAMERATE_AVERAGE :{WHITE}Durchschnitt +STR_FRAMERATE_DATA_POINTS :{BLACK}Daten basierend auf {COMMA} Messungen STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} Bilder/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} Bilder/s STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} Bilder/s +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! -STR_FRAMERATE_GL_SHIPS :{BLACK} Ticks (Schiffe): -STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Ticks (Luftfahrzeuge) +STR_FRAMERATE_GAMELOOP :{BLACK}Spielschleifen insgesamt: +STR_FRAMERATE_GL_ECONOMY :{BLACK}Warenumschlag: +STR_FRAMERATE_GL_TRAINS :{BLACK}Ticks (Züge): +STR_FRAMERATE_GL_ROADVEHS :{BLACK}Ticks (Straßenfahrzeuge): +STR_FRAMERATE_GL_SHIPS :{BLACK}Ticks (Schiffe): +STR_FRAMERATE_GL_AIRCRAFT :{BLACK}Ticks (Luftfahrzeuge) +STR_FRAMERATE_GL_LANDSCAPE :{BLACK}Welt-Ticks: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK}Intervall für Neuberechnung des Verteilungsgraphen: STR_FRAMERATE_DRAWING :{BLACK}Grafik-Rendering: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK}Kartenansichten: +STR_FRAMERATE_VIDEO :{BLACK}Videoausgabe: +STR_FRAMERATE_SOUND :{BLACK}Sound-Abmischung: ############ End of leave-in-this-order ############ Leave those lines in this order!! -STR_FRAMETIME_CAPTION_GAMELOOP :Spiel-Schleife +STR_FRAMETIME_CAPTION_GAMELOOP :Spielschleife +STR_FRAMETIME_CAPTION_GL_ECONOMY :Warenumschlag STR_FRAMETIME_CAPTION_GL_TRAINS :Ticks (Züge) +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Ticks (Straßenfahrzeuge) +STR_FRAMETIME_CAPTION_GL_SHIPS :Ticks (Schiffe) +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Ticks (Luftfahrzeuge) +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Welt-Ticks +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Intervall für Neuberechnung des Verteilungsgraphen STR_FRAMETIME_CAPTION_DRAWING :Grafik-Rendering -STR_FRAMETIME_CAPTION_SOUND :Sound mixing +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Karten-Rendering +STR_FRAMETIME_CAPTION_VIDEO :Videoausgabe +STR_FRAMETIME_CAPTION_SOUND :Sound-Abmischung ############ End of leave-in-this-order @@ -2739,6 +2779,9 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Spielsta STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Keine Informationen verfügbar STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Suchtext: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Datei überschreiben +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Existierende Datei wirklich überschreiben? STR_SAVELOAD_OSKTITLE :{BLACK}Namen für den Spielstand eingeben @@ -2856,8 +2899,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Version: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. kompatible Version: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5-Summe: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Farbpalette: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Standard (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Standard (D) / 32 bpp STR_NEWGRF_SETTINGS_PALETTE_LEGACY :veraltet (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :veraltet (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameter: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Keine STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Keine Informationen verfügbar STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Zugehörige Datei nicht gefunden @@ -2930,7 +2977,7 @@ STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :der NewGRF-Date STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Zu viele NewGRFs geladen STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Das Laden von {1:STRING} als statisches NewGRF mit {STRING} könnte Synchronisationsfehler hervorrufen STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Unerwartetes Sprite (Sprite {3:NUM}) -STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Unbekannte Action 0 - Property {4:HEX} (Sprite {3:NUM}) +STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Unbekannte Action 0 - Eigenschaft {4:HEX} (Sprite {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :Zugriff auf eine ungültige ID (Sprite {3:NUM}) STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} enthält fehlerhafte Grafiken. Diese werden als Fragezeichen (?) dargestellt STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Enthält mehrere Action 8 - Einträge (Sprite {3:NUM}) @@ -2938,6 +2985,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Lesezugriff üb STR_NEWGRF_ERROR_GRM_FAILED :Die angeforderte GRF-Ressource ist nicht verfügbar (Sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} wurde von {STRING} deaktiviert STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ungültiges oder unbekanntes Format für Spritelayout (Sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Zu viele Elemente in Eigenschaftswert-Liste (Sprite {3:NUM}, Eigenschaft {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ungültige Produktions-Rückruffunktion (Sprite {3:NUM}, "{1:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Achtung! @@ -2967,13 +3016,13 @@ STR_BROKEN_VEHICLE_LENGTH :{WHITE}Zug '{VE STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' liefert falsche Informationen STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Fracht / Ersetzungs - Informationen für '{1:ENGINE}' weichen von der Einkaufsliste nach dem Kauf ab. Das kann dazu führen, dass das Umrüsten beim autmatisches Ersetzen oder Erneuern nicht korrekt funktioniert -STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' verursachte eine Endlosschleife im 'Production callback' +STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' verursachte eine Endlosschleife in Produktions-Rückruffunktion STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback {1:HEX} lieferte des unbekannte und ungülte Resultat {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : STR_NEWGRF_INVALID_CARGO_ABBREV :?? -STR_NEWGRF_INVALID_CARGO_QUANTITY :{COMMA} of +STR_NEWGRF_INVALID_CARGO_QUANTITY :{COMMA} Einheiten STR_NEWGRF_INVALID_ENGINE : STR_NEWGRF_INVALID_INDUSTRYTYPE : @@ -3010,6 +3059,7 @@ STR_TOWN_POPULATION :{BLACK}Weltbev STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Großstadt) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Einwohner: {ORANGE}{COMMA}{BLACK} Häuser: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} im letzten Monat: {ORANGE}{COMMA}{BLACK} Max.: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Für Stadtwachstum benötigte Fracht: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} benötigt STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} im Winter benötigt @@ -3316,6 +3366,7 @@ STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Diese I STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Benötigt: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produziert: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}benötigt: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} @@ -3373,6 +3424,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Gruppen STR_GROUP_CREATE_TOOLTIP :{BLACK}Neue Gruppe erstellen STR_GROUP_DELETE_TOOLTIP :{BLACK}Ausgewählte Gruppe löschen STR_GROUP_RENAME_TOOLTIP :{BLACK}Ausgewählte Gruppe umbenennen +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Farbschema der ausgewählten Gruppe ändern STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Diese Gruppe von der automatischen Fahrzeugersetzung ausschließen STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Gruppe löschen @@ -3416,6 +3468,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapazit STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Angetriebene Waggons: {GOLD}+{POWER}{BLACK} Gewicht: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Umrüstbar auf: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Alle Frachtarten +STR_PURCHASE_INFO_NONE :Keine STR_PURCHASE_INFO_ALL_BUT :Alles außer {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Max. Zugkraft: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Reichweite: {GOLD}{COMMA} Felder @@ -3815,6 +3868,7 @@ STR_ORDER_CONDITIONAL_AGE :Fahrzeugalter ( STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Wartung erforderlich STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Immer STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Verbleibende Laufzeit (Jahre) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maximale Zuverlässigkeit STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Die Bedingung, die erfüllt werden muss STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :gleich @@ -4247,6 +4301,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... dies STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... Straße verläuft in die falsche Richtung STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... Bus- und Lkw-Haltestellen können nicht um die Kurve gehen STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... Bus- und Lkw-Haltestellen können keine Abzweigung haben +STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}...Einbahnstraße oder blockierter Weg # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Dieser Teil der Station kann nicht entfernt werden... From bf5898018f3d11662290a2335f45459e12a1dc45 Mon Sep 17 00:00:00 2001 From: glx Date: Sun, 3 Feb 2019 19:42:53 +0100 Subject: [PATCH 303/622] Fix #7171: incorrect modified status with determineversion.vbs --- projects/determineversion.vbs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/determineversion.vbs b/projects/determineversion.vbs index 1446b6e438..98c704553c 100755 --- a/projects/determineversion.vbs +++ b/projects/determineversion.vbs @@ -56,7 +56,7 @@ Function DetermineVersion() Set WshShell = CreateObject("WScript.Shell") On Error Resume Next - modified = 1 + modified = 0 hash = "" shorthash = "" branch = "" @@ -135,6 +135,7 @@ Function DetermineVersion() rev_file.Close() ElseIf hash = "" Then DetermineVersion = "norev000" + modified = 1 Else Dim version, hashprefix If modified = 0 Then From 0749a291c4941511744e82a315ee34d96e053fb1 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 3 Feb 2019 19:15:10 +0000 Subject: [PATCH 304/622] Revert 479f13fc41, Fix #7133, Fix #7136: "Codechange: Tweak ViewportAddLandscape so it no more relies on "go down as fast as possible" tile height model (Patch by adf88, #6583)" This reverts commit 479f13fc4133f2970aff82d2d0fb9b3c0cb919da. --- src/viewport.cpp | 172 ++++++++++++++++++++++++----------------------- 1 file changed, 89 insertions(+), 83 deletions(-) diff --git a/src/viewport.cpp b/src/viewport.cpp index cb4307f0af..11a1587126 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1044,41 +1044,29 @@ draw_inner: } /** - * Returns the Y coordinate in the viewport coordinate system where a given - * tile should be painted. Can be used on virtual "black" tiles outside map. - * - * @param tile Tile coordinates of the tile. Map outside is allowed. - * @return Viewport Y coordinate where the northern corner of the tile is located (foundations not included). + * Returns the y coordinate in the viewport coordinate system where the given + * tile is painted. + * @param tile Any tile. + * @return The viewport y coordinate where the tile is painted. */ -static inline int GetTilePaintY(Point tile) +static int GetViewportY(Point tile) { - return RemapCoords(tile.x * TILE_SIZE, tile.y * TILE_SIZE, TilePixelHeightOutsideMap(tile.x, tile.y)).y; + /* Each increment in X or Y direction moves down by half a tile, i.e. TILE_PIXELS / 2. */ + return (tile.y * (int)(TILE_PIXELS / 2) + tile.x * (int)(TILE_PIXELS / 2) - TilePixelHeightOutsideMap(tile.x, tile.y)) << ZOOM_LVL_SHIFT; } /** - * Add sprites of a single tile to the viewport. - * - * @param[in,out] ti Filled-in tile information of the tile. On return, \a z coordinate will be updated and include foundations (if any). - * @param tile_type Type of the tile (#GetTileType) or #MP_VOID for virtual "black" tiles outside map. - */ -static void ViewportAddTile(TileInfo *ti, TileType tile_type) -{ - _vd.foundation_part = FOUNDATION_PART_NONE; - _vd.foundation[0] = -1; - _vd.foundation[1] = -1; - _vd.last_foundation_child[0] = NULL; - _vd.last_foundation_child[1] = NULL; - - _cur_ti = ti; - _tile_type_procs[tile_type]->draw_tile_proc(ti); -} - -/** - * Add the landscape to the viewport, i.e. all ground tiles, buildings and bridges. + * Add the landscape to the viewport, i.e. all ground tiles and buildings. */ static void ViewportAddLandscape() { - /* Transformations between tile x/y coordinates and 45-degree rotated rows/columns: + assert(_vd.dpi.top <= _vd.dpi.top + _vd.dpi.height); + assert(_vd.dpi.left <= _vd.dpi.left + _vd.dpi.width); + + Point upper_left = InverseRemapCoords(_vd.dpi.left, _vd.dpi.top); + Point upper_right = InverseRemapCoords(_vd.dpi.left + _vd.dpi.width, _vd.dpi.top); + + /* Transformations between tile coordinates and viewport rows/columns: See vp_column_row * column = y - x * row = x + y * x = (row - column) / 2 @@ -1086,46 +1074,38 @@ static void ViewportAddLandscape() * Note: (row, columns) pairs are only valid, if they are both even or both odd. */ - /* Rectangle to repaint. Includes oversize for tile sprites. - * There is no oversize for the bottom side of a tile so the first tile we draw - * in a column must have its northern corner above or at the 'top' bound. */ - const int left = _vd.dpi.left - MAX_TILE_EXTENT_RIGHT; // inclusive - const int top = _vd.dpi.top; // unlike to other bounds, this one is relative to S tile corner, not N, not inclusive (for S corner) - const int right = _vd.dpi.left + _vd.dpi.width + MAX_TILE_EXTENT_LEFT; // not inclusive - const int bottom_empty = _vd.dpi.top + _vd.dpi.height; // bottom bound for void tiles and tiles outside map, includes only clear ground sprites, not inclusive - const int bottom_building = bottom_empty + MAX_TILE_EXTENT_TOP; // bottom bound that accounts for buildings but does not include oversize for bridges, not inclusive - const int bottom = bottom_building + ZOOM_LVL_BASE * TILE_HEIGHT * _settings_game.construction.max_bridge_height; // bottom bound that includes entire oversize, also for bridges, not inclusive - assert(left < right && top < bottom); + /* Columns overlap with neighbouring columns by a half tile. + * - Left column is column of upper_left (rounded down) and one column to the left. + * - Right column is column of upper_right (rounded up) and one column to the right. + * Note: Integer-division does not round down for negative numbers, so ensure rounding with another increment/decrement. + */ + int left_column = (upper_left.y - upper_left.x) / (int)TILE_SIZE - 2; + int right_column = (upper_right.y - upper_right.x) / (int)TILE_SIZE + 2; - /* Base 2 logarithm of the distance between tile columns in a viewport. - * It will be used to achieve proper rounding easily. */ - assert_compile(TILE_SIZE == 1 << 4); - static const uint column_log = ZOOM_LVL_SHIFT + 4 + 1; // +1 comes from the factor 2 that is used when remapping to horizontal 'x' screen coordinate (see RemapCoords) + int potential_bridge_height = ZOOM_LVL_BASE * TILE_HEIGHT * _settings_game.construction.max_bridge_height; - /* Horizontal iteration bounds. */ - int first_col = left >> column_log; // inclusive, round toward -inf - int last_col = -(-right >> column_log); // not inclusive, round toward +inf + /* Rows overlap with neighbouring rows by a half tile. + * The first row that could possibly be visible is the row above upper_left (if it is at height 0). + * Due to integer-division not rounding down for negative numbers, we need another decrement. + */ + int row = (upper_left.x + upper_left.y) / (int)TILE_SIZE - 2; + bool last_row = false; + for (; !last_row; row++) { + last_row = true; + for (int column = left_column; column <= right_column; column++) { + /* Valid row/column? */ + if ((row + column) % 2 != 0) continue; - /* Use tile that intersects with the left-top corner of the repaint - * rectangle as an approximate start row of the iteration. */ - Point start = InverseRemapCoords2(left, top, false); // warning, it will take foundations into account, might return a tile that is further to S, but that's OK because coordinates will be moved toward N later if needed - int first_row = (start.x >> 4) + (start.y >> 4); - /* Combine with the first column, round toward S. */ - start.x = (first_row - first_col + 1) >> 1; - start.y = (first_row + first_col + 1) >> 1; + Point tilecoord; + tilecoord.x = (row - column) / 2; + tilecoord.y = (row + column) / 2; + assert(column == tilecoord.y - tilecoord.x); + assert(row == tilecoord.y + tilecoord.x); - /* Iterate over columns of tiles. */ - while (first_col++ < last_col) { - /* Fix column start tile - move it toward N until it reaches the 'top' bound. */ - int y_pos; - while (top < (y_pos = GetTilePaintY(start))) start.x--, start.y--; - - /* Iterate over tiles in a column. */ - Point tilecoord = start; - do { TileType tile_type; TileInfo tile_info; - tile_info.x = tilecoord.x * TILE_SIZE; // FIXME: tile_info should use signed integers + _cur_ti = &tile_info; + tile_info.x = tilecoord.x * TILE_SIZE; // FIXME tile_info should use signed integers tile_info.y = tilecoord.y * TILE_SIZE; if (IsInsideBS(tilecoord.x, 0, MapSizeX()) && IsInsideBS(tilecoord.y, 0, MapSizeY())) { @@ -1137,32 +1117,58 @@ static void ViewportAddLandscape() tile_type = MP_VOID; } - /* Check if tile is "visible". - * - * Until 'bottom_empty' every tile is visible, also "black" tiles outside map. - * Since 'bottom_empty' only tiles with a content might be visible. */ - if (y_pos >= bottom_empty) { - if (tilecoord.x >= (int)MapSizeX() || tilecoord.y >= (int)MapSizeY()) break; // No more non-void tiles in this column? Then stop. - if (tile_type == MP_VOID) continue; // No content on the tile? Then skip. - - /* Since 'bottom_building' only bridges might be visible. */ - if (y_pos >= bottom_building) { - if (!IsBridgeAbove(tile_info.tile)) continue; // no bridge above, skip - if (RemapCoords(tile_info.x, tile_info.y, GetBridgePixelHeight(GetNorthernBridgeEnd(tile_info.tile))).y >= bottom_building) continue; // bridge isn't high enough, skip - } + if (tile_type != MP_VOID) { + /* We are inside the map => paint landscape. */ + tile_info.tileh = GetTilePixelSlope(tile_info.tile, &tile_info.z); + } else { + /* We are outside the map => paint black. */ + tile_info.tileh = GetTilePixelSlopeOutsideMap(tilecoord.x, tilecoord.y, &tile_info.z); } - /* Paint the tile. */ - tile_info.tileh = (tile_info.tile != INVALID_TILE) ? GetTilePixelSlope(tile_info.tile, &tile_info.z) : GetTilePixelSlopeOutsideMap(tilecoord.x, tilecoord.y, &tile_info.z); - ViewportAddTile(&tile_info, tile_type); - if (tile_info.tile != INVALID_TILE) DrawTileSelection(&tile_info); + int viewport_y = GetViewportY(tilecoord); - /* Next tile. */ - } while (tilecoord.x++, tilecoord.y++, y_pos = GetTilePaintY(tilecoord), y_pos < bottom); + if (viewport_y + MAX_TILE_EXTENT_BOTTOM < _vd.dpi.top) { + /* The tile in this column is not visible yet. + * Tiles in other columns may be visible, but we need more rows in any case. */ + last_row = false; + continue; + } - /* Go one tile toward SE. This will advance us to next column. Bias toward S will - * take care of slopes too. Coordinates will be moved toward N later if needed. */ - start.y++; + int min_visible_height = viewport_y - (_vd.dpi.top + _vd.dpi.height); + bool tile_visible = min_visible_height <= 0; + + if (tile_type != MP_VOID) { + /* Is tile with buildings visible? */ + if (min_visible_height < MAX_TILE_EXTENT_TOP) tile_visible = true; + + if (IsBridgeAbove(tile_info.tile)) { + /* Is the bridge visible? */ + TileIndex bridge_tile = GetNorthernBridgeEnd(tile_info.tile); + int bridge_height = ZOOM_LVL_BASE * (GetBridgePixelHeight(bridge_tile) - TilePixelHeight(tile_info.tile)); + if (min_visible_height < bridge_height + MAX_TILE_EXTENT_TOP) tile_visible = true; + } + + /* Would a higher bridge on a more southern tile be visible? + * If yes, we need to loop over more rows to possibly find one. */ + if (min_visible_height < potential_bridge_height + MAX_TILE_EXTENT_TOP) last_row = false; + } else { + /* Outside of map. If we are on the north border of the map, there may still be a bridge visible, + * so we need to loop over more rows to possibly find one. */ + if ((tilecoord.x <= 0 || tilecoord.y <= 0) && min_visible_height < potential_bridge_height + MAX_TILE_EXTENT_TOP) last_row = false; + } + + if (tile_visible) { + last_row = false; + _vd.foundation_part = FOUNDATION_PART_NONE; + _vd.foundation[0] = -1; + _vd.foundation[1] = -1; + _vd.last_foundation_child[0] = NULL; + _vd.last_foundation_child[1] = NULL; + + _tile_type_procs[tile_type]->draw_tile_proc(&tile_info); + if (tile_info.tile != INVALID_TILE) DrawTileSelection(&tile_info); + } + } } } From 33e3f4916173b4129cbbe60f94dae659a70edb83 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 31 Jan 2019 20:54:15 +0000 Subject: [PATCH 305/622] Fix #7119: When rotating a ship, apply an additional offset to avoid movement glitch. --- src/saveload/vehicle_sl.cpp | 11 +++++++++++ src/ship.h | 2 ++ src/ship_cmd.cpp | 15 +++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 11935fa403..540416586c 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -375,6 +375,17 @@ void AfterLoadVehicles(bool part_of_load) FOR_ALL_SHIPS(s) { s->rotation = s->direction; } + } else { + Ship *s; + FOR_ALL_SHIPS(s) { + if (s->rotation == s->direction) continue; + /* In case we are rotating on gameload, set the rotation position to + * the current position, otherwise the applied workaround offset would + * be with respect to 0,0. + */ + s->rotation_x_pos = s->x_pos; + s->rotation_y_pos = s->y_pos; + } } } diff --git a/src/ship.h b/src/ship.h index adbc322282..60d4466d68 100644 --- a/src/ship.h +++ b/src/ship.h @@ -29,6 +29,8 @@ struct Ship FINAL : public SpecializedVehicle { TrackBitsByte state; ///< The "track" the ship is following. ShipPathCache path; ///< Cached path. DirectionByte rotation; ///< Visible direction. + int16 rotation_x_pos; ///< NOSAVE: X Position before rotation. + int16 rotation_y_pos; ///< NOSAVE: Y Position before rotation. /** We don't want GCC to zero our struct! It already is zeroed and has an index! */ Ship() : SpecializedVehicleBase() {} diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index b357fa64c2..5d3a28b1b4 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -319,6 +319,15 @@ void Ship::UpdateDeltaXY() this->x_extent = bb[1]; this->y_extent = bb[0]; this->z_extent = 6; + + if (this->direction != this->rotation) { + /* If we are rotating, then it is possible the ship was moved to its next position. In that + * case, because we are still showing the old direction, the ship will appear to glitch sideways + * slightly. We can work around this by applying an additional offset to make the ship appear + * where it was before it moved. */ + this->x_offs -= this->x_pos - this->rotation_x_pos; + this->y_offs -= this->y_pos - this->rotation_y_pos; + } } /** @@ -678,6 +687,9 @@ static void ShipController(Ship *v) /* Stop for rotation */ v->cur_speed = 0; v->direction = new_direction; + /* Remember our current location to avoid movement glitch */ + v->rotation_x_pos = v->x_pos; + v->rotation_y_pos = v->y_pos; break; } } @@ -704,6 +716,9 @@ getout: reverse_direction: v->direction = ReverseDir(v->direction); + /* Remember our current location to avoid movement glitch */ + v->rotation_x_pos = v->x_pos; + v->rotation_y_pos = v->y_pos; v->cur_speed = 0; v->path.clear(); goto getout; From 8e7fe3973fc03561c828594ce3293c1ab3c15481 Mon Sep 17 00:00:00 2001 From: glx Date: Mon, 4 Feb 2019 18:06:19 +0100 Subject: [PATCH 306/622] Add: CompanyCtrlAction enum for CMD_COMPANY_CTRL actions --- src/ai/ai_gui.cpp | 4 ++-- src/company_cmd.cpp | 15 ++++++--------- src/company_type.h | 9 +++++++++ src/console_cmds.cpp | 10 +++++----- src/economy.cpp | 2 +- src/network/network_client.cpp | 2 +- src/network/network_server.cpp | 4 ++-- src/toolbar_gui.cpp | 4 ++-- 8 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 69476856ce..dbdd772452 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -1282,8 +1282,8 @@ struct AIDebugWindow : public Window { case WID_AID_RELOAD_TOGGLE: if (ai_debug_company == OWNER_DEITY) break; /* First kill the company of the AI, then start a new one. This should start the current AI again */ - DoCommandP(0, 2 | ai_debug_company << 16, CRR_MANUAL, CMD_COMPANY_CTRL); - DoCommandP(0, 1 | ai_debug_company << 16, 0, CMD_COMPANY_CTRL); + DoCommandP(0, CCA_DELETE | ai_debug_company << 16, CRR_MANUAL, CMD_COMPANY_CTRL); + DoCommandP(0, CCA_NEW_AI | ai_debug_company << 16, 0, CMD_COMPANY_CTRL); break; case WID_AID_SETTINGS: diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index cf66690f41..392f97afb1 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -612,7 +612,7 @@ static bool MaybeStartNewCompany() if (n < (uint)_settings_game.difficulty.max_no_competitors) { /* Send a command to all clients to start up a new AI. * Works fine for Multiplayer and Singleplayer */ - return DoCommandP(0, 1 | INVALID_COMPANY << 16, 0, CMD_COMPANY_CTRL); + return DoCommandP(0, CCA_NEW_AI | INVALID_COMPANY << 16, 0, CMD_COMPANY_CTRL); } return false; @@ -810,10 +810,7 @@ void CompanyAdminRemove(CompanyID company_id, CompanyRemoveReason reason) * @param tile unused * @param flags operation to perform * @param p1 various functionality - * - bits 0..15: - * = 0 - create a new company - * = 1 - create a new AI company - * = 2 - delete a company + * - bits 0..15: CompanyCtrlAction * - bits 16..24: CompanyID * @param p2 ClientID * @param text unused @@ -827,8 +824,8 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 ClientID client_id = (ClientID)p2; #endif /* ENABLE_NETWORK */ - switch (GB(p1, 0, 16)) { - case 0: { // Create a new company + switch ((CompanyCtrlAction)GB(p1, 0, 16)) { + case CCA_NEW: { // Create a new company /* This command is only executed in a multiplayer game */ if (!_networking) return CMD_ERROR; @@ -878,7 +875,7 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 break; } - case 1: { // Make a new AI company + case CCA_NEW_AI: { // Make a new AI company if (!(flags & DC_EXEC)) return CommandCost(); if (company_id != INVALID_COMPANY && (company_id >= MAX_COMPANIES || Company::IsValidID(company_id))) return CMD_ERROR; @@ -889,7 +886,7 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 break; } - case 2: { // Delete a company + case CCA_DELETE: { // Delete a company CompanyRemoveReason reason = (CompanyRemoveReason)GB(p2, 0, 2); if (reason >= CRR_END) return CMD_ERROR; diff --git a/src/company_type.h b/src/company_type.h index 44a074e104..771e6d8b93 100644 --- a/src/company_type.h +++ b/src/company_type.h @@ -64,4 +64,13 @@ enum CompanyRemoveReason { CRR_END, ///< Sentinel for end. }; +/** The action to do with CMD_COMPANY_CTRL. */ +enum CompanyCtrlAction { + CCA_NEW, ///< Create a new company. + CCA_NEW_AI, ///< Create a new AI company. + CCA_DELETE, ///< Delete a company. + + CCA_END, ///< Sentinel for end. +}; + #endif /* COMPANY_TYPE_H */ diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index d9155a97db..732ace6a2b 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -836,7 +836,7 @@ DEF_CONSOLE_CMD(ConResetCompany) } /* It is safe to remove this company */ - DoCommandP(0, 2 | index << 16, CRR_MANUAL, CMD_COMPANY_CTRL); + DoCommandP(0, CCA_DELETE | index << 16, CRR_MANUAL, CMD_COMPANY_CTRL); IConsolePrint(CC_DEFAULT, "Company deleted."); return true; @@ -1178,7 +1178,7 @@ DEF_CONSOLE_CMD(ConStartAI) } /* Start a new AI company */ - DoCommandP(0, 1 | INVALID_COMPANY << 16, 0, CMD_COMPANY_CTRL); + DoCommandP(0, CCA_NEW_AI | INVALID_COMPANY << 16, 0, CMD_COMPANY_CTRL); return true; } @@ -1213,8 +1213,8 @@ DEF_CONSOLE_CMD(ConReloadAI) } /* First kill the company of the AI, then start a new one. This should start the current AI again */ - DoCommandP(0, 2 | company_id << 16, CRR_MANUAL, CMD_COMPANY_CTRL); - DoCommandP(0, 1 | company_id << 16, 0, CMD_COMPANY_CTRL); + DoCommandP(0, CCA_DELETE | company_id << 16, CRR_MANUAL, CMD_COMPANY_CTRL); + DoCommandP(0, CCA_NEW_AI | company_id << 16, 0, CMD_COMPANY_CTRL); IConsolePrint(CC_DEFAULT, "AI reloaded."); return true; @@ -1250,7 +1250,7 @@ DEF_CONSOLE_CMD(ConStopAI) } /* Now kill the company of the AI. */ - DoCommandP(0, 2 | company_id << 16, CRR_MANUAL, CMD_COMPANY_CTRL); + DoCommandP(0, CCA_DELETE | company_id << 16, CRR_MANUAL, CMD_COMPANY_CTRL); IConsolePrint(CC_DEFAULT, "AI stopped, company deleted."); return true; diff --git a/src/economy.cpp b/src/economy.cpp index 6d3c2a8b26..97283ae448 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -642,7 +642,7 @@ static void CompanyCheckBankrupt(Company *c) * that changing the current company is okay. In case of single * player we are sure (the above check) that we are not the local * company and thus we won't be moved. */ - if (!_networking || _network_server) DoCommandP(0, 2 | (c->index << 16), CRR_BANKRUPT, CMD_COMPANY_CTRL); + if (!_networking || _network_server) DoCommandP(0, CCA_DELETE | (c->index << 16), CRR_BANKRUPT, CMD_COMPANY_CTRL); break; } } diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 9e34ebb099..b4d0a06f7c 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -878,7 +878,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_MAP_DONE(Packet * the server will give us a client-id and let us in */ _network_join_status = NETWORK_JOIN_STATUS_REGISTERING; ShowJoinStatusWindow(); - NetworkSendCommand(0, 0, 0, CMD_COMPANY_CTRL, NULL, NULL, _local_company); + NetworkSendCommand(0, CCA_NEW, 0, CMD_COMPANY_CTRL, NULL, NULL, _local_company); } } else { /* take control over an existing company */ diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 275b6200eb..05fb27fc87 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -1675,7 +1675,7 @@ static void NetworkAutoCleanCompanies() /* Is the company empty for autoclean_unprotected-months, and is there no protection? */ if (_settings_client.network.autoclean_unprotected != 0 && _network_company_states[c->index].months_empty > _settings_client.network.autoclean_unprotected && StrEmpty(_network_company_states[c->index].password)) { /* Shut the company down */ - DoCommandP(0, 2 | c->index << 16, CRR_AUTOCLEAN, CMD_COMPANY_CTRL); + DoCommandP(0, CCA_DELETE | c->index << 16, CRR_AUTOCLEAN, CMD_COMPANY_CTRL); IConsolePrintF(CC_DEFAULT, "Auto-cleaned company #%d with no password", c->index + 1); } /* Is the company empty for autoclean_protected-months, and there is a protection? */ @@ -1689,7 +1689,7 @@ static void NetworkAutoCleanCompanies() /* Is the company empty for autoclean_novehicles-months, and has no vehicles? */ if (_settings_client.network.autoclean_novehicles != 0 && _network_company_states[c->index].months_empty > _settings_client.network.autoclean_novehicles && vehicles_in_company[c->index] == 0) { /* Shut the company down */ - DoCommandP(0, 2 | c->index << 16, CRR_AUTOCLEAN, CMD_COMPANY_CTRL); + DoCommandP(0, CCA_DELETE | c->index << 16, CRR_AUTOCLEAN, CMD_COMPANY_CTRL); IConsolePrintF(CC_DEFAULT, "Auto-cleaned company #%d with no vehicles", c->index + 1); } } else { diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index afa9adacbd..fbc099f8a3 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -618,9 +618,9 @@ static CallBackFunction MenuClickCompany(int index) case CTMN_NEW_COMPANY: if (_network_server) { - DoCommandP(0, 0, _network_own_client_id, CMD_COMPANY_CTRL); + DoCommandP(0, CCA_NEW, _network_own_client_id, CMD_COMPANY_CTRL); } else { - NetworkSendCommand(0, 0, 0, CMD_COMPANY_CTRL, NULL, NULL, _local_company); + NetworkSendCommand(0, CCA_NEW, 0, CMD_COMPANY_CTRL, NULL, NULL, _local_company); } return CBF_NONE; From 0b10678050c82604214136343673a5290f986cdb Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 19 May 2018 21:50:03 +0100 Subject: [PATCH 307/622] Change: Make ships stop in locks to move up/down instead of following the slope. --- src/saveload/afterload.cpp | 37 ++++++++++++++++++++++++++ src/saveload/saveload.h | 1 + src/ship_cmd.cpp | 53 +++++++++++++++++++++++++++++++++++++- 3 files changed, 90 insertions(+), 1 deletion(-) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 872458b251..d0b4723c6e 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -55,6 +55,7 @@ #include "../order_backup.h" #include "../error.h" #include "../disaster_vehicle.h" +#include "../ship.h" #include "saveload_internal.h" @@ -3045,6 +3046,42 @@ bool AfterLoadGame() } } + if (IsSavegameVersionBefore(SLV_SHIPS_STOP_IN_LOCKS)) { + /* Move ships from lock slope to upper or lower position. */ + Ship *s; + FOR_ALL_SHIPS(s) { + /* Suitable tile? */ + if (!IsTileType(s->tile, MP_WATER) || !IsLock(s->tile) || GetLockPart(s->tile) != LOCK_PART_MIDDLE) continue; + + /* We don't need to adjust position when at the tile centre */ + int x = s->x_pos & 0xF; + int y = s->y_pos & 0xF; + if (x == 8 && y == 8) continue; + + /* Test if ship is on the second half of the tile */ + bool second_half; + DiagDirection shipdiagdir = DirToDiagDir(s->direction); + switch (shipdiagdir) { + default: NOT_REACHED(); + case DIAGDIR_NE: second_half = x < 8; break; + case DIAGDIR_NW: second_half = y < 8; break; + case DIAGDIR_SW: second_half = x > 8; break; + case DIAGDIR_SE: second_half = y > 8; break; + } + + DiagDirection slopediagdir = GetInclinedSlopeDirection(GetTileSlope(s->tile)); + + /* Heading up slope == passed half way */ + if ((shipdiagdir == slopediagdir) == second_half) { + /* On top half of lock */ + s->z_pos = GetTileMaxZ(s->tile) * (int)TILE_HEIGHT; + } else { + /* On lower half of lock */ + s->z_pos = GetTileZ(s->tile) * (int)TILE_HEIGHT; + } + } + } + /* Station acceptance is some kind of cache */ if (IsSavegameVersionBefore(SLV_127)) { Station *st; diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 613c9ce514..5c84abc21b 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -289,6 +289,7 @@ enum SaveLoadVersion : uint16 { SLV_SHIP_ROTATION, ///< 204 PR#7065 Add extra rotation stages for ships. SLV_GROUP_LIVERIES, ///< 205 PR#7108 Livery storage change and group liveries. + SLV_SHIPS_STOP_IN_LOCKS, ///< 206 PR#7150 Ship/lock movement changes. SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 5d3a28b1b4..23786c17d1 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -550,6 +550,56 @@ static const byte _ship_subcoord[4][6][3] = { } }; +/** + * Test if a ship is in the centre of a lock and should move up or down. + * @param v Ship being tested. + * @return 0 if ship is not moving in lock, or -1 to move down, 1 to move up. + */ +static int ShipTestUpDownOnLock(const Ship *v) +{ + /* Suitable tile? */ + if (!IsTileType(v->tile, MP_WATER) || !IsLock(v->tile) || GetLockPart(v->tile) != LOCK_PART_MIDDLE) return 0; + + /* Must be at the centre of the lock */ + if ((v->x_pos & 0xF) != 8 || (v->y_pos & 0xF) != 8) return 0; + + DiagDirection diagdir = GetInclinedSlopeDirection(GetTileSlope(v->tile)); + assert(IsValidDiagDirection(diagdir)); + + if (DirToDiagDir(v->direction) == diagdir) { + /* Move up */ + return (v->z_pos < GetTileMaxZ(v->tile) * (int)TILE_HEIGHT) ? 1 : 0; + } else { + /* Move down */ + return (v->z_pos > GetTileZ(v->tile) * (int)TILE_HEIGHT) ? -1 : 0; + } +} + +/** + * Test and move a ship up or down in a lock. + * @param v Ship to move. + * @return true iff ship is moving up or down in a lock. + */ +static bool ShipMoveUpDownOnLock(Ship *v) +{ + /* Moving up/down through lock */ + int dz = ShipTestUpDownOnLock(v); + if (dz == 0) return false; + + if (v->cur_speed != 0) { + v->cur_speed = 0; + SetWindowWidgetDirty(WC_VEHICLE_VIEW, v->index, WID_VV_START_STOP); + } + + if ((v->tick_counter & 7) == 0) { + v->z_pos += dz; + v->UpdatePosition(); + v->UpdateViewport(true, true); + } + + return true; +} + static void ShipController(Ship *v) { uint32 r; @@ -583,6 +633,8 @@ static void ShipController(Ship *v) return; } + if (ShipMoveUpDownOnLock(v)) return; + if (!ShipAccelerate(v)) return; GetNewVehiclePosResult gp = GetNewVehiclePos(v); @@ -707,7 +759,6 @@ static void ShipController(Ship *v) /* update image of ship, as well as delta XY */ v->x_pos = gp.x; v->y_pos = gp.y; - v->z_pos = GetSlopePixelZ(gp.x, gp.y); getout: v->UpdatePosition(); From 64878320ccac0854b0712730e5f9dedcf0bb591d Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 3 Feb 2019 23:50:50 +0000 Subject: [PATCH 308/622] Fix #6803: CargoMonitorID bit packing updated to handle 64 cargo types. This requires a saveload bump to change the bitpacking on loading older saves. --- src/cargomonitor.h | 11 ++++++++--- src/saveload/cargomonitor_sl.cpp | 21 +++++++++++++++++++++ src/saveload/saveload.h | 1 + 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/cargomonitor.h b/src/cargomonitor.h index 061a1821a4..e74f717e05 100644 --- a/src/cargomonitor.h +++ b/src/cargomonitor.h @@ -45,11 +45,14 @@ enum CargoCompanyBits { CCB_IS_INDUSTRY_BIT = 16, ///< Bit indicating the town/industry number is an industry. CCB_IS_INDUSTRY_BIT_VALUE = 1ul << CCB_IS_INDUSTRY_BIT, ///< Value of the #CCB_IS_INDUSTRY_BIT bit. CCB_CARGO_TYPE_START = 19, ///< Start bit of the cargo type field. - CCB_CARGO_TYPE_LENGTH = 5, ///< Number of bits of the cargo type field. - CCB_COMPANY_START = 24, ///< Start bit of the company field. - CCB_COMPANY_LENGTH = 8, ///< Number of bits of the company field. + CCB_CARGO_TYPE_LENGTH = 6, ///< Number of bits of the cargo type field. + CCB_COMPANY_START = 25, ///< Start bit of the company field. + CCB_COMPANY_LENGTH = 4, ///< Number of bits of the company field. }; +assert_compile(NUM_CARGO <= (1 << CCB_CARGO_TYPE_LENGTH)); +assert_compile(MAX_COMPANIES <= (1 << CCB_COMPANY_LENGTH)); + /** * Encode a cargo monitor for pickup or delivery at an industry. @@ -61,6 +64,7 @@ enum CargoCompanyBits { static inline CargoMonitorID EncodeCargoIndustryMonitor(CompanyID company, CargoID ctype, IndustryID ind) { assert(ctype < (1 << CCB_CARGO_TYPE_LENGTH)); + assert(company < (1 << CCB_COMPANY_LENGTH)); uint32 ret = 0; SB(ret, CCB_TOWN_IND_NUMBER_START, CCB_TOWN_IND_NUMBER_LENGTH, ind); @@ -80,6 +84,7 @@ static inline CargoMonitorID EncodeCargoIndustryMonitor(CompanyID company, Cargo static inline CargoMonitorID EncodeCargoTownMonitor(CompanyID company, CargoID ctype, TownID town) { assert(ctype < (1 << CCB_CARGO_TYPE_LENGTH)); + assert(company < (1 << CCB_COMPANY_LENGTH)); uint32 ret = 0; SB(ret, CCB_TOWN_IND_NUMBER_START, CCB_TOWN_IND_NUMBER_LENGTH, town); diff --git a/src/saveload/cargomonitor_sl.cpp b/src/saveload/cargomonitor_sl.cpp index 98ad95f090..9a313970ff 100644 --- a/src/saveload/cargomonitor_sl.cpp +++ b/src/saveload/cargomonitor_sl.cpp @@ -29,6 +29,21 @@ static const SaveLoad _cargomonitor_pair_desc[] = { SLE_END() }; +static CargoMonitorID FixupCargoMonitor(CargoMonitorID number) +{ + /* Between SLV_EXTEND_CARGOTYPES and SLV_FIX_CARGO_MONITOR, the + * CargoMonitorID structure had insufficient packing for more + * than 32 cargo types. Here we have to shuffle bits to account + * for the change. + * Company moved from bits 24-31 to 25-28. + * Cargo type increased from bits 19-23 to 19-24. + */ + SB(number, 25, 4, GB(number, 24, 4)); + SB(number, 29, 3, 0); + ClrBit(number, 24); + return number; +} + /** Save the #_cargo_deliveries monitoring map. */ static void SaveDelivery() { @@ -52,12 +67,15 @@ static void SaveDelivery() static void LoadDelivery() { TempStorage storage; + bool fix = IsSavegameVersionBefore(SLV_FIX_CARGO_MONITOR); ClearCargoDeliveryMonitoring(); for (;;) { if (SlIterateArray() < 0) break; SlObject(&storage, _cargomonitor_pair_desc); + if (fix) storage.number = FixupCargoMonitor(storage.number); + std::pair p(storage.number, storage.amount); _cargo_deliveries.insert(p); } @@ -87,12 +105,15 @@ static void SavePickup() static void LoadPickup() { TempStorage storage; + bool fix = IsSavegameVersionBefore(SLV_FIX_CARGO_MONITOR); ClearCargoPickupMonitoring(); for (;;) { if (SlIterateArray() < 0) break; SlObject(&storage, _cargomonitor_pair_desc); + if (fix) storage.number = FixupCargoMonitor(storage.number); + std::pair p(storage.number, storage.amount); _cargo_pickups.insert(p); } diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 5c84abc21b..e5e2e1fa23 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -290,6 +290,7 @@ enum SaveLoadVersion : uint16 { SLV_GROUP_LIVERIES, ///< 205 PR#7108 Livery storage change and group liveries. SLV_SHIPS_STOP_IN_LOCKS, ///< 206 PR#7150 Ship/lock movement changes. + SLV_FIX_CARGO_MONITOR, ///< 207 PR#7175 Cargo monitor data packing fix to support 64 cargotypes. SL_MAX_VERSION, ///< Highest possible saveload version }; From b1e40b6b569c206d672f677a8e474a73ecf2173b Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 4 Feb 2019 17:19:21 +0000 Subject: [PATCH 309/622] Fix #7151: Hang when concurrently starting AIs in multiplayer, or with shift pressed. --- src/command.cpp | 6 +++--- src/command_type.h | 1 + src/company_cmd.cpp | 4 ++++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/command.cpp b/src/command.cpp index 70258aaa1d..72b3f4302e 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -283,7 +283,7 @@ static const Command _command_proc_table[] = { DEF_CMD(CmdTurnRoadVeh, 0, CMDT_VEHICLE_MANAGEMENT ), // CMD_TURN_ROADVEH - DEF_CMD(CmdPause, CMD_SERVER, CMDT_SERVER_SETTING ), // CMD_PAUSE + DEF_CMD(CmdPause, CMD_SERVER | CMD_NO_EST, CMDT_SERVER_SETTING ), // CMD_PAUSE DEF_CMD(CmdBuyShareInCompany, 0, CMDT_MONEY_MANAGEMENT ), // CMD_BUY_SHARE_IN_COMPANY DEF_CMD(CmdSellShareInCompany, 0, CMDT_MONEY_MANAGEMENT ), // CMD_SELL_SHARE_IN_COMPANY @@ -307,7 +307,7 @@ static const Command _command_proc_table[] = { DEF_CMD(CmdChangeBankBalance, CMD_DEITY, CMDT_MONEY_MANAGEMENT ), // CMD_CHANGE_BANK_BALANCE DEF_CMD(CmdBuildCanal, CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_CANAL DEF_CMD(CmdCreateSubsidy, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_CREATE_SUBSIDY - DEF_CMD(CmdCompanyCtrl, CMD_SPECTATOR | CMD_CLIENT_ID, CMDT_SERVER_SETTING ), // CMD_COMPANY_CTRL + DEF_CMD(CmdCompanyCtrl, CMD_SPECTATOR | CMD_CLIENT_ID | CMD_NO_EST, CMDT_SERVER_SETTING ), // CMD_COMPANY_CTRL DEF_CMD(CmdCustomNewsItem, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_CUSTOM_NEWS_ITEM DEF_CMD(CmdCreateGoal, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_CREATE_GOAL DEF_CMD(CmdRemoveGoal, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_REMOVE_GOAL @@ -558,7 +558,7 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallbac bool estimate_only = _shift_pressed && IsLocalCompany() && !_generating_world && !(cmd & CMD_NETWORK_COMMAND) && - (cmd & CMD_ID_MASK) != CMD_PAUSE; + !(GetCommandFlags(cmd) & CMD_NO_EST); /* We're only sending the command, so don't do * fancy things for 'success'. */ diff --git a/src/command_type.h b/src/command_type.h index e7512f11d2..650a8987a4 100644 --- a/src/command_type.h +++ b/src/command_type.h @@ -395,6 +395,7 @@ enum CommandFlags { CMD_CLIENT_ID = 0x080, ///< set p2 with the ClientID of the sending client. CMD_DEITY = 0x100, ///< the command may be executed by COMPANY_DEITY CMD_STR_CTRL = 0x200, ///< the command's string may contain control strings + CMD_NO_EST = 0x400, ///< the command is never estimated. }; DECLARE_ENUM_AS_BIT_SET(CommandFlags) diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 392f97afb1..77572c5af3 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -724,6 +724,10 @@ void OnTick_Companies() /* Allow multiple AIs to possibly start in the same tick. */ do { if (!MaybeStartNewCompany()) break; + + /* In networking mode, we can only send a command to start but it + * didn't execute yet, so we cannot loop. */ + if (_networking) break; } while (AI::GetStartNextTime() == 0); } From 9fc430a920ea5f42e56e459bec48e3ce8f13e3c0 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 5 Feb 2019 19:45:42 +0100 Subject: [PATCH 310/622] Update: Translations from eints swedish: 21 changes by Joel_A german: 1 change by smwforever45 --- src/lang/german.txt | 2 +- src/lang/swedish.txt | 38 +++++++++++++++++++++----------------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/lang/german.txt b/src/lang/german.txt index 03d338b19d..bf6ce994f8 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -3890,7 +3890,7 @@ STR_ORDERS_DELETE_BUTTON :{BLACK}Löschen STR_ORDERS_DELETE_TOOLTIP :{BLACK}Lösche den markierten Auftrag STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Lösche alle Aufträge STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}Gemeinsame Aufträge aufheben -STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Gemeinsame Auftragliste aufheben. Ctrl+Klick löscht zusätzlich die Auftragliste für dieses Fahrzeug +STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Gemeinsame Auftragliste aufheben. Strg+Klick löscht zusätzlich die Auftragliste für dieses Fahrzeug STR_ORDERS_GO_TO_BUTTON :{BLACK}Fahre zu STR_ORDER_GO_TO_NEAREST_DEPOT :Nächstes Depot diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 2a29a33b77..2917b027c3 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -190,6 +190,7 @@ STR_COLOUR_BROWN :Brun STR_COLOUR_GREY :Grå STR_COLOUR_WHITE :Vit STR_COLOUR_RANDOM :Slumpmässig +STR_COLOUR_DEFAULT :Standard # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -1779,7 +1780,7 @@ STR_INTRO_TRANSLATION :{BLACK}Den här # Quit window STR_QUIT_CAPTION :{WHITE}Avsluta -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Vill du verkligen avsluta OpenTTD och återvända till {STRING}? +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Är du säker på att du vill avsluta OpenTTD och återvända till {STRING}? STR_QUIT_YES :{BLACK}Ja STR_QUIT_NO :{BLACK}Nej @@ -1797,8 +1798,8 @@ STR_OSNAME_SUNOS :SunOS # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Avsluta spelet -STR_ABANDON_GAME_QUERY :{YELLOW}Vill du verkligen avsluta spelet? -STR_ABANDON_SCENARIO_QUERY :{YELLOW}Vill du verkligen avsluta detta scenario? +STR_ABANDON_GAME_QUERY :{YELLOW}Är du säker på att du vill avsluta spelet? +STR_ABANDON_SCENARIO_QUERY :{YELLOW}Är du säker på att du vill avsluta detta scenario? # Cheat window STR_CHEATS :{WHITE}Fusk @@ -1985,9 +1986,9 @@ STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Välj ma STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} företag{P y ies} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Max antal företag: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Begränsa antalet företag på servern -STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} åskådare{P "" s} +STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} åskådare STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Max antal åskådare: -STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Begränsa antalet observatörer på servern +STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Begränsa antalet åskådare på servern STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Språk som talas: STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Andra spelare kommer vara medvetna vilket språk som talas på servern. @@ -2469,7 +2470,7 @@ STR_STATION_BUILD_AIRPORT_LAYOUT_NAME :{BLACK}Layout { STR_AIRPORT_SMALL :Liten flygplats STR_AIRPORT_CITY :Stad -STR_AIRPORT_METRO :Storstads-flygplats +STR_AIRPORT_METRO :Storstadsflygplats STR_AIRPORT_INTERNATIONAL :Internationell flygplats STR_AIRPORT_COMMUTER :Pendlare STR_AIRPORT_INTERCONTINENTAL :Interkontinental flygplats @@ -2778,6 +2779,8 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Ingen in STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} STR_SAVELOAD_FILTER_TITLE :{BLACK}Sökfilter: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Skriv över fil +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Är du säker på att du vill skriva över den existerande filen? STR_SAVELOAD_OSKTITLE :{BLACK}Mata in ett namn för detta sparade spel @@ -2954,7 +2957,7 @@ STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}X offset STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Välj objekt STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Välj ett objekt på bildskärmen -STR_SPRITE_ALIGNER_GOTO_CAPTION :{WHITE}Gå till objekt +STR_SPRITE_ALIGNER_GOTO_CAPTION :{WHITE}Gå till spriteobjekt # NewGRF (self) generated warnings/errors STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING} @@ -2975,7 +2978,7 @@ STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Att ladda {1:ST STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Oväntat spriteobjekt (spriteobjekt {3:NUM}) STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Okänd Action 0-egenskap {4:HEX} (spriteobjekt {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :Försök att använda ett ogiltligt ID (spriteobjekt {3:NUM}) -STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} innehåller en skadad bild. Alla korrupta bilder kommer att visas som ett rött frågetecken (?) +STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} innehåller ett skadat spriteobjekt. Alla korrupta spriteobjekt kommer att visas som röda frågetecken (?) STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Innehåller flera Action 8 (spriteobjekt {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Läste förbi slutet av pseudo-spriteobjekt (spriteobjekt {3:NUM}) STR_NEWGRF_ERROR_GRM_FAILED :Efterfrågade GRF-resurser är inte tillgängliga (spriteobjekt {3:NUM}) @@ -2986,7 +2989,7 @@ STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ogiltig industr # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Varning! -STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Du håller på att göra ändringar i ett pågående spel; detta kan krascha OpenTTD eller orsaka andra fel i spelet.{}Skicka inte bugrapporter om sådana fel.{}Är du helt säker på detta? +STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Du håller på att göra ändringar i ett pågående spel; detta kan krascha OpenTTD eller orsaka andra fel i spelet. Skicka inte buggrapporter om sådana fel.{}Är du helt säker på detta? STR_NEWGRF_DUPLICATE_GRFID :{WHITE}Kan inte lägga till filen: redan existerande GRF ID STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Matchande fil saknas (kompatibel GRF laddad) @@ -3314,7 +3317,7 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Visa det STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nytt ansikte STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Välj nytt ansikte på VD:n STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Färgschema -STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Byt färg på företaget +STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Byt företagets färgschema STR_COMPANY_VIEW_COMPANY_NAME_BUTTON :{BLACK}Företagsnamn STR_COMPANY_VIEW_COMPANY_NAME_TOOLTIP :{BLACK}Byt företagets namn STR_COMPANY_VIEW_PRESIDENT_NAME_BUTTON :{BLACK}Namn på VD @@ -3390,7 +3393,7 @@ STR_VEHICLE_LIST_AVAILABLE_SHIPS :Tillgängliga s STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Tillgängliga flyplan STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Se lista med tillgängliga motordesigner för denna fordonstyp -STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Behandlingslista +STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Hantera lista STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Skicka instruktioner till alla fordon på denna lista STR_VEHICLE_LIST_REPLACE_VEHICLES :Byt ut fordon STR_VEHICLE_LIST_SEND_FOR_SERVICING :Skicka på service @@ -3420,6 +3423,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupper STR_GROUP_CREATE_TOOLTIP :{BLACK}Klicka för att skapa en grupp STR_GROUP_DELETE_TOOLTIP :{BLACK}Ta bort vald grupp STR_GROUP_RENAME_TOOLTIP :{BLACK}Byt namn på vald grupp +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Byt färgschema på vald grupp STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klicka för att skydda denna grupp mot allmän autoreplace STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Ta bort grupp @@ -3441,7 +3445,7 @@ STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Nya elektriska STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Nytt monorailfordon STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Nytt maglevfordon -STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Nya Rälsfordon +STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Nya rälsfordon STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Nytt Vägfordon STR_BUY_VEHICLE_SHIP_CAPTION :Nytt skepp STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nytt flygplan @@ -3572,10 +3576,10 @@ STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centrera STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Centrera huvudvyn ovanför skeppdepån. Ctrl+klick öppnar en ny vy över skeppdepåns läge STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrera huvudvyn ovanför hangaren. Ctrl+klick öppnar en ny vy över hangarens läge -STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Ge en lista av alla tåg som har denna depå i dess körschema -STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Ge en lista av alla fordon som har denna depå i dess körschema -STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TOOLTIP :{BLACK}Ge en lista av alla fartyg som har denna depå i dess körschema -STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TOOLTIP :{BLACK}Ge en lista av alla flygplan som har denna flygplats-hangar i dess körschema +STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Visa en lista med alla tåg som har denna depå i sitt körschema +STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Visa en lista med alla vägfordon som har denna depå i sitt körschema +STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TOOLTIP :{BLACK}Visa en lista med alla fartyg som har denna depå i sitt körschema +STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TOOLTIP :{BLACK}Visa en lista med alla flygplan som har en hangar på denna flygplats i sitt körschema STR_DEPOT_MASS_STOP_DEPOT_TRAIN_TOOLTIP :{BLACK}Klicka för att stanna alla tåg i depån STR_DEPOT_MASS_STOP_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Klicka för att stanna alla fordon i depån @@ -3736,7 +3740,7 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Vikt: {L STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Vinst detta år: {LTBLUE}{CURRENCY_LONG} (förra året: {CURRENCY_LONG}) STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Tillförlitlighet: {LTBLUE}{COMMA}% {BLACK}Motorstopp sedan senaste servicen: {LTBLUE}{COMMA} -STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Bygt: {LTBLUE}{NUM}{BLACK} Värde: {LTBLUE}{CURRENCY_LONG} +STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Byggt: {LTBLUE}{NUM}{BLACK} Värde: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Kapacitet: {LTBLUE}Ingen{STRING} STR_VEHICLE_INFO_CAPACITY :{BLACK}Kapacitet: {LTBLUE}{CARGO_LONG}{3:STRING} STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Kapacitet: {LTBLUE}{CARGO_LONG}{3:STRING} (x{4:NUM}) From 4764d1c45e7d82bc35f6fcb25012f5cfe545ce6c Mon Sep 17 00:00:00 2001 From: PeterN Date: Tue, 5 Feb 2019 23:33:49 +0000 Subject: [PATCH 311/622] Doc #7181: AAT_STATION_AIRPLANE_LAND triggers only a single tile, not all airport tiles. (#7182) --- src/newgrf_animation_type.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/newgrf_animation_type.h b/src/newgrf_animation_type.h index 8eec6ada9c..d014bf3cde 100644 --- a/src/newgrf_animation_type.h +++ b/src/newgrf_animation_type.h @@ -51,7 +51,7 @@ enum AirpAnimationTrigger { AAT_STATION_NEW_CARGO, ///< Triggered when new cargo arrives at the station (for all tiles at the same time). AAT_STATION_CARGO_TAKEN, ///< Triggered when a cargo type is completely removed from the station (for all tiles at the same time). AAT_STATION_250_TICKS, ///< Triggered every 250 ticks (for all tiles at the same time). - AAT_STATION_AIRPLANE_LAND, ///< Triggered when an airplane (not a helicopter) touches down at the airport (for all tiles at the same time). + AAT_STATION_AIRPLANE_LAND, ///< Triggered when an airplane (not a helicopter) touches down at the airport (for single tile). }; /** Animation triggers for objects. */ From e3b440c9c50b39092a2f887dba9370b21369f2cb Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 5 Feb 2019 08:23:25 +0000 Subject: [PATCH 312/622] Add #5006: Flag to hide rail type from construction. --- src/rail.cpp | 14 ++++++++++++-- src/rail.h | 4 ++++ src/rail_cmd.cpp | 6 +++++- src/vehicle.cpp | 5 ++++- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/rail.cpp b/src/rail.cpp index 1664f78e9a..8bd7aa5181 100644 --- a/src/rail.cpp +++ b/src/rail.cpp @@ -180,14 +180,24 @@ RailType GetTileRailType(TileIndex tile) } /** - * Finds out if a company has a certain railtype available + * Finds out if a company has a certain buildable railtype available. * @param company the company in question * @param railtype requested RailType * @return true if company has requested RailType available */ bool HasRailtypeAvail(const CompanyID company, const RailType railtype) { - return HasBit(Company::Get(company)->avail_railtypes, railtype); + return !HasBit(_railtypes_hidden_mask, railtype) && HasBit(Company::Get(company)->avail_railtypes, railtype); +} + +/** + * Test if any buildable railtype is available for a company. + * @param company the company in question + * @return true if company has any RailTypes available + */ +bool HasAnyRailtypesAvail(const CompanyID company) +{ + return (Company::Get(company)->avail_railtypes & ~_railtypes_hidden_mask) != 0; } /** diff --git a/src/rail.h b/src/rail.h index b7258d3016..83d1d9b7af 100644 --- a/src/rail.h +++ b/src/rail.h @@ -26,10 +26,12 @@ enum RailTypeFlags { RTF_CATENARY = 0, ///< Bit number for drawing a catenary. RTF_NO_LEVEL_CROSSING = 1, ///< Bit number for disallowing level crossings. + RTF_HIDDEN = 2, ///< Bit number for hiding from selection. RTFB_NONE = 0, ///< All flags cleared. RTFB_CATENARY = 1 << RTF_CATENARY, ///< Value for drawing a catenary. RTFB_NO_LEVEL_CROSSING = 1 << RTF_NO_LEVEL_CROSSING, ///< Value for disallowing level crossings. + RTFB_HIDDEN = 1 << RTF_HIDDEN, ///< Value for hiding from selection. }; DECLARE_ENUM_AS_BIT_SET(RailTypeFlags) @@ -419,6 +421,7 @@ Foundation GetRailFoundation(Slope tileh, TrackBits bits); bool HasRailtypeAvail(const CompanyID company, const RailType railtype); +bool HasAnyRailtypesAvail(const CompanyID company); bool ValParamRailtype(const RailType rail); RailTypes AddDateIntroducedRailTypes(RailTypes current, Date date); @@ -434,6 +437,7 @@ RailType AllocateRailType(RailTypeLabel label); extern RailType _sorted_railtypes[RAILTYPE_END]; extern uint8 _sorted_railtypes_size; +extern RailTypes _railtypes_hidden_mask; /** * Loop header for iterating over railtypes, sorted by sortorder. diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index a0fd968cc6..f4b26c092e 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -46,6 +46,7 @@ typedef SmallVector TrainList; RailtypeInfo _railtypes[RAILTYPE_END]; RailType _sorted_railtypes[RAILTYPE_END]; uint8 _sorted_railtypes_size; +RailTypes _railtypes_hidden_mask; /** Enum holding the signal offset in the sprite sheet according to the side it is representing. */ enum SignalOffsets { @@ -78,6 +79,8 @@ void ResetRailTypes() RailTypeLabelList(), 0, 0, RAILTYPES_NONE, RAILTYPES_NONE, 0, {}, {} }; for (; i < lengthof(_railtypes); i++) _railtypes[i] = empty_railtype; + + _railtypes_hidden_mask = RAILTYPES_NONE; } void ResolveRailTypeGUISprites(RailtypeInfo *rti) @@ -140,11 +143,12 @@ void InitRailTypes() for (RailType rt = RAILTYPE_BEGIN; rt != RAILTYPE_END; rt++) { RailtypeInfo *rti = &_railtypes[rt]; ResolveRailTypeGUISprites(rti); + if (HasBit(rti->flags, RTF_HIDDEN)) SetBit(_railtypes_hidden_mask, rt); } _sorted_railtypes_size = 0; for (RailType rt = RAILTYPE_BEGIN; rt != RAILTYPE_END; rt++) { - if (_railtypes[rt].label != 0) { + if (_railtypes[rt].label != 0 && !HasBit(_railtypes_hidden_mask, rt)) { _sorted_railtypes[_sorted_railtypes_size++] = rt; } } diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 62d279db62..53220474e5 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1757,7 +1757,10 @@ bool CanBuildVehicleInfrastructure(VehicleType type) UnitID max; switch (type) { - case VEH_TRAIN: max = _settings_game.vehicle.max_trains; break; + case VEH_TRAIN: + if (!HasAnyRailtypesAvail(_local_company)) return false; + max = _settings_game.vehicle.max_trains; + break; case VEH_ROAD: max = _settings_game.vehicle.max_roadveh; break; case VEH_SHIP: max = _settings_game.vehicle.max_ships; break; case VEH_AIRCRAFT: max = _settings_game.vehicle.max_aircraft; break; From db2c0ccae08d830b654b4db93e554ca98e6003c5 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Wed, 6 Feb 2019 21:09:02 +0100 Subject: [PATCH 313/622] Fix fdc2e85: Double close of file handles When unpacking downloaded content, the downloaded .gz file was being opened with `fopen`, the OS file handle given to zlib, and then afterwards zlib told to close the file. But the `FILE *` object was never closed with `fclose`, meaning the stdio library would have a hanging file object, whose file handle was now invalid or referred to a different file. This caused asserts during shutdown with Microsoft's C library in debug mode. Fix this by properly duplicating the OS handle and `fclose`ing the `FILE *` object, before giving the handle to zlib. --- src/network/network_content.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index e998aaeaf1..551abb4420 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -404,10 +404,14 @@ static bool GunzipFile(const ContentInfo *ci) { #if defined(WITH_ZLIB) bool ret = true; + + /* Need to open the file with fopen() to support non-ASCII on Windows. */ FILE *ftmp = fopen(GetFullFilename(ci, true), "rb"); if (ftmp == NULL) return false; + /* Duplicate the handle, and close the FILE*, to avoid double-closing the handle later. */ + gzFile fin = gzdopen(dup(fileno(ftmp)), "rb"); + fclose(ftmp); - gzFile fin = gzdopen(fileno(ftmp), "rb"); FILE *fout = fopen(GetFullFilename(ci, false), "wb"); if (fin == NULL || fout == NULL) { @@ -444,14 +448,7 @@ static bool GunzipFile(const ContentInfo *ci) } } - if (fin != NULL) { - /* Closes ftmp too! */ - gzclose(fin); - } else if (ftmp != NULL) { - /* In case the gz stream was opened correctly this will - * be closed by gzclose. */ - fclose(ftmp); - } + if (fin != NULL) gzclose(fin); if (fout != NULL) fclose(fout); return ret; From bfdad9ad1b19dfd68c277641b406ebc98ee82af3 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 6 Feb 2019 19:55:48 +0000 Subject: [PATCH 314/622] Fix #7108: Missed generate_widget script run for livery changes. --- src/script/api/game/game_window.hpp.sq | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/script/api/game/game_window.hpp.sq b/src/script/api/game/game_window.hpp.sq index 9fc9526cc2..fc818a443a 100644 --- a/src/script/api/game/game_window.hpp.sq +++ b/src/script/api/game/game_window.hpp.sq @@ -307,10 +307,15 @@ void SQGSWindow_Register(Squirrel *engine) SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_CLASS_ROAD, "WID_SCL_CLASS_ROAD"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_CLASS_SHIP, "WID_SCL_CLASS_SHIP"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_CLASS_AIRCRAFT, "WID_SCL_CLASS_AIRCRAFT"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_GROUPS_RAIL, "WID_SCL_GROUPS_RAIL"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_GROUPS_ROAD, "WID_SCL_GROUPS_ROAD"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_GROUPS_SHIP, "WID_SCL_GROUPS_SHIP"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_GROUPS_AIRCRAFT, "WID_SCL_GROUPS_AIRCRAFT"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_SPACER_DROPDOWN, "WID_SCL_SPACER_DROPDOWN"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_PRI_COL_DROPDOWN, "WID_SCL_PRI_COL_DROPDOWN"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_SEC_COL_DROPDOWN, "WID_SCL_SEC_COL_DROPDOWN"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_MATRIX, "WID_SCL_MATRIX"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCL_MATRIX_SCROLLBAR, "WID_SCL_MATRIX_SCROLLBAR"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_CAPTION, "WID_SCMF_CAPTION"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_TOGGLE_LARGE_SMALL, "WID_SCMF_TOGGLE_LARGE_SMALL"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SCMF_SELECT_FACE, "WID_SCMF_SELECT_FACE"); @@ -563,6 +568,7 @@ void SQGSWindow_Register(Squirrel *engine) SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_CREATE_GROUP, "WID_GL_CREATE_GROUP"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_DELETE_GROUP, "WID_GL_DELETE_GROUP"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_RENAME_GROUP, "WID_GL_RENAME_GROUP"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_LIVERY_GROUP, "WID_GL_LIVERY_GROUP"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_REPLACE_PROTECTION, "WID_GL_REPLACE_PROTECTION"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_INFO, "WID_GL_INFO"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_H_BACKGROUND, "WID_H_BACKGROUND"); From 62d6cd75ba74569aa6016dd337579433d58a1cb4 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 7 Feb 2019 19:45:43 +0100 Subject: [PATCH 315/622] Update: Translations from eints korean: 6 changes by telk5093 polish: 18 changes by xaxa --- src/lang/korean.txt | 12 ++++++------ src/lang/polish.txt | 20 ++++++++++++++++++-- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 8305819cb6..d4bb70baa6 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1168,7 +1168,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_MAX_HEIGHTLEVEL :최대 지형 높이: {STRING} STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :지도에 생성되는 산이 가질 수 있는 최대 높이를 설정합니다. @@ -3454,8 +3454,8 @@ STR_BUY_VEHICLE_AIRCRAFT_CAPTION :새 항공기 STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}가격: {GOLD}{CURRENCY_LONG}{BLACK} 중량: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}속력: {GOLD}{VELOCITY}{BLACK} 힘: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}속력: {GOLD}{VELOCITY} -STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}바다에서의 속력: {GOLD}{VELOCITY} -STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}운하/강에서의 속력: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}바다에서 속력: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}운하/강에서 속력: {GOLD}{VELOCITY} STR_PURCHASE_INFO_RUNNINGCOST :{BLACK}유지비: {GOLD}{CURRENCY_LONG}/년 STR_PURCHASE_INFO_CAPACITY :{BLACK}수송량: {GOLD}{CARGO_LONG} {STRING} STR_PURCHASE_INFO_REFITTABLE :(개조 가능) @@ -3829,21 +3829,21 @@ STR_ORDER_GO_TO :완행 STR_ORDER_GO_NON_STOP_TO :직행 STR_ORDER_GO_VIA :완행 경유 STR_ORDER_GO_NON_STOP_VIA :직행 경유 -STR_ORDER_TOOLTIP_NON_STOP :{BLACK}선택한 목적지에서의 정차 방식을 변경합니다 +STR_ORDER_TOOLTIP_NON_STOP :{BLACK}선택한 목적지에서 화물을 정차할 방식을 변경합니다 STR_ORDER_TOGGLE_FULL_LOAD :{BLACK}아무 화물이나 가득 싣기 STR_ORDER_DROP_LOAD_IF_POSSIBLE :가능한 것만 적재 STR_ORDER_DROP_FULL_LOAD_ALL :모든 화물을 가득 실음 STR_ORDER_DROP_FULL_LOAD_ANY :아무 화물이나 가득 싣기 STR_ORDER_DROP_NO_LOADING :싣지 않기 -STR_ORDER_TOOLTIP_FULL_LOAD :{BLACK}선택한 목적지에서의 화물 적재 방식을 변경합니다 +STR_ORDER_TOOLTIP_FULL_LOAD :{BLACK}선택한 목적지에서 화물을 적재할 방식을 변경합니다 STR_ORDER_TOGGLE_UNLOAD :{BLACK}모든 화물 하차 STR_ORDER_DROP_UNLOAD_IF_ACCEPTED :화물을 받는경우 하차 STR_ORDER_DROP_UNLOAD :모든 화물 하차 STR_ORDER_DROP_TRANSFER :환승 STR_ORDER_DROP_NO_UNLOADING :화물을 하차시키지 않음 -STR_ORDER_TOOLTIP_UNLOAD :{BLACK}선택한 목적지에서의 화물 하차 방식을 변경합니다 +STR_ORDER_TOOLTIP_UNLOAD :{BLACK}선택한 목적지에서 화물을 하차할 방식을 변경합니다 STR_ORDER_REFIT :{BLACK}개조 STR_ORDER_REFIT_TOOLTIP :{BLACK}이 경로에서 열차를 어떤 화물을 받을 수 있게 개조할 것인지 선택하십시오. CTRL+클릭하면 개조 설정을 해제합니다. diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 039ba954f3..881494d78e 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -569,6 +569,7 @@ STR_COLOUR_BROWN :Brązowy STR_COLOUR_GREY :Szary STR_COLOUR_WHITE :Biały STR_COLOUR_RANDOM :Losowy +STR_COLOUR_DEFAULT :Domyślny # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -1725,6 +1726,8 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :zielony STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :ciemnozielony STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :fioletowy STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Zachowanie podczas przeciągania mapy +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Przeciągnij okno podglądu prawym przyciskiem myszy, pozycja myszy zablokowana +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Przeciągnij mapę prawym przyciskiem myszy, pozycja myszy zablokowana STR_CONFIG_SETTING_SCROLLMODE_RMB :Przeciągnij mapę prawym przyciskiem myszy STR_CONFIG_SETTING_SCROLLMODE_LMB :Przeciągnij mapę lewym przyciskiem myszy STR_CONFIG_SETTING_SMOOTH_SCROLLING :Wygładź przesuwanie widoku: {STRING} @@ -2195,7 +2198,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Zmiana o STR_CHEAT_SETUP_PROD :{LTBLUE}Pozwól modyfikować wielkość produkcji przedsiębiorstw: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nowy schemat kolorów +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Schemat kolorów STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Pokaż ogólne schematy koloru STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Pokaż schematy koloru pociągów @@ -2756,7 +2759,7 @@ STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Sygnaliz STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Jednokierunkowy sygnalizator trasy (elektryczny){}Sygnalizator trasy umożliwiający wejście więcej niż jednemu pociagowi do bloku sygnalizatorów, o ile pociąg może zarezerwować trasę do bezpiecznego punktu zatrzymania. Sygnalizatory jednokierunkowe nie mogą być mijane w przeciwnym kierunku STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Zamiana sygnałów{}Jeżeli włączone, kliknięcie na istniejący sygnał spowoduje zamianę go na wybrany typ i wariant. CTRL+klik przełącza istniejący wariant. Shift+klik pokazuje szacowany koszt zamiany STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Gęstość sygnałów przy przeciąganiu -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Zmniejsz gęstość sygnałów przy przeciąganiu +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Zmniejsz odległość między sygnałami przy przeciąganiu STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Zwiększ gęstość sygnałów przy przeciąganiu # Bridge selection window @@ -3086,6 +3089,7 @@ STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Liczba r STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Jak szybko gra obecnie działa, w porównaniu do oczekiwanej prędkości przy normalnym tempie symulacji. STR_FRAMERATE_CURRENT :{WHITE}Obecny STR_FRAMERATE_AVERAGE :{WHITE}Średnia +STR_FRAMERATE_DATA_POINTS :{BLACK}Dane oparte na {COMMA} pomiarach STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms @@ -3095,13 +3099,18 @@ STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} sek. ############ Leave those lines in this order!! +STR_FRAMERATE_GL_ECONOMY :{BLACK} Obsługa ładunku: STR_FRAMERATE_GL_LINKGRAPH :{WHITE} Opóźnienie wykresu połączeń: STR_FRAMERATE_DRAWING :{BLACK}Renderowanie grafiki: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Okna podgląu świata: STR_FRAMERATE_VIDEO :{WHITE}Wyjście video: STR_FRAMERATE_SOUND :{WHITE}Miksowanie dźwięku: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Pętla gry +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Opóźnienie wykresu połączeń STR_FRAMETIME_CAPTION_DRAWING :Renderowanie grafiki +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Renderowanie okna podgląu świata STR_FRAMETIME_CAPTION_VIDEO :Wyjście wideo STR_FRAMETIME_CAPTION_SOUND :Miksowanie dźwięku ############ End of leave-in-this-order @@ -3129,6 +3138,9 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Szczegó STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Brak dostępnych informacji STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Fraza filtru: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Zastąp plik +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Czy na pewno chcesz zastąpić istniejący stan gry? STR_SAVELOAD_OSKTITLE :{BLACK}Wprowadź nazwę pod jaką zapisać grę @@ -3246,7 +3258,10 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Wersja: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Kompatybilność z wersją min.: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}Suma MD5: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Domyslny (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Domyślny (D) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parametry: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Żadne STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Brak dostępnych informacji STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Nie znaleziono pasującego pliku @@ -3804,6 +3819,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Ładowno STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Moc: {GOLD}+{POWER}{BLACK} Masa: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Można przystosować do: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :wszystkie typy ładunków +STR_PURCHASE_INFO_NONE :Żadne STR_PURCHASE_INFO_ALL_BUT :wszystko oprócz {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Maks. siła pociągowa: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Zasięg: {GOLD}{COMMA} pól From 5e4f76f2f9ad105f619003657229b3bbd87ba678 Mon Sep 17 00:00:00 2001 From: Gabda Date: Thu, 7 Feb 2019 21:17:32 +0100 Subject: [PATCH 316/622] Fix #5654: (Re)initialise graph GUI on game (re)start (#7191) --- src/graph_gui.cpp | 6 ++++++ src/misc.cpp | 2 ++ 2 files changed, 8 insertions(+) diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index bbf1c22d62..08b99598fa 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -1580,3 +1580,9 @@ void ShowPerformanceRatingDetail() { AllocateWindowDescFront(&_performance_rating_detail_desc, 0); } + +void InitializeGraphGui() +{ + _legend_excluded_companies = 0; + _legend_excluded_cargo = 0; +} diff --git a/src/misc.cpp b/src/misc.cpp index d9d506993f..8151f2dd32 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -42,6 +42,7 @@ void InitializeRailGui(); void InitializeRoadGui(); void InitializeAirportGui(); void InitializeDockGui(); +void InitializeGraphGui(); void InitializeObjectGui(); void InitializeIndustries(); void InitializeObjects(); @@ -87,6 +88,7 @@ void InitializeGame(uint size_x, uint size_y, bool reset_date, bool reset_settin InitializeRoadGui(); InitializeAirportGui(); InitializeDockGui(); + InitializeGraphGui(); InitializeObjectGui(); InitializeAIGui(); InitializeTrees(); From 37bb2c930828260cd28365c8d96befea096bacd6 Mon Sep 17 00:00:00 2001 From: Gabda Date: Sat, 9 Feb 2019 00:05:25 +0100 Subject: [PATCH 317/622] Codechange: Make the style of MakeVoid calls uniform (#7192) --- src/genworld.cpp | 4 ++-- src/landscape.cpp | 23 +++++++++-------------- src/saveload/afterload.cpp | 6 ++---- src/settings.cpp | 4 ++-- src/tgp.cpp | 4 ++-- 5 files changed, 17 insertions(+), 24 deletions(-) diff --git a/src/genworld.cpp b/src/genworld.cpp index 5cdb129b9c..25d6a7bd9d 100644 --- a/src/genworld.cpp +++ b/src/genworld.cpp @@ -120,8 +120,8 @@ static void _GenerateWorld(void *) /* Make sure the tiles at the north border are void tiles if needed. */ if (_settings_game.construction.freeform_edges) { - for (uint row = 0; row < MapSizeY(); row++) MakeVoid(TileXY(0, row)); - for (uint col = 0; col < MapSizeX(); col++) MakeVoid(TileXY(col, 0)); + for (uint x = 0; x < MapSizeX(); x++) MakeVoid(TileXY(x, 0)); + for (uint y = 0; y < MapSizeY(); y++) MakeVoid(TileXY(0, y)); } /* Make the map the height of the setting */ diff --git a/src/landscape.cpp b/src/landscape.cpp index 2f14a69e4b..b173709f37 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -841,22 +841,17 @@ void RunTileLoop() void InitializeLandscape() { - uint maxx = MapMaxX(); - uint maxy = MapMaxY(); - uint sizex = MapSizeX(); - - uint y; - for (y = _settings_game.construction.freeform_edges ? 1 : 0; y < maxy; y++) { - uint x; - for (x = _settings_game.construction.freeform_edges ? 1 : 0; x < maxx; x++) { - MakeClear(sizex * y + x, CLEAR_GRASS, 3); - SetTileHeight(sizex * y + x, 0); - SetTropicZone(sizex * y + x, TROPICZONE_NORMAL); - ClearBridgeMiddle(sizex * y + x); + for (uint y = _settings_game.construction.freeform_edges ? 1 : 0; y < MapMaxY(); y++) { + for (uint x = _settings_game.construction.freeform_edges ? 1 : 0; x < MapMaxX(); x++) { + MakeClear(TileXY(x, y), CLEAR_GRASS, 3); + SetTileHeight(TileXY(x, y), 0); + SetTropicZone(TileXY(x, y), TROPICZONE_NORMAL); + ClearBridgeMiddle(TileXY(x, y)); } - MakeVoid(sizex * y + x); } - for (uint x = 0; x < sizex; x++) MakeVoid(sizex * y + x); + + for (uint x = 0; x < MapSizeX(); x++) MakeVoid(TileXY(x, MapMaxY())); + for (uint y = 0; y < MapSizeY(); y++) MakeVoid(TileXY(MapMaxX(), y)); } static const byte _genterrain_tbl_1[5] = { 10, 22, 33, 37, 4 }; diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index d0b4723c6e..0b570966dc 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -204,10 +204,8 @@ static void UpdateCurrencies() */ static void UpdateVoidTiles() { - uint i; - - for (i = 0; i < MapMaxY(); ++i) MakeVoid(i * MapSizeX() + MapMaxX()); - for (i = 0; i < MapSizeX(); ++i) MakeVoid(MapSizeX() * MapMaxY() + i); + for (uint x = 0; x < MapSizeX(); x++) MakeVoid(TileXY(x, MapMaxY())); + for (uint y = 0; y < MapSizeY(); y++) MakeVoid(TileXY(MapMaxX(), y)); } static inline RailType UpdateRailType(RailType rt, RailType min) diff --git a/src/settings.cpp b/src/settings.cpp index 41d3e28092..b93f4d7066 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1222,8 +1222,8 @@ static bool CheckFreeformEdges(int32 p1) return false; } } - for (uint i = 0; i < MapSizeX(); i++) MakeVoid(TileXY(i, 0)); - for (uint i = 0; i < MapSizeY(); i++) MakeVoid(TileXY(0, i)); + for (uint x = 0; x < MapSizeX(); x++) MakeVoid(TileXY(x, 0)); + for (uint y = 0; y < MapSizeY(); y++) MakeVoid(TileXY(0, y)); } else { for (uint i = 0; i < MapMaxX(); i++) { if (TileHeight(TileXY(i, 1)) != 0) { diff --git a/src/tgp.cpp b/src/tgp.cpp index 02621f127e..4dbb79aa82 100644 --- a/src/tgp.cpp +++ b/src/tgp.cpp @@ -995,8 +995,8 @@ void GenerateTerrainPerlin() /* First make sure the tiles at the north border are void tiles if needed. */ if (_settings_game.construction.freeform_edges) { - for (int y = 0; y < _height_map.size_y - 1; y++) MakeVoid(_height_map.size_x * y); - for (int x = 0; x < _height_map.size_x; x++) MakeVoid(x); + for (uint x = 0; x < MapSizeX(); x++) MakeVoid(TileXY(x, 0)); + for (uint y = 0; y < MapSizeY(); y++) MakeVoid(TileXY(0, y)); } int max_height = H2I(TGPGetMaxHeight()); From d03cb80346dac780973744af35f5251c4cdeb138 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Fri, 8 Feb 2019 22:37:41 +0000 Subject: [PATCH 318/622] Fix: trains cancelling their pending reversal when ordered to go to a depot behind them Previously, if a train had been ordered to reverse, and while it was slowing down, was ordered to travel to a depot that is behind it, the train would continue forwards. Also when a train had been ordered to reverse, and while it was slowing down, was ordered to travel to a depot that is in front of it, the train would not cancel the reversal. In both cases the train would travel away from the target depot. Trains in this situation now behave correctly and will travel towards the depot. --- src/vehicle.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 53220474e5..f655bbafc5 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -2356,8 +2356,10 @@ CommandCost Vehicle::SendToDepot(DoCommandFlag flags, DepotCommand command) if (!(command & DEPOT_SERVICE)) this->current_order.SetDepotActionType(ODATFB_HALT); SetWindowWidgetDirty(WC_VEHICLE_VIEW, this->index, WID_VV_START_STOP); - /* If there is no depot in front, reverse automatically (trains only) */ - if (this->type == VEH_TRAIN && reverse) DoCommand(this->tile, this->index, 0, DC_EXEC, CMD_REVERSE_TRAIN_DIRECTION); + /* If there is no depot in front and the train is not already reversing, reverse automatically (trains only) */ + if (this->type == VEH_TRAIN && (reverse ^ HasBit(Train::From(this)->flags, VRF_REVERSING))) { + DoCommand(this->tile, this->index, 0, DC_EXEC, CMD_REVERSE_TRAIN_DIRECTION); + } if (this->type == VEH_AIRCRAFT) { Aircraft *a = Aircraft::From(this); From de1278290b7ede2fa9e4a7455abfeb8487496dcf Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 9 Feb 2019 14:41:18 +0100 Subject: [PATCH 319/622] Update: Translations from eints greek: 15 changes by fumantsu dutch: 73 changes by JanWillem --- src/lang/afrikaans.txt | 1 - src/lang/arabic_egypt.txt | 1 - src/lang/basque.txt | 1 - src/lang/belarusian.txt | 1 - src/lang/brazilian_portuguese.txt | 1 - src/lang/bulgarian.txt | 1 - src/lang/catalan.txt | 1 - src/lang/czech.txt | 1 - src/lang/dutch.txt | 146 +++++++++++++++--------------- src/lang/english_AU.txt | 1 - src/lang/english_US.txt | 1 - src/lang/esperanto.txt | 1 - src/lang/faroese.txt | 1 - src/lang/gaelic.txt | 1 - src/lang/galician.txt | 1 - src/lang/greek.txt | 16 +++- src/lang/hebrew.txt | 1 - src/lang/hungarian.txt | 1 - src/lang/icelandic.txt | 1 - src/lang/indonesian.txt | 1 - src/lang/irish.txt | 1 - src/lang/italian.txt | 1 - src/lang/japanese.txt | 1 - src/lang/latin.txt | 1 - src/lang/latvian.txt | 1 - src/lang/lithuanian.txt | 1 - src/lang/luxembourgish.txt | 1 - src/lang/malay.txt | 1 - src/lang/norwegian_bokmal.txt | 1 - src/lang/norwegian_nynorsk.txt | 1 - src/lang/serbian.txt | 1 - src/lang/simplified_chinese.txt | 1 - src/lang/slovak.txt | 1 - src/lang/slovenian.txt | 1 - src/lang/tamil.txt | 1 - src/lang/thai.txt | 1 - src/lang/traditional_chinese.txt | 1 - src/lang/turkish.txt | 1 - src/lang/ukrainian.txt | 1 - src/lang/unfinished/frisian.txt | 1 - src/lang/unfinished/persian.txt | 1 - src/lang/unfinished/urdu.txt | 4 - src/lang/vietnamese.txt | 1 - src/lang/welsh.txt | 1 - 44 files changed, 88 insertions(+), 119 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 02efdd5aa4..28234123f7 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1801,7 +1801,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Verander STR_CHEAT_SETUP_PROD :{LTBLUE}Aktiveer modifisering van produksie waardes: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nuwe Kleur Skema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Toon algemene kleurskemas STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Wys trein kleur skemas diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 5cccd49091..7a2685b3ce 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1471,7 +1471,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}غير STR_CHEAT_SETUP_PROD :{LTBLUE}تفعيل تغيير قيمة الانتاج: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}الوان جديدة STR_LIVERY_GENERAL_TOOLTIP :{BLACK}اظهر اللون العام STR_LIVERY_TRAIN_TOOLTIP :{BLACK}اظهر لون القطائرات diff --git a/src/lang/basque.txt b/src/lang/basque.txt index aa57bb9f70..94bacd7880 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1711,7 +1711,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Aurtengo STR_CHEAT_SETUP_PROD :{LTBLUE}Ekoizpen balioak aldatzea baimendu: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Kolore eskema berria STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Erakutsi kolore eskema orokorrak STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Erakutsi trenen kolore eskemak diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index cb79266a70..e610acc119 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -2126,7 +2126,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Зьмя STR_CHEAT_SETUP_PROD :{LTBLUE}Дазволіць зьмяненьне прадукцыйнасьці: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Новая каляровая схэма STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Паказаць асноўныя каляровыя схэмы STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Паказаць каляровыя схэмы цягнікоў diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 52978f65da..31aa357626 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1817,7 +1817,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Mudar an STR_CHEAT_SETUP_PROD :{LTBLUE}Ativar modificação de valores de produção: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Novo Esquema de Cores STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Exibir esquemas de cor gerais STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Exibe esquemas de cor de trens diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 9066f2cdda..16d9038acb 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1749,7 +1749,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Пром STR_CHEAT_SETUP_PROD :{LTBLUE}Промяна на производствените стойности: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Нова цветове STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Показване на общи цветови схеми STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Показване цветовите схеми на влаковете diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 15e2bff8f7..d20684b036 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1815,7 +1815,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Canvia l STR_CHEAT_SETUP_PROD :{LTBLUE}Activa la modificació dels valors de producció: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nou esquema de colors STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostra esquemes de colors generals STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Mostra els esquemes de colors dels trens diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 7d1486c992..e26dd9963d 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1895,7 +1895,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Změnit STR_CHEAT_SETUP_PROD :{LTBLUE}Povolit změnu produkce průmyslu: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nové barevné schéma STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Zobrazit všeobecná barevná schémata STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Zobrazit barevná schémata pro vlaky diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 1b48c5c1ff..f6382d8700 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1101,7 +1101,7 @@ STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filterte STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Alles uitvouwen STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Alles inklappen STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(geen uitleg beschikbaar) -STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Standaard waarde: {ORANGE}{STRING} +STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Standaardwaarde: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Instellingstype: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE_CLIENT :Gebruiker instellingen (niet opgeslagen in bestand; heeft invloed op alle spellen) STR_CONFIG_SETTING_TYPE_GAME_MENU :Spelinstellingen (opgeslagen in bestand; hebben alleen invloed op nieuw spel) @@ -1159,7 +1159,7 @@ STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Controle hoe va STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Subsidie indicator: {STRING} STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Instellen hoeveel wordt betaald voor gesubsidieerde verbindingen STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Bouwkosten: {STRING} -STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Het niveau van bouw- en aankoopkosten +STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Het niveau van bouw- en aankoopkosten instellen STR_CONFIG_SETTING_RECESSIONS :Recessies: {STRING} STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Wanneer ingeschakeld kunnen recessies om de paar jaar optreden. Tijdens een recessie is alle productie aanzienlijk lager (deze keert terug naar het vorige niveau als de recessie voorbij is) STR_CONFIG_SETTING_TRAIN_REVERSING :Niet toestaan dat treinen keren in stations: {STRING} @@ -1167,16 +1167,16 @@ STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Indien ingescha STR_CONFIG_SETTING_DISASTERS :Rampen: {STRING} STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Schakel rampen die af en toe voertuigen of infrastructuur kunnen blokkeren of vernietigen in/uit STR_CONFIG_SETTING_CITY_APPROVAL :Houding van gemeentebestuur ten opzichte van herstructurering omgeving: {STRING} -STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Kies hoeveel lawaai en schade aan het milieu door bedrijven de stadswaardering en hun acties beïnvloeden in hun bouwgebied +STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Bepaalt in hoeverre lawaai en schade aan het milieu door bedrijven de stadswaardering en verdere bouwacties beïnvloeden in hun omgeving STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Maximale kaarthoogte: {STRING} STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Stel de maximum toegestane hoogte voor bergen op de kaart in STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Je kunt de maximale kaarthoogte niet in deze waarde wijzigen. Minstens één berg op de kaart is hoger. STR_CONFIG_SETTING_AUTOSLOPE :Omgeving aanpassen onder gebouwen, spoorwegen, enz. toestaan: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Staat het aanpassen van funderingen onder gebouwen en sporen toe zonder deze te verwijderen -STR_CONFIG_SETTING_CATCHMENT :Gebruik meer realistische handelsgebieden: {STRING} -STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Heb verschillende grootte verzorgingsgebied voor verschillende typen stations en luchthavens -STR_CONFIG_SETTING_EXTRADYNAMITE :Sta verwijderen van meer stedelijke wegen, bruggen en tunnels toe: {STRING} +STR_CONFIG_SETTING_CATCHMENT :Meer realistische verzorgingsgebieden toestaan: {STRING} +STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Verzorgingsgebieden met verschillende groottes voor verschillende typen stations en luchthavens +STR_CONFIG_SETTING_EXTRADYNAMITE :Verwijderen van meer stedelijke wegen, bruggen en tunnels toestaan: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Maakt het gemakkelijker om door de stad beheerde infrastructuur en gebouwen te verwijderen. STR_CONFIG_SETTING_TRAIN_LENGTH :Maximale lengte van treinen: {STRING} STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Stel de maximale lengte van treinen in @@ -1209,7 +1209,7 @@ STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Wijze van finan STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :Geen STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :Zoals andere industrieën STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :Proberen -STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Plat gebied rond industrieën: {STRING} +STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Vlak gebied rond industrieën: {STRING} STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Hoeveelheid ruimte rond een industrie. Dit zorgt ervoor dat lege ruimte rond een industrie beschikbaar blijft voor sporen, stations, wegen enz. STR_CONFIG_SETTING_MULTIPINDTOWN :Meerdere vergelijkbare industrieën per stad toestaan: {STRING} STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normaal zal een stad niet meer dan één industrie van ieder type toestaan. Door deze optie in te schakelen zullen steden meerdere industrieën van één soort accepteren. @@ -1227,8 +1227,8 @@ STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Plaats waar een STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :aan het begin STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :in het midden STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :aan het einde -STR_CONFIG_SETTING_AUTOSCROLL :Verschuif scherm als muis aan de rand is: {STRING} -STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Wanneer aan, start een subvenster met scrollen wanneer de muis vlak bij de rand van het venster komt +STR_CONFIG_SETTING_AUTOSCROLL :Scherm verplaatsen als muis de rand raakt: {STRING} +STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Als dit is ingeschakeld, wordt een subvenster verplaatst wanneer de muis vlak bij de rand van het venster komt STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Uitgeschakeld STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Hoofdkijkvenster, alleen volledig scherm STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Hoofdkijkvenster @@ -1238,13 +1238,13 @@ STR_CONFIG_SETTING_BRIBE_HELPTEXT :Toestaan dat be STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Kopen van exclusieve transportrechten toestaan: {STRING} STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Wanneer een bedrijf de exclusieve transportrechten van een stad koopt, ontvangen de stations (zowel passagiers als vracht) van de tegenstanders geen vracht voor één heel jaar. STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Financiering van gebouwen toestaan: {STRING} -STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Deze optie staat bedrijven toe meer geld te geven aan steden voor de financiering van nieuwe huizen. +STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Staat bedrijven toe geld te geven aan steden voor de financiering van nieuwe huizen. STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Financieren van lokale wegreconstructie toestaan: {STRING} -STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Deze optie staat bedrijven toe geld te geven aan steden voor het herbouwen van wegen, zodat op wegbedrijven gesaboteerd worden. +STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Staat bedrijven toe geld te geven aan steden voor wegreconstructies zodat wegbedrijven gesaboteerd worden. STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Geld geven aan andere bedrijven toestaan: {STRING} STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Sta toe dat bedrijven geld naar elkaar overmaken in een multiplayerspel. STR_CONFIG_SETTING_FREIGHT_TRAINS :Gewichtsfactor voor vracht om zware treinen te simuleren: {STRING} -STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Stel de impact van het vervoer van vracht bij treinen. Een hogere waarde maakt het vervoer van vracht veeleisender voor treinen, met name in heuvels +STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Stelt in hoe vracht treinen beïnvloedt. Een hogere waarde maakt het vervoer van vracht veeleisender voor treinen, met name in heuvels. STR_CONFIG_SETTING_PLANE_SPEED :Vliegtuig snelheidsfactor: {STRING} STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Stel de relatieve snelheid van de vliegtuigen in vergelijking met andere typen voertuigen, om de hoogte van het inkomen van het vervoer door vliegtuigen te verminderen STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} @@ -1278,20 +1278,20 @@ STR_CONFIG_SETTING_WARN_INCOME_LESS :Waarschuw als i STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Wanneer ingeschakeld, wordt een nieuws-bericht verstuurd wanneer een voertuig geen winst heeft gemaakt in een kalenderjaar STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Voertuigen verlopen nooit: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Wanneer ingeschakeld, alle voertuig modellen blijven voor altijd beschikbaar na hun introductie -STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Vernieuw voertuig automatisch wanneer deze oud wordt: {STRING} -STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Wanneer ingeschakeld, wordt een voertuig die het einde van zijn levensduur nadert automatisch vervangen als aan de vernieuw voorwaarden worden voldaan +STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Voertuig automatisch vernieuwen wanneer dit oud wordt: {STRING} +STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Wanneer ingeschakeld, wordt een voertuig dat het einde van zijn levensduur nadert automatisch vervangen als aan de voorwaarden voor vernieuwing wordt voldaan STR_CONFIG_SETTING_AUTORENEW_MONTHS :Vernieuw voertuigen automatisch na {STRING} maximumleeftijd -STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Relatieve leeftijd van een voertuig wanneer deze in aanmerking komt voor automatisch vervangen +STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Relatieve leeftijd van een voertuig wanneer dit in aanmerking komt voor automatisch vervangen STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} maand{P 0 "" en} voor STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} maand{P 0 "" en} na -STR_CONFIG_SETTING_AUTORENEW_MONEY :Minimum benodigd geld voor automatisch vernieuwen: {STRING} -STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minimale hoeveelheid geld die op de bank moet blijven alvorens automatisch vernieuwen voertuigen te starten +STR_CONFIG_SETTING_AUTORENEW_MONEY :Minimumbedrag dat nodig is voor automatisch vernieuwen: {STRING} +STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minimumbedrag dat de bank moet blijven voordat automatisch vernieuwen van voertuigen mogelijk is STR_CONFIG_SETTING_ERRMSG_DURATION :Duur van foutbericht: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duur voor het weergeven van foutberichten in een rood venster. Merk op dat sommige (kritische) foutmeldingen niet automatisch worden gesloten na deze tijd, deze moeten handmatig worden gesloten STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} seconde{P 0 "" n} STR_CONFIG_SETTING_HOVER_DELAY :Knopinfo weergeven: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Vertraging voordat tooltips worden weergegeven wanneer de muis over een interface-element. Als alternatief kunnen tooltips worden gebonden aan de rechtermuisknop wanneer de waarde 0 is. -STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Wijs aan voor {COMMA} seconde{P 0 "" n} +STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Muis stilhouden gedurende {COMMA} seconde{P 0 "" n} STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Rechtsklik STR_CONFIG_SETTING_POPULATION_IN_LABEL :Geef het inwoneraantal bij een stad weer: {STRING} STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Aantal inwoners van een stad weergeven bij naam op de kaart @@ -1307,7 +1307,7 @@ STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis STR_CONFIG_SETTING_TERRAIN_TYPE :Terrein type: {STRING} STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Alleen TerraGenesis) Heuvelachtigheid van het landschap STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industriedichtheid: {STRING} -STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Stel in hoeveel industrieën moeten worden gegenereerd en welk niveau tijdens het spel moet worden gehandhaafd +STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Stelt in hoeveel industrieën worden gegenereerd en welk niveau tijdens het spel moet worden gehandhaafd STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximumafstand van de rand voor Olierafinaderijen: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Olieraffinaderijen worden alleen gebouwd nabij de kaart grens, dat is aan de kust van eiland kaarten STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Sneeuwhoogte: {STRING} @@ -1347,13 +1347,13 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Kleur van het t STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Groen STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Donker groen STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violet -STR_CONFIG_SETTING_SCROLLMODE :Bekijk scrollgedrag: {STRING} -STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Gedrag tijdens het scrollen van de kaart +STR_CONFIG_SETTING_SCROLLMODE :Verplaatsingsgedrag voor kijkvensters: {STRING} +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Gedrag tijdens het verplaatsen van de kaart STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Verplaats kijkvenster met RMB, muispositie staat vast STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Verplaats kaart met RMB, muispositie staat vast STR_CONFIG_SETTING_SCROLLMODE_RMB :Verplaats kaart met RMB STR_CONFIG_SETTING_SCROLLMODE_LMB :Verplaats kaart met LMB -STR_CONFIG_SETTING_SMOOTH_SCROLLING :Vloeiend scrollen kijkvenster: {STRING} +STR_CONFIG_SETTING_SMOOTH_SCROLLING :Kijkvenster vloeiend verplaatsen: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Bepalen hoe de hoofdweergave naar een specifieke positie schuift bij het klikken op de minikaart of bij het uitvoeren van een commando om naar een specifiek object op de kaart te scrollen. Indien ingeschakeld, dan scrollt het kijkvenster soepel, als deze uitgeschakeld gaat u rechtstreeks naar de beoogde plek STR_CONFIG_SETTING_MEASURE_TOOLTIP :Maten weergeven bij het gebruik van diverse bouwgereedschappen: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Geef tegelafstanden en hoogteverschillen weer bij het slepen tijdens het bouwen @@ -1365,12 +1365,12 @@ STR_CONFIG_SETTING_LIVERIES_ALL :Alle bedrijven STR_CONFIG_SETTING_PREFER_TEAMCHAT :Voorkeur voor team chat met : {STRING} STR_CONFIG_SETTING_PREFER_TEAMCHAT_HELPTEXT :Schakel de binding van bedrijfs-interne en publieke chat om resp. STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING :Functie van muiswiel: {STRING} -STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING_HELPTEXT :Scrollen inschakelen met twee-dimensioneel muis-wielen +STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING_HELPTEXT :Verplaatsen inschakelen met tweedimensionale muiswieltjes STR_CONFIG_SETTING_SCROLLWHEEL_ZOOM :Zoom kaart -STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :Scroll kaart +STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :Kaart verplaatsen STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Uit STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER :Muiswielsnelheid: {STRING} -STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Regel de gevoeligheid van het muis-wiel scrollen +STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Gevoeligheid van verplaatsen met de instellen STR_CONFIG_SETTING_OSK_ACTIVATION :Toetsenbord op scherm: {STRING} STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Selecteer de methode om het toetsenbord op het scherm te openen voor tekst invoeren in editboxes alleen met behulp van het aanwijsapparaat. Dit is bedoeld voor kleine apparaten zonder toetsenbord STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :Uitgeschakeld @@ -1390,9 +1390,9 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Sluit een venst STR_CONFIG_SETTING_AUTOSAVE :Automatisch opslaan: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Kies tijdsduur voor automatische spelopslag -STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Gebruik {STRING} datumformaat voor naamgeving van opgeslagen spellen +STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Datumindeling {STRING} gebruiken voor naamgeving van opgeslagen spellen STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Formaat van de datum in savegamebestandsnamen -STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :lang (31e dec 2008) +STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :lang (31 dec 2008) STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :kort (31-12-2008) STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31) @@ -1404,8 +1404,8 @@ STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Geen mogelijkhe STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :Alle niet-constructiemogelijkheden STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :Alles behalve landschapsaanpassingen STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :Alle mogelijkheden -STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Gebruik groepen voor voertuigenlijst: {STRING} -STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Schakel het gebruik van de geavanceerde voertuigenlijsten in voor het groeperen van voertuigen +STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Groepen gebruiken in voertuigenlijst: {STRING} +STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Schakelt het gebruik van de geavanceerde voertuigenlijsten in voor het groeperen van voertuigen STR_CONFIG_SETTING_LOADING_INDICATORS :Laadpercentages gebruiken: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Geef aan of laadindicatoren worden weergegeven boven ladende of lossende voertuigen STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Dienstregeling in tikken weergeven i.p.v. in dagen: {STRING} @@ -1423,7 +1423,7 @@ STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Gereserveerd sp STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Geef gereserveerde tracks een andere kleur om te helpen met de problemen met treinen te weigeren een route op basis van blokken in te gaan STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Hou bouwgereedschappen actief na gebruik: {STRING} STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Houd de bouwhulpmiddelen voor bruggen, tunnels, enz. open na gebruik -STR_CONFIG_SETTING_EXPENSES_LAYOUT :Groepeer uitgaven in bedrijfsfinanciënscherm: {STRING} +STR_CONFIG_SETTING_EXPENSES_LAYOUT :Uitgaven in bedrijfsfinanciënvenster groeperen: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Definieer de lay-out voor het bedrijfsuitgavenvenster STR_CONFIG_SETTING_SOUND_TICKER :Nieuwsticker: {STRING} @@ -1469,7 +1469,7 @@ STR_CONFIG_SETTING_AI_PROFILE_EASY :Makkelijk STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Gemiddeld STR_CONFIG_SETTING_AI_PROFILE_HARD :Moeilijk -STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Laat computerspelers toe in netwerkspel: {STRING} +STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Computerspelers toestaan in netwerkspelen: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Sta door computer gegenereerde speler toe deel te nemen in multiplayerspellen STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes voordat scripts worden gestopt: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximumaantal berekeningsstappen die een script kan maken in een beurt @@ -1490,8 +1490,8 @@ STR_CONFIG_SETTING_NOSERVICE :Onderhoud uitsc STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Als deze optie is ingeschakeld worden voertuigen niet onderhouden als ze niet kapot kunnen gaan. STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Schakel snelheidslimieten voor wagons aan: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Wanneer ingeschakeld, ook gebruik maken van snelheidsbeperkingen van wagons voor het bepalen van de maximale snelheid van een trein -STR_CONFIG_SETTING_DISABLE_ELRAILS :Schakel elektrische sporen uit: {STRING} -STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Het inschakelen van deze instelling schakelt de verplichting voor spoorelektrificatie voor elektrische treinen uit +STR_CONFIG_SETTING_DISABLE_ELRAILS :Elektrische sporen uitschakelen: {STRING} +STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Wanneer dit is ingeschakeld, hoeven sporen niet te zijn geëlektrificeerd voor elektrische treinen STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Eerste voertuig bij eigen station: {STRING} STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Nieuwsbericht weergeven als het eerste voertuig arriveert op een station van de speler @@ -1533,14 +1533,14 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Jaar dat de kra STR_CONFIG_SETTING_STARTING_YEAR :Startjaar: {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY :Vloeiende economie inschakelen (meer, kleinere veranderingen): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Wanneer ingeschakeld, industrie produktie verandert vaker en in kleinere stappen. Deze instelling heeft meestal geen effect, als de industrie soorten worden geleverd door een NewGRF -STR_CONFIG_SETTING_ALLOW_SHARES :Sta het kopen van aandelen van andere bedrijven toe: {STRING} +STR_CONFIG_SETTING_ALLOW_SHARES :Kopen van aandelen in andere bedrijven toestaan: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Wanneer ingeschakeld is het toegestaan om bedrijfsaandelen te kopen en te verkopen. Aandelen zullen alleen beschikbaar zijn voor bedrijven die een bepaalde leeftijd hebben bereikt STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Percentage van routeopbrengst in overdrachtssysteem: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Percentage van het inkomen besteed aan de intermediaire delen in feedersystemen waardoor er meer controle over de inkomsten is -STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Bij slepen, plaats seinen elke: {STRING} +STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Bij slepen, seinen plaatsen om de: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Stel de afstand waarop signalen worden gebouwd op een spoor in totaan de volgende hindernis (signaal, kruising) als signalen worden gesleept STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} tegel{P 0 "" s} -STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Bij slepen, hou vaste afstand tussen seinen: {STRING} +STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Bij slepen vaste afstand tussen seinen aanhouden: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Selecteer het gedrag van seinplaatsing wanneer je met Ctrl+slepen seinen plaatst. Indien dit uitgeschakeld is, dan worden seinen rondom tunnels of bruggen geplaatst om lange stukken te vermijden zonder seinen. Indien dit ingeschakeld is, dan worden seinen om de N tegels geplaatst, waardoor de uitlijning van de seinen op parallelle sporen makkelijker is STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Plaats automatisch armseinen voor: {STRING} STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Stel het jaar waarin elektrische seinen zal worden gebruikt voor sporen. Voor dit jaar zal niet-elektrische seinen worden gebruikt (die exact dezelfde functie hebben, maar verschillend uiterlijk) @@ -1577,8 +1577,8 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Toestaan STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Toestaan, eigen wegpatroon STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Plaatsing van bomen in het spel: {STRING} -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Beheer willekeurig verschijnen van bomen tijdens het spel. Dit kan gevolgen hebben voor industrietakken die afhankelijk zijn van groei van bomen, bijvoorbeeld houtzagerijen -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Geen {RED}(houtzagerij werkt niet) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Beheert het willekeurig verschijnen van bomen tijdens het spel. Dit kan gevolgen hebben voor industrietakken die afhankelijk zijn van groei van bomen, bijvoorbeeld houtzagerijen. +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NONE :Geen {RED}(houtzagerijen werken niet) STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_RAINFOREST :Alleen in regenwouden STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Overal @@ -1626,7 +1626,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :handmatig STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymmetrisch STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :symmetrisch STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distributiemodus voor passagiers: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"symmetrisch" betekent dat ongeveer hetzelfde aantal passagiers gaan van een station A naar station B als een van B naar A. "asymmetrische" betekent dat willekeurig aantal passagiers kunnen gaan in beide richtingen. "handmatig" betekent dat er geen automatische distributie zal plaatsvinden voor passagiers. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :'Symmetrisch' betekent dat ongeveer hetzelfde aantal passagiers van station A naar station B gaat als van B naar A. 'Asymmetrisch' betekent dat willekeurige aantallen passagiers reizen in beide richtingen. 'Handmatig' betekent dat er geen automatische distributie plaatsvindt voor passagiers. STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Distributiemodus voor post: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"symmetrisch" betekent dat ongeveer dezelfde hoeveelheid post zal worden verzonden van een station A naar een station B als B naar A. "asymmetrisch" betekent dat willekeurige hoeveelheden post in beide richtingen worden verzonden. "handmatig" betekent dat er geen automatische distributie zal plaatsvinden voor post. STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distributiemodus voor de GEPANTSERDE ladingsklasse: {STRING} @@ -1637,7 +1637,7 @@ STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Verdeelnauwkeur STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Hoe hoger de instelling, des te meer CPU-tijd de berekening van de linkgrafiek zal gebruiken. Als het te lang duurt, kan dan dat lag opleveren. Als je dit echter op een lage waarde instelt, zal de verdeling onnauwkeurig zijn, en kan het zijn dat vracht niet wordt gestuurd naar de plekken waar het naartoe moet gaan. STR_CONFIG_SETTING_DEMAND_DISTANCE :Effect van afstand op de vraag: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Als je dit op een waarde hoger dan 0 zet, dan zal de afstand tussen het station van herkomst A met enige vracht en een mogelijke bestemming B effect hebben op de hoeveelheid lading verzonden van A naar B. Hoe verder weg B is van A, des te minder lading wordt verzonden. Hoe hoger je deze instelt, hoe minder lading wordt verzonden naar verder geleden stations en meer lading zal worden verzonden naar dichtbij gelegen stations. -STR_CONFIG_SETTING_DEMAND_SIZE :Hoeveelheid van de kerende vracht voor symmetrische modus: {STRING} +STR_CONFIG_SETTING_DEMAND_SIZE :Hoeveelheid terugkerende vracht voor symmetrische modus: {STRING} STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Door dit op minder dan 100% te zetten lijkt de symmetrische verdeling meer op de asymmetrische verdeling. Minder vracht zal geforceerd worden om zich terug te sturen als er een bepaalde hoeveelheid wordt verzonden naar een station. Op 0% van de symmetrische verdeling gedraagt deze zicht als de asymmetrische verdeling. STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Verzadiging van korte routes voor het gebruik van ruime routes: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Vaak zijn er meerdere routes mogelijk tussen twee stations. Cargodist zal de kortste route eerst verzadigen, gebruik dan de tweede kortste route tot die verzadigd is en ga zo maar door. Verzadiging wordt bepaald door een schatting van de capaciteit en het geplande gebruik. Zodra alle routes verzadigd zijn, maar er is meer vraag, zal alle wegen overbelast worden, die met hoge capaciteit eerst. In veel gevallen zat het algoritme niet nauwkeurig de capaciteit inschatten, helaas. Met deze instelling kunt u aangeven tot welk percentage een korter pad moet worden verzadigd eer de eerst volgende langere route wordt gekozen. Zet deze op minder dan 100% om overvolle stations in geval van overschat capaciteit te voorkomen. @@ -1679,20 +1679,20 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :Metrisch (m) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (m) STR_CONFIG_SETTING_LOCALISATION :{ORANGE}Lokalisatie -STR_CONFIG_SETTING_GRAPHICS :{ORANGE}Graphics +STR_CONFIG_SETTING_GRAPHICS :{ORANGE}Grafische elementen STR_CONFIG_SETTING_SOUND :{ORANGE}Geluid -STR_CONFIG_SETTING_INTERFACE :{ORANGE}Interface +STR_CONFIG_SETTING_INTERFACE :{ORANGE}Gebruikersscherm STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE}Algemeen STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :{ORANGE}Kijkvensters STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}Constructie -STR_CONFIG_SETTING_ADVISORS :{ORANGE}Nieuws / Adviseurs +STR_CONFIG_SETTING_ADVISORS :{ORANGE}Nieuws/adviseurs STR_CONFIG_SETTING_COMPANY :{ORANGE}Bedrijf STR_CONFIG_SETTING_ACCOUNTING :{ORANGE}Boekhouding STR_CONFIG_SETTING_VEHICLES :{ORANGE}Voertuigen STR_CONFIG_SETTING_VEHICLES_PHYSICS :{ORANGE}Physics STR_CONFIG_SETTING_VEHICLES_ROUTING :{ORANGE}Routebepaling STR_CONFIG_SETTING_LIMITATIONS :{ORANGE}Beperkingen -STR_CONFIG_SETTING_ACCIDENTS :{ORANGE}Rampen / Ongelukken +STR_CONFIG_SETTING_ACCIDENTS :{ORANGE}Rampen/ongelukken STR_CONFIG_SETTING_GENWORLD :{ORANGE}Wereldgeneratie STR_CONFIG_SETTING_ENVIRONMENT :{ORANGE}Omgeving STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :{ORANGE}Autoriteiten @@ -1721,12 +1721,12 @@ STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Verander STR_CONFIG_ERROR :{WHITE}Fout in het configuratiebestand... STR_CONFIG_ERROR_ARRAY :{WHITE}... fout in array '{STRING}' STR_CONFIG_ERROR_INVALID_VALUE :{WHITE}... ongeldige waarde '{STRING}' voor '{STRING}' -STR_CONFIG_ERROR_TRAILING_CHARACTERS :{WHITE}... karakters gevonden aan het einde van instellingen '{STRING}' -STR_CONFIG_ERROR_DUPLICATE_GRFID :{WHITE}... negeer NewGRF '{STRING}': dubbel GRF ID met '{STRING}' +STR_CONFIG_ERROR_TRAILING_CHARACTERS :{WHITE}... tekens gevonden aan het einde van instellingen '{STRING}' +STR_CONFIG_ERROR_DUPLICATE_GRFID :{WHITE}... NewGRF '{STRING}' wordt genegeerd: dubbele GRF-id met '{STRING}' STR_CONFIG_ERROR_INVALID_GRF :{WHITE}... negeer ongeldige NewGRF '{STRING}': {STRING} STR_CONFIG_ERROR_INVALID_GRF_NOT_FOUND :niet gevonden STR_CONFIG_ERROR_INVALID_GRF_UNSAFE :onveilig voor statisch gebruik -STR_CONFIG_ERROR_INVALID_GRF_SYSTEM :systeem NewGRF +STR_CONFIG_ERROR_INVALID_GRF_SYSTEM :systeem-NewGRF STR_CONFIG_ERROR_INVALID_GRF_INCOMPATIBLE :niet compatibel met deze versie van OpenTTD STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN :onbekend STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_LEVEL :{WHITE}... compressieniveau '{STRING}' is niet geldig @@ -1735,7 +1735,7 @@ STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... nege STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... negeert standaard geluidsset '{STRING}': niet gevonden STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... negeert standaard muziekset '{STRING}': niet gevonden STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Geen geheugen meer -STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Toewijzen van {BYTES} van spritecache mislukt. De spritecache werd teruggebracht tot {BYTES}. Dit zal de prestaties van OpenTTD verlagen. Om het geheugen te verminderen kunt u proberen om 32bpp graphics en / of zoom-in levels uit te schakelen +STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Toewijzen van {BYTES} van spritecache mislukt. De spritecache werd teruggebracht tot {BYTES}. Dit verlaagt de prestaties van OpenTTD. Om het benodigde geheugen te verminderen, kunt u proberen om 32bpp-beeldelementen en/of inzoomniveaus uit te schakelen # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1802,10 +1802,10 @@ STR_ABANDON_GAME_QUERY :{YELLOW}Weet je STR_ABANDON_SCENARIO_QUERY :{YELLOW}Weet je zeker dat je dit scenario wilt sluiten? # Cheat window -STR_CHEATS :{WHITE}Cheats -STR_CHEATS_TOOLTIP :{BLACK}Keuzevakjes geven aan of je deze cheat eerder hebt gebruikt +STR_CHEATS :{WHITE}Valsspelen +STR_CHEATS_TOOLTIP :{BLACK}Keuzevakjes geven aan of je deze manier van valsspelen eerder hebt gebruikt STR_CHEATS_WARNING :{BLACK}Waarschuwing! Je staat op het punt je medespelers te verraden. Onthoud dat zo'n schande eeuwig wordt onthouden -STR_CHEAT_MONEY :{LTBLUE}Verhoog geld met {CURRENCY_LONG} +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} STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunnels mogen elkaar kruisen: {ORANGE}{STRING} @@ -1816,9 +1816,9 @@ STR_CHEAT_SWITCH_CLIMATE_TEMPERATE_LANDSCAPE :Gematigd landsc STR_CHEAT_SWITCH_CLIMATE_SUB_ARCTIC_LANDSCAPE :Subarctisch landschap STR_CHEAT_SWITCH_CLIMATE_SUB_TROPICAL_LANDSCAPE :Subtropisch landschap STR_CHEAT_SWITCH_CLIMATE_TOYLAND_LANDSCAPE :Speelgoedlandschap -STR_CHEAT_CHANGE_DATE :{LTBLUE}Verander datum: {ORANGE}{DATE_SHORT} -STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Wijzig huidig jaar -STR_CHEAT_SETUP_PROD :{LTBLUE}Sta aanpassen productiewaarden toe: {ORANGE}{STRING} +STR_CHEAT_CHANGE_DATE :{LTBLUE}Datum wijzigen: {ORANGE}{DATE_SHORT} +STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Huidig jaar wijzigen +STR_CHEAT_SETUP_PROD :{LTBLUE}Productiewaarden aanpassen toestaan: {ORANGE}{STRING} # Livery window STR_LIVERY_CAPTION :{WHITE}{COMPANY} - kleurenschema @@ -2103,18 +2103,18 @@ STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Voer de STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Toeschouwer # Network set password -STR_COMPANY_PASSWORD_CANCEL :{BLACK}Sla het ingegeven wachtwoord niet op -STR_COMPANY_PASSWORD_OK :{BLACK}Geef het bedrijf het nieuwe wachtwoord +STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ingevoerd wachtwoord niet opslaan +STR_COMPANY_PASSWORD_OK :{BLACK}Bedrijf het nieuwe wachtwoord geven STR_COMPANY_PASSWORD_CAPTION :{WHITE}Bedrijfswachtwoord STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Standaard bedrijfswachtwoord -STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Gebruik dit bedrijfswachtwoord als standaard voor nieuwe bedrijven +STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Dit bedrijfswachtwoord gebruiken als standaard voor nieuwe bedrijven # Network company info join/password -STR_COMPANY_VIEW_JOIN :{BLACK}Doe mee +STR_COMPANY_VIEW_JOIN :{BLACK}Meedoen STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Doe mee en speel als dit bedrijf STR_COMPANY_VIEW_PASSWORD :{BLACK}Wachtwoord STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Bescherm het bedrijf met een wachtwoord zodat niet-geautoriseerde personen niet mee kunnen doen -STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Geef bedrijfswachtwoord op +STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Bedrijfswachtwoord instellen # Network chat STR_NETWORK_CHAT_SEND :{BLACK}Verstuur @@ -3011,7 +3011,7 @@ STR_NEWGRF_BROKEN :{WHITE}Gedrag v STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Wagon '{1:ENGINE}' gewijzigde status van aandrijfeenheid wanneer niet in een depot STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Het veranderde de lengte van voertuig '{1:ENGINE}' wanneer het niet in een depot is STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Het wijzigde voertuigcapaciteit voor '{1:ENGINE}' wanneer niet in een depot of ombouwen -STR_BROKEN_VEHICLE_LENGTH :{WHITE}Trein '{VEHICLE}' behorend bij '{COMPANY}' heeft een ongeldige lengte. Het is waarschijnlijk veroorzaakt door problemen met NewGRF's. Het spel kan desynchroniseren of vastlopen +STR_BROKEN_VEHICLE_LENGTH :{WHITE}Trein '{VEHICLE}' behorend bij '{COMPANY}' heeft een ongeldige lengte. Dit wordt waarschijnlijk veroorzaakt door problemen met NewGRF's. Het spel kan desynchroniseren of vastlopen STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' geeft onjuiste informatie STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Vracht- of ombouwinformatie voor '{1:ENGINE}' wijkt af van aanschaflijst na het bouwen. Dit kan resulteren in problemen bij ombouwen door automatisch vernieuwen/vervangen @@ -3312,14 +3312,14 @@ STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Hoofdkan STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Hoofdkantoor verplaatsen STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Hoofdkantoor verplaatsen voor 1% van de bedrijfswaarde. Shift+klik geeft de verwachte kosten zonder hoofdkantoor te verplaatsen. STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Details -STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Bekijken gedetailleerde aantallen infrastructuur +STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Gedetailleerde aantallen infrastructuur bekijken STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nieuw gezicht STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Kies nieuw gezicht voor directeur STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Kleurenschema -STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Verander het uiterlijk van de bedrijfsvoertuigen +STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Verandert het uiterlijk van de bedrijfsvoertuigen STR_COMPANY_VIEW_COMPANY_NAME_BUTTON :{BLACK}Bedrijfsnaam -STR_COMPANY_VIEW_COMPANY_NAME_TOOLTIP :{BLACK}Verander de bedrijfsnaam +STR_COMPANY_VIEW_COMPANY_NAME_TOOLTIP :{BLACK}Bedrijfsnaam wijzigen STR_COMPANY_VIEW_PRESIDENT_NAME_BUTTON :{BLACK}Naam directeur STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Verander de naam van de directeur @@ -3371,8 +3371,8 @@ STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Vereist: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} wachtend{STRING} -STR_CONFIG_GAME_PRODUCTION :{WHITE}Verander productie (veelvoud van 8, maximaal 2040) -STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Verander productieniveau (percentage, maximaal 800%) +STR_CONFIG_GAME_PRODUCTION :{WHITE}Productie wijzigen (veelvoud van 8, maximaal 2040) +STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Productieniveau wijzigen (percentage, maximaal 800%) # Vehicle lists STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} Trein{P "" en} @@ -3689,10 +3689,10 @@ 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_STATE_START_STOP_TOOLTIP :{BLACK}Huidige actie van trein - klik hier om de trein te starten/stoppen. Ctrl+klik om naar bestemming te scrollen -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Huidige actie van wegvoertuig - klik hier om voertuig te starten/stoppen. Ctrl+klik om naar bestemming te scrollen -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Huidige actie van schip - klik hier om het te starten/stoppen. Ctrl+klik om naar bestemming te scrollen -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Huidige actie van vliegtuig - klik hier om het vliegtuig te stoppen/starten. Ctrl+klik om naar bestemming te scrollen +STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Huidige actie van trein - klik hier om de trein te starten-stoppen. Ctrl+klik om naar bestemming te verplaatsen. +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Huidige actie van wegvoertuig - klik hier om voertuig te starten-stoppen. Ctrl+klik om naar bestemming te verplaatsen. +STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Huidige actie van schip - klik hier om te starten-stoppen. Ctrl+klik om naar bestemming te verplaatsen. +STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Huidige actie van vliegtuig - klik hier om het vliegtuig te stoppen-starten. Ctrl+klik om naar bestemming te verplaatsen. # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}In- en uitladen @@ -4060,7 +4060,7 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Eén van STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}AI-/spelscript-probleemvenster is alleen beschikbaar voor de server # AI configuration window -STR_AI_CONFIG_CAPTION :{WHITE}AI/Spelscriptconfiguratie +STR_AI_CONFIG_CAPTION :{WHITE}AI-/spelscriptconfiguratie STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Het spelscript dat in het volgende spel geladen wordt STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}De AI's die in het volgende spel geladen worden STR_AI_CONFIG_HUMAN_PLAYER :Menselijke speler @@ -4113,7 +4113,7 @@ STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} wijzigingen van {STRING} STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING} licentie van {STRING} STR_TEXTFILE_WRAP_TEXT :{WHITE}Tekst afbreken -STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Maak de tekst passen in het scherm zonder te hoeven scrollen +STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Tekst aanpassen aan venster zodat je niet hoeft te bladeren STR_TEXTFILE_VIEW_README :{BLACK}Bekijk leesme STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Wijzigingen STR_TEXTFILE_VIEW_LICENCE :{BLACK}Licentie @@ -4151,7 +4151,7 @@ STR_ERROR_GAME_SAVE_FAILED :{WHITE}Opslaan STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kan bestand niet verwijderen STR_ERROR_GAME_LOAD_FAILED :{WHITE}Laden spel mislukt{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Interne fout: {STRING} -STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Kapotte savegame - {STRING} +STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Opgeslagen spel beschadigd - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Opgeslagen spel hoort bij een nieuwere versie STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Bestand is niet leesbaar STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Bestand is niet schrijfbaar @@ -4503,7 +4503,7 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Nog geen STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE} Start een nieuw spel na {DATE_SHORT} of gebruik een NewGRF dat in vroege voertuigen voorziet # Specific vehicle errors -STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan trein niet het signaal laten passeren bij gevaar... +STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Kan trein niet het sein laten passeren bij gevaar... STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Kan de richting van de trein niet omdraaien... STR_ERROR_TRAIN_START_NO_POWER :Trein heeft geen vermogen diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 63b5461a53..b771355ff8 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1775,7 +1775,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Change c STR_CHEAT_SETUP_PROD :{LTBLUE}Enable modifying production values: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}New Colour Scheme STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Show general colour schemes STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Show train colour schemes diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 8e806f0e02..4afd9de274 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1813,7 +1813,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Change c STR_CHEAT_SETUP_PROD :{LTBLUE}Enable modifying production values: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}New Color Scheme STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Show general color schemes STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Show train color schemes diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index a6346cb35d..c80cca6167 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1458,7 +1458,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Ŝanĝu STR_CHEAT_SETUP_PROD :{LTBLUE}Ebligu ŝanĝi produktvalorojn: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nova Kolorskemo STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Montru ĝeneralajn kolorskemojn STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Montru trajnajn kolorskemojn diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index e42bfe3bfa..e1fde3e3e8 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1621,7 +1621,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Broyt n STR_CHEAT_SETUP_PROD :{LTBLUE}Gilda broytingar av framleiðslu virðum: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nýggja lit samanseting STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Vís vanligu lit samansetingarnar STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Vís tok lit samansetingarnar diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 42e7b17554..942f935f5e 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -2005,7 +2005,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Atharrai STR_CHEAT_SETUP_PROD :{LTBLUE}Cuir an comas atharrachadh air luachan saothrachaidh: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Sgeama nan dath ùr STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Seall sgeamannan nan dath coitcheann STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Seall sgeamannan nan dath airson trèanaichean diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 604a82102b..e6e7af5c9e 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1804,7 +1804,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Cambiar STR_CHEAT_SETUP_PROD :{LTBLUE}Permitir a modificación dos valores de producción: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Novo esquema de cor STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostra-los esquemas de cor xerais STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Mostra-los esquemas de cor dos trens diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 76ff7a1755..ca2730163b 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -250,6 +250,8 @@ STR_COLOUR_ORANGE :Πορτοκα STR_COLOUR_BROWN :Καφέ STR_COLOUR_GREY :Γκρι STR_COLOUR_WHITE :Λευκό +STR_COLOUR_RANDOM :Τυχαία +STR_COLOUR_DEFAULT :Προεπιλογή # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}μίλια/ώρα @@ -1033,6 +1035,8 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Νοτιοαφ 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_MXN :Πεσος Μεξικου (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Οχήματα δρόμου @@ -1920,7 +1924,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Αλλα STR_CHEAT_SETUP_PROD :{LTBLUE}Ενεργοποίηση δυνατότητας αλλαγής τιμών παραγωγής: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Νέος Χρωματισμός +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Νέος Χρωματισμός STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Εμφάνιση γενικών χρωματικών μοτίβων STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Εμφάνιση χρωματικών μοτίβων τρένων @@ -2806,13 +2810,18 @@ STR_ABOUT_VERSION :{BLACK}Έκδο STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Η ομάδα του OpenTTD # Framerate display window +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Αριθμός στιγμών παιχνιδιού που προσομοιώνεται ανά δευτερόλεπτο. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Αριθμος των παραγμενων video frames ανα δευτερολεπτο STR_FRAMERATE_SPEED_FACTOR :{WHITE}Παράγοντας ταχύτητας τρέχοντος παιχνιδιού: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Πόσο γρήγορα εκτελείται το παιχνίδι αυτήν τη στιγμή, σε σύγκριση με την αναμενόμενη ταχύτητα στον κανονικό ρυθμό εξομοίωσης. STR_FRAMERATE_CURRENT :{WHITE}Τρέχον STR_FRAMERATE_AVERAGE :{WHITE}Μέσο STR_FRAMERATE_DATA_POINTS :{WHITE}Τα δεδομένα βασίζονται σε μετρήσεις {COMMA} STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} frames/δευτ. +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} frames/δευτ. ############ Leave those lines in this order!! STR_FRAMERATE_GL_ECONOMY :{WHITE} Διαχείριση φορτίου: STR_FRAMERATE_GL_TRAINS :Στιγμές τρένων: @@ -2858,6 +2867,8 @@ 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_OVERWRITE_TITLE :{WHITE}Αντικατάσταση Αρχείου +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Είστε σίγουροι οτι θέλετε να αντικαταστήσετε το υπάρχων αρχείο; STR_SAVELOAD_OSKTITLE :{BLACK}Δώστε το όνομα του παιχνιδιού προς αποθήκευση @@ -2975,7 +2986,9 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Έκδο STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Ελάχ. συμβατή έκδοση: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Παλέτα: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Προεπιλογή (D) STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Παράμετροι: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Κανένα STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Δεν υπάρχουν διαθέσιμες πληροφορίες STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Δεν βρέθηκε το ταυτοποιημένο αρχείο @@ -3433,6 +3446,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Κεντ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Επίπεδο παραγωγής: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Η βιομηχανία έχει ανακοινώσει άμεσο κλείσιμο! +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Απαιτεί: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 37630feeb0..bb4e56d489 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1826,7 +1826,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}שנה STR_CHEAT_SETUP_PROD :{LTBLUE}אפשר שינוי ערכי התפוקה: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}הגדרות צבע חדשות STR_LIVERY_GENERAL_TOOLTIP :{BLACK}הצג הגדרות צבע כלליות STR_LIVERY_TRAIN_TOOLTIP :{BLACK}הצג הגדרות צבע לרכבות diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 1b4de73eb1..2896a0b34e 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1867,7 +1867,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Aktuáli STR_CHEAT_SETUP_PROD :{LTBLUE}A nyersanyagüzemek termelése változtatható: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Új színséma STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Általános színsémák mutatása STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Vonat színsémák mutatása diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 7cb78a8398..2c9b2282ae 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1663,7 +1663,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Breyta u STR_CHEAT_SETUP_PROD :{LTBLUE}Leyfa breytingar á verðmæti framleiðslu: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nýtt Litaskema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Grunnlitur fyrirtækis STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Litaskema lesta diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 322b5840d9..0f7fe21256 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -1810,7 +1810,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Ubah tah STR_CHEAT_SETUP_PROD :{LTBLUE}Aktifkan modifikasi nilai produksi: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Warna tema baru STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Tampilkan skema warna umum STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Tampilkan skema warna kereta diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 450c8e9689..55ab4ec654 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1800,7 +1800,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Athraigh STR_CHEAT_SETUP_PROD :{LTBLUE}Cumasaigh luachanna táirgeachta a athrú: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Scéim Dathanna Nua STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Taispeáin scéimeanna dathanna ginearálta STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Taispeáin scéimeanna dathanna na dtraenacha diff --git a/src/lang/italian.txt b/src/lang/italian.txt index bd265fe7d3..81486a91bc 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1844,7 +1844,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Cambia l STR_CHEAT_SETUP_PROD :{LTBLUE}Permetti la modifica dei valori di produzione: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nuovo schema colori STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostra gli schemi di colorazione generali STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Mostra gli schemi di colorazione dei treni diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index d89ade38ae..9aed8efccf 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -1800,7 +1800,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}現在 STR_CHEAT_SETUP_PROD :{LTBLUE}生産量変更: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}コーポレートカラー STR_LIVERY_GENERAL_TOOLTIP :{BLACK}通常のコーポレートカラー(車両塗装色)を表示します STR_LIVERY_TRAIN_TOOLTIP :{BLACK}列車の塗装色を表示します diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 5de041dcf7..cc670da54a 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -2001,7 +2001,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Mutare a STR_CHEAT_SETUP_PROD :{LTBLUE}Sinere mutare productiones industriarum: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Schema Coloris Novum STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Monstrare schemata coloris generalia STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Monstrare schemata coloris traminum diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 34d12f9e6a..e68a3837d9 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1747,7 +1747,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Mainīt STR_CHEAT_SETUP_PROD :{LTBLUE}Ieslēgt ražojumu vērtības maiņu: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Jauna identitātes krāsu shēma STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Rādīt vispārējo identitates krāsu shēmas STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Rādīt vilcienu identitātes krāsu shēmas diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 0942333483..82f92f9709 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -2019,7 +2019,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Pakeisti STR_CHEAT_SETUP_PROD :{LTBLUE}Leisti keisti produkcijos vertes: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Naujos spalvos STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Rodyti pagrinidines spalvų parinktis STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Rodyti traukiniš spalvas diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 27e5f1594b..ee811c0efe 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1803,7 +1803,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Wiessel STR_CHEAT_SETUP_PROD :{LTBLUE}Erlaabt d'ännere vun de Produktiounswäerter: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Neie Faarfschema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Weis generell Faarfschemen STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Weis Zuch Faarfschemen diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 9bdbe9f443..0b95b6a190 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1561,7 +1561,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Tukar ta STR_CHEAT_SETUP_PROD :{LTBLUE}Bolehkan pengubahsuaian nilai-nilai pengeluaran: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Skim Warna Baru STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Tunjukkan skim warna am STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Tunjukkan skim warna keretapi diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 203166898a..e1cc630c0c 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1806,7 +1806,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Endre n STR_CHEAT_SETUP_PROD :{LTBLUE}Tillat endring av produksjonsmengder: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Ny firmafarge STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Vis generelle fargetemaer STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Vis togfargetemaer diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 28f6fb3e37..c951d2e8f3 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1723,7 +1723,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Byt nove STR_CHEAT_SETUP_PROD :{LTBLUE}Tillet endring av produksjonsmengder: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Ny firmafarge STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Syne generelle fargetema STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Syne togfargetema diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 081e216b3b..de316db554 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -2007,7 +2007,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Promena STR_CHEAT_SETUP_PROD :{LTBLUE}Dozvoliti promenu količine proizvodnje: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nova šema boja STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Prikaži generalnu mustru boja STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Prikaži mustre boja vozova diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index ff5c5ec4ec..f4fbf33813 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1810,7 +1810,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}改变 STR_CHEAT_SETUP_PROD :{LTBLUE}开启可调整产量模式:{ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}新色彩方案 STR_LIVERY_GENERAL_TOOLTIP :{BLACK}显示总体配色方案 STR_LIVERY_TRAIN_TOOLTIP :{BLACK}显示列车配色方案 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index f888fe61c0..c87cbaa038 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1868,7 +1868,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Zmeniť STR_CHEAT_SETUP_PROD :{LTBLUE}Povoliť zmenu objemu výroby: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nová farebná schéma STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Zobraziť všeobecné farebné schémy STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Zobraziť farebné schémy pre vlaky diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 2e6554ce58..aa79c4a8d9 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1954,7 +1954,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Spremeni STR_CHEAT_SETUP_PROD :{LTBLUE}Omogoči spreminjanje proizvodnih vrednosti: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nova barvna shema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Prikaz glavnih barvnih shem STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Prikaz barvnih shem vlakov diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 24349a53e5..9ed9ccd8a1 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1568,7 +1568,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}நட STR_CHEAT_SETUP_PROD :{LTBLUE}தயாரிப்பு மதிப்புகளை மாற்ற முடியும்: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}புதிய நிற கோட்பாடு STR_LIVERY_GENERAL_TOOLTIP :{BLACK}பொதுவான நிற கோட்பாடுகளைக் காட்டவும் STR_LIVERY_TRAIN_TOOLTIP :{BLACK}இரயில் நிற கோட்பாடுகளைக் காட்டவும் diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 88a78054d6..5f3742e85f 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1749,7 +1749,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}เป STR_CHEAT_SETUP_PROD :{LTBLUE}เปิดใช้งานการแก้ไขปริมาณผลผลิต: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}สร้างแบบสีใหม่ STR_LIVERY_GENERAL_TOOLTIP :{BLACK}แสดงแบบสีทั่วไป STR_LIVERY_TRAIN_TOOLTIP :{BLACK}แสดงแบบสีรถไฟ diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 135fed42b0..2046b5d1f2 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1800,7 +1800,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}變更 STR_CHEAT_SETUP_PROD :{LTBLUE}允許修改產量:{ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}新配色 STR_LIVERY_GENERAL_TOOLTIP :{BLACK}顯示通用配色 STR_LIVERY_TRAIN_TOOLTIP :{BLACK}顯示列車配色 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index f143a3deb9..1aef2bc8ff 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -1804,7 +1804,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Yılı d STR_CHEAT_SETUP_PROD :{LTBLUE}Üretim değerlerini değiştir: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Yeni Renk STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Genel renk şemalarını göster STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Tren renk düzenlerini göster diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index bb2e6afcb6..e7a4856d0f 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1928,7 +1928,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Змін STR_CHEAT_SETUP_PROD :{LTBLUE}Дозволити зміну рівня виробництва: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Нова кольорова схема STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Показати загальне фарбування STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Показати фарбування поїздів diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index 5649ca310f..aea0f9a5c7 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -1732,7 +1732,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Wizigje STR_CHEAT_SETUP_PROD :{LTBLUE}Stea oanpassen fan produksje ta: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Nei Kleurenskema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Lit gewoane kleurskemas sjen STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Lit kleurskema sjen fan treinen diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index eb14ae8035..2e2b23764d 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -1515,7 +1515,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}تغیی STR_CHEAT_SETUP_PROD :{LTBLUE}قابلیت تغییر سطح تولید صنایع: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}طرح رنگ جدید STR_LIVERY_GENERAL_TOOLTIP :{BLACK}نمایش طرح رنگهای اصلی STR_LIVERY_TRAIN_TOOLTIP :{BLACK}نمایش طرح رنگهای قطار diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index 0cc3ba7b68..752e471ef5 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -1412,7 +1412,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}موجو STR_CHEAT_SETUP_PROD :{LTBLUE}پیداوار میں تبدیلی کو فعال کریں: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}نئے رنگوں کا انتخاب STR_LIVERY_GENERAL_TOOLTIP :{BLACK}رنگوں کا عام انتخاب دکھائیں STR_LIVERY_TRAIN_TOOLTIP :{BLACK}ریل گاڑیوں کے رنگوں کا انتخاب دکھائیں @@ -2292,9 +2291,6 @@ STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURREN # Company view -STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL :{WHITE}{COMMA}پٹڑی { "کا" "کے" P} { "ٹکڑا" "ٹکڑے" P} -STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD :{WHITE}{COMMA} سڑک { "کا" "کے" P} { "ٹکڑا" "ٹکڑے" P} -STR_COMPANY_VIEW_INFRASTRUCTURE_WATER :{WHITE}{COMMA} پانی { "کا" "کے" P} { "ٹکڑا" "ٹکڑے" P} STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} اسٹیشن کی ٹائلیں STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{COMMA}{WHITE} ہوائی اڈے STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}کوئی نہیں diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 2dde004aab..b74c0e9a8e 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1816,7 +1816,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Thay đ STR_CHEAT_SETUP_PROD :{LTBLUE}Cho phép khả năng sửa giá trị sản xuất: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Cách Phối Màu Mới STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Hiển thị phối màu chung STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Hiển thị phối màu tàu hỏa diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 2ed53b3152..92dd920509 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1803,7 +1803,6 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Newid y STR_CHEAT_SETUP_PROD :{LTBLUE}Galluogi newid graddfeydd cynhyrchu: {ORANGE}{STRING} # Livery window -STR_LIVERY_CAPTION :{WHITE}Cynllun Lliw Newydd STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Dangos cynllun lliw cyffredinol STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Dangos cynllun lliw trenau From 5b74118ae77cd7c931fc833b174522b77cf00737 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sun, 3 Feb 2019 16:31:27 +0000 Subject: [PATCH 320/622] Update: Add changelog for 1.9.0-beta1 and prepare for release --- changelog.txt | 73 +++++++++++++++++++++++++++++++++++++++++++++ known-bugs.txt | 4 +-- os/debian/changelog | 6 ++++ 3 files changed, 81 insertions(+), 2 deletions(-) diff --git a/changelog.txt b/changelog.txt index 5e1540a1e0..2f981909eb 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,76 @@ +1.9.0-beta1 (2018-02-09) +------------------------------------------------------------------------ +Note: OpenTTD was migrated to GitHub for 1.9, so SVN revision and FlySpray numbers have been replaced with Pull Requests and Issue numbers +- Feature: Group liveries, and livery window usability enhancements (#7108) +- Feature: Overhaul of music system, support MPSMIDI music files (TTD DOS/TTO) (#6839) +- Feature: [Win32] Rewritten DMusic and WinMM music drivers +- Feature: [Win32] New XAudio2 sound driver +- Feature: [Linux] New Fluidsynth music driver +- Feature: Framerate display window (#6822) +- Feature: [NewGRF] Ability for industries & houses to produce and/or accept up to 16 different cargoes +- Feature #6610: Allow towns to build houses on road turns (#6758) +- Feature: Replace independent map scrolling GUI settings with single option, and add choice to not lock cursor position when scrolling (#6756) +- Feature #6459: API for querying network clients from GS (#6736) +- Feature: New Russian Ruble & Mexican Peso as currencies (#6678, #7035) +- Feature #4186: Append '(City)' after city names in the town directory +- Feature #986: Automatic save when losing connection to a network game +- Add: [NewGRF] Flag to hide rail types from construction (#7118) +- Add: [NewGRF] Airport animation trigger for plane landing (#6334) +- Add #4115: Default starting company colour setting (#6998) +- Add: Mixer feature for streaming sampled music +- Add #6460: [AI] start_date parameter for Random AIs on new game +- Add: BACKSPACE can be mapped as a hotkey +- Add: 32bpp SSE2 blitter palette animator (#6795) +- Change: Make ships turn slowly when changing direction and stop when going up or down a lock (#7065, #7150) +- Change: Improve ship pathfinder performance +- Change: Decouple GUI timing from game ticks (#6780) +- Change: Desert tiles are now half-desert if a neighboured tile is non-desert or sea/coast (#4754) +- Change: Gradually slow down aircraft speed on breakdown (#6932) +- Change: [NewGRF] Increase rail type & cargo type limits to 64 +- Change: [NewGRF] Increase size of persistent storage to 256 +- Change: [NewGRF] Use last OpenTTD SVN revision in NewGRF version number (#6843) +- Change: Clone tool in depot window now behaves like clone button in vehicle window (#6754) +- Change #6397: Keep town growth rate in sync with house count +- Change: Scale default FreeType font size selection by UI zoom level +- Change: [OSX] Reversed pinch to zoom behaviour +- Change: Switch town growth rate and counter to actual game ticks (#6763) +- Change: Non-tag revisions are now named '--g' +- Change: Rewrite several bits of documentation in markdown +- Fix: Reinitialise graph GUI on game restart (#7191) +- Fix: Potential crash during shutdown after unpacking downloaded content (#7185) +- Fix #6584: Text layout in engine preview dialogue +- Fix #6636: Airplanes could be sent to helicopter station depots +- Fix: Deadlock when launched with -n switch (#7103) +- Fix: Various corrections to town names in non-English languages (#7038, 7141) +- Fix: Only consider airport tiles when placing (for non-rectangular airports) (#6613) +- Fix: Spelling fixes on some Latin American town names +- Fix #7001: Pathfinders should see standard road stations as tiles where to reverse +- Fix #6676: Prevent helicopters from stopping in midair during some kinds of landing +- Fix: Remove need to use Ctrl+Click when building stations next to competitors (#6906) +- Fix: [NewGRF] Make VA2 operator 11 (ror) behave well-defined when rotating by 0 bits +- Fix #4109: Add more water checks to the Oil Rig layout +- Fix #6938: Incorrect value for "Cost to Clear" was displayed for Company Headquarters in tile inspector (#6939) +- Fix #6920: Make 9.8m/s^2 a common constant for TE-calculation +- Fix #6892: [Script] CONFIG_RANDOM did not use the full parameter range (#6902) +- Fix #6622: News message when GS constructs a town had empty company name +- Fix: [NewGRF] Action7 variable 0x85 had no bounds checks +- Fix #6875: Depot building cost did not include foundation build cost (#6883) +- Fix: Some pixels in ship autoreplace icon (sprite 106) were transparent +- Fix: Poor contrast in cargo dest flow legend window cargo labels +- Fix #6553: Make viewport button text unambiguous +- Fix: [OSX] Setting mouse-wheel to scroll the map does not disable pinch to zoom +- Fix #6969: Account for BOM when reading script files +- Fix #6898: Ability to use seeds above INT_MAX (#6936) +- Fix #6659: Bus stations could be demolished when not in demolish mode (#6815) +- Fix: One-way roads could be over-built by road stops regardless of road owner +- Fix: Use name of cargo instead of Passengers/Mail in town statistics (#6801) +- Fix: Prevent ships moving into docks after finishing (un)loading (#6791) +- Fix: Tractive effort was slightly too high as per NewGRF spec (#6785) +- Fix #6465: Add {NORMAL_FONT} and {MONO_FONT} control codes to GS strings (#6726) +- Fix: Four group action icons were misplaced and cropped +- Remove: PSP, WinCE support + + 1.8.0 (2018-04-01) ------------------------------------------------------------------------ (None) diff --git a/known-bugs.txt b/known-bugs.txt index 8d4fd2204b..1cd1dc3412 100644 --- a/known-bugs.txt +++ b/known-bugs.txt @@ -1,6 +1,6 @@ OpenTTD's known bugs -Last updated: 2018-11-05 -Release version: 1.9.0 +Last updated: 2019-02-09 +Release version: 1.9.0-beta1 ------------------------------------------------------------------------ diff --git a/os/debian/changelog b/os/debian/changelog index bb57ca39e8..7408b68d99 100644 --- a/os/debian/changelog +++ b/os/debian/changelog @@ -1,3 +1,9 @@ +openttd (1.9.0~beta1-0) unstable; urgency=low + + * New upstream release 1.9.0-beta1 + + -- OpenTTD Sat, 09 Feb 2019 16:00:00 +0000 + openttd (1.8.0-0) unstable; urgency=low * New upstream release 1.8.0 From b7ed49af337f876954f207329e960dc89edf7bb2 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 9 Feb 2019 15:26:28 +0100 Subject: [PATCH 321/622] Fix: [AzurePipelines] in case of a Pull Request, use that number (prefix with 'pr') as branchname Otherwise the branch name is always 'merge', which is not really useful or verbose. --- .../templates/release-prepare-source.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/azure-pipelines/templates/release-prepare-source.yml b/azure-pipelines/templates/release-prepare-source.yml index 22ec126b1f..b20bf0b350 100644 --- a/azure-pipelines/templates/release-prepare-source.yml +++ b/azure-pipelines/templates/release-prepare-source.yml @@ -5,7 +5,18 @@ steps: - script: | set -ex - git checkout -B ${BUILD_SOURCEBRANCHNAME} + + if [ -n "${SYSTEM_PULLREQUEST_PULLREQUESTNUMBER}" ]; then + # We are triggered from a GitHub Pull Request + git checkout -B pr${SYSTEM_PULLREQUEST_PULLREQUESTNUMBER} + elif [ "${BUILD_SOURCEBRANCHNAME}" = "merge" ] || [ "${BUILD_SOURCEBRANCHNAME}" = "head" ]; then + # We are manually triggered based on a GitHub Pull Request + PULLREQUESTNUMBER=$(echo ${BUILD_SOURCEBRANCH} | cut -d/ -f3) + git checkout -B pr${PULLREQUESTNUMBER} + else + git checkout -B ${BUILD_SOURCEBRANCHNAME} + fi + ./findversion.sh > .ottdrev ./azure-pipelines/changelog.sh > .changelog TZ='UTC' date +"%Y-%m-%d %H:%M UTC" > .release_date From 8c0bfb46377c6b528c658003086144f973d64a55 Mon Sep 17 00:00:00 2001 From: glx Date: Sat, 9 Feb 2019 15:45:54 +0100 Subject: [PATCH 322/622] Update: [AzurePipelines] NSIS is now part of the Hosted image --- azure-pipelines/templates/windows-dependency-nsis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/azure-pipelines/templates/windows-dependency-nsis.yml b/azure-pipelines/templates/windows-dependency-nsis.yml index a1ee8f81e5..9b54a3ac5f 100644 --- a/azure-pipelines/templates/windows-dependency-nsis.yml +++ b/azure-pipelines/templates/windows-dependency-nsis.yml @@ -4,8 +4,6 @@ parameters: steps: - bash: | set -ex - # NSIS will be part of the Hosted image in the next update. Till then, we install it ourself - choco install nsis -y mkdir nsis-plugin; cd nsis-plugin curl -L https://devs.openttd.org/~truebrain/nsis-plugins/Nsis7z.zip > Nsis7z.zip From 887e524e066cee3dc3307abcbccdf01fa7fb1d25 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 9 Feb 2019 16:49:42 +0100 Subject: [PATCH 323/622] Add: [AzurePipelines] build a stable release if a tag is created --- azure-pipelines-release-stable.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/azure-pipelines-release-stable.yml b/azure-pipelines-release-stable.yml index 3c42c6bee5..ee756ca9ee 100644 --- a/azure-pipelines-release-stable.yml +++ b/azure-pipelines-release-stable.yml @@ -1,4 +1,7 @@ -trigger: none +trigger: + branches: + include: + - refs/tags/* pr: none jobs: From 0151fe998a999b48b67afa5b96d9a4cd72246455 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sat, 9 Feb 2019 19:41:49 +0100 Subject: [PATCH 324/622] Fix 5f8354f3: Non-Windows builds did not get correct git hash Effect is that gamelog and network revisions indicate a git revision of 0, potentially causing issues. --- Makefile.src.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.src.in b/Makefile.src.in index 9cf3557c56..94534fd60f 100644 --- a/Makefile.src.in +++ b/Makefile.src.in @@ -90,7 +90,7 @@ MODIFIED := $(shell echo "$(VERSIONS)" | cut -f 3 -d' ') # Use autodetected revisions VERSION := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ') ISODATE := $(shell echo "$(VERSIONS)" | cut -f 2 -d' ') -GITHASH := $(shell echo "$(VERSIONS)" | cut -f 3 -d' ') +GITHASH := $(shell echo "$(VERSIONS)" | cut -f 4 -d' ') # Make sure we have something in VERSION and ISODATE ifeq ($(VERSION),) From 13b7e8774d813ab84a8e58f3d629e6e9ab3b8765 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 9 Feb 2019 20:13:28 +0100 Subject: [PATCH 325/622] Fix: [AzurePipelines] manifest.sh didn't know when it was a stable release In result, the name of the release was wrong, causing confusing in tools using the manifest.yaml. --- azure-pipelines/manifest.sh | 2 +- azure-pipelines/templates/release-manifest.yml | 7 +++++++ azure-pipelines/templates/release.yml | 3 +++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/azure-pipelines/manifest.sh b/azure-pipelines/manifest.sh index 4d11972777..d8f4f9aac9 100755 --- a/azure-pipelines/manifest.sh +++ b/azure-pipelines/manifest.sh @@ -15,7 +15,7 @@ if [ ! -e .version ] || [ ! -e .release_date ]; then fi # Find the name based on the version -if [ "${ISSTABLERELEASE}" = "true" ]; then +if [ -e .is_stable ]; then isTesting=$(cat .version | grep "RC\|beta" || true) if [ -z "${isTesting}" ]; then NAME="stable" diff --git a/azure-pipelines/templates/release-manifest.yml b/azure-pipelines/templates/release-manifest.yml index 5c076b30e9..9e8b486d5c 100644 --- a/azure-pipelines/templates/release-manifest.yml +++ b/azure-pipelines/templates/release-manifest.yml @@ -1,3 +1,6 @@ +parameters: + IsStableRelease: false + steps: - task: DownloadBuildArtifacts@0 displayName: 'Download all bundles' @@ -5,6 +8,10 @@ steps: downloadType: specific itemPattern: 'bundles/*' downloadPath: '$(Build.ArtifactStagingDirectory)' +- ${{ if eq(parameters.IsStableRelease, true) }}: + - script: | + touch .is_stable + displayName: 'Mark as stable release' - script: | set -ex ./azure-pipelines/manifest.sh ../a/bundles/ diff --git a/azure-pipelines/templates/release.yml b/azure-pipelines/templates/release.yml index 4daf66dedb..86f2be40ed 100644 --- a/azure-pipelines/templates/release.yml +++ b/azure-pipelines/templates/release.yml @@ -164,6 +164,9 @@ jobs: steps: - template: release-fetch-source.yml - template: release-manifest.yml + ${{ if eq(parameters.IsStableRelease, true) }}: + parameters: + IsStableRelease: true - template: release-bundles.yml parameters: CalculateChecksums: false From 6e211908588ab5272336d0d2db3bbb4020f7004f Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 9 Feb 2019 22:15:34 +0100 Subject: [PATCH 326/622] Update: Add changelog for 1.9.0-beta2 and prepare for release --- changelog.txt | 4 ++++ known-bugs.txt | 2 +- os/debian/changelog | 6 ++++++ os/rpm/openttd.spec | 4 ++-- os/windows/installer/install.nsi | 4 ++-- 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/changelog.txt b/changelog.txt index 2f981909eb..32eb4ca6d5 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,7 @@ +1.9.0-beta2 (2018-02-09) +------------------------------------------------------------------------ +- Fix: Non-Windows builds did not get correct git hash + 1.9.0-beta1 (2018-02-09) ------------------------------------------------------------------------ Note: OpenTTD was migrated to GitHub for 1.9, so SVN revision and FlySpray numbers have been replaced with Pull Requests and Issue numbers diff --git a/known-bugs.txt b/known-bugs.txt index 1cd1dc3412..bcb9c354a9 100644 --- a/known-bugs.txt +++ b/known-bugs.txt @@ -1,6 +1,6 @@ OpenTTD's known bugs Last updated: 2019-02-09 -Release version: 1.9.0-beta1 +Release version: 1.9.0-beta2 ------------------------------------------------------------------------ diff --git a/os/debian/changelog b/os/debian/changelog index 7408b68d99..e429487ec0 100644 --- a/os/debian/changelog +++ b/os/debian/changelog @@ -1,3 +1,9 @@ +openttd (1.9.0~beta2-0) unstable; urgency=low + + * New upstream release 1.9.0-beta2 + + -- OpenTTD Sat, 09 Feb 2019 23:00:00 +0000 + openttd (1.9.0~beta1-0) unstable; urgency=low * New upstream release 1.9.0-beta1 diff --git a/os/rpm/openttd.spec b/os/rpm/openttd.spec index 28f3666186..d16230f312 100644 --- a/os/rpm/openttd.spec +++ b/os/rpm/openttd.spec @@ -17,9 +17,9 @@ # Name: openttd -Version: 1.9.beta1 +Version: 1.9.beta2 Release: 0 -%define srcver 1.9.0-beta1 +%define srcver 1.9.0-beta2 Summary: An open source reimplementation of Chris Sawyer's Transport Tycoon Deluxe License: GPL-2.0 Group: Amusements/Games/Strategy/Other diff --git a/os/windows/installer/install.nsi b/os/windows/installer/install.nsi index 2c4c6f94b2..d0c933ca21 100644 --- a/os/windows/installer/install.nsi +++ b/os/windows/installer/install.nsi @@ -2,8 +2,8 @@ !define APPV_MAJOR 1 !define APPV_MINOR 9 !define APPV_MAINT 0 -!define APPV_BUILD 0 -!define APPV_EXTRA "-beta1" +!define APPV_BUILD 1 +!define APPV_EXTRA "-beta2" !define APPNAME "OpenTTD" ; Define application name !define APPVERSION "${APPV_MAJOR}.${APPV_MINOR}.${APPV_MAINT}${APPV_EXTRA}" ; Define application version From d242875d270e29f198cc62508b338f8949bf3404 Mon Sep 17 00:00:00 2001 From: PeterN Date: Sun, 10 Feb 2019 08:43:54 +0000 Subject: [PATCH 327/622] Fix #7197: Invalidate depot buttons when necessary. (#7212) --- src/vehicle.cpp | 2 ++ src/vehicle_cmd.cpp | 1 + src/vehicle_gui.cpp | 6 +++++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index f655bbafc5..f9a48a8986 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1490,6 +1490,8 @@ void VehicleEnterDepot(Vehicle *v) TriggerVehicle(v, VEHICLE_TRIGGER_DEPOT); v->MarkDirty(); + InvalidateWindowData(WC_VEHICLE_VIEW, v->index); + if (v->current_order.IsType(OT_GOTO_DEPOT)) { SetWindowDirty(WC_VEHICLE_VIEW, v->index); diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 9f8e038877..8284511dd4 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -585,6 +585,7 @@ CommandCost CmdStartStopVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, SetWindowWidgetDirty(WC_VEHICLE_VIEW, v->index, WID_VV_START_STOP); SetWindowDirty(WC_VEHICLE_DEPOT, v->tile); SetWindowClassesDirty(GetWindowClassForVehicleType(v->type)); + InvalidateWindowData(WC_VEHICLE_VIEW, v->index); } return CommandCost(); } diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index b4d6fdfabe..777716c646 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -2503,6 +2503,8 @@ public: this->GetWidget(WID_VV_SHOW_ORDERS)->tool_tip = STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP + v->type; this->GetWidget(WID_VV_SHOW_DETAILS)->tool_tip = STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP + v->type; this->GetWidget(WID_VV_CLONE)->tool_tip = STR_VEHICLE_VIEW_CLONE_TRAIN_INFO + v->type; + + this->UpdateButtonStatus(); } ~VehicleViewWindow() @@ -2732,7 +2734,7 @@ public: } } - virtual void OnGameTick() + void UpdateButtonStatus() { const Vehicle *v = Vehicle::Get(this->window_number); bool veh_stopped = v->IsStoppedInDepot(); @@ -2769,6 +2771,8 @@ public: * Nothing to do for this window. */ return; } + + this->UpdateButtonStatus(); } virtual bool IsNewGRFInspectable() const From 70e1c57f81006abd571b35ad7f876f2176cf413d Mon Sep 17 00:00:00 2001 From: glx Date: Sat, 9 Feb 2019 21:26:37 +0100 Subject: [PATCH 328/622] Fix: line ending issues with MSYS2 --- src/script/api/generate_widget.sh | 2 +- src/script/api/squirrel_export.sh | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/script/api/generate_widget.sh b/src/script/api/generate_widget.sh index 4bdbc31c70..96ef5dfb3a 100755 --- a/src/script/api/generate_widget.sh +++ b/src/script/api/generate_widget.sh @@ -20,5 +20,5 @@ if [ "$?" != "0" ]; then exit 1 fi -${AWK} -f generate_widget.awk script_window.hpp > script_window.tmp +${AWK} -v BINMODE=1 -f generate_widget.awk script_window.hpp > script_window.tmp mv script_window.tmp script_window.hpp diff --git a/src/script/api/squirrel_export.sh b/src/script/api/squirrel_export.sh index e1f5e8613c..14ff4e1477 100755 --- a/src/script/api/squirrel_export.sh +++ b/src/script/api/squirrel_export.sh @@ -49,7 +49,7 @@ for f in `ls ../*.hpp`; do # ScriptController has custom code, and should not be generated if [ "`basename ${f}`" = "script_controller.hpp" ]; then continue; fi - ${AWK} -v api=${apiuc} -f ${scriptdir}/squirrel_export.awk ${f} > ${bf}.tmp + ${AWK} -v BINMODE=1 -v api=${apiuc} -f ${scriptdir}/squirrel_export.awk ${f} > ${bf}.tmp if [ "`wc -l ${bf}.tmp | cut -d\ -f1`" = "0" ]; then if [ -f "${bf}.sq" ]; then @@ -90,7 +90,7 @@ echo " /Note: this line is a marker in squirrel_export.sh. Do not change!/ { print \$0 gsub(\"^.*/\", \"\") - split(\"`grep '^void SQ'${apiuc}'.*_Register(Squirrel \*engine)$' *.hpp.sq | sed 's/:.*$//' | sort | uniq | tr -d '\r' | tr '\n' ' '`\", files, \" \") + split(\"`grep '^void SQ'${apiuc}'.*_Register(Squirrel \*engine).\?$' *.hpp.sq | sed 's/:.*$//' | sort | uniq | tr -d '\r' | tr '\n' ' '`\", files, \" \") for (i = 1; files[i] != \"\"; i++) { print \"#include \\\"../script/api/${apilc}/\" files[i] \"\\\"\" \$0 @@ -104,7 +104,7 @@ echo " gsub(\"^.*/\", \"\") # List needs to be registered with squirrel before all List subclasses. print \" SQ${apiuc}List_Register(this->engine);\" \$0 - split(\"`grep '^void SQ'${apiuc}'.*_Register(Squirrel \*engine)$' *.hpp.sq | grep -v 'SQ'${apiuc}'List_Register' | sed 's/^.*void //;s/Squirrel \*/this->/;s/$/;/;s/_Register/0000Register/g;' | sort | sed 's/0000Register/_Register/g' | tr -d '\r' | tr '\n' ' '`\", regs, \" \") + split(\"`grep '^void SQ'${apiuc}'.*_Register(Squirrel \*engine).\?$' *.hpp.sq | grep -v 'SQ'${apiuc}'List_Register' | sed 's/^.*void //;s/Squirrel \*/this->/;s/$/;/;s/_Register/0000Register/g;' | sort | sed 's/0000Register/_Register/g' | tr -d '\r' | tr '\n' ' '`\", regs, \" \") for (i = 1; regs[i] != \"\"; i++) { if (regs[i] == \"SQ${apiuc}Controller_Register(this->engine);\") continue @@ -117,7 +117,7 @@ echo " { print \$0; } " > ${f}.awk -${AWK} -f ${f}.awk ${f} > ${f}.tmp +${AWK} -v BINMODE=1 -f ${f}.awk ${f} > ${f}.tmp if ! [ -f "${f}" ] || [ -n "`diff -I '$Id' ${f} ${f}.tmp 2> /dev/null || echo boo`" ]; then mv ${f}.tmp ${f} From 0df95811ce76f21032b3c5dae7cc93b9145ffa5d Mon Sep 17 00:00:00 2001 From: glx Date: Sat, 9 Feb 2019 21:40:27 +0100 Subject: [PATCH 329/622] Fix: generate.vbs used wrong data for basesets_vs142 --- projects/generate.vbs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/generate.vbs b/projects/generate.vbs index e8cf13d03d..aa91bd3164 100644 --- a/projects/generate.vbs +++ b/projects/generate.vbs @@ -405,5 +405,5 @@ generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs140.vcxproj", basesetl generate basesetfiles, ROOT_DIR & "/projects/basesets_vs140.vcxproj.filters", Null generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs141.vcxproj", basesetlangs generate basesetfiles, ROOT_DIR & "/projects/basesets_vs141.vcxproj.filters", Null -generate settingsvcxproj, ROOT_DIR & "/projects/basesets_vs142.vcxproj", settingscommand -generate settingsfiles, ROOT_DIR & "/projects/basesets_vs142.vcxproj.filters", Null +generate basesetvcxproj, ROOT_DIR & "/projects/basesets_vs142.vcxproj", basesetlangs +generate basesetfiles, ROOT_DIR & "/projects/basesets_vs142.vcxproj.filters", Null From 748d72202a1b1ec8e61f74afa99c363ee27a1ae3 Mon Sep 17 00:00:00 2001 From: glx Date: Sat, 9 Feb 2019 22:10:07 +0100 Subject: [PATCH 330/622] Fix: generate and generate.vbs were sorting differently --- projects/generate | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/projects/generate b/projects/generate index 595fa3acc6..3bd94a4fa2 100755 --- a/projects/generate +++ b/projects/generate @@ -10,6 +10,10 @@ # This file generates all project files based on sources.list, so everyone who # can start a bash process, can update the project files. +# Set neutral locale so sort behaves the same everywhere +LC_ALL=C +export LC_ALL + ROOT_DIR="`pwd`/.." if ! [ -e "$ROOT_DIR/source.list" ] then From 2ff10327d7962ee61f5eb45baa804e80fa966405 Mon Sep 17 00:00:00 2001 From: glx Date: Sun, 10 Feb 2019 01:46:05 +0100 Subject: [PATCH 331/622] Fix: projects/generate now keeps the line ending --- projects/generate | 110 ++++++++++++++++++++-------------------------- 1 file changed, 48 insertions(+), 62 deletions(-) diff --git a/projects/generate b/projects/generate index 3bd94a4fa2..cfedc8b32d 100755 --- a/projects/generate +++ b/projects/generate @@ -14,6 +14,15 @@ LC_ALL=C export LC_ALL +# We really need gawk for this! +AWK=gawk + +${AWK} --version > /dev/null 2> /dev/null +if [ "$?" != "0" ]; then + echo "This script needs gawk to run properly" + exit 1 +fi + ROOT_DIR="`pwd`/.." if ! [ -e "$ROOT_DIR/source.list" ] then @@ -70,7 +79,7 @@ with_cocoa="0" enable_directmusic="1" enable_fluidsynth="0" with_threads="1" -file_prefix="..\\\\src\\\\" +file_prefix="..\\\\\\\\src\\\\\\\\" safety_check() { li="" @@ -101,7 +110,8 @@ rm tmp.headers.* load_main_data() { # Read the source.list and process it - RES="`cat $1 | tr '\r' '\n' | awk ' + RES="`cat $1 | ${AWK} -v BINMODE=1 ' + { gsub("\\r", "", $0); } /^( *)#end/ { if (deep == skip) { skip -= 1; } deep -= 1; next; } /^( *)#else/ { if (deep == skip) { skip -= 1; } else if (deep - 1 == skip) { skip += 1; } next; } /^( *)#if/ { @@ -153,7 +163,7 @@ load_main_data() { { if (deep == skip) { gsub(" ", "", $0); - gsub("/", "\\\\", $0); + gsub("/", "\\\\\\\\", $0); split($0, file, "."); cltype = "ClInclude" if (file[2] == "cpp") cltype = "ClCompile"; @@ -181,13 +191,13 @@ load_lang_data() { continue fi RES="$RES -#2 +#2 #2 Generating "$i" language file -#2 ..\\objs\\strgen\\strgen.exe -s ..\\src\\lang -d ..\\bin\\lang \"%(FullPath)\" -#2 ..\\src\\lang\\english.txt;..\\objs\\strgen\\strgen.exe;%(AdditionalInputs) -#2 ..\\bin\\lang\\"$i".lng;%(Outputs) +#2 ..\\\\objs\\\\strgen\\\\strgen.exe -s ..\\\\src\\\\lang -d ..\\\\bin\\\\lang \"%(FullPath)\" +#2 ..\\\\src\\\\lang\\\\english.txt;..\\\\objs\\\\strgen\\\\strgen.exe;%(AdditionalInputs) +#2 ..\\\\bin\\\\lang\\\\"$i".lng;%(Outputs) #2 -#3 +#3 #3 Translations #3 " done @@ -198,16 +208,16 @@ load_lang_data() { load_settings_data() { RES="" RES2=" -#3..\\objs\\settings\\settings_gen.exe -o ..\\objs\\settings\\table\\settings.h -b ..\\src\\table\\settings.h.preamble -a ..\\src\\table\\settings.h.postamble" +#3..\\\\objs\\\\settings\\\\settings_gen.exe -o ..\\\\objs\\\\settings\\\\table\\\\settings.h -b ..\\\\src\\\\table\\\\settings.h.preamble -a ..\\\\src\\\\table\\\\settings.h.postamble" for i in `ls $1` do i=`basename $i` RES="$RES -#2 -#4 +#2 +#4 #4 INI #4 " - RES2="$RES2 ..\\src\\table\\"$i + RES2="$RES2 ..\\\\src\\\\table\\\\"$i done eval "$2=\"\$RES\$RES2\"" @@ -228,7 +238,7 @@ load_baseset_data() { FIRST=1 fi i=`basename $i` - RES2="$RES2..\\src\\lang\\$i.txt" + RES2="$RES2..\\\\src\\\\lang\\\\$i.txt" done RES2="$RES2" # Windows Folder sort and Linux Folder sort are slightly different. @@ -237,13 +247,13 @@ load_baseset_data() { do i=`basename $i` RES="$RES -#2 +#2 #2 Generating "$i" baseset metadata file -#2 cscript //nologo ..\\media\\baseset\\translations.vbs \"%(FullPath)\" \"\$(OutputPath)$i\" ..\\src\\lang ..\\bin\\baseset\\orig_extra.grf -#2 \$(Langs);..\\bin\\baseset\\orig_extra.grf;%(AdditionalInputs) -#2 ..\\bin\\baseset\\"$i";%(Outputs) +#2 cscript //nologo ..\\\\media\\\\baseset\\\\translations.vbs \"%(FullPath)\" \"\$(OutputPath)$i\" ..\\\\src\\\\lang ..\\\\bin\\\\baseset\\\\orig_extra.grf +#2 \$(Langs);..\\\\bin\\\\baseset\\\\orig_extra.grf;%(AdditionalInputs) +#2 ..\\\\bin\\\\baseset\\\\"$i";%(Outputs) #2 -#3 +#3 #3 Baseset Metadata #3 " done @@ -253,52 +263,28 @@ load_baseset_data() { generate() { echo "Generating $2..." - if [ $# -eq 3 ]; then - # Everything above the !!FILTERS!! marker - cat "$ROOT_DIR/projects/$2".in | tr '\r' '\n' | awk ' - /^$/ { next } - /!!FILTERS!!/ { stop = 1; } - { - if (stop == 0) { print $0 } - } - ' > "$ROOT_DIR/projects/$2" - - echo "$3" >> "$ROOT_DIR/projects/$2" - - # Everything below the !!FILTERS!! marker and above the !!FILES!! marker - cat "$ROOT_DIR/projects/$2".in | tr '\r' '\n' | awk ' - BEGIN { stop = 1; } - /^$/ { next } - /!!FILTERS!!/ { stop = 2; } - /!!FILES!!/ { stop = 1; } - { - if (stop == 0) { print $0 } - if (stop == 2) { stop = 0 } - } - ' >> "$ROOT_DIR/projects/$2" - else - # Everything above the !!FILES!! marker - cat "$ROOT_DIR/projects/$2".in | tr '\r' '\n' | awk ' - /^$/ { next } - /!!FILES!!/ { stop = 1; } - { - if (stop == 0) { print $0 } - } - ' > "$ROOT_DIR/projects/$2" - fi - - echo "$1" >> "$ROOT_DIR/projects/$2" - - # Everything below the !!FILES!! marker - cat "$ROOT_DIR/projects/$2".in | tr '\r' '\n' | awk ' - BEGIN { stop = 1; } + # Everything above the !!FILTERS!! marker + cat "$ROOT_DIR/projects/$2".in | ${AWK} -v BINMODE=1 -v FILTERS="$3" -v FILES="$1" ' + { CR = (match($0, "\\r$") > 0 ? "\r" : "") } /^$/ { next } - /!!FILES!!/ { stop = 2; } - { - if (stop == 0) { print $0 } - if (stop == 2) { stop = 0 } + /!!FILTERS!!/ { + split(FILTERS, filters, "\n"); + for (i = 1; filters[i] != ""; i++) { + print filters[i] CR; + } + next; } - ' >> "$ROOT_DIR/projects/$2" + /!!FILES!!/ { + split(FILES, files, "\n"); + for (i = 1; files[i] != ""; i++) { + print files[i] CR; + } + next; + } + { + print $0; + } + ' > "$ROOT_DIR/projects/$2" } safety_check "$ROOT_DIR/source.list" From 148e5b41d668a82e866f70d559dead0d5ffbeb99 Mon Sep 17 00:00:00 2001 From: Eddi-z <43699911+Eddi-z@users.noreply.github.com> Date: Sun, 10 Feb 2019 18:45:48 +0100 Subject: [PATCH 332/622] Change: Skip reliability decay if servicing is disabled --- src/vehicle.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index f9a48a8986..37afa6cb8c 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1222,7 +1222,10 @@ void CheckVehicleBreakdown(Vehicle *v) int rel, rel_old; /* decrease reliability */ - v->reliability = rel = max((rel_old = v->reliability) - v->reliability_spd_dec, 0); + if (!_settings_game.order.no_servicing_if_no_breakdowns || + _settings_game.difficulty.vehicle_breakdowns != 0) { + v->reliability = rel = max((rel_old = v->reliability) - v->reliability_spd_dec, 0); + } if ((rel_old >> 8) != (rel >> 8)) SetWindowDirty(WC_VEHICLE_DETAILS, v->index); if (v->breakdown_ctr != 0 || (v->vehstatus & VS_STOPPED) || From 4d5d21be7668ae90d6f3c916ad754b719b2f2af5 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 9 Feb 2019 23:34:06 +0100 Subject: [PATCH 333/622] Fix: [AzurePipelines] always list the full changelog since last stable --- azure-pipelines/changelog.sh | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/azure-pipelines/changelog.sh b/azure-pipelines/changelog.sh index 71bc56fac7..33eb8a78d4 100755 --- a/azure-pipelines/changelog.sh +++ b/azure-pipelines/changelog.sh @@ -2,13 +2,9 @@ tag=$(git describe --tags 2>/dev/null) -# If we are a tag, show the part of the changelog that matches the tag. -# In case of a stable, also show all betas and RCs. +# If we are a tag, show the part of the changelog till (but excluding) the last stable if [ -n "$tag" ]; then - grep="." - if [ "$(echo $tag | grep '-')" = "" ]; then - grep='^[0-9]\.[0-9]\.[0-9][^-]' - fi + grep='^[0-9]\.[0-9]\.[0-9][^-]' next=$(cat changelog.txt | grep '^[0-9]' | awk 'BEGIN { show="false" } // { if (show=="true") print $0; if ($1=="'$tag'") show="true"} ' | grep "$grep" | head -n1 | sed 's/ .*//') cat changelog.txt | awk 'BEGIN { show="false" } /^[0-9].[0-9].[0-9]/ { if ($1=="'$next'") show="false"; if ($1=="'$tag'") show="true";} // { if (show=="true") print $0 }' exit 0 From 13af2b88b4d301d67a483e5d293acf0b2d9383f2 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 10 Feb 2019 19:45:45 +0100 Subject: [PATCH 334/622] Update: Translations from eints russian: 3 changes by Lone_Wolf --- src/lang/russian.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/russian.txt b/src/lang/russian.txt index ed24128997..e03a395f3b 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1539,7 +1539,7 @@ 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 :Автосохранение: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Укажите интервал между автоматическими сохранениями STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Использовать {STRING} формат даты для имён сохранений @@ -1651,7 +1651,7 @@ STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Первое т 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_COMPANY_INFORMATION :Информация о Компании: {STRING} +STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Информация о компании: {STRING} STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Показывать новости об основании и риске банкротства транспортных компаний STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN :Открытие предприятий: {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN_HELPTEXT :Показывать новости об открывающихся предприятиях @@ -2367,7 +2367,7 @@ STR_CONTENT_NAME_CAPTION_TOOLTIP :{BLACK}Наим STR_CONTENT_MATRIX_TOOLTIP :{BLACK}Нажмите на строке для просмотра подробностей{}Отметьте чекбокс для загрузки STR_CONTENT_SELECT_ALL_CAPTION :{BLACK}Выбрать всё STR_CONTENT_SELECT_ALL_CAPTION_TOOLTIP :{BLACK}Пометить весь контент для загрузки -STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK}Выбрать обновл. +STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK}Выбрать обновления STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}Отметить для загрузки обновления для имеющегося контента STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK}Снять выделение STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}Ничего не загружать From 22f33fdd08aa2957f71acf11063da98b96a89712 Mon Sep 17 00:00:00 2001 From: PeterN Date: Sun, 10 Feb 2019 21:06:09 +0000 Subject: [PATCH 335/622] Fix 148e5b41d6: Uninitialized variable usage. (#7216) --- src/vehicle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 37afa6cb8c..f4dc0c4ddb 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1225,8 +1225,8 @@ void CheckVehicleBreakdown(Vehicle *v) if (!_settings_game.order.no_servicing_if_no_breakdowns || _settings_game.difficulty.vehicle_breakdowns != 0) { v->reliability = rel = max((rel_old = v->reliability) - v->reliability_spd_dec, 0); + if ((rel_old >> 8) != (rel >> 8)) SetWindowDirty(WC_VEHICLE_DETAILS, v->index); } - if ((rel_old >> 8) != (rel >> 8)) SetWindowDirty(WC_VEHICLE_DETAILS, v->index); if (v->breakdown_ctr != 0 || (v->vehstatus & VS_STOPPED) || _settings_game.difficulty.vehicle_breakdowns < 1 || From cac2f6226c5cb81efb6aea747e3ef896504bca03 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 10 Feb 2019 22:34:55 +0000 Subject: [PATCH 336/622] Codechange: In CmdCompanyCtrl, move client_id assignment to where it is used, and document bit usage better. --- src/company_cmd.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 77572c5af3..8cc876751c 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -816,7 +816,9 @@ void CompanyAdminRemove(CompanyID company_id, CompanyRemoveReason reason) * @param p1 various functionality * - bits 0..15: CompanyCtrlAction * - bits 16..24: CompanyID - * @param p2 ClientID + * @param p2 various depending on CompanyCtrlAction + * - bits 0..31: ClientID (with CCA_NEW) + * - bits 0..1: CompanyRemoveReason (with CCA_DELETE) * @param text unused * @return the cost of this operation or an error */ @@ -824,9 +826,6 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 { InvalidateWindowData(WC_COMPANY_LEAGUE, 0, 0); CompanyID company_id = (CompanyID)GB(p1, 16, 8); -#ifdef ENABLE_NETWORK - ClientID client_id = (ClientID)p2; -#endif /* ENABLE_NETWORK */ switch ((CompanyCtrlAction)GB(p1, 0, 16)) { case CCA_NEW: { // Create a new company @@ -836,6 +835,8 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 #ifdef ENABLE_NETWORK /* Has the network client a correct ClientIndex? */ if (!(flags & DC_EXEC)) return CommandCost(); + + ClientID client_id = (ClientID)p2; NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id); #ifndef DEBUG_DUMP_COMMANDS /* When replaying the client ID is not a valid client; there From 75d3054ae41251741620c2759a1bf3501570b481 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 11 Feb 2019 19:45:43 +0100 Subject: [PATCH 337/622] Update: Translations from eints faroese: 1 change by JayPee german: 1 change by ShadowCop norwegian (bokmal): 96 changes by Leifbk --- src/lang/faroese.txt | 1 + src/lang/german.txt | 2 +- src/lang/norwegian_bokmal.txt | 108 ++++++++++++++++++++++++++++++---- 3 files changed, 98 insertions(+), 13 deletions(-) diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index e1fde3e3e8..72c497240d 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -453,6 +453,7 @@ STR_ABOUT_MENU_SCREENSHOT :Skermmynd STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Suma in skermmynd STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Vanliga suma skermmynd STR_ABOUT_MENU_GIANT_SCREENSHOT :Skermmynd av øllum kortinum +STR_ABOUT_MENU_SHOW_FRAMERATE :Vís mynda títtleika STR_ABOUT_MENU_ABOUT_OPENTTD :Um 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite aligner STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Skift millum bindingar kassar diff --git a/src/lang/german.txt b/src/lang/german.txt index bf6ce994f8..e0bc195e5b 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1776,7 +1776,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Prüfe, STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Zeige KI- und Skripteinstellungen STR_INTRO_TOOLTIP_QUIT :{BLACK}OpenTTD beenden -STR_INTRO_BASESET :{BLACK}Dem momentan ausgewählten Basisgrafiken fehl{P 0 "t" "en"} {NUM} Sprite{P 0 "" s}. Bitte überprüfe, ob es Updates für die Basisgrafiken gibt. +STR_INTRO_BASESET :{BLACK}Den momentan ausgewählten Basisgrafiken fehl{P 0 "t" "en"} {NUM} Sprite{P 0 "" "s"}. Bitte überprüfe, ob es Updates für die Basisgrafiken gibt. STR_INTRO_TRANSLATION :{BLACK}Dieser Übersetzung fehl{P 0 t en} {NUM} String{P "" s}. Bitte hilf, OpenTTD zu verbessern und melde Dich als Übersetzer an. Siehe readme.txt für weitere Details. # Quit window diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index e1cc630c0c..48f088ad57 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -191,6 +191,8 @@ STR_COLOUR_ORANGE :Oransje STR_COLOUR_BROWN :Brun STR_COLOUR_GREY :Grå STR_COLOUR_WHITE :Hvit +STR_COLOUR_RANDOM :Tilfeldig +STR_COLOUR_DEFAULT :Standard # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mi/t @@ -477,6 +479,7 @@ STR_ABOUT_MENU_SCREENSHOT :Skjermbilde STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Fullt forstørret skjermbilde STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Normalt forstørret skjermbilde STR_ABOUT_MENU_GIANT_SCREENSHOT :Skjermbilde av hele kartet +STR_ABOUT_MENU_SHOW_FRAMERATE :Vis bildehastighet STR_ABOUT_MENU_ABOUT_OPENTTD :Om 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Spriteforskyver STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Vis/skjul markeringsramme @@ -652,6 +655,7 @@ STR_MUSIC_RULER_MARKER :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Ingen musikk tilgjengelig STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}«{STRING}» STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Spor STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Tittel @@ -672,11 +676,14 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Skru av/ STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Vis musikkspormeny # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Musikkprogram - '{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Sporliste STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Program - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Tøm +STR_PLAYLIST_CHANGE_SET :{BLACK}Endre sett STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Slett gjeldende program (gjelder bare Egendefinert 1 og 2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK} Bytt musikk til et annet installert sett STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klikk på et musikkspor for å legge til gjeldende program (Gjelder bare egendefinert 1 og 2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klikk på et musikkspor for å fjerne det fra nåværende program (Gjelder bare egendefinert 1 og 2) @@ -812,6 +819,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Sjef) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} sponset grunnleggelsen av den nye byen {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}En ny by kalt {TOWN} har blitt reist! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Ny{G "" "" tt} {STRING} blir anlagt i nærheten av {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Ny{G "" "" tt} {STRING} plantes i nærheten av {TOWN}! @@ -881,8 +889,8 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Tilleggsvindu {COMMA} STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopier til tilleggsvindu STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopier hovedvisningen til dette tilleggsvinduet -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Lim inn fra tilleggsvindu -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Kopier plasseringen av dette tilleggsvinduet til hovedvisningen +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Endre hovedsynsfelt +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}flytt plasseringen i dette tilleggsvinduet til hovedvisningen # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Spillinnstillinger @@ -918,12 +926,14 @@ STR_GAME_OPTIONS_CURRENCY_TRY :Tyrkisk lire (T STR_GAME_OPTIONS_CURRENCY_SKK :Slovakisk koruna (SKK) STR_GAME_OPTIONS_CURRENCY_BRL :Brasiliansk real (BRL) STR_GAME_OPTIONS_CURRENCY_EEK :Estlandsk krone (EEK) -STR_GAME_OPTIONS_CURRENCY_LTL :Litauiske litas (LTL) -STR_GAME_OPTIONS_CURRENCY_KRW :Sørkoreanske won (KRW) +STR_GAME_OPTIONS_CURRENCY_LTL :Litauisk litas (LTL) +STR_GAME_OPTIONS_CURRENCY_KRW :Sørkoreansk won (KRW) STR_GAME_OPTIONS_CURRENCY_ZAR :Sørafrikanske rand (ZAR) STR_GAME_OPTIONS_CURRENCY_CUSTOM :Egendefinert... -STR_GAME_OPTIONS_CURRENCY_GEL :Georgianske Lari (GEL) -STR_GAME_OPTIONS_CURRENCY_IRR :Iranske Rial (IRR) +STR_GAME_OPTIONS_CURRENCY_GEL :Georgisk lari (GEL) +STR_GAME_OPTIONS_CURRENCY_IRR :Iransk rial (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Ny russisk rubel (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Meksikansk peso (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Kjøretøy @@ -1254,6 +1264,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Det er i STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Vedlikehold av infrastruktur: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Når aktivert, medfører infrastruktur vedlikeholdskostnader. Kostnadene vokser over-proporsjonalt med nettverkets størrelse, og påvirker dermed større selskaper mer enn de små +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Startifarge for firmaet: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Velg startfarge for firmaet STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Flyplasser utgår aldri: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Aktivering av denne innstillingen gjør at hver type flyplass forblir tilgjengelig for alltid etter at sin introduksjon @@ -1277,9 +1289,9 @@ STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} måned{ STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} måned{P 0 "" er} etter STR_CONFIG_SETTING_AUTORENEW_MONEY :Minimum formue for autofornyelse av kjøretøy: {STRING} STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Minste pengemengde som må være igjen i banken for å vurdere automatisk fornying av kjøretøy -STR_CONFIG_SETTING_ERRMSG_DURATION :Varighet av error-melding: {STRING} +STR_CONFIG_SETTING_ERRMSG_DURATION :Varighet av feilmelding: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Varighet for visning av feilmeldinger i et rødt vindu. Vær oppmerksom på at noen (kritiske) feilmeldinger ikke lukkes automatisk etter dette tidspunktet, men må lukkes manuelt -STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} andre{P 0 "" s} +STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} sekund{P 0 "" er} STR_CONFIG_SETTING_HOVER_DELAY :Vis verktøytips: {STRING} STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Forsinkelse før verktøytips vises når musen svever over elementer i grensesnittet. Alternativt kan verktøytips bindes til den høyre museknappen STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Hovre i {COMMA} millisekunder{P 0 "" s} @@ -1338,6 +1350,12 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Farge på terre STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Grønn STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Mørkegrønn STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Fiolett +STR_CONFIG_SETTING_SCROLLMODE :Rulleoppførsel for vindu: {STRING} +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Oppførsel ved rulling av kart +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Flytt synsfelt med høyre museknapp, museposisjon låst +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Rull kartet med høyre museknapp, museposisjon låst +STR_CONFIG_SETTING_SCROLLMODE_RMB :Rull kartet med høyre museknapp +STR_CONFIG_SETTING_SCROLLMODE_LMB :Rull kartet med venstre museknapp STR_CONFIG_SETTING_SMOOTH_SCROLLING :Myk rulling: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Velge hvordan synsfeltet ruller til en bestemt posisjon når du klikker på det lille kartet, eller ved utstedelse av en kommando for å gå til et bestemt objekt på kartet. Hvis aktivert, ruller synsfeltet jevnt, og hvis deaktivert hopper det direkte til det valgte punktet STR_CONFIG_SETTING_MEASURE_TOOLTIP :Vis målingsverktøy ved bruk av byggingsverktøy: {STRING} @@ -1806,6 +1824,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Endre n STR_CHEAT_SETUP_PROD :{LTBLUE}Tillat endring av produksjonsmengder: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Firmafarge STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Vis generelle fargetemaer STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Vis togfargetemaer @@ -2282,6 +2301,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Symbolfo STR_LINKGRAPH_LEGEND_ALL :{BLACK}Alle STR_LINKGRAPH_LEGEND_NONE :{BLACK}Ingen STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Velg selskaper som skal vises +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}ubrukt @@ -2367,8 +2387,8 @@ STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Avansert STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Enveis avansert signal (lyssignal){}Et avansert signal tillater flere tog å kjøre samtidig på samme signalblokk, dersom togene kan reservere en rute til et trygt stoppested . Enveis avanserte signaler kan ikke passeres bakfra. STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Konverter signal{}Konverterer signaler til den valgte signaltypen. Ctrl+klikk vil endre eksisterende variant. Shift+klikk viser kostnadsestimat STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Signaltetthet ved dra-og-slipp -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Senk signaltetthet ved dra-og-slipp -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Øk signaltetthet ved dra-og-slipp +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Senk signalavstand ved dra-og-slipp +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Øk signalavstand ved dra-og-slipp # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Velg jernbanebrotype @@ -2691,9 +2711,52 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD-teamet # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Bildehastighet +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simuleringshastighet: {STRING} +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Antall spill-tikk per sekund. +STR_FRAMERATE_RATE_BLITTER :{BLACK}Bildehastighet: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Antall bilder tegnet per sekund. +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Gjeldende spillhastighetsfaktor: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Hvor raskt spillet kjører i forhold til forventet hastighet ved normal simulering. +STR_FRAMERATE_CURRENT :{WHITE}Gjeldende +STR_FRAMERATE_AVERAGE :{WHITE}Middels +STR_FRAMERATE_DATA_POINTS :{BLACK}Data basert på {COMMA} målinger +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} bilder/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} Bilder/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} frames/s +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{BLACK}Spill-løkke totalt: +STR_FRAMERATE_GL_ECONOMY :{BLACK} Godshåndtering: +STR_FRAMERATE_GL_TRAINS :{BLACK} Tog-tikk: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Veikjøretøy-tikk: +STR_FRAMERATE_GL_SHIPS :{BLACK} Skips-tikk: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Fly-tikk: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Spillverden-tikk: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Koblingsgraf-etterslep: +STR_FRAMERATE_DRAWING :{BLACK}Grafikktegning: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Synsfelt for spillverden: +STR_FRAMERATE_VIDEO :{BLACK}Video output: +STR_FRAMERATE_SOUND :{BLACK}Lydmiksing: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Spill-løkke +STR_FRAMETIME_CAPTION_GL_ECONOMY :Godshåndtering +STR_FRAMETIME_CAPTION_GL_TRAINS :Tog-tikk +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Veikjøretøy-tikk +STR_FRAMETIME_CAPTION_GL_SHIPS :Skips-tikk +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Fly-tikk +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Verdens-tikk +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Koblingsgrad-etterslep +STR_FRAMETIME_CAPTION_DRAWING :Grafikktegning +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Tegning av synsfelt for spillverden +STR_FRAMETIME_CAPTION_VIDEO :Video output +STR_FRAMETIME_CAPTION_SOUND :Lydmiksing ############ End of leave-in-this-order @@ -2719,6 +2782,9 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Spilldet STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Ingen informasjon tilgjengelig. STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtrer streng: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Overskriv fil +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Er du sikker på at du vil overskrive eksisterende fil? STR_SAVELOAD_OSKTITLE :{BLACK}Skriv inn et navn på spillet som skal lagres @@ -2836,7 +2902,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versjon: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. kompatibel versjon: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palett: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Default (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Default (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Legacy (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Legacy (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parametre: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Ingen STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Ingen informasjon tilgjengelig STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Matchende fil ble ikke funnet @@ -2854,7 +2925,7 @@ STR_SAVE_PRESET_SAVE :{BLACK}Lagre STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Lagre forhåndsinnstillingen med det valgte navnet # NewGRF parameters window -STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Forandre NewGRF-parametre +STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Endre NewGRF-parametre STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Lukk STR_NEWGRF_PARAMETERS_RESET :{BLACK}Tilbakestill STR_NEWGRF_PARAMETERS_RESET_TOOLTIP :{BLACK}Sett alle parametere til standardverdi @@ -2917,6 +2988,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Leste forbi slu STR_NEWGRF_ERROR_GRM_FAILED :Etterspurte GRF-ressurser ikke tilgjengelig (figur {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} ble deaktivert av {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ugyldig/ukjent sprite layout-format (figur {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :For mange elementer i fortegnelse over eiendomsverdier (sprite {3:NUM}, property {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ugyldig industriprodukjson callback (sprite {3:NUM}, "{1:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Advarsel! @@ -2981,13 +3054,15 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Skriv in STR_TOWN_DIRECTORY_CAPTION :{WHITE}Byer STR_TOWN_DIRECTORY_NONE :{ORANGE}- Ingen - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (By){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Bynavn - klikk på navnet for å gå til byen. Ctrl+klikk åpner et nytt tilleggsvindu over byen STR_TOWN_POPULATION :{BLACK}Verdensbefolkning: {COMMA} # Town view window STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} -STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (By) +STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Storby) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Innbyggertall: {ORANGE}{COMMA}{BLACK} Antall hus: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} siste måned: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Varebehov for byvekst: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} påkrevd STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} nødvendig om vinteren @@ -3292,6 +3367,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Gå til STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produksjonsnivå: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Næringen har annonsert snarlig nedleggelse! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Trenger: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produserer: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Krever: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} @@ -3349,6 +3427,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupper STR_GROUP_CREATE_TOOLTIP :{BLACK}Klikk for å opprette en gruppe STR_GROUP_DELETE_TOOLTIP :{BLACK}Fjern den valgte gruppen STR_GROUP_RENAME_TOOLTIP :{BLACK}Gi nytt navn på den valgte gruppen +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Endre firmafarger for valgt gruppe STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klikk for å beskytte denne gruppen fra global autoerstatning STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Slette gruppe @@ -3392,6 +3471,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapasite STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Lokomotivvogner: {GOLD}+{POWER}{BLACK} Vekt: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Kan bygges om til: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Alle varetyper +STR_PURCHASE_INFO_NONE :Ingen STR_PURCHASE_INFO_ALL_BUT :Alt utenom {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Maks trekkraft: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Rekkevidde: {GOLD}{COMMA} ruter @@ -3791,6 +3871,7 @@ STR_ORDER_CONDITIONAL_AGE :Alder (år) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Trenger vedlikehold STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Alltid STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Gjenstående levetid (år) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maksimal pålitelighet STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Hvordan sammenligne kjøretøyets data til den gitte verdi STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :er lik @@ -4224,6 +4305,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... denn STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... veien vender i feil retning STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... gjennomkjøringsstopper kan ikke ha hjørner STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... gjennomkjøringsstopper kan ikke ha kryss +STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... veien er enveiskjørt eller blokkert # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Kan ikke fjerne del av stasjonen... @@ -4475,6 +4557,8 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Originale lyder STR_BASESOUNDS_WIN_DESCRIPTION :Originale lyder fra Transport Tycoon Deluxe for Windows. STR_BASESOUNDS_NONE_DESCRIPTION :En lydpakke uten noen lyder. STR_BASEMUSIC_WIN_DESCRIPTION :Original musikk fra Transport Tycoon Deluxe for Windows. +STR_BASEMUSIC_DOS_DESCRIPTION :Original Transport Tycoon Deluxe DOS edition music. +STR_BASEMUSIC_TTO_DESCRIPTION :Original Transport Tycoon (Original/World Editor) DOS edition music. STR_BASEMUSIC_NONE_DESCRIPTION :En musikkpakke uten noe musikk. ##id 0x2000 From aa737715ddef17f448e4121199bd10c0e70fcaaa Mon Sep 17 00:00:00 2001 From: PeterN Date: Mon, 11 Feb 2019 18:59:55 +0000 Subject: [PATCH 338/622] Fix #7151: AI start date deviation was still applied when not set to a random AI. (#7223) --- src/ai/ai_config.cpp | 9 +++++++++ src/ai/ai_config.hpp | 4 +--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/ai/ai_config.cpp b/src/ai/ai_config.cpp index 20e913c2e9..a782814786 100644 --- a/src/ai/ai_config.cpp +++ b/src/ai/ai_config.cpp @@ -35,6 +35,15 @@ ScriptConfigItem _start_date_config = { false }; +AIConfig::AIConfig(const AIConfig *config) : ScriptConfig(config) +{ + /* Override start_date as per AIConfig::AddRandomDeviation(). + * This is necessary because the ScriptConfig constructor will instead call + * ScriptConfig::AddRandomDeviation(). */ + int start_date = config->GetSetting("start_date"); + this->SetSetting("start_date", start_date != 0 ? max(1, this->GetSetting("start_date")) : 0); +} + /* static */ AIConfig *AIConfig::GetConfig(CompanyID company, ScriptSettingSource source) { AIConfig **config; diff --git a/src/ai/ai_config.hpp b/src/ai/ai_config.hpp index 600ae1af93..30c6f84bbd 100644 --- a/src/ai/ai_config.hpp +++ b/src/ai/ai_config.hpp @@ -26,9 +26,7 @@ public: ScriptConfig() {} - AIConfig(const AIConfig *config) : - ScriptConfig(config) - {} + AIConfig(const AIConfig *config); class AIInfo *GetInfo() const; From 6b5ebe2b098994abd9514ff59b64bae7d0313fa6 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 12 Feb 2019 19:45:44 +0100 Subject: [PATCH 339/622] Update: Translations from eints english (us): 64 changes by njn polish: 2 changes by McZapkie danish: 1 change by njn french: 2 changes by glx --- src/lang/danish.txt | 1 + src/lang/english_US.txt | 65 ++++++++++++++++++++++++++++++++++++++++- src/lang/french.txt | 2 ++ src/lang/polish.txt | 2 ++ 4 files changed, 69 insertions(+), 1 deletion(-) diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 906e5ff1d5..c415430b97 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -2779,6 +2779,7 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Ingen in STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} STR_SAVELOAD_FILTER_TITLE :{BLACK}Filter-udtryk: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Overskriv fil STR_SAVELOAD_OSKTITLE :{BLACK}Skriv et navn til det gemte spil diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 4afd9de274..0f3baee134 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -189,6 +189,8 @@ STR_COLOUR_ORANGE :Orange STR_COLOUR_BROWN :Brown STR_COLOUR_GREY :Gray STR_COLOUR_WHITE :White +STR_COLOUR_RANDOM :Random +STR_COLOUR_DEFAULT :Default # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -475,6 +477,7 @@ STR_ABOUT_MENU_SCREENSHOT :Screenshot STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Fully zoomed in screenshot STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Default zoom screenshot STR_ABOUT_MENU_GIANT_SCREENSHOT :Whole map screenshot +STR_ABOUT_MENU_SHOW_FRAMERATE :Show frame rate STR_ABOUT_MENU_ABOUT_OPENTTD :About 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite aligner STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Toggle bounding boxes @@ -814,6 +817,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(President) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} sponsored construction of new town {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}A new town called {TOWN} has been constructed! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}New {STRING} under construction near {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}New {STRING} being planted near {TOWN}! @@ -926,6 +930,8 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :South African R STR_GAME_OPTIONS_CURRENCY_CUSTOM :Custom... STR_GAME_OPTIONS_CURRENCY_GEL :Georgian Lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Iranian Rial (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :New Russian Ruble (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Mexican Peso (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Road vehicles @@ -1255,6 +1261,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Changing STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Infrastructure maintenance: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :When enabled, infrastructure causes maintenance costs. The cost grows over-proportional with the network size, thus affecting bigger companies more than smaller ones +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Starting company color: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Choose starting color for the company STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Airports never expire: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Enabling this setting makes each airport type stay available forever after its introduction @@ -1813,6 +1821,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Change c STR_CHEAT_SETUP_PROD :{LTBLUE}Enable modifying production values: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Color Scheme STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Show general color schemes STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Show train color schemes @@ -2374,7 +2383,7 @@ STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Path Sig STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}One-way Path Signal (electric){}A path signal allows more than one train to enter a signal block at the same time, if the train can reserve a path to a safe stopping point. One-way path signals can't be passed from the back side STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Signal Convert{}When selected, clicking an existing signal will convert it to the selected signal type and variant. Ctrl+Click will toggle the existing variant. Shift+Click shows estimated conversion cost STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Dragging signal density -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Decrease dragging signal density +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Decrease dragging signal distance STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Increase dragging signal density # Bridge selection window @@ -2698,9 +2707,51 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 The OpenTTD team # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Frame rate +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulation rate: {STRING} +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Number of game ticks simulated per second. +STR_FRAMERATE_RATE_BLITTER :{BLACK}Graphics frame rate: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Number of video frames rendered per second. +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Current game speed factor: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}How fast the game is currently running, compared to the expected speed at normal simulation rate. +STR_FRAMERATE_CURRENT :{WHITE}Current +STR_FRAMERATE_AVERAGE :{WHITE}Average +STR_FRAMERATE_DATA_POINTS :{BLACK}Data based on {COMMA} measurements +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} frames/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} frames/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} frames/s +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{BLACK}Game loop total: +STR_FRAMERATE_GL_ECONOMY :{BLACK} Cargo handling: +STR_FRAMERATE_GL_TRAINS :{BLACK} Train ticks: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Road vehicle ticks: +STR_FRAMERATE_GL_SHIPS :{BLACK} Ship ticks: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Aircraft ticks: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} World ticks: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Link graph delay: +STR_FRAMERATE_DRAWING :{BLACK}Graphics rendering: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} World viewports: +STR_FRAMERATE_VIDEO :{BLACK}Video output: +STR_FRAMERATE_SOUND :{BLACK}Sound mixing: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Game loop +STR_FRAMETIME_CAPTION_GL_ECONOMY :Cargo handling +STR_FRAMETIME_CAPTION_GL_TRAINS :Train ticks +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Road vehicle ticks +STR_FRAMETIME_CAPTION_GL_SHIPS :Ship ticks +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Aircraft ticks +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :World ticks +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Link graph delay +STR_FRAMETIME_CAPTION_DRAWING :Graphics rendering +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :World viewport rendering +STR_FRAMETIME_CAPTION_VIDEO :Video output +STR_FRAMETIME_CAPTION_SOUND :Sound mixing ############ End of leave-in-this-order @@ -2726,6 +2777,9 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Game Det STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}No information available STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Filter string: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Overwrite File +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Are you sure you want to overwrite the existing file? STR_SAVELOAD_OSKTITLE :{BLACK}Enter a name for the savegame @@ -2843,7 +2897,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Version: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. compatible version: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palette: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Default (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Default (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Legacy (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Legacy (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameters: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :None STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}No information available STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Matching file not found @@ -2924,6 +2983,7 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Read past end o STR_NEWGRF_ERROR_GRM_FAILED :Requested GRF resources not available (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} was disabled by {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Invalid/unknown sprite layout format (sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Too many elements in property value list (sprite {3:NUM}, property {4:HEX}) # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Caution! @@ -3358,6 +3418,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groups - STR_GROUP_CREATE_TOOLTIP :{BLACK}Click to create a group STR_GROUP_DELETE_TOOLTIP :{BLACK}Delete the selected group STR_GROUP_RENAME_TOOLTIP :{BLACK}Rename the selected group +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Change livery of the selected group STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Click to protect this group from global autoreplace STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Delete Group @@ -3401,6 +3462,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacity STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Powered Wagons: {GOLD}+{POWER}{BLACK} Weight: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Refittable to: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :All cargo types +STR_PURCHASE_INFO_NONE :None STR_PURCHASE_INFO_ALL_BUT :All but {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Max. Tractive Effort: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Range: {GOLD}{COMMA} tiles @@ -3800,6 +3862,7 @@ STR_ORDER_CONDITIONAL_AGE :Age (years) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Requires maintenance STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Always STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Remaining lifetime (years) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maximum reliability STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}How to compare the vehicle data to the given value STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :is equal to diff --git a/src/lang/french.txt b/src/lang/french.txt index 3b108cb9ed..a1b3fe2ade 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -2780,6 +2780,8 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Pas d'in STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}{NBSP}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF{NBSP}: {WHITE}{STRING} STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtre{NBSP}: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Écraser le fichier +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Êtes-vous sûr de vouloir écraser le fichier existant{NBSP}? STR_SAVELOAD_OSKTITLE :{BLACK}Entrer un nom pour la sauvegarde diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 881494d78e..682fd5688f 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1640,6 +1640,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Zmiana t STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Utrzymywanie infrastruktury: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Kiedy włączone, utrzymanie infrastruktury jest naliczane w kosztach. Koszty wzrastają nadproporcjonalnie do rozmiarów sieci połączeń, a więc dotykają bardziej duże niż małe firmy +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Początkowy kolor firmy: {STRING} STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Wybierz początkowy kolor dla firmy STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Pozwól budować stare lotniska: {STRING} @@ -3776,6 +3777,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupy - STR_GROUP_CREATE_TOOLTIP :{BLACK}Kliknij aby stworzyć grupę STR_GROUP_DELETE_TOOLTIP :{BLACK}Usuń zaznaczoną grupę STR_GROUP_RENAME_TOOLTIP :{BLACK}Zmień nazwę zaznaczonej grupy +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Zmień kolor zaznaczonej grupy STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Kliknij, aby ochronić tę grupę przed globalną zamianą pojazdów STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Skasuj Grupę From 412e6132b60ad5db8912643befb0b895f4e11710 Mon Sep 17 00:00:00 2001 From: Thomas den Hollander Date: Sun, 3 Feb 2019 14:39:36 +0100 Subject: [PATCH 340/622] Fix: CompanyEconomy documentation Company income was described as an unsigned integer, but it should be signed. --- src/network/core/tcp_admin.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/core/tcp_admin.h b/src/network/core/tcp_admin.h index 72c2e1160e..e141a191a8 100644 --- a/src/network/core/tcp_admin.h +++ b/src/network/core/tcp_admin.h @@ -363,7 +363,7 @@ protected: * uint8 ID of the company. * uint64 Money. * uint64 Loan. - * uint64 Income. + * int64 Income. * uint16 Delivered cargo (this quarter). * uint64 Company value (last quarter). * uint16 Performance (last quarter). From 46d97239c4aaead07e61f676fa88268b5b5208fa Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sun, 10 Feb 2019 18:01:30 +0100 Subject: [PATCH 341/622] Codechange: Include flag for whether a build is of a tagged revision --- Makefile.src.in | 5 +++-- findversion.sh | 5 ++++- projects/determineversion.vbs | 22 +++++++++++++++------- src/rev.cpp.in | 7 +++++++ src/rev.h | 1 + 5 files changed, 30 insertions(+), 10 deletions(-) diff --git a/Makefile.src.in b/Makefile.src.in index 94534fd60f..19231d45ce 100644 --- a/Makefile.src.in +++ b/Makefile.src.in @@ -91,6 +91,7 @@ MODIFIED := $(shell echo "$(VERSIONS)" | cut -f 3 -d' ') VERSION := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ') ISODATE := $(shell echo "$(VERSIONS)" | cut -f 2 -d' ') GITHASH := $(shell echo "$(VERSIONS)" | cut -f 4 -d' ') +ISTAG := $(shell echo "$(VERSIONS)" | cut -f 5 -d' ') # Make sure we have something in VERSION and ISODATE ifeq ($(VERSION),) @@ -276,10 +277,10 @@ endif # Revision files $(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in - $(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g" > $(SRC_DIR)/rev.cpp + $(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g" > $(SRC_DIR)/rev.cpp $(SRC_DIR)/os/windows/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/os/windows/ottdres.rc.in - $(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g" > $(SRC_DIR)/os/windows/ottdres.rc + $(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g" > $(SRC_DIR)/os/windows/ottdres.rc FORCE: diff --git a/findversion.sh b/findversion.sh index 5d2322adb7..37e483cae3 100755 --- a/findversion.sh +++ b/findversion.sh @@ -82,8 +82,10 @@ if [ -d "$ROOT_DIR/.git" ]; then if [ -n "$TAG" ]; then VERSION="${TAG}" + ISTAG="1" else VERSION="${ISODATE}-${BRANCH}${hashprefix}${SHORTHASH}" + ISTAG="0" fi elif [ -f "$ROOT_DIR/.ottdrev" ]; then @@ -99,6 +101,7 @@ else ISODATE="" TAG="" VERSION="" + ISTAG="0" fi -echo "$VERSION $ISODATE $MODIFIED $HASH" +echo "$VERSION $ISODATE $MODIFIED $HASH $ISTAG" diff --git a/projects/determineversion.vbs b/projects/determineversion.vbs index 98c704553c..a2f348faf0 100755 --- a/projects/determineversion.vbs +++ b/projects/determineversion.vbs @@ -21,34 +21,40 @@ Sub FindReplaceInFile(filename, to_find, replacement) file.Close End Sub -Sub UpdateFile(modified, isodate, version, cur_date, githash, filename) +Sub UpdateFile(modified, isodate, version, cur_date, githash, istag, filename) FSO.CopyFile filename & ".in", filename FindReplaceInFile filename, "!!MODIFIED!!", modified FindReplaceInFile filename, "!!ISODATE!!", isodate FindReplaceInFile filename, "!!VERSION!!", version FindReplaceInFile filename, "!!DATE!!", cur_date FindReplaceInFile filename, "!!GITHASH!!", githash + FindReplaceInFile filename, "!!ISTAG!!", istag End Sub Sub UpdateFiles(version) - Dim modified, isodate, cur_date, githash + Dim modified, isodate, cur_date, githash, istag cur_date = DatePart("D", Date) & "." & DatePart("M", Date) & "." & DatePart("YYYY", Date) If InStr(version, Chr(9)) Then + ' Split string into field with tails isodate = Mid(version, InStr(version, Chr(9)) + 1) modified = Mid(isodate, InStr(isodate, Chr(9)) + 1) githash = Mid(modified, InStr(modified, Chr(9)) + 1) + istag = Mid(githash, InStr(githash, Chr(9)) + 1) + ' Remove tails from fields + version = Mid(version, 1, InStr(version, Chr(9)) - 1) isodate = Mid(isodate, 1, InStr(isodate, Chr(9)) - 1) modified = Mid(modified, 1, InStr(modified, Chr(9)) - 1) - version = Mid(version, 1, InStr(version, Chr(9)) - 1) + githash = Mid(githash, 1, InStr(githash, Chr(9)) - 1) Else isodate = 0 modified = 1 githash = "" + istag = 0 End If - UpdateFile modified, isodate, version, cur_date, githash, "../src/rev.cpp" - UpdateFile modified, isodate, version, cur_date, githash, "../src/os/windows/ottdres.rc" + UpdateFile modified, isodate, version, cur_date, githash, istag, "../src/rev.cpp" + UpdateFile modified, isodate, version, cur_date, githash, istag, "../src/os/windows/ottdres.rc" End Sub Function DetermineVersion() @@ -137,7 +143,7 @@ Function DetermineVersion() DetermineVersion = "norev000" modified = 1 Else - Dim version, hashprefix + Dim version, hashprefix, istag If modified = 0 Then hashprefix = "-g" ElseIf modified = 2 Then @@ -148,11 +154,13 @@ Function DetermineVersion() If tag <> "" Then version = tag + istag = 1 Else version = isodate & "-" & branch & hashprefix & shorthash + istag = 0 End If - DetermineVersion = version & Chr(9) & isodate & Chr(9) & modified & Chr(9) & hash + DetermineVersion = version & Chr(9) & isodate & Chr(9) & modified & Chr(9) & hash & Chr(9) & istag End If End Function diff --git a/src/rev.cpp.in b/src/rev.cpp.in index 3c68e18ebf..b4855d4cc8 100644 --- a/src/rev.cpp.in +++ b/src/rev.cpp.in @@ -62,6 +62,13 @@ const char _openttd_revision_hash[] = "!!GITHASH!!"; */ const byte _openttd_revision_modified = !!MODIFIED!!; +/** + * Indicate whether this is a tagged version. + * If this is non-0, then _openttd_revision is the name of the tag, + * and the version is likely a beta, release candidate, or real release. + */ +const byte _openttd_revision_tagged = !!ISTAG!!; + /** * The NewGRF revision of OTTD: * bits meaning. diff --git a/src/rev.h b/src/rev.h index 55fc086992..55674cc805 100644 --- a/src/rev.h +++ b/src/rev.h @@ -16,6 +16,7 @@ extern const char _openttd_revision[]; extern const char _openttd_build_date[]; extern const char _openttd_revision_hash[]; extern const byte _openttd_revision_modified; +extern const byte _openttd_revision_tagged; extern const uint32 _openttd_newgrf_version; bool IsReleasedVersion(); From 830ed6be6114b2b1ed6680c3acc422cd8a849874 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sun, 10 Feb 2019 18:04:48 +0100 Subject: [PATCH 342/622] Fix: Do not mangle tagged revision strings for network revision strings --- src/network/network.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/network/network.cpp b/src/network/network.cpp index d70d800f9c..4727e33443 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -1121,8 +1121,11 @@ const char * GetNetworkRevisionString() /* Ensure it's not longer than the packet buffer length. */ if (strlen(network_revision) >= NETWORK_REVISION_LENGTH) network_revision[NETWORK_REVISION_LENGTH - 1] = '\0'; - /* Release version names are not mangled further. */ - if (IsReleasedVersion()) return network_revision; + /* Tag names are not mangled further. */ + if (_openttd_revision_tagged) { + DEBUG(net, 1, "Network revision name is '%s'", network_revision); + return network_revision; + } /* Prepare a prefix of the git hash. * Size is length + 1 for terminator, +2 for -g prefix. */ @@ -1140,6 +1143,7 @@ const char * GetNetworkRevisionString() /* Replace the git hash in revision string. */ strecpy(network_revision + hashofs, githash_suffix, network_revision + NETWORK_REVISION_LENGTH); assert(strlen(network_revision) < NETWORK_REVISION_LENGTH); // strlen does not include terminator, constant does, hence strictly less than + DEBUG(net, 1, "Network revision name is '%s'", network_revision); } return network_revision; @@ -1159,6 +1163,11 @@ bool IsNetworkCompatibleVersion(const char *other) { if (strncmp(GetNetworkRevisionString(), other, NETWORK_REVISION_LENGTH - 1) == 0) return true; + /* If this version is tagged, then the revision string must be a complete match, + * since there is no git hash suffix in it. + * This is needed to avoid situations like "1.9.0-beta1" comparing equal to "2.0.0-beta1". */ + if (_openttd_revision_tagged) return false; + const char *hash1 = ExtractNetworkRevisionHash(GetNetworkRevisionString()); const char *hash2 = ExtractNetworkRevisionHash(other); return hash1 && hash2 && (strncmp(hash1, hash2, GITHASH_SUFFIX_LEN) == 0); From c0c8fb25fb84d498207713f89720e38a98f16435 Mon Sep 17 00:00:00 2001 From: PeterN Date: Wed, 13 Feb 2019 09:01:49 +0000 Subject: [PATCH 343/622] Change: Use SlErrorCorrupt() on pool index error when loading a savegame, instead of terminating. (#7219) --- src/core/pool_func.hpp | 8 +++++--- src/saveload/saveload.cpp | 19 +++++++++++++++++++ src/saveload/saveload.h | 1 + 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/core/pool_func.hpp b/src/core/pool_func.hpp index 5569addbd7..64af175649 100644 --- a/src/core/pool_func.hpp +++ b/src/core/pool_func.hpp @@ -152,18 +152,20 @@ DEFINE_POOL_METHOD(void *)::GetNew(size_t size) * @param size size of item * @param index index of item * @return pointer to allocated item - * @note usererror() on failure! (index out of range or already used) + * @note SlErrorCorruptFmt() on failure! (index out of range or already used) */ DEFINE_POOL_METHOD(void *)::GetNew(size_t size, size_t index) { + extern void NORETURN SlErrorCorruptFmt(const char *format, ...); + if (index >= Tmax_size) { - usererror("failed loading savegame: %s index " PRINTF_SIZE " out of range (" PRINTF_SIZE ")", this->name, index, Tmax_size); + SlErrorCorruptFmt("%s index " PRINTF_SIZE " out of range (" PRINTF_SIZE ")", this->name, index, Tmax_size); } if (index >= this->size) this->ResizeFor(index); if (this->data[index] != NULL) { - usererror("failed loading savegame: %s index " PRINTF_SIZE " already in use", this->name, index); + SlErrorCorruptFmt("%s index " PRINTF_SIZE " already in use", this->name, index); } return this->AllocateItem(size, index); diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 9be9506b15..bff85dfc61 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -350,6 +350,25 @@ void NORETURN SlErrorCorrupt(const char *msg) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME, msg); } +/** + * Issue an SlErrorCorrupt with a format string. + * @param format format string + * @param ... arguments to format string + * @note This function does never return as it throws an exception to + * break out of all the saveload code. + */ +void NORETURN SlErrorCorruptFmt(const char *format, ...) +{ + va_list ap; + char msg[256]; + + va_start(ap, format); + vseprintf(msg, lastof(msg), format, ap); + va_end(ap); + + SlErrorCorrupt(msg); +} + typedef void (*AsyncSaveFinishProc)(); ///< Callback for when the savegame loading is finished. static AsyncSaveFinishProc _async_save_finish = NULL; ///< Callback to call when the savegame loading is finished. diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index e5e2e1fa23..ad6b76e05e 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -836,6 +836,7 @@ void SlObject(void *object, const SaveLoad *sld); bool SlObjectMember(void *object, const SaveLoad *sld); void NORETURN SlError(StringID string, const char *extra_msg = NULL); void NORETURN SlErrorCorrupt(const char *msg); +void NORETURN SlErrorCorruptFmt(const char *format, ...); bool SaveloadCrashWithMissingNewGRFs(); From 045503e728f5db9784ca2e16720700d70f8e1627 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 13 Feb 2019 19:45:43 +0100 Subject: [PATCH 344/622] Update: Translations from eints english (us): 1 change by njn --- src/lang/english_US.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 0f3baee134..6019681249 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -917,7 +917,7 @@ STR_GAME_OPTIONS_CURRENCY_NLG :Dutch Guilder ( STR_GAME_OPTIONS_CURRENCY_NOK :Norwegian Krone (NOK) STR_GAME_OPTIONS_CURRENCY_PLN :Polish Złoty (PLN) STR_GAME_OPTIONS_CURRENCY_RON :Romanian Leu (RON) -STR_GAME_OPTIONS_CURRENCY_RUR :Russian Rubel (RUR) +STR_GAME_OPTIONS_CURRENCY_RUR :Russian Ruble (RUR) STR_GAME_OPTIONS_CURRENCY_SIT :Slovenian Tolar (SIT) STR_GAME_OPTIONS_CURRENCY_SEK :Swedish Krona (SEK) STR_GAME_OPTIONS_CURRENCY_TRY :Turkish Lira (TRY) From 1f182c44c98a8d478e290ef9fcee27c33204cc08 Mon Sep 17 00:00:00 2001 From: MrMamen Date: Thu, 14 Feb 2019 14:50:25 +0100 Subject: [PATCH 345/622] Fix: year for 1.9.0 betas in changelog --- changelog.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/changelog.txt b/changelog.txt index 32eb4ca6d5..7a8651d6e5 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,8 +1,8 @@ -1.9.0-beta2 (2018-02-09) +1.9.0-beta2 (2019-02-09) ------------------------------------------------------------------------ - Fix: Non-Windows builds did not get correct git hash -1.9.0-beta1 (2018-02-09) +1.9.0-beta1 (2019-02-09) ------------------------------------------------------------------------ Note: OpenTTD was migrated to GitHub for 1.9, so SVN revision and FlySpray numbers have been replaced with Pull Requests and Issue numbers - Feature: Group liveries, and livery window usability enhancements (#7108) From 57734fd85d0a5ae867c2d6ed4d661e177117d914 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 10 Feb 2019 21:12:06 +0000 Subject: [PATCH 346/622] Fix #6599: Disable build and rename button in build vehicle window when no vehicle is selected. --- src/build_vehicle_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 713cc5bbe4..0ac23cfde6 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1438,7 +1438,7 @@ struct BuildVehicleWindow : Window { this->GenerateBuildList(); this->vscroll->SetCount(this->eng_list.Length()); - this->SetWidgetDisabledState(WID_BV_SHOW_HIDE, this->sel_engine == INVALID_ENGINE); + this->SetWidgetsDisabledState(this->sel_engine == INVALID_ENGINE, WID_BV_SHOW_HIDE, WID_BV_BUILD, WID_BV_RENAME, WIDGET_LIST_END); this->DrawWidgets(); From 3a4b6b476b3de9daa0310280b3866f0eb0d805de Mon Sep 17 00:00:00 2001 From: PeterN Date: Fri, 15 Feb 2019 18:43:33 +0000 Subject: [PATCH 347/622] Change: Use selected group as parent when creating a new group. (#7224) --- src/group_cmd.cpp | 20 ++++++++++++++++---- src/group_gui.cpp | 2 +- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp index 29dc17edd9..b6590bc8fd 100644 --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -311,7 +311,7 @@ Group::~Group() * @param tile unused * @param flags type of operation * @param p1 vehicle type - * @param p2 unused + * @param p2 parent groupid * @param text unused * @return the cost of this operation or an error */ @@ -322,15 +322,27 @@ CommandCost CmdCreateGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 if (!Group::CanAllocateItem()) return CMD_ERROR; + const Group *pg = Group::GetIfValid(GB(p2, 0, 16)); + if (pg != NULL) { + if (pg->owner != _current_company) return CMD_ERROR; + if (pg->vehicle_type != vt) return CMD_ERROR; + } + if (flags & DC_EXEC) { Group *g = new Group(_current_company); g->replace_protection = false; g->vehicle_type = vt; g->parent = INVALID_GROUP; - const Company *c = Company::Get(_current_company); - g->livery.colour1 = c->livery[LS_DEFAULT].colour1; - g->livery.colour2 = c->livery[LS_DEFAULT].colour2; + if (pg == NULL) { + const Company *c = Company::Get(_current_company); + g->livery.colour1 = c->livery[LS_DEFAULT].colour1; + g->livery.colour2 = c->livery[LS_DEFAULT].colour2; + } else { + g->parent = pg->index; + g->livery.colour1 = pg->livery.colour1; + g->livery.colour2 = pg->livery.colour2; + } _new_group_id = g->index; diff --git a/src/group_gui.cpp b/src/group_gui.cpp index ce607c3264..b5f33ff52a 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -687,7 +687,7 @@ public: } case WID_GL_CREATE_GROUP: { // Create a new group - DoCommandP(0, this->vli.vtype, 0, CMD_CREATE_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_CREATE), CcCreateGroup); + DoCommandP(0, this->vli.vtype, this->vli.index, CMD_CREATE_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_CREATE), CcCreateGroup); break; } From 5dc377244d74cfffffc98830cbfd009d6cb9cffa Mon Sep 17 00:00:00 2001 From: PeterN Date: Fri, 15 Feb 2019 19:15:53 +0000 Subject: [PATCH 348/622] Fix #7224: AI could no longer create groups. (#7233) --- src/script/api/script_group.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/script/api/script_group.cpp b/src/script/api/script_group.cpp index 1e8d6d774d..cf8dd51a8c 100644 --- a/src/script/api/script_group.cpp +++ b/src/script/api/script_group.cpp @@ -29,7 +29,7 @@ /* static */ ScriptGroup::GroupID ScriptGroup::CreateGroup(ScriptVehicle::VehicleType vehicle_type) { - if (!ScriptObject::DoCommand(0, (::VehicleType)vehicle_type, 0, CMD_CREATE_GROUP, NULL, &ScriptInstance::DoCommandReturnGroupID)) return GROUP_INVALID; + if (!ScriptObject::DoCommand(0, (::VehicleType)vehicle_type, INVALID_GROUP, CMD_CREATE_GROUP, NULL, &ScriptInstance::DoCommandReturnGroupID)) return GROUP_INVALID; /* In case of test-mode, we return GroupID 0 */ return (ScriptGroup::GroupID)0; From 4919c8db139c0ee626ae92f8ed5fc2106229791f Mon Sep 17 00:00:00 2001 From: Joan Josep Date: Sat, 16 Feb 2019 21:52:49 +0100 Subject: [PATCH 349/622] Codechange: Re-arrange VehicleEnter_Track in rail_cmd. (#7239) --- src/rail_cmd.cpp | 60 ++++++++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index f4b26c092e..3230d9bf22 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -2912,48 +2912,48 @@ int TicksToLeaveDepot(const Train *v) */ static VehicleEnterTileStatus VehicleEnter_Track(Vehicle *u, TileIndex tile, int x, int y) { - /* this routine applies only to trains in depot tiles */ + /* This routine applies only to trains in depot tiles. */ if (u->type != VEH_TRAIN || !IsRailDepotTile(tile)) return VETSB_CONTINUE; - Train *v = Train::From(u); - - /* depot direction */ + /* Depot direction. */ DiagDirection dir = GetRailDepotDirection(tile); - /* Calculate the point where the following wagon should be activated. */ - int length = v->CalcNextVehicleOffset(); - - byte fract_coord_leave = - ((_fractcoords_enter[dir] & 0x0F) + // x - (length + 1) * _deltacoord_leaveoffset[dir]) + - (((_fractcoords_enter[dir] >> 4) + // y - ((length + 1) * _deltacoord_leaveoffset[dir + 4])) << 4); - byte fract_coord = (x & 0xF) + ((y & 0xF) << 4); - if (_fractcoords_behind[dir] == fract_coord) { - /* make sure a train is not entering the tile from behind */ - return VETSB_CANNOT_ENTER; - } else if (_fractcoords_enter[dir] == fract_coord) { - if (DiagDirToDir(ReverseDiagDir(dir)) == v->direction) { - /* enter the depot */ - v->track = TRACK_BIT_DEPOT, - v->vehstatus |= VS_HIDDEN; // hide it - v->direction = ReverseDir(v->direction); - if (v->Next() == NULL) VehicleEnterDepot(v->First()); - v->tile = tile; + /* Make sure a train is not entering the tile from behind. */ + if (_fractcoords_behind[dir] == fract_coord) return VETSB_CANNOT_ENTER; - InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile); - return VETSB_ENTERED_WORMHOLE; - } - } else if (fract_coord_leave == fract_coord) { - if (DiagDirToDir(dir) == v->direction) { - /* leave the depot? */ + Train *v = Train::From(u); + + /* Leaving depot? */ + if (v->direction == DiagDirToDir(dir)) { + /* Calculate the point where the following wagon should be activated. */ + int length = v->CalcNextVehicleOffset(); + + byte fract_coord_leave = + ((_fractcoords_enter[dir] & 0x0F) + // x + (length + 1) * _deltacoord_leaveoffset[dir]) + + (((_fractcoords_enter[dir] >> 4) + // y + ((length + 1) * _deltacoord_leaveoffset[dir + 4])) << 4); + + if (fract_coord_leave == fract_coord) { + /* Leave the depot. */ if ((v = v->Next()) != NULL) { v->vehstatus &= ~VS_HIDDEN; v->track = (DiagDirToAxis(dir) == AXIS_X ? TRACK_BIT_X : TRACK_BIT_Y); } } + } else if (_fractcoords_enter[dir] == fract_coord) { + /* Entering depot. */ + assert(DiagDirToDir(ReverseDiagDir(dir)) == v->direction); + v->track = TRACK_BIT_DEPOT, + v->vehstatus |= VS_HIDDEN; + v->direction = ReverseDir(v->direction); + if (v->Next() == NULL) VehicleEnterDepot(v->First()); + v->tile = tile; + + InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile); + return VETSB_ENTERED_WORMHOLE; } return VETSB_CONTINUE; From 7c31a32c2b3d0e5d64d9f543c1863b64c8ea05c2 Mon Sep 17 00:00:00 2001 From: glx Date: Sat, 16 Feb 2019 18:11:56 +0100 Subject: [PATCH 350/622] Fix: colour of network specific strings in company dropdown menus --- src/lang/english.txt | 7 ++++--- src/network/network_gui.cpp | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 856ca2f81a..8f0da8c0c7 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2081,11 +2081,12 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Disconne STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server is protected. Enter password STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Company is protected. Enter password +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Client list # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Client list -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Spectate -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}New company +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Client list +STR_NETWORK_COMPANY_LIST_SPECTATE :Spectate +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :New company # Network client list STR_NETWORK_CLIENTLIST_KICK :Kick diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 65ecb3b99a..93cd3d9733 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1850,7 +1850,7 @@ static void PopupClientList(ClientID client_id, int x, int y) static const NWidgetPart _nested_client_list_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_NETWORK_COMPANY_LIST_CLIENT_LIST, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), NWidget(WWT_STICKYBOX, COLOUR_GREY), EndContainer(), NWidget(WWT_PANEL, COLOUR_GREY, WID_CL_PANEL), SetMinimalSize(250, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM), SetResize(1, 1), EndContainer(), From 1585eb1a3e73715519e825a8d6ee920116200adb Mon Sep 17 00:00:00 2001 From: glx Date: Sat, 16 Feb 2019 18:37:00 +0100 Subject: [PATCH 351/622] Fix: use more descriptive "spectator" strings for story book and goal dropdown menus --- src/lang/english.txt | 3 ++- src/toolbar_gui.cpp | 38 +++++++++++++++++++++----------------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 8f0da8c0c7..9498517233 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2101,7 +2101,6 @@ STR_NETWORK_CLIENT :Client STR_NETWORK_SPECTATORS :Spectators STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Enter the amount of money you want to give -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Spectator # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Do not save the entered password @@ -3112,6 +3111,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Bribe t # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Goals STR_GOALS_SPECTATOR_CAPTION :{WHITE}Global Goals +STR_GOALS_SPECTATOR :Global Goals STR_GOALS_GLOBAL_TITLE :{BLACK}Global goals: STR_GOALS_TEXT :{ORANGE}{RAW_STRING} STR_GOALS_NONE :{ORANGE}- None - @@ -3160,6 +3160,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Click on # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Story Book STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Global Story Book +STR_STORY_BOOK_SPECTATOR :Global Story Book STR_STORY_BOOK_TITLE :{YELLOW}{RAW_STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Page {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Jump to a specific page by selecting it in this drop down list. diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index fbc099f8a3..a5bccd41fe 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -220,30 +220,34 @@ static const int CTMN_SPECTATOR = -4; ///< Show a company window as spectator * @param grey A bitbask of which items to mark as disabled. * @param include_spectator If true, a spectator option is included in the list. */ -static void PopupMainCompanyToolbMenu(Window *w, int widget, int grey = 0, bool include_spectator = false) +static void PopupMainCompanyToolbMenu(Window *w, int widget, int grey = 0) { DropDownList *list = new DropDownList(); + switch (widget) { + case WID_TN_COMPANIES: #ifdef ENABLE_NETWORK - if (_networking) { - if (widget == WID_TN_COMPANIES) { + if (!_networking) break; + /* Add the client list button for the companies menu */ *list->Append() = new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_CLIENT_LIST, CTMN_CLIENT_LIST, false); - } - if (include_spectator) { - if (widget == WID_TN_COMPANIES) { - if (_local_company == COMPANY_SPECTATOR) { - *list->Append() = new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_NEW_COMPANY, CTMN_NEW_COMPANY, NetworkMaxCompaniesReached()); - } else { - *list->Append() = new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_SPECTATE, CTMN_SPECTATE, NetworkMaxSpectatorsReached()); - } + if (_local_company == COMPANY_SPECTATOR) { + *list->Append() = new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_NEW_COMPANY, CTMN_NEW_COMPANY, NetworkMaxCompaniesReached()); } else { - *list->Append() = new DropDownListStringItem(STR_NETWORK_TOOLBAR_LIST_SPECTATOR, CTMN_SPECTATOR, false); + *list->Append() = new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_SPECTATE, CTMN_SPECTATE, NetworkMaxSpectatorsReached()); } - } - } #endif /* ENABLE_NETWORK */ + break; + + case WID_TN_STORY: + *list->Append() = new DropDownListStringItem(STR_STORY_BOOK_SPECTATOR, CTMN_SPECTATOR, false); + break; + + case WID_TN_GOAL: + *list->Append() = new DropDownListStringItem(STR_GOALS_SPECTATOR, CTMN_SPECTATOR, false); + break; + } for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) { if (!Company::IsValidID(c)) continue; @@ -597,7 +601,7 @@ static CallBackFunction MenuClickFinances(int index) static CallBackFunction ToolbarCompaniesClick(Window *w) { - PopupMainCompanyToolbMenu(w, WID_TN_COMPANIES, 0, true); + PopupMainCompanyToolbMenu(w, WID_TN_COMPANIES, 0); return CBF_NONE; } @@ -643,7 +647,7 @@ static CallBackFunction MenuClickCompany(int index) static CallBackFunction ToolbarStoryClick(Window *w) { - PopupMainCompanyToolbMenu(w, WID_TN_STORY, 0, true); + PopupMainCompanyToolbMenu(w, WID_TN_STORY, 0); return CBF_NONE; } @@ -663,7 +667,7 @@ static CallBackFunction MenuClickStory(int index) static CallBackFunction ToolbarGoalClick(Window *w) { - PopupMainCompanyToolbMenu(w, WID_TN_GOAL, 0, true); + PopupMainCompanyToolbMenu(w, WID_TN_GOAL, 0); return CBF_NONE; } From ebe84b9d4c747d516fd779c711788da5d4dcd1d0 Mon Sep 17 00:00:00 2001 From: glx Date: Sat, 16 Feb 2019 18:48:29 +0100 Subject: [PATCH 352/622] Cleanup: update modified and removed strings in languages --- src/lang/afrikaans.txt | 7 +++---- src/lang/arabic_egypt.txt | 6 +++--- src/lang/basque.txt | 7 +++---- src/lang/belarusian.txt | 7 +++---- src/lang/brazilian_portuguese.txt | 7 +++---- src/lang/bulgarian.txt | 7 +++---- src/lang/catalan.txt | 7 +++---- src/lang/croatian.txt | 7 +++---- src/lang/czech.txt | 7 +++---- src/lang/danish.txt | 7 +++---- src/lang/dutch.txt | 7 +++---- src/lang/english_AU.txt | 7 +++---- src/lang/english_US.txt | 7 +++---- src/lang/esperanto.txt | 6 +++--- src/lang/estonian.txt | 7 +++---- src/lang/faroese.txt | 6 +++--- src/lang/finnish.txt | 7 +++---- src/lang/french.txt | 7 +++---- src/lang/gaelic.txt | 7 +++---- src/lang/galician.txt | 7 +++---- src/lang/german.txt | 7 +++---- src/lang/greek.txt | 7 +++---- src/lang/hebrew.txt | 7 +++---- src/lang/hungarian.txt | 7 +++---- src/lang/icelandic.txt | 7 +++---- src/lang/indonesian.txt | 7 +++---- src/lang/irish.txt | 7 +++---- src/lang/italian.txt | 7 +++---- src/lang/japanese.txt | 7 +++---- src/lang/korean.txt | 7 +++---- src/lang/latin.txt | 7 +++---- src/lang/latvian.txt | 7 +++---- src/lang/lithuanian.txt | 7 +++---- src/lang/luxembourgish.txt | 7 +++---- src/lang/malay.txt | 6 +++--- src/lang/norwegian_bokmal.txt | 7 +++---- src/lang/norwegian_nynorsk.txt | 7 +++---- src/lang/polish.txt | 7 +++---- src/lang/portuguese.txt | 7 +++---- src/lang/romanian.txt | 7 +++---- src/lang/russian.txt | 7 +++---- src/lang/serbian.txt | 7 +++---- src/lang/simplified_chinese.txt | 7 +++---- src/lang/slovak.txt | 7 +++---- src/lang/slovenian.txt | 7 +++---- src/lang/spanish.txt | 7 +++---- src/lang/spanish_MX.txt | 7 +++---- src/lang/swedish.txt | 7 +++---- src/lang/tamil.txt | 7 +++---- src/lang/thai.txt | 7 +++---- src/lang/traditional_chinese.txt | 7 +++---- src/lang/turkish.txt | 7 +++---- src/lang/ukrainian.txt | 7 +++---- src/lang/vietnamese.txt | 7 +++---- src/lang/welsh.txt | 7 +++---- 55 files changed, 165 insertions(+), 216 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 28234123f7..e6bd7552ad 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -2062,9 +2062,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Verskaff STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Maatskappy is beskerm. Voer wagwoord in # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Klient Lys -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Toeskou -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nuwe maatskapy +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klient Lys +STR_NETWORK_COMPANY_LIST_SPECTATE :Toeskou +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nuwe maatskapy # Network client list STR_NETWORK_CLIENTLIST_KICK :Skop @@ -2079,7 +2079,6 @@ STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Aanskouers STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Sleutel die bedrag geld in wat u wil gee -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Toeskouer # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Moenie die ingesleutelde wagwoord bewaar nie diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 7a2685b3ce..b44e9fa225 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1726,9 +1726,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}الخا STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}الشركه محميه. من فضلك ادخل كلمه المرور # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}قائمة العملاء -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}شاهد -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}شركة جديدة +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :قائمة العملاء +STR_NETWORK_COMPANY_LIST_SPECTATE :شاهد +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :شركة جديدة # Network client list STR_NETWORK_CLIENTLIST_KICK :اطرد diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 94bacd7880..854b2819aa 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1970,9 +1970,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Zerbitza STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Konpainia babestua dago. Pasahitza sartu # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Bezero zerrenda -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Ikusle -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Konpainia berria +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Bezero zerrenda +STR_NETWORK_COMPANY_LIST_SPECTATE :Ikusle +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Konpainia berria # Network client list STR_NETWORK_CLIENTLIST_KICK :Kanporatu @@ -1987,7 +1987,6 @@ STR_NETWORK_CLIENT :Bezeroa STR_NETWORK_SPECTATORS :Ikusleak STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Eman nahi duzun diru kantitatea ezarri -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Ikusle # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ez gorde sartutako pasahitza diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index e610acc119..d5122f6e5a 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -2387,9 +2387,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Сэрв STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Кампанія абароненая. Увядзіце пароль # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Сьпіс кліентаў -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Назіраць -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Новая кампанія +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Сьпіс кліентаў +STR_NETWORK_COMPANY_LIST_SPECTATE :Назіраць +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Новая кампанія # Network client list STR_NETWORK_CLIENTLIST_KICK :Выкінуць гульца @@ -2404,7 +2404,6 @@ STR_NETWORK_CLIENT :Кліент STR_NETWORK_SPECTATORS :Назіральнікі STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Увядзіце суму грошай, якую вы хочаце перадаць -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Назіральнік # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Не захоўваць уведзены пароль diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 31aa357626..e0c3c86b33 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -2078,9 +2078,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa está protegida. Digite a senha # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Lista de clientes -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Assistir -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nova Companhia +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista de clientes +STR_NETWORK_COMPANY_LIST_SPECTATE :Assistir +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova Companhia # Network client list STR_NETWORK_CLIENTLIST_KICK :Banir @@ -2095,7 +2095,6 @@ STR_NETWORK_CLIENT :Cliente STR_NETWORK_SPECTATORS :Espectadores STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Entre a quantia a ser dada -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Espectador # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Não salvar a senha digitada diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 16d9038acb..ed65c760a1 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -2009,9 +2009,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Сърв STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Компанията е защитена. Въведете парола # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Списък с играчите -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Наблюдавай -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Нова фирма +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Списък с играчите +STR_NETWORK_COMPANY_LIST_SPECTATE :Наблюдавай +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Нова фирма # Network client list STR_NETWORK_CLIENTLIST_KICK :Изгони @@ -2026,7 +2026,6 @@ STR_NETWORK_CLIENT :Клиент STR_NETWORK_SPECTATORS :Наблюдатели STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Въведете количеството пари, което искате да дадете -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Зрител # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Незапазвай паролата diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index d20684b036..eebe0792aa 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -2076,9 +2076,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Companyia protegida: escriviu-ne la contrasenya # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Llista de clients -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Espectador -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nova companyia +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Llista de clients +STR_NETWORK_COMPANY_LIST_SPECTATE :Espectador +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova companyia # Network client list STR_NETWORK_CLIENTLIST_KICK :Breu @@ -2093,7 +2093,6 @@ STR_NETWORK_CLIENT :Client STR_NETWORK_SPECTATORS :Espectadors STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Introdueix la quantitat de diners que vols donar -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Espectador # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}No desis la nova contrasenya. diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 2d8ecc8f9f..b54c632081 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -2179,9 +2179,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Posluži STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Tvrtka je zaštićena. Unesite zaporku # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Popis klijenata -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Promatraj -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nova tvrtka +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Popis klijenata +STR_NETWORK_COMPANY_LIST_SPECTATE :Promatraj +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova tvrtka # Network client list STR_NETWORK_CLIENTLIST_KICK :Izbaci @@ -2196,7 +2196,6 @@ STR_NETWORK_CLIENT :Klijent STR_NETWORK_SPECTATORS :Promatrači STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Unesite iznos novca koji želite dati -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Gledatelj # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Nemoj spremiti upisanu zaporku diff --git a/src/lang/czech.txt b/src/lang/czech.txt index e26dd9963d..adbbbc0c9b 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -2156,9 +2156,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server j STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Společnost je chráněná. Napiš heslo # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Seznam hráčů -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Pozorovat -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nová společnost +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Seznam hráčů +STR_NETWORK_COMPANY_LIST_SPECTATE :Pozorovat +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nová společnost # Network client list STR_NETWORK_CLIENTLIST_KICK :Vyhodit @@ -2173,7 +2173,6 @@ STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Pozorovatelé STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Napiš částku, kterou chceš poskytnout -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Pozorovatel # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Neukládat zadané heslo diff --git a/src/lang/danish.txt b/src/lang/danish.txt index c415430b97..c584f2198b 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -2083,9 +2083,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serveren STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Selskabet er beskyttet. Indtast kodeord # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Klient liste -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Tilslut som tilskuer -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nyt firma +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klient liste +STR_NETWORK_COMPANY_LIST_SPECTATE :Tilslut som tilskuer +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nyt firma # Network client list STR_NETWORK_CLIENTLIST_KICK :Smid ud @@ -2100,7 +2100,6 @@ STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Tilskuere STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Skriv beløbet du vil give -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Tilskuer # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Gem ikke den indtastede adgangskode diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index f6382d8700..c74b555400 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -2083,9 +2083,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server i STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Bedrijf is beveiligd. Voer wachtwoord in # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Spelerslijst -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Kijk toe -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nieuw bedrijf +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Spelerslijst +STR_NETWORK_COMPANY_LIST_SPECTATE :Kijk toe +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nieuw bedrijf # Network client list STR_NETWORK_CLIENTLIST_KICK :Gooi uit het spel @@ -2100,7 +2100,6 @@ STR_NETWORK_CLIENT :Speler STR_NETWORK_SPECTATORS :Toeschouwers STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Voer de hoeveelheid geld die je wilt geven in -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Toeschouwer # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ingevoerd wachtwoord niet opslaan diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index b771355ff8..fcc038c0d3 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -2036,9 +2036,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server i STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Company is protected. Enter password # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Client list -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Spectate -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}New company +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Client list +STR_NETWORK_COMPANY_LIST_SPECTATE :Spectate +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :New company # Network client list STR_NETWORK_CLIENTLIST_KICK :Kick @@ -2053,7 +2053,6 @@ STR_NETWORK_CLIENT :Client STR_NETWORK_SPECTATORS :Spectators STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Enter the amount of money you want to give -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Spectator # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Do not save the entered password diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 6019681249..92ded3211a 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -2083,9 +2083,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server i STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Company is protected. Enter password # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Client list -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Spectate -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}New company +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Client list +STR_NETWORK_COMPANY_LIST_SPECTATE :Spectate +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :New company # Network client list STR_NETWORK_CLIENTLIST_KICK :Kick @@ -2100,7 +2100,6 @@ STR_NETWORK_CLIENT :Client STR_NETWORK_SPECTATORS :Spectators STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Enter the amount of money you want to give -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Spectator # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Do not save the entered password diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index c80cca6167..c2b1c58fa0 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1713,9 +1713,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servilo STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Kompanio estas protektata. Enigu pasvorton # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Klientlisto -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Spekti -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nova kompanio +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klientlisto +STR_NETWORK_COMPANY_LIST_SPECTATE :Spekti +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova kompanio # Network client list STR_NETWORK_CLIENTLIST_KICK :Forbatu diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 862206a4d7..191b235e77 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -2124,9 +2124,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server o STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Ettevõte on kaitstud. Sisesta salasõna # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Klientide nimekiri -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Jälgi -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Uus ettevõte +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klientide nimekiri +STR_NETWORK_COMPANY_LIST_SPECTATE :Jälgi +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Uus ettevõte # Network client list STR_NETWORK_CLIENTLIST_KICK :Viska välja @@ -2141,7 +2141,6 @@ STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Vaatlejad STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Sisesta summa mida anda -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Vaatleja # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Sisestatud salasõna ei salvestata diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 72c497240d..cd79c55d1e 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1881,9 +1881,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servarin STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Fyritøka er vard. Skriva loyniorð # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Listi yvir klientar -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Eygleið -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nýggja fyritøku +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Listi yvir klientar +STR_NETWORK_COMPANY_LIST_SPECTATE :Eygleið +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nýggja fyritøku # Network client list STR_NETWORK_CLIENTLIST_KICK :Sparka diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 8a49261424..7b4deb5d34 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -2078,9 +2078,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Palvelin STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Yhtiö on suojattu. Anna salasana # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Asiakaslista -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Katsele -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Uusi yhtiö +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Asiakaslista +STR_NETWORK_COMPANY_LIST_SPECTATE :Katsele +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Uusi yhtiö # Network client list STR_NETWORK_CLIENTLIST_KICK :Potkaise @@ -2095,7 +2095,6 @@ STR_NETWORK_CLIENT :Pelaaja STR_NETWORK_SPECTATORS :Katsojat STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Syötä rahamäärä, jonka haluat antaa -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Katsoja # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Älä tallenna syötettyä salasanaa diff --git a/src/lang/french.txt b/src/lang/french.txt index a1b3fe2ade..67bfda1270 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -2084,9 +2084,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Le serve STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}La compagnie est protégée. Entrez le mot de passe # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Liste des clients -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Spectateur -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nouvelle compagnie +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Liste des clients +STR_NETWORK_COMPANY_LIST_SPECTATE :Spectateur +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nouvelle compagnie # Network client list STR_NETWORK_CLIENTLIST_KICK :Exclure @@ -2101,7 +2101,6 @@ STR_NETWORK_CLIENT :Client STR_NETWORK_SPECTATORS :Spectateurs STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Entrer le montant que vous voulez donner -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Spectateur # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ne pas sauver le mot de passe entré diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 942f935f5e..ba1d59918a 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -2266,9 +2266,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Tha am f STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Tha a' chompanaidh dìonta. Cuir a-steach facal-faire # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Liosta nan cliant -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Coimhead air -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Companaidh ùr +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Liosta nan cliant +STR_NETWORK_COMPANY_LIST_SPECTATE :Coimhead air +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Companaidh ùr # Network client list STR_NETWORK_CLIENTLIST_KICK :Thoir a bhròg dha @@ -2283,7 +2283,6 @@ STR_NETWORK_CLIENT :Cliant STR_NETWORK_SPECTATORS :Amharcaichean STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Cuir a-steach na tha thu airson toirt seachad -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Amharc # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Na sàbhail am facal-faire air a chur a-steach diff --git a/src/lang/galician.txt b/src/lang/galician.txt index e6e7af5c9e..d51ba329bd 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -2065,9 +2065,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}O servid STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}A compañía está protexida. Introduce o contrasinal # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Lista de clientes -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Observar -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nova compañía +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista de clientes +STR_NETWORK_COMPANY_LIST_SPECTATE :Observar +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova compañía # Network client list STR_NETWORK_CLIENTLIST_KICK :Chimpar @@ -2082,7 +2082,6 @@ STR_NETWORK_CLIENT :Cliente STR_NETWORK_SPECTATORS :Espectadores STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Introduce a cantidade de cartos que queres dar -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Espectador # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Non grava-lo contrasinal introducido diff --git a/src/lang/german.txt b/src/lang/german.txt index e0bc195e5b..fdefa197c5 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -2084,9 +2084,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server i STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firma ist geschützt. Passwort eingeben: # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Teilnehmerliste -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Zuschauen -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Neue Firma +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Teilnehmerliste +STR_NETWORK_COMPANY_LIST_SPECTATE :Zuschauen +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Neue Firma # Network client list STR_NETWORK_CLIENTLIST_KICK :Hinauswerfen @@ -2101,7 +2101,6 @@ STR_NETWORK_CLIENT :Teilnehmer STR_NETWORK_SPECTATORS :Zuschauer STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Wieviel Geld soll übergeben werden? -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Zuschauer # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Eingegebenes Passwort nicht speichern diff --git a/src/lang/greek.txt b/src/lang/greek.txt index ca2730163b..74e30b71ca 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -2186,9 +2186,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Η πρ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Η εταιρεία προστατεύεται από κωδικό. Εισάγετε κωδικό # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Λίστα συμμετεχόντων -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Παρακολούθηση -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Νέα εταιρεία +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Λίστα συμμετεχόντων +STR_NETWORK_COMPANY_LIST_SPECTATE :Παρακολούθηση +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Νέα εταιρεία # Network client list STR_NETWORK_CLIENTLIST_KICK :Εκδίωξη @@ -2203,7 +2203,6 @@ STR_NETWORK_CLIENT :Πελάτης STR_NETWORK_SPECTATORS :Θεατές STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Εισάγετε το πόσο των χρημάτων που θέλετε να δώσετε -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Θεατής # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Να μην αποθηκευτεί ο κωδικός diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index bb4e56d489..c9859a947c 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -2087,9 +2087,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}שרת STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}חברה מוגנת. הזן סיסמה # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}רשימת משתתפים -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}צפה -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}חברה חדשה +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :רשימת משתתפים +STR_NETWORK_COMPANY_LIST_SPECTATE :צפה +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :חברה חדשה # Network client list STR_NETWORK_CLIENTLIST_KICK :בעט @@ -2104,7 +2104,6 @@ STR_NETWORK_CLIENT :לקוח STR_NETWORK_SPECTATORS :צופים STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}הכנס סכום כסף שברצונך לתת -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}צופה # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}בטל שמירת הסיסמה החדשה diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 2896a0b34e..6b549fe07f 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -2128,9 +2128,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}A szerve STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}A vállalat jelszóval van védve. Írd be # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Kliens lista -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Megfigyelés -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Új vállalat +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Kliens lista +STR_NETWORK_COMPANY_LIST_SPECTATE :Megfigyelés +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Új vállalat # Network client list STR_NETWORK_CLIENTLIST_KICK :Kirúgás @@ -2145,7 +2145,6 @@ STR_NETWORK_CLIENT :Kliens STR_NETWORK_SPECTATORS :Megfigyelők STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Add meg a küldeni kívánt pénz mennyiségét -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Megfigyelő # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ne mentsd el a megadott jelszót diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 2c9b2282ae..9bcba9e44c 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1918,9 +1918,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Þjónn STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Fyrirtæki er varið. Sláðu inn lykilorð # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Listi yfir leikmenn -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Fylgjast með -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nýtt fyrirtæki +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Listi yfir leikmenn +STR_NETWORK_COMPANY_LIST_SPECTATE :Fylgjast með +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nýtt fyrirtæki # Network client list STR_NETWORK_CLIENTLIST_KICK :Sparka @@ -1935,7 +1935,6 @@ STR_NETWORK_CLIENT :Notandi STR_NETWORK_SPECTATORS :Áhorfendur STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Sláðu inn peningaupphæð sem þú vilt láta af hendi rakna -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Áhorfandi # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ekki vista innslegið lykilorð diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 0f7fe21256..7d8d32e552 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -2071,9 +2071,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server t STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Perusahaan terkunci, masukkan kata kunci # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Daftar klien -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Menonton -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Buat Perusahaan +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Daftar klien +STR_NETWORK_COMPANY_LIST_SPECTATE :Menonton +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Buat Perusahaan # Network client list STR_NETWORK_CLIENTLIST_KICK :Usir @@ -2088,7 +2088,6 @@ STR_NETWORK_CLIENT :Klien STR_NETWORK_SPECTATORS :Penonton STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Masukkan jumlah uang yang akan diberikan -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Pengamat # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Jangan simpan kata sandi yang telah dimasukkan diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 55ab4ec654..5f9eec349a 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -2061,9 +2061,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Tá an f STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Tá an chuideachta faoi chosaint. Iontráil pasfhocal # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Liosta na gcliant -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Féach air -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Cuideachta nua +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Liosta na gcliant +STR_NETWORK_COMPANY_LIST_SPECTATE :Féach air +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Cuideachta nua # Network client list STR_NETWORK_CLIENTLIST_KICK :Ciceáil @@ -2078,7 +2078,6 @@ STR_NETWORK_CLIENT :Cliant STR_NETWORK_SPECTATORS :Féachadóirí STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Iontráil an méid airgid is mian leat a thabhairt -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Féachadóir # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ná sábháil an pasfhocal a iontráladh diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 81486a91bc..65fc69c2d9 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -2105,9 +2105,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server p STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Compagnia protetta. Inserire la password # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Elenco dei client -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Diventa spettatore -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nuova compagnia +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Elenco dei client +STR_NETWORK_COMPANY_LIST_SPECTATE :Diventa spettatore +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nuova compagnia # Network client list STR_NETWORK_CLIENTLIST_KICK :Espelli @@ -2122,7 +2122,6 @@ STR_NETWORK_CLIENT :Client STR_NETWORK_SPECTATORS :Spettatori STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Inserire la quantità di denaro da donare -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Spettatore # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Non salvare la password inserita diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 9aed8efccf..cd5d36d3d8 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -2061,9 +2061,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}この STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}この会社は保護されています。経営に参画するにはパスワードを入力してください # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}クライアントリスト -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}観覧モード -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}新会社 +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :クライアントリスト +STR_NETWORK_COMPANY_LIST_SPECTATE :観覧モード +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :新会社 # Network client list STR_NETWORK_CLIENTLIST_KICK :追放 @@ -2078,7 +2078,6 @@ STR_NETWORK_CLIENT :クライアン STR_NETWORK_SPECTATORS :観覧者 STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}送りたい金額を入力 -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}観覧者 # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}入力したパスワードを保存しない diff --git a/src/lang/korean.txt b/src/lang/korean.txt index d4bb70baa6..4b97fd1aab 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -2084,9 +2084,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}서버 STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}회사 암호가 걸려있습니다. 암호를 입력하세요. # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}접속자 목록 -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}관전 -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}새 회사 +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :접속자 목록 +STR_NETWORK_COMPANY_LIST_SPECTATE :관전 +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :새 회사 # Network client list STR_NETWORK_CLIENTLIST_KICK :추방 @@ -2101,7 +2101,6 @@ STR_NETWORK_CLIENT :접속자 STR_NETWORK_SPECTATORS :관전자 STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}송금하고 싶은 양을 입력하세요. -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}관전자 # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}입력한 비밀번호는 저장하지 않기 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index cc670da54a..df06b949cc 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -2262,9 +2262,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servatru STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Societas tuta est. Tesseram inscribe # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Index clientum -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Spectare -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Societas Nova +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Index clientum +STR_NETWORK_COMPANY_LIST_SPECTATE :Spectare +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Societas Nova # Network client list STR_NETWORK_CLIENTLIST_KICK :Dimittere @@ -2279,7 +2279,6 @@ STR_NETWORK_CLIENT :Cliens STR_NETWORK_SPECTATORS :Spectatores STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Inscribe quantitatem pecuniae dandam -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Spectator # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Relinquere tesseram inscriptam diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index e68a3837d9..45c8aba165 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -2007,9 +2007,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serveris STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Uzņēmums ir aizsargāts. Ievadiet paroli # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Spēlētāju saraksts -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Skatīt -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Jauns uzņēmums +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Spēlētāju saraksts +STR_NETWORK_COMPANY_LIST_SPECTATE :Skatīt +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Jauns uzņēmums # Network client list STR_NETWORK_CLIENTLIST_KICK :Izmest @@ -2024,7 +2024,6 @@ STR_NETWORK_CLIENT :Spēlētājs STR_NETWORK_SPECTATORS :Novērotāji STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Ievadiet cik daudz naudas vēlaties dot -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Novērotājs # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Nesaglabāt ievadīto paroli diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 82f92f9709..709b756727 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -2280,9 +2280,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serveris STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Kompanija apsaugota. Įvesk slaptažodį # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Žaidėjų sąrašas -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Stebėti -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nauja įmonė +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Žaidėjų sąrašas +STR_NETWORK_COMPANY_LIST_SPECTATE :Stebėti +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nauja įmonė # Network client list STR_NETWORK_CLIENTLIST_KICK :Išmesti (Kick) @@ -2297,7 +2297,6 @@ STR_NETWORK_CLIENT :Žaidėjas STR_NETWORK_SPECTATORS :Stebėtojai STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Įveskite kiekį pinigų, kurį norite gauti -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Stebėtojas # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Neišsaugotas įvestas slaptažodis diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index ee811c0efe..696a9f8c20 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -2064,9 +2064,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server a STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firma ass geschützt. Passwuert aginn # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Spillerlëscht -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Nokucken -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nei Firma +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Spillerlëscht +STR_NETWORK_COMPANY_LIST_SPECTATE :Nokucken +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nei Firma # Network client list STR_NETWORK_CLIENTLIST_KICK :Kicken @@ -2081,7 +2081,6 @@ STR_NETWORK_CLIENT :Spiller STR_NETWORK_SPECTATORS :Zuschauer STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Gëff de Betrag un deens du wëlls ginn -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Zuschauer # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Späicher d'Passwuert net diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 0b95b6a190..da858ddc0e 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1817,9 +1817,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Pelayan STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Syarikat ini dilindungi. Masukkan kata laluan # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Senarai klien -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Saksi -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Syarikat baru +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Senarai klien +STR_NETWORK_COMPANY_LIST_SPECTATE :Saksi +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Syarikat baru # Network client list STR_NETWORK_CLIENTLIST_KICK :Tendang diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 48f088ad57..6066a91fb7 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -2087,9 +2087,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Tjeneren STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firmaet er beskyttet. Skriv inn passord # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Liste over klienter -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Vær tilskuer -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nytt firma +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Liste over klienter +STR_NETWORK_COMPANY_LIST_SPECTATE :Vær tilskuer +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nytt firma # Network client list STR_NETWORK_CLIENTLIST_KICK :Kast ut @@ -2104,7 +2104,6 @@ STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Tilskuere STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Skriv inn hvor mye penger du ønsker å gi -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Tilskuer # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ikke lagre passordet diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index c951d2e8f3..f723f1e52e 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1984,9 +1984,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Tenaren STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firmaet er beskytta. Skriv inn passord # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Liste over klientar -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Vær tilskodar -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nytt firma +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Liste over klientar +STR_NETWORK_COMPANY_LIST_SPECTATE :Vær tilskodar +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nytt firma # Network client list STR_NETWORK_CLIENTLIST_KICK :Kast ut @@ -2001,7 +2001,6 @@ STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Tilskodarar STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Skriv inn kor mykje pengar du ønskar å gje -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Tilskodar # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ikkje lagre passordet diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 682fd5688f..f5082958ac 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2461,9 +2461,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serwer j STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firma jest chroniona. Wprowadź hasło # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Lista klientów -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Obserwuj -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nowa firma +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista klientów +STR_NETWORK_COMPANY_LIST_SPECTATE :Obserwuj +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nowa firma # Network client list STR_NETWORK_CLIENTLIST_KICK :Wyrzuć @@ -2478,7 +2478,6 @@ STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Widzowie STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Wprowadź ilość pieniędzy, które chcesz przekazać -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Obserwator # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Nie zapisuj podanego hasła diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 1eff62076c..efac946954 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -2084,9 +2084,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Introduza palavra-chave # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Lista de clientes -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Assistir -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nova empresa +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista de clientes +STR_NETWORK_COMPANY_LIST_SPECTATE :Assistir +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nova empresa # Network client list STR_NETWORK_CLIENTLIST_KICK :Expulsar @@ -2101,7 +2101,6 @@ STR_NETWORK_CLIENT :Cliente STR_NETWORK_SPECTATORS :Espectadores STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Insira a quantidade de dinheiro que pretende dar -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Espectador # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Não gravar a palavra-chave introduzida diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 5a86b952dc..0292890939 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -2034,9 +2034,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server p STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Companie protejată. Introdu parola # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Lista de clienţi -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Observă -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Companie nouă +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista de clienţi +STR_NETWORK_COMPANY_LIST_SPECTATE :Observă +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Companie nouă # Network client list STR_NETWORK_CLIENTLIST_KICK :Dă afară @@ -2051,7 +2051,6 @@ STR_NETWORK_CLIENT :Client STR_NETWORK_SPECTATORS :Spectatori STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Introduceţi suma pe care o oferiţi -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Spectator # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Parola introdusă nu se va salva diff --git a/src/lang/russian.txt b/src/lang/russian.txt index e03a395f3b..1af2172c7a 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2235,9 +2235,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Серв STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Компания защищена. Введите пароль. # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Список клиентов -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Наблюдать -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Новая компания +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Список клиентов +STR_NETWORK_COMPANY_LIST_SPECTATE :Наблюдать +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Новая компания # Network client list STR_NETWORK_CLIENTLIST_KICK :Отключить @@ -2252,7 +2252,6 @@ STR_NETWORK_CLIENT :Клиент STR_NETWORK_SPECTATORS :Наблюдатели STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Введите сумму денег, которую вы хотите передать -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Наблюдатель # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Не сохранять пароль diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index de316db554..57ef5b465f 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -2268,9 +2268,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server j STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Preduzeće je zaštićeno. Unesite lozinku # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Spisak klijenata -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Praćenje -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Novo preduzeće +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Spisak klijenata +STR_NETWORK_COMPANY_LIST_SPECTATE :Praćenje +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Novo preduzeće # Network client list STR_NETWORK_CLIENTLIST_KICK :Izbaci @@ -2285,7 +2285,6 @@ STR_NETWORK_CLIENT :Igrač STR_NETWORK_SPECTATORS :Posmatrači STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Unesite svotu novca koju želite dati -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Posmatrač # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Otkaži unetu lozinku diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index f4fbf33813..1ed44f500e 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -2071,9 +2071,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}服务 STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}公司需要密码: # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}客户端列表 -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}旁观 -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}新公司 +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :客户端列表 +STR_NETWORK_COMPANY_LIST_SPECTATE :旁观 +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :新公司 # Network client list STR_NETWORK_CLIENTLIST_KICK :踢出 @@ -2088,7 +2088,6 @@ STR_NETWORK_CLIENT :客户端 STR_NETWORK_SPECTATORS :旁观者 STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}请输入您想赠与的资金数 -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}旁观者 # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}不保存所输入的密码 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index c87cbaa038..1abdc762e2 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -2129,9 +2129,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server j STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Spoločnosť je chránená. Zadaj heslo # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Zoznam klientov -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Pozorovať -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nová spoločnosť +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Zoznam klientov +STR_NETWORK_COMPANY_LIST_SPECTATE :Pozorovať +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nová spoločnosť # Network client list STR_NETWORK_CLIENTLIST_KICK :Vyhodit @@ -2146,7 +2146,6 @@ STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Pozorovatelia STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Vložte čiastku ktorú chcete dať -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Pozorovateľ # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Neukladať zadané heslo diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index aa79c4a8d9..dadf5aaee0 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -2215,9 +2215,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Strežni STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Podjetje je zaščiteno. Vnesi geslo # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Seznam gostov -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Opazuj -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Novo podjetje +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Seznam gostov +STR_NETWORK_COMPANY_LIST_SPECTATE :Opazuj +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Novo podjetje # Network client list STR_NETWORK_CLIENTLIST_KICK :Brcni @@ -2232,7 +2232,6 @@ STR_NETWORK_CLIENT :Gost STR_NETWORK_SPECTATORS :Gledalci STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Vpiši znesek denarja za darovanje -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Gledalec # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Ne shrani vnešenega gesla diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index d13421cc77..4c7c78c665 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -2075,9 +2075,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Introduzca la contraseña # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Lista de clientes -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Presenciar -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nueva empresa +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista de clientes +STR_NETWORK_COMPANY_LIST_SPECTATE :Presenciar +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nueva empresa # Network client list STR_NETWORK_CLIENTLIST_KICK :Expulsar @@ -2092,7 +2092,6 @@ STR_NETWORK_CLIENT :Cliente STR_NETWORK_SPECTATORS :Espectadores STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Introduce la cantidad de dinero que deseas dar -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Espectador # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}No guardar la contraseña introducida diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 34493d885b..54c311370c 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -2084,9 +2084,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Introducir contraseña # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Lista de clientes -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Observar -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nueva empresa +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista de clientes +STR_NETWORK_COMPANY_LIST_SPECTATE :Observar +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nueva empresa # Network client list STR_NETWORK_CLIENTLIST_KICK :Expulsar @@ -2101,7 +2101,6 @@ STR_NETWORK_CLIENT :Cliente STR_NETWORK_SPECTATORS :Espectadores STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Introducir la cantidad de dinero a dar -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Espectador # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}No guardar la contraseña introducida diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 2917b027c3..f28fb091af 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -2083,9 +2083,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servern STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Företaget är skyddat. Ange lösenord # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Klientlista -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Åskåda -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Nytt företag +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klientlista +STR_NETWORK_COMPANY_LIST_SPECTATE :Åskåda +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nytt företag # Network client list STR_NETWORK_CLIENTLIST_KICK :Kasta ut @@ -2100,7 +2100,6 @@ STR_NETWORK_CLIENT :Klient STR_NETWORK_SPECTATORS :Åskådare STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Skriv in mängd pengar som du vill ge -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Åskådare # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Spara inte det inmatade lösenordet diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 9ed9ccd8a1..0d51265e3a 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1811,9 +1811,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}சர STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}நிற்வனம் காக்கப்பட்டுள்ளது. கடவுச்சொல்லினை இடவும் # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}விளையாடுவோர் பட்டியல் -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}கவனி -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}புதிய நிறுவனம் +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :விளையாடுவோர் பட்டியல் +STR_NETWORK_COMPANY_LIST_SPECTATE :கவனி +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :புதிய நிறுவனம் # Network client list STR_NETWORK_CLIENTLIST_KICK :உதை @@ -1828,7 +1828,6 @@ STR_NETWORK_CLIENT :Client STR_NETWORK_SPECTATORS :கவனிப்பவர்கள் STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}கொடுக்கப்படும் பணத்தின் அளவினை இடவும் -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}பார்வையாளர் # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}கடவுச்சொல்லினை நினைவில் வைத்திருக்காதே diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 5f3742e85f..a3c800b663 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -2010,9 +2010,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}เซ STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}บริษัทมีการป้องกัน. กรุณากรอกพาสเวิร์ด # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}รายการลูกข่าย -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}ผู้ชม -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}บริษัทใหม่ +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :รายการลูกข่าย +STR_NETWORK_COMPANY_LIST_SPECTATE :ผู้ชม +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :บริษัทใหม่ # Network client list STR_NETWORK_CLIENTLIST_KICK :เตะ @@ -2027,7 +2027,6 @@ STR_NETWORK_CLIENT :ลูกข่ STR_NETWORK_SPECTATORS :ผู้ชม STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}กรอกจำนวนเงินที่ต้องการจะให้ -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}ผู้สังเกตุการณ์ # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}ไม่ทำการเก็บพาสเวิร์ดที่กรอกไว้แล้ว diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 2046b5d1f2..7e90e93d18 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -2061,9 +2061,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}伺服 STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}公司受保護,輸入密碼 # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}用戶端清單 -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}旁觀者 -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}新公司 +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :用戶端清單 +STR_NETWORK_COMPANY_LIST_SPECTATE :旁觀者 +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :新公司 # Network client list STR_NETWORK_CLIENTLIST_KICK :踢除 @@ -2078,7 +2078,6 @@ STR_NETWORK_CLIENT :用戶端 STR_NETWORK_SPECTATORS :旁觀者 STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}請輸入你要付出多少資金 -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}旁觀者 # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}不要儲存所輸入的密碼 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 1aef2bc8ff..ca49986525 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -2065,9 +2065,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Sunucu k STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Şirket korumalı. Parola girin # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Oyuncu listesi -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Gözlemle -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Yeni şirket +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Oyuncu listesi +STR_NETWORK_COMPANY_LIST_SPECTATE :Gözlemle +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Yeni şirket # Network client list STR_NETWORK_CLIENTLIST_KICK :At @@ -2082,7 +2082,6 @@ STR_NETWORK_CLIENT :İstemci STR_NETWORK_SPECTATORS :İzleyiciler STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Vermek istediğiniz para miktarını girin -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}İzleyici # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Girilen parolayı kaydetme diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index e7a4856d0f..28f29b5c4f 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -2189,9 +2189,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Серв STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Компанія захищена паролем. Введіть пароль # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Список клієнтів -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Спостерігати -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Нова компанія +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Список клієнтів +STR_NETWORK_COMPANY_LIST_SPECTATE :Спостерігати +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Нова компанія # Network client list STR_NETWORK_CLIENTLIST_KICK :Відключити гравця @@ -2206,7 +2206,6 @@ STR_NETWORK_CLIENT :Клієнт STR_NETWORK_SPECTATORS :Спостерігачі STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Введіть суму грошей, яку Ви хочете віддати -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Глядач # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Не запам'ятовувати введений пароль diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index b74c0e9a8e..548ba33790 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -2077,9 +2077,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server y STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Công ty yêu cầu xác thực. Nhập mật khẩu # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Danh sách máy trạm -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Xem -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Công ty mới +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Danh sách máy trạm +STR_NETWORK_COMPANY_LIST_SPECTATE :Xem +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Công ty mới # Network client list STR_NETWORK_CLIENTLIST_KICK :Đá @@ -2094,7 +2094,6 @@ STR_NETWORK_CLIENT :Máy trạm STR_NETWORK_SPECTATORS :Người xem STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Nhập số tiền muốn cho đi -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Người xem # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Không được ghi mật khẩu đã nhập diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 92dd920509..7813fce521 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -2064,9 +2064,9 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Mae'r gw STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Mae'r cwmni wedi'i ddiogelu. rhowch y cyfrinair. # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :{WHITE}Rhestr Cleientiaid -STR_NETWORK_COMPANY_LIST_SPECTATE :{WHITE}Gwylio -STR_NETWORK_COMPANY_LIST_NEW_COMPANY :{WHITE}Cwmni newydd +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Rhestr Cleientiaid +STR_NETWORK_COMPANY_LIST_SPECTATE :Gwylio +STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Cwmni newydd # Network client list STR_NETWORK_CLIENTLIST_KICK :Cicio @@ -2081,7 +2081,6 @@ STR_NETWORK_CLIENT :Gwestai STR_NETWORK_SPECTATORS :Gwylwyr STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Nodwch faint o arian yr hoffech chi ei roi -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Gwyliwr # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}Peidio cadw'r cyfrinair a roddwyd From 548ec05a48ba28b65e779fa27fa5985a4ee2901b Mon Sep 17 00:00:00 2001 From: Joan Josep Date: Sun, 17 Feb 2019 00:15:58 +0100 Subject: [PATCH 353/622] Add: News menu entry and shortcut for deleting all messages. (#7240) --- src/lang/english.txt | 1 + src/main_gui.cpp | 3 +++ src/toolbar_gui.cpp | 3 ++- src/window.cpp | 12 ++++++++++++ src/window_func.h | 1 + 5 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 9498517233..ceb42a5c68 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -466,6 +466,7 @@ STR_TOOLBAR_SOUND_MUSIC :Sound/music ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Last message/news report STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Message history +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Delete all messages ############ range ends here ############ range for about menu starts diff --git a/src/main_gui.cpp b/src/main_gui.cpp index 2eb24c8dc2..43a73f6de1 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -220,6 +220,7 @@ enum { GHK_RESET_OBJECT_TO_PLACE, GHK_DELETE_WINDOWS, GHK_DELETE_NONVITAL_WINDOWS, + GHK_DELETE_ALL_MESSAGES, GHK_REFRESH_SCREEN, GHK_CRASH, GHK_MONEY, @@ -345,6 +346,7 @@ struct MainWindow : Window case GHK_RESET_OBJECT_TO_PLACE: ResetObjectToPlace(); break; case GHK_DELETE_WINDOWS: DeleteNonVitalWindows(); break; case GHK_DELETE_NONVITAL_WINDOWS: DeleteAllNonVitalWindows(); break; + case GHK_DELETE_ALL_MESSAGES: DeleteAllMessages(); break; case GHK_REFRESH_SCREEN: MarkWholeScreenDirty(); break; case GHK_CRASH: // Crash the game @@ -488,6 +490,7 @@ static Hotkey global_hotkeys[] = { Hotkey(WKC_ESC, "reset_object_to_place", GHK_RESET_OBJECT_TO_PLACE), Hotkey(WKC_DELETE, "delete_windows", GHK_DELETE_WINDOWS), Hotkey(WKC_DELETE | WKC_SHIFT, "delete_all_windows", GHK_DELETE_NONVITAL_WINDOWS), + Hotkey(WKC_DELETE | WKC_CTRL, "delete_all_messages", GHK_DELETE_ALL_MESSAGES), Hotkey('R' | WKC_CTRL, "refresh_screen", GHK_REFRESH_SCREEN), #if defined(_DEBUG) Hotkey('0' | WKC_ALT, "crash_game", GHK_CRASH), diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index a5bccd41fe..9b84268efd 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -1023,7 +1023,7 @@ static CallBackFunction MenuClickMusicWindow(int index) static CallBackFunction ToolbarNewspaperClick(Window *w) { - PopupMainToolbMenu(w, WID_TN_MESSAGES, STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT, 2); + PopupMainToolbMenu(w, WID_TN_MESSAGES, STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT, 3); return CBF_NONE; } @@ -1038,6 +1038,7 @@ static CallBackFunction MenuClickNewspaper(int index) switch (index) { case 0: ShowLastNewsMessage(); break; case 1: ShowMessageHistory(); break; + case 2: DeleteAllMessages(); break; } return CBF_NONE; } diff --git a/src/window.cpp b/src/window.cpp index 3f4adf5e98..e8c4fe74d6 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -39,6 +39,7 @@ #include "framerate_type.h" #include "network/network_func.h" #include "guitimer_func.h" +#include "news_func.h" #include "safeguards.h" @@ -3370,6 +3371,17 @@ restart_search: } } +/** + * Delete all messages and their corresponding window (if any). + */ +void DeleteAllMessages() +{ + InitNewsItemStructs(); + InvalidateWindowData(WC_STATUS_BAR, 0, SBI_NEWS_DELETED); // invalidate the statusbar + InvalidateWindowData(WC_MESSAGE_HISTORY, 0); // invalidate the message history + DeleteWindowById(WC_NEWS_WINDOW, 0); // close newspaper or general message window if shown +} + /** * Delete all windows that are used for construction of vehicle etc. * Once done with that invalidate the others to ensure they get refreshed too. diff --git a/src/window_func.h b/src/window_func.h index 453b889789..45e2d71eca 100644 --- a/src/window_func.h +++ b/src/window_func.h @@ -40,6 +40,7 @@ void InvalidateWindowClassesData(WindowClass cls, int data = 0, bool gui_scope = void DeleteNonVitalWindows(); void DeleteAllNonVitalWindows(); +void DeleteAllMessages(); void DeleteConstructionWindows(); void HideVitalWindows(); void ShowVitalWindows(); From aadcf40b9b7f716fb53dc4fa41d7d484eeb2c7a5 Mon Sep 17 00:00:00 2001 From: glx Date: Sun, 17 Feb 2019 01:16:24 +0100 Subject: [PATCH 354/622] Fix 1585eb1a3: wrong default selection for goals and story book --- src/toolbar_gui.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 9b84268efd..ce0ce58f5f 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -218,7 +218,6 @@ static const int CTMN_SPECTATOR = -4; ///< Show a company window as spectator * @param w The toolbar window. * @param widget The button widget id. * @param grey A bitbask of which items to mark as disabled. - * @param include_spectator If true, a spectator option is included in the list. */ static void PopupMainCompanyToolbMenu(Window *w, int widget, int grey = 0) { @@ -254,7 +253,7 @@ static void PopupMainCompanyToolbMenu(Window *w, int widget, int grey = 0) *list->Append() = new DropDownListCompanyItem(c, false, HasBit(grey, c)); } - PopupMainToolbMenu(w, widget, list, _local_company == COMPANY_SPECTATOR ? CTMN_CLIENT_LIST : (int)_local_company); + PopupMainToolbMenu(w, widget, list, _local_company == COMPANY_SPECTATOR ? (widget == WID_TN_COMPANIES ? CTMN_CLIENT_LIST : CTMN_SPECTATOR) : (int)_local_company); } From ef7e47a53afbcf8086ef8211f32ac4277c5309b0 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 17 Feb 2019 19:45:44 +0100 Subject: [PATCH 355/622] Update: Translations from eints danish: 5 changes by nielsmh french: 3 changes by glx spanish (mexican): 4 changes by Absay russian: 4 changes by Lone_Wolf --- src/lang/danish.txt | 5 +++++ src/lang/french.txt | 3 +++ src/lang/russian.txt | 4 ++++ src/lang/spanish_MX.txt | 4 ++++ src/lang/unfinished/frisian.txt | 1 - src/lang/unfinished/persian.txt | 1 - 6 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/lang/danish.txt b/src/lang/danish.txt index c584f2198b..e5c94dc3e2 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -466,6 +466,7 @@ STR_TOOLBAR_SOUND_MUSIC :Lyd/Musik ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Seneste besked/nyhedsrapport STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Tidligere beskeder +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Slet alle beskeder ############ range ends here ############ range for about menu starts @@ -2081,6 +2082,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Afbryd f STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Serveren er beskyttet. Indtast kodeord STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Selskabet er beskyttet. Indtast kodeord +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Klientliste # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Klient liste @@ -2779,6 +2781,7 @@ STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} STR_SAVELOAD_FILTER_TITLE :{BLACK}Filter-udtryk: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Overskriv fil +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Er du sikker på du vil overskrive den eksisterende fil? STR_SAVELOAD_OSKTITLE :{BLACK}Skriv et navn til det gemte spil @@ -3109,6 +3112,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Bestik # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Mål STR_GOALS_SPECTATOR_CAPTION :{WHITE}Globale Mål +STR_GOALS_SPECTATOR :Globale Mål STR_GOALS_GLOBAL_TITLE :{BLACK}Globale mål: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Ingen - @@ -3157,6 +3161,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik på # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Historiebog STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Global Historiebog +STR_STORY_BOOK_SPECTATOR :Global Historiebog STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Side {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Gå til en bestemt side ved at vælge den i denne rulleliste. diff --git a/src/lang/french.txt b/src/lang/french.txt index 67bfda1270..ea453ad13f 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -2082,6 +2082,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Déconne STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Le serveur est protégé. Entrez le mot de passe STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}La compagnie est protégée. Entrez le mot de passe +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Liste des clients # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Liste des clients @@ -3111,6 +3112,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Corromp # Goal window STR_GOALS_CAPTION :{WHITE}Objectifs de {COMPANY} STR_GOALS_SPECTATOR_CAPTION :{WHITE}Objectifs globaux +STR_GOALS_SPECTATOR :Objectifs globaux STR_GOALS_GLOBAL_TITLE :{BLACK}Objectifs globaux{NBSP}: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}− Aucun − @@ -3159,6 +3161,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Cliquer # Story book window STR_STORY_BOOK_CAPTION :{WHITE}Livre d'histoire de {COMPANY} STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Livre d'histoire global +STR_STORY_BOOK_SPECTATOR :Livre d'histoire global STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Page {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Aller à une page spécifique en la choisissant dans cette liste diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 1af2172c7a..1d7d5826c0 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -592,6 +592,7 @@ STR_TOOLBAR_SOUND_MUSIC :Звук/муз ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Последняя новость STR_NEWS_MENU_MESSAGE_HISTORY_MENU :История сообщений +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Удалить все сообщения ############ range ends here ############ range for about menu starts @@ -2233,6 +2234,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Откл STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Сервер защищён. Введите пароль. STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Компания защищена. Введите пароль. +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Список клиентов # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Список клиентов @@ -3290,6 +3292,7 @@ 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_TITLE :{BLACK}Общие задачи: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Нет - @@ -3338,6 +3341,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Нажм # Story book window STR_STORY_BOOK_CAPTION :{WHITE}История компании «{COMPANY}» STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Мировая история +STR_STORY_BOOK_SPECTATOR :Мировая история STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Стр. {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Перейти на нужную страницу, выбрав её в выпадающем списке. diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 54c311370c..23bb53f691 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -467,6 +467,7 @@ STR_TOOLBAR_SOUND_MUSIC :Sonido y músic ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Último mensaje o noticia STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Historial de mensajes +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Eliminar todos los mensajes ############ range ends here ############ range for about menu starts @@ -2082,6 +2083,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desconec STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegido. Introducir contraseña STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Introducir contraseña +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Lista de clientes # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista de clientes @@ -3111,6 +3113,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Soborna # Goal window STR_GOALS_CAPTION :{WHITE}Metas de {COMPANY} STR_GOALS_SPECTATOR_CAPTION :{WHITE}Metas globales +STR_GOALS_SPECTATOR :Metas globales STR_GOALS_GLOBAL_TITLE :{BLACK}Metas globales: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Ninguna - @@ -3159,6 +3162,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clic en # Story book window STR_STORY_BOOK_CAPTION :{WHITE}Historial de {COMPANY} STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Historial global +STR_STORY_BOOK_SPECTATOR :Historial global STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Página {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Permitir ir a una página específica al elegirla en esta lista desplegable diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index aea0f9a5c7..4cb04f9715 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -1976,7 +1976,6 @@ STR_NETWORK_SERVER :Tsjinner STR_NETWORK_CLIENT :Kliïnt STR_NETWORK_SPECTATORS :Taskôgers -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}Taskôger # Network set password STR_COMPANY_PASSWORD_OK :{BLACK}Jou it bedriuw it nije wachtwurd diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index 2e2b23764d..cbacd30103 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -1791,7 +1791,6 @@ STR_NETWORK_CLIENT :سرویس گی STR_NETWORK_SPECTATORS :تماشاگران STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}مقدار پولی که می خواهید دریافت نمایید را وارد کنید -STR_NETWORK_TOOLBAR_LIST_SPECTATOR :{BLACK}تماشگر # Network set password STR_COMPANY_PASSWORD_CANCEL :{BLACK}رمز وارد شده را به خاطر نسپار From 84961034e481859d7266545d4ce0deb6b3ea2911 Mon Sep 17 00:00:00 2001 From: PeterN Date: Mon, 18 Feb 2019 07:37:25 +0000 Subject: [PATCH 356/622] Change: Increase maximum number of orders from 64000 to ~16.7m. (#7220) --- src/order_base.h | 2 +- src/order_type.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/order_base.h b/src/order_base.h index a67cf69bb4..0def7b0bcd 100644 --- a/src/order_base.h +++ b/src/order_base.h @@ -21,7 +21,7 @@ #include "vehicle_type.h" #include "date_type.h" -typedef Pool OrderPool; +typedef Pool OrderPool; typedef Pool OrderListPool; extern OrderPool _order_pool; extern OrderListPool _orderlist_pool; diff --git a/src/order_type.h b/src/order_type.h index ac66bfa38f..b1e0fad539 100644 --- a/src/order_type.h +++ b/src/order_type.h @@ -15,7 +15,7 @@ #include "core/enum_type.hpp" typedef byte VehicleOrderID; ///< The index of an order within its current vehicle (not pool related) -typedef uint16 OrderID; +typedef uint32 OrderID; typedef uint16 OrderListID; typedef uint16 DestinationID; @@ -25,7 +25,7 @@ static const VehicleOrderID INVALID_VEH_ORDER_ID = 0xFF; static const VehicleOrderID MAX_VEH_ORDER_ID = INVALID_VEH_ORDER_ID - 1; /** Invalid order (sentinel) */ -static const OrderID INVALID_ORDER = 0xFFFF; +static const OrderID INVALID_ORDER = 0xFFFFFF; /** * Maximum number of orders in implicit-only lists before we start searching From 349cbee6e90a7a7257a2872755540d5555f6ee90 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 18 Feb 2019 19:45:44 +0100 Subject: [PATCH 357/622] Update: Translations from eints ukrainian: 6 changes by nsergiy dutch: 210 changes by JanWillem french: 1 change by glx portuguese: 4 changes by vesgo --- src/lang/dutch.txt | 416 ++++++++++++++++++++-------------------- src/lang/french.txt | 1 + src/lang/portuguese.txt | 4 + src/lang/ukrainian.txt | 6 + 4 files changed, 221 insertions(+), 206 deletions(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index c74b555400..5512bc7395 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -238,14 +238,14 @@ STR_BUTTON_SORT_BY :{BLACK}Sorteren STR_BUTTON_LOCATION :{BLACK}Locatie STR_BUTTON_RENAME :{BLACK}Hernoemen -STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Sluit venster +STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Venster sluiten STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Vensternaam - sleep om venster te verplaatsen STR_TOOLTIP_SHADE :{BLACK}Venster inklappen - alleen titelbalk weergeven STR_TOOLTIP_DEBUG :{BLACK}Probleemgegevens voor NewGRF weergeven STR_TOOLTIP_DEFSIZE :{BLACK}wijzig venster naar standaardgrootte. Ctrl+Klik om de huidige grootte als standaard op te slaan -STR_TOOLTIP_STICKY :{BLACK}Markeer dit venster als niet-sluitbaar door de 'Sluit alle vensters'-knop. Ctrl+Klik om status als default op te slaan +STR_TOOLTIP_STICKY :{BLACK}Dit venster markeren als niet-sluitbaar met de knop 'Alle vensters sluiten'. Ctrl+klik om slaat status op als standaard. STR_TOOLTIP_RESIZE :{BLACK}Klik en sleep om de grootte van dit venster te veranderen -STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Schakel tussen groot/klein venster +STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Schakelen tussen groot/klein venster STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Schuifbalk - scroll verticaal door de lijst STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Schuifbalk - scroll horizontaal door de lijst STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Sloop gebouwen etc. op een stuk land. Ctrl selecteert het gebied diagonaal. Shift schakelt tussen bouwen/inschatting van de kosten @@ -347,7 +347,7 @@ STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Landinfo STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Verwissel knoppenbalk # Extra tooltips for the scenario editor toolbar -STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}Sla scenario op, laad scenario, scenario-editor verlaten, afsluiten +STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}Scenario opslaan of laden, scenario-editor verlaten, afsluiten STR_SCENEDIT_TOOLBAR_OPENTTD :{YELLOW}OpenTTD STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Scenario-editor STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Zet startdatum 1 jaar terug @@ -359,8 +359,8 @@ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Stadsont STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Industrieontwikkeling STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Wegenbouw STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant bomen. Shift schakelt tussen bouwen/inschatting van de kosten -STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Plaats bord -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Plaats object. Shift schakelt tussen bouwen/inschatting van de kosten +STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Bord plaatsen +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Object plaatsen. Shift schakelt tussen bouwen/inschatting van de kosten ############ range for SE file menu starts STR_SCENEDIT_FILE_MENU_SAVE_SCENARIO :Scenario opslaan @@ -456,7 +456,7 @@ STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Vliegvelden bou ############ range for landscaping menu starts STR_LANDSCAPING_MENU_LANDSCAPING :Terreinvorming STR_LANDSCAPING_MENU_PLANT_TREES :Plant bomen -STR_LANDSCAPING_MENU_PLACE_SIGN :Plaats bord +STR_LANDSCAPING_MENU_PLACE_SIGN :Bord plaatsen ############ range ends here ############ range for music menu starts @@ -466,6 +466,7 @@ STR_TOOLBAR_SOUND_MUSIC :Geluid/muziek ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Laatst (nieuws)bericht STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Berichtengeschiedenis +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Alle berichten verwijderen ############ range ends here ############ range for about menu starts @@ -720,7 +721,7 @@ STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Begroeii STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Landeigenaren op de kaart weergeven STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Klik op een industriesoort om deze weer te geven. Ctrl+klik verbergt alle andere industriesoorten behalve de geselecteerde. Nogmaals Ctrl+klik geeft opnieuw alle industriesoorten weer. STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Klik op een bedrijf om de bedrijfseigendommen weer te geven. Ctrl+klik verbergt alle andere bedrijven behalve de geselecteerde. Nogmaals Ctrl+klik geeft opnieuw alle bedrijven weer. -STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Klik op een vrachtsoort om de eigenschappen weer te geven. Ctrl+Klik verbergt alle vrachtsoorten behalve de geselecteerde. Ctrl+Klik opnieuw om alle vrachttypes te activeren +STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Klik op een vrachtsoort om de eigenschappen weer te geven. Ctrl+Klik verbergt alle vrachtsoorten behalve de geselecteerde. Ctrl+Klik opnieuw om alle vrachttypen te activeren STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Wegen STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}Spoorwegen @@ -893,7 +894,7 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Kopieer # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Spelopties STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valuta -STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Kies valuta +STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valuta kiezen ############ start of currency region STR_GAME_OPTIONS_CURRENCY_GBP :Britse Pond (GBP) @@ -935,12 +936,12 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Mexicaanse peso ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Wegvoertuigen -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Kies aan welke kant de wegvoertuigen moeten rijden +STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Kiest aan welke kant van de weg voertuigen moeten rijden STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Links rijden STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Rechts rijden STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Plaatsnamen -STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Kies type plaatsnamen +STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Stijl voor plaatsnamen kiezen ############ start of townname region STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH :Engels (Origineel) @@ -978,7 +979,7 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_12_MONTHS :Iedere 12 maand ############ end of autosave dropdown STR_GAME_OPTIONS_LANGUAGE :{BLACK}Taal -STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Selecteer de interfacetaal +STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Taal selecteren voor gebruikersscherm STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Volledig scherm STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Vink dit vakje aan om OpenTTD in het volledige scherm te spelen @@ -988,23 +989,23 @@ STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Selectee STR_GAME_OPTIONS_RESOLUTION_OTHER :Anders STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Menupuntgrootte -STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Kies de menupuntgrootte dat moet worden gebruikt +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Kiest de grootte van bedieningselementen STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normaal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dubbele grootte STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :4x Grootte STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basisset voor graphics -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Kies de te gebruiken basisset voor graphics +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Kiest de te gebruiken basisset voor grafische elementen STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} ontbrekend{P "" e}/corrupt{P "" e} bestand{P "" en} STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Aanvullende informatie over de basisset voor graphics STR_GAME_OPTIONS_BASE_SFX :{BLACK}Basisset voor geluidseffecten -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Kies de te gebruiken basisset voor geluidseffecten +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Kiest de te gebruiken basisset voor geluidseffecten STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Aanvullende informatie over de basisset voor geluidseffecten STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Basisset voor muziek -STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Kies de te gebruiken basisset voor muziek +STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Kiest de te gebruiken basisset voor muziek STR_GAME_OPTIONS_BASE_MUSIC_STATUS :{RED}{NUM} corrupt{P "" e} bestand{P "" en} STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Aanvullende informatie over the basisset voor muziek @@ -1040,9 +1041,9 @@ STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Verander STR_DIFFICULTY_LEVEL_SETTING_MAXIMUM_NO_COMPETITORS :{LTBLUE}Maximaal aantal tegenstanders: {ORANGE}{COMMA} STR_NONE :Geen -STR_FUNDING_ONLY :Alleen financieren +STR_FUNDING_ONLY :Alleen gefinancierd STR_MINIMAL :Minimaal -STR_NUM_VERY_LOW :Zeer Laag +STR_NUM_VERY_LOW :Zeer laag STR_NUM_LOW :Laag STR_NUM_NORMAL :Normaal STR_NUM_HIGH :Hoog @@ -1050,11 +1051,11 @@ STR_NUM_CUSTOM :Aangepast STR_NUM_CUSTOM_NUMBER :Aangepast ({NUM}) STR_VARIETY_NONE :Geen -STR_VARIETY_VERY_LOW :Zeer Laag +STR_VARIETY_VERY_LOW :Zeer laag STR_VARIETY_LOW :Laag STR_VARIETY_MEDIUM :Gemiddeld STR_VARIETY_HIGH :Hoog -STR_VARIETY_VERY_HIGH :Zeer Hoog +STR_VARIETY_VERY_HIGH :Zeer hoog STR_AI_SPEED_VERY_SLOW :Zeer langzaam STR_AI_SPEED_SLOW :Langzaam @@ -1062,7 +1063,7 @@ STR_AI_SPEED_MEDIUM :Gemiddeld STR_AI_SPEED_FAST :Snel STR_AI_SPEED_VERY_FAST :Zeer snel -STR_SEA_LEVEL_VERY_LOW :Zeer Laag +STR_SEA_LEVEL_VERY_LOW :Zeer laag STR_SEA_LEVEL_LOW :Laag STR_SEA_LEVEL_MEDIUM :Gemiddeld STR_SEA_LEVEL_HIGH :Hoog @@ -1083,14 +1084,14 @@ STR_SUBSIDY_X2 :x2 STR_SUBSIDY_X3 :x3 STR_SUBSIDY_X4 :x4 -STR_TERRAIN_TYPE_VERY_FLAT :Zeer Vlak +STR_TERRAIN_TYPE_VERY_FLAT :Zeer vlak STR_TERRAIN_TYPE_FLAT :Vlak STR_TERRAIN_TYPE_HILLY :Heuvelachtig STR_TERRAIN_TYPE_MOUNTAINOUS :Bergachtig STR_TERRAIN_TYPE_ALPINIST :Berglandschap STR_CITY_APPROVAL_PERMISSIVE :Toegeeflijk -STR_CITY_APPROVAL_TOLERANT :Tolerant +STR_CITY_APPROVAL_TOLERANT :Neutraal STR_CITY_APPROVAL_HOSTILE :Vijandig STR_WARNING_NO_SUITABLE_AI :{WHITE}Geen bruikbare AIs beschikbaar...{}U kunt diverse AI's downloaden via het 'Online Content' systeem @@ -1156,7 +1157,7 @@ STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Bouwsnelheid: { STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Beperk de hoeveelheid bouwactiviteiten voor computerspeler STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Voertuigstoringen: {STRING} STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Controle hoe vaak onvoldoende onderhouden voertuigen kapot kunnen gaan -STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Subsidie indicator: {STRING} +STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Subsidiefactor: {STRING} STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Instellen hoeveel wordt betaald voor gesubsidieerde verbindingen STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Bouwkosten: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Het niveau van bouw- en aankoopkosten instellen @@ -1165,14 +1166,14 @@ STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Wanneer ingesch STR_CONFIG_SETTING_TRAIN_REVERSING :Niet toestaan dat treinen keren in stations: {STRING} STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Indien ingeschakeld zullen treinen niet omkeren in niet-eind stations, zelfs als er een kortere weg naar hun volgende bestemming is bij omkeren STR_CONFIG_SETTING_DISASTERS :Rampen: {STRING} -STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Schakel rampen die af en toe voertuigen of infrastructuur kunnen blokkeren of vernietigen in/uit +STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Rampen in-uitschakelen die af en toe voertuigen of infrastructuur kunnen blokkeren of vernietigen STR_CONFIG_SETTING_CITY_APPROVAL :Houding van gemeentebestuur ten opzichte van herstructurering omgeving: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Bepaalt in hoeverre lawaai en schade aan het milieu door bedrijven de stadswaardering en verdere bouwacties beïnvloeden in hun omgeving STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Maximale kaarthoogte: {STRING} -STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Stel de maximum toegestane hoogte voor bergen op de kaart in +STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Maximaal toegestane hoogte voor bergen op de kaart instellen STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Je kunt de maximale kaarthoogte niet in deze waarde wijzigen. Minstens één berg op de kaart is hoger. -STR_CONFIG_SETTING_AUTOSLOPE :Omgeving aanpassen onder gebouwen, spoorwegen, enz. toestaan: {STRING} +STR_CONFIG_SETTING_AUTOSLOPE :Omgeving aanpassen onder gebouwen, spoorwegen enz. toestaan: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Staat het aanpassen van funderingen onder gebouwen en sporen toe zonder deze te verwijderen STR_CONFIG_SETTING_CATCHMENT :Meer realistische verzorgingsgebieden toestaan: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Verzorgingsgebieden met verschillende groottes voor verschillende typen stations en luchthavens @@ -1184,40 +1185,40 @@ STR_CONFIG_SETTING_TILE_LENGTH :{COMMA} tegel{P STR_CONFIG_SETTING_SMOKE_AMOUNT :Hoeveelheid rook/vonken: {STRING} STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Bepaal hoeveel rook of hoeveel vonken door de voertuigen worden uitgestoten. STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Treinacceleratiemodel: {STRING} -STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Selecteer de physics model voor de trein acceleratie. Het "originele" model straft hellingen gelijk voor alle voertuigen. Het "realistische" model bestraft hellingen en bochten, afhankelijk van de verschillende eigenschappen van de inhoud, zoals lengte en trekkracht -STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Wegvoertuig acceleratie model: {STRING} -STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Selecteer de physics model voor wegvoertuigacceleratie. Het "originele" model straft hellingen gelijk voor alle voertuigen. Het "realistische" model bestraft hellingen, afhankelijk van verschillende eigenschappen van het voertuig, bijvoorbeeld 'trekkracht' -STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :Hellingsterkte voor treinen: {STRING} +STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Natuurkundig model selecteren voor treinacceleratie. In het 'originele' model hebben hellingen dezelfde invloed op alle voertuigen. In het 'realistische' model hebben hellingen en bochten een verschillende invloed, afhankelijk van verschillende eigenschappen van de samenstelling, zoals lengte en trekkracht. +STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Acceleratiemodel voor wegvoertuigen: {STRING} +STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Natuurkundig model selecteren voor wegvoertuigacceleratie. In het 'originele' model hebben hellingen dezelfde invloed op alle voertuigen. In het 'realistische' model is de invloed van hellingen afhankelijk van verschillende eigenschappen van het voertuig, bijvoorbeeld 'trekkracht'. +STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :Hellingsteilheid voor treinen: {STRING} STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Steilheid van een schuine tegel voor een trein. Hogere waarden maken het moeilijker om een heuvel te beklimmen STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% -STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Hellingsterkte voor wegvoertuigen: {STRING} +STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Hellingsteilheid voor wegvoertuigen: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Steilheid van een schuine tegel voor een wegvoertuig. Hogere waarden maken het moeilijker om een heuvel te beklimmen STR_CONFIG_SETTING_FORBID_90_DEG :Treinen en schepen mogen niet 90° draaien: {STRING} STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Draaiingen met 90° treden op wanneer een horizontale baan direct gevolgd wordt door een verticaal baanstuk op de aangrenzende tegel, waardoor de trein daarna 90 graden draait wanneer de tegelrand wordt overgestoken in plaats van de gebruikelijke 45 graden voor andere spoorcombinaties. Dit geldt ook voor de draaicirkel van schepen -STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Sta het samenvoegen van indirect aansluitende stations toe: {STRING} -STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Sta toe dat er aanvullende onderdelen aan een station worden geplaatst zonder dat reeds bestaande onderdelen beïnvloed worden. Ctrl+klik is vereist tijdens het plaatsen van nieuwe onderdelen. +STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Samenvoegen van indirect aansluitende stations toestaan: {STRING} +STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Staat toe dat er aanvullende onderdelen aan een station worden geplaatst zonder dat reeds bestaande onderdelen beïnvloed worden. Ctrl+klik is vereist tijdens het plaatsen van nieuwe onderdelen. STR_CONFIG_SETTING_INFLATION :Inflatie: {STRING} -STR_CONFIG_SETTING_INFLATION_HELPTEXT :Schakel inflatie in de economie in, waardoor de kosten iets sneller stijgen dan de betalingen -STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :Maximum bruglengte: {STRING} +STR_CONFIG_SETTING_INFLATION_HELPTEXT :Inflatie inschakelen, waardoor de kosten iets sneller stijgen dan de betalingen +STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :Maximale lengte voor bruggen: {STRING} STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Maximale lengte voor te bouwen bruggen STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT :Maximale brughoogte: {STRING} -STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Maximum hoogte om bruggen te bouwen -STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :Maximum tunnellengte: {STRING} +STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Maximale hoogte om bruggen te bouwen +STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :Maximale tunnellengte: {STRING} STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Maximale lengte voor te bouwen tunnels STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :Handmatige bouwmethode voor primaire industrieën: {STRING} -STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Wijze van financiering van een primaire industrie. 'geen' betekent dat het niet mogelijk is om te financieren, 'prospectie' betekent dat financiering mogelijk is, maar de bouw vindt plaats in een willekeurige plek op de kaart en kan mislukken ook, "als andere bedrijfstakken": ruwe industrieën kan worden geconstrueerd door bedrijven als verwerkende industrie in elke positie zij willen +STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Wijze van financiering van een primaire industrie. 'Geen' betekent dat het niet mogelijk is om te financieren. 'Onderzoeken' betekent dat financiering mogelijk is, maar de bouw vindt plaats op een willekeurige plek op de kaart en kan ook mislukken. 'Zoals andere industrieën': basisindustrieën kunnen net zo worden geconstrueerd als verwerkende industrieën, op elke willekeurig plek. STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :Geen STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :Zoals andere industrieën -STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :Proberen +STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :Onderzoeken STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Vlak gebied rond industrieën: {STRING} STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Hoeveelheid ruimte rond een industrie. Dit zorgt ervoor dat lege ruimte rond een industrie beschikbaar blijft voor sporen, stations, wegen enz. STR_CONFIG_SETTING_MULTIPINDTOWN :Meerdere vergelijkbare industrieën per stad toestaan: {STRING} STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normaal zal een stad niet meer dan één industrie van ieder type toestaan. Door deze optie in te schakelen zullen steden meerdere industrieën van één soort accepteren. STR_CONFIG_SETTING_SIGNALSIDE :Seinen weergeven: {STRING} -STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Kies aan welke kans van het sppor de seinen worden geplaatst -STR_CONFIG_SETTING_SIGNALSIDE_LEFT :Aan de linker kant +STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Kiest aan welke kant van het spoor seinen worden geplaatst +STR_CONFIG_SETTING_SIGNALSIDE_LEFT :Links STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :Aan de rij zijde -STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :Aan de linker kant +STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :Rechts STR_CONFIG_SETTING_SHOWFINANCES :Financieel overzicht aan het einde van het jaar weergeven: {STRING} STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Indien ingeschakeld verschijnt het financiën venster aan het eind van elk jaar voor een gemakkelijke controle van de financiële status van het bedrijf STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Nieuwe orders zijn standaard 'non-stop': {STRING} @@ -1232,55 +1233,55 @@ STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Als dit is inge STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Uitgeschakeld STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Hoofdkijkvenster, alleen volledig scherm STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Hoofdkijkvenster -STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Elk kijkvenster +STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Alle kijkvensters STR_CONFIG_SETTING_BRIBE :Omkopen van gemeentebestuur toestaan: {STRING} STR_CONFIG_SETTING_BRIBE_HELPTEXT :Toestaan dat bedrijven mogen proberen de plaatselijke autoriteiten om te kopen. Als de omkoping wordt opgemerkt door een inspecteur, zal de onderneming niet in staat zijn om in de stad actie te ondernemen voor zes maanden STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Kopen van exclusieve transportrechten toestaan: {STRING} STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Wanneer een bedrijf de exclusieve transportrechten van een stad koopt, ontvangen de stations (zowel passagiers als vracht) van de tegenstanders geen vracht voor één heel jaar. -STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Financiering van gebouwen toestaan: {STRING} +STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Financieren van gebouwen toestaan: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Staat bedrijven toe geld te geven aan steden voor de financiering van nieuwe huizen. STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Financieren van lokale wegreconstructie toestaan: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Staat bedrijven toe geld te geven aan steden voor wegreconstructies zodat wegbedrijven gesaboteerd worden. STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Geld geven aan andere bedrijven toestaan: {STRING} -STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Sta toe dat bedrijven geld naar elkaar overmaken in een multiplayerspel. +STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Geld overmaken tussen bedrijven toestaan in netwerkspellen STR_CONFIG_SETTING_FREIGHT_TRAINS :Gewichtsfactor voor vracht om zware treinen te simuleren: {STRING} STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Stelt in hoe vracht treinen beïnvloedt. Een hogere waarde maakt het vervoer van vracht veeleisender voor treinen, met name in heuvels. -STR_CONFIG_SETTING_PLANE_SPEED :Vliegtuig snelheidsfactor: {STRING} +STR_CONFIG_SETTING_PLANE_SPEED :Snelheidsfactor voor vliegtuigen: {STRING} STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Stel de relatieve snelheid van de vliegtuigen in vergelijking met andere typen voertuigen, om de hoogte van het inkomen van het vervoer door vliegtuigen te verminderen STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} -STR_CONFIG_SETTING_PLANE_CRASHES :Aantal vliegtuigcrashes: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Kies de kans op een vliegtuigcrash +STR_CONFIG_SETTING_PLANE_CRASHES :Aantal neerstortende vliegtuigen: {STRING} +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Bepaalt de kans op neerstorten van een vliegtuig STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Geen STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Verminderd STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normaal STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Haltes plaatsen op door stad beheerde wegen toestaan: {STRING} STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Laat het bouwen van doorrijhaltes toe op stedelijke wegen -STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Sta doorrijhaltes op wegen van tegenstanders toe: {STRING} +STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Haltes op wegen van tegenstanders toestaan: {STRING} STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Laat het bouwen van doorrijhaltes toe op wegen van andere bedrijven STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Deze instelling kan niet gewijzigd worden als er voertuigen zijn -STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Onderhoud infrastructuur: {STRING} +STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Onderhoudskosten infrastructuur: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Wanneer dit is ingeschakeld, veroorzaakt de infrastructuur onderhoudskosten. De kosten groeien boven-proportioneel met de grootte van het netwerk, waardoor grotere bedrijven hierdoor meer worden beïnvloed dan kleinere STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Beginkleur voor bedrijf: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Kies de beginkleur voor het bedrijf +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Beginkleur voor het bedrijf kiezen STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Vliegvelden verlopen niet: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Het inschakelen van deze instelling zorgt ervoor dat elke luchthaven soort altijd beschikbaar blijft na de introductie -STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Waarschuw wanneer voertuig verdwaald is: {STRING} +STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Waarschuwen wanneer voertuig verdwaald is: {STRING} STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT :Veroorzaakt berichten over voertuigen die niet in staat zijn om een pad naar hun bestemming te vinden -STR_CONFIG_SETTING_ORDER_REVIEW :Controleer orders van voertuigen: {STRING} +STR_CONFIG_SETTING_ORDER_REVIEW :Orders van voertuigen controleren: {STRING} STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :Wanneer ingeschakeld, worden de orders van de voertuigen regelmatig gecontroleerd, en sommige voor de hand liggende problemen worden gemeld met een nieuwsbericht bij detectie STR_CONFIG_SETTING_ORDER_REVIEW_OFF :Nee -STR_CONFIG_SETTING_ORDER_REVIEW_EXDEPOT :Ja, maar sluit gestopte voertuigen uit -STR_CONFIG_SETTING_ORDER_REVIEW_ON :Van alle voertuigen -STR_CONFIG_SETTING_WARN_INCOME_LESS :Waarschuw als inkomsten van een voertuig negatief zijn: {STRING} +STR_CONFIG_SETTING_ORDER_REVIEW_EXDEPOT :Ja, maar gestopte voertuigen uitsluiten +STR_CONFIG_SETTING_ORDER_REVIEW_ON :Alle voertuigen +STR_CONFIG_SETTING_WARN_INCOME_LESS :Waarschuwen als inkomsten van een voertuig negatief zijn: {STRING} STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Wanneer ingeschakeld, wordt een nieuws-bericht verstuurd wanneer een voertuig geen winst heeft gemaakt in een kalenderjaar -STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Voertuigen verlopen nooit: {STRING} +STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Voertuigen verlopen niet: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Wanneer ingeschakeld, alle voertuig modellen blijven voor altijd beschikbaar na hun introductie STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Voertuig automatisch vernieuwen wanneer dit oud wordt: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Wanneer ingeschakeld, wordt een voertuig dat het einde van zijn levensduur nadert automatisch vervangen als aan de voorwaarden voor vernieuwing wordt voldaan -STR_CONFIG_SETTING_AUTORENEW_MONTHS :Vernieuw voertuigen automatisch na {STRING} maximumleeftijd +STR_CONFIG_SETTING_AUTORENEW_MONTHS :Voertuigen automatisch vernieuwen {STRING} maximumleeftijd STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Relatieve leeftijd van een voertuig wanneer dit in aanmerking komt voor automatisch vervangen STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} maand{P 0 "" en} voor STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} maand{P 0 "" en} na @@ -1290,10 +1291,10 @@ STR_CONFIG_SETTING_ERRMSG_DURATION :Duur van foutbe STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Duur voor het weergeven van foutberichten in een rood venster. Merk op dat sommige (kritische) foutmeldingen niet automatisch worden gesloten na deze tijd, deze moeten handmatig worden gesloten STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE :{COMMA} seconde{P 0 "" n} STR_CONFIG_SETTING_HOVER_DELAY :Knopinfo weergeven: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Vertraging voordat tooltips worden weergegeven wanneer de muis over een interface-element. Als alternatief kunnen tooltips worden gebonden aan de rechtermuisknop wanneer de waarde 0 is. +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Vertraging voordat knopinfo worden weergegeven wanneer je de muis boven een besturingselement houdt. Wanneer de waarde 0 is, wordt knopinfo aan de rechtermuisknop gebonden. STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Muis stilhouden gedurende {COMMA} seconde{P 0 "" n} STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Rechtsklik -STR_CONFIG_SETTING_POPULATION_IN_LABEL :Geef het inwoneraantal bij een stad weer: {STRING} +STR_CONFIG_SETTING_POPULATION_IN_LABEL :Inwoneraantal bij stad weergeven: {STRING} STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Aantal inwoners van een stad weergeven bij naam op de kaart STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Dikte van de lijnen in grafieken: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Breedte van de lijnen in de grafiek. Een dunne lijn is preciezer leesbaar, een dikke lijn is makkelijker te zien en kleuren zijn makkelijker om te onderscheiden @@ -1304,31 +1305,31 @@ STR_CONFIG_SETTING_LAND_GENERATOR :Landgenerator: STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :De originele generator hangt af van de standaard graphicsset en stelt vaste landschapsvormen samen. TerraGenesis is een op Perlin noise gebaseerde generator met fijnere besturingsinstellingen STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Origineel STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :TerraGenesis -STR_CONFIG_SETTING_TERRAIN_TYPE :Terrein type: {STRING} +STR_CONFIG_SETTING_TERRAIN_TYPE :Terreintype: {STRING} STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Alleen TerraGenesis) Heuvelachtigheid van het landschap STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industriedichtheid: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Stelt in hoeveel industrieën worden gegenereerd en welk niveau tijdens het spel moet worden gehandhaafd STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximumafstand van de rand voor Olierafinaderijen: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Olieraffinaderijen worden alleen gebouwd nabij de kaart grens, dat is aan de kust van eiland kaarten STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Sneeuwhoogte: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Instellen op welke hoogte de sneeuw begint in sub-arctische landschap. Sneeuw heeft ook invloed op de industrie generatie en stadsgroei eisen +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Stelt in op welke hoogte de sneeuw begint in subarctisch landschap. Sneeuw heeft ook invloed op het ontstaan van industrieën en op de vereisten voor stadsgroei. STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Ruwheid van het terrein: {STRING} -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Alleen TerraGenesis) Kies de frequentie van de heuvels: Gladde landschappen hebben minder, meer wijdverspreide heuvels. Ruwe landschappen hebben veel heuvels, die repetitief kunnen lijken +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Alleen TerraGenesis) Kiest de frequentie van heuvels: gladde landschappen hebben minder, meer wijdverspreide heuvels. Ruwe landschappen hebben veel heuvels, die repetitief kunnen lijken. STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Erg glad STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Glad STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Ruig STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Erg ruig STR_CONFIG_SETTING_VARIETY :Variëteit distributie: {STRING} -STR_CONFIG_SETTING_VARIETY_HELPTEXT :(Alleen TerraGenesis) Controleer of de kaart zowel bergachtige als vlakke gebieden bevat. Aangezien dit alleen de kaart platter maakt, moeten andere instellingen worden ingesteld op bergachtige +STR_CONFIG_SETTING_VARIETY_HELPTEXT :(Alleen TerraGenesis) Bepaalt of de kaart zowel bergachtige als vlakke gebieden bevat. Aangezien dit de kaart alleen platter maakt, moeten andere instellingen worden ingesteld op bergachtig. STR_CONFIG_SETTING_RIVER_AMOUNT :Hoeveelheid rivieren: {STRING} -STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Kies hoeveel rivieren er gegenereerd worden +STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Kiest hoeveel rivieren er gegenereerd worden STR_CONFIG_SETTING_TREE_PLACER :Algoritme voor plaatsing van bomen: {STRING} -STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Kies de verdeling van de bomen op de kaart: 'Origineel' plant bomen gelijkmatig verspreid, 'verbeterde' plant in groepen +STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Kiest de verdeling van de bomen op de kaart: 'Origineel' plant bomen gelijkmatig verspreid, 'Verbeterd' plant in groepen. STR_CONFIG_SETTING_TREE_PLACER_NONE :Geen STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Origineel STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Verbeterd STR_CONFIG_SETTING_ROAD_SIDE :Wegvoertuigen: {STRING} -STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Kies de rij zijde +STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Rijzijde voor verkeer kiezen STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Draaiing van hoogtekaart: {STRING} STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Tegen de klok in STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Met de klok mee @@ -1340,33 +1341,33 @@ STR_CONFIG_SETTING_STATION_SPREAD :Maximale statio STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :Maximaal oppervlak waarover onderdelen van één station verspreid mogen zijn. Grotere oppervlakken vertragen het spel! STR_CONFIG_SETTING_SERVICEATHELIPAD :Helikopters automatisch repareren op helipads: {STRING} STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :Helikopteronderhoud na landing, ook als er geen hangar is op de luchthaven. -STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :Verbind de knoppenbalk voor terreinvorming met die voor spoor/weg/water/vliegveld: {STRING} +STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :Knoppenbalk voor terreinvorming koppelen aan die voor spoor/weg/water/vliegveld: {STRING} STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :Bij het openen van een werkbalk voor constructie van transport ook een werkbalk openen voor landschapsvorming. -STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR :Gebruiker land kleur op de kleine kaart: {STRING} +STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR :Landkleur gebruiker op de kleine kaart: {STRING} STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Kleur van het terrein op de kleine kaart. STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Groen STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Donker groen STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violet STR_CONFIG_SETTING_SCROLLMODE :Verplaatsingsgedrag voor kijkvensters: {STRING} STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Gedrag tijdens het verplaatsen van de kaart -STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Verplaats kijkvenster met RMB, muispositie staat vast -STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Verplaats kaart met RMB, muispositie staat vast -STR_CONFIG_SETTING_SCROLLMODE_RMB :Verplaats kaart met RMB -STR_CONFIG_SETTING_SCROLLMODE_LMB :Verplaats kaart met LMB +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Kijkvenster verplaatsen met rechtermuisknop, muispositie vergrendeld +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Kaart verplaatsen met rechtermuisknop, muispositie vergrendeld +STR_CONFIG_SETTING_SCROLLMODE_RMB :Kaart verplaatsen met rechtermuisknop +STR_CONFIG_SETTING_SCROLLMODE_LMB :Kaart verplaatsen met linkermuisknop STR_CONFIG_SETTING_SMOOTH_SCROLLING :Kijkvenster vloeiend verplaatsen: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Bepalen hoe de hoofdweergave naar een specifieke positie schuift bij het klikken op de minikaart of bij het uitvoeren van een commando om naar een specifiek object op de kaart te scrollen. Indien ingeschakeld, dan scrollt het kijkvenster soepel, als deze uitgeschakeld gaat u rechtstreeks naar de beoogde plek STR_CONFIG_SETTING_MEASURE_TOOLTIP :Maten weergeven bij het gebruik van diverse bouwgereedschappen: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Geef tegelafstanden en hoogteverschillen weer bij het slepen tijdens het bouwen -STR_CONFIG_SETTING_LIVERIES :Laat alle voertuigkleuren zien: {STRING} +STR_CONFIG_SETTING_LIVERIES :Alle voertuigkleuren weergeven: {STRING} STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Beheer het gebruik van voertuigspecifieke levering voor voertuigen (in tegenstelling tot bedrijfsspecifieke leveringen). STR_CONFIG_SETTING_LIVERIES_NONE :Niets STR_CONFIG_SETTING_LIVERIES_OWN :Eigen bedrijf STR_CONFIG_SETTING_LIVERIES_ALL :Alle bedrijven -STR_CONFIG_SETTING_PREFER_TEAMCHAT :Voorkeur voor team chat met : {STRING} -STR_CONFIG_SETTING_PREFER_TEAMCHAT_HELPTEXT :Schakel de binding van bedrijfs-interne en publieke chat om resp. +STR_CONFIG_SETTING_PREFER_TEAMCHAT :Voorkeur voor teamchat met : {STRING} +STR_CONFIG_SETTING_PREFER_TEAMCHAT_HELPTEXT :Koppeling van bedrijfsinterne en publieke chat schakelen met resp. STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING :Functie van muiswiel: {STRING} STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING_HELPTEXT :Verplaatsen inschakelen met tweedimensionale muiswieltjes -STR_CONFIG_SETTING_SCROLLWHEEL_ZOOM :Zoom kaart +STR_CONFIG_SETTING_SCROLLWHEEL_ZOOM :Kaart vergroten-verkleinen STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :Kaart verplaatsen STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Uit STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER :Muiswielsnelheid: {STRING} @@ -1374,21 +1375,21 @@ STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Gevoeligheid va STR_CONFIG_SETTING_OSK_ACTIVATION :Toetsenbord op scherm: {STRING} STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Selecteer de methode om het toetsenbord op het scherm te openen voor tekst invoeren in editboxes alleen met behulp van het aanwijsapparaat. Dit is bedoeld voor kleine apparaten zonder toetsenbord STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :Uitgeschakeld -STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dubbel klik +STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dubbelklik STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Enkel klik (met focus) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Enkel klik (onmiddelijk) STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Rechtsklikemulatie: {STRING} -STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Selecteer de methode die rechter muisknop klikken nabootst +STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Methode selecteeren voor nabootsen van rechtsklikken STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Command-klik STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+klik STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Uit -STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Sluit window met rechts-klik: {STRING} -STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Sluit een venster door met de rechtermuisknop erin te klikken. Schakelt de tooltip uit met de rechtermuisknop! +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Vensters sluiten met rechtsklik: {STRING} +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Venster sluiten met de rechtermuisknop. Schakelt knopinfo met de rechtermuisknop uit! STR_CONFIG_SETTING_AUTOSAVE :Automatisch opslaan: {STRING} -STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Kies tijdsduur voor automatische spelopslag +STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Tijdsduur kiezen voor automatische spelopslag STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Datumindeling {STRING} gebruiken voor naamgeving van opgeslagen spellen STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Formaat van de datum in savegamebestandsnamen @@ -1400,10 +1401,10 @@ STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Automatisch pau STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Wanneer ingeschakeld, het spel zal automatisch pauzeren bij het starten van een nieuw spel, waardoor nadere bestudering van de kaart mogelijk is STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :Toestaan wanneer gepauzeerd: {STRING} STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Selecteer welke acties kunnen worden uitgevoerd terwijl het spel is gepauzeerd -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Geen mogelijkheden +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Niets STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :Alle niet-constructiemogelijkheden STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :Alles behalve landschapsaanpassingen -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :Alle mogelijkheden +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :Alles STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Groepen gebruiken in voertuigenlijst: {STRING} STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Schakelt het gebruik van de geavanceerde voertuigenlijsten in voor het groeperen van voertuigen STR_CONFIG_SETTING_LOADING_INDICATORS :Laadpercentages gebruiken: {STRING} @@ -1421,7 +1422,7 @@ STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Laatst beschikb STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :Meest gebruikte STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Gereserveerd spoor weergeven: {STRING} STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Geef gereserveerde tracks een andere kleur om te helpen met de problemen met treinen te weigeren een route op basis van blokken in te gaan -STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Hou bouwgereedschappen actief na gebruik: {STRING} +STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Bouwgereedschappen actief houden na gebruik: {STRING} STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Houd de bouwhulpmiddelen voor bruggen, tunnels, enz. open na gebruik STR_CONFIG_SETTING_EXPENSES_LAYOUT :Uitgaven in bedrijfsfinanciënvenster groeperen: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Definieer de lay-out voor het bedrijfsuitgavenvenster @@ -1434,7 +1435,7 @@ STR_CONFIG_SETTING_SOUND_NEW_YEAR :Einde jaar: {ST STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Geluidseffect afspelen bij jaaroverzicht van bedrijf t.o.v. vorig jaar STR_CONFIG_SETTING_SOUND_CONFIRM :Bouw: {STRING} STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Speel geluidseffecten bij succesvolle constructies of andere acties -STR_CONFIG_SETTING_SOUND_CLICK :Knop kliks: {STRING} +STR_CONFIG_SETTING_SOUND_CLICK :Klikgeluid knoppen: {STRING} STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT :Piep bij het klikken op knoppen STR_CONFIG_SETTING_SOUND_DISASTER :Rampen/ongelukken: {STRING} STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT :Speel geluidseffecten van ongelukken en rampen @@ -1448,7 +1449,7 @@ STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING_HELPTEXT :Wanneer je dit STR_CONFIG_SETTING_MAX_TRAINS :Maximumaantal treinen per bedrijf: {STRING} STR_CONFIG_SETTING_MAX_TRAINS_HELPTEXT :Maximumaantal treinen dat een bedrijf kan hebben STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :Maximumaantal wegvoertuigen per bedrijf: {STRING} -STR_CONFIG_SETTING_MAX_ROAD_VEHICLES_HELPTEXT :Maximum aantal wegvoertuigen dat een bedrijf kan hebben +STR_CONFIG_SETTING_MAX_ROAD_VEHICLES_HELPTEXT :Maximumaantal wegvoertuigen dat een bedrijf mag hebben STR_CONFIG_SETTING_MAX_AIRCRAFT :Maximumaantal vliegtuigen per bedrijf: {STRING} STR_CONFIG_SETTING_MAX_AIRCRAFT_HELPTEXT :Maximumaantal vliegtuigen dat een bedrijf kan hebben STR_CONFIG_SETTING_MAX_SHIPS :Maximumaantal schepen per bedrijf: {STRING} @@ -1470,12 +1471,12 @@ STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Gemiddeld STR_CONFIG_SETTING_AI_PROFILE_HARD :Moeilijk STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Computerspelers toestaan in netwerkspelen: {STRING} -STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Sta door computer gegenereerde speler toe deel te nemen in multiplayerspellen -STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes voordat scripts worden gestopt: {STRING} +STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Computerspelers toestaan in netwerkspellen +STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Aantal opcodes voordat scripts worden gestopt: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximumaantal berekeningsstappen die een script kan maken in een beurt STR_CONFIG_SETTING_SERVINT_ISPERCENT :Onderhoudstermijnen in procenten: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Kies of onderhoud van de voertuigen wordt geactiveerd door verstreken tijd sinds het laatste onderhoud of door het zakken van de betrouwbaarheid met een bepaald percentage van de maximale betrouwbaarheid +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Kiest of onderhoud van de voertuigen wordt geactiveerd door verstreken tijd sinds het laatste onderhoud of door het zakken van de betrouwbaarheid met een bepaald percentage van de maximale betrouwbaarheid STR_CONFIG_SETTING_SERVINT_TRAINS :Standaardonderhoudstermijn voor treinen: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Standaardonderhoudstermijn instellen voor nieuwe treinen als er geen expliciete onderhoudstermijn is ingesteld voor het voertuig STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}dag{P 0 "" en}/% @@ -1488,7 +1489,7 @@ STR_CONFIG_SETTING_SERVINT_SHIPS :Standaardonderh STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Standaardonderhoudstermijn voor nieuwe schepen als er geen expliciete onderhoudstermijn is ingesteld voor het voertuig STR_CONFIG_SETTING_NOSERVICE :Onderhoud uitschakelen wanneer defecten uit staan: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Als deze optie is ingeschakeld worden voertuigen niet onderhouden als ze niet kapot kunnen gaan. -STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Schakel snelheidslimieten voor wagons aan: {STRING} +STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Snelheidslimieten voor wagons inschakelen: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Wanneer ingeschakeld, ook gebruik maken van snelheidsbeperkingen van wagons voor het bepalen van de maximale snelheid van een trein STR_CONFIG_SETTING_DISABLE_ELRAILS :Elektrische sporen uitschakelen: {STRING} STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Wanneer dit is ingeschakeld, hoeven sporen niet te zijn geëlektrificeerd voor elektrische treinen @@ -1528,7 +1529,7 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_OFF :Uit STR_CONFIG_SETTING_NEWS_MESSAGES_SUMMARY :Samengevat STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Volledig -STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Kleurenfoto's komen in: {STRING} +STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Kleurenfoto's verschijnen in: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Jaar dat de krant aankondigt in kleur te gaan afdrukken. Voor dit jaar wordt zwart-wit gebruikt STR_CONFIG_SETTING_STARTING_YEAR :Startjaar: {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY :Vloeiende economie inschakelen (meer, kleinere veranderingen): {STRING} @@ -1542,27 +1543,27 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Stel de afstand STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} tegel{P 0 "" s} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Bij slepen vaste afstand tussen seinen aanhouden: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Selecteer het gedrag van seinplaatsing wanneer je met Ctrl+slepen seinen plaatst. Indien dit uitgeschakeld is, dan worden seinen rondom tunnels of bruggen geplaatst om lange stukken te vermijden zonder seinen. Indien dit ingeschakeld is, dan worden seinen om de N tegels geplaatst, waardoor de uitlijning van de seinen op parallelle sporen makkelijker is -STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Plaats automatisch armseinen voor: {STRING} +STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Automatisch armseinen plaatsen voor: {STRING} STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Stel het jaar waarin elektrische seinen zal worden gebruikt voor sporen. Voor dit jaar zal niet-elektrische seinen worden gebruikt (die exact dezelfde functie hebben, maar verschillend uiterlijk) -STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Activeer de seininterface: {STRING} +STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Seinenvenster inschakelen: {STRING} STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Een venster weergeven waar je de soorten seinen kunt kiezen om te bouwen in plaats van alleen bladeren door seintypes met Ctrl+klikken op gebouwde seinen STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Seintype dat standaard moet worden gebouwd: {STRING} STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Standaard te gebruiken sein. STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Normale seinen STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :Routeseinen STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :Eenrichtingsrouteseinen -STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Blader door seintypes: {STRING} +STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Door seintypen bladeren: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Selecteer welke soorten seinen worden gebruikt wanneer je Ctrl + klikt op een bouwsignaal met het seingereedschap STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :Alleen normaal STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Alleen routeseinen -STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Allemaal +STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Alle STR_CONFIG_SETTING_TOWN_LAYOUT :Wegpatroon voor nieuwe steden: {STRING} STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT :Patroon voor het wegennetwerk van steden. STR_CONFIG_SETTING_TOWN_LAYOUT_DEFAULT :Origineel STR_CONFIG_SETTING_TOWN_LAYOUT_BETTER_ROADS :Betere wegen -STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :2x2 raster -STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :3x3 raster +STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :2x2-raster +STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :3x3-raster STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Willekeurig STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Steden mogen wegen bouwen: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Steden toestaan om wegen te bouwen ten behoeve van groei. Schakel deze optie uit als je niet wilt dat gemeenten zelf wegen bouwen. @@ -1586,7 +1587,7 @@ STR_CONFIG_SETTING_TOOLBAR_POS :Positie van alg STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horizontale positie van de algemene taakbalk aan de bovenkant van het scherm. STR_CONFIG_SETTING_STATUSBAR_POS :Positie van de statusbalk: {STRING} STR_CONFIG_SETTING_STATUSBAR_POS_HELPTEXT :De horizontale positie van de statusbalk aan de onderkant van het scherm. -STR_CONFIG_SETTING_SNAP_RADIUS :Windowssnap radius: {STRING} +STR_CONFIG_SETTING_SNAP_RADIUS :Straal voor vensters vastmaken: {STRING} STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Afstand tussen vensters voordat het venster wordt verplaatst wordt automatisch uitgelijnd naar de nabijgelegen vensters STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} pixel{P 0 "" s} STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :Uitgeschakeld @@ -1594,9 +1595,9 @@ STR_CONFIG_SETTING_SOFT_LIMIT :Maximumaantal ( STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Aantal niet-klevende open vensters voor oude vensters automatisch worden gesloten om ruimte voor nieuwe vensters te maken STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA} STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :uitgeschakeld -STR_CONFIG_SETTING_ZOOM_MIN :Maximaal inzoom niveau: {STRING} -STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :De maximale zoom-in niveau voor kijkvensters. Merk op dat mogelijkheden voor het hogere zoom-in levels de geheugenvereisten verhoogt -STR_CONFIG_SETTING_ZOOM_MAX :Maximaal uitzoom niveau: {STRING} +STR_CONFIG_SETTING_ZOOM_MIN :Maximaal inzoomniveau: {STRING} +STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Het maximale inzoomniveau voor kijkvensters. Merk op dat hogere inzoomniveaus hogere eisen stellen aan het geheugen. +STR_CONFIG_SETTING_ZOOM_MAX :Maximaal uitzoomniveau: {STRING} STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :De maximale zoom-uit niveau voor kijkvensters. Hogere zoom-uit niveaus kunnen leiden tot vertraging bij gebruik STR_CONFIG_SETTING_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :2x @@ -1615,32 +1616,32 @@ STR_CONFIG_SETTING_LARGER_TOWNS :Verhouding van STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Aantal steden die een stad worden, dus een stad die groter begint en sneller groeit STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 op {COMMA} STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Geen -STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Stadsgroeiindicator: {STRING} +STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Beginfactor voor stadsgroei: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Gemiddelde grootte van steden in vergelijking tot normale steden bij het begin van het spel. STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Werk distributiegrafiek elke {STRING}{NBSP}dag{P 0:2 "" en} bij STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Tijd tussen opeenvolgende herberekeningen van de link grafiek. Elke herberekening berekent de plannen voor een component van de grafiek. Dat betekent dat een waarde X voor deze instelling betekent niet dat de hele grafiek wordt elke X dagen worden bijgewerkt. Slechts een component wil. Hoe korter u instellen hoe meer CPU-tijd nodig is om het te berekenen zal zijn. Hoe langer je instellen hoe langer het zal duren totdat de lading distributie start op nieuwe routes. -STR_CONFIG_SETTING_LINKGRAPH_TIME :Neem {STRING}{NBSP}dag{P 0:2 "" en} voor de herberekening van de distributie grafiek +STR_CONFIG_SETTING_LINKGRAPH_TIME :{STRING}{NBSP}dag{P 0:2 "" en} gebruiken voor herberekening van de distributiegrafiek STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Tijd gebruikt voor elke herberekening van een link grafiek component. Wanneer een herberekening wordt gestart, wordt een thread voortgebracht die mag lopen voor dit aantal dagen. Hoe korter u dit instelt des te waarschijnlijker het is dat de draad niet is voltooid als het zou moeten. Dan stopt het spel totdat het is ("lag"). Hoe langer je instellen hoe langer het duurt voor de distributie aan te passen wanneer routes te wijzigen. -STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :handmatig -STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asymmetrisch -STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :symmetrisch +STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :Handmatig +STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :Asymmetrisch +STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :Symmetrisch STR_CONFIG_SETTING_DISTRIBUTION_PAX :Distributiemodus voor passagiers: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :'Symmetrisch' betekent dat ongeveer hetzelfde aantal passagiers van station A naar station B gaat als van B naar A. 'Asymmetrisch' betekent dat willekeurige aantallen passagiers reizen in beide richtingen. 'Handmatig' betekent dat er geen automatische distributie plaatsvindt voor passagiers. STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Distributiemodus voor post: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :"symmetrisch" betekent dat ongeveer dezelfde hoeveelheid post zal worden verzonden van een station A naar een station B als B naar A. "asymmetrisch" betekent dat willekeurige hoeveelheden post in beide richtingen worden verzonden. "handmatig" betekent dat er geen automatische distributie zal plaatsvinden voor post. +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :'Symmetrisch' betekent dat ongeveer dezelfde hoeveelheid post wordt verzonden van station A naar station B als van B naar A. 'Asymmetrisch' betekent dat willekeurige hoeveelheden post in beide richtingen worden verzonden. 'Handmatig' betekent dat er geen automatische distributie plaatsvindt voor post. STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Distributiemodus voor de GEPANTSERDE ladingsklasse: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :De GEPANTSERDE ladingsklasse bevat waardevolle spullen in het gematigde klimaat, diamanten in het subtropische klimaat of goud in het subarctische klimaat. NewGRF's kunnen dat veranderen. "symmetrisch" betekent dat ongeveer dezelfde hoeveelheid lading wordt verzonden van een station A naar station B als een van B naar A. "asymmetrisch" betekent dat deze vracht willekeurig in beide richtingen kan worden verzonden. "handmatig" betekent dat er geen automatische distributie zal plaatsvinden voor die lading. Het wordt aanbevolen om dit op asymmetrisch of handmatig te zetten bij het spelen van subarctisch klimaat, omdat banken geen goud zullen terugsturen naar goudmijnen. Voor gematigde en subtropische klimaten kan je ook symmetrisch kiezen, omdat banken waardevolle spullen zullen terugsturen naar de oorspronkelijke bank. +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :De GEPANTSERDE ladingsklasse bevat waardevolle spullen in het gematigde klimaat, diamanten in het subtropische klimaat of goud in het subarctische klimaat. NewGRF's kunnen dat veranderen. 'Symmetrisch' betekent dat ongeveer dezelfde hoeveelheid lading wordt verzonden van een station A naar station B als van B naar A. 'Asymmetrisch' betekent dat deze vracht willekeurig in beide richtingen kan worden verzonden. 'Handmatig' betekent dat er geen automatische distributie zal plaatsvinden voor die lading. Het wordt aanbevolen om dit op 'Asymmetrisch' of 'Handmatig' te zetten bij het spelen in subarctisch klimaat omdat banken geen goud terugsturen naar goudmijnen. Voor gematigd en subtropisch klimaat kun je ook 'Symmetrisch' kiezen omdat banken waardevolle spullen terug kunnen sturen naar de oorspronkelijke bank. STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Distributiemodus voor andere vrachtsoorten: {STRING} -STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :"symmetrisch" betekent dat willekeurige hoeveelheden lading in beide richtingen kunnen worden gestuurd. "handmatig" betekent dat er geen automatische distributie zal plaatsvinden voor die lading. +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :'Symmetrisch' betekent dat willekeurige hoeveelheden lading in beide richtingen kunnen worden gestuurd. 'Handmatig' betekent dat er geen automatische distributie plaatsvindt voor die lading. STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Verdeelnauwkeurigheid: {STRING} STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Hoe hoger de instelling, des te meer CPU-tijd de berekening van de linkgrafiek zal gebruiken. Als het te lang duurt, kan dan dat lag opleveren. Als je dit echter op een lage waarde instelt, zal de verdeling onnauwkeurig zijn, en kan het zijn dat vracht niet wordt gestuurd naar de plekken waar het naartoe moet gaan. STR_CONFIG_SETTING_DEMAND_DISTANCE :Effect van afstand op de vraag: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Als je dit op een waarde hoger dan 0 zet, dan zal de afstand tussen het station van herkomst A met enige vracht en een mogelijke bestemming B effect hebben op de hoeveelheid lading verzonden van A naar B. Hoe verder weg B is van A, des te minder lading wordt verzonden. Hoe hoger je deze instelt, hoe minder lading wordt verzonden naar verder geleden stations en meer lading zal worden verzonden naar dichtbij gelegen stations. STR_CONFIG_SETTING_DEMAND_SIZE :Hoeveelheid terugkerende vracht voor symmetrische modus: {STRING} STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Door dit op minder dan 100% te zetten lijkt de symmetrische verdeling meer op de asymmetrische verdeling. Minder vracht zal geforceerd worden om zich terug te sturen als er een bepaalde hoeveelheid wordt verzonden naar een station. Op 0% van de symmetrische verdeling gedraagt deze zicht als de asymmetrische verdeling. -STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Verzadiging van korte routes voor het gebruik van ruime routes: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Vaak zijn er meerdere routes mogelijk tussen twee stations. Cargodist zal de kortste route eerst verzadigen, gebruik dan de tweede kortste route tot die verzadigd is en ga zo maar door. Verzadiging wordt bepaald door een schatting van de capaciteit en het geplande gebruik. Zodra alle routes verzadigd zijn, maar er is meer vraag, zal alle wegen overbelast worden, die met hoge capaciteit eerst. In veel gevallen zat het algoritme niet nauwkeurig de capaciteit inschatten, helaas. Met deze instelling kunt u aangeven tot welk percentage een korter pad moet worden verzadigd eer de eerst volgende langere route wordt gekozen. Zet deze op minder dan 100% om overvolle stations in geval van overschat capaciteit te voorkomen. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Verzadiging van korte routes voordat routes met hoge capaciteit worden gebruikt: {STRING} +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Vaak zijn er meerdere routes mogelijk tussen twee stations. De vrachtdistributie verzadigt eerst de kortste route, gebruikt dan de op één na kortste route tot die verzadigd is enzovoort. Verzadiging wordt bepaald door een schatting van de capaciteit en het geplande gebruik. Wanneer alle routes verzadigd zijn, maar er is meer vraag, raken alle wegen overbelast, die met hoge capaciteit als eerste. In veel gevallen schat het algoritme helaas de capaciteit niet nauwkeurig in. Met deze instelling kun je aangeven tot welk percentage een korter pad moet worden verzadigd voordat de eerstvolgende, langere route wordt gekozen. Stel dit in op minder dan 100% om overvolle stations in geval van overschatte capaciteit te voorkomen. STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Snelheidseenheden: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Wanneer een snelheid wordt weergegeven in het gebruikersscherm, gebruik dan de geselecteerde eenheden @@ -1667,7 +1668,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_METRIC :Metrisch (l) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_SI :SI (m³) STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :Trekkrachteenheden: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT :Wanneer trekkracht, wordt weergegeven in de gebruikersinterface, laten dat in de geselecteerde eenheden zien +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT :Wanneer trekkracht wordt weergegeven in het gebruikersscherm, weergeven in de geselecteerde eenheden STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_IMPERIAL :Imperiaal (lbf) STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_METRIC :Metrisch (kgf) STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_SI :SI (kN) @@ -1689,11 +1690,11 @@ STR_CONFIG_SETTING_ADVISORS :{ORANGE}Nieuws/ STR_CONFIG_SETTING_COMPANY :{ORANGE}Bedrijf STR_CONFIG_SETTING_ACCOUNTING :{ORANGE}Boekhouding STR_CONFIG_SETTING_VEHICLES :{ORANGE}Voertuigen -STR_CONFIG_SETTING_VEHICLES_PHYSICS :{ORANGE}Physics +STR_CONFIG_SETTING_VEHICLES_PHYSICS :{ORANGE}Natuurkundige eigenschappen STR_CONFIG_SETTING_VEHICLES_ROUTING :{ORANGE}Routebepaling STR_CONFIG_SETTING_LIMITATIONS :{ORANGE}Beperkingen STR_CONFIG_SETTING_ACCIDENTS :{ORANGE}Rampen/ongelukken -STR_CONFIG_SETTING_GENWORLD :{ORANGE}Wereldgeneratie +STR_CONFIG_SETTING_GENWORLD :{ORANGE}Wereldontwikkeling STR_CONFIG_SETTING_ENVIRONMENT :{ORANGE}Omgeving STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :{ORANGE}Autoriteiten STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Steden @@ -1741,11 +1742,11 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Toewijze STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} STR_INTRO_NEW_GAME :{BLACK}Nieuw spel -STR_INTRO_LOAD_GAME :{BLACK}Laad spel +STR_INTRO_LOAD_GAME :{BLACK}Spel laden STR_INTRO_PLAY_SCENARIO :{BLACK}Speel scenario STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Speel hoogtekaart STR_INTRO_SCENARIO_EDITOR :{BLACK}Scenario bewerken -STR_INTRO_MULTIPLAYER :{BLACK}Multiplayer +STR_INTRO_MULTIPLAYER :{BLACK}Netwerkspel STR_INTRO_GAME_OPTIONS :{BLACK}Spelopties STR_INTRO_HIGHSCORE :{BLACK}Scoretabel @@ -1756,16 +1757,16 @@ STR_INTRO_SCRIPT_SETTINGS :{BLACK}AI-/spel STR_INTRO_QUIT :{BLACK}Afsluiten STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Start een nieuw spel. Ctrl+klik slaat de kaartconfiguratie over -STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Laad een opgeslagen spel +STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Een opgeslagen spel laden STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Start een nieuw spel, gebruik een hoogtekaart als landschap STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Start een nieuw spel, gebaseerd op een scenario STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Maak een eigen spelwereld/scenario STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Start een multiplayerspel -STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Kies gematigd klimaat -STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Kies subarctisch klimaat -STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Kies subtropisch klimaat -STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Kies speelgoedlandschap +STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Gematigd klimaat +STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Subarctisch klimaat +STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Subtropisch klimaat +STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Speelgoedlandschap STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Spelopties weergeven STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Scoretabel weergeven @@ -1775,7 +1776,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Zoeken n STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}AI-/spelscriptinstellingen weergeven STR_INTRO_TOOLTIP_QUIT :{BLACK}Verlaat 'OpenTTD' -STR_INTRO_BASESET :{BLACK}De huidige gekozen graphics set mist {NUM} afbeelding{P "" en}. Controleer of er updates zijn voor deze basisset. +STR_INTRO_BASESET :{BLACK}De huidige gekozen set grafische elementen mist {NUM} afbeelding{P "" en}. Controleer of er updates zijn voor deze basisset. STR_INTRO_TRANSLATION :{BLACK}Deze vertaling mist {NUM} tekst{P "" en}. Help aub om OpenTTD beter te maken door je al vertaler aan te melden. Zie readme.txt voor details. # Quit window @@ -1873,7 +1874,7 @@ STR_FACE_ADVANCED_TOOLTIP :{BLACK}Geavance STR_FACE_SIMPLE :{BLACK}Eenvoudig STR_FACE_SIMPLE_TOOLTIP :{BLACK}Eenvoudige gezichtskeuze STR_FACE_LOAD :{BLACK}Laden -STR_FACE_LOAD_TOOLTIP :{BLACK}Laad favoriet gezicht +STR_FACE_LOAD_TOOLTIP :{BLACK}Favoriet gezicht laden STR_FACE_LOAD_DONE :{WHITE}Je favoriete gezicht is geladen uit het OpenTTD-configuratiebestand STR_FACE_FACECODE :{BLACK}Gezichtsnummer STR_FACE_FACECODE_TOOLTIP :{BLACK}Bekijk en/of bewaar gezichtsnummer van de bedrijfspresident @@ -1881,7 +1882,7 @@ STR_FACE_FACECODE_CAPTION :{WHITE}Bekijk e STR_FACE_FACECODE_SET :{WHITE}Nieuwe gezichtsnummercode is opgeslagen STR_FACE_FACECODE_ERR :{WHITE}Kon gezichtsnummer niet bewaren - het moet een getal zijn tussen 0 en 4.294.967.295! STR_FACE_SAVE :{BLACK}Opslaan -STR_FACE_SAVE_TOOLTIP :{BLACK}Sla favoriet gezicht op +STR_FACE_SAVE_TOOLTIP :{BLACK}Favoriet gezicht opslaan STR_FACE_SAVE_DONE :{WHITE}Dit gezicht wordt zal worden opgeslagen als jouw favoriet in het OpenTTD-configuratiebestand STR_FACE_EUROPEAN :{BLACK}Europeaans STR_FACE_SELECT_EUROPEAN :{BLACK}Selecteer Europeaanse gezichten @@ -1915,7 +1916,7 @@ STR_FACE_EARRING :Oorbel: STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Verander das of oorbel # Network server list -STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Multiplayer +STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Netwerkspel STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Openbaar STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Kies tussen een openbaar (internet) en een niet-openbaar (Local Area Network, LAN) spel STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nee @@ -2035,7 +2036,7 @@ STR_NETWORK_LANG_LATVIAN :Lets ############ End of leave-in-this-order # Network game lobby -STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Multiplayerlobby +STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Verzamelkamer voor netwerkspellen STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Klaar om deel te nemen: {ORANGE}{STRING} STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Een lijst met alle bedrijven die momenteel in dit spel bestaan. Je kan meedoen met een bestaand bedrijf of een nieuw bedrijf beginnen @@ -2081,6 +2082,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Verbreek STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server is beveiligd. Voer wachtwoord in STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Bedrijf is beveiligd. Voer wachtwoord in +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Spelerslijst # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Spelerslijst @@ -2138,7 +2140,7 @@ STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}Verbindi STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}Kon opgeslagen spel niet laden STR_NETWORK_ERROR_SERVER_START :{WHITE}Kan server niet starten STR_NETWORK_ERROR_CLIENT_START :{WHITE}Kan geen verbinding maken -STR_NETWORK_ERROR_TIMEOUT :{WHITE}Verbinding #{NUM} duurde te lang +STR_NETWORK_ERROR_TIMEOUT :{WHITE}Verbinding nr. {NUM} kostte te veel tijd STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Er is een protocolfout gedetecteerd en de verbinding werd gesloten STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}De revisie van deze client komt niet overeen met de revisie van de server STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Ongeldig wachtwoord @@ -2189,15 +2191,15 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Spel nog steeds STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Spel vervolgd ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :aantal spelers STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :spelers maken verbinding -STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :handmatig +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :Handmatig STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :spelscript ############ End of leave-in-this-order STR_NETWORK_MESSAGE_CLIENT_LEAVING :vertrekt STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} heeft zich bij het spel gevoegd STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} heeft zich bij het spel gevoegd (Speler #{2:NUM}) -STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} heeft zich gevoegd bij bedrijf #{2:NUM} +STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} heeft zich gevoegd bij bedrijf nr. {2:NUM} STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} kijkt nu toe -STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} heeft een nieuw bedrijf opgericht (#{2:NUM}) +STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} heeft een nieuw bedrijf opgericht (nr. {2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} heeft het spel verlaten ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} heeft zijn/haar naam gewijzigd naar {STRING} STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} gaf je bedrijf {2:CURRENCY_LONG} @@ -2300,8 +2302,8 @@ STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}ongebruikt -STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLACK}verzadigd -STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}overbelast +STR_LINKGRAPH_LEGEND_SATURATED :{TINY_FONT}{BLACK}Verzadigd +STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLACK}Overbelast # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Dekkingsgebied markeren @@ -2325,7 +2327,7 @@ STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Bouw geëlektri STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Bouw monorailspoorwegen STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Bouw magneetzweeftreinspoorwegen -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Plaats spoor. Ctrl schakelt tussen bouwen/verwijderen van het spoor. Shift schakelt tussen bouwen/inschatting van de kosten +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Spoor bouwen. Ctrl schakelt tussen bouwen/verwijderen van het spoor. Shift schakelt tussen bouwen/inschatting van de kosten STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Bouw spoor met de Autorail-methode. Ctrl schakelt tussen bouwen/verwijderen van het spoor. Shift schakelt tussen bouwen/inschatting van de kosten STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Remise bouwen (om treinen te kopen en te onderhouden). Shift schakelt tussen bouwen/kosten weergeven. STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Spoor ombouwen naar routepunt. Ctrl om samen te voegen met ander routepunt. Shift schakelt tussen bouwen/kosten weergeven. @@ -2445,7 +2447,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Bouw kan STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Bouw sluis. Shift schakelt tussen bouwen/inschatting van de kosten STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Bouw dok (voor het kopen en onderhoud van schepen). Shift schakelt tussen bouwen/inschatting van de kosten STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Bouw haven. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Plaats boei, deze kan gebruikt worden voor extra tussenstops. Shift schakelt tussen bouwen/inschatting van de kosten +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Boei plaatsen, deze kan gebruikt worden voor extra tussenstops. Shift schakelt tussen bouwen/inschatting van de kosten STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Bouw aquaduct. Shift schakelt tussen bouwen/inschatting van de kosten STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Definieer watergebied.{}Maak een kanaal, tenzij Ctrl wordt vastgehouden op zeeniveau, dan zal de omgeving overstromen STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Leg rivieren aan @@ -2511,7 +2513,7 @@ STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plant bo # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Landontwikkeling -STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Plaats rotsachtige gebieden op de kaart +STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Rotsachtige gebieden plaatsen op de kaart STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Definieer woestijngebied.{}Hou Ctrl vast om het te verwijderen STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Vergroot de landoppervlakte om te verhogen/verlagen STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Verklein de landoppervlakte om te verhogen/verlagen @@ -2543,21 +2545,21 @@ STR_FOUND_TOWN_INITIAL_SIZE_SMALL_BUTTON :{BLACK}Klein STR_FOUND_TOWN_INITIAL_SIZE_MEDIUM_BUTTON :{BLACK}Gemiddeld STR_FOUND_TOWN_INITIAL_SIZE_LARGE_BUTTON :{BLACK}Groot STR_FOUND_TOWN_SIZE_RANDOM :{BLACK}Willekeurig -STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Kies stadsgrootte +STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Stadsgrootte kiezen STR_FOUND_TOWN_CITY :{BLACK}Groeistad STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Groeisteden groeien sneller dan gewone steden{}Afhankelijk van de instellingen kunnen ze ook groter zijn als ze gesticht worden STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Wegpatroon -STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Kies het wegpatroon voor deze stad +STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Wegpatroon voor deze stad kiezen STR_FOUND_TOWN_SELECT_LAYOUT_ORIGINAL :{BLACK}Origineel STR_FOUND_TOWN_SELECT_LAYOUT_BETTER_ROADS :{BLACK}Verbeterd -STR_FOUND_TOWN_SELECT_LAYOUT_2X2_GRID :{BLACK}2x2 raster -STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}3x3 raster +STR_FOUND_TOWN_SELECT_LAYOUT_2X2_GRID :{BLACK}2x2-raster +STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}3x3-raster STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Willekeurig # Fund new industry window STR_FUND_INDUSTRY_CAPTION :{WHITE}Betaal nieuwe industrie -STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Kies de industrie die je wilt laten bouwen uit de lijst +STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Kiest de gewenste industrie in de lijst STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :Veel willekeurige industrieën STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Bedek de kaart met willekeurig geplaatste industrieën STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Kosten: {YELLOW}{CURRENCY_LONG} @@ -2577,9 +2579,9 @@ STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Keten we STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Industrieën weergeven die vracht leveren en accepteren STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Link naar de kleine kaart STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Weergegeven industrieën ook op de kleine kaart selecteren -STR_INDUSTRY_CARGOES_SELECT_CARGO :{BLACK}Kies vracht +STR_INDUSTRY_CARGOES_SELECT_CARGO :{BLACK}Vracht selecteren STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}Vracht selecteren voor weergeven -STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}Kies bedrijf +STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}Industrie selecteren STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Bedrijf selecteren voor weergeven # Land area window @@ -2769,7 +2771,7 @@ STR_SAVELOAD_EDITBOX_TOOLTIP :{BLACK}Huidige STR_SAVELOAD_DELETE_BUTTON :{BLACK}Verwijderen STR_SAVELOAD_DELETE_TOOLTIP :{BLACK}Verwijder het momenteel geselecteerde opgeslagen spel STR_SAVELOAD_SAVE_BUTTON :{BLACK}Opslaan -STR_SAVELOAD_SAVE_TOOLTIP :{BLACK}Sla het huidige spel op onder de gekozen naam +STR_SAVELOAD_SAVE_TOOLTIP :{BLACK}Het huidige spel opslaan onder de gekozen naam STR_SAVELOAD_LOAD_BUTTON :{BLACK}Laad STR_SAVELOAD_LOAD_TOOLTIP :{BLACK}Laad het geselecteerde spel STR_SAVELOAD_LOAD_HEIGHTMAP_TOOLTIP :{BLACK}Laad de geselecteerde hoogtekaart @@ -2804,7 +2806,7 @@ STR_MAPGEN_QUANTITY_OF_SEA_LAKES :{BLACK}Zeenivea STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Rivieren: STR_MAPGEN_SMOOTHNESS :{BLACK}Gladheid: STR_MAPGEN_VARIETY :{BLACK}Landschapsvariatie: -STR_MAPGEN_GENERATE :{WHITE}Maak aan +STR_MAPGEN_GENERATE :{WHITE}Maken # Strings for map borders at game generation STR_MAPGEN_BORDER_TYPE :{BLACK}Kaartranden: @@ -2860,24 +2862,24 @@ STR_NEWGRF_SETTINGS_CAPTION :{WHITE}NewGRF-i STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}Gedetaileerde NewGRF-informatie STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}Actieve NewGRF-bestanden STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}Inactieve NewGRF-bestanden -STR_NEWGRF_SETTINGS_SELECT_PRESET :{ORANGE}Kies voorkeur: +STR_NEWGRF_SETTINGS_SELECT_PRESET :{ORANGE}Voorkeursinstelling selecteren: STR_NEWGRF_FILTER_TITLE :{ORANGE}Filtertekst: -STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}Laad de geselecteerde voorkeursinstelling -STR_NEWGRF_SETTINGS_PRESET_SAVE :{BLACK}Bewaar voorkeursinstelling +STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}De geselecteerde voorkeursinstelling laden +STR_NEWGRF_SETTINGS_PRESET_SAVE :{BLACK}Voorkeursinstelling opslaan STR_NEWGRF_SETTINGS_PRESET_SAVE_TOOLTIP :{BLACK}Bewaar de huidige lijst als voorkeursinstelling STR_NEWGRF_SETTINGS_PRESET_SAVE_QUERY :{BLACK}Kies een naam voor deze voorkeursinstelling -STR_NEWGRF_SETTINGS_PRESET_DELETE :{BLACK}Verwijder voorkeursinstelling -STR_NEWGRF_SETTINGS_PRESET_DELETE_TOOLTIP :{BLACK}Verwijder de gekozen voorkeursinstelling +STR_NEWGRF_SETTINGS_PRESET_DELETE :{BLACK}Voorkeursinstelling verwijderen +STR_NEWGRF_SETTINGS_PRESET_DELETE_TOOLTIP :{BLACK}Verwijdert de gekozen voorkeursinstelling STR_NEWGRF_SETTINGS_ADD :{BLACK}Toevoegen STR_NEWGRF_SETTINGS_ADD_FILE_TOOLTIP :{BLACK}Voeg het geselecteerde NewGRF-bestand toe aan je configuratie STR_NEWGRF_SETTINGS_RESCAN_FILES :{BLACK}Bestanden opnieuw lezen -STR_NEWGRF_SETTINGS_RESCAN_FILES_TOOLTIP :{BLACK}Werk de lijst van beschikbare NewGRF-bestanden bij +STR_NEWGRF_SETTINGS_RESCAN_FILES_TOOLTIP :{BLACK}Lijst van beschikbare NewGRF-bestanden bijwerken STR_NEWGRF_SETTINGS_REMOVE :{BLACK}Verwijderen STR_NEWGRF_SETTINGS_REMOVE_TOOLTIP :{BLACK}Verwijder het geselecteerde NewGRF-bestand van de lijst STR_NEWGRF_SETTINGS_MOVEUP :{BLACK}Naar boven -STR_NEWGRF_SETTINGS_MOVEUP_TOOLTIP :{BLACK}Verplaats het geselecteerde NewGRF-bestand naar boven in de lijst +STR_NEWGRF_SETTINGS_MOVEUP_TOOLTIP :{BLACK}Geselecteerde NewGRF-bestand naar boven in de lijst verplaatsen STR_NEWGRF_SETTINGS_MOVEDOWN :{BLACK}Naar beneden -STR_NEWGRF_SETTINGS_MOVEDOWN_TOOLTIP :{BLACK}Verplaats het geselecteerde NewGRF-bestand naar beneden in de lijst +STR_NEWGRF_SETTINGS_MOVEDOWN_TOOLTIP :{BLACK}Geselecteerde NewGRF-bestand naar beneden in de lijst verplaatsen STR_NEWGRF_SETTINGS_UPGRADE :{BLACK}Opwaarderen STR_NEWGRF_SETTINGS_UPGRADE_TOOLTIP :{BLACK}Opwaarderen van NewGRF bestanden waar je een nieuwere versie van hebt geïnstalleerd STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Een lijst van de NewGRF-bestanden die zijn geïnstalleerd. @@ -2910,12 +2912,12 @@ STR_NEWGRF_SETTINGS_DISABLED :{RED}Uitgeschak STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Niet compatibel met deze versie van OpenTTD # NewGRF save preset window -STR_SAVE_PRESET_CAPTION :{WHITE}Preset opslaan -STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Lijst met beschikbare presets, Kies er één om deze te kopiëren naar de opslagnaam hieronder -STR_SAVE_PRESET_TITLE :{BLACK}Voer een naam in voor de preset +STR_SAVE_PRESET_CAPTION :{WHITE}Voorkeursinstelling opslaan +STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Lijst met beschikbare voorkeursinstellingen, Selecteer om deze te kopiëren naar de opslagnaam hieronder. +STR_SAVE_PRESET_TITLE :{BLACK}Voer een naam in voor de voorkeursinstelling STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Huidig gekozen naam voor de preset om op te slaan STR_SAVE_PRESET_CANCEL :{BLACK}Annuleren -STR_SAVE_PRESET_CANCEL_TOOLTIP :{BLACK}Preset niet wijzigen +STR_SAVE_PRESET_CANCEL_TOOLTIP :{BLACK}Voorkeursinstelling niet wijzigen STR_SAVE_PRESET_SAVE :{BLACK}Opslaan STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Sla de huidige preset op naar de huidig gekozen naam @@ -2942,11 +2944,11 @@ STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF v # Sprite aligner window STR_SPRITE_ALIGNER_CAPTION :{WHITE}Afbeelding uitlijnen {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Volgende afbeelding -STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Ga verder maar volgende normale afbeelding, sla alle pseudo/herkleur/lettertype afbeeldingen over en ga naar het begin bij het einde +STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Doorgaan met volgende normale sprite, alle pseudo-/herkleur-/lettertype-sprites overslaan; bij het einde terug naar het begin STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ga naar afbeelding STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Ga naar de opgegeven afbeelding. Wanneer dit geen normale afbeelding is, ga verder naar de volgende normale afbeelding STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Vorige afbeelding -STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Ga naar vorige normale afbeelding, sla alle pseudo/herkleur/lettertype afbeeldingen over en ga naar het einde bij het begin +STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Doorgaan met de vorige normale sprite, alle pseudo-/herkleur-/lettertype-sprites overslaan; bij het einde terug naar het begin STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Voorbeeld van de huidige afbeelding. De uitlijning wordt genegeerd bij het weergeven van de afbeelding STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Afbeelding verplaatsen, dit verandert X en Y offsets. Ctr+klik om de afbeelding 8 eenheden per keer te verplaatsen. STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Herstel relatief @@ -2974,17 +2976,17 @@ STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} heef STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :het GRF-bestand die het probeert te vertalen STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Er zijn te veel NewGRFs geladen STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Laden van {1:STRING} als statische NewGRF met {STRING} kan desynchronisatiefouten (desyncs) veroorzaken -STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Onverwachte sprite (sprite {3:NUM}) +STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Onverwachte afbeelding (afbeelding {3:NUM}) STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Onbekende Action 0-eigenschap {4:HEX} (sprite {3:NUM}) -STR_NEWGRF_ERROR_INVALID_ID :Poging om ongeldig ID te gebruiken (sprite {3:NUM}) +STR_NEWGRF_ERROR_INVALID_ID :Poging om ongeldige id te gebruiken (afbeelding {3:NUM}) STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} bevat een ongeldige sprite. Alle ongeldige sprites worden weergegeven als een rood vraagteken (?). STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Bevat meerdere Action 8-invoer (sprite {3:NUM}) -STR_NEWGRF_ERROR_READ_BOUNDS :Voorbij het einde van pseudo-sprite gelezen (sprite {3:NUM}) +STR_NEWGRF_ERROR_READ_BOUNDS :Voorbij het einde van pseudo-afbeelding gelezen (afbeelding {3:NUM}) STR_NEWGRF_ERROR_GRM_FAILED :Gevraagde GRF-middelen niet beschikbaar (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} is uitgeschakeld door {STRING} -STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ongeldig/onbekend spritelay-outformaat (sprite {3:NUM}) -STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Te veel elementen in eigenschappenwaardelijst (sprite {3:NUM}, eigenschap {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ongeldige terugroep voor industriële productie (sprite {3:NUM}, "{1:STRING}") +STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ongeldige/onbekende indeling voor afbeeldingslay-out (afbeelding {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Te veel elementen in eigenschappenwaardelijst (affbeelding {3:NUM}, eigenschap {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ongeldige terugroep voor industriële productie (afbeelding {3:NUM}, "{1:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Waarschuwing! @@ -3006,7 +3008,7 @@ STR_NEWGRF_LIST_COMPATIBLE :{YELLOW}Compati STR_NEWGRF_LIST_MISSING :{RED}Ontbrekende bestanden # NewGRF 'it's broken' warnings -STR_NEWGRF_BROKEN :{WHITE}Gedrag van NewGRF '{0:STRING}' zal waarschijnlijk desynchronisatiefouten (desyncs) en/of crashes veroorzaken +STR_NEWGRF_BROKEN :{WHITE}Gedrag van NewGRF '{0:STRING}' zal waarschijnlijk desynchronisatiefouten (desyncs) en/of vastlopers veroorzaken STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Wagon '{1:ENGINE}' gewijzigde status van aandrijfeenheid wanneer niet in een depot STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Het veranderde de lengte van voertuig '{1:ENGINE}' wanneer het niet in een depot is STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Het wijzigde voertuigcapaciteit voor '{1:ENGINE}' wanneer niet in een depot of ombouwen @@ -3084,7 +3086,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Hernoem stad STR_LOCAL_AUTHORITY_CAPTION :{WHITE} Gemeenteraad van {TOWN} STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Reputatie van transportbedrijven: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} -STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Mogelijkheden: +STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Beschikbare acties: STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lijst met dingen die mogelijk zijn in deze gemeente - klik op een onderdeel voor meer details STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Doe het STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Voer de actie uit die in de bovenstaande lijst is geselecteerd @@ -3110,6 +3112,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Koop he # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Doelen STR_GOALS_SPECTATOR_CAPTION :{WHITE}Algemene doelen +STR_GOALS_SPECTATOR :Algemene doelen STR_GOALS_GLOBAL_TITLE :{BLACK}Algemene doelen: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Geen - @@ -3158,6 +3161,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik op # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} - verhaal STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Algemeen verhaal +STR_STORY_BOOK_SPECTATOR :Algemeen verhaal STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Pagina {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Spring naar een bepaalde pagina door deze te selecteren in deze keuzelijst. @@ -3240,7 +3244,7 @@ STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Geef all STR_STATION_VIEW_RENAME_STATION_CAPTION :Hernoem station/laadgebied -STR_STATION_VIEW_CLOSE_AIRPORT :{BLACK}Sluit luchthaven +STR_STATION_VIEW_CLOSE_AIRPORT :{BLACK}Luchthaven sluiten STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Voorkom landen van vliegtuig op deze luchthaven # Waypoint/buoy view window @@ -3314,7 +3318,7 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Details STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Gedetailleerde aantallen infrastructuur bekijken STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nieuw gezicht -STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Kies nieuw gezicht voor directeur +STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Nieuw gezicht voor directeur kiezen STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Kleurenschema STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Verandert het uiterlijk van de bedrijfsvoertuigen STR_COMPANY_VIEW_COMPANY_NAME_BUTTON :{BLACK}Bedrijfsnaam @@ -3696,7 +3700,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Huidige # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}In- en uitladen STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Vertrekt van -STR_VEHICLE_STATUS_CRASHED :{RED}Gecrasht! +STR_VEHICLE_STATUS_CRASHED :{RED}Verongelukt! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Motorpech STR_VEHICLE_STATUS_STOPPED :{RED}Gestopt STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}Aan het stoppen, {VELOCITY} @@ -3779,7 +3783,7 @@ STR_VEHICLE_DETAILS_TRAIN_CARGO_TOOLTIP :{BLACK}Laat det STR_VEHICLE_DETAIL_TAB_INFORMATION :{BLACK}Informatie STR_VEHICLE_DETAILS_TRAIN_INFORMATION_TOOLTIP :{BLACK}Laat details zien van treinvoertuigen STR_VEHICLE_DETAIL_TAB_CAPACITIES :{BLACK}Capaciteiten -STR_VEHICLE_DETAILS_TRAIN_CAPACITIES_TOOLTIP :{BLACK}Laat de mogelijkheden van elk voertuig zien +STR_VEHICLE_DETAILS_TRAIN_CAPACITIES_TOOLTIP :{BLACK}Capaciteiten van voertuigen weergeven STR_VEHICLE_DETAIL_TAB_TOTAL_CARGO :{BLACK}Totale lading STR_VEHICLE_DETAILS_TRAIN_TOTAL_CARGO_TOOLTIP :{BLACK}Laat totale capaciteit van trein zien, gescheiden door goederentype @@ -3812,7 +3816,7 @@ STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Bouw vli # Order view STR_ORDERS_CAPTION :{WHITE}{VEHICLE} (Orders) STR_ORDERS_TIMETABLE_VIEW :{BLACK}Dienstregeling -STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Schakel naar de dienstregeling +STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Naar dienstregeling schakelen STR_ORDERS_LIST_TOOLTIP :{BLACK}Orderlijst - klik op een order om deze te selecteren. Ctrl+klik scrollt naar het station STR_ORDER_INDEX :{COMMA}:{NBSP} @@ -3839,7 +3843,7 @@ STR_ORDER_TOOLTIP_FULL_LOAD :{BLACK}Verander STR_ORDER_TOGGLE_UNLOAD :{BLACK}Alles lossen STR_ORDER_DROP_UNLOAD_IF_ACCEPTED :Lossen indien geaccepteerd STR_ORDER_DROP_UNLOAD :Alles lossen -STR_ORDER_DROP_TRANSFER :Overladen +STR_ORDER_DROP_TRANSFER :Overdragen STR_ORDER_DROP_NO_UNLOADING :Niet lossen STR_ORDER_TOOLTIP_UNLOAD :{BLACK}Verander het losgedrag van de geselecteerde order @@ -3854,7 +3858,7 @@ STR_ORDER_SERVICE :{BLACK}Onderhou STR_ORDER_DROP_GO_ALWAYS_DEPOT :Ga altijd STR_ORDER_DROP_SERVICE_DEPOT :Onderhoud wanneer nodig STR_ORDER_DROP_HALT_DEPOT :Stop -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Sla deze order over tenzij onderhoud nodig is +STR_ORDER_SERVICE_TOOLTIP :{BLACK}Deze order overslaan, tenzij onderhoud nodig is STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Voertuiggegevens voor basisspringen wanneer @@ -3881,8 +3885,8 @@ STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :is niet waar STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}De waarde waartegen het voertuig wordt vergeleken STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Geef waarde voor de vergelijking -STR_ORDERS_SKIP_BUTTON :{BLACK}Sla over -STR_ORDERS_SKIP_TOOLTIP :{BLACK}Sla huidige order over, en begin met de volgende. Ctrl+klik begint direct met geselecteerde order +STR_ORDERS_SKIP_BUTTON :{BLACK}Overslaan +STR_ORDERS_SKIP_TOOLTIP :{BLACK}Huidige order overslaan en de volgende uitvoeren. Ctrl+klik begint direct met geselecteerde order. STR_ORDERS_DELETE_BUTTON :{BLACK}Verwijder STR_ORDERS_DELETE_TOOLTIP :{BLACK}Verwijder de geselecteerde order @@ -3895,7 +3899,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :Ga naar dichtst STR_ORDER_GO_TO_NEAREST_HANGAR :Ga naar dichtstbijzijnde hangar STR_ORDER_CONDITIONAL :Voorwaardelijk overgeslagen order STR_ORDER_SHARE :Orders delen -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Voeg een nieuwe order toe voor de geselecteerde order, of voeg het toe aan het eind van de lijst. Ctrl+klik maakt stationsorders "Eén soort vracht volledig laden", controlepost-orders "Ga non-stop via" en depot-orders "Onderhoud bij". "Orders delen" of Ctrl laat dit voertuig de orders delen met het geselecteerde voertuig. Klikken op een voertuig kopieert de orders van dat voertuig. Een depot order schakelt automatisch onderhoud van een voertuig uit. +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Voegt een nieuwe order toe voor de geselecteerde order of aan het eind van de lijst. Ctrl+klik maakt stationsorders 'Eén soort vracht volledig laden', controlepost-orders 'Ga non-stop via' en depot-orders 'Onderhoud bij'. Met 'Orders delen' of Ctrl deelt dit voertuig de orders met het geselecteerde voertuig. Klikken op een voertuig kopieert de orders van dat voertuig. Een depot-order schakelt automatisch onderhoud van een voertuig uit. STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Alle voertuigen weergeven met dezelfde gedeelde orders @@ -3923,32 +3927,32 @@ STR_ORDER_GO_TO_STATION :{STRING} {STATI STR_ORDER_IMPLICIT :(Impliciet) STR_ORDER_FULL_LOAD :(Volledig laden) -STR_ORDER_FULL_LOAD_ANY :(Één soort vracht volledig laden) +STR_ORDER_FULL_LOAD_ANY :(Eén soort vracht volledig laden) STR_ORDER_NO_LOAD :(Niet laden) -STR_ORDER_UNLOAD :(Lossen en vracht meenemen) -STR_ORDER_UNLOAD_FULL_LOAD :(Lossen en volledig laden) -STR_ORDER_UNLOAD_FULL_LOAD_ANY :(Lossen en één soort vracht volledig laden) -STR_ORDER_UNLOAD_NO_LOAD :(Lossen en vertrek leeg) -STR_ORDER_TRANSFER :(Overladen en neem vracht mee) -STR_ORDER_TRANSFER_FULL_LOAD :(Overladen en volledig laden) -STR_ORDER_TRANSFER_FULL_LOAD_ANY :(Overladen en één soort vracht volledig laden) -STR_ORDER_TRANSFER_NO_LOAD :(Overladen en vertrek leeg) -STR_ORDER_NO_UNLOAD :(Niet lossen en neem vracht mee) -STR_ORDER_NO_UNLOAD_FULL_LOAD :(Niet lossen en volledig laden) -STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :(Niet lossen en één soort vracht volledig laden) -STR_ORDER_NO_UNLOAD_NO_LOAD :(Niet lossen en niet laden) +STR_ORDER_UNLOAD :(Lossen, vracht meenemen) +STR_ORDER_UNLOAD_FULL_LOAD :(Lossen, volledig laden) +STR_ORDER_UNLOAD_FULL_LOAD_ANY :(Lossen, één soort vracht volledig laden) +STR_ORDER_UNLOAD_NO_LOAD :(Lossen, leeg vertrekken) +STR_ORDER_TRANSFER :(Overdragen, vracht meenemen) +STR_ORDER_TRANSFER_FULL_LOAD :(Overdragen, volledig laden) +STR_ORDER_TRANSFER_FULL_LOAD_ANY :(Overdragen, één soort vracht volledig laden) +STR_ORDER_TRANSFER_NO_LOAD :(Overdragen, leeg vertrekken) +STR_ORDER_NO_UNLOAD :(Niet lossen, vracht meenemen) +STR_ORDER_NO_UNLOAD_FULL_LOAD :(Niet lossen, volledig laden) +STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :(Niet lossen, één soort vracht volledig laden) +STR_ORDER_NO_UNLOAD_NO_LOAD :(Niet lossen, niet laden) STR_ORDER_AUTO_REFIT :(Ombouw naar {STRING}) -STR_ORDER_FULL_LOAD_REFIT :(Volledig laden met ombouw naar {STRING}) -STR_ORDER_FULL_LOAD_ANY_REFIT :(Volledig willekeurige vracht laden met ombouw naar {STRING}) -STR_ORDER_UNLOAD_REFIT :(Lossen en neem vracht met ombouw naar {STRING}) -STR_ORDER_UNLOAD_FULL_LOAD_REFIT :(Lossen en wacht op volledig geladen vracht met ombouw naar {STRING}) -STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :(Lossen en wacht op willekeurig volledig geladen vracht met ombouw naar {STRING}) -STR_ORDER_TRANSFER_REFIT :(Overdragen en neem vracht met ombouw naar {STRING}) -STR_ORDER_TRANSFER_FULL_LOAD_REFIT :(Overdragen en wacht op volledig geladen vracht met ombouw naar {STRING}) -STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :(Overdragen en wacht op willekeurige vollediggeladen vracht met ombouw naar {STRING}) -STR_ORDER_NO_UNLOAD_REFIT :(Niet lossen en neem vracht met ombouw naar {STRING}) -STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :(Niet lossen en wacht op volledig geladen vracht met ombouw naar {STRING}) +STR_ORDER_FULL_LOAD_REFIT :(Volledig laden, ombouwen naar {STRING}) +STR_ORDER_FULL_LOAD_ANY_REFIT :(Eén soort vracht volledig laden, ombouwen naar {STRING}) +STR_ORDER_UNLOAD_REFIT :(Lossen, vracht meenemen, ombouwen naar {STRING}) +STR_ORDER_UNLOAD_FULL_LOAD_REFIT :(Lossen, volledig laden, ombouwen naar {STRING}) +STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :(Lossen, één soort vracht volledig laden, ombouwen naar {STRING}) +STR_ORDER_TRANSFER_REFIT :(Overdragen, vracht meenemen, ombouwen naar {STRING}) +STR_ORDER_TRANSFER_FULL_LOAD_REFIT :(Overdragen, volledig laden, ombouwen naar {STRING}) +STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :(Overdragen, één soort vracht volledig laden, ombouwen naar {STRING}) +STR_ORDER_NO_UNLOAD_REFIT :(Niet lossen, vracht meenemen, daartoe ombouwen naar {STRING}) +STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :(Niet lossen, volledig laden, ombouwen naar {STRING}) STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(Niet lossen en wacht op willekeurig volledig geladen vracht met ombouw naar {STRING}) STR_ORDER_AUTO_REFIT_ANY :beschikbare vracht @@ -4133,8 +4137,8 @@ STR_INCOME_FLOAT_COST_SMALL :{TINY_FONT}{RED STR_INCOME_FLOAT_COST :{RED}Kosten: {CURRENCY_LONG} STR_INCOME_FLOAT_INCOME_SMALL :{TINY_FONT}{GREEN}Inkomsten: {CURRENCY_LONG} STR_INCOME_FLOAT_INCOME :{GREEN}Inkomsten: {CURRENCY_LONG} -STR_FEEDER_TINY :{TINY_FONT}{YELLOW}Overladen: {CURRENCY_LONG} -STR_FEEDER :{YELLOW}Overladen: {CURRENCY_LONG} +STR_FEEDER_TINY :{TINY_FONT}{YELLOW}Overdragen: {CURRENCY_LONG} +STR_FEEDER :{YELLOW}Overdragen: {CURRENCY_LONG} STR_FEEDER_INCOME_TINY :{TINY_FONT}{YELLOW}Overdragen: {CURRENCY_LONG}{WHITE} / {GREEN}Inkomsten: {CURRENCY_LONG} STR_FEEDER_INCOME :{YELLOW}Overdragen: {CURRENCY_LONG}{WHITE} / {GREEN}Inkomsten: {CURRENCY_LONG} STR_FEEDER_COST_TINY :{TINY_FONT}{YELLOW}Overdragen: {CURRENCY_LONG}{WHITE} / {RED}Kosten: {CURRENCY_LONG} @@ -4275,7 +4279,7 @@ STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... kan STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... kan alleen onder de sneeuwlijn gebouwd worden STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Er waren een geschikte locaties voor '{STRING}' industrieën -STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Wijzig de kaart-generatie parameters om een betere kaart te krijgen +STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Parameters voor kaartontwikkeling wijzigen om een betere kaart te krijgen # Station construction related errors STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Kan hier geen treinstation bouwen... @@ -4349,7 +4353,7 @@ STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Treinen STR_ERROR_TRAIN_TOO_LONG :{WHITE}Trein te lang STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Kan de richting van het voertuig niet omdraaien... STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}... bestaat uit meerdere eenheden -STR_ERROR_INCOMPATIBLE_RAIL_TYPES :spoortypes niet verenigbaar +STR_ERROR_INCOMPATIBLE_RAIL_TYPES :Spoortypen niet verenigbaar STR_ERROR_CAN_T_MOVE_VEHICLE :{WHITE}Kan voertuig niet verplaatsen... STR_ERROR_REAR_ENGINE_FOLLOW_FRONT :{WHITE}De achterste locomotief zal altijd het voorste deel volgen @@ -4360,7 +4364,7 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Verkeerd depot- # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} is te lang na het vervangen -STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Geen automatisch vervang/vernieuw regels opgegeven +STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Geen automatische regels voor vervangen/vernieuwen toegepast STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(onvoldoende geld) # Rail construction errors diff --git a/src/lang/french.txt b/src/lang/french.txt index ea453ad13f..a76367ccc0 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -467,6 +467,7 @@ STR_TOOLBAR_SOUND_MUSIC :Son/Musique ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Message/Bulletin précédent STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Historique des messages +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Effacer tous les messages ############ range ends here ############ range for about menu starts diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index efac946954..8752e11eeb 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -467,6 +467,7 @@ STR_TOOLBAR_SOUND_MUSIC :Som/música ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Última mensagem/notícia STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Histórico de mensagens +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Apagar todas as mensagens ############ range ends here ############ range for about menu starts @@ -2082,6 +2083,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desligar STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegido. Introduza palavra-chave STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Introduza palavra-chave +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Lista de clientes # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Lista de clientes @@ -3111,6 +3113,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Suborna # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Objectivos STR_GOALS_SPECTATOR_CAPTION :{WHITE}Objetivos globais +STR_GOALS_SPECTATOR :Objectivos Globais STR_GOALS_GLOBAL_TITLE :{BLACK}Objetivos globais: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Nenhum - @@ -3159,6 +3162,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique n # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Livro de História STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Livro de História Global +STR_STORY_BOOK_SPECTATOR :Livro de Histórico Global STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Página nº {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Saltar para uma pagina especifica escolhendo-a nesta lista. diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 28f29b5c4f..733f47949a 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1050,6 +1050,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Південн STR_GAME_OPTIONS_CURRENCY_CUSTOM :Власна... STR_GAME_OPTIONS_CURRENCY_GEL :Грузинські ларі (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Іранський ріал (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Російський новий рубель (RUB) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Сторона руху транспорту @@ -2813,6 +2814,10 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 команда OpenTTD # Framerate display window +STR_FRAMERATE_DATA_POINTS :{BLACK}Дані отримано з {COMMA} вимірюван {P "ня" "нь" "нь" } +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} кадр{P "" "и" "ів"}/сек ############ Leave those lines in this order!! ############ End of leave-in-this-order ############ Leave those lines in this order!! @@ -4581,6 +4586,7 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Оригіна STR_BASESOUNDS_WIN_DESCRIPTION :Оригінальний набір звуків з Transport Tycoon Deluxe Windows edition. STR_BASESOUNDS_NONE_DESCRIPTION :Порожній набір звуків. STR_BASEMUSIC_WIN_DESCRIPTION :Оригінальна музика з Transport Tycoon Deluxe Windows edition. +STR_BASEMUSIC_DOS_DESCRIPTION :Оригінальна музика Transport Tycoon Deluxe(DOS) STR_BASEMUSIC_NONE_DESCRIPTION :Порожній набір музики. ##id 0x2000 From 6ca637b8c149efe2cb8ccffccbfd98530f633d58 Mon Sep 17 00:00:00 2001 From: J0an Josep Date: Thu, 14 Feb 2019 19:07:06 +0100 Subject: [PATCH 358/622] Fix #7226: Don't call ship pathfinders if there is no available track due to "forbid 90 deg turns". --- src/ship_cmd.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 23786c17d1..c4441cb159 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -510,9 +510,20 @@ static Track ChooseShipTrack(Ship *v, TileIndex tile, DiagDirection enterdir, Tr return track; } -static inline TrackBits GetAvailShipTracks(TileIndex tile, DiagDirection dir) +/** + * Get the available water tracks on a tile for a ship entering a tile. + * @param tile The tile about to enter. + * @param dir The entry direction. + * @param trackdir The trackdir the ship has on the old tile. + * @return The available trackbits on the next tile. + */ +static inline TrackBits GetAvailShipTracks(TileIndex tile, DiagDirection dir, Trackdir trackdir) { - return GetTileShipTrackStatus(tile) & DiagdirReachesTracks(dir); + TrackBits tracks = GetTileShipTrackStatus(tile) & DiagdirReachesTracks(dir); + + if (_settings_game.pf.forbid_90_deg) tracks &= ~TrackCrossesTracks(TrackdirToTrack(trackdir)); + + return tracks; } static const byte _ship_subcoord[4][6][3] = { @@ -699,7 +710,7 @@ static void ShipController(Ship *v) DiagDirection diagdir = DiagdirBetweenTiles(gp.old_tile, gp.new_tile); assert(diagdir != INVALID_DIAGDIR); - tracks = GetAvailShipTracks(gp.new_tile, diagdir); + tracks = GetAvailShipTracks(gp.new_tile, diagdir, v->GetVehicleTrackdir()); if (tracks == TRACK_BIT_NONE) goto reverse_direction; /* Choose a direction, and continue if we find one */ From 45ce5171058bc40cf6423fda0f9419f11397759d Mon Sep 17 00:00:00 2001 From: Juanjo Date: Mon, 31 Dec 2012 16:34:21 +0100 Subject: [PATCH 359/622] Codechange: Move some common code after adding/removing tiles to a station to its own function. --- src/station_base.h | 2 ++ src/station_cmd.cpp | 85 ++++++++++++++++++++++++--------------------- 2 files changed, 47 insertions(+), 40 deletions(-) diff --git a/src/station_base.h b/src/station_base.h index 086d4332c5..bf860538d1 100644 --- a/src/station_base.h +++ b/src/station_base.h @@ -483,6 +483,8 @@ public: void UpdateVirtCoord(); + void AfterStationTileSetChange(bool adding, StationType type); + /* virtual */ uint GetPlatformLength(TileIndex tile, DiagDirection dir) const; /* virtual */ uint GetPlatformLength(TileIndex tile) const; void RecomputeIndustriesNear(); diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index f088ccf6e2..6be22de0c5 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -715,6 +715,43 @@ static void DeleteStationIfEmpty(BaseStation *st) UpdateStationSignCoord(st); } +/** + * After adding/removing tiles to station, update some station-related stuff. + * @param adding True if adding tiles, false if removing them. + * @param type StationType being modified. + */ +void Station::AfterStationTileSetChange(bool adding, StationType type) +{ + this->UpdateVirtCoord(); + this->RecomputeIndustriesNear(); + DirtyCompanyInfrastructureWindows(this->owner); + if (adding) InvalidateWindowData(WC_STATION_LIST, this->owner, 0); + + switch (type) { + case STATION_RAIL: + SetWindowWidgetDirty(WC_STATION_VIEW, this->index, WID_SV_TRAINS); + break; + case STATION_AIRPORT: + break; + case STATION_TRUCK: + case STATION_BUS: + SetWindowWidgetDirty(WC_STATION_VIEW, this->index, WID_SV_ROADVEHS); + break; + case STATION_DOCK: + SetWindowWidgetDirty(WC_STATION_VIEW, this->index, WID_SV_SHIPS); + break; + default: NOT_REACHED(); + } + + if (adding) { + UpdateStationAcceptance(this, false); + InvalidateWindowData(WC_SELECT_STATION, 0, 0); + } else { + DeleteStationIfEmpty(this); + } + +} + CommandCost ClearTile_Station(TileIndex tile, DoCommandFlag flags); /** @@ -1399,13 +1436,7 @@ CommandCost CmdBuildRailStation(TileIndex tile_org, DoCommandFlag flags, uint32 } st->MarkTilesDirty(false); - st->UpdateVirtCoord(); - UpdateStationAcceptance(st, false); - st->RecomputeIndustriesNear(); - InvalidateWindowData(WC_SELECT_STATION, 0, 0); - InvalidateWindowData(WC_STATION_LIST, st->owner, 0); - SetWindowWidgetDirty(WC_STATION_VIEW, st->index, WID_SV_TRAINS); - DirtyCompanyInfrastructureWindows(st->owner); + st->AfterStationTileSetChange(true, STATION_RAIL); } return cost; @@ -1865,19 +1896,13 @@ CommandCost CmdBuildRoadStop(TileIndex tile, DoCommandFlag flags, uint32 p1, uin MakeRoadStop(cur_tile, st->owner, st->index, rs_type, rts, ddir); } Company::Get(st->owner)->infrastructure.station++; - DirtyCompanyInfrastructureWindows(st->owner); MarkTileDirtyByTile(cur_tile); } } if (st != NULL) { - st->UpdateVirtCoord(); - UpdateStationAcceptance(st, false); - st->RecomputeIndustriesNear(); - InvalidateWindowData(WC_SELECT_STATION, 0, 0); - InvalidateWindowData(WC_STATION_LIST, st->owner, 0); - SetWindowWidgetDirty(WC_STATION_VIEW, st->index, WID_SV_ROADVEHS); + st->AfterStationTileSetChange(true, type ? STATION_TRUCK: STATION_BUS); } return cost; } @@ -1972,7 +1997,6 @@ static CommandCost RemoveRoadStop(TileIndex tile, DoCommandFlag flags) DoClearSquare(tile); } - SetWindowWidgetDirty(WC_STATION_VIEW, st->index, WID_SV_ROADVEHS); delete cur_stop; /* Make sure no vehicle is going to the old roadstop */ @@ -1986,9 +2010,7 @@ static CommandCost RemoveRoadStop(TileIndex tile, DoCommandFlag flags) st->rect.AfterRemoveTile(st, tile); - st->UpdateVirtCoord(); - st->RecomputeIndustriesNear(); - DeleteStationIfEmpty(st); + st->AfterStationTileSetChange(false, is_truck ? STATION_TRUCK: STATION_BUS); /* Update the tile area of the truck/bus stop */ if (is_truck) { @@ -2300,13 +2322,8 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint UpdateAirplanesOnNewStation(st); Company::Get(st->owner)->infrastructure.airport++; - DirtyCompanyInfrastructureWindows(st->owner); - st->UpdateVirtCoord(); - UpdateStationAcceptance(st, false); - st->RecomputeIndustriesNear(); - InvalidateWindowData(WC_SELECT_STATION, 0, 0); - InvalidateWindowData(WC_STATION_LIST, st->owner, 0); + st->AfterStationTileSetChange(true, STATION_AIRPORT); InvalidateWindowData(WC_STATION_VIEW, st->index, -1); if (_settings_game.economy.station_noise_level) { @@ -2390,11 +2407,9 @@ static CommandCost RemoveAirport(TileIndex tile, DoCommandFlag flags) } Company::Get(st->owner)->infrastructure.airport--; - DirtyCompanyInfrastructureWindows(st->owner); - st->UpdateVirtCoord(); - st->RecomputeIndustriesNear(); - DeleteStationIfEmpty(st); + st->AfterStationTileSetChange(false, STATION_AIRPORT); + DeleteNewGRFInspectWindow(GSF_AIRPORTS, st->index); } @@ -2538,16 +2553,10 @@ CommandCost CmdBuildDock(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 Company::Get(st->owner)->infrastructure.water++; } Company::Get(st->owner)->infrastructure.station += 2; - DirtyCompanyInfrastructureWindows(st->owner); MakeDock(tile, st->owner, st->index, direction, wc); - st->UpdateVirtCoord(); - UpdateStationAcceptance(st, false); - st->RecomputeIndustriesNear(); - InvalidateWindowData(WC_SELECT_STATION, 0, 0); - InvalidateWindowData(WC_STATION_LIST, st->owner, 0); - SetWindowWidgetDirty(WC_STATION_VIEW, st->index, WID_SV_SHIPS); + st->AfterStationTileSetChange(true, STATION_DOCK); } return CommandCost(EXPENSES_CONSTRUCTION, _price[PR_BUILD_STATION_DOCK]); @@ -2586,12 +2595,8 @@ static CommandCost RemoveDock(TileIndex tile, DoCommandFlag flags) st->facilities &= ~FACIL_DOCK; Company::Get(st->owner)->infrastructure.station -= 2; - DirtyCompanyInfrastructureWindows(st->owner); - SetWindowWidgetDirty(WC_STATION_VIEW, st->index, WID_SV_SHIPS); - st->UpdateVirtCoord(); - st->RecomputeIndustriesNear(); - DeleteStationIfEmpty(st); + st->AfterStationTileSetChange(false, STATION_DOCK); /* All ships that were going to our station, can't go to it anymore. * Just clear the order, then automatically the next appropriate order From c4fe46a475d141938b75784044e2e6e2ec634d72 Mon Sep 17 00:00:00 2001 From: J0an Josep Date: Tue, 19 Feb 2019 00:11:25 +0100 Subject: [PATCH 360/622] Fix #7244, 6ca637b8c1: OPF doesn't take 90 deg turns into account. --- src/ship_cmd.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index c4441cb159..c2ce5adc95 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -521,7 +521,8 @@ static inline TrackBits GetAvailShipTracks(TileIndex tile, DiagDirection dir, Tr { TrackBits tracks = GetTileShipTrackStatus(tile) & DiagdirReachesTracks(dir); - if (_settings_game.pf.forbid_90_deg) tracks &= ~TrackCrossesTracks(TrackdirToTrack(trackdir)); + /* Do not remove 90 degree turns for OPF, as it isn't able to find paths taking it into account. */ + if (_settings_game.pf.forbid_90_deg && _settings_game.pf.pathfinder_for_ships != VPF_OPF) tracks &= ~TrackCrossesTracks(TrackdirToTrack(trackdir)); return tracks; } From ba55f93f4159e9b8f47aaab1d7f322033f4bb9cc Mon Sep 17 00:00:00 2001 From: Samu Date: Tue, 19 Feb 2019 14:15:17 +0000 Subject: [PATCH 361/622] Doc: [AI] UnshareOrders empties the orders list of the vehicle. --- src/script/api/script_order.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/script/api/script_order.hpp b/src/script/api/script_order.hpp index a4f945511e..9161478867 100644 --- a/src/script/api/script_order.hpp +++ b/src/script/api/script_order.hpp @@ -578,6 +578,7 @@ public: /** * Removes the given vehicle from a shared orders list. + * After unsharing orders, the orders list of the vehicle is empty. * @param vehicle_id The vehicle to remove from the shared order list. * @pre ScriptVehicle::IsValidVehicle(vehicle_id). * @return True if and only if the unsharing succeeded. From 21d863672295f62a315da33e6b36be06a1d84b42 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 19 Feb 2019 19:45:43 +0100 Subject: [PATCH 362/622] Update: Translations from eints dutch: 100 changes by JanWillem --- src/lang/dutch.txt | 200 ++++++++++++++++++++++----------------------- 1 file changed, 100 insertions(+), 100 deletions(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 5512bc7395..8d27e6ed2e 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -21,7 +21,7 @@ ##id 0x0000 STR_NULL : STR_EMPTY : -STR_UNDEFINED :(ongedefinieerde string) +STR_UNDEFINED :(ongedefinieerde tekenreeks) STR_JUST_NOTHING :Niets # Cargo related strings @@ -30,7 +30,7 @@ STR_CARGO_PLURAL_NOTHING : STR_CARGO_PLURAL_PASSENGERS :Passagiers STR_CARGO_PLURAL_COAL :Kolen STR_CARGO_PLURAL_MAIL :Post -STR_CARGO_PLURAL_OIL :Aardolie +STR_CARGO_PLURAL_OIL :Olie STR_CARGO_PLURAL_LIVESTOCK :Vee STR_CARGO_PLURAL_GOODS :Goederen STR_CARGO_PLURAL_GRAIN :Graan @@ -52,7 +52,7 @@ STR_CARGO_PLURAL_SUGAR :Suiker STR_CARGO_PLURAL_TOYS :Speelgoed STR_CARGO_PLURAL_CANDY :Snoep STR_CARGO_PLURAL_COLA :Cola -STR_CARGO_PLURAL_COTTON_CANDY :Suikerspinnen +STR_CARGO_PLURAL_COTTON_CANDY :Suikerspin STR_CARGO_PLURAL_BUBBLES :Bellen STR_CARGO_PLURAL_TOFFEE :Toffee STR_CARGO_PLURAL_BATTERIES :Batterijen @@ -64,14 +64,14 @@ STR_CARGO_SINGULAR_NOTHING : STR_CARGO_SINGULAR_PASSENGER :Passagier STR_CARGO_SINGULAR_COAL :Kolen STR_CARGO_SINGULAR_MAIL :Post -STR_CARGO_SINGULAR_OIL :Aardolie +STR_CARGO_SINGULAR_OIL :Olie STR_CARGO_SINGULAR_LIVESTOCK :Vee STR_CARGO_SINGULAR_GOODS :Goederen STR_CARGO_SINGULAR_GRAIN :Graan STR_CARGO_SINGULAR_WOOD :Hout STR_CARGO_SINGULAR_IRON_ORE :IJzererts STR_CARGO_SINGULAR_STEEL :Staal -STR_CARGO_SINGULAR_VALUABLES :Kostbaarheden +STR_CARGO_SINGULAR_VALUABLES :Kostbaarheid STR_CARGO_SINGULAR_COPPER_ORE :Kopererts STR_CARGO_SINGULAR_MAIZE :Maïs STR_CARGO_SINGULAR_FRUIT :Fruit @@ -87,7 +87,7 @@ STR_CARGO_SINGULAR_TOY :Speelgoed STR_CARGO_SINGULAR_CANDY :Snoep STR_CARGO_SINGULAR_COLA :Cola STR_CARGO_SINGULAR_COTTON_CANDY :Suikerspin -STR_CARGO_SINGULAR_BUBBLE :Bel +STR_CARGO_SINGULAR_BUBBLE :Bubbel STR_CARGO_SINGULAR_TOFFEE :Toffee STR_CARGO_SINGULAR_BATTERY :Batterij STR_CARGO_SINGULAR_PLASTIC :Plastic @@ -117,16 +117,16 @@ STR_QUANTITY_WATER :{VOLUME_LONG} w STR_QUANTITY_WHEAT :{WEIGHT_LONG} tarwe STR_QUANTITY_RUBBER :{VOLUME_LONG} rubber STR_QUANTITY_SUGAR :{WEIGHT_LONG} suiker -STR_QUANTITY_TOYS :{COMMA}{NBSP}stuk{P "" ken} speelgoed +STR_QUANTITY_TOYS :{COMMA}{NBSP}stuk{P "" s} speelgoed STR_QUANTITY_SWEETS :{COMMA}{NBSP}zak{P "" ken} snoep STR_QUANTITY_COLA :{VOLUME_LONG} cola -STR_QUANTITY_CANDYFLOSS :{WEIGHT_LONG} suikerspinnen -STR_QUANTITY_BUBBLES :{COMMA} bel{P "" len} +STR_QUANTITY_CANDYFLOSS :{WEIGHT_LONG} suikerspin +STR_QUANTITY_BUBBLES :{COMMA} bubbel{P "" s} STR_QUANTITY_TOFFEE :{WEIGHT_LONG} toffee STR_QUANTITY_BATTERIES :{COMMA} batterij{P "" en} STR_QUANTITY_PLASTIC :{VOLUME_LONG} plastic STR_QUANTITY_FIZZY_DRINKS :{COMMA} blikje{P "" s} frisdrank -STR_QUANTITY_N_A :N.V.T. +STR_QUANTITY_N_A :N.v.t. # Two letter abbreviation of cargo name STR_ABBREV_NOTHING : @@ -149,7 +149,7 @@ STR_ABBREV_FOOD :{TINY_FONT}VD STR_ABBREV_PAPER :{TINY_FONT}PR STR_ABBREV_GOLD :{TINY_FONT}GO STR_ABBREV_WATER :{TINY_FONT}WA -STR_ABBREV_WHEAT :{TINY_FONT}GN +STR_ABBREV_WHEAT :{TINY_FONT}TW STR_ABBREV_RUBBER :{TINY_FONT}RB STR_ABBREV_SUGAR :{TINY_FONT}SU STR_ABBREV_TOYS :{TINY_FONT}SP @@ -168,7 +168,7 @@ STR_ABBREV_ALL :{TINY_FONT}ALLE STR_PASSENGERS :{COMMA}{NBSP}passagier{P "" s} STR_BAGS :{COMMA}{NBSP}zak{P "" ken} STR_TONS :{COMMA}{NBSP}ton -STR_LITERS :{COMMA}{NBSP}liter{P "" s} +STR_LITERS :{COMMA}{NBSP}liter STR_ITEMS :{COMMA}{NBSP}stuk{P "" s} STR_CRATES :{COMMA}{NBSP}krat{P "" ten} @@ -227,13 +227,13 @@ STR_UNITS_HEIGHT_SI :{COMMA}{NBSP}m # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtertekst: -STR_LIST_FILTER_OSKTITLE :{BLACK}Voer filtertekst in -STR_LIST_FILTER_TOOLTIP :{BLACK}Geef een woord waarop gefilterd kan worden in de lijst +STR_LIST_FILTER_OSKTITLE :{BLACK}Filtertekst invoeren +STR_LIST_FILTER_TOOLTIP :{BLACK}Voer een woord in waarop de lijst wordt gefilterd -STR_TOOLTIP_GROUP_ORDER :{BLACK}Kies groepeervolgorde -STR_TOOLTIP_SORT_ORDER :{BLACK}Selecteer sorteerrichting (aflopend/oplopend) -STR_TOOLTIP_SORT_CRITERIA :{BLACK}Selecteer sorteercriteria -STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Kies filtercriteria +STR_TOOLTIP_GROUP_ORDER :{BLACK}Selecteer de volgorde voor groeperen +STR_TOOLTIP_SORT_ORDER :{BLACK}Selecteer de sorteerrichting (aflopend-oplopend) +STR_TOOLTIP_SORT_CRITERIA :{BLACK}Selecteer de sorteercriteria +STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Selecteer de filtercriteria STR_BUTTON_SORT_BY :{BLACK}Sorteren op STR_BUTTON_LOCATION :{BLACK}Locatie STR_BUTTON_RENAME :{BLACK}Hernoemen @@ -242,13 +242,13 @@ STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Venster STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Vensternaam - sleep om venster te verplaatsen STR_TOOLTIP_SHADE :{BLACK}Venster inklappen - alleen titelbalk weergeven STR_TOOLTIP_DEBUG :{BLACK}Probleemgegevens voor NewGRF weergeven -STR_TOOLTIP_DEFSIZE :{BLACK}wijzig venster naar standaardgrootte. Ctrl+Klik om de huidige grootte als standaard op te slaan +STR_TOOLTIP_DEFSIZE :{BLACK}Venster op standaardgrootte weergeven. Ctrl+klik slaat huidige grootte op als standaard. STR_TOOLTIP_STICKY :{BLACK}Dit venster markeren als niet-sluitbaar met de knop 'Alle vensters sluiten'. Ctrl+klik om slaat status op als standaard. STR_TOOLTIP_RESIZE :{BLACK}Klik en sleep om de grootte van dit venster te veranderen STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Schakelen tussen groot/klein venster -STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Schuifbalk - scroll verticaal door de lijst -STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Schuifbalk - scroll horizontaal door de lijst -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Sloop gebouwen etc. op een stuk land. Ctrl selecteert het gebied diagonaal. Shift schakelt tussen bouwen/inschatting van de kosten +STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Schuifbalk - blader verticaal door de lijst +STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Schuifbalk - blader horizontaal door de lijst +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Hiermee sloop je gebouwen enz. op een landtegel. Ctrl selecteert het gebied diagonaal. Shift schakelt tussen bouwen/inschatting van de kosten. # Show engines button STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN :{BLACK}Verborgen weergeven @@ -256,10 +256,10 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_ROAD_VEHICLE :{BLACK}Verborge STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP :{BLACK}Verborgen weergeven STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT :{BLACK}Verborgen weergeven -STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP :{BLACK}Door het inschakelen van deze knop, worden de verborgen treinen ook weergegeven -STR_SHOW_HIDDEN_ENGINES_VEHICLE_ROAD_VEHICLE_TOOLTIP :{BLACK}Door het inschakelen van deze knop, worden de verborgen wegvoertuigen ook weergegeven -STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP_TOOLTIP :{BLACK}Door het inschakelen van deze knop, worden de verborgen schepen ook weergegeven -STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Door het inschakelen van deze knop, worden de verborgen vliegtuig ook weergegeven +STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN_TOOLTIP :{BLACK}Wanneer je deze knop inschakelt, worden verborgen treinen ook weergegeven +STR_SHOW_HIDDEN_ENGINES_VEHICLE_ROAD_VEHICLE_TOOLTIP :{BLACK}Wanneer je deze knop inschakelt, worden verborgen wegvoertuigen ook weergegeven +STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP_TOOLTIP :{BLACK}Wanneer je deze knop inschakelt, worden verborgen schepen ook weergegeven +STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Wanneer je deze knop inschakelt, worden verborgen vliegtuigen ook weergegeven # Query window STR_BUTTON_DEFAULT :{BLACK}Standaard @@ -272,9 +272,9 @@ STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|Q # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Lengte: {NUM} -STR_MEASURE_AREA :{BLACK}Gebied: {NUM} x {NUM} +STR_MEASURE_AREA :{BLACK}Oppervlakte: {NUM} x {NUM} STR_MEASURE_LENGTH_HEIGHTDIFF :{BLACK}Lengte: {NUM}{}Hoogteverschil: {HEIGHT} -STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Gebied: {NUM} x {NUM}{}Hoogteverschil: {HEIGHT} +STR_MEASURE_AREA_HEIGHTDIFF :{BLACK}Oppervlakte: {NUM} x {NUM}{}Hoogteverschil: {HEIGHT} # These are used in buttons @@ -290,7 +290,7 @@ STR_SORT_BY_PROFIT_LAST_YEAR :Winst vorig jaa STR_SORT_BY_PROFIT_THIS_YEAR :Winst dit jaar STR_SORT_BY_AGE :Leeftijd STR_SORT_BY_RELIABILITY :Betrouwbaarheid -STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Capaciteit per vrachttype +STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Totale capaciteit per vrachttype STR_SORT_BY_MAX_SPEED :Maximumsnelheid STR_SORT_BY_MODEL :Model STR_SORT_BY_VALUE :Waarde @@ -299,24 +299,24 @@ STR_SORT_BY_LIFE_TIME :Resterende leve STR_SORT_BY_TIMETABLE_DELAY :Vertraging in dienstregeling STR_SORT_BY_FACILITY :Stationstype STR_SORT_BY_WAITING_TOTAL :Totaal wachtende vracht -STR_SORT_BY_WAITING_AVAILABLE :Beschikbare wachtende lading +STR_SORT_BY_WAITING_AVAILABLE :Beschikbare wachtende vracht STR_SORT_BY_RATING_MAX :Hoogste vrachtwaardering STR_SORT_BY_RATING_MIN :Laagste vrachtwaardering -STR_SORT_BY_ENGINE_ID :Voertuig-ID (klassieke sortering) +STR_SORT_BY_ENGINE_ID :Voertuig-id (klassieke sortering) STR_SORT_BY_COST :Prijs STR_SORT_BY_POWER :Vermogen STR_SORT_BY_TRACTIVE_EFFORT :Trekkracht STR_SORT_BY_INTRO_DATE :Introductiedatum STR_SORT_BY_RUNNING_COST :Bedrijfskosten -STR_SORT_BY_POWER_VS_RUNNING_COST :Vermogen/Bedrijfskosten +STR_SORT_BY_POWER_VS_RUNNING_COST :Vermogen / lopende kosten STR_SORT_BY_CARGO_CAPACITY :Vrachtcapaciteit STR_SORT_BY_RANGE :Bereik -STR_SORT_BY_POPULATION :Inwoners +STR_SORT_BY_POPULATION :Aantal inwoners STR_SORT_BY_RATING :Waardering # Tooltips for the main toolbar -STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pauzeer spel -STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Verhoog de spelsnelheid +STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Hiermee pauzeer je het spel +STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Hiermee verhoog je de spelsnelheid STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opties STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Spel opslaan, spel stoppen, afsluiten STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Kaart, extra kijkvenster of lijst met bordjes weergeven @@ -338,36 +338,36 @@ STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Inzoomen STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Uitzoomen STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Bouw spoorwegen STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Bouw wegen -STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Bouw havens -STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Bouw vliegvelden -STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Open de landschapsbalk om land te verhogen/verlagen, bomen te planten, etc. +STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Dokken en havens bouwen +STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Vliegvelden bouwen +STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Hiermee open je de landschapsbalk om land te verhogen/verlagen, bomen te planten, enz. STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Geluid-/muziekvenster weergeven STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Laatste (nieuws-)bericht weergeven, berichtinstellingen weergeven STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Landinformatie, console, scriptdebug, screenshots, over OpenTTD -STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Verwissel knoppenbalk +STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Knoppenbalken wisselen # Extra tooltips for the scenario editor toolbar STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}Scenario opslaan of laden, scenario-editor verlaten, afsluiten STR_SCENEDIT_TOOLBAR_OPENTTD :{YELLOW}OpenTTD STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Scenario-editor -STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Zet startdatum 1 jaar terug -STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Zet startdatum 1 jaar vooruit +STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Startdatum 1 jaar terugzetten +STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Startdatum 1 jaar vooruitzetten STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Klik om het startjaar op te geven STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Kaart, stedenlijst weergeven STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Landschapsontwikkeling STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Stadsontwikkeling STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Industrieontwikkeling STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Wegenbouw -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plant bomen. Shift schakelt tussen bouwen/inschatting van de kosten +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Bomen planten. Shift schakelt tussen planten/inschatting van de kosten STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Bord plaatsen STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Object plaatsen. Shift schakelt tussen bouwen/inschatting van de kosten ############ range for SE file menu starts STR_SCENEDIT_FILE_MENU_SAVE_SCENARIO :Scenario opslaan -STR_SCENEDIT_FILE_MENU_LOAD_SCENARIO :Scenario openen +STR_SCENEDIT_FILE_MENU_LOAD_SCENARIO :Scenario laden STR_SCENEDIT_FILE_MENU_SAVE_HEIGHTMAP :Hoogtekaart opslaan -STR_SCENEDIT_FILE_MENU_LOAD_HEIGHTMAP :Laad hoogtekaart -STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Sluit scenario-editor +STR_SCENEDIT_FILE_MENU_LOAD_HEIGHTMAP :Hoogtekaart laden +STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Scenario-editor sluiten STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Afsluiten ############ range for SE file menu starts @@ -375,7 +375,7 @@ STR_SCENEDIT_FILE_MENU_QUIT :Afsluiten ############ range for settings menu starts STR_SETTINGS_MENU_GAME_OPTIONS :Spelopties STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Instellingen -STR_SETTINGS_MENU_SCRIPT_SETTINGS :AI/Spelscriptinstellingen +STR_SETTINGS_MENU_SCRIPT_SETTINGS :AI-/spelscriptinstellingen STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF-instellingen STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Doorzichtigheidsopties STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Plaatsnamen weergeven @@ -386,26 +386,26 @@ STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Bordjes en name STR_SETTINGS_MENU_FULL_ANIMATION :Alle animaties STR_SETTINGS_MENU_FULL_DETAIL :Alle details STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Transparante gebouwen -STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Transparante borden +STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Transparante bordjes ############ range ends here ############ range for file menu starts STR_FILE_MENU_SAVE_GAME :Spel opslaan STR_FILE_MENU_LOAD_GAME :Spel laden -STR_FILE_MENU_QUIT_GAME :Verlaat spel +STR_FILE_MENU_QUIT_GAME :Spel sluiten STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Afsluiten ############ range ends here # map menu -STR_MAP_MENU_MAP_OF_WORLD :Kaart +STR_MAP_MENU_MAP_OF_WORLD :Wereldkaart STR_MAP_MENU_EXTRA_VIEW_PORT :Extra kijkvenster STR_MAP_MENU_LINGRAPH_LEGEND :Vrachtstroomlegende -STR_MAP_MENU_SIGN_LIST :Bordenlijst +STR_MAP_MENU_SIGN_LIST :Bordjeslijst ############ range for town menu starts STR_TOWN_MENU_TOWN_DIRECTORY :Stedenlijst -STR_TOWN_MENU_FOUND_TOWN :Sticht een stad +STR_TOWN_MENU_FOUND_TOWN :Stad stichten ############ range ends here ############ range for subsidies menu starts @@ -429,24 +429,24 @@ STR_GRAPH_MENU_HIGHSCORE :Scoretabel ############ range for industry menu starts STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Industrielijst -STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Bedrijfsketen +STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Industrieketens STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Betaal nieuwe industrie ############ range ends here ############ range for railway construction menu starts -STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Bouw spoorwegen -STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Bouw geëlektrificeerde spoorwegen +STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Spoorwegen bouwen +STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Geëlektrificeerde spoorwegen bouwen STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Bouw monorailspoorwegen STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Bouw magneetzweeftreinspoorwegen ############ range ends here ############ range for road construction menu starts -STR_ROAD_MENU_ROAD_CONSTRUCTION :Bouw wegen +STR_ROAD_MENU_ROAD_CONSTRUCTION :Wegen bouwen STR_ROAD_MENU_TRAM_CONSTRUCTION :Bouw tramsporen ############ range ends here ############ range for waterways construction menu starts -STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Bouw waterwegen +STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Waterwegen bouwen ############ range ends here ############ range for airport construction menu starts @@ -455,7 +455,7 @@ STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Vliegvelden bou ############ range for landscaping menu starts STR_LANDSCAPING_MENU_LANDSCAPING :Terreinvorming -STR_LANDSCAPING_MENU_PLANT_TREES :Plant bomen +STR_LANDSCAPING_MENU_PLANT_TREES :Bomen planten STR_LANDSCAPING_MENU_PLACE_SIGN :Bord plaatsen ############ range ends here @@ -464,7 +464,7 @@ STR_TOOLBAR_SOUND_MUSIC :Geluid/muziek ############ range ends here ############ range for message menu starts -STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Laatst (nieuws)bericht +STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Laatste (nieuws)bericht STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Berichtengeschiedenis STR_NEWS_MENU_DELETE_ALL_MESSAGES :Alle berichten verwijderen ############ range ends here @@ -596,7 +596,7 @@ STR_GRAPH_KEY_CAPTION :{WHITE}Legenda STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Klik hier om dit bedrijf weer te geven of te verbergen op de grafiek # Company league window -STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Bedrijfscompetitietabel +STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Bedrijfsscoretabel STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}' STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Ingenieur STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Verkeersleider @@ -1152,7 +1152,7 @@ STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Maximaal bedrag STR_CONFIG_SETTING_INTEREST_RATE :Rente van lening: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Percentage rente op lening; bepaald ook het inflatiecijfer wanneer ingeschakeld STR_CONFIG_SETTING_RUNNING_COSTS :Onderhoudskosten: {STRING} -STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Het niveau van onderhoud en bedrijfskosten van voertuigen en infrastuctuur +STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Het niveau van onderhoud en lopende kosten van voertuigen en infrastuctuur STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Bouwsnelheid: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Beperk de hoeveelheid bouwactiviteiten voor computerspeler STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Voertuigstoringen: {STRING} @@ -1774,9 +1774,9 @@ STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Schermin STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}NewGRF-instellingen weergeven STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Zoeken naar nieuwe en aangepaste inhoud om te downloaden STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}AI-/spelscriptinstellingen weergeven -STR_INTRO_TOOLTIP_QUIT :{BLACK}Verlaat 'OpenTTD' +STR_INTRO_TOOLTIP_QUIT :{BLACK}'OpenTTD' afsluiten -STR_INTRO_BASESET :{BLACK}De huidige gekozen set grafische elementen mist {NUM} afbeelding{P "" en}. Controleer of er updates zijn voor deze basisset. +STR_INTRO_BASESET :{BLACK}De huidige gekozen set grafische elementen mist {NUM} sprite{P "" s}. Controleer of er updates zijn voor deze basisset. STR_INTRO_TRANSLATION :{BLACK}Deze vertaling mist {NUM} tekst{P "" en}. Help aub om OpenTTD beter te maken door je al vertaler aan te melden. Zie readme.txt voor details. # Quit window @@ -2404,7 +2404,7 @@ STR_BRIDGE_TUBULAR_SILICON :Buis, silicium # Road construction toolbar -STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Bouw wegen +STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Wegen bouwen STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Bouw tramsporen STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Bouw weg. Ctrl schakelt tussen bouwen/verwijderen van de weg. Shift schakelt tussen bouwen/inschatting van de kosten STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Bouw tramsporen. Ctrl schakelt tussen bouwen/verwijderen van tramsporen. Shift schakelt tussen bouwen/inschatting van de kosten @@ -2509,7 +2509,7 @@ STR_PLANT_TREE_TOOLTIP :{BLACK}Kies een STR_TREES_RANDOM_TYPE :{BLACK}Willekeurige soorten bomen STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Willekeurig bomen planten. Shift+klik wisselt tussen bouwen/verwachte kosten. STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Willekeurige bomen -STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plant bomen willekeurig over de kaart +STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Hiermee plant je bomen willekeurig over het landschap # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Landontwikkeling @@ -2558,7 +2558,7 @@ STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}3x3-rast STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Willekeurig # Fund new industry window -STR_FUND_INDUSTRY_CAPTION :{WHITE}Betaal nieuwe industrie +STR_FUND_INDUSTRY_CAPTION :{WHITE}Nieuwe industrie financieren STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Kiest de gewenste industrie in de lijst STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :Veel willekeurige industrieën STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Bedek de kaart met willekeurig geplaatste industrieën @@ -2761,8 +2761,8 @@ STR_FRAMETIME_CAPTION_SOUND :Geluid mixen STR_SAVELOAD_SAVE_CAPTION :{WHITE}Spel Opslaan STR_SAVELOAD_LOAD_CAPTION :{WHITE}Spel Laden STR_SAVELOAD_SAVE_SCENARIO :{WHITE}Scenario Opslaan -STR_SAVELOAD_LOAD_SCENARIO :{WHITE}Scenario Laden -STR_SAVELOAD_LOAD_HEIGHTMAP :{WHITE}Laad Hoogtekaart +STR_SAVELOAD_LOAD_SCENARIO :{WHITE}Scenario laden +STR_SAVELOAD_LOAD_HEIGHTMAP :{WHITE}Hoogtekaart laden STR_SAVELOAD_SAVE_HEIGHTMAP :{WHITE}Hoogtekaart Opslaan STR_SAVELOAD_HOME_BUTTON :{BLACK}Klik hier om naar de standaard bewaar-/laadmap te gaan STR_SAVELOAD_BYTES_FREE :{BLACK}{BYTES} vrij @@ -2881,7 +2881,7 @@ STR_NEWGRF_SETTINGS_MOVEUP_TOOLTIP :{BLACK}Geselect STR_NEWGRF_SETTINGS_MOVEDOWN :{BLACK}Naar beneden STR_NEWGRF_SETTINGS_MOVEDOWN_TOOLTIP :{BLACK}Geselecteerde NewGRF-bestand naar beneden in de lijst verplaatsen STR_NEWGRF_SETTINGS_UPGRADE :{BLACK}Opwaarderen -STR_NEWGRF_SETTINGS_UPGRADE_TOOLTIP :{BLACK}Opwaarderen van NewGRF bestanden waar je een nieuwere versie van hebt geïnstalleerd +STR_NEWGRF_SETTINGS_UPGRADE_TOOLTIP :{BLACK}Opwaarderen van NewGRF-bestanden waar je een nieuwere versie van hebt geïnstalleerd STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Een lijst van de NewGRF-bestanden die zijn geïnstalleerd. STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Stel parameters in @@ -2942,23 +2942,23 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Spoortype STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x parameter (hexadecimaal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Afbeelding uitlijnen {COMMA} ({STRING}) -STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Volgende afbeelding +STR_SPRITE_ALIGNER_CAPTION :{WHITE}Sprite uitlijnen {COMMA} ({STRING}) +STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Volgende sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Doorgaan met volgende normale sprite, alle pseudo-/herkleur-/lettertype-sprites overslaan; bij het einde terug naar het begin -STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ga naar afbeelding -STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Ga naar de opgegeven afbeelding. Wanneer dit geen normale afbeelding is, ga verder naar de volgende normale afbeelding -STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Vorige afbeelding +STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ga naar sprite +STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Ga naar de opgegeven sprite. Wanneer dit geen normale sprite is, ga verder naar de volgende normale sprite. +STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Vorige sprite STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Doorgaan met de vorige normale sprite, alle pseudo-/herkleur-/lettertype-sprites overslaan; bij het einde terug naar het begin -STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Voorbeeld van de huidige afbeelding. De uitlijning wordt genegeerd bij het weergeven van de afbeelding +STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Voorbeeld van de huidige sprite. De uitlijning wordt genegeerd bij het weergeven van deze sprite. STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Afbeelding verplaatsen, dit verandert X en Y offsets. Ctr+klik om de afbeelding 8 eenheden per keer te verplaatsen. STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Herstel relatief STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Herstel de huidige relative offsets STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X offset: {NUM}, Y offset: {NUM} (Absoluut) STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}X offset: {NUM}, Y offset: {NUM} (Relatief) -STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Kies afbeelding -STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Kies een afbeelding van een willekeurige plaats op het scherm +STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Sprite kiezen +STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Kies een sprite van een willekeurige plaats op het scherm -STR_SPRITE_ALIGNER_GOTO_CAPTION :{WHITE}Ga naar afbeelding +STR_SPRITE_ALIGNER_GOTO_CAPTION :{WHITE}Ga naar sprite # NewGRF (self) generated warnings/errors STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING} @@ -2986,7 +2986,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Gevraagde GRF-m STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} is uitgeschakeld door {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ongeldige/onbekende indeling voor afbeeldingslay-out (afbeelding {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Te veel elementen in eigenschappenwaardelijst (affbeelding {3:NUM}, eigenschap {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ongeldige terugroep voor industriële productie (afbeelding {3:NUM}, "{1:STRING}") +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ongeldige terugroep voor industriële productie (sprite {3:NUM}, "{1:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Waarschuwing! @@ -3036,7 +3036,7 @@ STR_NEWGRF_SCAN_STATUS :{BLACK}{NUM} Ne STR_NEWGRF_SCAN_ARCHIVES :Zoeken naar archieven # Sign list window -STR_SIGN_LIST_CAPTION :{WHITE}Bordenlijst - {COMMA} bord{P "" en} +STR_SIGN_LIST_CAPTION :{WHITE}Bordjeslijst - {COMMA} bordje{P "" s} STR_SIGN_LIST_MATCH_CASE :{BLACK}Hoofdlettergevoelig STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Schakel hoofdlettergevoeligheid in bij het vergelijken van bordnamen met de filtertekst @@ -3105,7 +3105,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Begin e STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Begin een grote advertentiecampagne, om meer passagiers en vracht naar jouw transportdiensten te trekken.{}Kosten: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Financier een herstelling van het wegennetwerk. Veroorzaakt tot 6 maanden lang een aanzienlijke verstoring van het wegverkeer.{}Kosten: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Bouw een standbeeld ter ere van jouw bedrijf.{}Kosten: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Financier de bouw van nieuwe commerciële gebouwen in de stad.{}Kosten: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}De bouw van nieuwe commerciële gebouwen in de stad financieren.{}Kosten: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}1 jaar exclusieve transportrechten kopen in deze plaats. Het gemeentebestuur staat alleen passagiers en vracht toe bij jouw stations.{}Kosten: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Koop het plaatselijk gezag om om je reputatie te verhogen met het risico op een strenge sanctie wanneer je gepakt wordt.{}Kosten: {CURRENCY_LONG} @@ -3606,13 +3606,13 @@ STR_ENGINE_PREVIEW_SHIP :schip STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :monoraillocomotief STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :zweeflocomotief -STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Prijs: {CURRENCY_LONG} Gewicht: {WEIGHT_SHORT}{}Snelheid: {VELOCITY} Kracht: {POWER}{}Brandstofprijs: {CURRENCY_LONG}/jr{}Capaciteit: {CARGO_LONG} -STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Prijs: {CURRENCY_LONG} Gewicht: {WEIGHT_SHORT}{}Snelheid: {VELOCITY} Kracht: {POWER} Max. T.E.: {6:FORCE}{}Bedrijfskosten: {4:CURRENCY_LONG}/yr{}Capaciteit: {5:CARGO_LONG} +STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Kosten: {CURRENCY_LONG} Gewicht: {WEIGHT_SHORT}{}Snelheid: {VELOCITY} Kracht: {POWER}{}Lopende kosten: {CURRENCY_LONG}/jr{}Capaciteit: {CARGO_LONG} +STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Kosten: {CURRENCY_LONG} Gewicht: {WEIGHT_SHORT}{}Snelheid: {VELOCITY} Kracht: {POWER} Max. T.E.: {6:FORCE}{}Lopende kosten: {4:CURRENCY_LONG}/yr{}Capaciteit: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Kosten: {CURRENCY_LONG} Max. Snelheid: {VELOCITY}{}Capaciteit: {CARGO_LONG}{}Gebruikskosten: {CURRENCY_LONG}/jaar -STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Prijs: {CURRENCY_LONG} Max. Snelheid: {VELOCITY}{}Vliegtuig type: {STRING}{}Capaciteit: {CARGO_LONG}, {CARGO_LONG}{}Gebruikskosten: {CURRENCY_LONG}/jaar -STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Prijs: {CURRENCY_LONG} Max. Snelheid: {VELOCITY}{}Vliegtuig type: {STRING}{}Capaciteit: {CARGO_LONG}{}Gebruikskosten: {CURRENCY_LONG}/jaar -STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Prijs: {CURRENCY_LONG} Max. Snelheid: {VELOCITY}{}Vliegtuig type: {STRING} Bereik: {COMMA} tiles{}Capaciteit: {CARGO_LONG}, {CARGO_LONG}{}Gebruikskosten: {CURRENCY_LONG}/jaar -STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Prijs: {CURRENCY_LONG} Max. Snelheid: {VELOCITY}{}Vliegtuig type: {STRING} Bereik: {COMMA} tiles{}Capaciteit: {CARGO_LONG}{}Gebruikskosten: {CURRENCY_LONG}/jaar +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Kosten: {CURRENCY_LONG} Max. Snelheid: {VELOCITY}{}Vliegtuig type: {STRING}{}Capaciteit: {CARGO_LONG}, {CARGO_LONG}{}Gebruikskosten: {CURRENCY_LONG}/jaar +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Kosten: {CURRENCY_LONG} Max. Snelheid: {VELOCITY}{}Vliegtuig type: {STRING}{}Capaciteit: {CARGO_LONG}{}Gebruikskosten: {CURRENCY_LONG}/jaar +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Kosten: {CURRENCY_LONG} Max. Snelheid: {VELOCITY}{}Vliegtuig type: {STRING} Bereik: {COMMA} tiles{}Capaciteit: {CARGO_LONG}, {CARGO_LONG}{}Gebruikskosten: {CURRENCY_LONG}/jaar +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Kosten: {CURRENCY_LONG} Max. Snelheid: {VELOCITY}{}Vliegtuig type: {STRING} Bereik: {COMMA} tiles{}Capaciteit: {CARGO_LONG}{}Gebruikskosten: {CURRENCY_LONG}/jaar # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Vervang {STRING} - {STRING} @@ -4183,8 +4183,8 @@ STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Het aan STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Alleen back-upgeluid is gevonden. Als u geluid wilt, installeer dan een geluiddsset via het downloadsysteem # Screenshot related messages -STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Grote schermafdruk -STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}De schermafdruk heeft een resolutie van {COMMA} x {COMMA} pixels. De schermafdruk maken kan even duren. Verder gaan? +STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Grote schermfoto +STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}De schermfoto heeft een resolutie van {COMMA} x {COMMA} pixels. Het maken van de schermfoto kan even duren. Verder gaan? STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Schermafbeelding succesvol opgeslagen als '{STRING}' STR_ERROR_SCREENSHOT_FAILED :{WHITE}Schermfoto mislukt! @@ -4539,10 +4539,10 @@ STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Voertuig STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Dit voertuig stopt niet op dit station # Sign related errors -STR_ERROR_TOO_MANY_SIGNS :{WHITE}... te veel borden -STR_ERROR_CAN_T_PLACE_SIGN_HERE :{WHITE}Kan hier geen bord plaatsen -STR_ERROR_CAN_T_CHANGE_SIGN_NAME :{WHITE}Kan de naam van het bord niet wijzigen -STR_ERROR_CAN_T_DELETE_SIGN :{WHITE}Kan bord niet verwijderen... +STR_ERROR_TOO_MANY_SIGNS :{WHITE}... te veel bordjes +STR_ERROR_CAN_T_PLACE_SIGN_HERE :{WHITE}Kan hier geen bordje plaatsen +STR_ERROR_CAN_T_CHANGE_SIGN_NAME :{WHITE}Kan de naam van het bordje niet wijzigen +STR_ERROR_CAN_T_DELETE_SIGN :{WHITE}Kan bordje niet verwijderen... # Translatable comment for OpenTTD's desktop shortcut STR_DESKTOP_SHORTCUT_COMMENT :Een simulatiespel gebaseerd op Transport Tycoon Deluxe @@ -4724,7 +4724,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_RUBBER_TRUCK :Rubberwagon STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_SUGAR_TRUCK :Suikerwagon STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COTTON_CANDY_HOPPER :Suikerspinnenwagon STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOFFEE_HOPPER :Toffeewagon -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BUBBLE_VAN :Bellenwagon +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BUBBLE_VAN :Bubbelwagon STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COLA_TANKER :Colatanker STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_CANDY_VAN :Snoepwagon STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOY_VAN :Speelgoedwagon @@ -4754,7 +4754,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_RUBBER_TRUCK :Rubberwagon STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_SUGAR_TRUCK :Suikerwagon STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COTTON_CANDY_HOPPER :Suikerspinnenwagon STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOFFEE_HOPPER :Toffeewagon -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BUBBLE_VAN :Bellenwagon +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BUBBLE_VAN :Bubbelwagon STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COLA_TANKER :Colatanker STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_CANDY_VAN :Snoepwagon STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOY_VAN :Speelgoedwagon @@ -4786,7 +4786,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_RUBBER_TRUCK :Rubberwagon STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_SUGAR_TRUCK :Suikerwagon STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COTTON_CANDY_HOPPER :Suikerspinnenwagon STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_TOFFEE_HOPPER :Toffeewagon -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BUBBLE_VAN :Bellenwagon +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BUBBLE_VAN :Bubbelwagon STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COLA_TANKER :Colatanker STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_CANDY_VAN :Snoepwagon STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_TOY_VAN :Speelgoedwagon @@ -4857,8 +4857,8 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_SUGAR_TRUCK :Wizzowow Suiker STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COLA_TRUCK :MightyMover Colatruck STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COLA_TRUCK :Powernaught Colatruck STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COLA_TRUCK :Wizzowow Colatruck -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COTTON_CANDY :MightyMover Suikerspinnentruck -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COTTON_CANDY :Powernaught Suikerspinnentruck +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COTTON_CANDY :MightyMover-suikerspintruck +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COTTON_CANDY :Powernaught-suikerspintruck STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COTTON_CANDY_TRUCK :Wizzowow Suikerspinnentruck STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOFFEE_TRUCK :MightyMover Toffeetruck STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOFFEE_TRUCK :Powernaught Toffeetruck @@ -4878,9 +4878,9 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_FIZZY_DRINK_TRUCK :Wizzowow Frisdr STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_PLASTIC_TRUCK :MightyMover Plastictruck STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_PLASTIC_TRUCK :Powernaught Plastictruck STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_PLASTIC_TRUCK :Wizzowow Plastictruck -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_BUBBLE_TRUCK :MightyMover Bellentruck -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_BUBBLE_TRUCK :Powernaught Bellentruck -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BUBBLE_TRUCK :Wizzowow Bellentruck +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_BUBBLE_TRUCK :MightyMover-bubbeltruck +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_BUBBLE_TRUCK :Powernaught-bubbeltruck +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BUBBLE_TRUCK :Wizzowow-bubbeltruck STR_VEHICLE_NAME_SHIP_MPS_OIL_TANKER :MPS Olietanker STR_VEHICLE_NAME_SHIP_CS_INC_OIL_TANKER :CS-Inc. Olietanker STR_VEHICLE_NAME_SHIP_MPS_PASSENGER_FERRY :MPS Veerboot From 21f009dc78f2e5c5e5ff80ed3719e9567ac71ec1 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 20 Feb 2019 19:45:42 +0100 Subject: [PATCH 363/622] Update: Translations from eints english (us): 11 changes by njn dutch: 244 changes by JanWillem turkish: 102 changes by wakeup --- src/lang/dutch.txt | 488 ++++++++++++++++++++-------------------- src/lang/english_US.txt | 13 +- src/lang/turkish.txt | 116 ++++++++-- 3 files changed, 357 insertions(+), 260 deletions(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 8d27e6ed2e..dafd50caf5 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -336,8 +336,8 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Lijst me STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Lijst met vliegtuigen van het bedrijf weergeven. Ctrl+klik schakelt tussen lijst van groepen/voertuigen. STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Inzoomen STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Uitzoomen -STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Bouw spoorwegen -STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Bouw wegen +STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Spoorwegen bouwen +STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Wegen bouwen STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Dokken en havens bouwen STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Vliegvelden bouwen STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Hiermee open je de landschapsbalk om land te verhogen/verlagen, bomen te planten, enz. @@ -422,7 +422,7 @@ STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Vrachtprijzen ############ range ends here ############ range for company league menu starts -STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Bedrijfscompetitietabel +STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Bedrijfsscoretabel STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Gedetailleerde prestatiescore STR_GRAPH_MENU_HIGHSCORE :Scoretabel ############ range ends here @@ -436,13 +436,13 @@ STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Betaal nieuwe i ############ range for railway construction menu starts STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Spoorwegen bouwen STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Geëlektrificeerde spoorwegen bouwen -STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Bouw monorailspoorwegen -STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Bouw magneetzweeftreinspoorwegen +STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Monorailspoorwegen bouwen +STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Zweeftreinspoorwegen bouwen ############ range ends here ############ range for road construction menu starts STR_ROAD_MENU_ROAD_CONSTRUCTION :Wegen bouwen -STR_ROAD_MENU_TRAM_CONSTRUCTION :Bouw tramsporen +STR_ROAD_MENU_TRAM_CONSTRUCTION :Tramsporen bouwen ############ range ends here ############ range for waterways construction menu starts @@ -486,21 +486,21 @@ STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Kleuren van vui ############ range ends here ############ range for ordinal numbers used for the place in the highscore window -STR_ORDINAL_NUMBER_1ST :1 -STR_ORDINAL_NUMBER_2ND :2 -STR_ORDINAL_NUMBER_3RD :3 -STR_ORDINAL_NUMBER_4TH :4 -STR_ORDINAL_NUMBER_5TH :5 -STR_ORDINAL_NUMBER_6TH :6 -STR_ORDINAL_NUMBER_7TH :7 -STR_ORDINAL_NUMBER_8TH :8 -STR_ORDINAL_NUMBER_9TH :9 -STR_ORDINAL_NUMBER_10TH :10 -STR_ORDINAL_NUMBER_11TH :11 -STR_ORDINAL_NUMBER_12TH :12 -STR_ORDINAL_NUMBER_13TH :13 -STR_ORDINAL_NUMBER_14TH :14 -STR_ORDINAL_NUMBER_15TH :15 +STR_ORDINAL_NUMBER_1ST :1e +STR_ORDINAL_NUMBER_2ND :2e +STR_ORDINAL_NUMBER_3RD :3e +STR_ORDINAL_NUMBER_4TH :4e +STR_ORDINAL_NUMBER_5TH :5e +STR_ORDINAL_NUMBER_6TH :6e +STR_ORDINAL_NUMBER_7TH :7e +STR_ORDINAL_NUMBER_8TH :8e +STR_ORDINAL_NUMBER_9TH :9e +STR_ORDINAL_NUMBER_10TH :10e +STR_ORDINAL_NUMBER_11TH :11e +STR_ORDINAL_NUMBER_12TH :12e +STR_ORDINAL_NUMBER_13TH :13e +STR_ORDINAL_NUMBER_14TH :14e +STR_ORDINAL_NUMBER_15TH :15e ############ range for ordinal numbers ends ############ range for days starts @@ -576,12 +576,12 @@ STR_GRAPH_Y_LABEL_NUMBER :{TINY_FONT}{COM STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Grafiek van operationele winst STR_GRAPH_INCOME_CAPTION :{WHITE}Grafiek van inkomsten STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Aantal eenheden afgeleverde vracht -STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Bedrijfsprestatiescore (maximale score=1000) +STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Bedrijfsprestatiescore (maximale score = 1000) STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Bedrijfswaarde STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Vrachtprijzen STR_GRAPH_CARGO_PAYMENT_RATES_X_LABEL :{TINY_FONT}{BLACK}Dagen onderweg -STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Betaling voor het leveren van 10 eenheden (of 10,000 liter) aan vracht over een afstand van 20 vakjes +STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Betaling voor het leveren van 10 eenheden (of 10.000 liter) vracht over een afstand van 20 vakjes STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Alles aan STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Alles uit STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Alle vrachtsoorten weergeven op de grafiek van vrachtprijzen @@ -598,7 +598,7 @@ STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Klik hie # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Bedrijfsscoretabel STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}' -STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Ingenieur +STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Mecanicien STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Verkeersleider STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Transportcoördinator STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ROUTE_SUPERVISOR :Routeopzichter @@ -610,7 +610,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Tycoon # Performance detail window STR_PERFORMANCE_DETAIL :{WHITE}Gedetailleerde prestatiescore -STR_PERFORMANCE_DETAIL_KEY :{BLACK}Detail +STR_PERFORMANCE_DETAIL_KEY :{BLACK}Details STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY :{BLACK}({CURRENCY_SHORT}/{CURRENCY_SHORT}) STR_PERFORMANCE_DETAIL_AMOUNT_INT :{BLACK}({COMMA}/{COMMA}) STR_PERFORMANCE_DETAIL_PERCENT :{WHITE}{NUM}% @@ -627,12 +627,12 @@ STR_PERFORMANCE_DETAIL_MONEY :{BLACK}Geld: STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Lening: STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Totaal: ############ End of order list -STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP :{BLACK}Aantal voertuigen met winst in het afgelopen jaar. Hierbij tellen wegvoertuigen, treinen, schepen en vliegtuigen allemaal mee -STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Aantal recentelijk bezochte stationsonderdelen. Elk deel van een station (bijv. treinstation, bushalte, vliegveld) wordt geteld, zelfs als deze tot een station behoren +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP :{BLACK}Aantal voertuigen met winst in het afgelopen jaar. Hierbij tellen wegvoertuigen, treinen, schepen en vliegtuigen allemaal mee. +STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Aantal recentelijk bezochte stations. Alle treinstations, busstations, vliegvelden enz. worden meegeteld, ook als deze tot hetzelfde station behoren. STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP :{BLACK}De winst van het voertuig met het laagste inkomen (van alle voertuigen ouder dan 2 jaar) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}De hoeveelheid geld die is verdiend in het kwartaal met de laagste winst van de afgelopen 12 kwartalen STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}De hoeveelheid geld die is verdiend in het kwartaal met de hoogste winst van de afgelopen 12 kwartalen -STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Het aantal eenheden aan vracht dat in de afgelopen vier kwartalen is afgeleverd +STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Het aantal eenheden vracht dat in de afgelopen vier kwartalen is afgeleverd STR_PERFORMANCE_DETAIL_CARGO_TOOLTIP :{BLACK}Aantal soorten vracht die in het laatste kwartaal zijn afgeleverd STR_PERFORMANCE_DETAIL_MONEY_TOOLTIP :{BLACK}Hoeveelheid geld op de bank STR_PERFORMANCE_DETAIL_LOAN_TOOLTIP :{BLACK}De hoeveelheid geld die dit bedrijf leent @@ -641,8 +641,8 @@ STR_PERFORMANCE_DETAIL_TOTAL_TOOLTIP :{BLACK}Totaal a # Music window STR_MUSIC_JAZZ_JUKEBOX_CAPTION :{WHITE}Jazzjukebox STR_MUSIC_PLAYLIST_ALL :{TINY_FONT}{BLACK}Alle -STR_MUSIC_PLAYLIST_OLD_STYLE :{TINY_FONT}{BLACK}Oude Stijl -STR_MUSIC_PLAYLIST_NEW_STYLE :{TINY_FONT}{BLACK}Nieuwe Stijl +STR_MUSIC_PLAYLIST_OLD_STYLE :{TINY_FONT}{BLACK}Oude stijl +STR_MUSIC_PLAYLIST_NEW_STYLE :{TINY_FONT}{BLACK}Nieuwe stijl STR_MUSIC_PLAYLIST_EZY_STREET :{TINY_FONT}{BLACK}Ezy Street STR_MUSIC_PLAYLIST_CUSTOM_1 :{TINY_FONT}{BLACK}Aangepast 1 STR_MUSIC_PLAYLIST_CUSTOM_2 :{TINY_FONT}{BLACK}Aangepast 2 @@ -658,19 +658,19 @@ STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKG STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Nummer STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Titel -STR_MUSIC_SHUFFLE :{TINY_FONT}{BLACK}Shuffle +STR_MUSIC_SHUFFLE :{TINY_FONT}{BLACK}Willekeurig STR_MUSIC_PROGRAM :{TINY_FONT}{BLACK}Programma -STR_MUSIC_TOOLTIP_SKIP_TO_PREVIOUS_TRACK :{BLACK}Vorige nummer in selectie -STR_MUSIC_TOOLTIP_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Volgende nummer in selectie +STR_MUSIC_TOOLTIP_SKIP_TO_PREVIOUS_TRACK :{BLACK}Naar vorige nummer in selectie +STR_MUSIC_TOOLTIP_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Naar volgende nummer in selectie STR_MUSIC_TOOLTIP_STOP_PLAYING_MUSIC :{BLACK}Stop muziek STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC :{BLACK}Start muziek STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Gebruik de schuifbalken om het volume aan te passen -STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Selecteer 'alle nummers'-programma -STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Selecteer 'oude stijl-muziek'-programma -STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Selecteer 'nieuwe stijl-muziek'-programma +STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Selecteer het programma 'Alle nummers' +STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Selecteer het programma 'Oude stijl' +STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Selecteer het programma 'Nieuwe stijl' STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Kies 'Ezy Street stylemuziek'-programma -STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Selecteer 'Aangepast1'-programma -STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Selecteer 'Aangepast2'-programma +STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Selecteer het programma 'Aangepast1' +STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Selecteer het programma 'Aangepast2' STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Willekeurige volgorde aan-uit STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Venster voor muzieknummers weergeven @@ -679,28 +679,28 @@ STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Muziekpr STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Nummerindex STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Programma - '{STRING}' -STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Maak leeg -STR_PLAYLIST_CHANGE_SET :{BLACK}Verander set -STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Maak huidig programma leeg (alleen Aangepast1 en Aangepast2) -STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Verander muziekselectie naar een andere geïnstalleerde set -STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klik op het nummer om deze aan het programma toe te voegen (alleen Aangepast1 en Aangepast2) -STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klik op het nummer om deze uit het programma te verwijderen (alleen Aangepast1 en Aangepast2) +STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Wissen +STR_PLAYLIST_CHANGE_SET :{BLACK}Set wisselen +STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Huidig programma wissen (alleen Aangepast1 en Aangepast2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Muziekselectie wisselen naar andere geïnstalleerde set +STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klik op een nummer om dit aan het programma toe te voegen (alleen Aangepast1 en Aangepast2) +STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klik op een nummer om dit uit het programma te verwijderen (alleen Aangepast1 en Aangepast2) # Highscore window -STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Top bedrijven die {NUM} bereikt hebben -STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Bedrijfscompetitietabel in {NUM} +STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Best presterende bedrijven die {NUM} bereikt hebben +STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Bedrijfsscoretabel in {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. -STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Zakenman +STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :ZZP'er STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Ondernemer -STR_HIGHSCORE_PERFORMANCE_TITLE_INDUSTRIALIST :Fabrikant +STR_HIGHSCORE_PERFORMANCE_TITLE_INDUSTRIALIST :Industrieel STR_HIGHSCORE_PERFORMANCE_TITLE_CAPITALIST :Kapitalist STR_HIGHSCORE_PERFORMANCE_TITLE_MAGNATE :Magnaat STR_HIGHSCORE_PERFORMANCE_TITLE_MOGUL :Mogul STR_HIGHSCORE_PERFORMANCE_TITLE_TYCOON_OF_THE_CENTURY :Tycoon van de Eeuw STR_HIGHSCORE_NAME :{PRESIDENT_NAME}, {COMPANY} STR_HIGHSCORE_STATS :{BIG_FONT}'{STRING}' ({COMMA}) -STR_HIGHSCORE_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{BLACK}{COMPANY} bereikt '{STRING}'-status! -STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{WHITE}{PRESIDENT_NAME} van {COMPANY} bereikt '{STRING}'-status! +STR_HIGHSCORE_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{BLACK}{COMPANY} bereikt de status '{STRING}'! +STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{WHITE}{PRESIDENT_NAME} van {COMPANY} bereikt de status '{STRING}'! # Smallmap window STR_SMALLMAP_CAPTION :{WHITE}Kaart - {STRING} @@ -725,8 +725,8 @@ STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Klik op STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Wegen STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}Spoorwegen -STR_SMALLMAP_LEGENDA_STATIONS_AIRPORTS_DOCKS :{TINY_FONT}{BLACK}Stations/Vliegvelden/Havens -STR_SMALLMAP_LEGENDA_BUILDINGS_INDUSTRIES :{TINY_FONT}{BLACK}Gebouwen/Industrieën +STR_SMALLMAP_LEGENDA_STATIONS_AIRPORTS_DOCKS :{TINY_FONT}{BLACK}Stations/vliegvelden/havens +STR_SMALLMAP_LEGENDA_BUILDINGS_INDUSTRIES :{TINY_FONT}{BLACK}Gebouwen/industrieën STR_SMALLMAP_LEGENDA_VEHICLES :{TINY_FONT}{BLACK}Voertuigen STR_SMALLMAP_LEGENDA_TRAINS :{TINY_FONT}{BLACK}Treinen STR_SMALLMAP_LEGENDA_ROAD_VEHICLES :{TINY_FONT}{BLACK}Wegvoertuigen @@ -1255,9 +1255,9 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Geen STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Verminderd STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normaal STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Haltes plaatsen op door stad beheerde wegen toestaan: {STRING} -STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Laat het bouwen van doorrijhaltes toe op stedelijke wegen +STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Bouwen van doorrijhaltes op stedelijke wegen toestaan STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Haltes op wegen van tegenstanders toestaan: {STRING} -STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Laat het bouwen van doorrijhaltes toe op wegen van andere bedrijven +STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Bouwen van doorrijhaltes op wegen van andere bedrijven toestaan STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Deze instelling kan niet gewijzigd worden als er voertuigen zijn STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Onderhoudskosten infrastructuur: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Wanneer dit is ingeschakeld, veroorzaakt de infrastructuur onderhoudskosten. De kosten groeien boven-proportioneel met de grootte van het netwerk, waardoor grotere bedrijven hierdoor meer worden beïnvloed dan kleinere @@ -1841,11 +1841,11 @@ STR_LIVERY_MONORAIL :Monoraillocomot STR_LIVERY_MAGLEV :Zweeftreinlocomotief STR_LIVERY_DMU :Dieseltreinstel STR_LIVERY_EMU :Elektrisch treinstel -STR_LIVERY_PASSENGER_WAGON_STEAM :Passagierswagon (Stoom) -STR_LIVERY_PASSENGER_WAGON_DIESEL :Passagierswagon (Diesel) -STR_LIVERY_PASSENGER_WAGON_ELECTRIC :Passagierswagon (Elektrisch) -STR_LIVERY_PASSENGER_WAGON_MONORAIL :Passagierswagon (Monorail) -STR_LIVERY_PASSENGER_WAGON_MAGLEV :Passagierswagon (Zweeftrein) +STR_LIVERY_PASSENGER_WAGON_STEAM :Passagierswagon (stoom) +STR_LIVERY_PASSENGER_WAGON_DIESEL :Passagierswagon (diesel) +STR_LIVERY_PASSENGER_WAGON_ELECTRIC :Passagierswagon (elektrisch) +STR_LIVERY_PASSENGER_WAGON_MONORAIL :Passagierswagon (monorail) +STR_LIVERY_PASSENGER_WAGON_MAGLEV :Passagierswagon (zweeftrein) STR_LIVERY_FREIGHT_WAGON :Vrachtwagon STR_LIVERY_BUS :Bus STR_LIVERY_TRUCK :Vrachtwagen @@ -2316,24 +2316,24 @@ STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Biedt aa # Join station window STR_JOIN_STATION_CAPTION :{WHITE}Station samenvoegen -STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Bouw een losstaand station +STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Een losstaand station bouwen STR_JOIN_WAYPOINT_CAPTION :{WHITE}Routepunt samenvoegen STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Los routepunt bouwen # Rail construction toolbar -STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Bouw spoorwegen -STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Bouw geëlektrificeerde spoorwegen +STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Spoorwegen bouwen +STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Geëlektrificeerde spoorwegen bouwen STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Bouw monorailspoorwegen STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Bouw magneetzweeftreinspoorwegen STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Spoor bouwen. Ctrl schakelt tussen bouwen/verwijderen van het spoor. Shift schakelt tussen bouwen/inschatting van de kosten -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Bouw spoor met de Autorail-methode. Ctrl schakelt tussen bouwen/verwijderen van het spoor. Shift schakelt tussen bouwen/inschatting van de kosten +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Spoor bouwen met de automatische methode. Ctrl schakelt tussen bouwen/verwijderen van het spoor. Shift schakelt tussen bouwen/inschatting van de kosten. STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Remise bouwen (om treinen te kopen en te onderhouden). Shift schakelt tussen bouwen/kosten weergeven. STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Spoor ombouwen naar routepunt. Ctrl om samen te voegen met ander routepunt. Shift schakelt tussen bouwen/kosten weergeven. -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Bouw treinstation. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Treinstation bouwen. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten. STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Seinen bouwen. Ctrl wisselt tussen armseinen/lichtseinen{}Slepen plaatst seinen langs een recht stuk spoor. Ctrl bouwt seinen tot de volgende wissel{}Ctrl+klik schakelt het openen van seinkeuzelijst aan-uit. Shift schakelt tussen bouwen/kosten weergeven. -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Bouw spoorbrug. Shift schakelt tussen bouwen/inschatting van de kosten +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Spoorbrug bouwen. Shift schakelt tussen bouwen/inschatting van de kosten STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Graaf spoortunnel. Shift schakelt tussen bouwen/inschatting van de kosten STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Schakelt tussen bouwen en verwijderen van sporen, seinen, routepunten en stations. Ctrl verwijdert ook het spoor van routepunten en stations. STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Verander spoortype. Shift schakelt tussen bouwen/inschatting van de kosten @@ -2360,7 +2360,7 @@ STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Selectee STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}Perronlengte STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Selecteer lengte van station STR_STATION_BUILD_DRAG_DROP :{BLACK}Slepen -STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Bouw een station door te slepen +STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Je kunt een station bouwen door te slepen STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Selecteer een stationsklasse om weer te geven STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Selecteer het type station om te bouwen @@ -2406,21 +2406,21 @@ STR_BRIDGE_TUBULAR_SILICON :Buis, silicium # Road construction toolbar STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Wegen bouwen STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Bouw tramsporen -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Bouw weg. Ctrl schakelt tussen bouwen/verwijderen van de weg. Shift schakelt tussen bouwen/inschatting van de kosten +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Weg bouwen. Ctrl schakelt tussen bouwen/verwijderen van de weg. Shift schakelt tussen bouwen/inschatting van de kosten. STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Bouw tramsporen. Ctrl schakelt tussen bouwen/verwijderen van tramsporen. Shift schakelt tussen bouwen/inschatting van de kosten -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Bouw weg met de Autoroad-methode. Ctrl schakelt tussen bouwen/verwijderen van de weg. Shift schakelt tussen bouwen/inschatting van de kosten +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Wegen bouwen met de automatische methode. Ctrl schakelt tussen bouwen/verwijderen van de weg. Shift schakelt tussen bouwen/inschatting van de kosten. STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Bouw tramsporen met de Autotram-methode. Ctrl schakelt tussen bouwen/verwijderen van tramrails. Shift schakelt tussen bouwen/inschatting van de kosten -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Bouw garage (voor het kopen en onderhouden van wegvoertuigen). Shift schakelt tussen bouwen/inschatting van de kosten -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Bouw tramdepot (voor het kopen en onderhouden van trams). Shift schakelt tussen bouwen/inschatting van de kosten -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Bouw bushalte. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Garage bouwen (voor het kopen en onderhouden van wegvoertuigen). Shift schakelt tussen bouwen/inschatting van de kosten. +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Tramremise bouwen (voor het kopen en onderhouden van trams). Shift schakelt tussen bouwen/inschatting van de kosten. +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Busstation bouwen. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten. STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Bouw passagierstramhalte. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Bouw vrachtwagenlaadhal. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Bouw vrachttramhalte. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Laadperron bouwen. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten. +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Vrachttramhalte bouwen. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten. STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Activeer/Deactiveer eenrichtingsverkeer STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Bouw wegbrug. Shift schakelt tussen bouwen/inschatting van de kosten STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Bouw brug voor tramsporen. Shift schakelt tussen bouwen/inschatting van de kosten -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Bouw wegtunnel. Shift schakelt tussen bouwen/inschatting van de kosten -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Bouw tramtunnel. Shift schakelt tussen bouwen/inschatting van de kosten +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Wegtunnel bouwen. Shift schakelt tussen bouwen/inschatting van de kosten. +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Tramtunnel bouwen. Shift schakelt tussen bouwen/inschatting van de kosten. STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Kies tussen bouwen en verwijderen bij wegenbouw STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Kies tussen bouwen en verwijderen bij tramspooraanleg @@ -2441,14 +2441,14 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Richting STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Selecteer richting van vrachttramhalte # Waterways toolbar (last two for SE only) -STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Bouw van waterwegen +STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Waterwegen bouwen STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Waterwegen -STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Bouw kanalen. Shift schakelt tussen bouwen/inschatting van de kosten -STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Bouw sluis. Shift schakelt tussen bouwen/inschatting van de kosten -STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Bouw dok (voor het kopen en onderhoud van schepen). Shift schakelt tussen bouwen/inschatting van de kosten -STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Bouw haven. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten +STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Kanalen bouwen. Shift schakelt tussen bouwen/inschatting van de kosten. +STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Sluis bouwen. Shift schakelt tussen bouwen/inschatting van de kosten. +STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Dok bouwen (voor het kopen en onderhouden van schepen). Shift schakelt tussen bouwen/inschatting van de kosten. +STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Haven bouwen. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten. STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Boei plaatsen, deze kan gebruikt worden voor extra tussenstops. Shift schakelt tussen bouwen/inschatting van de kosten -STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Bouw aquaduct. Shift schakelt tussen bouwen/inschatting van de kosten +STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Aquaduct bouwen. Shift schakelt tussen bouwen/inschatting van de kosten. STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Definieer watergebied.{}Maak een kanaal, tenzij Ctrl wordt vastgehouden op zeeniveau, dan zal de omgeving overstromen STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Leg rivieren aan @@ -2461,7 +2461,7 @@ STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Haven # Airport toolbar STR_TOOLBAR_AIRCRAFT_CAPTION :{WHITE}Vliegvelden -STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Bouw vliegveld. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten +STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Vliegveld bouwen. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten. # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Keuze van vliegveld @@ -2661,7 +2661,7 @@ STR_LAI_STATION_DESCRIPTION_RAILROAD_STATION :Treinstation STR_LAI_STATION_DESCRIPTION_AIRCRAFT_HANGAR :Hangar STR_LAI_STATION_DESCRIPTION_AIRPORT :Vliegveld STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Vrachtwagenlaadgebied -STR_LAI_STATION_DESCRIPTION_BUS_STATION :Bushalte +STR_LAI_STATION_DESCRIPTION_BUS_STATION :Busstation STR_LAI_STATION_DESCRIPTION_SHIP_DOCK :Haven STR_LAI_STATION_DESCRIPTION_BUOY :Boei STR_LAI_STATION_DESCRIPTION_WAYPOINT :Routepunt @@ -2885,7 +2885,7 @@ STR_NEWGRF_SETTINGS_UPGRADE_TOOLTIP :{BLACK}Opwaarde STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Een lijst van de NewGRF-bestanden die zijn geïnstalleerd. STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Stel parameters in -STR_NEWGRF_SETTINGS_SHOW_PARAMETERS :{BLACK}Laat parameters zien +STR_NEWGRF_SETTINGS_SHOW_PARAMETERS :{BLACK}Parameters weergeven STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Palet omzetten STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Verander het palet van het geselecteerde NewGRF-bestand.{}Gebruik deze mogelijkheid als de afbeeldingen van dit NewGRF-bestand er paars uit zien in het spel STR_NEWGRF_SETTINGS_APPLY_CHANGES :{BLACK}Wijzigingen doorvoeren @@ -2950,7 +2950,7 @@ STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Ga naar STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Vorige sprite STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Doorgaan met de vorige normale sprite, alle pseudo-/herkleur-/lettertype-sprites overslaan; bij het einde terug naar het begin STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Voorbeeld van de huidige sprite. De uitlijning wordt genegeerd bij het weergeven van deze sprite. -STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Afbeelding verplaatsen, dit verandert X en Y offsets. Ctr+klik om de afbeelding 8 eenheden per keer te verplaatsen. +STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Sprite verplaatsen, dit verandert X en Y offsets. Ctr+klik om de sprite 8 eenheden per keer te verplaatsen. STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Herstel relatief STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Herstel de huidige relative offsets STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X offset: {NUM}, Y offset: {NUM} (Absoluut) @@ -2976,15 +2976,15 @@ STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} heef STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :het GRF-bestand die het probeert te vertalen STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Er zijn te veel NewGRFs geladen STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Laden van {1:STRING} als statische NewGRF met {STRING} kan desynchronisatiefouten (desyncs) veroorzaken -STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Onverwachte afbeelding (afbeelding {3:NUM}) +STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Onverwachte sprite (sprite {3:NUM}) STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Onbekende Action 0-eigenschap {4:HEX} (sprite {3:NUM}) -STR_NEWGRF_ERROR_INVALID_ID :Poging om ongeldige id te gebruiken (afbeelding {3:NUM}) +STR_NEWGRF_ERROR_INVALID_ID :Poging om ongeldige id te gebruiken (sprite {3:NUM}) STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} bevat een ongeldige sprite. Alle ongeldige sprites worden weergegeven als een rood vraagteken (?). STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Bevat meerdere Action 8-invoer (sprite {3:NUM}) -STR_NEWGRF_ERROR_READ_BOUNDS :Voorbij het einde van pseudo-afbeelding gelezen (afbeelding {3:NUM}) +STR_NEWGRF_ERROR_READ_BOUNDS :Voorbij het einde van pseudo-sprite gelezen (sprite {3:NUM}) STR_NEWGRF_ERROR_GRM_FAILED :Gevraagde GRF-middelen niet beschikbaar (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} is uitgeschakeld door {STRING} -STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ongeldige/onbekende indeling voor afbeeldingslay-out (afbeelding {3:NUM}) +STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ongeldige/onbekende indeling voor spritelay-out (sprite {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Te veel elementen in eigenschappenwaardelijst (affbeelding {3:NUM}, eigenschap {4:HEX}) STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ongeldige terugroep voor industriële productie (sprite {3:NUM}, "{1:STRING}") @@ -3095,7 +3095,7 @@ STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN :Kleine reclamec STR_LOCAL_AUTHORITY_ACTION_MEDIUM_ADVERTISING_CAMPAIGN :Middelgrote reclamecampagne STR_LOCAL_AUTHORITY_ACTION_LARGE_ADVERTISING_CAMPAIGN :Grote reclamecampagne STR_LOCAL_AUTHORITY_ACTION_ROAD_RECONSTRUCTION :Betaal wegreparatie -STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :Bouw standbeeld van directeur +STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :Standbeeld van directeur bouwen STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Financier nieuwe gebouwen STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Koop exclusieve transportrechten STR_LOCAL_AUTHORITY_ACTION_BRIBE :Gemeentebestuur omkopen @@ -3104,7 +3104,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Begin e STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Begin een middelgrote advertentiecampagne, om meer passagiers en vracht naar jouw transportdiensten te trekken.{}Kosten: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Begin een grote advertentiecampagne, om meer passagiers en vracht naar jouw transportdiensten te trekken.{}Kosten: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Financier een herstelling van het wegennetwerk. Veroorzaakt tot 6 maanden lang een aanzienlijke verstoring van het wegverkeer.{}Kosten: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Bouw een standbeeld ter ere van jouw bedrijf.{}Kosten: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Een standbeeld bouwen ter ere van jouw bedrijf.{}Kosten: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}De bouw van nieuwe commerciële gebouwen in de stad financieren.{}Kosten: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}1 jaar exclusieve transportrechten kopen in deze plaats. Het gemeentebestuur staat alleen passagiers en vracht toe bij jouw stations.{}Kosten: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Koop het plaatselijk gezag om om je reputatie te verhogen met het risico op een strenge sanctie wanneer je gepakt wordt.{}Kosten: {CURRENCY_LONG} @@ -3189,7 +3189,7 @@ STR_STATION_VIEW_EN_ROUTE_FROM :{YELLOW}({CARGO STR_STATION_VIEW_RESERVED :{YELLOW}({CARGO_SHORT} gereserveerd voor laden) STR_STATION_VIEW_ACCEPTS_BUTTON :{BLACK}Accepteert -STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}Laat lijst van gevraagde goederen zien +STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}Lijst met geaccepteerde vracht weergeven STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}Accepteert: {WHITE}{CARGO_LIST} STR_STATION_VIEW_EXCLUSIVE_RIGHTS_SELF :{BLACK}Dit station heeft exclusieve transportrechten in deze gemeente. @@ -3674,12 +3674,12 @@ STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Hiermee STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Forceer trein verder te rijden zonder te wachten op een groen sein -STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Bouw trein om voor een ander goederentype -STR_VEHICLE_VIEW_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Bouw wegvoertuig om voor een ander goederentype -STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Bouw schip om voor een ander goederentype -STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Bouw vliegtuig om voor een ander goederentype +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 +STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Schip ombouwen voor een ander vrachttype +STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Vliegtuig ombouwen voor een ander vrachttype -STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Keer trein om +STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Trein omkeren STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Dwing het wegvoertuig te keren. STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Orders van trein weergeven. Ctrl+klik geeft dienstregeling van trein. @@ -3703,7 +3703,7 @@ STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Vertrek STR_VEHICLE_STATUS_CRASHED :{RED}Verongelukt! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Motorpech STR_VEHICLE_STATUS_STOPPED :{RED}Gestopt -STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}Aan het stoppen, {VELOCITY} +STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}Remmen, {VELOCITY} STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Geen stroom STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Wacht op vrije route STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Te ver voor volgende bestemming @@ -3779,39 +3779,39 @@ STR_VEHICLE_DETAILS_CARGO_FROM :{LTBLUE}{CARGO_ STR_VEHICLE_DETAILS_CARGO_FROM_MULT :{LTBLUE}{CARGO_LONG} van {STATION} (x{NUM}) STR_VEHICLE_DETAIL_TAB_CARGO :{BLACK}Lading -STR_VEHICLE_DETAILS_TRAIN_CARGO_TOOLTIP :{BLACK}Laat details zien van vervoerde goederen +STR_VEHICLE_DETAILS_TRAIN_CARGO_TOOLTIP :{BLACK}Details van vervoerde vracht weergeven STR_VEHICLE_DETAIL_TAB_INFORMATION :{BLACK}Informatie STR_VEHICLE_DETAILS_TRAIN_INFORMATION_TOOLTIP :{BLACK}Laat details zien van treinvoertuigen STR_VEHICLE_DETAIL_TAB_CAPACITIES :{BLACK}Capaciteiten STR_VEHICLE_DETAILS_TRAIN_CAPACITIES_TOOLTIP :{BLACK}Capaciteiten van voertuigen weergeven STR_VEHICLE_DETAIL_TAB_TOTAL_CARGO :{BLACK}Totale lading -STR_VEHICLE_DETAILS_TRAIN_TOTAL_CARGO_TOOLTIP :{BLACK}Laat totale capaciteit van trein zien, gescheiden door goederentype +STR_VEHICLE_DETAILS_TRAIN_TOTAL_CARGO_TOOLTIP :{BLACK}Totale capaciteit van trein weergeven, opgesplitst naar vrachttype STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}Capaciteit: {LTBLUE} # Vehicle refit STR_REFIT_CAPTION :{WHITE}{VEHICLE} (Ombouwen) -STR_REFIT_TITLE :{GOLD}Selecteer goederentype om te vervoeren: +STR_REFIT_TITLE :{GOLD}Vrachttype selecteren: STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nieuwe capaciteit: {GOLD}{CARGO_LONG}{}{BLACK}Ombouwkosten: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Nieuwe capaciteit: {GOLD}{CARGO_LONG}{}{BLACK}Inkomsten na ombouwen: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Nieuwe capaciteit: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Ombouwkosten: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Nieuwe capaciteit: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Inkomsten na ombouwen: {GREEN}{CURRENCY_LONG} STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Kies het voertuig om om te bouwen. Slepen met de muis geeft de mogelijkheid om meerdere voertuigen te selecteren. Klikken op een lege ruimte selecteert het hele voertuig. Ctrl+klik selecteert een voertuig en de volgende keten -STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Kies goederentype dat deze trein moet vervoeren -STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Selecteer goederentype dat dit wegvoertuig moet vervoeren -STR_REFIT_SHIP_LIST_TOOLTIP :{BLACK}Selecteer goederentype dat dit schip moet vervoeren -STR_REFIT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Selecteer goederentype dat dit vliegtuig moet vervoeren +STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Vrachttype selecteren dat deze trein moet vervoeren +STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Vrachttype selecteren dat dit wegvoertuig moet vervoeren +STR_REFIT_SHIP_LIST_TOOLTIP :{BLACK}Vrachttype selecteren dat dit schip moet vervoeren +STR_REFIT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Vrachttype selecteren dat dit vliegtuig moet vervoeren STR_REFIT_TRAIN_REFIT_BUTTON :{BLACK}Trein ombouwen STR_REFIT_ROAD_VEHICLE_REFIT_BUTTON :{BLACK}Wegvoertuig ombouwen STR_REFIT_SHIP_REFIT_BUTTON :{BLACK}Schip ombouwen STR_REFIT_AIRCRAFT_REFIT_BUTTON :{BLACK}Vliegtuig ombouwen -STR_REFIT_TRAIN_REFIT_TOOLTIP :{BLACK}Bouw trein om om het geselecteerde goederentype te kunnen vervoeren -STR_REFIT_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Bouw wegvoertuig om zodat het geselecteerde goederentype vervoerd kan worden -STR_REFIT_SHIP_REFIT_TOOLTIP :{BLACK}Bouw schip om zodat het geselecteerde goederentype vervoerd kan worden -STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Bouw vliegtuig om zodat het geselecteerde goederentype vervoerd kan worden +STR_REFIT_TRAIN_REFIT_TOOLTIP :{BLACK}Trein ombouwen om het geselecteerde vrachttype te kunnen vervoeren +STR_REFIT_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Wegvoertuig ombouwen om het geselecteerde vrachttype te kunnen vervoeren +STR_REFIT_SHIP_REFIT_TOOLTIP :{BLACK}Schip ombouwen om het geselecteerde vrachttype te kunnen vervoeren +STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Vliegtuig ombouwen om het geselecteerde vrachttype te kunnen vervoeren # Order view STR_ORDERS_CAPTION :{WHITE}{VEHICLE} (Orders) @@ -4265,7 +4265,7 @@ STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Kan geen STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Kan {STRING} hier niet bouwen... STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Kan dit type industrie hier niet bouwen... STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... te dicht bij een andere industrie -STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... bouw eerst een plaats +STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... moet eerst dorp bouwen STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... slechts één per plaats toegestaan STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... kan alleen in plaatsen met meer dan 1.200 inwoners worden gebouwd STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... kan alleen in regenwouden gebouwd worden @@ -4283,7 +4283,7 @@ STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Paramete # Station construction related errors STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Kan hier geen treinstation bouwen... -STR_ERROR_CAN_T_BUILD_BUS_STATION :{WHITE}Kan hier geen bushalte bouwen... +STR_ERROR_CAN_T_BUILD_BUS_STATION :{WHITE}Kan hier geen busstation bouwen... STR_ERROR_CAN_T_BUILD_TRUCK_STATION :{WHITE}Kan hier geen vrachtwagenlaadstation bouwen... STR_ERROR_CAN_T_BUILD_PASSENGER_TRAM_STATION :{WHITE}Kan geen passagierstramstation bouwen... STR_ERROR_CAN_T_BUILD_CARGO_TRAM_STATION :{WHITE}Kan geen vrachttramhalte bouwen... @@ -4316,7 +4316,7 @@ STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Moet hal STR_ERROR_THERE_IS_NO_STATION :{WHITE}...er is hier geen station STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}Verwijder eerst treinstation -STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}Verwijder eerst bushalte +STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}Verwijder eerst busstation STR_ERROR_MUST_DEMOLISH_TRUCK_STATION_FIRST :{WHITE}Verwijder eerst vrachtwagenlaadhal STR_ERROR_MUST_DEMOLISH_PASSENGER_TRAM_STATION_FIRST :{WHITE}Verwijder eerst passagierstramstation STR_ERROR_MUST_DEMOLISH_CARGO_TRAM_STATION_FIRST :{WHITE}Verwijder eerst vrachttramhalte @@ -4339,7 +4339,7 @@ STR_ERROR_BUOY_IS_IN_USE :{WHITE}... boei # Depot related errors STR_ERROR_CAN_T_BUILD_TRAIN_DEPOT :{WHITE}Kan hier geen remise bouwen... STR_ERROR_CAN_T_BUILD_ROAD_DEPOT :{WHITE}Kan hier geen garage bouwen... -STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Kan hier geen tramdepot bouwen... +STR_ERROR_CAN_T_BUILD_TRAM_DEPOT :{WHITE}Kan hier geen tramremise bouwen... STR_ERROR_CAN_T_BUILD_SHIP_DEPOT :{WHITE}Kan dok hier niet bouwen... STR_ERROR_CAN_T_RENAME_DEPOT :{WHITE}Kan depot niet hernoemen... @@ -4677,33 +4677,33 @@ STR_SV_STNAME_FALLBACK :{STRING} Statio ##id 0x8000 # Vehicle names -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KIRBY_PAUL_TANK_STEAM :Kirby Paul Tank (Stoom) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_250_DIESEL :MJS 250 (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_CHOO_CHOO :Ploddyphut Choo-Choo -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_CHOO_CHOO :Powernaut Choo-Choo -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MIGHTYMOVER_CHOO_CHOO :MightyMover Choo-Choo -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_DIESEL :Ploddyphut Diesel -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_DIESEL :Powernaut Diesel -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_WILLS_2_8_0_STEAM :Wills 2-8-0 (Stoom) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CHANEY_JUBILEE_STEAM :Chaney 'Jubilee' (Stoom) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_GINZU_A4_STEAM :Ginzu 'A4' (Stoom) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_8P_STEAM :SH '8P' (Stoom) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MANLEY_MOREL_DMU_DIESEL :Manley-Morel DMU (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_DASH_DIESEL :'Dash' (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_HENDRY_25_DIESEL :SH/Hendry '25' (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_UU_37_DIESEL :UU '37' (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_FLOSS_47_DIESEL :Floss '47' (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CS_4000_DIESEL :CS 4000 (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CS_2400_DIESEL :CS 2400 (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CENTENNIAL_DIESEL :Centennial (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KELLING_3100_DIESEL :Kelling 3100 (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_TURNER_TURBO_DIESEL :Turner Turbo (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_1000_DIESEL :MJS 1000 (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_125_DIESEL :SH '125' (Diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_30_ELECTRIC :SH '30' (Elektrisch) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_40_ELECTRIC :SH '40' (Elektrisch) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_T_I_M_ELECTRIC :'T.I.M.' (Elektrisch) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_ASIASTAR_ELECTRIC :'AsiaStar' (Elektrisch) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KIRBY_PAUL_TANK_STEAM :Kirby Paul Tank (stoom) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_250_DIESEL :MJS 250 (diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_CHOO_CHOO :Ploddyphut Tsjoeketsjoeke +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_CHOO_CHOO :Powernaut Tsjoeketsjoeke +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MIGHTYMOVER_CHOO_CHOO :MightyMover Tsjoeketsjoeke +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_DIESEL :Ploddyphut-diesel +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_DIESEL :Powernaut-diesel +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_WILLS_2_8_0_STEAM :Wills 2-8-0 (stoom) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CHANEY_JUBILEE_STEAM :Chaney 'Jubilee' (stoom) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_GINZU_A4_STEAM :Ginzu 'A4' (stoom) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_8P_STEAM :SH '8P' (stoom) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MANLEY_MOREL_DMU_DIESEL :Manley-Morel (dieseltreinstel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_DASH_DIESEL :'Dash' (diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_HENDRY_25_DIESEL :SH/Hendry '25' (diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_UU_37_DIESEL :UU '37' (diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_FLOSS_47_DIESEL :Floss '47' (diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CS_4000_DIESEL :CS 4000 (diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CS_2400_DIESEL :CS 2400 (diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CENTENNIAL_DIESEL :Centennial (diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KELLING_3100_DIESEL :Kelling 3100 (diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_TURNER_TURBO_DIESEL :Turner Turbo (diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_1000_DIESEL :MJS 1000 (diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_125_DIESEL :SH '125' (diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_30_ELECTRIC :SH '30' (elektrisch) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_40_ELECTRIC :SH '40' (elektrisch) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_T_I_M_ELECTRIC :'T.I.M.' (elektrisch) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_ASIASTAR_ELECTRIC :'AsiaStar' (elektrisch) STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PASSENGER_CAR :Passagiersrijtuig STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_MAIL_VAN :Postwagon STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COAL_CAR :Kolenwagon @@ -4722,7 +4722,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_WATER_TANKER :Watertanker STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FRUIT_TRUCK :Fruitwagon STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_RUBBER_TRUCK :Rubberwagon STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_SUGAR_TRUCK :Suikerwagon -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COTTON_CANDY_HOPPER :Suikerspinnenwagon +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COTTON_CANDY_HOPPER :Suikerspinwagon STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOFFEE_HOPPER :Toffeewagon STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BUBBLE_VAN :Bubbelwagon STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COLA_TANKER :Colatanker @@ -4731,8 +4731,8 @@ STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOY_VAN :Speelgoedwagon STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BATTERY_TRUCK :Batterijwagon STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FIZZY_DRINK_TRUCK :Frisdrankwagon STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PLASTIC_TRUCK :Plasticwagon -STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :'X2001' (Elektrisch) -STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_MILLENNIUM_Z1_ELECTRIC :'Millennium Z1' (Elektrisch) +STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :'X2001' (elektrisch) +STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_MILLENNIUM_Z1_ELECTRIC :'Millennium Z1' (elektrisch) STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_WIZZOWOW_Z99 :Wizzowow Z99 STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PASSENGER_CAR :Passagiersrijtuig STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_MAIL_VAN :Postwagon @@ -4752,7 +4752,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_WATER_TANKER :Watertanker STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FRUIT_TRUCK :Fruitwagon STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_RUBBER_TRUCK :Rubberwagon STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_SUGAR_TRUCK :Suikerwagon -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COTTON_CANDY_HOPPER :Suikerspinnenwagon +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COTTON_CANDY_HOPPER :Suikerspinwagon STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOFFEE_HOPPER :Toffeewagon STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BUBBLE_VAN :Bubbelwagon STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COLA_TANKER :Colatanker @@ -4761,10 +4761,10 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOY_VAN :Speelgoedwagon STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BATTERY_TRUCK :Batterijwagon STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FIZZY_DRINK_TRUCK :Frisdrankwagon STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PLASTIC_TRUCK :Plasticwagon -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 'Leviathan' (Elektrisch) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV2_CYCLOPS_ELECTRIC :Lev2 'Cyclops' (Elektrisch) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV3_PEGASUS_ELECTRIC :Lev3 'Pegasus' (Elektrisch) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV4_CHIMAERA_ELECTRIC :Lev4 'Chimaera' (Elektrisch) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 'Leviathan' (elektrisch) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV2_CYCLOPS_ELECTRIC :Lev2 'Cyclops' (elektrisch) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV3_PEGASUS_ELECTRIC :Lev3 'Pegasus' (elektrisch) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV4_CHIMAERA_ELECTRIC :Lev4 'Chimaera' (elektrisch) STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_WIZZOWOW_ROCKETEER :Wizzowow Rocketeer STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PASSENGER_CAR :Passagiersrijtuig STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_MAIL_VAN :Postwagon @@ -4784,7 +4784,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_WATER_TANKER :Watertanker STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FRUIT_TRUCK :Fruitwagon STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_RUBBER_TRUCK :Rubberwagon STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_SUGAR_TRUCK :Suikerwagon -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COTTON_CANDY_HOPPER :Suikerspinnenwagon +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COTTON_CANDY_HOPPER :Suikerspinwagon STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_TOFFEE_HOPPER :Toffeewagon STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BUBBLE_VAN :Bubbelwagon STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COLA_TANKER :Colatanker @@ -4793,105 +4793,105 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_TOY_VAN :Speelgoedwagon STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BATTERY_TRUCK :Batterijwagon STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FIZZY_DRINK_TRUCK :Frisdrankwagon STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PLASTIC_TRUCK :Plasticwagon -STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_REGAL_BUS :MPS Regal Bus -STR_VEHICLE_NAME_ROAD_VEHICLE_HEREFORD_LEOPARD_BUS :Hereford Leopard Bus -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_BUS :Foster Bus +STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_REGAL_BUS :MPS Regal-bus +STR_VEHICLE_NAME_ROAD_VEHICLE_HEREFORD_LEOPARD_BUS :Hereford Leopard-bus +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_BUS :Foster-bus STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_MKII_SUPERBUS :Foster MkII Superbus -STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKI_BUS :Ploddyphut MkI Bus -STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKII_BUS :Ploddyphut MkII Bus -STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKIII_BUS :Ploddyphut MkIII Bus -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_COAL_TRUCK :Balogh Kolentruck -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_COAL_TRUCK :Uhl Kolentruck -STR_VEHICLE_NAME_ROAD_VEHICLE_DW_COAL_TRUCK :DW Kolentruck -STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_MAIL_TRUCK :MPS Posttruck -STR_VEHICLE_NAME_ROAD_VEHICLE_REYNARD_MAIL_TRUCK :Reynard Posttruck -STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_MAIL_TRUCK :Perry Posttruck -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_MAIL_TRUCK :MightyMover Posttruck -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_MAIL_TRUCK :Powernaught Posttruck -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_MAIL_TRUCK :Wizzowow Posttruck -STR_VEHICLE_NAME_ROAD_VEHICLE_WITCOMBE_OIL_TANKER :Witcombe Olietanker -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_OIL_TANKER :Foster Olietanker -STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_OIL_TANKER :Perry Olietanker -STR_VEHICLE_NAME_ROAD_VEHICLE_TALBOTT_LIVESTOCK_VAN :Talbott Veewagen -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_LIVESTOCK_VAN :Uhl Veewagen -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_LIVESTOCK_VAN :Foster Veewagen -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_GOODS_TRUCK :Balogh Goederentruck -STR_VEHICLE_NAME_ROAD_VEHICLE_CRAIGHEAD_GOODS_TRUCK :Craighead Goederentruck -STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_GOODS_TRUCK :Goss Goederentruck -STR_VEHICLE_NAME_ROAD_VEHICLE_HEREFORD_GRAIN_TRUCK :Hereford Graantruck -STR_VEHICLE_NAME_ROAD_VEHICLE_THOMAS_GRAIN_TRUCK :Thomas Graantruck -STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_GRAIN_TRUCK :Goss Graantruck -STR_VEHICLE_NAME_ROAD_VEHICLE_WITCOMBE_WOOD_TRUCK :Witcombe Houttruck -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_WOOD_TRUCK :Foster Houttruck -STR_VEHICLE_NAME_ROAD_VEHICLE_MORELAND_WOOD_TRUCK :Moreland Houttruck -STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_IRON_ORE_TRUCK :MPS IJzerertstruck -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_IRON_ORE_TRUCK :Uhl IJzerertstruck -STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_IRON_ORE_TRUCK :Chippy IJzerertstruck -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_STEEL_TRUCK :Balogh Staaltruck -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_STEEL_TRUCK :Uhl Staaltruck -STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_STEEL_TRUCK :Kelling Staaltruck -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_ARMORED_TRUCK :Balogh Gepantserde Truck -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_ARMORED_TRUCK :Uhl Gepantserde Truck -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_ARMORED_TRUCK :Foster Gepantserde Truck -STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_FOOD_VAN :Foster Voedselwagen -STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_FOOD_VAN :Perry Voedselwagen -STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_FOOD_VAN :Chippy Voedselwagen -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_PAPER_TRUCK :Uhl Papiertruck -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_PAPER_TRUCK :Balogh Papiertruck -STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_PAPER_TRUCK :MPS Papiertruck -STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_COPPER_ORE_TRUCK :MPS Koperertstruck -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_COPPER_ORE_TRUCK :Uhl Koperertstruck -STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_COPPER_ORE_TRUCK :Goss Koperertstruck -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_WATER_TANKER :Uhl Watertanker -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_WATER_TANKER :Balogh Watertanker -STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_WATER_TANKER :MPS Watertanker -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_FRUIT_TRUCK :Balogh Fruittruck -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_FRUIT_TRUCK :Uhl Fruittruck -STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_FRUIT_TRUCK :Kelling Fruittruck -STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_RUBBER_TRUCK :Balogh Rubbertruck -STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_RUBBER_TRUCK :Uhl Rubbertruck -STR_VEHICLE_NAME_ROAD_VEHICLE_RMT_RUBBER_TRUCK :RMT Rubbertruck -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_SUGAR_TRUCK :MightyMover Suikertruck -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_SUGAR_TRUCK :Powernaught Suikertruck -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_SUGAR_TRUCK :Wizzowow Suikertruck -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COLA_TRUCK :MightyMover Colatruck -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COLA_TRUCK :Powernaught Colatruck -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COLA_TRUCK :Wizzowow Colatruck +STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKI_BUS :Ploddyphut MkI-bus +STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKII_BUS :Ploddyphut MkII-bus +STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKIII_BUS :Ploddyphut MkIII-bus +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_COAL_TRUCK :Balogh-kolentruck +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_COAL_TRUCK :Uhl-kolentruck +STR_VEHICLE_NAME_ROAD_VEHICLE_DW_COAL_TRUCK :DW-kolentruck +STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_MAIL_TRUCK :MPS-posttruck +STR_VEHICLE_NAME_ROAD_VEHICLE_REYNARD_MAIL_TRUCK :Reynard-posttruck +STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_MAIL_TRUCK :Perry-posttruck +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_MAIL_TRUCK :MightyMover-posttruck +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_MAIL_TRUCK :Powernaught-posttruck +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_MAIL_TRUCK :Wizzowow-posttruck +STR_VEHICLE_NAME_ROAD_VEHICLE_WITCOMBE_OIL_TANKER :Witcombe-olietanker +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_OIL_TANKER :Foster-olietanker +STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_OIL_TANKER :Perry-olietanker +STR_VEHICLE_NAME_ROAD_VEHICLE_TALBOTT_LIVESTOCK_VAN :Talbott-veewagen +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_LIVESTOCK_VAN :Uhl-veewagen +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_LIVESTOCK_VAN :Foster-veewagen +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_GOODS_TRUCK :Balogh-goederentruck +STR_VEHICLE_NAME_ROAD_VEHICLE_CRAIGHEAD_GOODS_TRUCK :Craighead-goederentruck +STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_GOODS_TRUCK :Goss-goederentruck +STR_VEHICLE_NAME_ROAD_VEHICLE_HEREFORD_GRAIN_TRUCK :Hereford-graantruck +STR_VEHICLE_NAME_ROAD_VEHICLE_THOMAS_GRAIN_TRUCK :Thomas-graantruck +STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_GRAIN_TRUCK :Goss-graantruck +STR_VEHICLE_NAME_ROAD_VEHICLE_WITCOMBE_WOOD_TRUCK :Witcombe-houttruck +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_WOOD_TRUCK :Foster-houttruck +STR_VEHICLE_NAME_ROAD_VEHICLE_MORELAND_WOOD_TRUCK :Moreland-houttruck +STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_IRON_ORE_TRUCK :MPS-ijzerertstruck +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_IRON_ORE_TRUCK :Uhl-ijzerertstruck +STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_IRON_ORE_TRUCK :Chippy-ijzerertstruck +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_STEEL_TRUCK :Balogh-staaltruck +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_STEEL_TRUCK :Uhl-staaltruck +STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_STEEL_TRUCK :Kelling-staaltruck +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_ARMORED_TRUCK :Balogh-pantsertruck +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_ARMORED_TRUCK :Uhl-pantserrruck +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_ARMORED_TRUCK :Foster-pantsertruck +STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_FOOD_VAN :Foster-voedseltruck +STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_FOOD_VAN :Perry-voedseltruck +STR_VEHICLE_NAME_ROAD_VEHICLE_CHIPPY_FOOD_VAN :Chippy-voedseltruck +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_PAPER_TRUCK :Uhl-papiertruck +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_PAPER_TRUCK :Balogh-papiertruck +STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_PAPER_TRUCK :MPS-papiertruck +STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_COPPER_ORE_TRUCK :MPS-koperertstruck +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_COPPER_ORE_TRUCK :Uhl-koperertstruck +STR_VEHICLE_NAME_ROAD_VEHICLE_GOSS_COPPER_ORE_TRUCK :Goss-koperertstruck +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_WATER_TANKER :Uhl-watertanker +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_WATER_TANKER :Balogh-watertanker +STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_WATER_TANKER :MPS-watertanker +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_FRUIT_TRUCK :Balogh-fruittruck +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_FRUIT_TRUCK :Uhl-fruittruck +STR_VEHICLE_NAME_ROAD_VEHICLE_KELLING_FRUIT_TRUCK :Kelling-fruittruck +STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_RUBBER_TRUCK :Balogh-rubbertruck +STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_RUBBER_TRUCK :Uhl-rubbertruck +STR_VEHICLE_NAME_ROAD_VEHICLE_RMT_RUBBER_TRUCK :RMT-rubbertruck +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_SUGAR_TRUCK :MightyMover-suikertruck +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_SUGAR_TRUCK :Powernaught-suikertruck +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_SUGAR_TRUCK :Wizzowow-suikertruck +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COLA_TRUCK :MightyMover-colatanker +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COLA_TRUCK :Powernaught-colatanker +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COLA_TRUCK :Wizzowow-colatanker STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COTTON_CANDY :MightyMover-suikerspintruck STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COTTON_CANDY :Powernaught-suikerspintruck -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COTTON_CANDY_TRUCK :Wizzowow Suikerspinnentruck -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOFFEE_TRUCK :MightyMover Toffeetruck -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOFFEE_TRUCK :Powernaught Toffeetruck -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOFFEE_TRUCK :Wizzowow Toffeetruck -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOY_VAN :MightyMover Speelgoedwagen -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOY_VAN :Powernaught Speelgoedwagen -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOY_VAN :Wizzowow Speelgoedwagen -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_CANDY_TRUCK :MightyMover Snoeptruck -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_CANDY_TRUCK :Powernaught Snoeptruck -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_CANDY_TRUCK :Wizzowow Snoeptruck -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_BATTERY_TRUCK :MightyMover Batterijtruck -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_BATTERY_TRUCK :Powernaught Batterijtruck -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BATTERY_TRUCK :Wizzowow Batterijtruck -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_FIZZY_DRINK :MightyMover Frisdranktruck -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_FIZZY_DRINK :Powernaught Frisdranktruck -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_FIZZY_DRINK_TRUCK :Wizzowow Frisdranktruck -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_PLASTIC_TRUCK :MightyMover Plastictruck -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_PLASTIC_TRUCK :Powernaught Plastictruck -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_PLASTIC_TRUCK :Wizzowow Plastictruck +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COTTON_CANDY_TRUCK :Wizzowow-suikerspintruck +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOFFEE_TRUCK :MightyMover-toffeetruck +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOFFEE_TRUCK :Powernaught-toffeetruck +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOFFEE_TRUCK :Wizzowow-toffeetruck +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOY_VAN :MightyMover-speelgoedtruck +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOY_VAN :Powernaught-speelgoedtruck +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOY_VAN :Wizzowow-speelgoedtruck +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_CANDY_TRUCK :MightyMover-snoeptruck +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_CANDY_TRUCK :Powernaught-snoeptruck +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_CANDY_TRUCK :Wizzowow-snoeptruck +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_BATTERY_TRUCK :MightyMover-batterijtruck +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_BATTERY_TRUCK :Powernaught-batterijtruck +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BATTERY_TRUCK :Wizzowow-batterijtruck +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_FIZZY_DRINK :MightyMover-frisdranktruck +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_FIZZY_DRINK :Powernaught-frisdranktruck +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_FIZZY_DRINK_TRUCK :Wizzowow-frisdranktruck +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_PLASTIC_TRUCK :MightyMover-plastictruck +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_PLASTIC_TRUCK :Powernaught-plastictruck +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_PLASTIC_TRUCK :Wizzowow-plastictruck STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_BUBBLE_TRUCK :MightyMover-bubbeltruck STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_BUBBLE_TRUCK :Powernaught-bubbeltruck STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BUBBLE_TRUCK :Wizzowow-bubbeltruck -STR_VEHICLE_NAME_SHIP_MPS_OIL_TANKER :MPS Olietanker -STR_VEHICLE_NAME_SHIP_CS_INC_OIL_TANKER :CS-Inc. Olietanker -STR_VEHICLE_NAME_SHIP_MPS_PASSENGER_FERRY :MPS Veerboot -STR_VEHICLE_NAME_SHIP_FFP_PASSENGER_FERRY :FFP Veerboot +STR_VEHICLE_NAME_SHIP_MPS_OIL_TANKER :MPS-olietanker +STR_VEHICLE_NAME_SHIP_CS_INC_OIL_TANKER :CS-Inc.-olietanker +STR_VEHICLE_NAME_SHIP_MPS_PASSENGER_FERRY :MPS-veerboot +STR_VEHICLE_NAME_SHIP_FFP_PASSENGER_FERRY :FFP-veerboot STR_VEHICLE_NAME_SHIP_BAKEWELL_300_HOVERCRAFT :Bakewell 300 Hovercraft -STR_VEHICLE_NAME_SHIP_CHUGGER_CHUG_PASSENGER :Chugger-Chug Veerboot -STR_VEHICLE_NAME_SHIP_SHIVERSHAKE_PASSENGER_FERRY :Shivershake Veerboot -STR_VEHICLE_NAME_SHIP_YATE_CARGO_SHIP :Yate Goederenschip -STR_VEHICLE_NAME_SHIP_BAKEWELL_CARGO_SHIP :Bakewell Goederenschip -STR_VEHICLE_NAME_SHIP_MIGHTYMOVER_CARGO_SHIP :MightyMover Goederenschip -STR_VEHICLE_NAME_SHIP_POWERNAUT_CARGO_SHIP :Powernaut Goederenschip +STR_VEHICLE_NAME_SHIP_CHUGGER_CHUG_PASSENGER :Chugger-Chug-veerboot +STR_VEHICLE_NAME_SHIP_SHIVERSHAKE_PASSENGER_FERRY :Shivershake-veerboot +STR_VEHICLE_NAME_SHIP_YATE_CARGO_SHIP :Yate-goederenschip +STR_VEHICLE_NAME_SHIP_BAKEWELL_CARGO_SHIP :Bakewell-goederenschip +STR_VEHICLE_NAME_SHIP_MIGHTYMOVER_CARGO_SHIP :MightyMover-goederenschip +STR_VEHICLE_NAME_SHIP_POWERNAUT_CARGO_SHIP :Powernaut-goederenschip STR_VEHICLE_NAME_AIRCRAFT_SAMPSON_U52 :Sampson U52 STR_VEHICLE_NAME_AIRCRAFT_COLEMAN_COUNT :Coleman Count STR_VEHICLE_NAME_AIRCRAFT_FFP_DART :FFP Dart @@ -4930,9 +4930,9 @@ STR_VEHICLE_NAME_AIRCRAFT_PLODDYPHUT_500 :Ploddyphut 500 STR_VEHICLE_NAME_AIRCRAFT_FLASHBANG_X1 :Flashbang X1 STR_VEHICLE_NAME_AIRCRAFT_JUGGERPLANE_M1 :Juggerplane M1 STR_VEHICLE_NAME_AIRCRAFT_FLASHBANG_WIZZER :Flashbang Wizzer -STR_VEHICLE_NAME_AIRCRAFT_TRICARIO_HELICOPTER :Tricario Helikopter -STR_VEHICLE_NAME_AIRCRAFT_GURU_X2_HELICOPTER :Guru X2 Helikopter -STR_VEHICLE_NAME_AIRCRAFT_POWERNAUT_HELICOPTER :Powernaut Helikopter +STR_VEHICLE_NAME_AIRCRAFT_TRICARIO_HELICOPTER :Tricario-helikopter +STR_VEHICLE_NAME_AIRCRAFT_GURU_X2_HELICOPTER :Guru X2-helikopter +STR_VEHICLE_NAME_AIRCRAFT_POWERNAUT_HELICOPTER :Powernaut-helikopter ##id 0x8800 # Formatting of some strings diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 92ded3211a..d45f80a242 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -466,6 +466,7 @@ STR_TOOLBAR_SOUND_MUSIC :Sound/music ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Last message/news report STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Message history +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Delete all messages ############ range ends here ############ range for about menu starts @@ -2081,6 +2082,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Disconne STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server is protected. Enter password STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Company is protected. Enter password +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Client list # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Client list @@ -2381,9 +2383,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Combo Si STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Path Signal (electric){}A path signal allows more than one train to enter a signal block at the same time, if the train can reserve a path to a safe stopping point. Standard path signals can be passed from the back side STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}One-way Path Signal (electric){}A path signal allows more than one train to enter a signal block at the same time, if the train can reserve a path to a safe stopping point. One-way path signals can't be passed from the back side STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Signal Convert{}When selected, clicking an existing signal will convert it to the selected signal type and variant. Ctrl+Click will toggle the existing variant. Shift+Click shows estimated conversion cost -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Dragging signal density +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Dragging signal distance STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Decrease dragging signal distance -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Increase dragging signal density +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Increase dragging signal distance # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Select Rail Bridge @@ -2724,6 +2726,7 @@ STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMA STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} frames/s STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} frames/s STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! STR_FRAMERATE_GAMELOOP :{BLACK}Game loop total: STR_FRAMERATE_GL_ECONOMY :{BLACK} Cargo handling: @@ -2983,6 +2986,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Requested GRF r STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} was disabled by {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Invalid/unknown sprite layout format (sprite {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Too many elements in property value list (sprite {3:NUM}, property {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Invalid industry production callback (sprite {3:NUM}, "{1:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Caution! @@ -3108,6 +3112,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Bribe t # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Goals STR_GOALS_SPECTATOR_CAPTION :{WHITE}Global Goals +STR_GOALS_SPECTATOR :Global Goals STR_GOALS_GLOBAL_TITLE :{BLACK}Global goals: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- None - @@ -3156,6 +3161,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Click on # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Story Book STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Global Story Book +STR_STORY_BOOK_SPECTATOR :Global Story Book STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Page {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Jump to a specific page by selecting it in this drop down list. @@ -3360,6 +3366,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Center t STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Production level: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}The industry has announced imminent closure! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Requires: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produces: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Requires: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index ca49986525..abbb2929dc 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -190,6 +190,8 @@ STR_COLOUR_ORANGE :Turuncu STR_COLOUR_BROWN :Kahverengi STR_COLOUR_GREY :Gri STR_COLOUR_WHITE :Beyaz +STR_COLOUR_RANDOM :Rastgele +STR_COLOUR_DEFAULT :Varsayılan # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mil/s @@ -465,6 +467,7 @@ STR_TOOLBAR_SOUND_MUSIC :Ses/müzik ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Son mesaj/haber raporu STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Mesaj geçmişi +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Tüm mesajları sil ############ range ends here ############ range for about menu starts @@ -476,6 +479,7 @@ STR_ABOUT_MENU_SCREENSHOT :Ekran görünt STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Tamamen yakınlaştırılmış ekran görüntüsü STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Varsayılan yakınlıkta ekran görüntüsü STR_ABOUT_MENU_GIANT_SCREENSHOT :Tüm harita ekran görüntüsü +STR_ABOUT_MENU_SHOW_FRAMERATE :Kare oranını göster STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD' Hakkında STR_ABOUT_MENU_SPRITE_ALIGNER :Nesne hizalayıcı STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Çerçeveleri aç/kapa @@ -651,6 +655,7 @@ STR_MUSIC_RULER_MARKER :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Kullanılabilir müzik yok STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Şarkı STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Başlığı @@ -671,11 +676,14 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Rastgele STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Şarkı seçim penceresini göster # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Müzik Programı - '{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Parça Listesi STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Program - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Temizle +STR_PLAYLIST_CHANGE_SET :{BLACK}Seti değiştir STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Kullanılan programı temizle (Özel1 veya Özel2 için) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Müzik seçimini başka kurulu sete değiştir STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Kullanılan programa eklenecek parçayı seçin (Özel1 veya Özel2 için) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Kullanılan programdan kaldırılacak parçaya tıklayın (Özel1 veya Özel2 için) @@ -811,6 +819,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Yönetici) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} {TOWN} adlı yeni kasabanın inşaasını finanse etti! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}{TOWN} adında yeni bir kasaba inşa edildi! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Yeni bir {STRING}, {TOWN} şehri yakınlarında kuruldu! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Yeni bir {STRING}, {TOWN} şehri yakınlarında kuruldu! @@ -878,10 +887,10 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC # Extra view window STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Görünüm {COMMA} -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Görünümü kopyala +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Görüş alanını değiştir STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Ana görünümü bu pencereye kopyala -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Görünümü yapıştır -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Bu görünümü ana görünüme yapıştır +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Ana görünümü değiştir +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Bu görüş alanını ana görünüme kopyala # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Seçenekler @@ -923,6 +932,8 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Güney Afrika R STR_GAME_OPTIONS_CURRENCY_CUSTOM :Özel... STR_GAME_OPTIONS_CURRENCY_GEL :Gürcistan Larisi (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :İran Riyali (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Yeni Rus Rublesi (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Meksika Pezosu (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Karayolu taşıtları @@ -1223,7 +1234,7 @@ STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Etkinleştirili STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Kapalı STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Asıl görüş alanı, sadece tam ekran STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Ana görüş alanı -STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Tüm görünümler +STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Tüm görüş alanları STR_CONFIG_SETTING_BRIBE :Belediye rüşveti izinli: {STRING} STR_CONFIG_SETTING_BRIBE_HELPTEXT :Şirketlerin yerel yönetime rüşvet vermeyi denemelerine izin ver. Şayet rüşvet girişimi bir gözlemci tarafından fark edilirse şirket o bölgede altı ay eylemde bulunamaz STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Şehrin ulaşım haklarını satın alma izinli: {STRING} @@ -1236,7 +1247,7 @@ STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Diğer şirketl STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Çok oyunculu oyunlarda şirketler arası para transferine izin ver STR_CONFIG_SETTING_FREIGHT_TRAINS :Ağır yük trenleri için ağırlık çarpanı: {STRING} STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Trenlerde yük taşımanın etkisini ayarlayın. Yüksek bir değer trenlerde yük taşımayı özellikle tepelerde daha zor hale getirir -STR_CONFIG_SETTING_PLANE_SPEED :Uçak hız faktörü: {STRING} +STR_CONFIG_SETTING_PLANE_SPEED :Uçak hız çarpanı: {STRING} STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Havayolundan elde edilen geliri azaltmak için uçakların diğer araç türlerine göre hızını ayarlayın STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Uçak kazası sayısı: {STRING} @@ -1252,6 +1263,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Araçlar STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Altyapı bakımları: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Etkinleştirildiğinde; altyapı, bakım giderine neden olur. Maliyet ağ büyüklüğüne göre daha hızlı yükselir, dolayısıyla büyük şirketleri küçüklere göre daha çok etkiler +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Şirket başlangıç rengi: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Şirketin başlangıç rengini seç STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Havalimanlarının süresi asla dolmasın: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Bu ayarı etkinleştirmek her havaalanı türünün, tanıtımından sonra sürekli olarak kullanılabilir kalmasını sağlar. @@ -1336,7 +1349,13 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Küçük harita STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Yeşil STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Koyu yeşil STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Mor -STR_CONFIG_SETTING_SMOOTH_SCROLLING :Düzgün viewport kaydırması: {STRING} +STR_CONFIG_SETTING_SCROLLMODE :Bakış noktası kaydırma davranışı: {STRING} +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Haritada gezinirkenki davranış +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Sağ Fare Tuşu ile görüş alanını hareket ettir, fare konumu kilitli +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Sağ Fare Tuşu ile haritayı hareket ettir, fare konumu kilitli +STR_CONFIG_SETTING_SCROLLMODE_RMB :Sağ Fare Tuşu ile haritayı hareket ettir +STR_CONFIG_SETTING_SCROLLMODE_LMB :Sol Fare Tuşu ile haritayı hareket ettir +STR_CONFIG_SETTING_SMOOTH_SCROLLING :Düzgün bakış noktası kaydırması: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Küçük haritaya tıklandığında veya harita üzerindeki belli bir nesneye gidilmesi için komut verildiğinde ana görüntünün nasıl kaydırılacağını kontrol eder. Etkinleştirildiğinde harita kayarak ilerler, kapatıldığında ise doğrudan hedeflenen noktaya atlama yapar. STR_CONFIG_SETTING_MEASURE_TOOLTIP :İnşa araçları kullanılırken ölçüm ipucu göster: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :İnşaat işlemleri sırasında fareyi sürükleyince kare-uzaklıkları ve yükseklik farklarını göster. @@ -1578,9 +1597,9 @@ STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Yeni pencereler STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA} STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :etkisiz STR_CONFIG_SETTING_ZOOM_MIN :Azami yaklaşma seviyesi: {STRING} -STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Haritadan kısımlar gösteren pencereler (viewport) için azami yaklaştırma (zoom-in) seviyesi. Daha yüksek yaklaştırma ayarları oyunun bellek gereksinimini arttırır. +STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Görüş alanları için azami yakınlaşma seviyesi. Daha yüksek uzaklaştırma ayarları oyunda gecikmelere sebep olabilir STR_CONFIG_SETTING_ZOOM_MAX :Azami uzaklaşma seviyesi: {STRING} -STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :Haritadan kısımlar gösteren pencereler (viewport) için azami uzaklaştırma (zoom-out) seviyesi. Daha yüksek uzaklaştırma ayarları oyunda gecikmelere sebep olabilir +STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :Görüş alanları için azami uzaklaşma seviyesi. Daha yüksek uzaklaştırma ayarları oyunda gecikmelere sebep olabilir STR_CONFIG_SETTING_ZOOM_LVL_MIN :4x STR_CONFIG_SETTING_ZOOM_LVL_IN_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :Normal @@ -1666,7 +1685,7 @@ STR_CONFIG_SETTING_GRAPHICS :{ORANGE}Grafikl STR_CONFIG_SETTING_SOUND :{ORANGE}Ses STR_CONFIG_SETTING_INTERFACE :{ORANGE}Arayüz STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE}Genel -STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :{ORANGE}Harita kısım pencereleri +STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :{ORANGE}Görüş alanları STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}İnşaat STR_CONFIG_SETTING_ADVISORS :{ORANGE}Haberler / Danışmanlar STR_CONFIG_SETTING_COMPANY :{ORANGE}Şirket @@ -1804,6 +1823,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Yılı d STR_CHEAT_SETUP_PROD :{LTBLUE}Üretim değerlerini değiştir: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Renk Düzeni STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Genel renk şemalarını göster STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Tren renk düzenlerini göster @@ -2063,6 +2083,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Bağlant STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Sunucu korumalı. Parola girin STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Şirket korumalı. Parola girin +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}İstemci listesi # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Oyuncu listesi @@ -2278,6 +2299,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Kargo Ak STR_LINKGRAPH_LEGEND_ALL :{BLACK}Hepsi STR_LINKGRAPH_LEGEND_NONE :{BLACK}Hiçbiri STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Gösterilecek şirketleri seçin +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}kullanılmayan @@ -2362,9 +2384,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Karış STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Yol Sinyali (elektrikli){}Yol sinyali, gelen tren güvenli bir durma noktasına yol ayırabiliyor ise bir sinyal bloğuna aynı anda birden fazla trenin girmesine izin verir. Standart yol sinyalleri arka taraftan geçişe izin verir STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Tek Yön Yol Sinyali (elektrikli){}Yol sinyali, gelen tren güvenli bir durma noktasına yol ayırabiliyor ise bir sinyal bloğuna aynı anda birden fazla trenin girmesine izin verir. Tek yön yol sinyalleri arka taraftan geçişe izin vermez STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Sinyal Dönüştür{}Seçildiğinde, tıklama var olan sinyali seçili sinyal tür ve alt türüne çevirir, CTRL ile tıklama mevcut alt türü değiştirir. Shift ile tıklama maliyet tahminini gösterir -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Sinyal sürükleme yoğunluğu -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Sinyal sürükleme yoğunluğunu azalt -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Sinyal sürükleme yoğunluğunu arttır +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Sinyal sürükleme mesafesi +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Sinyal sürükleme mesafesini azalt +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Sinyal sürükleme mesafesini arttır # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Tren Köprüsü Seç @@ -2687,9 +2709,52 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 OpenTTD ekibi # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Kare oranı +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simülasyon oranı: {STRING} +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Saniyede simüle edilen oyun zaman birim sayısı. +STR_FRAMERATE_RATE_BLITTER :{BLACK}Grafik kare oranı: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Saniyede işlenecek video kare sayısı. +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Şu anki oyun hız çarpanı: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Beklenen normal simülasyon hızı yerine, şu anda oyunun ne kadar hızlı çalıştığı. +STR_FRAMERATE_CURRENT :{WHITE}Geçerli +STR_FRAMERATE_AVERAGE :{WHITE}Ortalama +STR_FRAMERATE_DATA_POINTS :{BLACK}Veriler {COMMA} ölçümlerine dayanır +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} kare/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} kare/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} kare/s +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{BLACK}Oyun döngüsü toplam: +STR_FRAMERATE_GL_ECONOMY :{BLACK} Kargo işleme: +STR_FRAMERATE_GL_TRAINS :{BLACK} Tren zaman birimleri: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Yol taşıt zaman birimleri: +STR_FRAMERATE_GL_SHIPS :{BLACK} Gemi zaman birimleri: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Hava taşıtı zaman birimleri: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Dünya zaman birimleri: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Bağlantı grafiği gecikmesi: +STR_FRAMERATE_DRAWING :{BLACK}Grafik işleme: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Dünya görüş alanları: +STR_FRAMERATE_VIDEO :{BLACK}Video çıkışı: +STR_FRAMERATE_SOUND :{BLACK}Ses karıştırma: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Oyun döngüsü +STR_FRAMETIME_CAPTION_GL_ECONOMY :Kargo işleme +STR_FRAMETIME_CAPTION_GL_TRAINS :Tren zaman birimleri +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Yol aracı zaman birimleri +STR_FRAMETIME_CAPTION_GL_SHIPS :Gemi zaman birimleri +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Hava taşıtı zaman birimleri +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Dünya zaman birimleri +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Bağlantı grafiği gecikmesi +STR_FRAMETIME_CAPTION_DRAWING :Grafik işleme +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Dünya görüş alanı derleme +STR_FRAMETIME_CAPTION_VIDEO :Video çıkışı +STR_FRAMETIME_CAPTION_SOUND :Ses karıştırma ############ End of leave-in-this-order @@ -2715,6 +2780,9 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Oyun Ayr STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Mevcut bilgi yok STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Süzgeç dizgesi: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Dosya Üzerine Yaz +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Mevcut dosyanın üzerine yazmak istediğinizden emin misiniz? STR_SAVELOAD_OSKTITLE :{BLACK}Kayıtlı oyun için bir isim girin @@ -2832,7 +2900,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Sürüm: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}En düşük uyumlu sürüm: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palet: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Varsayılan (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Varsayılan (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Eski (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Eski (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Seçenekler: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Hiçbiri STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Hiç bilgi yok STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Eşleşen dosya bulunamadı @@ -2913,6 +2986,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Pseudo-nesne bi STR_NEWGRF_ERROR_GRM_FAILED :İstenen GRF kaynakları mevcut değil (nesne {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} {STRING} tarafından deaktive edildi STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Geçersiz/bilinmeyen nesne yerleşim biçimi (nesne {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Özellik değeri listesinde çok fazla öğe (sprite {3:NUM}, özellik {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Geçersiz endüstri üretim geri çağrımı (sprite {3:NUM}, "{1:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Uyarı! @@ -2977,6 +3052,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Tabela i STR_TOWN_DIRECTORY_CAPTION :{WHITE}Şehirler STR_TOWN_DIRECTORY_NONE :{ORANGE}- Hiçbiri - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Şehir){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Şehir isimleri - şehre bakmak için ismine tıkla. Ctrl ile tıklama şehrin konumunu gösteren yeni bir pencere açar STR_TOWN_POPULATION :{BLACK}Dünya nüfusu: {COMMA} @@ -2984,6 +3060,7 @@ STR_TOWN_POPULATION :{BLACK}Dünya n STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Şehir) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Nüfus: {ORANGE}{COMMA}{BLACK} Ev: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} son ay: {ORANGE}{COMMA}{BLACK} azami: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Kasaba büyümesi için gerekli kargo: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} gerekli STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} kışın gerekir @@ -3036,7 +3113,8 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Yakalan # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Hedefler STR_GOALS_SPECTATOR_CAPTION :{WHITE}Evrensel Amaçlar -STR_GOALS_GLOBAL_TITLE :{BLACK}Genel hedefler: +STR_GOALS_SPECTATOR :Evrensel Amaçlar +STR_GOALS_GLOBAL_TITLE :{BLACK}Evrensel amaçlar: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Hiçbiri - STR_GOALS_SPECTATOR_NONE :{ORANGE}- Kullanılamaz - @@ -3084,6 +3162,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Görünt # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Hikaye Kitabı STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Evrensel Hikaye Kitabı +STR_STORY_BOOK_SPECTATOR :Evrensel Hikaye Kitabı STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Sayfa {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Bu listeden seçerek istenilen sayfaya git. @@ -3190,7 +3269,7 @@ STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Hava Taş STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Gemi Bakımları STR_FINANCES_SECTION_PROPERTY_MAINTENANCE :{GOLD}İnşaat bakımları STR_FINANCES_SECTION_TRAIN_INCOME :{GOLD}Tren Geliri -STR_FINANCES_SECTION_ROAD_VEHICLE_INCOME :{GOLD}Kara Taşıtı Geliri +STR_FINANCES_SECTION_ROAD_VEHICLE_INCOME :{GOLD}Yol Taşıtı Geliri STR_FINANCES_SECTION_AIRCRAFT_INCOME :{GOLD}Hava Taşıtı Geliri STR_FINANCES_SECTION_SHIP_INCOME :{GOLD}Gemi Geliri STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Kredi Faizi @@ -3288,6 +3367,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Görünt STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Üretim seviyesi: %{YELLOW}{COMMA} STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Fabrika çok yakında kapanacağını duyurdu! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Gereken: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Üretilen: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Gereken: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} @@ -3345,6 +3427,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Gruplar STR_GROUP_CREATE_TOOLTIP :{BLACK}Grup oluşturmak için tıklayın STR_GROUP_DELETE_TOOLTIP :{BLACK}Seçili grubu sil STR_GROUP_RENAME_TOOLTIP :{BLACK}Seçili grubun ismini değiştir +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Seçien grubun logosunu değiştir STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Bu grubu otomatik yenilemeden ayrı tutmak için tıklayın STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Grubu Sil @@ -3388,6 +3471,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapasite STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Güç Veren Vagonlar: {GOLD}+{POWER}{BLACK} Ağırlık: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Dönüştürülebildiği kargolar: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Tüm kargo türleri +STR_PURCHASE_INFO_NONE :Hiçbiri STR_PURCHASE_INFO_ALL_BUT :Şunlar hariç tümü: {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Aza. Çekim Gücü: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Menzil: {GOLD}{COMMA} kare @@ -3787,6 +3871,7 @@ STR_ORDER_CONDITIONAL_AGE :Araç yaşı (y STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Bakım gerektirir STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Her zaman STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Kalan ömrü (yıl) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Azami güvenilirlik STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Araç verisinin verilen değerle nasıl karşılaştırılacağı STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :eşittir @@ -4219,6 +4304,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... bu y STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... yol yanlış yönde STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... yol üstü duraklar köşe üzerine inşa edilemez STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... yol üstü duraklar kavşak üzerine inşa edilemez +STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... yol tek yön ya da engellenmiş # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}İstasyonun parçasi kaldırılamaz... @@ -4470,6 +4556,8 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Özgün Transpo STR_BASESOUNDS_WIN_DESCRIPTION :Özgün Transport Tycoon Deluxe Windows sürümü sesleri. STR_BASESOUNDS_NONE_DESCRIPTION :Ses içermeyen boş bir ses kümesi. STR_BASEMUSIC_WIN_DESCRIPTION :Özgün Transport Tycoon Deluxe Windows sürümü müzikleri. +STR_BASEMUSIC_DOS_DESCRIPTION :Özgün Transport Tycoon Deluxe DOS sürüm müziği. +STR_BASEMUSIC_TTO_DESCRIPTION :Özgün Transport Tycoon Deluxe (Original/World Editor) DOS sürümü müzikleri. STR_BASEMUSIC_NONE_DESCRIPTION :Müzik içermeyen boş bir müzik paketi. ##id 0x2000 From 19fa960d838d97269514ab4fc3a5f5214acdfb23 Mon Sep 17 00:00:00 2001 From: Samu Date: Thu, 24 Jan 2019 16:40:43 +0000 Subject: [PATCH 364/622] Fix #7091: Close dropdown menu windows after rebuilding AI/GS settings --- src/ai/ai_gui.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index dbdd772452..54a72e53b1 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -585,6 +585,7 @@ struct AISettingsWindow : public Window { virtual void OnInvalidateData(int data = 0, bool gui_scope = true) { this->RebuildVisibleSettings(); + HideDropDownMenu(this); } private: From 66d23e3e865167200a1121d30be9f538bb878507 Mon Sep 17 00:00:00 2001 From: Samu Date: Thu, 24 Jan 2019 16:45:55 +0000 Subject: [PATCH 365/622] Fix #7090: Close Query String window after rebuilding AI/GS settings --- src/ai/ai_gui.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 54a72e53b1..73806da15e 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -586,6 +586,7 @@ struct AISettingsWindow : public Window { { this->RebuildVisibleSettings(); HideDropDownMenu(this); + DeleteChildWindows(WC_QUERY_STRING); } private: From de9f54ccc185d35727858a36fcebc82178c519c6 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 14 Feb 2019 06:25:17 +0000 Subject: [PATCH 366/622] Codechange: Change scrolling_scrollbar to mouse_capture_widget, and dispatch OnClick() event if widget is not a scrollbar. This allows any widget to support mouse capture. --- src/widget.cpp | 8 ++--- src/window.cpp | 81 ++++++++++++++++++++++++++++++------------------ src/window_gui.h | 2 +- 3 files changed, 55 insertions(+), 36 deletions(-) diff --git a/src/widget.cpp b/src/widget.cpp index 73190f5e67..5ec539a496 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -99,7 +99,7 @@ static void ScrollbarClickPositioning(Window *w, NWidgetScrollbar *sb, int x, in _scroller_click_timeout = 3; sb->UpdatePosition(rtl ? 1 : -1); } - w->scrolling_scrollbar = sb->index; + w->mouse_capture_widget = sb->index; } else if (pos >= ma - button_size) { /* Pressing the lower button? */ SetBit(sb->disp_flags, NDB_SCROLLBAR_DOWN); @@ -108,7 +108,7 @@ static void ScrollbarClickPositioning(Window *w, NWidgetScrollbar *sb, int x, in _scroller_click_timeout = 3; sb->UpdatePosition(rtl ? -1 : 1); } - w->scrolling_scrollbar = sb->index; + w->mouse_capture_widget = sb->index; } else { Point pt = HandleScrollbarHittest(sb, mi, ma, sb->type == NWID_HSCROLLBAR); @@ -119,7 +119,7 @@ static void ScrollbarClickPositioning(Window *w, NWidgetScrollbar *sb, int x, in } else { _scrollbar_start_pos = pt.x - mi - button_size; _scrollbar_size = ma - mi - button_size * 2; - w->scrolling_scrollbar = sb->index; + w->mouse_capture_widget = sb->index; _cursorpos_drag_start = _cursor.pos; } } @@ -2038,7 +2038,7 @@ void NWidgetScrollbar::Draw(const Window *w) bool up_lowered = HasBit(this->disp_flags, NDB_SCROLLBAR_UP); bool down_lowered = HasBit(this->disp_flags, NDB_SCROLLBAR_DOWN); - bool middle_lowered = !(this->disp_flags & ND_SCROLLBAR_BTN) && w->scrolling_scrollbar == this->index; + bool middle_lowered = !(this->disp_flags & ND_SCROLLBAR_BTN) && w->mouse_capture_widget == this->index; if (this->type == NWID_HSCROLLBAR) { DrawHorizontalScrollbar(r, this->colour, up_lowered, middle_lowered, down_lowered, this); diff --git a/src/window.cpp b/src/window.cpp index e8c4fe74d6..1729687f2d 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1846,7 +1846,7 @@ void Window::InitNested(WindowNumber window_number) * Empty constructor, initialization has been moved to #InitNested() called from the constructor of the derived class. * @param desc The description of the window. */ -Window::Window(WindowDesc *desc) : window_desc(desc), scrolling_scrollbar(-1) +Window::Window(WindowDesc *desc) : window_desc(desc), mouse_capture_widget(-1) { } @@ -1934,7 +1934,7 @@ static void DecreaseWindowCounters() NWidgetScrollbar *sb = static_cast(nwid); if (sb->disp_flags & (ND_SCROLLBAR_UP | ND_SCROLLBAR_DOWN)) { sb->disp_flags &= ~(ND_SCROLLBAR_UP | ND_SCROLLBAR_DOWN); - w->scrolling_scrollbar = -1; + w->mouse_capture_widget = -1; sb->SetDirty(w); } } @@ -2386,47 +2386,66 @@ static void StartWindowSizing(Window *w, bool to_left) } /** - * handle scrollbar scrolling with the mouse. + * Handle scrollbar scrolling with the mouse. + * @param w window with active scrollbar. + */ +static void HandleScrollbarScrolling(Window *w) +{ + int i; + NWidgetScrollbar *sb = w->GetWidget(w->mouse_capture_widget); + bool rtl = false; + + if (sb->type == NWID_HSCROLLBAR) { + i = _cursor.pos.x - _cursorpos_drag_start.x; + rtl = _current_text_dir == TD_RTL; + } else { + i = _cursor.pos.y - _cursorpos_drag_start.y; + } + + if (sb->disp_flags & ND_SCROLLBAR_BTN) { + if (_scroller_click_timeout == 1) { + _scroller_click_timeout = 3; + sb->UpdatePosition(rtl == HasBit(sb->disp_flags, NDB_SCROLLBAR_UP) ? 1 : -1); + w->SetDirty(); + } + return; + } + + /* Find the item we want to move to and make sure it's inside bounds. */ + int pos = min(max(0, i + _scrollbar_start_pos) * sb->GetCount() / _scrollbar_size, max(0, sb->GetCount() - sb->GetCapacity())); + if (rtl) pos = max(0, sb->GetCount() - sb->GetCapacity() - pos); + if (pos != sb->GetPosition()) { + sb->SetPosition(pos); + w->SetDirty(); + } +} + +/** + * Handle active widget (mouse draggin on widget) with the mouse. * @return State of handling the event. */ -static EventState HandleScrollbarScrolling() +static EventState HandleActiveWidget() { Window *w; FOR_ALL_WINDOWS_FROM_BACK(w) { - if (w->scrolling_scrollbar >= 0) { + if (w->mouse_capture_widget >= 0) { /* Abort if no button is clicked any more. */ if (!_left_button_down) { - w->scrolling_scrollbar = -1; + w->mouse_capture_widget = -1; w->SetDirty(); return ES_HANDLED; } - int i; - NWidgetScrollbar *sb = w->GetWidget(w->scrolling_scrollbar); - bool rtl = false; + /* If cursor hasn't moved, there is nothing to do. */ + if (_cursor.delta.x == 0 && _cursor.delta.y == 0) return ES_HANDLED; - if (sb->type == NWID_HSCROLLBAR) { - i = _cursor.pos.x - _cursorpos_drag_start.x; - rtl = _current_text_dir == TD_RTL; + /* Handle scrollbar internally, or dispatch click event */ + WidgetType type = w->GetWidget(w->mouse_capture_widget)->type; + if (type == NWID_VSCROLLBAR || type == NWID_HSCROLLBAR) { + HandleScrollbarScrolling(w); } else { - i = _cursor.pos.y - _cursorpos_drag_start.y; - } - - if (sb->disp_flags & ND_SCROLLBAR_BTN) { - if (_scroller_click_timeout == 1) { - _scroller_click_timeout = 3; - sb->UpdatePosition(rtl == HasBit(sb->disp_flags, NDB_SCROLLBAR_UP) ? 1 : -1); - w->SetDirty(); - } - return ES_HANDLED; - } - - /* Find the item we want to move to and make sure it's inside bounds. */ - int pos = min(max(0, i + _scrollbar_start_pos) * sb->GetCount() / _scrollbar_size, max(0, sb->GetCount() - sb->GetCapacity())); - if (rtl) pos = max(0, sb->GetCount() - sb->GetCapacity() - pos); - if (pos != sb->GetPosition()) { - sb->SetPosition(pos); - w->SetDirty(); + Point pt = { _cursor.pos.x - w->left, _cursor.pos.y - w->top }; + w->OnClick(pt, w->mouse_capture_widget, 0); } return ES_HANDLED; } @@ -2845,7 +2864,7 @@ static void MouseLoop(MouseClick click, int mousewheel) if (VpHandlePlaceSizingDrag() == ES_HANDLED) return; if (HandleMouseDragDrop() == ES_HANDLED) return; if (HandleWindowDragging() == ES_HANDLED) return; - if (HandleScrollbarScrolling() == ES_HANDLED) return; + if (HandleActiveWidget() == ES_HANDLED) return; if (HandleViewportScroll() == ES_HANDLED) return; HandleMouseOver(); diff --git a/src/window_gui.h b/src/window_gui.h index f5f9734c37..0abf79cca2 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -327,7 +327,7 @@ public: NWidgetStacked *shade_select; ///< Selection widget (#NWID_SELECTION) to use for shading the window. If \c NULL, window cannot shade. Dimension unshaded_size; ///< Last known unshaded size (only valid while shaded). - int scrolling_scrollbar; ///< Widgetindex of just being dragged scrollbar. -1 if none is active. + int mouse_capture_widget; ///< Widgetindex of current mouse capture widget (e.g. dragged scrollbar). -1 if no widget has mouse capture. Window *parent; ///< Parent window. Window *z_front; ///< The window in front of us in z-order. From 6dfe36b5cde442b40208e1cebb4b2c7b2f08a4b1 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 14 Feb 2019 06:26:29 +0000 Subject: [PATCH 367/622] Change: Make volume slider widget capture mouse when clicked. This makes the slider continue to respond even when mouse cursor is no longer over the widget. --- src/music_gui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/music_gui.cpp b/src/music_gui.cpp index 87a073b0a7..885647427f 100644 --- a/src/music_gui.cpp +++ b/src/music_gui.cpp @@ -799,7 +799,7 @@ struct MusicWindow : public Window { byte *vol = (widget == WID_M_MUSIC_VOL) ? &_settings_client.music.music_vol : &_settings_client.music.effect_vol; - byte new_vol = x * 127 / this->GetWidget(widget)->current_x; + byte new_vol = Clamp(x * 127 / (int)this->GetWidget(widget)->current_x, 0, 127); if (_current_text_dir == TD_RTL) new_vol = 127 - new_vol; /* Clamp to make sure min and max are properly settable */ if (new_vol > 124) new_vol = 127; @@ -810,7 +810,7 @@ struct MusicWindow : public Window { this->SetDirty(); } - _left_button_clicked = false; + if (click_count > 0) this->mouse_capture_widget = widget; break; } From 6733b713009622b8a416227fe4cb0b754e8cb855 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 14 Feb 2019 06:27:16 +0000 Subject: [PATCH 368/622] Change: Make mini-map widget capture mouse when left-click dragging. This allows the mini-map to be dragged when the cursor has left the widget. --- src/smallmap_gui.cpp | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 10eeca5d36..e4a0919274 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -1401,15 +1401,7 @@ int SmallMapWindow::GetPositionOnLegend(Point pt) { switch (widget) { case WID_SM_MAP: { // Map window - /* - * XXX: scrolling with the left mouse button is done by subsequently - * clicking with the left mouse button; clicking once centers the - * large map at the selected point. So by unclicking the left mouse - * button here, it gets reclicked during the next inputloop, which - * would make it look like the mouse is being dragged, while it is - * actually being (virtually) clicked every inputloop. - */ - _left_button_clicked = false; + if (click_count > 0) this->mouse_capture_widget = widget; const NWidgetBase *wid = this->GetWidget(WID_SM_MAP); Window *w = FindWindowById(WC_MAIN_WINDOW, 0); From 8a6e03c4d27f04538b98d2ccb6acb4b86f09c9ed Mon Sep 17 00:00:00 2001 From: Nikolas Nyby Date: Fri, 8 Feb 2019 19:43:08 -0500 Subject: [PATCH 369/622] Fix #7189: Fluidsynth volume gain too high --- src/music/fluidsynth.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/music/fluidsynth.cpp b/src/music/fluidsynth.cpp index d1088f4bc4..6baeb899bc 100644 --- a/src/music/fluidsynth.cpp +++ b/src/music/fluidsynth.cpp @@ -149,7 +149,11 @@ bool MusicDriver_FluidSynth::IsSongPlaying() void MusicDriver_FluidSynth::SetVolume(byte vol) { /* Allowed range of synth.gain is 0.0 to 10.0 */ - if (fluid_settings_setnum(_midi.settings, "synth.gain", 1.0 * vol / 128.0) != 1) { + /* fluidsynth's default gain is 0.2, so use this as "full + * volume". Set gain using OpenTTD's volume, as a number between 0 + * and 0.2. */ + double gain = (1.0 * vol) / (128.0 * 5.0); + if (fluid_settings_setnum(_midi.settings, "synth.gain", gain) != 1) { DEBUG(driver, 0, "Could not set volume"); } } From 5ab1a73a8a8f3f54b84d7f7f20c0ef21f8bb345d Mon Sep 17 00:00:00 2001 From: peter1138 Date: Thu, 21 Feb 2019 00:03:10 +0000 Subject: [PATCH 370/622] Codechange: Remove never-used StationIDList. --- src/station_type.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/station_type.h b/src/station_type.h index 952a683d74..495e95a082 100644 --- a/src/station_type.h +++ b/src/station_type.h @@ -15,7 +15,6 @@ #include "core/smallvec_type.hpp" #include "core/smallstack_type.hpp" #include "tilearea_type.h" -#include typedef uint16 StationID; typedef uint16 RoadStopID; @@ -91,9 +90,6 @@ enum CatchmentArea { static const uint MAX_LENGTH_STATION_NAME_CHARS = 32; ///< The maximum length of a station name in characters including '\0' -/** List of station IDs */ -typedef std::list StationIDList; - /** List of stations */ typedef SmallVector StationList; From 673f6753e9428a8ded6343f60c0fd74681dd5e6a Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 21 Feb 2019 19:45:46 +0100 Subject: [PATCH 371/622] Update: Translations from eints dutch: 76 changes by JanWillem scottish gaelic: 44 changes by GunChleoc --- src/lang/dutch.txt | 152 ++++++++++++++++++++++---------------------- src/lang/gaelic.txt | 50 +++++++++++++-- 2 files changed, 120 insertions(+), 82 deletions(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index dafd50caf5..67a6626cd0 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -454,7 +454,7 @@ STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Vliegvelden bou ############ range ends here ############ range for landscaping menu starts -STR_LANDSCAPING_MENU_LANDSCAPING :Terreinvorming +STR_LANDSCAPING_MENU_LANDSCAPING :Terreinaanpassing STR_LANDSCAPING_MENU_PLANT_TREES :Bomen planten STR_LANDSCAPING_MENU_PLACE_SIGN :Bord plaatsen ############ range ends here @@ -668,7 +668,7 @@ STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Gebruik STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Selecteer het programma 'Alle nummers' STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Selecteer het programma 'Oude stijl' STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Selecteer het programma 'Nieuwe stijl' -STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Kies 'Ezy Street stylemuziek'-programma +STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Selecteer het programma 'Ezy Street' STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Selecteer het programma 'Aangepast1' STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Selecteer het programma 'Aangepast2' STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Willekeurige volgorde aan-uit @@ -737,7 +737,7 @@ STR_SMALLMAP_LEGENDA_FOREST :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_RAILROAD_STATION :{TINY_FONT}{BLACK}Treinstation STR_SMALLMAP_LEGENDA_TRUCK_LOADING_BAY :{TINY_FONT}{BLACK}Laadperron voor vrachtwagens STR_SMALLMAP_LEGENDA_BUS_STATION :{TINY_FONT}{BLACK}Bushalte -STR_SMALLMAP_LEGENDA_AIRPORT_HELIPORT :{TINY_FONT}{BLACK}Vliegveld/Heliplatform +STR_SMALLMAP_LEGENDA_AIRPORT_HELIPORT :{TINY_FONT}{BLACK}Vliegveld/heliplatform STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLACK}Haven STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Ruw land STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Grasland @@ -753,7 +753,7 @@ STR_SMALLMAP_LEGENDA_DESERT :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_SNOW :{TINY_FONT}{BLACK}Sneeuw STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Plaatsnamen op de kaart weergeven-verbergen. -STR_SMALLMAP_CENTER :{BLACK}Centreer de kaart op huidige positie +STR_SMALLMAP_CENTER :{BLACK}Kleine kaart centreren op huidige positie STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STRING} ({NUM}) STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY} @@ -792,10 +792,10 @@ STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIG_FONT}{BLAC STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Inwoners vieren feest. . .{}Eerste schip arriveert in {STATION}! STR_NEWS_FIRST_AIRCRAFT_ARRIVAL :{BIG_FONT}{BLACK}Inwoners vieren feest . . .{}Eerste vliegtuig arriveert op {STATION}! -STR_NEWS_TRAIN_CRASH :{BIG_FONT}{BLACK}Treinongeluk!{}{COMMA} komen om in explosie na de botsing +STR_NEWS_TRAIN_CRASH :{BIG_FONT}{BLACK}Treinongeluk!{}{COMMA} doden bij explosie na botsing STR_NEWS_ROAD_VEHICLE_CRASH_DRIVER :{BIG_FONT}{BLACK}Wegvoertuig verongelukt!{}Bestuurder komt om in explosie na botsing met trein STR_NEWS_ROAD_VEHICLE_CRASH :{BIG_FONT}{BLACK}Wegvoertuig verongelukt!{}{COMMA} komen om in explosie na botsing met trein -STR_NEWS_AIRCRAFT_CRASH :{BIG_FONT}{BLACK}Vliegtuig neergestort!{}{COMMA} komen om in explosie bij {STATION} +STR_NEWS_AIRCRAFT_CRASH :{BIG_FONT}{BLACK}Vliegtuig neergestort!{}{COMMA} doden in vuurzee bij {STATION} STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLACK}Vliegtuig neergestort!{}Vliegtuig had brandstoftekort, {COMMA} komen om in explosie STR_NEWS_DISASTER_ZEPPELIN :{BIG_FONT}{BLACK}Zeppelinongeluk bij {STATION}! @@ -828,8 +828,8 @@ STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS :{BIG_FONT}{BLAC STR_NEWS_INDUSTRY_CLOSURE_LACK_OF_TREES :{BIG_FONT}{BLACK}Gebrek aan nabije bomen noodzaakt {STRING} dreigende sluitng aan te kondigen! STR_NEWS_EURO_INTRODUCTION :{BIG_FONT}{BLACK}Europese Monetaire Unie!{}{}De Euro is geïntroduceerd als de enige munt voor alledaagse transacties in jouw land! -STR_NEWS_BEGIN_OF_RECESSION :{BIG_FONT}{BLACK}Wereldwijde Recessie!{}{}Financiële experts vrezen het ergste terwijl economie ineenstort! -STR_NEWS_END_OF_RECESSION :{BIG_FONT}{BLACK}Recessie Voorbij!{}{}Toenemende handel geeft industrie vertrouwen terwijl economie verstevigt! +STR_NEWS_BEGIN_OF_RECESSION :{BIG_FONT}{BLACK}Wereldwijde recessie!{}{}Financiële experts vrezen het ergste terwijl economie ineenstort! +STR_NEWS_END_OF_RECESSION :{BIG_FONT}{BLACK}Recessie voorbij!{}{}Toenemende handel geeft industrie vertrouwen vanwege sterkere economie! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL :{BIG_FONT}{BLACK}{INDUSTRY} verhoogt productie! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_COAL :{BIG_FONT}{BLACK}Nieuwe kolenader gevonden bij {INDUSTRY}!{}Men verwacht productieverdubbeling! @@ -968,7 +968,7 @@ STR_GAME_OPTIONS_TOWN_NAME_CATALAN :Catalaans ############ end of townname region STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Automatisch opslaan -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Kies tijdsduur tussen automatisch opgeslagen spellen +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Tijdsduur kiezen tussen automatisch opgeslagen spellen ############ start of autosave dropdown STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Uit @@ -1300,7 +1300,7 @@ STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Dikte van de li STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Breedte van de lijnen in de grafiek. Een dunne lijn is preciezer leesbaar, een dikke lijn is makkelijker te zien en kleuren zijn makkelijker om te onderscheiden STR_CONFIG_SETTING_LANDSCAPE :Landschap: {STRING} -STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Landschappen definiëren standaard gameplayscenario's met verschillende vracht- en stadsgroei-eisen. NewGRF en spelscripts kunnen daarentegen fijnere controle bieden +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Landschappen definiëren standaard spelscenario's met verschillende vracht- en stadsgroei-eisen. NewGRF en spelscripts kunnen daarentegen fijnere controle bieden. STR_CONFIG_SETTING_LAND_GENERATOR :Landgenerator: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :De originele generator hangt af van de standaard graphicsset en stelt vaste landschapsvormen samen. TerraGenesis is een op Perlin noise gebaseerde generator met fijnere besturingsinstellingen STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Origineel @@ -1342,7 +1342,7 @@ STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :Maximaal opperv STR_CONFIG_SETTING_SERVICEATHELIPAD :Helikopters automatisch repareren op helipads: {STRING} STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :Helikopteronderhoud na landing, ook als er geen hangar is op de luchthaven. STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :Knoppenbalk voor terreinvorming koppelen aan die voor spoor/weg/water/vliegveld: {STRING} -STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :Bij het openen van een werkbalk voor constructie van transport ook een werkbalk openen voor landschapsvorming. +STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :Bij het openen van een werkbalk voor constructie van transport ook een werkbalk openen voor terreinaanpassing. STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR :Landkleur gebruiker op de kleine kaart: {STRING} STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Kleur van het terrein op de kleine kaart. STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Groen @@ -1355,7 +1355,7 @@ STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Kaart verplaats STR_CONFIG_SETTING_SCROLLMODE_RMB :Kaart verplaatsen met rechtermuisknop STR_CONFIG_SETTING_SCROLLMODE_LMB :Kaart verplaatsen met linkermuisknop STR_CONFIG_SETTING_SMOOTH_SCROLLING :Kijkvenster vloeiend verplaatsen: {STRING} -STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Bepalen hoe de hoofdweergave naar een specifieke positie schuift bij het klikken op de minikaart of bij het uitvoeren van een commando om naar een specifiek object op de kaart te scrollen. Indien ingeschakeld, dan scrollt het kijkvenster soepel, als deze uitgeschakeld gaat u rechtstreeks naar de beoogde plek +STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Bepaalt hoe het hoofdvenster naar een specifieke positie schuift wanneer je op de minikaart klikt of je opdracht geeft om naar een specifiek object op de kaart te bladeren. Als dit is ingeschakeld, dan schuift het kijkvenster soepel; als dit is uitgeschakeld, ga je rechtstreeks naar de gewenste plek. STR_CONFIG_SETTING_MEASURE_TOOLTIP :Maten weergeven bij het gebruik van diverse bouwgereedschappen: {STRING} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Geef tegelafstanden en hoogteverschillen weer bij het slepen tijdens het bouwen STR_CONFIG_SETTING_LIVERIES :Alle voertuigkleuren weergeven: {STRING} @@ -1392,7 +1392,7 @@ STR_CONFIG_SETTING_AUTOSAVE :Automatisch ops STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Tijdsduur kiezen voor automatische spelopslag STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Datumindeling {STRING} gebruiken voor naamgeving van opgeslagen spellen -STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Formaat van de datum in savegamebestandsnamen +STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Datumindeling in bestandsnamen van opgeslagen spellen STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :lang (31 dec 2008) STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :kort (31-12-2008) STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31) @@ -1403,7 +1403,7 @@ STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :Toestaan wannee STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Selecteer welke acties kunnen worden uitgevoerd terwijl het spel is gepauzeerd STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Niets STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :Alle niet-constructiemogelijkheden -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :Alles behalve landschapsaanpassingen +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :Alles behalve terreinaanpassing STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :Alles STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Groepen gebruiken in voertuigenlijst: {STRING} STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Schakelt het gebruik van de geavanceerde voertuigenlijsten in voor het groeperen van voertuigen @@ -1465,7 +1465,7 @@ STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Schepen voor de STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Het inschakelen van deze instelling maakt het het bouwen van schepen onmogelijk voor een computerspeler STR_CONFIG_SETTING_AI_PROFILE :Standaard instellingenprofiel: {STRING} -STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Kies welk instellingsprofiel moet worden gebruikt bij willekeurige AI's of als startwaardes, wanneer een nieuwe AI of spelscript wordt toegevoegd +STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Hiermee kies je welk instellingsprofiel moet worden gebruikt bij willekeurige AI's of als startwaardes wanneer een nieuwe AI of spelscript wordt toegevoegd. STR_CONFIG_SETTING_AI_PROFILE_EASY :Makkelijk STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Gemiddeld STR_CONFIG_SETTING_AI_PROFILE_HARD :Moeilijk @@ -1620,9 +1620,9 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Beginfactor voo STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Gemiddelde grootte van steden in vergelijking tot normale steden bij het begin van het spel. STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Werk distributiegrafiek elke {STRING}{NBSP}dag{P 0:2 "" en} bij -STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Tijd tussen opeenvolgende herberekeningen van de link grafiek. Elke herberekening berekent de plannen voor een component van de grafiek. Dat betekent dat een waarde X voor deze instelling betekent niet dat de hele grafiek wordt elke X dagen worden bijgewerkt. Slechts een component wil. Hoe korter u instellen hoe meer CPU-tijd nodig is om het te berekenen zal zijn. Hoe langer je instellen hoe langer het zal duren totdat de lading distributie start op nieuwe routes. +STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Tijd tussen opeenvolgende herberekeningen van de koppelinggrafiek. Elke herberekening berekent de plannen voor een component van de grafiek. Dat betekent dat een waarde X voor deze instelling niet betekent dat de hele grafiek elke X dagen wordt bijgewerkt. Alleen een component wordt bijgewerkt. Hoe korter je dit instelt, hoe meer CPU-tijd nodig is om de berekening te maken. Hoe langer je dit instelt, hoe langer het duurt voordat de vrachtdistributie op nieuwe routes start. STR_CONFIG_SETTING_LINKGRAPH_TIME :{STRING}{NBSP}dag{P 0:2 "" en} gebruiken voor herberekening van de distributiegrafiek -STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Tijd gebruikt voor elke herberekening van een link grafiek component. Wanneer een herberekening wordt gestart, wordt een thread voortgebracht die mag lopen voor dit aantal dagen. Hoe korter u dit instelt des te waarschijnlijker het is dat de draad niet is voltooid als het zou moeten. Dan stopt het spel totdat het is ("lag"). Hoe langer je instellen hoe langer het duurt voor de distributie aan te passen wanneer routes te wijzigen. +STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Tijd die wordt gebruikt voor een herberekening van een component van een koppelinggrafiek . Wanneer een herberekening wordt gestart, wordt een draad voortgebracht die dit aantal dagen mag lopen. Hoe korter je dit instelt, hoe waarschijnlijker het is dat de draad niet is voltooid als dat zou moeten. Dan stopt het spel totdat het 'bij' is ('lag'). Hoe langer je dit instelt, hoe langer het duurt voordat de distributie wordt aangepast als een route wijzigt. STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :Handmatig STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :Asymmetrisch STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :Symmetrisch @@ -1731,12 +1731,12 @@ STR_CONFIG_ERROR_INVALID_GRF_SYSTEM :systeem-NewGRF STR_CONFIG_ERROR_INVALID_GRF_INCOMPATIBLE :niet compatibel met deze versie van OpenTTD STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN :onbekend STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_LEVEL :{WHITE}... compressieniveau '{STRING}' is niet geldig -STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_ALGORITHM :{WHITE}... savegameformaat '{STRING}' is niet beschikbaar. Valt terug naar '{STRING}' +STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_ALGORITHM :{WHITE}... indeling voor opgeslagen spel '{STRING}' is niet beschikbaar. Valt terug naar '{STRING}' STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... negeert standaard graphicsset '{STRING}': niet gevonden STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... negeert standaard geluidsset '{STRING}': niet gevonden STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... negeert standaard muziekset '{STRING}': niet gevonden STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Geen geheugen meer -STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Toewijzen van {BYTES} van spritecache mislukt. De spritecache werd teruggebracht tot {BYTES}. Dit verlaagt de prestaties van OpenTTD. Om het benodigde geheugen te verminderen, kunt u proberen om 32bpp-beeldelementen en/of inzoomniveaus uit te schakelen +STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Toewijzen van {BYTES} van spritecache mislukt. De spritecache werd teruggebracht tot {BYTES}. Dit verlaagt de prestaties van OpenTTD. Om het benodigde geheugen te verminderen, kun je proberen om 32bpp-beeldelementen en/of inzoomniveaus uit te schakelen # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1830,7 +1830,7 @@ STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Kleurens STR_LIVERY_SHIP_TOOLTIP :{BLACK}Kleurenschema's voor schepen weergeven STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Kleurenschema's voor vliegtuigen weergeven STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Kies de hoofdkleur voor het geselecteerde schema. Ctrl+klik zal deze kleur instellen voor elk schema -STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Kies de tweede kleur voor het geselecteerde schema. Ctrl+klik om deze kleur in alle schema's te gebruiken +STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Kies de secundaire kleur voor het geselecteerde schema. Met ctrl+klik stel je deze kleur in voor alle schema's. STR_LIVERY_PANEL_TOOLTIP :{BLACK}Kies een kleurenschema om te wijzigen of meerdere schema's met Ctrl+klik. Vink de keuzevakjes aan-uit om het schema aan-uit te zetten STR_LIVERY_DEFAULT :Standaard kleurenschema @@ -1938,7 +1938,7 @@ STR_NETWORK_SERVER_LIST_YEARS_CAPTION :{BLACK}Jaren STR_NETWORK_SERVER_LIST_YEARS_CAPTION_TOOLTIP :{BLACK}Aantal jaren{}dat het spel draait STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Taal, serverversie, etc. -STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Klik op een spel uit de lijst om deze te selecteren +STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Klik op een spel uit de lijst om dit te selecteren STR_NETWORK_SERVER_LIST_LAST_JOINED_SERVER :{BLACK}De server waarmee je het laatste verbonden was: STR_NETWORK_SERVER_LIST_CLICK_TO_SELECT_LAST :{BLACK}Klik om de server te selecteren waar je het laatste op hebt gespeeld @@ -1976,14 +1976,14 @@ STR_NETWORK_START_SERVER_CAPTION :{WHITE}Start ni STR_NETWORK_START_SERVER_NEW_GAME_NAME :{BLACK}Spelnaam: STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}De spelnaam wordt weergegeven aan andere spelers in het multiplayerspelselectiemenu -STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Kies wachtwoord -STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Bescherm je spel met een wachtwoord als je niet wilt dat deze algemeen toegankelijk is +STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Wachtwoord instellen +STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Beveilig je spel met een wachtwoord als je niet wilt dat dit algemeen toegankelijk is STR_NETWORK_START_SERVER_UNADVERTISED :Nee STR_NETWORK_START_SERVER_ADVERTISED :Ja STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} speler{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Maximumaantal spelers: -STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Kies het maximaal aantal toegestane spelers. Niet alle posities hoeven gebruikt te worden +STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Kies het maximaal aantal toegestane spelers. Niet alle posities hoeven gebruikt te worden. STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} bedr{P ijf ijven} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Maximumaantal bedrijven: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Beperk de server tot een bepaald aantal bedrijven @@ -2114,7 +2114,7 @@ STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Dit bedr STR_COMPANY_VIEW_JOIN :{BLACK}Meedoen STR_COMPANY_VIEW_JOIN_TOOLTIP :{BLACK}Doe mee en speel als dit bedrijf STR_COMPANY_VIEW_PASSWORD :{BLACK}Wachtwoord -STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Bescherm het bedrijf met een wachtwoord zodat niet-geautoriseerde personen niet mee kunnen doen +STR_COMPANY_VIEW_PASSWORD_TOOLTIP :{BLACK}Beveilig het bedrijf met een wachtwoord zodat niet-geautoriseerde personen niet mee kunnen doen STR_COMPANY_VIEW_SET_PASSWORD :{BLACK}Bedrijfswachtwoord instellen # Network chat @@ -2213,7 +2213,7 @@ STR_CONTENT_TYPE_CAPTION :{BLACK}Type STR_CONTENT_TYPE_CAPTION_TOOLTIP :{BLACK}Type van de content STR_CONTENT_NAME_CAPTION :{BLACK}Naam STR_CONTENT_NAME_CAPTION_TOOLTIP :{BLACK}Naam van de content -STR_CONTENT_MATRIX_TOOLTIP :{BLACK}Klik op een regel voor details{}Gebruik het selectievakje om het te selecteren om te downloaden +STR_CONTENT_MATRIX_TOOLTIP :{BLACK}Klik op een regel voor details{}Gebruik het selectievakje om het te selecteren voor download STR_CONTENT_SELECT_ALL_CAPTION :{BLACK}Selecteer alles STR_CONTENT_SELECT_ALL_CAPTION_TOOLTIP :{BLACK}Markeer alle content om te downloaden STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK}Selecteer updates @@ -2416,7 +2416,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Busstati STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Bouw passagierstramhalte. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Laadperron bouwen. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten. STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Vrachttramhalte bouwen. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten. -STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Activeer/Deactiveer eenrichtingsverkeer +STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Hiermee schakel je eenrichtingswegen in-uit STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Bouw wegbrug. Shift schakelt tussen bouwen/inschatting van de kosten STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Bouw brug voor tramsporen. Shift schakelt tussen bouwen/inschatting van de kosten STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Wegtunnel bouwen. Shift schakelt tussen bouwen/inschatting van de kosten. @@ -2475,7 +2475,7 @@ STR_AIRPORT_METRO :Grootstedelijk STR_AIRPORT_INTERNATIONAL :Internationaal vliegveld STR_AIRPORT_COMMUTER :Forens STR_AIRPORT_INTERCONTINENTAL :Intercontinentaal -STR_AIRPORT_HELIPORT :Heliport +STR_AIRPORT_HELIPORT :Heliplatform STR_AIRPORT_HELIDEPOT :Helihangar STR_AIRPORT_HELISTATION :Helikopterstation @@ -2487,7 +2487,7 @@ STR_AIRPORT_CLASS_HELIPORTS :Helikoptervlieg STR_STATION_BUILD_NOISE :{BLACK}Geluidsoverlast: {GOLD}{COMMA} # Landscaping toolbar -STR_LANDSCAPING_TOOLBAR :{WHITE}Terreinvorming +STR_LANDSCAPING_TOOLBAR :{WHITE}Terreinaanpassing STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Verlaag een hoek van het land. Slepen verlaagt de eerste geselecteerde hoek en brengt het geselecteerde gebied naar de hoogte van die hoek. Ctrl selecteert het gebied diagonaal. Shift maakt een inschatting van de kosten STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Verhoog een hoek van het land. Slepen verhoogt de eerste geselecteerde hoek en brengt het geselecteerde gebied naar de hoogte van die hoek. Ctrl selecteert het gebied diagonaal. Shift maakt een inschatting van de kosten STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Land egaliseren op hoogte van eerst geselecteerde hoek. Ctrl selecteert een diagonaal gebied. Shift+klik wisselt tussen bouwen/verwachte kosten weergeven. @@ -2496,7 +2496,7 @@ STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Land kop # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Keuze van object STR_OBJECT_BUILD_TOOLTIP :{BLACK}Object selecteren voor bouwen. Shift+Klik wisselt tussen bouwen/verwachte kosten weergeven. -STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Kies klasse van het te bouwen object +STR_OBJECT_BUILD_CLASS_TOOLTIP :{BLACK}Hiermee kies je de klasse van het te bouwen object STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Bekijk het object STR_OBJECT_BUILD_SIZE :{BLACK}Grootte: {GOLD}{NUM} x {NUM} tegels @@ -2505,7 +2505,7 @@ STR_OBJECT_CLASS_TRNS :Zendmasten # Tree planting window (last two for SE only) STR_PLANT_TREE_CAPTION :{WHITE}Bomen -STR_PLANT_TREE_TOOLTIP :{BLACK}Kies een soort boom om te planten. Als de tegel al bomen bevat, zullen er meer bomen van verschillende types bijkomen, onafhankelijk van het geselecteerde type. +STR_PLANT_TREE_TOOLTIP :{BLACK}Kies een soort boom om te planten. Als de tegel al bomen bevat, komen er meer bomen van verschillende typen bij, onafhankelijk van het geselecteerde type. STR_TREES_RANDOM_TYPE :{BLACK}Willekeurige soorten bomen STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Willekeurig bomen planten. Shift+klik wisselt tussen bouwen/verwachte kosten. STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Willekeurige bomen @@ -2522,7 +2522,7 @@ STR_TERRAFORM_SE_NEW_WORLD :{BLACK}Maak nie STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Verwijder landschap STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Verwijder alle eigendommen van een bedrijf van de kaart -STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Verwijder landschap +STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Landschap terugstellen STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Weet je zeker dat je alle eigendommen van een bedrijf van de kaart wilt verwijderen? # Town generation window (SE) @@ -2563,13 +2563,13 @@ STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Kiest de STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :Veel willekeurige industrieën STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Bedek de kaart met willekeurig geplaatste industrieën STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Kosten: {YELLOW}{CURRENCY_LONG} -STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Probeer +STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Onderzoeken STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Bouw STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Betaal # Industry cargoes window -STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Industrie keten voor {STRING} industrie -STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Industrie keten voor {STRING} vracht +STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Industrieketen voor {STRING} industrie +STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Industrieketen voor {STRING} vracht STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Producerende industrieën STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Accepterende industrieën STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Huizen @@ -3009,9 +3009,9 @@ STR_NEWGRF_LIST_MISSING :{RED}Ontbrekend # NewGRF 'it's broken' warnings STR_NEWGRF_BROKEN :{WHITE}Gedrag van NewGRF '{0:STRING}' zal waarschijnlijk desynchronisatiefouten (desyncs) en/of vastlopers veroorzaken -STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Wagon '{1:ENGINE}' gewijzigde status van aandrijfeenheid wanneer niet in een depot +STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Het wijzigde de status van motorrijtuig van '{1:ENGINE}' terwijl het niet in een depot was STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Het veranderde de lengte van voertuig '{1:ENGINE}' wanneer het niet in een depot is -STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Het wijzigde voertuigcapaciteit voor '{1:ENGINE}' wanneer niet in een depot of ombouwen +STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Het wijzigde voertuigcapaciteit voor '{1:ENGINE}' terwijl het niet in een depot was of werd omgebouwd STR_BROKEN_VEHICLE_LENGTH :{WHITE}Trein '{VEHICLE}' behorend bij '{COMPANY}' heeft een ongeldige lengte. Dit wordt waarschijnlijk veroorzaakt door problemen met NewGRF's. Het spel kan desynchroniseren of vastlopen STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' geeft onjuiste informatie @@ -3073,14 +3073,14 @@ STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Geluidsl 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_LOCAL_AUTHORITY_BUTTON :{BLACK}Gemeente STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Geef informatie over de gemeente weer -STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Hernoem plaats +STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Hiermee hernoem je deze plaats STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}Vergroot STR_TOWN_VIEW_EXPAND_TOOLTIP :{BLACK}Vergroot stadsgrootte STR_TOWN_VIEW_DELETE_BUTTON :{BLACK}Verwijder STR_TOWN_VIEW_DELETE_TOOLTIP :{BLACK}Verwijder deze hele stad -STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Hernoem stad +STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Plaats hernoemen # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE} Gemeenteraad van {TOWN} @@ -3235,14 +3235,14 @@ 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_RENAME_TOOLTIP :{BLACK}Hernoem 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 STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Geef alle wegvoertuigen weer die dit station in hun opdrachtenlijst hebben STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Geef alle vliegtuigen weer die dit station in hun opdrachtenlijst hebben STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Geef alle schepen weer die dit station in hun opdrachtenlijst hebben -STR_STATION_VIEW_RENAME_STATION_CAPTION :Hernoem station/laadgebied +STR_STATION_VIEW_RENAME_STATION_CAPTION :Station/laadgebied hernoemen STR_STATION_VIEW_CLOSE_AIRPORT :{BLACK}Luchthaven sluiten STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Voorkom landen van vliegtuig op deze luchthaven @@ -3356,7 +3356,7 @@ STR_INDUSTRY_DIRECTORY_NONE :{ORANGE} Geen STR_INDUSTRY_DIRECTORY_ITEM :{ORANGE}{INDUSTRY}{BLACK} ({CARGO_LONG}{STRING}){YELLOW} ({COMMA}% vervoerd) STR_INDUSTRY_DIRECTORY_ITEM_TWO :{ORANGE}{INDUSTRY}{BLACK} ({CARGO_LONG}{STRING}/{CARGO_LONG}{STRING}){YELLOW} ({COMMA}%/{COMMA}% vervoerd) STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} -STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Industrienamen - klik op naam om scherm te centreren op industrie. Ctrl+klik opent een nieuw venster op de locatie van de industrie +STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Industrienamen - klik op een naam om het scherm te centreren op de industrie. Ctrl+klik opent een nieuw venster op de locatie van de industrie. # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3396,7 +3396,7 @@ STR_VEHICLE_LIST_AVAILABLE_SHIPS :Beschikbare sch STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Beschikbare vliegtuigen STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Bekijk een lijst van beschikbare ontwerpen voor dit type voertuig -STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Beheer lijst +STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Lijst beheren STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Stuur instructies naar alle voertuigen in de lijst STR_VEHICLE_LIST_REPLACE_VEHICLES :Vervang voertuigen STR_VEHICLE_LIST_SEND_FOR_SERVICING :Stuur voor onderhoud @@ -3425,17 +3425,17 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Niet-gegroepeer STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groepen - Klik op een groep voor een lijst van alle voertuigen in deze groep. Klik en sleep om hiërarchie te beheren STR_GROUP_CREATE_TOOLTIP :{BLACK}Klik om een groep te creëren STR_GROUP_DELETE_TOOLTIP :{BLACK}Verwijder de geselecteerde groep -STR_GROUP_RENAME_TOOLTIP :{BLACK}Hernoem de geselecteerde groep +STR_GROUP_RENAME_TOOLTIP :{BLACK}Hiermee hernoem je de geselecteerde groep STR_GROUP_LIVERY_TOOLTIP :{BLACK}Wijzig het uiterlijk van de geselecteerde groep STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klik om deze groep te beschermen tegen globaal automatisch vervangen STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Verwijder groep -STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Weet u zeker dat u deze groep en de eventuele subgroepen wilt verwijderen? +STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Weet je zeker dat je deze groep en de eventuele subgroepen wilt verwijderen? STR_GROUP_ADD_SHARED_VEHICLE :Toevoegen gedeelde voertuigen STR_GROUP_REMOVE_ALL_VEHICLES :Verwijder alle voertuigen -STR_GROUP_RENAME_CAPTION :{BLACK}Hernoem een groep +STR_GROUP_RENAME_CAPTION :{BLACK}Groep hernoemen STR_GROUP_PROFIT_THIS_YEAR :Winst dit jaar: STR_GROUP_PROFIT_LAST_YEAR :Winst vorig jaar: @@ -3496,10 +3496,10 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Hernoeme STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Hernoemen STR_BUY_VEHICLE_AIRCRAFT_RENAME_BUTTON :{BLACK}Hernoemen -STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP :{BLACK}Hernoem type spoorvoertuig -STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}Hernoem type wegvoertuig +STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP :{BLACK}Hiermee hernoem je dit type spoorvoertuig +STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}Hiermee hernoem je dit type wegvoertuig STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}Hernoem type schip -STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Hernoem type vliegtuig +STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Hiermee hernoem je dit type vliegtuig STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON :{BLACK}Verberg STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_TOGGLE_BUTTON :{BLACK}Verbergen @@ -3517,14 +3517,14 @@ STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Scheepst STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Vliegtuigtype weergeven-verbergen STR_QUERY_RENAME_TRAIN_TYPE_CAPTION :{WHITE}Hernoem type spoorvoertuig -STR_QUERY_RENAME_ROAD_VEHICLE_TYPE_CAPTION :{WHITE}Hernoem type van wegvoertuig -STR_QUERY_RENAME_SHIP_TYPE_CAPTION :{WHITE}Hernoem type van schip -STR_QUERY_RENAME_AIRCRAFT_TYPE_CAPTION :{WHITE}Hernoem type van vliegtuig +STR_QUERY_RENAME_ROAD_VEHICLE_TYPE_CAPTION :{WHITE}Type wegvoertuig hernoemen +STR_QUERY_RENAME_SHIP_TYPE_CAPTION :{WHITE}Type schip hernoemen +STR_QUERY_RENAME_AIRCRAFT_TYPE_CAPTION :{WHITE}Type vliegtuig hernoemen # Depot window STR_DEPOT_CAPTION :{WHITE}{DEPOT} -STR_DEPOT_RENAME_TOOLTIP :{BLACK}Hernoem depot +STR_DEPOT_RENAME_TOOLTIP :{BLACK}Hiermee hernoem je dit depot STR_DEPOT_RENAME_DEPOT_CAPTION :Depot hernoemen STR_DEPOT_NO_ENGINE :{BLACK}- @@ -3533,9 +3533,9 @@ STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} vo STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Treinen - klik op trein voor informatie, sleep voertuig voor toevoegen/verwijderen van trein, klik rechts voor trein informatie, Ctrl+klik voor samengestelde informatie -STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Wegvoertuigen - rechts-klik op wegvoertuig voor informatie -STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Schepen - rechts-klik op schip voor informatie -STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Vliegtuig - rechts-klik op vliegtuig voor informatie +STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Wegvoertuigen - rechts-klik op een wegvoertuig voor informatie +STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Schepen - rechts-klik op een schip voor informatie +STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Vliegtuigen - rechts-klik op een vliegtuig voor informatie STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Sleep trein hierheen om te verkopen STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Sleep wegvoertuig hier om het te verkopen @@ -3544,12 +3544,12 @@ STR_DEPOT_AIRCRAFT_SELL_TOOLTIP :{BLACK}Sleep vl STR_DEPOT_DRAG_WHOLE_TRAIN_TO_SELL_TOOLTIP :{BLACK}Sleep locomotief hierheen om de hele trein te verkopen -STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TOOLTIP :{BLACK}Verkoop alle treinen in het depot +STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TOOLTIP :{BLACK}Verkoop alle treinen in de remise STR_DEPOT_SELL_ALL_BUTTON_ROAD_VEHICLE_TOOLTIP :{BLACK}Verkoop alle wegvoertuigen in de garage STR_DEPOT_SELL_ALL_BUTTON_SHIP_TOOLTIP :{BLACK}Verkoop alle schepen in het dok STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TOOLTIP :{BLACK}Verkoop alle vliegtuigen in de hangar -STR_DEPOT_AUTOREPLACE_TRAIN_TOOLTIP :{BLACK}Vervang automatisch alle treinen in het depot +STR_DEPOT_AUTOREPLACE_TRAIN_TOOLTIP :{BLACK}Vervang automatisch alle treinen in de remise STR_DEPOT_AUTOREPLACE_ROAD_VEHICLE_TOOLTIP :{BLACK}Vervang automatisch alle wegvoertuigen in de garage STR_DEPOT_AUTOREPLACE_SHIP_TOOLTIP :{BLACK}Vervang automatisch alle schepen in het dok STR_DEPOT_AUTOREPLACE_AIRCRAFT_TOOLTIP :{BLACK}Vervang automatisch alle vliegtuigen in de hangar @@ -3562,7 +3562,7 @@ STR_DEPOT_AIRCRAFT_NEW_VEHICLES_BUTTON :{BLACK}Nieuwe v STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP :{BLACK}Koop nieuwe trein STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_TOOLTIP :{BLACK}Koop nieuw wegvoertuig STR_DEPOT_SHIP_NEW_VEHICLES_TOOLTIP :{BLACK}Koop nieuw schip -STR_DEPOT_AIRCRAFT_NEW_VEHICLES_TOOLTIP :{BLACK}Koop nieuw vliegtuig +STR_DEPOT_AIRCRAFT_NEW_VEHICLES_TOOLTIP :{BLACK}Koop een nieuw vliegtuig STR_DEPOT_CLONE_TRAIN :{BLACK}Kloon trein STR_DEPOT_CLONE_ROAD_VEHICLE :{BLACK}Kloon wegvoertuig @@ -3584,12 +3584,12 @@ STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Geef een STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TOOLTIP :{BLACK}Geef een lijst van alle schepen met dit dok in hun orders STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TOOLTIP :{BLACK}Geef een lijst van alle vliegtuigen met een hangar van dit vliegveld in hun orders -STR_DEPOT_MASS_STOP_DEPOT_TRAIN_TOOLTIP :{BLACK}Klik om alle treinen in het depot te stoppen +STR_DEPOT_MASS_STOP_DEPOT_TRAIN_TOOLTIP :{BLACK}Klik om alle treinen in de remise te stoppen STR_DEPOT_MASS_STOP_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Klik om alle wegvoertuigen in de garage te stoppen STR_DEPOT_MASS_STOP_DEPOT_SHIP_TOOLTIP :{BLACK}Klik om alle schepen in het dok te stoppen STR_DEPOT_MASS_STOP_HANGAR_TOOLTIP :{BLACK}Klik om alle vliegtuigen in de hangar te stoppen -STR_DEPOT_MASS_START_DEPOT_TRAIN_TOOLTIP :{BLACK}Klik om alle treinen in het depot te starten +STR_DEPOT_MASS_START_DEPOT_TRAIN_TOOLTIP :{BLACK}Klik om alle treinen in de remise te starten STR_DEPOT_MASS_START_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Klik om alle wegvoertuigen in de garage te starten STR_DEPOT_MASS_START_DEPOT_SHIP_TOOLTIP :{BLACK}Klik om alle schepen in het dok te starten STR_DEPOT_MASS_START_HANGAR_TOOLTIP :{BLACK}Klik om alle vliegtuigen in de hangar te starten @@ -3724,10 +3724,10 @@ STR_VEHICLE_COMMAND_STARTED :{GREEN}Gestart STR_VEHICLE_DETAILS_CAPTION :{WHITE}{VEHICLE} (Details) STR_VEHICLE_NAME_BUTTON :{BLACK}Naam -STR_VEHICLE_DETAILS_TRAIN_RENAME :{BLACK}Hernoem trein -STR_VEHICLE_DETAILS_ROAD_VEHICLE_RENAME :{BLACK}Hernoem wegvoertuig -STR_VEHICLE_DETAILS_SHIP_RENAME :{BLACK}Hernoem schip -STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Hernoem vliegtuig +STR_VEHICLE_DETAILS_TRAIN_RENAME :{BLACK}Trein hernoemen +STR_VEHICLE_DETAILS_ROAD_VEHICLE_RENAME :{BLACK}Wegvoertuig hernoemen +STR_VEHICLE_DETAILS_SHIP_RENAME :{BLACK}Schip hernoemen +STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Vliegtuig hernoemen STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Leeftijd: {LTBLUE}{STRING}{BLACK} Gebruikskosten: {LTBLUE}{CURRENCY_LONG}/yr # The next two need to stay in this order @@ -3761,10 +3761,10 @@ STR_VEHICLE_DETAILS_DEFAULT :Standaard STR_VEHICLE_DETAILS_DAYS :Dagen STR_VEHICLE_DETAILS_PERCENT :Percentage -STR_QUERY_RENAME_TRAIN_CAPTION :{WHITE}Hernoem trein -STR_QUERY_RENAME_ROAD_VEHICLE_CAPTION :{WHITE}Hernoem wegvoertuig -STR_QUERY_RENAME_SHIP_CAPTION :{WHITE}Hernoem schip -STR_QUERY_RENAME_AIRCRAFT_CAPTION :{WHITE}Hernoem vliegtuig +STR_QUERY_RENAME_TRAIN_CAPTION :{WHITE}Trein hernoemen +STR_QUERY_RENAME_ROAD_VEHICLE_CAPTION :{WHITE}Wegvoertuig hernoemen +STR_QUERY_RENAME_SHIP_CAPTION :{WHITE}Schip hernoemen +STR_QUERY_RENAME_AIRCRAFT_CAPTION :{WHITE}Vliegtuig hernoemen # Extra buttons for train details windows STR_VEHICLE_DETAILS_TRAIN_ENGINE_BUILT_AND_VALUE :{LTBLUE}{ENGINE}{BLACK} Gebouwd: {LTBLUE}{NUM}{BLACK} Waarde: {LTBLUE}{CURRENCY_LONG} @@ -3796,7 +3796,7 @@ STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nieuwe c STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Nieuwe capaciteit: {GOLD}{CARGO_LONG}{}{BLACK}Inkomsten na ombouwen: {GREEN}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Nieuwe capaciteit: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Ombouwkosten: {RED}{CURRENCY_LONG} STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Nieuwe capaciteit: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Inkomsten na ombouwen: {GREEN}{CURRENCY_LONG} -STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Kies het voertuig om om te bouwen. Slepen met de muis geeft de mogelijkheid om meerdere voertuigen te selecteren. Klikken op een lege ruimte selecteert het hele voertuig. Ctrl+klik selecteert een voertuig en de volgende keten +STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Kies het voertuig dat je wilt ombouwen. Sleep met de muis om meerdere voertuigen te selecteren. Klik op een lege ruimte om het hele voertuig te selecteren. Met ctrl+klik selecteer je een voertuig en de volgende keten. STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Vrachttype selecteren dat deze trein moet vervoeren STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Vrachttype selecteren dat dit wegvoertuig moet vervoeren @@ -4206,9 +4206,9 @@ STR_ERROR_SITE_UNSUITABLE :{WHITE}... loca STR_ERROR_ALREADY_BUILT :{WHITE}... reeds gebouwd STR_ERROR_OWNED_BY :{WHITE}... is eigendom van {STRING} STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... gebied is van ander bedrijf -STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}... limiet landschapsaanpassing bereikt -STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... legen van tegels limiet bereikt -STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}... boomplant limit bereikt +STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}... limiet voor terreinaanpassing bereikt +STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... limiet voor tegels vrijmaken bereikt +STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}... boomplantlimiet bereikt STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}Naam moet uniek zijn STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}{1:STRING} in de weg STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Niet toegestaan wanneer gepauzeerd @@ -4349,7 +4349,7 @@ STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... moet STR_ERROR_SHIP_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... moet gestopt zijn binnen een dok STR_ERROR_AIRCRAFT_MUST_BE_STOPPED_INSIDE_HANGAR :{WHITE}... moet gestopt zijn in een hangar -STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Treinen kunnen alleen aangepast worden als ze gestopt zijn binnen een depot +STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Treinen kunnen alleen aangepast worden als ze gestopt zijn binnen een remise STR_ERROR_TRAIN_TOO_LONG :{WHITE}Trein te lang STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Kan de richting van het voertuig niet omdraaien... STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}... bestaat uit meerdere eenheden @@ -4617,7 +4617,7 @@ STR_INDUSTRY_NAME_BANK_TROPIC_ARCTIC :Bank STR_INDUSTRY_NAME_DIAMOND_MINE :Diamantmijn STR_INDUSTRY_NAME_IRON_ORE_MINE :IJzermijn STR_INDUSTRY_NAME_FRUIT_PLANTATION :Boomgaard -STR_INDUSTRY_NAME_RUBBER_PLANTATION :Rubberboerderij +STR_INDUSTRY_NAME_RUBBER_PLANTATION :Rubberplantage STR_INDUSTRY_NAME_WATER_SUPPLY :Waterbron STR_INDUSTRY_NAME_WATER_TOWER :Watertoren STR_INDUSTRY_NAME_FACTORY_2 :Fabriek @@ -4670,7 +4670,7 @@ STR_SV_STNAME_SIDINGS :{STRING} Zijspo STR_SV_STNAME_BRANCH :{STRING} Aftakking STR_SV_STNAME_UPPER :Hoger {STRING} STR_SV_STNAME_LOWER :Lager {STRING} -STR_SV_STNAME_HELIPORT :{STRING} Helihaven +STR_SV_STNAME_HELIPORT :{STRING} Heliplatform STR_SV_STNAME_FOREST :{STRING} Bossen STR_SV_STNAME_FALLBACK :{STRING} Station #{NUM} ############ end of savegame specific region! diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index ba1d59918a..f986c8531f 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -849,6 +849,7 @@ STR_MUSIC_RULER_MARKER :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Chan eil ceòl ann STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}“{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Traca STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Tiotal @@ -869,10 +870,12 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Toglaich STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Seall uinneag taghadh tracaichean ciùil # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Prògram ciùil - "{STRING}" STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} “{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Clàr-amais nan traca STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Prògram - “{STRING}" STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Falamhaich +STR_PLAYLIST_CHANGE_SET :{BLACK}Atharraich an seata STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Falamhaich am prògram làithreach (Gnàthaichte1 no Gnàthaichte2 a-mhàin) STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Dèan briogadh air traca ciùil gus a chur ris a' phrògram làithreach (Gnàthaichte1 no Gnàthaichte2 a-mhàin) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Dèan briogadh air traca ciùil gus a thoirt air falbh bhon phrògram làithreach (Gnàthaichte1 no Gnàthaichte2 a-mhàin) @@ -1079,10 +1082,10 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC # Extra view window STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Port-seallaidh {COMMA} -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Cuir lethbhreac sa phort-seallaidh seo +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Atharraich am port-seallaidh STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Cuir lethbhreac dhen ionad air a' phrìomh shealladh sa phort-seallaidh seo -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Cuir ann bhon phort-seallaidh seo -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Cuir ionad a' phuirt-seallaidh seo sa phrìomh shealladh +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Atharraich am prìomh phort-seallaidh +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Cuir lethbhreac de dh'ionad a' phuirt-seallaidh seo sa phrìomh shealladh # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Roghainnean a' gheama @@ -1453,6 +1456,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Cha ghab STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Cumail suas a' bhun-structair: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Nuair a bhios seo air, bidh cumail suas a' bhun-structair a' cosg airgid. Fàsaidh na cosgaisean nas luaithe na meud an lìonraidh, mar sin bheir an roghainn seo barrachd buaidh air companaidhean mòra +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Dath tòiseachadh na companaidh: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Tagh dath tòiseachaidh airson na companaidh STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Chan fhalbh an ùine air puirt-adhair: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Nuair a chuireas tu an roghainn seo an comas, cumaidh gach port-adhair a' dol gu bràth an dèidh a thogail @@ -1537,6 +1542,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Dath na crutha- STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Uaine STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Dorch-uaine STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Purpaidh +STR_CONFIG_SETTING_SCROLLMODE_RMB :Gluais am mapa le putan deas na luchaige STR_CONFIG_SETTING_SMOOTH_SCROLLING :Sgroladh mìn nam port-seallaidh: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Tagh mar a ghluaiseas am prìomh-shealladh gu ionad sònraichte. Ma tha seo dheth, thèid leum dhan ionad a chaidh a thaghadh sa bhad STR_CONFIG_SETTING_MEASURE_TOOLTIP :Seall gliocasan-sgrìn tomhais le innealan togail: {STRING} @@ -2005,6 +2011,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Atharrai STR_CHEAT_SETUP_PROD :{LTBLUE}Cuir an comas atharrachadh air luachan saothrachaidh: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Sgeama nan dath STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Seall sgeamannan nan dath coitcheann STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Seall sgeamannan nan dath airson trèanaichean @@ -2575,9 +2582,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Comharra STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Comharra slighe (dealain){}Leigidh comharra slighe le barrachd air aon trèan dol a-steach dhan bhloca comharra air an aon àm, mas urrainn dhan trèan slighe gu ionad stadaidh sàbhailte a ghlèidheadh. Faodar dol seachad air comharran slighe àbhaisteach on chùlaibh STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Comharra slighe aon-shligheach (dealain){}Leigidh comharra slighe le barrachd air aon trèan dol a-steach dhan bhloca comharra air an aon àm, mas urrainn dhan trèan slighe gu ionad stadaidh sàbhailte a ghlèidheadh. Chan fhaodar dol seachad air comharran slighe àbhaisteach on chùlaibh STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Iompachadh chomharran{}Ma thagh thu seo ’s tu a' briogadh air comharra a tha ann, iompaichidh seo an comharra dhan t-seòrsa a thagh thu. Seallaidh Shift+briogadh tuairmse air cosgaisean an iompachaidh dhut -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Dlùths nan comharran air an cruthachadh le slaodadh -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Lùghdaich dlùths nan comharran air an cruthachadh le slaodadh -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Meudaich dlùths nan comharran air an cruthachadh le slaodadh +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Astar nan comharran air an cruthachadh le slaodadh +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Lùghdaich astar nan comharran air an cruthachadh le slaodadh +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Meudaich astar nan comharran air an cruthachadh le slaodadh # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Tagh drochaid rèile @@ -2927,9 +2934,29 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 An sgioba OpenTTD # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Reat fhrèamaichean +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_BLITTER :{BLACK}Reat fhrèamaichean na grafaigeachd: {STRING} +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Factar làithreach air luaths a' gheama: {DECIMAL}x +STR_FRAMERATE_CURRENT :{WHITE}Làithreach +STR_FRAMERATE_AVERAGE :{WHITE}Cuibheasach +STR_FRAMERATE_DATA_POINTS :{BLACK}Dàta stèidhichte air {COMMA} {P "tomhas" "thomhas" "tomhasan" "tomhas" } +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} {P "fhrèam" "fhrèam" "frèamaichean" "frèam" }/diog +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} {P "fhrèam" "fhrèam" "frèamaichean" "frèam" }/diog +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms ############ Leave those lines in this order!! +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Dàil air graf nan ceangal: +STR_FRAMERATE_DRAWING :{BLACK}Reandaradh na grafaigeachd: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Puirt-sheallaidh an t-saoghail: +STR_FRAMERATE_VIDEO :{BLACK}Às-chur video: +STR_FRAMERATE_SOUND :{BLACK}Measgachadh fuaime: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Lùb a' gheama +STR_FRAMETIME_CAPTION_GL_LINKGRAPH : Dàil air graf nan ceangal +STR_FRAMETIME_CAPTION_VIDEO :Às-chur video +STR_FRAMETIME_CAPTION_SOUND :Measgachadh fuaime ############ End of leave-in-this-order @@ -2955,6 +2982,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Fiosrach STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Chan eil fiosrachadh ri làimh STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Sgrìobh thairis air an fhaidhle STR_SAVELOAD_OSKTITLE :{BLACK}Cuir a-steach ainm ùr gus an geama a shàbhaladh @@ -3072,6 +3100,10 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Tionndad STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}An tionndadh as sine a tha co-chòrdail: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}Suim MD5: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Pailead: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Bun-roghainn (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Bun-roghainn (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Dìleabach (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Dìleabach (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Paramadairean: {SILVER}{STRING} STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Chan eil fiosrachadh ri làimh @@ -3224,6 +3256,7 @@ STR_TOWN_POPULATION :{BLACK}Sluagh a STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Mòr-bhaile) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Sluagh: {ORANGE}{COMMA}{BLACK} Taighean: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} sa mhìos seo chaidh: {ORANGE}{COMMA}{BLACK} as motha: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Carago a tha a dhìth ach am fàs am baile: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{RED}Feum air {ORANGE}{STRING} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{BLACK}Feum air {ORANGE}{STRING}{BLACK} sa gheamhradh @@ -3276,6 +3309,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Ceannai # Goal window STR_GOALS_CAPTION :{WHITE}Amasan aig {COMPANY} STR_GOALS_SPECTATOR_CAPTION :{WHITE}Amasan coitcheann +STR_GOALS_SPECTATOR :Amasan coitcheann STR_GOALS_GLOBAL_TITLE :{BLACK}Amasan coitcheann: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Chan eil gin - @@ -3628,6 +3662,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Tomhas-l STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Carbadan le cumhachd: {GOLD}+{POWER}{BLACK} Cuideam: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Gabhaidh mùthadh airson: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Na h-uile seòrsa dhe charago +STR_PURCHASE_INFO_NONE :Chan eil gin STR_PURCHASE_INFO_ALL_BUT :Na h-uile ach {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Spàirn tàirnge as motha: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Astar: {GOLD}{COMMA} {P leac leac leacan leac} @@ -4459,6 +4494,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... tha STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... tha comhair an rathaid cearr STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... chan urrainn dha dh’oiseanan a bhith aig stèiseanan draibhidh troimhe STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... chan urrainn dha ghoibhlean a bhith aig stèiseanan draibhidh troimhe +STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... rathad aon-shligheach no bacte # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Cha ghabh pàirt dhen stèisean toirt air falbh... @@ -4710,6 +4746,8 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Fuaimean aig an STR_BASESOUNDS_WIN_DESCRIPTION :Fuaimean aig an deasachadh Windows tùsail aig Transport Tycoon Deluxe. STR_BASESOUNDS_NONE_DESCRIPTION :Pacaid fhuaimean anns nach eil fuaim sam bith. STR_BASEMUSIC_WIN_DESCRIPTION :Ceòl aig an deasachadh Windows tùsail aig Transport Tycoon Deluxe. +STR_BASEMUSIC_DOS_DESCRIPTION :Ceòl aig an deasachadh DOS tùsail aig Transport Tycoon Deluxe. +STR_BASEMUSIC_TTO_DESCRIPTION :Ceòl aig an deasachadh DOS tùsail aig Transport Tycoon Deluxe (Original/World Editor). STR_BASEMUSIC_NONE_DESCRIPTION :Pacaid ciùil anns nach eil fonn sam bith. ##id 0x2000 From 456e67ac1c52431f9b7ae4d15f8188b94b2daea6 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Thu, 21 Feb 2019 21:23:37 +0000 Subject: [PATCH 372/622] Change: Owner of vehicle with exclusive transport rights may now load cargo from neutral stations (#7256) --- src/economy.cpp | 15 +++++++++++++-- src/station_cmd.cpp | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/economy.cpp b/src/economy.cpp index 97283ae448..74c4cf079b 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1518,6 +1518,17 @@ static void HandleStationRefit(Vehicle *v, CargoArray &consist_capleft, Station cur_company.Restore(); } +/** + * Test whether a vehicle can load cargo at a station even if exclusive transport rights are present. + * @param st Station with cargo waiting to be loaded. + * @param v Vehicle loading the cargo. + * @return true when a vehicle can load the cargo. + */ +static bool MayLoadUnderExclusiveRights(const Station *st, const Vehicle *v) +{ + return st->owner != OWNER_NONE || st->town->exclusive_counter == 0 || st->town->exclusivity == v->owner; +} + struct ReserveCargoAction { Station *st; StationIDStack *next_station; @@ -1527,7 +1538,7 @@ struct ReserveCargoAction { bool operator()(Vehicle *v) { - if (v->cargo_cap > v->cargo.RemainingCount()) { + if (v->cargo_cap > v->cargo.RemainingCount() && MayLoadUnderExclusiveRights(st, v)) { st->goods[v->cargo_type].cargo.Reserve(v->cargo_cap - v->cargo.RemainingCount(), &v->cargo, st->xy, *next_station); } @@ -1751,7 +1762,7 @@ static void LoadUnloadVehicle(Vehicle *front) /* If there's goods waiting at the station, and the vehicle * has capacity for it, load it on the vehicle. */ uint cap_left = v->cargo_cap - v->cargo.StoredCount(); - if (cap_left > 0 && (v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0 || ge->cargo.AvailableCount() > 0)) { + if (cap_left > 0 && (v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0 || ge->cargo.AvailableCount() > 0) && MayLoadUnderExclusiveRights(st, v)) { if (v->cargo.StoredCount() == 0) TriggerVehicle(v, VEHICLE_TRIGGER_NEW_CARGO); if (_settings_game.order.gradual_loading) cap_left = min(cap_left, GetLoadAmount(v)); diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 6be22de0c5..e6864d70db 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -3853,7 +3853,7 @@ uint MoveGoodsToStation(CargoID type, uint amount, SourceType source_type, Sourc Station *st = *st_iter; /* Is the station reserved exclusively for somebody else? */ - if (st->town->exclusive_counter > 0 && st->town->exclusivity != st->owner) continue; + if (st->owner != OWNER_NONE && st->town->exclusive_counter > 0 && st->town->exclusivity != st->owner) continue; if (st->goods[type].rating == 0) continue; // Lowest possible rating, better not to give cargo anymore From 690d1dd6a4490821759a6025114e0dc3eb656293 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Tue, 19 Feb 2019 22:02:05 +0100 Subject: [PATCH 373/622] Fix #7159, e934f09: Waiting time at red one-way signals was too short. This is not an exact fix as previously, the wait time was speed/acceleration dependant. This simple fix ignores that and just makes the 'days' from the settings comment to be actually days. --- src/train_cmd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index c4deedde80..29b2e543e0 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -3186,12 +3186,12 @@ bool TrainController(Train *v, Vehicle *nomove, bool reverse) v->cur_speed = 0; v->subspeed = 0; v->progress = 255; // make sure that every bit of acceleration will hit the signal again, so speed stays 0. - if (!_settings_game.pf.reverse_at_signals || ++v->wait_counter < _settings_game.pf.wait_oneway_signal * 20) return false; + if (!_settings_game.pf.reverse_at_signals || ++v->wait_counter < _settings_game.pf.wait_oneway_signal * DAY_TICKS * 2) return false; } else if (HasSignalOnTrackdir(gp.new_tile, i)) { v->cur_speed = 0; v->subspeed = 0; v->progress = 255; // make sure that every bit of acceleration will hit the signal again, so speed stays 0. - if (!_settings_game.pf.reverse_at_signals || ++v->wait_counter < _settings_game.pf.wait_twoway_signal * 73) { + if (!_settings_game.pf.reverse_at_signals || ++v->wait_counter < _settings_game.pf.wait_twoway_signal * DAY_TICKS * 2) { DiagDirection exitdir = TrackdirToExitdir(i); TileIndex o_tile = TileAddByDiagDir(gp.new_tile, exitdir); From fb1b6fa47a2cbb45d13a4c7adeb8300220ad3a72 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 22 Feb 2019 19:45:44 +0100 Subject: [PATCH 374/622] Update: Translations from eints italian: 9 changes by lorenzodv norwegian (bokmal): 4 changes by Leifbk --- src/lang/italian.txt | 9 +++++++++ src/lang/norwegian_bokmal.txt | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 65fc69c2d9..3a5e89c23f 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -192,6 +192,7 @@ STR_COLOUR_BROWN :Marrone STR_COLOUR_GREY :Grigio STR_COLOUR_WHITE :Bianco STR_COLOUR_RANDOM :Casuale +STR_COLOUR_DEFAULT :Predefinito # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -467,6 +468,7 @@ STR_TOOLBAR_SOUND_MUSIC :Suoni/musica ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Ultimo messaggio/notizia STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Cronologia messaggi +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Elimina tutti i messaggi ############ range ends here ############ range for about menu starts @@ -1844,6 +1846,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Cambia l STR_CHEAT_SETUP_PROD :{LTBLUE}Permetti la modifica dei valori di produzione: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Schema colori STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostra gli schemi di colorazione generali STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Mostra gli schemi di colorazione dei treni @@ -2103,6 +2106,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Disconne STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server protetto. Inserire la password STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Compagnia protetta. Inserire la password +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Elenco dei client # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Elenco dei client @@ -2806,6 +2810,8 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Informaz STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtro: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Sovrascrivi file +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Si è sicuri di voler sovrascrivere il file esistente? STR_SAVELOAD_OSKTITLE :{BLACK}Inserire un nome per il salvataggio @@ -3136,6 +3142,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Corromp # Goal window STR_GOALS_CAPTION :{WHITE}Obiettivi della {COMPANY} STR_GOALS_SPECTATOR_CAPTION :{WHITE}Obiettivi globali +STR_GOALS_SPECTATOR :Obiettivi globali STR_GOALS_GLOBAL_TITLE :{BLACK}Obiettivi globali: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Nessuno - @@ -3184,6 +3191,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Fare cli # Story book window STR_STORY_BOOK_CAPTION :{WHITE}Storia della {COMPANY} STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Storia globale +STR_STORY_BOOK_SPECTATOR :Storia globale STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Pagina {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Salta a una pagina specifica selezionandola dall'elenco @@ -3448,6 +3456,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Gruppi - STR_GROUP_CREATE_TOOLTIP :{BLACK}Fare clic per creare un gruppo STR_GROUP_DELETE_TOOLTIP :{BLACK}Elimina il gruppo selezionato STR_GROUP_RENAME_TOOLTIP :{BLACK}Rinomina il gruppo selezionato +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Cambia la livrea del gruppo selezionato STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Fare clic per proteggere questo gruppo dal rimpiazzo automatico STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Elimina Gruppo diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 6066a91fb7..a084a7b9c8 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -468,6 +468,7 @@ STR_TOOLBAR_SOUND_MUSIC :Lyd/musikk ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Siste melding/nyhet STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Tidligere meldinger +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Slett alle meldinger ############ range ends here ############ range for about menu starts @@ -2085,6 +2086,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Koble fr STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Tjeneren er beskyttet. Skriv inn passord STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firmaet er beskyttet. Skriv inn passord +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Klientliste # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Liste over klienter @@ -3114,6 +3116,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Du kan # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Målsetninger STR_GOALS_SPECTATOR_CAPTION :{WHITE}Globale mål +STR_GOALS_SPECTATOR :Globale mål STR_GOALS_GLOBAL_TITLE :{BLACK}Globale mål: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Ingen - @@ -3162,6 +3165,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikk fo # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Historiebok STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Global historiebok +STR_STORY_BOOK_SPECTATOR :Global historiebok STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Side {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Gå til en bestemt side ved å velge den i denne nedtrekkslisten. From 69928df3f05209462387018540cd2f1ceffdba27 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Fri, 22 Feb 2019 12:33:18 +0000 Subject: [PATCH 375/622] Fix: Resorting file list did not update filtered rows. --- src/fios_gui.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index 63bb589d77..9911de2133 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -577,6 +577,7 @@ public: if (_savegame_sort_dirty) { _savegame_sort_dirty = false; SortSaveGameList(this->fios_items); + this->OnInvalidateData(SLIWD_FILTER_CHANGES); } this->DrawWidgets(); From 56a6d7aec88b170eaf0dd57e14f5fffc24d3b1af Mon Sep 17 00:00:00 2001 From: peter1138 Date: Thu, 21 Feb 2019 23:53:16 +0000 Subject: [PATCH 376/622] Fix #7227: Don't apply mouse-hasn't-moved test to scrollbars. --- src/window.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/window.cpp b/src/window.cpp index 1729687f2d..857029622f 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -2436,14 +2436,14 @@ static EventState HandleActiveWidget() return ES_HANDLED; } - /* If cursor hasn't moved, there is nothing to do. */ - if (_cursor.delta.x == 0 && _cursor.delta.y == 0) return ES_HANDLED; - /* Handle scrollbar internally, or dispatch click event */ WidgetType type = w->GetWidget(w->mouse_capture_widget)->type; if (type == NWID_VSCROLLBAR || type == NWID_HSCROLLBAR) { HandleScrollbarScrolling(w); } else { + /* If cursor hasn't moved, there is nothing to do. */ + if (_cursor.delta.x == 0 && _cursor.delta.y == 0) return ES_HANDLED; + Point pt = { _cursor.pos.x - w->left, _cursor.pos.y - w->top }; w->OnClick(pt, w->mouse_capture_widget, 0); } From 00d28a500d9b2c32877871e0d2b917c8b28a82a6 Mon Sep 17 00:00:00 2001 From: Greg Carlin Date: Sat, 23 Feb 2019 03:27:46 -0500 Subject: [PATCH 377/622] Feature: Add option to adjust font size separately from GUI size. (#7003) Adds an option in the "Game Options" next to "Interface Size" called "Font Size". Available options are normal, double, and quad. --- src/fontcache.cpp | 8 +++++-- src/gfx.cpp | 1 + src/lang/english.txt | 7 ++++++ src/script/api/game/game_window.hpp.sq | 1 + src/script/api/script_window.hpp | 1 + src/settings_gui.cpp | 30 ++++++++++++++++++++++++++ src/spritecache.cpp | 14 ++++++------ src/table/misc_settings.ini | 9 ++++++++ src/widgets/settings_widget.h | 1 + src/zoom_type.h | 2 ++ 10 files changed, 65 insertions(+), 9 deletions(-) diff --git a/src/fontcache.cpp b/src/fontcache.cpp index 98e8bdf41c..9b732ce1ed 100644 --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -189,7 +189,7 @@ uint SpriteFontCache::GetGlyphWidth(GlyphID key) int SpriteFontCache::GetHeight() const { - return ScaleGUITrad(this->height); + return this->height * (1 << (ZOOM_LVL_OUT_4X - _font_zoom)); } bool SpriteFontCache::GetDrawGlyphShadow() @@ -293,6 +293,10 @@ void FreeTypeFontCache::SetFontSize(FontSize fs, FT_Face face, int pixels) pixels = Clamp(min(head->Lowest_Rec_PPEM, 20) + diff, scaled_height, MAX_FONT_SIZE); } } + + /* Apply user-specified font zoom. */ + pixels *= (1 << (ZOOM_LVL_OUT_4X - _font_zoom)); + this->used_size = pixels; FT_Error err = FT_Set_Pixel_Sizes(this->face, 0, pixels); @@ -438,7 +442,7 @@ void FreeTypeFontCache::ClearFontCache() Layouter::ResetFontCache(this->fs); /* GUI scaling might have changed, determine font size anew if it was automatically selected. */ - if (this->face != NULL && this->req_size == 0) this->SetFontSize(this->fs, this->face, this->req_size); + if (this->face != NULL) this->SetFontSize(this->fs, this->face, this->req_size); } FreeTypeFontCache::GlyphEntry *FreeTypeFontCache::GetGlyphPtr(GlyphID key) diff --git a/src/gfx.cpp b/src/gfx.cpp index 85cd3bfb59..0f050971c1 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -58,6 +58,7 @@ static void GfxMainBlitter(const Sprite *sprite, int x, int y, BlitterMode mode, static ReusableBuffer _cursor_backup; ZoomLevelByte _gui_zoom; ///< GUI Zoom level +ZoomLevelByte _font_zoom; ///< Font Zoom level /** * The rect for repaint. diff --git a/src/lang/english.txt b/src/lang/english.txt index ceb42a5c68..3c5c7dcdf6 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -995,6 +995,13 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Double size STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quad size +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Font size +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Select the interface font size to use + +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Double size +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Quad size + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Base graphics set STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Select the base graphics set to use STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} missing/corrupted file{P "" s} diff --git a/src/script/api/game/game_window.hpp.sq b/src/script/api/game/game_window.hpp.sq index fc818a443a..1fdcdbf524 100644 --- a/src/script/api/game/game_window.hpp.sq +++ b/src/script/api/game/game_window.hpp.sq @@ -1029,6 +1029,7 @@ void SQGSWindow_Register(Squirrel *engine) SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_RESOLUTION_DROPDOWN, "WID_GO_RESOLUTION_DROPDOWN"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_FULLSCREEN_BUTTON, "WID_GO_FULLSCREEN_BUTTON"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_GUI_ZOOM_DROPDOWN, "WID_GO_GUI_ZOOM_DROPDOWN"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_FONT_ZOOM_DROPDOWN, "WID_GO_FONT_ZOOM_DROPDOWN"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_GRF_DROPDOWN, "WID_GO_BASE_GRF_DROPDOWN"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_GRF_STATUS, "WID_GO_BASE_GRF_STATUS"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_GRF_TEXTFILE, "WID_GO_BASE_GRF_TEXTFILE"); diff --git a/src/script/api/script_window.hpp b/src/script/api/script_window.hpp index 8dfeafc4c5..1ed4fcf577 100644 --- a/src/script/api/script_window.hpp +++ b/src/script/api/script_window.hpp @@ -2184,6 +2184,7 @@ public: WID_GO_BASE_MUSIC_STATUS = ::WID_GO_BASE_MUSIC_STATUS, ///< Info about corrupted files etc. WID_GO_BASE_MUSIC_TEXTFILE = ::WID_GO_BASE_MUSIC_TEXTFILE, ///< Open base music readme, changelog (+1) or license (+2). WID_GO_BASE_MUSIC_DESCRIPTION = ::WID_GO_BASE_MUSIC_DESCRIPTION, ///< Description of selected base music set. + WID_GO_FONT_ZOOM_DROPDOWN = ::WID_GO_FONT_ZOOM_DROPDOWN, ///< Dropdown for the font zoom level. }; /** Widgets of the #GameSettingsWindow class. */ diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 2faf2b150b..a15f2ff585 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -36,6 +36,7 @@ #include "textfile_gui.h" #include "stringfilter_type.h" #include "querystring_gui.h" +#include "fontcache.h" #include @@ -64,6 +65,13 @@ static const StringID _gui_zoom_dropdown[] = { INVALID_STRING_ID, }; +static const StringID _font_zoom_dropdown[] = { + STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL, + STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM, + STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM, + INVALID_STRING_ID, +}; + int _nb_orig_names = SPECSTR_TOWNNAME_LAST - SPECSTR_TOWNNAME_START + 1; ///< Number of original town names. static StringID *_grf_names = NULL; ///< Pointer to town names defined by NewGRFs. static int _nb_grf_names = 0; ///< Number of town names defined by NewGRFs. @@ -302,6 +310,16 @@ struct GameOptionsWindow : Window { break; } + case WID_GO_FONT_ZOOM_DROPDOWN: { + list = new DropDownList(); + *selected_index = ZOOM_LVL_OUT_4X - _font_zoom; + const StringID *items = _font_zoom_dropdown; + for (int i = 0; *items != INVALID_STRING_ID; items++, i++) { + *list->Append() = new DropDownListStringItem(*items, i, false); + } + break; + } + case WID_GO_BASE_GRF_DROPDOWN: list = BuildSetDropDownList(selected_index, (_game_mode == GM_MENU)); break; @@ -331,6 +349,7 @@ struct GameOptionsWindow : Window { case WID_GO_LANG_DROPDOWN: SetDParamStr(0, _current_language->own_name); break; case WID_GO_RESOLUTION_DROPDOWN: SetDParam(0, GetCurRes() == _num_resolutions ? STR_GAME_OPTIONS_RESOLUTION_OTHER : SPECSTR_RESOLUTION_START + GetCurRes()); break; case WID_GO_GUI_ZOOM_DROPDOWN: SetDParam(0, _gui_zoom_dropdown[ZOOM_LVL_OUT_4X - _gui_zoom]); break; + case WID_GO_FONT_ZOOM_DROPDOWN: SetDParam(0, _font_zoom_dropdown[ZOOM_LVL_OUT_4X - _font_zoom]); break; case WID_GO_BASE_GRF_DROPDOWN: SetDParamStr(0, BaseGraphics::GetUsedSet()->name); break; case WID_GO_BASE_GRF_STATUS: SetDParam(0, BaseGraphics::GetUsedSet()->GetNumInvalid()); break; case WID_GO_BASE_SFX_DROPDOWN: SetDParamStr(0, BaseSounds::GetUsedSet()->name); break; @@ -541,6 +560,14 @@ struct GameOptionsWindow : Window { UpdateAllVirtCoords(); break; + case WID_GO_FONT_ZOOM_DROPDOWN: + GfxClearSpriteCache(); + _font_zoom = (ZoomLevel)(ZOOM_LVL_OUT_4X - index); + ClearFontCache(); + UpdateAllVirtCoords(); + ReInitAllWindows(); + break; + case WID_GO_BASE_GRF_DROPDOWN: this->SetMediaSet(index); break; @@ -616,6 +643,9 @@ static const NWidgetPart _nested_game_options_widgets[] = { NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_CURRENCY_DROPDOWN), SetMinimalSize(150, 12), SetDataTip(STR_BLACK_STRING, STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP), SetFill(1, 0), EndContainer(), NWidget(NWID_SPACER), SetMinimalSize(0, 0), SetFill(0, 1), + NWidget(WWT_FRAME, COLOUR_GREY), SetDataTip(STR_GAME_OPTIONS_FONT_ZOOM, STR_NULL), + NWidget(WWT_DROPDOWN, COLOUR_GREY, WID_GO_FONT_ZOOM_DROPDOWN), SetMinimalSize(150, 12), SetDataTip(STR_BLACK_STRING, STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP), SetFill(1, 0), + EndContainer(), EndContainer(), EndContainer(), diff --git a/src/spritecache.cpp b/src/spritecache.cpp index 579791d0d4..8a5a25ac00 100644 --- a/src/spritecache.cpp +++ b/src/spritecache.cpp @@ -462,13 +462,13 @@ static void *ReadSprite(const SpriteCache *sc, SpriteID id, SpriteType sprite_ty return (void*)GetRawSprite(SPR_IMG_QUERY, ST_NORMAL, allocator); } - if (sprite->type == ST_FONT && ZOOM_LVL_GUI != ZOOM_LVL_NORMAL) { - /* Make ZOOM_LVL_GUI be ZOOM_LVL_NORMAL */ - sprite[ZOOM_LVL_NORMAL].width = sprite[ZOOM_LVL_GUI].width; - sprite[ZOOM_LVL_NORMAL].height = sprite[ZOOM_LVL_GUI].height; - sprite[ZOOM_LVL_NORMAL].x_offs = sprite[ZOOM_LVL_GUI].x_offs; - sprite[ZOOM_LVL_NORMAL].y_offs = sprite[ZOOM_LVL_GUI].y_offs; - sprite[ZOOM_LVL_NORMAL].data = sprite[ZOOM_LVL_GUI].data; + if (sprite->type == ST_FONT && ZOOM_LVL_FONT != ZOOM_LVL_NORMAL) { + /* Make ZOOM_LVL_NORMAL be ZOOM_LVL_FONT */ + sprite[ZOOM_LVL_NORMAL].width = sprite[ZOOM_LVL_FONT].width; + sprite[ZOOM_LVL_NORMAL].height = sprite[ZOOM_LVL_FONT].height; + sprite[ZOOM_LVL_NORMAL].x_offs = sprite[ZOOM_LVL_FONT].x_offs; + sprite[ZOOM_LVL_NORMAL].y_offs = sprite[ZOOM_LVL_FONT].y_offs; + sprite[ZOOM_LVL_NORMAL].data = sprite[ZOOM_LVL_FONT].data; } return BlitterFactory::GetCurrentBlitter()->Encode(sprite, allocator); diff --git a/src/table/misc_settings.ini b/src/table/misc_settings.ini index b710478fba..787a82dd86 100644 --- a/src/table/misc_settings.ini +++ b/src/table/misc_settings.ini @@ -308,5 +308,14 @@ min = ZOOM_LVL_MIN max = ZOOM_LVL_OUT_4X cat = SC_BASIC +[SDTG_VAR] +name = ""font_zoom"" +type = SLE_UINT8 +var = _font_zoom +def = ZOOM_LVL_OUT_4X +min = ZOOM_LVL_MIN +max = ZOOM_LVL_OUT_4X +cat = SC_BASIC + [SDTG_END] diff --git a/src/widgets/settings_widget.h b/src/widgets/settings_widget.h index 661f788cd7..ac64ac80ae 100644 --- a/src/widgets/settings_widget.h +++ b/src/widgets/settings_widget.h @@ -35,6 +35,7 @@ enum GameOptionsWidgets { WID_GO_BASE_MUSIC_STATUS, ///< Info about corrupted files etc. WID_GO_BASE_MUSIC_TEXTFILE, ///< Open base music readme, changelog (+1) or license (+2). WID_GO_BASE_MUSIC_DESCRIPTION = WID_GO_BASE_MUSIC_TEXTFILE + TFT_END, ///< Description of selected base music set. + WID_GO_FONT_ZOOM_DROPDOWN, ///< Dropdown for the font zoom level. }; /** Widgets of the #GameSettingsWindow class. */ diff --git a/src/zoom_type.h b/src/zoom_type.h index c29f136cf3..ea8302761f 100644 --- a/src/zoom_type.h +++ b/src/zoom_type.h @@ -53,6 +53,8 @@ DECLARE_POSTFIX_INCREMENT(ZoomLevel) typedef SimpleTinyEnumT ZoomLevelByte; extern ZoomLevelByte _gui_zoom; +extern ZoomLevelByte _font_zoom; #define ZOOM_LVL_GUI (_gui_zoom) +#define ZOOM_LVL_FONT (_font_zoom) #endif /* ZOOM_TYPE_H */ From fde5bd0ccfc56b71f85fb65562dc1eac1c446aee Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 6 Feb 2019 22:10:58 +0000 Subject: [PATCH 378/622] Change: Add scrollbar to cargo legend in cargo payment rates window. --- src/graph_gui.cpp | 139 ++++++++++++------------- src/script/api/game/game_window.hpp.sq | 3 +- src/script/api/script_window.hpp | 3 +- src/widgets/graph_widget.h | 3 +- 4 files changed, 74 insertions(+), 74 deletions(-) diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index 08b99598fa..39df8ab6e2 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -869,35 +869,26 @@ void ShowCompanyValueGraph() /*****************/ struct PaymentRatesGraphWindow : BaseGraphWindow { - bool first_init; ///< This value is true until the first initialization of the window has finished. + uint line_height; ///< Pixel height of each cargo type row. + Scrollbar *vscroll; ///< Cargo list scrollbar. + PaymentRatesGraphWindow(WindowDesc *desc, WindowNumber window_number) : BaseGraphWindow(desc, WID_CPR_GRAPH, STR_JUST_CURRENCY_SHORT) { - this->first_init = true; this->num_on_x_axis = 20; this->num_vert_lines = 20; this->month = 0xFF; this->x_values_start = 10; this->x_values_increment = 10; + this->CreateNestedTree(); + this->vscroll = this->GetScrollbar(WID_CPR_MATRIX_SCROLLBAR); + this->vscroll->SetCount(_sorted_standard_cargo_specs_size); + /* Initialise the dataset */ this->OnHundredthTick(); - this->InitNested(window_number); - - this->UpdateLoweredWidgets(); - } - - virtual void OnInit() - { - /* UpdateLoweredWidgets needs to be called after a language or NewGRF change, but it can't be called before - * InitNested is done. On the first init these functions are called in the correct order by the constructor. */ - if (!this->first_init) { - /* Initialise the dataset */ - this->OnHundredthTick(); - this->UpdateLoweredWidgets(); - } - this->first_init = false; + this->FinishInitNested(window_number); } void UpdateExcludedData() @@ -912,53 +903,64 @@ struct PaymentRatesGraphWindow : BaseGraphWindow { } } - void UpdateLoweredWidgets() - { - for (int i = 0; i < _sorted_standard_cargo_specs_size; i++) { - this->SetWidgetLoweredState(WID_CPR_CARGO_FIRST + i, !HasBit(this->excluded_data, i)); - } - } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) { - if (widget < WID_CPR_CARGO_FIRST) { + if (widget != WID_CPR_MATRIX) { BaseGraphWindow::UpdateWidgetSize(widget, size, padding, fill, resize); return; } - const CargoSpec *cs = _sorted_cargo_specs[widget - WID_CPR_CARGO_FIRST]; - SetDParam(0, cs->name); - Dimension d = GetStringBoundingBox(STR_GRAPH_CARGO_PAYMENT_CARGO); - d.width += 14; // colour field - d.width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT; - d.height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; - *size = maxdim(d, *size); + const CargoSpec *cs; + FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) { + SetDParam(0, cs->name); + Dimension d = GetStringBoundingBox(STR_GRAPH_CARGO_PAYMENT_CARGO); + d.width += 14; // colour field + d.width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT; + d.height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; + *size = maxdim(d, *size); + } + + this->line_height = size->height; + size->height = this->line_height * 11; /* Default number of cargo types in most climates. */ + resize->width = 0; + resize->height = this->line_height; } virtual void DrawWidget(const Rect &r, int widget) const { - if (widget < WID_CPR_CARGO_FIRST) { + if (widget != WID_CPR_MATRIX) { BaseGraphWindow::DrawWidget(r, widget); return; } - const CargoSpec *cs = _sorted_cargo_specs[widget - WID_CPR_CARGO_FIRST]; bool rtl = _current_text_dir == TD_RTL; - /* Since the buttons have no text, no images, - * both the text and the coloured box have to be manually painted. - * clk_dif will move one pixel down and one pixel to the right - * when the button is clicked */ - byte clk_dif = this->IsWidgetLowered(widget) ? 1 : 0; int x = r.left + WD_FRAMERECT_LEFT; int y = r.top; - int rect_x = clk_dif + (rtl ? r.right - 12 : r.left + WD_FRAMERECT_LEFT); + int pos = this->vscroll->GetPosition(); + int max = pos + this->vscroll->GetCapacity(); - GfxFillRect(rect_x, y + clk_dif, rect_x + 8, y + 5 + clk_dif, PC_BLACK); - GfxFillRect(rect_x + 1, y + 1 + clk_dif, rect_x + 7, y + 4 + clk_dif, cs->legend_colour); - SetDParam(0, cs->name); - DrawString(rtl ? r.left : x + 14 + clk_dif, (rtl ? r.right - 14 + clk_dif : r.right), y + clk_dif, STR_GRAPH_CARGO_PAYMENT_CARGO); + const CargoSpec *cs; + FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) { + if (pos-- > 0) continue; + if (--max < 0) break; + + bool lowered = !HasBit(_legend_excluded_cargo, cs->Index()); + + /* Redraw box if lowered */ + if (lowered) DrawFrameRect(r.left, y, r.right, y + this->line_height - 1, COLOUR_ORANGE, lowered ? FR_LOWERED : FR_NONE); + + byte clk_dif = lowered ? 1 : 0; + int rect_x = clk_dif + (rtl ? r.right - 12 : r.left + WD_FRAMERECT_LEFT); + + GfxFillRect(rect_x, y + clk_dif, rect_x + 8, y + 5 + clk_dif, PC_BLACK); + GfxFillRect(rect_x + 1, y + 1 + clk_dif, rect_x + 7, y + 4 + clk_dif, cs->legend_colour); + SetDParam(0, cs->name); + DrawString(rtl ? r.left : x + 14 + clk_dif, (rtl ? r.right - 14 + clk_dif : r.right), y + clk_dif, STR_GRAPH_CARGO_PAYMENT_CARGO); + + y += this->line_height; + } } virtual void OnClick(Point pt, int widget, int click_count) @@ -968,7 +970,6 @@ struct PaymentRatesGraphWindow : BaseGraphWindow { /* Remove all cargoes from the excluded lists. */ _legend_excluded_cargo = 0; this->excluded_data = 0; - this->UpdateLoweredWidgets(); this->SetDirty(); break; @@ -981,23 +982,33 @@ struct PaymentRatesGraphWindow : BaseGraphWindow { SetBit(this->excluded_data, i); i++; } - this->UpdateLoweredWidgets(); this->SetDirty(); break; } - default: - if (widget >= WID_CPR_CARGO_FIRST) { - int i = widget - WID_CPR_CARGO_FIRST; - ToggleBit(_legend_excluded_cargo, _sorted_cargo_specs[i]->Index()); - this->ToggleWidgetLoweredState(widget); + case WID_CPR_MATRIX: { + uint row = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_CPR_MATRIX, 0, this->line_height); + if (row >= this->vscroll->GetCount()) return; + + const CargoSpec *cs; + FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) { + if (row-- > 0) continue; + + ToggleBit(_legend_excluded_cargo, cs->Index()); this->UpdateExcludedData(); this->SetDirty(); + break; } break; + } } } + virtual void OnResize() + { + this->vscroll->SetCapacityFromWidget(this, WID_CPR_MATRIX); + } + virtual void OnGameTick() { /* Override default OnGameTick */ @@ -1031,23 +1042,6 @@ struct PaymentRatesGraphWindow : BaseGraphWindow { } }; -/** Construct the row containing the digit keys. */ -static NWidgetBase *MakeCargoButtons(int *biggest_index) -{ - NWidgetVertical *ver = new NWidgetVertical; - - for (int i = 0; i < _sorted_standard_cargo_specs_size; i++) { - NWidgetBackground *leaf = new NWidgetBackground(WWT_PANEL, COLOUR_ORANGE, WID_CPR_CARGO_FIRST + i, NULL); - leaf->tool_tip = STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO; - leaf->SetFill(1, 0); - leaf->SetLowered(true); - ver->Add(leaf); - } - *biggest_index = WID_CPR_CARGO_FIRST + _sorted_standard_cargo_specs_size - 1; - return ver; -} - - static const NWidgetPart _nested_cargo_payment_rates_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), @@ -1065,12 +1059,15 @@ static const NWidgetPart _nested_cargo_payment_rates_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_EMPTY, COLOUR_GREY, WID_CPR_GRAPH), SetMinimalSize(495, 0), SetFill(1, 1), SetResize(1, 1), NWidget(NWID_VERTICAL), - NWidget(NWID_SPACER), SetMinimalSize(0, 24), SetFill(0, 0), SetResize(0, 1), + NWidget(NWID_SPACER), SetMinimalSize(0, 24), SetFill(0, 1), NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CPR_ENABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_ENABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL), SetFill(1, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_CPR_DISABLE_CARGOES), SetDataTip(STR_GRAPH_CARGO_DISABLE_ALL, STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL), SetFill(1, 0), NWidget(NWID_SPACER), SetMinimalSize(0, 4), - NWidgetFunction(MakeCargoButtons), - NWidget(NWID_SPACER), SetMinimalSize(0, 24), SetFill(0, 1), SetResize(0, 1), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_MATRIX, COLOUR_ORANGE, WID_CPR_MATRIX), SetResize(0, 2), SetMatrixDataTip(1, 0, STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO), SetScrollbar(WID_CPR_MATRIX_SCROLLBAR), + NWidget(NWID_VSCROLLBAR, COLOUR_ORANGE, WID_CPR_MATRIX_SCROLLBAR), + EndContainer(), + NWidget(NWID_SPACER), SetMinimalSize(0, 24), SetFill(0, 1), EndContainer(), NWidget(NWID_SPACER), SetMinimalSize(5, 0), SetFill(0, 1), SetResize(0, 1), EndContainer(), diff --git a/src/script/api/game/game_window.hpp.sq b/src/script/api/game/game_window.hpp.sq index 1fdcdbf524..833e9d8ec0 100644 --- a/src/script/api/game/game_window.hpp.sq +++ b/src/script/api/game/game_window.hpp.sq @@ -546,7 +546,8 @@ void SQGSWindow_Register(Squirrel *engine) SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CPR_FOOTER, "WID_CPR_FOOTER"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CPR_ENABLE_CARGOES, "WID_CPR_ENABLE_CARGOES"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CPR_DISABLE_CARGOES, "WID_CPR_DISABLE_CARGOES"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CPR_CARGO_FIRST, "WID_CPR_CARGO_FIRST"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CPR_MATRIX, "WID_CPR_MATRIX"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CPR_MATRIX_SCROLLBAR, "WID_CPR_MATRIX_SCROLLBAR"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_CL_BACKGROUND, "WID_CL_BACKGROUND"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_PRD_SCORE_FIRST, "WID_PRD_SCORE_FIRST"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_PRD_SCORE_LAST, "WID_PRD_SCORE_LAST"); diff --git a/src/script/api/script_window.hpp b/src/script/api/script_window.hpp index 1ed4fcf577..3e8f4c3d56 100644 --- a/src/script/api/script_window.hpp +++ b/src/script/api/script_window.hpp @@ -1439,7 +1439,8 @@ public: WID_CPR_FOOTER = ::WID_CPR_FOOTER, ///< Footer. WID_CPR_ENABLE_CARGOES = ::WID_CPR_ENABLE_CARGOES, ///< Enable cargoes button. WID_CPR_DISABLE_CARGOES = ::WID_CPR_DISABLE_CARGOES, ///< Disable cargoes button. - WID_CPR_CARGO_FIRST = ::WID_CPR_CARGO_FIRST, ///< First cargo in the list. + WID_CPR_MATRIX = ::WID_CPR_MATRIX, ///< Cargo list. + WID_CPR_MATRIX_SCROLLBAR = ::WID_CPR_MATRIX_SCROLLBAR, ///< Cargo list scrollbar. }; /** Widget of the #CompanyLeagueWindow class. */ diff --git a/src/widgets/graph_widget.h b/src/widgets/graph_widget.h index 840a6c866e..7af5297abf 100644 --- a/src/widgets/graph_widget.h +++ b/src/widgets/graph_widget.h @@ -49,7 +49,8 @@ enum CargoPaymentRatesWidgets { WID_CPR_FOOTER, ///< Footer. WID_CPR_ENABLE_CARGOES, ///< Enable cargoes button. WID_CPR_DISABLE_CARGOES, ///< Disable cargoes button. - WID_CPR_CARGO_FIRST, ///< First cargo in the list. + WID_CPR_MATRIX, ///< Cargo list. + WID_CPR_MATRIX_SCROLLBAR,///< Cargo list scrollbar. }; /** Widget of the #CompanyLeagueWindow class. */ From 4adb91202d7c0118b52daeab2c4e6b040b30e4a9 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Sat, 23 Feb 2019 12:16:12 +0000 Subject: [PATCH 379/622] Fix: Remove desert around lakes upon generation --- src/landscape.cpp | 8 +++++++- src/water.h | 1 + src/water_cmd.cpp | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/landscape.cpp b/src/landscape.cpp index b173709f37..b36f5c8842 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -1063,6 +1063,9 @@ static bool MakeLake(TileIndex tile, void *user_data) TileIndex t2 = tile + TileOffsByDiagDir(d); if (IsWaterTile(t2)) { MakeRiver(tile, Random()); + /* Remove desert directly around the river tile. */ + TileIndex t = tile; + CircularTileSearch(&t, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, NULL); return false; } } @@ -1134,7 +1137,7 @@ static void River_FoundEndNode(AyStar *aystar, OpenListNode *current) if (!IsWaterTile(tile)) { MakeRiver(tile, Random()); /* Remove desert directly around the river tile. */ - CircularTileSearch(&tile, 5, RiverModifyDesertZone, NULL); + CircularTileSearch(&tile, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, NULL); } } } @@ -1245,6 +1248,9 @@ static bool FlowRiver(TileIndex spring, TileIndex begin) DistanceManhattan(spring, lakeCenter) > _settings_game.game_creation.min_river_length) { end = lakeCenter; MakeRiver(lakeCenter, Random()); + /* Remove desert directly around the river tile. */ + CircularTileSearch(&lakeCenter, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, NULL); + lakeCenter = end; uint range = RandomRange(8) + 3; CircularTileSearch(&lakeCenter, range, MakeLake, &height); /* Call the search a second time so artefacts from going circular in one direction get (mostly) hidden. */ diff --git a/src/water.h b/src/water.h index cb7237fc7c..1b804720ff 100644 --- a/src/water.h +++ b/src/water.h @@ -40,6 +40,7 @@ void DrawShoreTile(Slope tileh); void MakeWaterKeepingClass(TileIndex tile, Owner o); bool RiverModifyDesertZone(TileIndex tile, void *data); +static const uint RIVER_OFFSET_DESERT_DISTANCE = 5; ///< Circular tile search radius to create non-desert around a river tile. bool IsWateredTile(TileIndex tile, Direction from); diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index 31dafe57fa..03b321e686 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -428,7 +428,7 @@ CommandCost CmdBuildCanal(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 MakeRiver(tile, Random()); if (_game_mode == GM_EDITOR) { TileIndex tile2 = tile; - CircularTileSearch(&tile2, 5, RiverModifyDesertZone, NULL); + CircularTileSearch(&tile2, RIVER_OFFSET_DESERT_DISTANCE, RiverModifyDesertZone, NULL); } break; From 7e1e2756d4fdbd9c2fb3508b4213de8dc855f21c Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Mon, 4 Feb 2019 01:26:55 +0100 Subject: [PATCH 380/622] Add: Show performance of AI and GS in framerate window --- README.md | 6 ++ src/ai/ai_core.cpp | 5 ++ src/framerate_gui.cpp | 151 +++++++++++++++++++++++++++++++++++++---- src/framerate_type.h | 18 +++++ src/game/game_core.cpp | 13 +++- src/lang/english.txt | 6 ++ src/openttd.cpp | 7 +- 7 files changed, 187 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 7c842a1f86..038c177a74 100644 --- a/README.md +++ b/README.md @@ -476,6 +476,12 @@ The following is an explanation of the different statistics: - *World ticks* - Time spent on other world/landscape processing. This includes towns growing, building animations, updates of farmland and trees, and station rating updates. +- *GS/AI total*, *Game script*, and *AI players* - Time spent running logic + for game scripts and AI players. The total may show as less than the current + sum of the individual scripts, this is because AI players at lower + difficulty settings do not run every game tick, and hence contribute less + to the average across all ticks. Keep in mind that the "Current" figure is + also an average, just only over short term. - *Link graph delay* - Time overruns of the cargo distribution link graph update thread. Usually the link graph is updated in a background thread, but these updates need to synchronise with the main game loop occasionally, diff --git a/src/ai/ai_core.cpp b/src/ai/ai_core.cpp index d4ff233116..51522edaff 100644 --- a/src/ai/ai_core.cpp +++ b/src/ai/ai_core.cpp @@ -16,6 +16,7 @@ #include "../company_func.h" #include "../network/network.h" #include "../window_func.h" +#include "../framerate_type.h" #include "ai_scanner.hpp" #include "ai_instance.hpp" #include "ai_config.hpp" @@ -79,8 +80,11 @@ const Company *c; FOR_ALL_COMPANIES(c) { if (c->is_ai) { + PerformanceMeasurer framerate((PerformanceElement)(PFE_AI0 + c->index)); cur_company.Change(c->index); c->ai_instance->GameLoop(); + } else { + PerformanceMeasurer::SetInactive((PerformanceElement)(PFE_AI0 + c->index)); } } cur_company.Restore(); @@ -101,6 +105,7 @@ /* static */ void AI::Stop(CompanyID company) { if (_networking && !_network_server) return; + PerformanceMeasurer::SetInactive((PerformanceElement)(PFE_AI0 + company)); Backup cur_company(_current_company, company, FILE_LINE); Company *c = Company::Get(company); diff --git a/src/framerate_gui.cpp b/src/framerate_gui.cpp index 908cf81c0b..36ec7e1f2a 100644 --- a/src/framerate_gui.cpp +++ b/src/framerate_gui.cpp @@ -13,13 +13,18 @@ #include #include "gfx_func.h" #include "window_gui.h" +#include "window_func.h" #include "table/sprites.h" +#include "string_func.h" #include "strings_func.h" #include "console_func.h" #include "console_type.h" #include "guitimer_func.h" +#include "company_base.h" +#include "ai/ai_info.hpp" #include "widgets/framerate_widget.h" +#include "safeguards.h" /** @@ -183,6 +188,23 @@ namespace { PerformanceData(1), // PFE_ACC_DRAWWORLD PerformanceData(60.0), // PFE_VIDEO PerformanceData(1000.0 * 8192 / 44100), // PFE_SOUND + PerformanceData(1), // PFE_ALLSCRIPTS + PerformanceData(1), // PFE_GAMESCRIPT + PerformanceData(1), // PFE_AI0 ... + PerformanceData(1), + PerformanceData(1), + PerformanceData(1), + PerformanceData(1), + PerformanceData(1), + PerformanceData(1), + PerformanceData(1), + PerformanceData(1), + PerformanceData(1), + PerformanceData(1), + PerformanceData(1), + PerformanceData(1), + PerformanceData(1), + PerformanceData(1), // PFE_AI14 }; } @@ -215,6 +237,15 @@ PerformanceMeasurer::PerformanceMeasurer(PerformanceElement elem) /** Finish a cycle of a measured element and store the measurement taken. */ PerformanceMeasurer::~PerformanceMeasurer() { + if (this->elem == PFE_ALLSCRIPTS) { + /* Hack to not record scripts total when no scripts are active */ + bool any_active = _pf_data[PFE_GAMESCRIPT].num_valid > 0; + for (uint e = PFE_AI0; e < PFE_MAX; e++) any_active |= _pf_data[e].num_valid > 0; + if (!any_active) { + PerformanceMeasurer::SetInactive(PFE_ALLSCRIPTS); + return; + } + } _pf_data[this->elem].Add(this->start_time, GetPerformanceTimer()); } @@ -224,11 +255,19 @@ void PerformanceMeasurer::SetExpectedRate(double rate) _pf_data[this->elem].expected_rate = rate; } +/** Mark a performance element as not currently in use. */ +/* static */ void PerformanceMeasurer::SetInactive(PerformanceElement elem) +{ + _pf_data[elem].num_valid = 0; + _pf_data[elem].next_index = 0; + _pf_data[elem].prev_index = 0; +} + /** * Indicate that a cycle of "pause" where no processing occurs. * @param elem The element not currently being processed */ -void PerformanceMeasurer::Paused(PerformanceElement elem) +/* static */ void PerformanceMeasurer::Paused(PerformanceElement elem) { _pf_data[elem].AddPause(GetPerformanceTimer()); } @@ -266,6 +305,44 @@ void PerformanceAccumulator::Reset(PerformanceElement elem) void ShowFrametimeGraphWindow(PerformanceElement elem); +static const PerformanceElement DISPLAY_ORDER_PFE[PFE_MAX] = { + PFE_GAMELOOP, + PFE_GL_ECONOMY, + PFE_GL_TRAINS, + PFE_GL_ROADVEHS, + PFE_GL_SHIPS, + PFE_GL_AIRCRAFT, + PFE_GL_LANDSCAPE, + PFE_ALLSCRIPTS, + PFE_GAMESCRIPT, + PFE_AI0, + PFE_AI1, + PFE_AI2, + PFE_AI3, + PFE_AI4, + PFE_AI5, + PFE_AI6, + PFE_AI7, + PFE_AI8, + PFE_AI9, + PFE_AI10, + PFE_AI11, + PFE_AI12, + PFE_AI13, + PFE_AI14, + PFE_GL_LINKGRAPH, + PFE_DRAWING, + PFE_DRAWWORLD, + PFE_VIDEO, + PFE_SOUND, +}; + +static const char * GetAIName(int ai_index) +{ + if (!Company::IsValidAiID(ai_index)) return ""; + return Company::Get(ai_index)->ai_info->GetName(); +} + /** @hideinitializer */ static const NWidgetPart _framerate_window_widgets[] = { NWidget(NWID_HORIZONTAL), @@ -296,6 +373,7 @@ static const NWidgetPart _framerate_window_widgets[] = { struct FramerateWindow : Window { bool small; GUITimer next_update; + int num_active; struct CachedDecimal { StringID strid; @@ -369,9 +447,16 @@ struct FramerateWindow : Window { this->rate_drawing.SetRate(_pf_data[PFE_DRAWING].GetRate(), _pf_data[PFE_DRAWING].expected_rate); + int new_active = 0; for (PerformanceElement e = PFE_FIRST; e < PFE_MAX; e++) { this->times_shortterm[e].SetTime(_pf_data[e].GetAverageDurationMilliseconds(8), MILLISECONDS_PER_TICK); this->times_longterm[e].SetTime(_pf_data[e].GetAverageDurationMilliseconds(NUM_FRAMERATE_POINTS), MILLISECONDS_PER_TICK); + if (_pf_data[e].num_valid > 0) new_active++; + } + + if (new_active != this->num_active) { + this->num_active = new_active; + this->ReInit(); } } @@ -425,25 +510,32 @@ struct FramerateWindow : Window { break; case WID_FRW_TIMES_NAMES: { - int linecount = PFE_MAX - PFE_FIRST; size->width = 0; - size->height = FONT_HEIGHT_NORMAL * (linecount + 1) + VSPACING; - for (int line = 0; line < linecount; line++) { - Dimension line_size = GetStringBoundingBox(STR_FRAMERATE_GAMELOOP + line); + size->height = FONT_HEIGHT_NORMAL + VSPACING; + for (PerformanceElement e : DISPLAY_ORDER_PFE) { + if (_pf_data[e].num_valid == 0) continue; + Dimension line_size; + if (e < PFE_AI0) { + line_size = GetStringBoundingBox(STR_FRAMERATE_GAMELOOP + e); + } else { + SetDParam(0, e - PFE_AI0 + 1); + SetDParamStr(1, GetAIName(e - PFE_AI0)); + line_size = GetStringBoundingBox(STR_FRAMERATE_AI); + } size->width = max(size->width, line_size.width); + size->height += FONT_HEIGHT_NORMAL; } break; } case WID_FRW_TIMES_CURRENT: case WID_FRW_TIMES_AVERAGE: { - int linecount = PFE_MAX - PFE_FIRST; *size = GetStringBoundingBox(STR_FRAMERATE_CURRENT + (widget - WID_FRW_TIMES_CURRENT)); SetDParam(0, 999999); SetDParam(1, 2); Dimension item_size = GetStringBoundingBox(STR_FRAMERATE_MS_GOOD); size->width = max(size->width, item_size.width); - size->height += FONT_HEIGHT_NORMAL * linecount + VSPACING; + size->height += FONT_HEIGHT_NORMAL * this->num_active + VSPACING; break; } } @@ -456,7 +548,8 @@ struct FramerateWindow : Window { DrawString(r.left, r.right, y, heading_str, TC_FROMSTRING, SA_CENTER, true); y += FONT_HEIGHT_NORMAL + VSPACING; - for (PerformanceElement e = PFE_FIRST; e < PFE_MAX; e++) { + for (PerformanceElement e : DISPLAY_ORDER_PFE) { + if (_pf_data[e].num_valid == 0) continue; values[e].InsertDParams(0); DrawString(r.left, r.right, y, values[e].strid, TC_FROMSTRING, SA_RIGHT); y += FONT_HEIGHT_NORMAL; @@ -468,10 +561,16 @@ struct FramerateWindow : Window { switch (widget) { case WID_FRW_TIMES_NAMES: { /* Render a column of titles for performance element names */ - int linecount = PFE_MAX - PFE_FIRST; int y = r.top + FONT_HEIGHT_NORMAL + VSPACING; // first line contains headings in the value columns - for (int i = 0; i < linecount; i++) { - DrawString(r.left, r.right, y, STR_FRAMERATE_GAMELOOP + i, TC_FROMSTRING, SA_LEFT); + for (PerformanceElement e : DISPLAY_ORDER_PFE) { + if (_pf_data[e].num_valid == 0) continue; + if (e < PFE_AI0) { + DrawString(r.left, r.right, y, STR_FRAMERATE_GAMELOOP + e, TC_FROMSTRING, SA_LEFT); + } else { + SetDParam(0, e - PFE_AI0 + 1); + SetDParamStr(1, GetAIName(e - PFE_AI0)); + DrawString(r.left, r.right, y, STR_FRAMERATE_AI, TC_FROMSTRING, SA_LEFT); + } y += FONT_HEIGHT_NORMAL; } break; @@ -496,8 +595,14 @@ struct FramerateWindow : Window { /* Open time graph windows when clicking detail measurement lines */ int line = this->GetRowFromWidget(pt.y, widget, VSPACING, FONT_HEIGHT_NORMAL); if (line > 0) { - line -= 1; - ShowFrametimeGraphWindow((PerformanceElement)line); + /* Find the visible line that was clicked */ + for (PerformanceElement e : DISPLAY_ORDER_PFE) { + if (_pf_data[e].num_valid > 0) line--; + if (line == 0) { + ShowFrametimeGraphWindow(e); + break; + } + } } break; } @@ -549,7 +654,13 @@ struct FrametimeGraphWindow : Window { { switch (widget) { case WID_FGW_CAPTION: - SetDParam(0, STR_FRAMETIME_CAPTION_GAMELOOP + this->element); + if (this->element < PFE_AI0) { + SetDParam(0, STR_FRAMETIME_CAPTION_GAMELOOP + this->element); + } else { + SetDParam(0, STR_FRAMETIME_CAPTION_AI); + SetDParam(1, this->element - PFE_AI0 + 1); + SetDParamStr(2, GetAIName(this->element - PFE_AI0)); + } break; } } @@ -829,7 +940,10 @@ void ConPrintFramerate() " Viewport drawing", "Video output", "Sound mixing", + "AI/GS scripts total", + "Game script", }; + char ai_name_buf[128]; static const PerformanceElement rate_elements[] = { PFE_GAMELOOP, PFE_DRAWING, PFE_VIDEO }; @@ -848,8 +962,15 @@ void ConPrintFramerate() for (PerformanceElement e = PFE_FIRST; e < PFE_MAX; e++) { auto &pf = _pf_data[e]; if (pf.num_valid == 0) continue; + const char *name; + if (e < PFE_AI0) { + name = MEASUREMENT_NAMES[e]; + } else { + seprintf(ai_name_buf, lastof(ai_name_buf), "AI %d %s", e - PFE_AI0 + 1, GetAIName(e - PFE_AI0)), + name = ai_name_buf; + } IConsolePrintF(TC_LIGHT_BLUE, "%s times: %.2fms %.2fms %.2fms", - MEASUREMENT_NAMES[e], + name, pf.GetAverageDurationMilliseconds(count1), pf.GetAverageDurationMilliseconds(count2), pf.GetAverageDurationMilliseconds(count3)); diff --git a/src/framerate_type.h b/src/framerate_type.h index 8df9a279a1..3c54e03078 100644 --- a/src/framerate_type.h +++ b/src/framerate_type.h @@ -60,6 +60,23 @@ enum PerformanceElement { PFE_DRAWWORLD, ///< Time spent drawing world viewports in GUI PFE_VIDEO, ///< Speed of painting drawn video buffer. PFE_SOUND, ///< Speed of mixing audio samples + PFE_ALLSCRIPTS, ///< Sum of all GS/AI scripts + PFE_GAMESCRIPT, ///< Game script execution + PFE_AI0, ///< AI execution for player slot 1 + PFE_AI1, ///< AI execution for player slot 2 + PFE_AI2, ///< AI execution for player slot 3 + PFE_AI3, ///< AI execution for player slot 4 + PFE_AI4, ///< AI execution for player slot 5 + PFE_AI5, ///< AI execution for player slot 6 + PFE_AI6, ///< AI execution for player slot 7 + PFE_AI7, ///< AI execution for player slot 8 + PFE_AI8, ///< AI execution for player slot 9 + PFE_AI9, ///< AI execution for player slot 10 + PFE_AI10, ///< AI execution for player slot 11 + PFE_AI11, ///< AI execution for player slot 12 + PFE_AI12, ///< AI execution for player slot 13 + PFE_AI13, ///< AI execution for player slot 14 + PFE_AI14, ///< AI execution for player slot 15 PFE_MAX, ///< End of enum, must be last. }; DECLARE_POSTFIX_INCREMENT(PerformanceElement) @@ -81,6 +98,7 @@ public: PerformanceMeasurer(PerformanceElement elem); ~PerformanceMeasurer(); void SetExpectedRate(double rate); + static void SetInactive(PerformanceElement elem); static void Paused(PerformanceElement elem); }; diff --git a/src/game/game_core.cpp b/src/game/game_core.cpp index 2f95e26224..10b079bee3 100644 --- a/src/game/game_core.cpp +++ b/src/game/game_core.cpp @@ -15,6 +15,7 @@ #include "../company_func.h" #include "../network/network.h" #include "../window_func.h" +#include "../framerate_type.h" #include "game.hpp" #include "game_scanner.hpp" #include "game_config.hpp" @@ -31,8 +32,16 @@ /* static */ void Game::GameLoop() { - if (_networking && !_network_server) return; - if (Game::instance == NULL) return; + if (_networking && !_network_server) { + PerformanceMeasurer::SetInactive(PFE_GAMESCRIPT); + return; + } + if (Game::instance == NULL) { + PerformanceMeasurer::SetInactive(PFE_GAMESCRIPT); + return; + } + + PerformanceMeasurer framerate(PFE_GAMESCRIPT); Game::frame_counter++; diff --git a/src/lang/english.txt b/src/lang/english.txt index 3c5c7dcdf6..6c482f053f 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2747,6 +2747,9 @@ STR_FRAMERATE_DRAWING :{BLACK}Graphics STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} World viewports: STR_FRAMERATE_VIDEO :{BLACK}Video output: STR_FRAMERATE_SOUND :{BLACK}Sound mixing: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} GS/AI total: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Game script: +STR_FRAMERATE_AI :{BLACK} AI {NUM} {RAW_STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Game loop @@ -2761,6 +2764,9 @@ STR_FRAMETIME_CAPTION_DRAWING :Graphics render STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :World viewport rendering STR_FRAMETIME_CAPTION_VIDEO :Video output STR_FRAMETIME_CAPTION_SOUND :Sound mixing +STR_FRAMETIME_CAPTION_ALLSCRIPTS :GS/AI scripts total +STR_FRAMETIME_CAPTION_GAMESCRIPT :Game script +STR_FRAMETIME_CAPTION_AI :AI {NUM} {RAW_STRING} ############ End of leave-in-this-order diff --git a/src/openttd.cpp b/src/openttd.cpp index e876ffda77..6265b96849 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1407,8 +1407,11 @@ void StateGameLoop() BasePersistentStorageArray::SwitchMode(PSM_LEAVE_GAMELOOP); #ifndef DEBUG_DUMP_COMMANDS - AI::GameLoop(); - Game::GameLoop(); + { + PerformanceMeasurer framerate(PFE_ALLSCRIPTS); + AI::GameLoop(); + Game::GameLoop(); + } #endif UpdateLandscapingLimits(); From 13962a84753f203c83d2fadf460043e032f066de Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sun, 17 Feb 2019 16:31:41 +0100 Subject: [PATCH 381/622] Change: Framerate window can now scroll and resize --- src/framerate_gui.cpp | 92 +++++++++++++++++++++++--------- src/script/api/script_window.hpp | 1 + src/widgets/framerate_widget.h | 1 + 3 files changed, 70 insertions(+), 24 deletions(-) diff --git a/src/framerate_gui.cpp b/src/framerate_gui.cpp index 36ec7e1f2a..060b19a4a1 100644 --- a/src/framerate_gui.cpp +++ b/src/framerate_gui.cpp @@ -358,14 +358,20 @@ static const NWidgetPart _framerate_window_widgets[] = { NWidget(WWT_TEXT, COLOUR_GREY, WID_FRW_RATE_FACTOR), SetDataTip(STR_FRAMERATE_SPEED_FACTOR, STR_FRAMERATE_SPEED_FACTOR_TOOLTIP), EndContainer(), EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY), - NWidget(NWID_VERTICAL), SetPadding(6), SetPIP(0, 3, 0), - NWidget(NWID_HORIZONTAL), SetPIP(0, 6, 0), - NWidget(WWT_EMPTY, COLOUR_GREY, WID_FRW_TIMES_NAMES), - NWidget(WWT_EMPTY, COLOUR_GREY, WID_FRW_TIMES_CURRENT), - NWidget(WWT_EMPTY, COLOUR_GREY, WID_FRW_TIMES_AVERAGE), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_PANEL, COLOUR_GREY), + NWidget(NWID_VERTICAL), SetPadding(6), SetPIP(0, 3, 0), + NWidget(NWID_HORIZONTAL), SetPIP(0, 6, 0), + NWidget(WWT_EMPTY, COLOUR_GREY, WID_FRW_TIMES_NAMES), SetScrollbar(WID_FRW_SCROLLBAR), + NWidget(WWT_EMPTY, COLOUR_GREY, WID_FRW_TIMES_CURRENT), SetScrollbar(WID_FRW_SCROLLBAR), + NWidget(WWT_EMPTY, COLOUR_GREY, WID_FRW_TIMES_AVERAGE), SetScrollbar(WID_FRW_SCROLLBAR), + EndContainer(), + NWidget(WWT_TEXT, COLOUR_GREY, WID_FRW_INFO_DATA_POINTS), SetDataTip(STR_FRAMERATE_DATA_POINTS, 0x0), EndContainer(), - NWidget(WWT_TEXT, COLOUR_GREY, WID_FRW_INFO_DATA_POINTS), SetDataTip(STR_FRAMERATE_DATA_POINTS, 0x0), + EndContainer(), + NWidget(NWID_VERTICAL), + NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_FRW_SCROLLBAR), + NWidget(WWT_RESIZEBOX, COLOUR_GREY), EndContainer(), EndContainer(), }; @@ -374,6 +380,7 @@ struct FramerateWindow : Window { bool small; GUITimer next_update; int num_active; + int num_displayed; struct CachedDecimal { StringID strid; @@ -410,14 +417,19 @@ struct FramerateWindow : Window { CachedDecimal times_shortterm[PFE_MAX]; ///< cached short term average times CachedDecimal times_longterm[PFE_MAX]; ///< cached long term average times - static const int VSPACING = 3; ///< space between column heading and values + static const int VSPACING = 3; ///< space between column heading and values + static const int MIN_ELEMENTS = 5; ///< smallest number of elements to display FramerateWindow(WindowDesc *desc, WindowNumber number) : Window(desc) { this->InitNested(number); this->small = this->IsShaded(); this->UpdateData(); + this->num_displayed = this->num_active; this->next_update.SetInterval(100); + + /* Window is always initialised to MIN_ELEMENTS height, resize to contain num_displayed */ + ResizeWindow(this, 0, (max(MIN_ELEMENTS, this->num_displayed) - MIN_ELEMENTS) * FONT_HEIGHT_NORMAL); } virtual void OnRealtimeTick(uint delta_ms) @@ -456,6 +468,9 @@ struct FramerateWindow : Window { if (new_active != this->num_active) { this->num_active = new_active; + Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR); + sb->SetCount(this->num_active); + sb->SetCapacity(min(this->num_displayed, this->num_active)); this->ReInit(); } } @@ -511,7 +526,9 @@ struct FramerateWindow : Window { case WID_FRW_TIMES_NAMES: { size->width = 0; - size->height = FONT_HEIGHT_NORMAL + VSPACING; + size->height = FONT_HEIGHT_NORMAL + VSPACING + MIN_ELEMENTS * FONT_HEIGHT_NORMAL; + resize->width = 0; + resize->height = FONT_HEIGHT_NORMAL; for (PerformanceElement e : DISPLAY_ORDER_PFE) { if (_pf_data[e].num_valid == 0) continue; Dimension line_size; @@ -523,7 +540,6 @@ struct FramerateWindow : Window { line_size = GetStringBoundingBox(STR_FRAMERATE_AI); } size->width = max(size->width, line_size.width); - size->height += FONT_HEIGHT_NORMAL; } break; } @@ -535,7 +551,9 @@ struct FramerateWindow : Window { SetDParam(1, 2); Dimension item_size = GetStringBoundingBox(STR_FRAMERATE_MS_GOOD); size->width = max(size->width, item_size.width); - size->height += FONT_HEIGHT_NORMAL * this->num_active + VSPACING; + size->height += FONT_HEIGHT_NORMAL * MIN_ELEMENTS + VSPACING; + resize->width = 0; + resize->height = FONT_HEIGHT_NORMAL; break; } } @@ -544,15 +562,23 @@ struct FramerateWindow : Window { /** Render a column of formatted average durations */ void DrawElementTimesColumn(const Rect &r, StringID heading_str, const CachedDecimal *values) const { + const Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR); + uint16 skip = sb->GetPosition(); + int drawable = this->num_displayed; int y = r.top; DrawString(r.left, r.right, y, heading_str, TC_FROMSTRING, SA_CENTER, true); y += FONT_HEIGHT_NORMAL + VSPACING; - for (PerformanceElement e : DISPLAY_ORDER_PFE) { if (_pf_data[e].num_valid == 0) continue; - values[e].InsertDParams(0); - DrawString(r.left, r.right, y, values[e].strid, TC_FROMSTRING, SA_RIGHT); - y += FONT_HEIGHT_NORMAL; + if (skip > 0) { + skip--; + } else { + values[e].InsertDParams(0); + DrawString(r.left, r.right, y, values[e].strid, TC_FROMSTRING, SA_RIGHT); + y += FONT_HEIGHT_NORMAL; + drawable--; + if (drawable == 0) break; + } } } @@ -561,17 +587,26 @@ struct FramerateWindow : Window { switch (widget) { case WID_FRW_TIMES_NAMES: { /* Render a column of titles for performance element names */ + const Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR); + uint16 skip = sb->GetPosition(); + int drawable = this->num_displayed; int y = r.top + FONT_HEIGHT_NORMAL + VSPACING; // first line contains headings in the value columns for (PerformanceElement e : DISPLAY_ORDER_PFE) { if (_pf_data[e].num_valid == 0) continue; - if (e < PFE_AI0) { - DrawString(r.left, r.right, y, STR_FRAMERATE_GAMELOOP + e, TC_FROMSTRING, SA_LEFT); + if (skip > 0) { + skip--; } else { - SetDParam(0, e - PFE_AI0 + 1); - SetDParamStr(1, GetAIName(e - PFE_AI0)); - DrawString(r.left, r.right, y, STR_FRAMERATE_AI, TC_FROMSTRING, SA_LEFT); + if (e < PFE_AI0) { + DrawString(r.left, r.right, y, STR_FRAMERATE_GAMELOOP + e, TC_FROMSTRING, SA_LEFT); + } else { + SetDParam(0, e - PFE_AI0 + 1); + SetDParamStr(1, GetAIName(e - PFE_AI0)); + DrawString(r.left, r.right, y, STR_FRAMERATE_AI, TC_FROMSTRING, SA_LEFT); + } + y += FONT_HEIGHT_NORMAL; + drawable--; + if (drawable == 0) break; } - y += FONT_HEIGHT_NORMAL; } break; } @@ -593,8 +628,10 @@ struct FramerateWindow : Window { case WID_FRW_TIMES_CURRENT: case WID_FRW_TIMES_AVERAGE: { /* Open time graph windows when clicking detail measurement lines */ - int line = this->GetRowFromWidget(pt.y, widget, VSPACING, FONT_HEIGHT_NORMAL); - if (line > 0) { + const Scrollbar *sb = this->GetScrollbar(WID_FRW_SCROLLBAR); + int line = sb->GetScrolledRowFromWidget(pt.y - FONT_HEIGHT_NORMAL - VSPACING, this, widget, VSPACING, FONT_HEIGHT_NORMAL); + if (line != INT_MAX) { + line++; /* Find the visible line that was clicked */ for (PerformanceElement e : DISPLAY_ORDER_PFE) { if (_pf_data[e].num_valid > 0) line--; @@ -608,10 +645,17 @@ struct FramerateWindow : Window { } } } + + virtual void OnResize() + { + auto *wid = this->GetWidget(WID_FRW_TIMES_NAMES); + this->num_displayed = (wid->current_y - wid->min_y - VSPACING) / FONT_HEIGHT_NORMAL - 1; // subtract 1 for headings + this->GetScrollbar(WID_FRW_SCROLLBAR)->SetCapacity(this->num_displayed); + } }; static WindowDesc _framerate_display_desc( - WDP_AUTO, "framerate_display", 60, 40, + WDP_AUTO, "framerate_display", 0, 0, WC_FRAMERATE_DISPLAY, WC_NONE, 0, _framerate_window_widgets, lengthof(_framerate_window_widgets) diff --git a/src/script/api/script_window.hpp b/src/script/api/script_window.hpp index 3e8f4c3d56..fa584693af 100644 --- a/src/script/api/script_window.hpp +++ b/src/script/api/script_window.hpp @@ -1305,6 +1305,7 @@ public: WID_FRW_TIMES_NAMES = ::WID_FRW_TIMES_NAMES, WID_FRW_TIMES_CURRENT = ::WID_FRW_TIMES_CURRENT, WID_FRW_TIMES_AVERAGE = ::WID_FRW_TIMES_AVERAGE, + WID_FRW_SCROLLBAR = ::WID_FRW_SCROLLBAR, }; /** Widgets of the #FrametimeGraphWindow class. */ diff --git a/src/widgets/framerate_widget.h b/src/widgets/framerate_widget.h index 388599537c..2c82c85e5e 100644 --- a/src/widgets/framerate_widget.h +++ b/src/widgets/framerate_widget.h @@ -22,6 +22,7 @@ enum FramerateWindowWidgets { WID_FRW_TIMES_NAMES, WID_FRW_TIMES_CURRENT, WID_FRW_TIMES_AVERAGE, + WID_FRW_SCROLLBAR, }; /** Widgets of the #FrametimeGraphWindow class. */ From eeae4512ae6b5286aff600d82e612fc10fef5a76 Mon Sep 17 00:00:00 2001 From: PeterN Date: Sat, 23 Feb 2019 16:07:25 +0000 Subject: [PATCH 382/622] Fix #7003: Freetype fonts were scaled by both GUI and Font zoom levels. (#7267) --- src/fontcache.cpp | 14 ++++++-------- src/zoom_func.h | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/fontcache.cpp b/src/fontcache.cpp index 9b732ce1ed..604cc7374e 100644 --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -184,12 +184,12 @@ uint SpriteFontCache::GetGlyphWidth(GlyphID key) { SpriteID sprite = this->GetUnicodeGlyph(key); if (sprite == 0) sprite = this->GetUnicodeGlyph('?'); - return SpriteExists(sprite) ? GetSprite(sprite, ST_FONT)->width + ScaleGUITrad(this->fs != FS_NORMAL ? 1 : 0) : 0; + return SpriteExists(sprite) ? GetSprite(sprite, ST_FONT)->width + ScaleFontTrad(this->fs != FS_NORMAL ? 1 : 0) : 0; } int SpriteFontCache::GetHeight() const { - return this->height * (1 << (ZOOM_LVL_OUT_4X - _font_zoom)); + return ScaleFontTrad(this->height); } bool SpriteFontCache::GetDrawGlyphShadow() @@ -282,21 +282,19 @@ void FreeTypeFontCache::SetFontSize(FontSize fs, FT_Face face, int pixels) { if (pixels == 0) { /* Try to determine a good height based on the minimal height recommended by the font. */ - int scaled_height = ScaleGUITrad(_default_font_height[this->fs]); + int scaled_height = ScaleFontTrad(_default_font_height[this->fs]); pixels = scaled_height; TT_Header *head = (TT_Header *)FT_Get_Sfnt_Table(this->face, ft_sfnt_head); if (head != NULL) { /* Font height is minimum height plus the difference between the default * height for this font size and the small size. */ - int diff = scaled_height - ScaleGUITrad(_default_font_height[FS_SMALL]); + int diff = scaled_height - ScaleFontTrad(_default_font_height[FS_SMALL]); pixels = Clamp(min(head->Lowest_Rec_PPEM, 20) + diff, scaled_height, MAX_FONT_SIZE); } + } else { + pixels = ScaleFontTrad(pixels); } - - /* Apply user-specified font zoom. */ - pixels *= (1 << (ZOOM_LVL_OUT_4X - _font_zoom)); - this->used_size = pixels; FT_Error err = FT_Set_Pixel_Sizes(this->face, 0, pixels); diff --git a/src/zoom_func.h b/src/zoom_func.h index da266e35c6..0e8fa8c9ef 100644 --- a/src/zoom_func.h +++ b/src/zoom_func.h @@ -84,4 +84,24 @@ static inline int ScaleGUITrad(int value) return UnScaleGUI(value * ZOOM_LVL_BASE); } +/** + * Short-hand to apply font zoom level. + * @param value Pixel amount at #ZOOM_LVL_BEGIN (full zoom in). + * @return Pixel amount at #ZOOM_LVL_FONT (current interface size). + */ +static inline int UnScaleFont(int value) +{ + return UnScaleByZoom(value, ZOOM_LVL_FONT); +} + +/** + * Scale traditional pixel dimensions to Font zoom level. + * @param value Pixel amount at #ZOOM_LVL_BASE (traditional "normal" interface size). + * @return Pixel amount at #ZOOM_LVL_FONT (current interface size). + */ +static inline int ScaleFontTrad(int value) +{ + return UnScaleFont(value * ZOOM_LVL_BASE); +} + #endif /* ZOOM_FUNC_H */ From f240f61fb2813a7cc3d2ad130477039b2a4701fd Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 23 Feb 2019 19:45:45 +0100 Subject: [PATCH 383/622] Update: Translations from eints danish: 11 changes by nielsmh spanish (mexican): 11 changes by Absay hungarian: 100 changes by Brumi russian: 6 changes by Lone_Wolf croatian: 9 changes by VoyagerOne --- src/lang/afrikaans.txt | 2 + src/lang/arabic_egypt.txt | 2 + src/lang/basque.txt | 2 + src/lang/belarusian.txt | 2 + src/lang/brazilian_portuguese.txt | 2 + src/lang/bulgarian.txt | 2 + src/lang/catalan.txt | 2 + src/lang/croatian.txt | 11 +++ src/lang/czech.txt | 2 + src/lang/danish.txt | 13 ++++ src/lang/dutch.txt | 2 + src/lang/english_AU.txt | 2 + src/lang/english_US.txt | 2 + src/lang/esperanto.txt | 2 + src/lang/estonian.txt | 2 + src/lang/faroese.txt | 2 + src/lang/finnish.txt | 2 + src/lang/french.txt | 2 + src/lang/gaelic.txt | 2 + src/lang/galician.txt | 2 + src/lang/german.txt | 2 + src/lang/greek.txt | 2 + src/lang/hebrew.txt | 2 + src/lang/hungarian.txt | 103 ++++++++++++++++++++++++++++- src/lang/icelandic.txt | 2 + src/lang/indonesian.txt | 2 + src/lang/irish.txt | 2 + src/lang/italian.txt | 2 + src/lang/japanese.txt | 2 + src/lang/korean.txt | 2 + src/lang/latin.txt | 2 + src/lang/latvian.txt | 2 + src/lang/lithuanian.txt | 2 + src/lang/luxembourgish.txt | 2 + src/lang/malay.txt | 2 + src/lang/norwegian_bokmal.txt | 2 + src/lang/norwegian_nynorsk.txt | 2 + src/lang/polish.txt | 2 + src/lang/portuguese.txt | 2 + src/lang/romanian.txt | 2 + src/lang/russian.txt | 8 +++ src/lang/serbian.txt | 2 + src/lang/simplified_chinese.txt | 2 + src/lang/slovak.txt | 2 + src/lang/slovenian.txt | 2 + src/lang/spanish.txt | 2 + src/lang/spanish_MX.txt | 13 ++++ src/lang/swedish.txt | 2 + src/lang/tamil.txt | 2 + src/lang/thai.txt | 2 + src/lang/traditional_chinese.txt | 2 + src/lang/turkish.txt | 2 + src/lang/ukrainian.txt | 2 + src/lang/unfinished/chuvash.txt | 2 + src/lang/unfinished/frisian.txt | 2 + src/lang/unfinished/ido.txt | 2 + src/lang/unfinished/macedonian.txt | 2 + src/lang/unfinished/maltese.txt | 2 + src/lang/unfinished/marathi.txt | 2 + src/lang/unfinished/persian.txt | 2 + src/lang/unfinished/urdu.txt | 2 + src/lang/vietnamese.txt | 2 + src/lang/welsh.txt | 2 + 63 files changed, 263 insertions(+), 1 deletion(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index e6bd7552ad..3fd6ff7dae 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -985,6 +985,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normaal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dubbel groote STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quad grootte + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basis-grafikastel STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Kies die basis-grafikastel stel om te gebruik STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} verlore / korrupte ler{P "" s} diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index b44e9fa225..2f658115c7 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -946,6 +946,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :تقريب عا STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :تقريب ×2 STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :تقريب ×4 + + STR_GAME_OPTIONS_BASE_GRF :{BLACK} الواجهة الرسومية الاساسية STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK} اختر مجموعة الواجهة الرسومية STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} ملف مفقود او غير صالح diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 854b2819aa..e5ea6a873b 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -972,6 +972,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normala STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Tamaina doblea STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Tamaina laukoitza + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Grafiko basea markatu STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Aukeratu erabili beharreko grafiko paketea STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} galdutako/hautsitako artxiboa{P "" k} diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index d5122f6e5a..5560ef785b 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -1301,6 +1301,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Звычайн STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Падвоены STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Пачацвяроны + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Набор базавай ґрафікі STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Выбар базавага набору ґрафічных аб'ектаў STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} адсутнічаюч{P ы ых ых}/пашкоджан{P ы ых ых} файл{P "" ы аў} diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index e0c3c86b33..660e9caa7c 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -992,6 +992,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dobro STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quádruplo + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunto de gráficos base STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecionar o conjunto de gráficos base para usar STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} arquivo{P "" s} faltando/corrompido{P "" s} diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index ed65c760a1..50229f6d0a 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -976,6 +976,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Нормалн STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Двукратно STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Четирикратно + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Базов графичен набор STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Изберете базов графичен набор STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} липсващи/повредени файлове diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index eebe0792aa..a43b35106d 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -990,6 +990,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Doble STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quàdruple + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunt de gràfics base STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecciona el conjunt de gràfics base a utilitzar STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} arxiu{P "" s} absent{P "" s} o corromput{P "" s}. diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index b54c632081..f8064f6e5f 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -562,6 +562,7 @@ STR_TOOLBAR_SOUND_MUSIC :Zvuk/glazba ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Poslijednja poruka/vijest STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Povijest poruka +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Obriši sve poruke ############ range ends here ############ range for about menu starts @@ -1090,6 +1091,13 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normalno STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dvostruka veličina STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Četvorostruka veličina +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Veličina fonta +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Odaberite veličinu fonta za sučelje + +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normalno +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Dvostruka veličina +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Četvorostruka veličina + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Osnovni set grafike STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Odaberi osnovni grafički set za igru STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} datotek{P a e a} nedostaj{P e u e}/korumpiran{P a e o} @@ -2177,6 +2185,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Odspoji STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Poslužitelj je zaštićen. Unesite zaporku STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Tvrtka je zaštićena. Unesite zaporku +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Popis klijenata # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Popis klijenata @@ -3206,6 +3215,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Podmiti # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Ciljevi STR_GOALS_SPECTATOR_CAPTION :{WHITE}Globalni ciljevi +STR_GOALS_SPECTATOR :Globalni ciljevi STR_GOALS_GLOBAL_TITLE :{BLACK}Globalni ciljevi: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Nijedan - @@ -3254,6 +3264,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klikni n # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Priča STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Globalna priča +STR_STORY_BOOK_SPECTATOR :Globalna knjiga priča STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Stranica {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Preskoči na specifičnu stranicu odabravši je iz liste. diff --git a/src/lang/czech.txt b/src/lang/czech.txt index adbbbc0c9b..2e622b1422 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1076,6 +1076,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normální STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dvojnásobná velikost STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Čtyřnásobná velikost + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Základní sada grafiky STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Zvol základní sadu grafiky STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} chybějící{P "" "" ch}/poškozen{P ý é ých} soubor{P "" y ů} diff --git a/src/lang/danish.txt b/src/lang/danish.txt index e5c94dc3e2..4da1f15e5d 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -995,6 +995,13 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dobbelt størrelse STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quad (4x) størrelse +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Skriftstørrelse +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Vælg skriftstørrelsen du ønsker i grænsefladen + +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Dobbelt størrelse +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Quad (4x) størrelse + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basis-grafiksæt STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Vælg det basis-grafiksæt der skal bruges STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} forsvund{P en ne}/ødelagt{P "" e} fil{P "" er} @@ -2740,6 +2747,9 @@ STR_FRAMERATE_DRAWING :{BLACK}Grafik-t STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Landskabsvisninger: STR_FRAMERATE_VIDEO :{BLACK}Grafik-output: STR_FRAMERATE_SOUND :{BLACK}Lydmiksning: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} Spilscript/AI total: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Spilscript: +STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Spillogik @@ -2754,6 +2764,9 @@ STR_FRAMETIME_CAPTION_DRAWING :Grafik-tegning STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Tegning af landskabsvisninger STR_FRAMETIME_CAPTION_VIDEO :Grafik-output STR_FRAMETIME_CAPTION_SOUND :Lydmiksning +STR_FRAMETIME_CAPTION_ALLSCRIPTS :Spil/AI script total +STR_FRAMETIME_CAPTION_GAMESCRIPT :Spilscript +STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING} ############ End of leave-in-this-order diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 67a6626cd0..3114b6cebe 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -995,6 +995,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normaal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dubbele grootte STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :4x Grootte + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basisset voor graphics STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Kiest de te gebruiken basisset voor grafische elementen STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} ontbrekend{P "" e}/corrupt{P "" e} bestand{P "" en} diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index fcc038c0d3..4ca2bf1b59 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -970,6 +970,8 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :other + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Base graphics set STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Select the base graphics set to use STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} missing/corrupted file{P "" s} diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index d45f80a242..1afb74f976 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -995,6 +995,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Double size STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quad size + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Base graphics set STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Select the base graphics set to use STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} missing/corrupted file{P "" s} diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index c2b1c58fa0..c82ca05527 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -967,6 +967,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normala STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Duobla grandeco STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Kvaroble grandeco + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Baza grafikaro STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selektu la uzendan bazgrafikaron STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} mankanta{P "" j}/koruptita{P "" j} dosiero{P "" j} diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 191b235e77..458c9e9e15 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1043,6 +1043,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Tavaline STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Topeltsuurus STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Ruudu suurus + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Alusgraafika kogu STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Valib kasutatava alusgraafika kogu STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} puuduv{P "" ad}/viga{P ne sed} fail{P "" id} diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index cd79c55d1e..b738ba9bbe 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -951,6 +951,8 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :annað + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Base grafikk sett STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Vel ta base grafikk setti tú vil brúka STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} vantandi/oyðiløgd fíl{P a ir} diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 7b4deb5d34..a8760c1849 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -991,6 +991,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Tavallinen STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Kaksinkertainen STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Nelinkertainen + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Perusgrafiikat STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Valitse käytettävät perusgrafiikat STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} puuttuva{P "" a}/korruptoitunut{P "" ta} tiedosto{P "" a} diff --git a/src/lang/french.txt b/src/lang/french.txt index a76367ccc0..aa9dc639a7 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -996,6 +996,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Taille double STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Taille quadruple + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Graphiques de base STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Sélectionner les graphiques de base à utiliser STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} fichier{P "" s} manquant{P "" s}/corrompu{P "" s} diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index f986c8531f..f2096687f1 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -1189,6 +1189,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Àbhaisteach STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dà uiread a mheud STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Ceithir uiread a mheud + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Seata grafaigeachd bunasach STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Tagh an seata grafaigeachd bunasach a chleachdas tu STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} {P fhaidhle fhaidhle faidhlichean faidhle} a dhìth/coirbte diff --git a/src/lang/galician.txt b/src/lang/galician.txt index d51ba329bd..f301e71f1f 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -985,6 +985,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dobre tamaño STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Tamaño do cadro + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conxunto básico de gráficos STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecciona o conxunto de gráficos básico a empregar STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} arquivo{P "" s} inexistente{P "" s}/erróneo{P "" s} diff --git a/src/lang/german.txt b/src/lang/german.txt index fdefa197c5..7bdc25f3ea 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -995,6 +995,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Doppelt STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Vierfach + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basisgrafiken STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Zu benutzendes Set an Basisgrafiken auswählen STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} fehlende/fehlerhafte Datei{P "" en} diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 74e30b71ca..b61abc44ae 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1099,6 +1099,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Κανονικ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Διπλό μέγεθος STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Τετραπλό μέγεθος + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Βασικό σετ γραφικών STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Επιλογή του βασικού σετ γραφικών που θα χρησιμοποιηθεί STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} αρχεί{P ο α} που λείπ{P ει ουν} ή είναι κατεστραμμέν{P ο α} diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index c9859a947c..05fb5fe1d7 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1003,6 +1003,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :רגיל STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :גודל כפול STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :גודל מרובע + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}ערכת גרפיקה בסיסית STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}בחר בערכת גרפיקה בסיסית לשימוש STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{P 0 "קובץ " ""}{NUM}{P "" " קבצים"} חסר{P 0 "" ים}/הושחט{P 0 "" ו} diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 6b549fe07f..0ba1743946 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -252,6 +252,8 @@ STR_COLOUR_ORANGE :Narancssárga STR_COLOUR_BROWN :Barna STR_COLOUR_GREY :Szürke STR_COLOUR_WHITE :Fehér +STR_COLOUR_RANDOM :Véletlenszerű +STR_COLOUR_DEFAULT :Alapértelmezett # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mi/h @@ -527,6 +529,7 @@ STR_TOOLBAR_SOUND_MUSIC :Hang/zene ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Legutóbbi üzenet/újsághír STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Előző üzenetek +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Az összes üzenet törlése ############ range ends here ############ range for about menu starts @@ -538,6 +541,7 @@ STR_ABOUT_MENU_SCREENSHOT :Képmentés STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Teljes nagyítású képmentés STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Alapértelmezett nagyítású képmentés STR_ABOUT_MENU_GIANT_SCREENSHOT :Képmentés teljes térképről +STR_ABOUT_MENU_SHOW_FRAMERATE :FPS ablak STR_ABOUT_MENU_ABOUT_OPENTTD :Az 'OpenTTD'-ről STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite elhelyező STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Befoglaló doboz ki/bekapcsolása @@ -713,6 +717,7 @@ STR_MUSIC_RULER_MARKER :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Nincs elérhető zene STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Szám STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Cím @@ -733,11 +738,14 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Véletle STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}A számkiválasztó ablak megjelenítése # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Zenei lejátszási lista - '{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Számlista STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}"{STRING}" Műsora STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Törlés +STR_PLAYLIST_CHANGE_SET :{BLACK}Lista választása STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Az aktuális műsor törlése (csak Saját 1 és Saját 2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}A zenei alapcsomag megváltoztatása STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Kattints a zeneszámra a zenei műsorhoz való hozzáadására (csak Saját 1 és Saját 2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Kattints a zeneszámra annak az aktuális zenei műsorból való eltávolításához (csak Saját 1 és Saját 2 esetén) @@ -874,6 +882,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Elnök) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} támogatásával új várost alapítottak {TOWN} néven! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Új várost alapítottak {TOWN} néven! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Új {STRING.t} építenek {TOWN} közelében! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Új {STRING.t} ültettek {TOWN} közelében! @@ -986,6 +995,8 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Dél-afrikai Ra STR_GAME_OPTIONS_CURRENCY_CUSTOM :Saját... STR_GAME_OPTIONS_CURRENCY_GEL :Grúz Lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Iráni Riál (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Új Orosz Rubel (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Mexikói Peso (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Közúti járművek @@ -1048,6 +1059,13 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normál STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dupla méret STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Négyszeres méret +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Betűméret +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Használni kívánt betűméret kiválasztása + +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normál +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Dupla méret +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Négyszeres méret + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Grafikus alapcsomag STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}A játékhoz használandó grafikus alapcsomag kiválasztása STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} hiányzó/hibás fájl @@ -1315,6 +1333,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}A beáll STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Az infrastruktúra fenntartási költségének engedélyezése: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Bekapcsolva az infrastruktúrának fenntartási költsége van. A költség hatványozottan nő a hálózatnagysággal, nagyobb hatással a nagyobb vállalatokra mint a kisebbekre +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :A vállalat kezdő színsémája: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :A vállalat színsémája a játék kezdetén STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Repülőterek nem avulnak el: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Bekapcsolva minden repülőtértípus örökké elérhető marad bevezetése után @@ -1399,6 +1419,12 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Talaj színe a STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Zöld STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Sötétzöld STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Sötétkék +STR_CONFIG_SETTING_SCROLLMODE :A látkép mozgatása: {STRING} +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :A látkép mozgatásának módja +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :A látkép mozgatása jobb egérgombbal, fix kurzorral +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :A térkép mozgatása jobb egérgombbal, fix kurzorral +STR_CONFIG_SETTING_SCROLLMODE_RMB :A térkép mozgatása jobb egérgombbal +STR_CONFIG_SETTING_SCROLLMODE_LMB :A térkép mozgatása bal egérgombbal STR_CONFIG_SETTING_SMOOTH_SCROLLING :Finomított nézőpont-görgetés: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Beállítható, hogy a fő nézet hogyan mozogjon egy adott pozícióra a térképre kattintáskor ha egy adott objektumra történik mozgás. Bekapcsolva a nézet egyenletesen mozog, kikapcsolva közvetlenül a kijelölt helyre ugrik STR_CONFIG_SETTING_MEASURE_TOOLTIP :Területinformációk mutatása építési eszközök használatakor: {STRING} @@ -1867,6 +1893,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Aktuáli STR_CHEAT_SETUP_PROD :{LTBLUE}A nyersanyagüzemek termelése változtatható: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}{COMPANY} színsémája STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Általános színsémák mutatása STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Vonat színsémák mutatása @@ -2126,6 +2153,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Megszak STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}A szerver jelszóval van védve. Írd be STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}A vállalat jelszóval van védve. Írd be +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Kliens lista # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Kliens lista @@ -2341,6 +2369,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Rakomán STR_LINKGRAPH_LEGEND_ALL :{BLACK}Mind STR_LINKGRAPH_LEGEND_NONE :{BLACK}Nincs STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Megjelenítendő cégek kiválasztása +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}nem használt @@ -2750,9 +2779,58 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-2019 Az OpenTTD csapat # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}FPS ablak +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Szimuláció: {STRING} +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}A másodpercenként szimulált játékbeli tickek száma. +STR_FRAMERATE_RATE_BLITTER :{BLACK}A grafika képkockasűrűsége: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}A másodpercenként renderelt képkockák száma. +STR_FRAMERATE_SPEED_FACTOR :{BLACK}A játék pillanatnyi sebessége: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Milyen gyorsan fut a játék, viszonyítva az elvárt sebességhez normál játéksebesség esetén. +STR_FRAMERATE_CURRENT :{WHITE}Pillanatnyi +STR_FRAMERATE_AVERAGE :{WHITE}Átlagos +STR_FRAMERATE_DATA_POINTS :{BLACK}Adatok {COMMA} mérés alapján +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} képkocka/másodperc +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} képkocka/másodperc +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} képkocka/másodperc +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{BLACK}Játékciklus összesen: +STR_FRAMERATE_GL_ECONOMY :{BLACK} Árukezelés: +STR_FRAMERATE_GL_TRAINS :{BLACK} Vonat tickek: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Közúti jármű tickek: +STR_FRAMERATE_GL_SHIPS :{BLACK} Hajó tickek: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Repülőgép tickek: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Világ tickek: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Kapcsolati gráf: +STR_FRAMERATE_DRAWING :{BLACK}Renderelés: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Világ látképek: +STR_FRAMERATE_VIDEO :{BLACK}Videokimenet: +STR_FRAMERATE_SOUND :{BLACK}Hangkeverés: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} Játékszkript/MI összesen: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Játékszkript: +STR_FRAMERATE_AI :{BLACK} MI {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Játékciklus +STR_FRAMETIME_CAPTION_GL_ECONOMY :Árukezelés +STR_FRAMETIME_CAPTION_GL_TRAINS :Vonat tickek +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Közúti jármű tickek +STR_FRAMETIME_CAPTION_GL_SHIPS :Hajó tickek +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Repülőgép tickek +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Világ tickek +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Kapcsolati gráf +STR_FRAMETIME_CAPTION_DRAWING :Renderelés +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Világ látképek +STR_FRAMETIME_CAPTION_VIDEO :Videokimenet +STR_FRAMETIME_CAPTION_SOUND :Hangkeverés +STR_FRAMETIME_CAPTION_ALLSCRIPTS :Játékszkriptek/MI-k összesen +STR_FRAMETIME_CAPTION_GAMESCRIPT :Játékszkript +STR_FRAMETIME_CAPTION_AI :MI {NUM} {STRING} ############ End of leave-in-this-order @@ -2778,6 +2856,9 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Részlet STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nincs elérhető információ STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Szűrő: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Fájl felülírása +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Biztos vagy benne, hogy felülírod a létező fájlt? STR_SAVELOAD_OSKTITLE :{BLACK}Add meg a játékmentés nevét @@ -2895,7 +2976,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Vezió: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. kompatibilis verzió: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paletta: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Alapértelmezett (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Alapértelmezett (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Régi (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Régi (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Paraméterek: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Nincs STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Nem érhető el információ STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Fájl nem található @@ -2976,6 +3062,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Ál-sprite táv STR_NEWGRF_ERROR_GRM_FAILED :Kért GRF források nem elérhetőek (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} kikapcsolva {STRING} által STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Érvénytelen/ismeretlen sprite szerkezet formátum (sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Túl sok érték a tulajdonságlistában (sprite {3:NUM}, property {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Érvénytelen termelési callback gazdasági épületben (sprite {3:NUM}, "{1:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Figyelem! @@ -3040,6 +3128,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Felirat STR_TOWN_DIRECTORY_CAPTION :{WHITE}Városok STR_TOWN_DIRECTORY_NONE :{ORANGE}- Nincs - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Város){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Városnevek - kattints egy névre a város megnézéséhez. Ctrl+kattintás esetén új látképet nyit a város pozíciójára STR_TOWN_POPULATION :{BLACK}Világnépesség: {COMMA} @@ -3047,6 +3136,7 @@ STR_TOWN_POPULATION :{BLACK}Világn STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Város) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Lakosság: {ORANGE}{COMMA}{BLACK} Házak: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} a legutóbbi hónapban: {ORANGE}{COMMA}{BLACK} maximum: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}A város növekedéséhez szükséges rakomány: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} szükséges STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} szükséges télen @@ -3099,6 +3189,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}A megí # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} céljai STR_GOALS_SPECTATOR_CAPTION :{WHITE}Globális célok +STR_GOALS_SPECTATOR :Globális célok STR_GOALS_GLOBAL_TITLE :{BLACK}Globális célok: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Nincs - @@ -3147,6 +3238,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Kattints # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} naplója STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Globális napló +STR_STORY_BOOK_SPECTATOR :Globális napló STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :{NUM}. oldal STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Ugrás tetszőleges oldalra @@ -3351,6 +3443,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}A fő n STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Termelési szint: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}A gyár bejelentette a közelgő bezárását! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Elfogad: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Termel: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Elfogad: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} @@ -3408,6 +3503,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Csoporto STR_GROUP_CREATE_TOOLTIP :{BLACK}Csoport létrehozásához kattints ide STR_GROUP_DELETE_TOOLTIP :{BLACK}Kijelölt csoport törlése STR_GROUP_RENAME_TOOLTIP :{BLACK}Kijelölt csoport átnevezése +STR_GROUP_LIVERY_TOOLTIP :{BLACK}A kiválasztott csoport színsémájának megváltoztatása STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Csoport teljes listás automata csere alóli mentessége STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Csoport törlése @@ -3451,6 +3547,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapacit STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Meghajtott vagonok: {GOLD}+{POWER}{BLACK} Súly: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Átalakítható: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Minden rakomány típusra +STR_PURCHASE_INFO_NONE :Semmi STR_PURCHASE_INFO_ALL_BUT :Mindenre, kivéve {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Maximális vonóerő: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Hatótávolság: {GOLD}{COMMA} mező @@ -3850,6 +3947,7 @@ STR_ORDER_CONDITIONAL_AGE :Kor (év) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Javításra szorul STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Mindig STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Hátralévő élettartam (év) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maximális megbízhatóság STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Hogyan viszonyul a jármű kiválasztott adata a megadott értékhez STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :egyenlő @@ -4282,6 +4380,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... ez e STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... az út a másik irányba vezet STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... áthaladó megállóhelyeken nem lehet kanyar STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... áthaladó megállóhelyeken nem lehet elágazás +STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... az út egyirányú vagy blokkolt # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Nem lehet eltávolítani az állomás részét... @@ -4350,7 +4449,7 @@ STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Nem lehe STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Először el kell távolítani a jelzőket STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Nincs megfelelő vasúti pálya STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Előbb le kell rombolnod a vasúti pályát -STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Az út egyirányú vagy blokkolt +STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}... az út egyirányú vagy blokkolt STR_ERROR_CROSSING_DISALLOWED :{WHITE}Ehhez a síntipushoz nem megengedett vasúti átjárók építése STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Nem helyezhetsz ide jelzőt... STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Nem építhetsz ide vasúti pályát... @@ -4533,6 +4632,8 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Az eredeti Tran STR_BASESOUNDS_WIN_DESCRIPTION :Az eredeti Transport Tycoon Deluxe Windows verziójának hangjai. STR_BASESOUNDS_NONE_DESCRIPTION :Hang alapcsomag hangok nélkül. STR_BASEMUSIC_WIN_DESCRIPTION :Az eredeti Transport Tycoon Deluxe Windows verziójának zenéje. +STR_BASEMUSIC_DOS_DESCRIPTION :Az eredeti Transport Tycoon Deluxe DOS verziójának zenéje. +STR_BASEMUSIC_TTO_DESCRIPTION :Az eredeti Transport Tycoon (az első változat és a World Editor) DOS verziójának zenéje. STR_BASEMUSIC_NONE_DESCRIPTION :Zenei alapcsomag zene nélkül. ##id 0x2000 diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 9bcba9e44c..44f3b40598 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -950,6 +950,8 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :annað + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Grunngrafík STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Nota grunngrafíkina STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} týnd{P "" ar} eða ónýt{P "" ar} skrá{P "" r} diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 7d8d32e552..fe1991d835 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -989,6 +989,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Kali dua STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Kali empat + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Set Grafik Dasar STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Pilih grafik dasar yang digunakan STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} berkas hilang atau rusak diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 5f9eec349a..73a86c940b 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -984,6 +984,8 @@ 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_BASE_GRF :{BLACK}Sraith graifice bunaidh STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Roghnaigh an sraith grafaice bunaidh le húsáid STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} {P ch ch ch gc c}omhad ar iarraidh/truaillithe diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 3a5e89c23f..503a0ed22d 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -997,6 +997,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normale STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Doppia STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quadrupla + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Pacchetto grafico di base STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Seleziona il pacchetto grafico di base da utilizzare STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} file mancant{P e i}/corrott{P o i} diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index cd5d36d3d8..d9291ebcd2 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -984,6 +984,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :通常 STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :2倍 STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :4倍 + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}基本グラフィックセット STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}使用するグラフィックセットを選択します STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}見つからないか破損しているファイルが{NUM}個あります diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 4b97fd1aab..13c7c78159 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -995,6 +995,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :보통 STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :2배 크기 STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :4배 크기 + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}기본 그래픽 세트 STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}사용하실 기본 그래픽을 선택하세요. STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM}개 파일 손실 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index df06b949cc..ea71713907 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -1176,6 +1176,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Solita STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Duplex STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quadruplex + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Fundamentum graphicum STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Eligere fundamentum graphicum adhibendum STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} fascicul{P us i} absen{P s tes}/corrupt{P us i} diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 45c8aba165..9ab4dd48cc 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -983,6 +983,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Parasts STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Divkāršs STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Četrkāršs + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Pamata grafikas kopa STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Atlasīt lietošanai pamata grafikas kopu STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} iztrūkstošs/bojāts fail{P s i ""} diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 709b756727..f030ba2b4f 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1189,6 +1189,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normalus STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dvigubas STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Trigubas + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Bazinis grafikos rinkinys STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Pasirinkti naudojimui bazinę grafikos rinkinį STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} trūkstam{P a ų os}/sugadint{P a ų os} byl{P a ų os} diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 696a9f8c20..8f8769d43d 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -984,6 +984,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Duebel STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Véierfach + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basis Grafikset STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Wielt de Basis Grafikset dee soll benotzt ginn STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} fehlend/korrupt Datei{P "" en} diff --git a/src/lang/malay.txt b/src/lang/malay.txt index da858ddc0e..0a0c8eb026 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -959,6 +959,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Biasa STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Saiz berganda STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Saiz kuad + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Set grafik asas STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Pilih set grafik asas untuk digunakan STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} fail hilang/rosak diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index a084a7b9c8..79114a2e18 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -997,6 +997,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :2 ganger størrelse STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :4 ganger størrelse + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Grafikksett STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Velg grafikksett som skal brukes STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} manglende/ødelagt{P "" e} fil{P "" er} diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index f723f1e52e..757ffe25ee 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -986,6 +986,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dobbel størrelse STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Firedobbel størrelse + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Grafikksett STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Vel grafikksett som skal nyttast STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} manglande/øydelagd{P "" e} fil{P "" er} diff --git a/src/lang/polish.txt b/src/lang/polish.txt index f5082958ac..046f06553b 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1373,6 +1373,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normalne STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Podwójny STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Poczwórny + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Podstawowy zestaw grafik STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Wybierz podstawowy zestaw grafik do użycia STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} brak/uszkodzony plik{P "" i ów} diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 8752e11eeb..cb70ceeae3 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -996,6 +996,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dobro do tamanho STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quádruplo do tamanho + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunto de gráficos base STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Seleccione o conjunto de gráficos base a usar STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} ficheiro{P "" s} que falta{P "" m} / corrupto{P "" s} diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 0292890939..31986c499b 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -985,6 +985,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normală STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Mărime dublă STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Mărime împătrită + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Set grafic de bază STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selectează setul grafic de bază utilizat în joc STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} fişier{P "" "e"} lipsă/corupt{P "" e} diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 1d7d5826c0..ad9d13c653 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1140,6 +1140,13 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Обычный STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Удвоенный STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Учетверённый +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Размер шрифта +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Выберите размер шрифта, используемого в игре + +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Нормальный +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Двукратный +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Четырёхкратный + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Базовый набор графики STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Выбрать базовый набор графики STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} отсутствующи{P й х х}/повреждённы{P й х х} файл{P "" а ов} @@ -2920,6 +2927,7 @@ STR_FRAMERATE_DRAWING :{BLACK}Отри STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Дополнительные окна: STR_FRAMERATE_VIDEO :{BLACK}Вывод на экран: STR_FRAMERATE_SOUND :{BLACK}Обработка звука: +STR_FRAMERATE_AI :{BLACK} ИИ {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Расчёт игрового цикла diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 57ef5b465f..20a813b38a 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -1183,6 +1183,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normalna velič STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Uvećavajte veličinu dva puta STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Uvećavajte veličinu četiri puta + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Osnovni skup grafika STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Odaberite željeni skup osnovnih grafika STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} datotek{P a e a} nedostaj{P e u e}/neispravn{P a o o} diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 1ed44f500e..27c35cdabd 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -989,6 +989,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :正常大小 STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :两倍大小 STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :四倍大小 + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}基础图形组 STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}选择要使用的基础图形组 STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} 文件{}未找到或不正确 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 1abdc762e2..4ba647de92 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1052,6 +1052,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normálne STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dvojnásobná veľkosť STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Štvornásobná veľkosť + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Základná sada grafiky STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Zvoľte sadu grafiky, ktorá má byť použitá STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} chýbajúci/poškodený súbor{P "" "y" "ov"} diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index dadf5aaee0..4de468b497 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1137,6 +1137,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normalno STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dvojna velikost STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Velikost kvadrata + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Osnovni komplet grafik STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Izberi osnovni komplet grafik za uporabo STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} manjkajoč{P a i e ih}/okvarjen{P a i e ih} datotek{P a i e ""} diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 4c7c78c665..79a0dfac19 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -994,6 +994,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Tamaño doble STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Tamaño cuádruple + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunto de gráficos base STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecciona el conjunto de gráficos base a usar STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} archivo{P "" s} perdido{P "" s} o corrupto{P "" s} diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 23bb53f691..871fbc70a3 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -996,6 +996,13 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Doble STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Cuádruple +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Tamaño de letra +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Elegir qué tamaño de letra usar en la interfaz + +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Doble +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Cuádruple + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Gráficos base STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Elegir los gráficos base STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} archivo{P "" s} perdido{P "" s} o con errores @@ -2741,6 +2748,9 @@ STR_FRAMERATE_DRAWING :{BLACK}Presenta STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Ventanas de vista generales: STR_FRAMERATE_VIDEO :{BLACK}Salida de video: STR_FRAMERATE_SOUND :{BLACK}Mezcla de sonido: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} Scripts en total: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Script de juego: +STR_FRAMERATE_AI :{BLACK} IA {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Bucle de juego @@ -2755,6 +2765,9 @@ STR_FRAMETIME_CAPTION_DRAWING :Presentación d STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Presentación de ventanas de vista generales STR_FRAMETIME_CAPTION_VIDEO :Salida de video STR_FRAMETIME_CAPTION_SOUND :Mezcla de sonido +STR_FRAMETIME_CAPTION_ALLSCRIPTS :Scripts de juego e IA en total +STR_FRAMETIME_CAPTION_GAMESCRIPT :Script de juego +STR_FRAMETIME_CAPTION_AI :IA {NUM} {STRING} ############ End of leave-in-this-order diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index f28fb091af..d1e2094ee4 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -994,6 +994,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dubbel storlek STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Fyrdubbel storlek + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Grafikpaket som standard STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Välj vilket grafikpaket som ska användas som standard STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} saknad{P "" e}/trasig{P "" a} fil{P "" er} diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 0d51265e3a..13e4772d5c 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -946,6 +946,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :சராசர STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :இரண்டு மடங்கு STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :நான்கு மடங்கு + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}அடிப்படை அசைவூட்டம் STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}பயன்படுத்தப்போகும் அடிப்படை அசைவூட்டத்தினை தேர்ந்தெடுக்கவும் STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} இல்லாத/பிழையான கோப்பு{P "" கள்} diff --git a/src/lang/thai.txt b/src/lang/thai.txt index a3c800b663..1c5d4400d3 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -971,6 +971,8 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :อื่นๆ STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}ขนาดของแผงควบคุม + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}ตั้งค่า Graphic พื้นฐาน STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}เลือกและตั้งค่าฐานกราฟิกที่จะใช้ STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} ไฟล์สูญหายหรือไม่สมบูรณ์ diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 7e90e93d18..7ddf4fbd3e 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -984,6 +984,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :正常大小 STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :兩倍大小 STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :四倍大小 + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}基本圖形集 STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}選擇要使用的基本圖形集 STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} 檔案遺失/損毀 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index abbb2929dc..9be9cf4590 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -996,6 +996,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :İki kat büyük STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Dört kat büyük + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Temel grafik kümesi STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Kullanılacak temel grafik kümesini seçin STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} kayıp/bozuk dosya diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 733f47949a..d13654d540 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1113,6 +1113,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Нормаль STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Подвійний розмір STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Почетверний розмір + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Базовий набір графіки STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Оберіть, яку основну графіку використовувати STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} відсутн{P ій іх іх}/пошкоджен{P ий их их} файл{P "" а ів} diff --git a/src/lang/unfinished/chuvash.txt b/src/lang/unfinished/chuvash.txt index 5598dd1da0..7366b99fcf 100644 --- a/src/lang/unfinished/chuvash.txt +++ b/src/lang/unfinished/chuvash.txt @@ -519,6 +519,8 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :расна + + # Custom currency window diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index 4cb04f9715..4d4101b1aa 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -983,6 +983,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normaal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dûbele grutte STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Fjouwerdûbele grutte + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basisset for ôfbyldings STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selektearje de basis ôfbyldingsset om te brûken STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} ûntbrekke{P "" nde}/korrupt{P "" e} bestân diff --git a/src/lang/unfinished/ido.txt b/src/lang/unfinished/ido.txt index 4f353acaaf..dcc3027782 100644 --- a/src/lang/unfinished/ido.txt +++ b/src/lang/unfinished/ido.txt @@ -481,6 +481,8 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :altra + + # Custom currency window diff --git a/src/lang/unfinished/macedonian.txt b/src/lang/unfinished/macedonian.txt index af62c00a81..c080592407 100644 --- a/src/lang/unfinished/macedonian.txt +++ b/src/lang/unfinished/macedonian.txt @@ -805,6 +805,8 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_1_MONTH :Секој ме + + # Custom currency window diff --git a/src/lang/unfinished/maltese.txt b/src/lang/unfinished/maltese.txt index ac07641452..f25027744e 100644 --- a/src/lang/unfinished/maltese.txt +++ b/src/lang/unfinished/maltese.txt @@ -414,6 +414,8 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :oħrajn + + # Custom currency window diff --git a/src/lang/unfinished/marathi.txt b/src/lang/unfinished/marathi.txt index b6a39a168d..cfc34dcc4b 100644 --- a/src/lang/unfinished/marathi.txt +++ b/src/lang/unfinished/marathi.txt @@ -759,6 +759,8 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :अन्य + + # Custom currency window diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index cbacd30103..cf9c0098ae 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -969,6 +969,8 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :دیگر STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :دو برابر + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}بسته گرافیک پایه STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}بسته گرافیک پایه را انتخاب کنید STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} فایل وجود ندارد یا خراب است diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index 752e471ef5..9f11fa11de 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -946,6 +946,8 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :دیگر + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}بُنیادی گرافک سیٹ STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}بُنیادی گرافک سیٹ اختیار کریں STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} missing/corrupted file{P "" s} diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 548ba33790..6b3c288342 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -991,6 +991,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Bình thường STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Gấp 2 lần STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Gấp 4 lần + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Gói đồ họa STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Chọn gói đồ họa để sử dụng STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} thiếu/hỏng file diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 7813fce521..4e8e0b14fb 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -984,6 +984,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Arferol STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dyblyg STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Pedwarplyg + + STR_GAME_OPTIONS_BASE_GRF :{BLACK}Set raffeg sylfaenol STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Dewiswch y set raffeg sylfaenol i'w defnyddio STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} ffeil ar goll/llygredig From 87ebfe1227ecc811a18d9b9c791e3e21da3f5eb2 Mon Sep 17 00:00:00 2001 From: PeterN Date: Sat, 23 Feb 2019 19:19:41 +0000 Subject: [PATCH 384/622] Fix #7004: Mark linkgraph dirty to be rebuilt on next draw call. (#7265) Previously the linkgraph was rebuilt before the viewport extents were finalized. --- src/linkgraph/linkgraph_gui.cpp | 6 +++++- src/linkgraph/linkgraph_gui.h | 8 ++++++-- src/main_gui.cpp | 2 +- src/smallmap_gui.cpp | 8 ++++---- src/viewport.cpp | 2 +- 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index 7923fc26c8..4db9f95b35 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -239,8 +239,12 @@ void LinkGraphOverlay::AddLinks(const Station *from, const Station *to) * Draw the linkgraph overlay or some part of it, in the area given. * @param dpi Area to be drawn to. */ -void LinkGraphOverlay::Draw(const DrawPixelInfo *dpi) const +void LinkGraphOverlay::Draw(const DrawPixelInfo *dpi) { + if (this->dirty) { + this->RebuildCache(); + this->dirty = false; + } this->DrawLinks(dpi); this->DrawStationDots(dpi); } diff --git a/src/linkgraph/linkgraph_gui.h b/src/linkgraph/linkgraph_gui.h index a933bfc683..93ec666299 100644 --- a/src/linkgraph/linkgraph_gui.h +++ b/src/linkgraph/linkgraph_gui.h @@ -56,11 +56,13 @@ public: window(w), widget_id(wid), cargo_mask(cargo_mask), company_mask(company_mask), scale(scale) {} - void RebuildCache(); - void Draw(const DrawPixelInfo *dpi) const; + void Draw(const DrawPixelInfo *dpi); void SetCargoMask(CargoTypes cargo_mask); void SetCompanyMask(uint32 company_mask); + /** Mark the linkgraph dirty to be rebuilt next time Draw() is called. */ + void SetDirty() { this->dirty = true; } + /** Get a bitmask of the currently shown cargoes. */ CargoTypes GetCargoMask() { return this->cargo_mask; } @@ -75,6 +77,7 @@ protected: LinkMap cached_links; ///< Cache for links to reduce recalculation. StationSupplyList cached_stations; ///< Cache for stations to be drawn. uint scale; ///< Width of link lines. + bool dirty; ///< Set if overlay should be rebuilt. Point GetStationMiddle(const Station *st) const; @@ -85,6 +88,7 @@ protected: bool IsLinkVisible(Point pta, Point ptb, const DrawPixelInfo *dpi, int padding = 0) const; bool IsPointVisible(Point pt, const DrawPixelInfo *dpi, int padding = 0) const; void GetWidgetDpi(DrawPixelInfo *dpi) const; + void RebuildCache(); static void AddStats(uint new_cap, uint new_usg, uint new_flow, bool new_shared, LinkProperties &cargo); static void DrawVertex(int x, int y, int size, int colour, int border_colour); diff --git a/src/main_gui.cpp b/src/main_gui.cpp index 43a73f6de1..cdd3831576 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -267,7 +267,7 @@ struct MainWindow : Window return; } - this->viewport->overlay->RebuildCache(); + this->viewport->overlay->SetDirty(); this->GetWidget(WID_M_VIEWPORT)->SetDirty(this); } diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index e4a0919274..97d01325a0 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -713,7 +713,7 @@ void SmallMapWindow::SetZoomLevel(ZoomLevelChange change, const Point *zoom_pt) this->SetNewScroll(this->scroll_x + (tile.x - new_tile.x) * TILE_SIZE, this->scroll_y + (tile.y - new_tile.y) * TILE_SIZE, sub); } else if (this->map_type == SMT_LINKSTATS) { - this->overlay->RebuildCache(); + this->overlay->SetDirty(); } this->SetWidgetDisabledState(WID_SM_ZOOM_IN, this->zoom == zoomlevels[MIN_ZOOM_INDEX]); this->SetWidgetDisabledState(WID_SM_ZOOM_OUT, this->zoom == zoomlevels[MAX_ZOOM_INDEX]); @@ -1290,7 +1290,7 @@ void SmallMapWindow::SwitchMapType(SmallMapType map_type) this->SetupWidgetData(); - if (map_type == SMT_LINKSTATS) this->overlay->RebuildCache(); + if (map_type == SMT_LINKSTATS) this->overlay->SetDirty(); if (map_type != SMT_INDUSTRY) this->BreakIndustryChainLink(); this->SetDirty(); } @@ -1573,7 +1573,7 @@ int SmallMapWindow::GetPositionOnLegend(Point pt) if (this->overlay->GetCompanyMask() != company_mask) { this->overlay->SetCompanyMask(company_mask); } else { - this->overlay->RebuildCache(); + this->overlay->SetDirty(); } } _smallmap_industry_highlight_state = !_smallmap_industry_highlight_state; @@ -1616,7 +1616,7 @@ void SmallMapWindow::SetNewScroll(int sx, int sy, int sub) this->scroll_x = sx; this->scroll_y = sy; this->subscroll = sub; - if (this->map_type == SMT_LINKSTATS) this->overlay->RebuildCache(); + if (this->map_type == SMT_LINKSTATS) this->overlay->SetDirty(); } /* virtual */ void SmallMapWindow::OnScroll(Point delta) diff --git a/src/viewport.cpp b/src/viewport.cpp index 11a1587126..8945951191 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -2070,7 +2070,7 @@ void RebuildViewportOverlay(Window *w) if (w->viewport->overlay != NULL && w->viewport->overlay->GetCompanyMask() != 0 && w->viewport->overlay->GetCargoMask() != 0) { - w->viewport->overlay->RebuildCache(); + w->viewport->overlay->SetDirty(); w->SetDirty(); } } From 91eee793e1632c124c22ee46911e7de5fb3a2362 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 23 Feb 2019 22:03:48 +0100 Subject: [PATCH 385/622] Fix c3dbe836b4: also compile without ENABLE_NETWORK defined again --- src/toolbar_gui.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index ce0ce58f5f..5567c55800 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -162,9 +162,11 @@ public: int lock_offset = (bottom - top - lock_size.height) / 2; DrawCompanyIcon(company, rtl ? right - this->icon_size.width - WD_FRAMERECT_RIGHT : left + WD_FRAMERECT_LEFT, top + icon_offset); +#ifdef ENABLE_NETWORK if (NetworkCompanyIsPassworded(company)) { DrawSprite(SPR_LOCK, PAL_NONE, rtl ? left + WD_FRAMERECT_LEFT : right - this->lock_size.width - WD_FRAMERECT_RIGHT, top + lock_offset); } +#endif SetDParam(0, company); SetDParam(1, company); From 195fd0dc60cc895539ac6c04ff83b6f99f739830 Mon Sep 17 00:00:00 2001 From: PeterN Date: Sun, 24 Feb 2019 16:27:44 +0000 Subject: [PATCH 386/622] Fix #7266: Reorder reinitialization of caches when changing font zoom level. (#7273) --- src/fontcache.cpp | 6 +++--- src/gfx.cpp | 3 ++- src/settings_gui.cpp | 5 ++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/fontcache.cpp b/src/fontcache.cpp index 604cc7374e..2811f17989 100644 --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -421,6 +421,9 @@ FreeTypeFontCache::~FreeTypeFontCache() */ void FreeTypeFontCache::ClearFontCache() { + /* Font scaling might have changed, determine font size anew if it was automatically selected. */ + if (this->face != NULL) this->SetFontSize(this->fs, this->face, this->req_size); + if (this->glyph_to_sprite == NULL) return; for (int i = 0; i < 256; i++) { @@ -438,9 +441,6 @@ void FreeTypeFontCache::ClearFontCache() this->glyph_to_sprite = NULL; Layouter::ResetFontCache(this->fs); - - /* GUI scaling might have changed, determine font size anew if it was automatically selected. */ - if (this->face != NULL) this->SetFontSize(this->fs, this->face, this->req_size); } FreeTypeFontCache::GlyphEntry *FreeTypeFontCache::GetGlyphPtr(GlyphID key) diff --git a/src/gfx.cpp b/src/gfx.cpp index 0f050971c1..7a6b827b7a 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -1131,13 +1131,14 @@ TextColour GetContrastColour(uint8 background, uint8 threshold) */ void LoadStringWidthTable(bool monospace) { + ClearFontCache(); + for (FontSize fs = monospace ? FS_MONO : FS_BEGIN; fs < (monospace ? FS_END : FS_MONO); fs++) { for (uint i = 0; i != 224; i++) { _stringwidth_table[fs][i] = GetGlyphWidth(fs, i + 32); } } - ClearFontCache(); ReInitAllWindows(); } diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index a15f2ff585..a31c3afa41 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -556,16 +556,15 @@ struct GameOptionsWindow : Window { GfxClearSpriteCache(); _gui_zoom = (ZoomLevel)(ZOOM_LVL_OUT_4X - index); UpdateCursorSize(); - LoadStringWidthTable(); UpdateAllVirtCoords(); + ReInitAllWindows(); break; case WID_GO_FONT_ZOOM_DROPDOWN: - GfxClearSpriteCache(); _font_zoom = (ZoomLevel)(ZOOM_LVL_OUT_4X - index); ClearFontCache(); + LoadStringWidthTable(); UpdateAllVirtCoords(); - ReInitAllWindows(); break; case WID_GO_BASE_GRF_DROPDOWN: From 0bb395b21db53d65e195c59d9995a0fb4fa74463 Mon Sep 17 00:00:00 2001 From: Alexander Weiss Date: Sat, 26 Jan 2019 16:22:18 +0100 Subject: [PATCH 387/622] Change #6800: [OSX] Use high-precision scrolling deltas for 2D scrolling --- src/video/cocoa/event.mm | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/video/cocoa/event.mm b/src/video/cocoa/event.mm index 30b6563b68..77f683af88 100644 --- a/src/video/cocoa/event.mm +++ b/src/video/cocoa/event.mm @@ -575,9 +575,25 @@ static bool QZ_PollEvent() _cursor.wheel++; } /* else: deltaY was 0.0 and we don't want to do anything */ - /* Set the scroll count for scrollwheel scrolling */ - _cursor.h_wheel -= (int)([ event deltaX ] * 5 * _settings_client.gui.scrollwheel_multiplier); - _cursor.v_wheel -= (int)([ event deltaY ] * 5 * _settings_client.gui.scrollwheel_multiplier); + /* Update the scroll count for 2D scrolling */ + CGFloat deltaX; + CGFloat deltaY; + + /* Use precise scrolling-specific deltas if they're supported. */ +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7) + if ([event respondsToSelector:@selector(scrollingDeltaX)]) { + deltaX = [ event scrollingDeltaX ] * 0.5f; + deltaY = [ event scrollingDeltaY ] * 0.5f; + } else +#endif + { + deltaX = [ event deltaX ] * 5; + deltaY = [ event deltaY ] * 5; + } + + _cursor.h_wheel -= (int)(deltaX * _settings_client.gui.scrollwheel_multiplier); + _cursor.v_wheel -= (int)(deltaY * _settings_client.gui.scrollwheel_multiplier); + break; #if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) From 77ab6f8ec7e68fc83b752a4fdfa2a673ca5fa9b4 Mon Sep 17 00:00:00 2001 From: Alexander Weiss Date: Sat, 26 Jan 2019 16:34:32 +0100 Subject: [PATCH 388/622] Change: [OSX] Prevent 2D scrolling for traditional scroll wheel mice --- src/video/cocoa/event.mm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/video/cocoa/event.mm b/src/video/cocoa/event.mm index 77f683af88..de812a70d6 100644 --- a/src/video/cocoa/event.mm +++ b/src/video/cocoa/event.mm @@ -581,7 +581,10 @@ static bool QZ_PollEvent() /* Use precise scrolling-specific deltas if they're supported. */ #if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7) - if ([event respondsToSelector:@selector(scrollingDeltaX)]) { + if ([event respondsToSelector:@selector(hasPreciseScrollingDeltas)]) { + /* No precise deltas indicates a scroll wheel is being used, so we don't want 2D scrolling. */ + if (![ event hasPreciseScrollingDeltas ]) break; + deltaX = [ event scrollingDeltaX ] * 0.5f; deltaY = [ event scrollingDeltaY ] * 0.5f; } else From d24a9dfe982f39b6b039084b888b479eddd97ec5 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 24 Feb 2019 19:45:43 +0100 Subject: [PATCH 389/622] Update: Translations from eints italian: 11 changes by lorenzodv dutch: 46 changes by JanWillem russian: 5 changes by Lone_Wolf --- src/lang/dutch.txt | 81 +++++++++++++++++++++++++------------------- src/lang/italian.txt | 11 ++++++ src/lang/russian.txt | 5 +++ 3 files changed, 62 insertions(+), 35 deletions(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 3114b6cebe..c5e32f176d 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -995,7 +995,12 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normaal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dubbele grootte STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :4x Grootte +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Lettergrootte +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Hiermee kies je hoe groot de letters op het scherm moeten zijn +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normaal +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Dubbele grootte +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Viervoudige grootte STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basisset voor graphics STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Kiest de te gebruiken basisset voor grafische elementen @@ -1096,7 +1101,7 @@ STR_CITY_APPROVAL_PERMISSIVE :Toegeeflijk STR_CITY_APPROVAL_TOLERANT :Neutraal STR_CITY_APPROVAL_HOSTILE :Vijandig -STR_WARNING_NO_SUITABLE_AI :{WHITE}Geen bruikbare AIs beschikbaar...{}U kunt diverse AI's downloaden via het 'Online Content' systeem +STR_WARNING_NO_SUITABLE_AI :{WHITE}Geen bruikbare AI's beschikbaar...{}Je kunt diverse AI's downloaden via het 'online-inhoud'-systeem # Settings tree window STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Instellingen @@ -1106,11 +1111,11 @@ STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Alles in STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(geen uitleg beschikbaar) STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Standaardwaarde: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Instellingstype: {ORANGE}{STRING} -STR_CONFIG_SETTING_TYPE_CLIENT :Gebruiker instellingen (niet opgeslagen in bestand; heeft invloed op alle spellen) -STR_CONFIG_SETTING_TYPE_GAME_MENU :Spelinstellingen (opgeslagen in bestand; hebben alleen invloed op nieuw spel) -STR_CONFIG_SETTING_TYPE_GAME_INGAME :Spelinstellingen (opgeslagen in bestand; hebben alleen invloed op huidig spel) -STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Bedrijfsinstellingen (Opgeslagen in bestand; hebben alleen invloed op nieuw spel) -STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Bedrijfsinstellingen (Opgeslagen in bestand; hebben alleen invloed op huidig bedrijf) +STR_CONFIG_SETTING_TYPE_CLIENT :Gebruikersinstellingen (niet opgeslagen in bestand; van invloed op alle spellen) +STR_CONFIG_SETTING_TYPE_GAME_MENU :Spelinstellingen (opgeslagen in bestand; alleen van invloed op nieuwe spellen) +STR_CONFIG_SETTING_TYPE_GAME_INGAME :Spelinstellingen (opgeslagen in bestand; alleen van invloed op huidig spel) +STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Bedrijfsinstellingen (opgeslagen in bestand; alleen van invloed op nieuwe spellen) +STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Bedrijfsinstellingen (opgeslagen in bestand; alleen van invloed op huidig bedrijf) STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categorie: STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Type: @@ -1123,11 +1128,11 @@ STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Instellingen me STR_CONFIG_SETTING_TYPE_DROPDOWN_HELPTEXT :{BLACK}Filter de lijst hieronder op bepaalde instellingstypen STR_CONFIG_SETTING_TYPE_DROPDOWN_ALL :Alle instellingen -STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Gebruikersinstellingen (Niet opgeslagen in bestand; heeft betrekking op alle spellen) -STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Spelinstellingen (Opgeslagen in bestand; hebben alleen betrekking op nieuwe spellen) -STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Spelinstellingen (Opgeslagen in bestand; hebben alleen betrekking op huidig spel) -STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Bedrijfsinstellingen (Opgeslagen in bestand; heeft alleen betrekking op nieuwe spellen) -STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Bedrijfsinstellingen (Opgeslagen in bestand; hebben alleen betrekking op huidig bedrijf) +STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Gebruikersinstellingen (niet opgeslagen in bestand; van invloed op alle spellen) +STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Spelinstellingen (opgeslagen in bestand; alleen van invloed op nieuwe spellen) +STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Spelinstellingen (opgeslagen in bestand; alleen van invloed op huidig spel) +STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Bedrijfsinstellingen (opgeslagen in bestand; alleen van invloed op nieuwe spellen) +STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Bedrijfsinstellingen (opgeslagen in bestand; alleen van invloed op huidig bedrijf) STR_CONFIG_SETTING_CATEGORY_HIDES :{BLACK}Alle zoekresultaten per instelling weergeven{}{SILVER}Categorie {BLACK}naar {WHITE}{STRING} STR_CONFIG_SETTING_TYPE_HIDES :{BLACK}Alle zoekresultaten per instelling weergeven{}{SILVER}Type {BLACK}naar {WHITE}alle instellingstypen STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Alle zoekresultaten per instelling weergeven{}{SILVER}Categorie {BLACK}naar {WHITE}{STRING} {BLACK}en {SILVER}type {BLACK}naar {WHITE}Alle instellingstypen @@ -2210,34 +2215,34 @@ STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}De serve STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}De server wordt opnieuw gestart...{}Wacht alstublieft... # Content downloading window -STR_CONTENT_TITLE :{WHITE}Download extra content +STR_CONTENT_TITLE :{WHITE}Download extra inhoud STR_CONTENT_TYPE_CAPTION :{BLACK}Type STR_CONTENT_TYPE_CAPTION_TOOLTIP :{BLACK}Type van de content STR_CONTENT_NAME_CAPTION :{BLACK}Naam -STR_CONTENT_NAME_CAPTION_TOOLTIP :{BLACK}Naam van de content +STR_CONTENT_NAME_CAPTION_TOOLTIP :{BLACK}Naam van de inhoud STR_CONTENT_MATRIX_TOOLTIP :{BLACK}Klik op een regel voor details{}Gebruik het selectievakje om het te selecteren voor download STR_CONTENT_SELECT_ALL_CAPTION :{BLACK}Selecteer alles -STR_CONTENT_SELECT_ALL_CAPTION_TOOLTIP :{BLACK}Markeer alle content om te downloaden +STR_CONTENT_SELECT_ALL_CAPTION_TOOLTIP :{BLACK}Markeer alle inhoud voor download STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK}Selecteer updates -STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}Markeer alle updates voor bestaande content om te downloaden +STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}Markeer alle updates voor bestaande inhoud voor download STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK}Deselecteer alles STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}Markeer alle content om niet te downloaden STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Zoek externe websites STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Zoek inhoud niet beschikbaar op de server van OpenTTD op websites die niet gekoppeld zijn aan OpenTTD -STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}U verlaat OpenTTD! -STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}De voorwaarden voor het downloaden van content van externe websites variëren.{}U moet naar de externe sites gaan voor instructies hoe de inhoud te installeren in OpenTTD.{}Wil je doorgaan? +STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Je verlaat OpenTTD! +STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}De voorwaarden voor het downloaden van inhoud van externe websites variëren.{}Ga naar de externe website voor instructies over het installeren van de inhoud in OpenTTD.{}Wil je doorgaan? STR_CONTENT_FILTER_TITLE :{BLACK}Tag-/naamfilter: STR_CONTENT_OPEN_URL :{BLACK}Bezoek website STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Bezoek de website voor deze inhoud STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Download -STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Start downloaden van geselecteerde content +STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Start met het downloaden van de geselecteerde inhoud STR_CONTENT_TOTAL_DOWNLOAD_SIZE :{SILVER}Totale downloadgrootte: {WHITE}{BYTES} -STR_CONTENT_DETAIL_TITLE :{SILVER}CONTENT INFO +STR_CONTENT_DETAIL_TITLE :{SILVER}INFO OVER INHOUD STR_CONTENT_DETAIL_SUBTITLE_UNSELECTED :{SILVER}Je hebt ervoor gekozen om dit niet te downloaden STR_CONTENT_DETAIL_SUBTITLE_SELECTED :{SILVER}Je hebt ervoor gekozen om dit te downloaden STR_CONTENT_DETAIL_SUBTITLE_AUTOSELECTED :{SILVER}Deze afhankelijkheid is geselecteerd om te downloaden STR_CONTENT_DETAIL_SUBTITLE_ALREADY_HERE :{SILVER}Dit heb je al -STR_CONTENT_DETAIL_SUBTITLE_DOES_NOT_EXIST :{SILVER}Deze content is onbekend en kan niet gedownload worden in OpenTTD +STR_CONTENT_DETAIL_SUBTITLE_DOES_NOT_EXIST :{SILVER}Deze inhoud is onbekend en kan niet worden gedownload in OpenTTD STR_CONTENT_DETAIL_UPDATE :{SILVER}Dit is een vervanging voor een bestaande {STRING} STR_CONTENT_DETAIL_NAME :{SILVER}Naam: {WHITE}{STRING} STR_CONTENT_DETAIL_VERSION :{SILVER}Versie: {WHITE}{STRING} @@ -2252,7 +2257,7 @@ STR_CONTENT_NO_ZLIB :{WHITE}OpenTTD STR_CONTENT_NO_ZLIB_SUB :{WHITE}... niet mogelijk gegevens te downloaden # Order of these is important! -STR_CONTENT_TYPE_BASE_GRAPHICS :Basisgraphics +STR_CONTENT_TYPE_BASE_GRAPHICS :Basis-grafische elementen STR_CONTENT_TYPE_NEWGRF :NewGRF STR_CONTENT_TYPE_AI :AI STR_CONTENT_TYPE_AI_LIBRARY :AI-bibliotheek @@ -2260,25 +2265,25 @@ STR_CONTENT_TYPE_SCENARIO :Scenario STR_CONTENT_TYPE_HEIGHTMAP :Hoogtekaart STR_CONTENT_TYPE_BASE_SOUNDS :Basisgeluiden STR_CONTENT_TYPE_BASE_MUSIC :Basismuziek -STR_CONTENT_TYPE_GAME_SCRIPT :Spel script -STR_CONTENT_TYPE_GS_LIBRARY :GS-bibliotheek +STR_CONTENT_TYPE_GAME_SCRIPT :Spelscript +STR_CONTENT_TYPE_GS_LIBRARY :Spelscript-bibliotheek # Content downloading progress window -STR_CONTENT_DOWNLOAD_TITLE :{WHITE}Content aan het downloaden... -STR_CONTENT_DOWNLOAD_INITIALISE :{WHITE}Bestanden aan het opvragen... -STR_CONTENT_DOWNLOAD_FILE :{WHITE}Aan het downloaden: {STRING} ({NUM} of {NUM}) +STR_CONTENT_DOWNLOAD_TITLE :{WHITE}Inhoud wordt gedownload... +STR_CONTENT_DOWNLOAD_INITIALISE :{WHITE}Bezig met bestanden opvragen... +STR_CONTENT_DOWNLOAD_FILE :{WHITE}Bezig met downloaden: {STRING} ({NUM} van {NUM}) STR_CONTENT_DOWNLOAD_COMPLETE :{WHITE}Downloaden is klaar STR_CONTENT_DOWNLOAD_PROGRESS_SIZE :{WHITE}{BYTES} van {BYTES} gedownload ({NUM} %) # Content downloading error messages -STR_CONTENT_ERROR_COULD_NOT_CONNECT :{WHITE}Kon geen verbinding maken met de contentserver... +STR_CONTENT_ERROR_COULD_NOT_CONNECT :{WHITE}Kon geen verbinding maken met de inhoudserver... STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD :{WHITE}Downloaden mislukt... STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_CONNECTION_LOST :{WHITE}... verbinding verbroken STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE :{WHITE}... bestand niet schrijfbaar STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}Kon gedownload bestand niet uitpakken STR_MISSING_GRAPHICS_SET_CAPTION :{WHITE}Ontbrekende graphics -STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD heeft graphics nodig om te kunnen werken, maar er konden er geen gevonden worden. Staat u toe dat OpenTTD deze graphics downloadt en installeert? +STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD heeft grafische elementen nodig om te kunnen werken, maar deze zijn niet gevonden. Wil je dat OpenTTD deze downloadt en installeert? STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Ja, download de graphics STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Nee, OpenTTD afsluiten @@ -2451,8 +2456,8 @@ STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Dok bouw STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Haven bouwen. Houd Ctrl ingedrukt om samen te voegen met ander station. Shift schakelt tussen bouwen/inschatting van de kosten. STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Boei plaatsen, deze kan gebruikt worden voor extra tussenstops. Shift schakelt tussen bouwen/inschatting van de kosten STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Aquaduct bouwen. Shift schakelt tussen bouwen/inschatting van de kosten. -STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Definieer watergebied.{}Maak een kanaal, tenzij Ctrl wordt vastgehouden op zeeniveau, dan zal de omgeving overstromen -STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Leg rivieren aan +STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Hiermee plaats je watermassa's.{}Maakt een kanaal, tenzij je Ctrl vasthoudt op zeeniveau, dan overstroomt de omgeving. +STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Hiermee maak je rivieren # Ship depot construction window STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Richting van dok @@ -2742,6 +2747,9 @@ STR_FRAMERATE_DRAWING :{WHITE}Grafisch STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Wereldkijkvensters: STR_FRAMERATE_VIDEO :{BLACK}Video-uitvoer: STR_FRAMERATE_SOUND :{BLACK}Geluid mengen: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} Spelscript/AI totaal: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Spelscript: +STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Gameloop @@ -2752,10 +2760,13 @@ STR_FRAMETIME_CAPTION_GL_SHIPS :Scheepstikken STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Vliegtuigtikken STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Wereldtikken STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Link grafiekvertraging -STR_FRAMETIME_CAPTION_DRAWING :Graphics weergeven +STR_FRAMETIME_CAPTION_DRAWING :Grafische elementen realiseren STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Wereldkijkvenster weergeven STR_FRAMETIME_CAPTION_VIDEO :Video-output STR_FRAMETIME_CAPTION_SOUND :Geluid mixen +STR_FRAMETIME_CAPTION_ALLSCRIPTS :Spel-/AI-schripts totaal +STR_FRAMETIME_CAPTION_GAMESCRIPT :Spelscript +STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING} ############ End of leave-in-this-order @@ -2854,7 +2865,7 @@ STR_GENERATION_RIVER_GENERATION :{BLACK}Rivierpl STR_GENERATION_TREE_GENERATION :{BLACK}Bosplaatsing STR_GENERATION_OBJECT_GENERATION :{BLACK}Ontwikkeling van onverplaatsbare objecten STR_GENERATION_CLEARING_TILES :{BLACK}Ontwikkeling van ruig en rotsachtig gebied -STR_GENERATION_SETTINGUP_GAME :{BLACK}Spel aan het configureren +STR_GENERATION_SETTINGUP_GAME :{BLACK}Spel wordt geconfigureerd STR_GENERATION_PREPARING_TILELOOP :{BLACK}Bezig met tile-loop STR_GENERATION_PREPARING_SCRIPT :{BLACK}Script loopt STR_GENERATION_PREPARING_GAME :{BLACK}Voorbereiden spel @@ -3635,7 +3646,7 @@ STR_REPLACE_VEHICLES_START :{BLACK}Start he STR_REPLACE_VEHICLES_NOW :Vervang alle voertuigen nu STR_REPLACE_VEHICLES_WHEN_OLD :Vervang alleen oude voertuigen STR_REPLACE_HELP_START_BUTTON :{BLACK}Klik op deze knop als je de links geselecteerde locomotief wilt vervangen met de rechtse -STR_REPLACE_NOT_REPLACING :{BLACK}Niet aan het vervangen +STR_REPLACE_NOT_REPLACING :{BLACK}Niet vervangen STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Geen voertuig geselecteerd STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} als oud STR_REPLACE_VEHICLES_STOP :{BLACK}Stop het vervangen @@ -3703,7 +3714,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Huidige STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}In- en uitladen STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Vertrekt van STR_VEHICLE_STATUS_CRASHED :{RED}Verongelukt! -STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Motorpech +STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Pech onderweg STR_VEHICLE_STATUS_STOPPED :{RED}Gestopt STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}Remmen, {VELOCITY} STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Geen stroom @@ -4182,7 +4193,7 @@ STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}Schaalwa STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Het aanpassen van de grootte van een bronkaart is niet aan te bevelen. Toch doorgaan? # Soundset messages -STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Alleen back-upgeluid is gevonden. Als u geluid wilt, installeer dan een geluiddsset via het downloadsysteem +STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Alleen back-upgeluid is gevonden. Als je geluid wilt, installeer dan een geluiddsset via het downloadsysteem # Screenshot related messages STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Grote schermfoto diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 503a0ed22d..2988dc1dec 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -997,7 +997,12 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normale STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Doppia STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quadrupla +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Dimensione caratteri +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Seleziona la dimensione dei caratteri dell'interfaccia +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normale +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Doppia +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Quadrupla STR_GAME_OPTIONS_BASE_GRF :{BLACK}Pacchetto grafico di base STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Seleziona il pacchetto grafico di base da utilizzare @@ -2772,6 +2777,9 @@ STR_FRAMERATE_DRAWING :{BLACK}Renderiz STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Visuali mondo: STR_FRAMERATE_VIDEO :{BLACK}Output video: STR_FRAMERATE_SOUND :{BLACK}Missaggio suoni: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} Totale IA/Script: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Script: +STR_FRAMERATE_AI :{BLACK} IA {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Ciclo simulazione @@ -2786,6 +2794,9 @@ STR_FRAMETIME_CAPTION_DRAWING :Renderizzazione STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Renderizzazione visuali mondo STR_FRAMETIME_CAPTION_VIDEO :Output video STR_FRAMETIME_CAPTION_SOUND :Missaggio suoni +STR_FRAMETIME_CAPTION_ALLSCRIPTS :Totale IA/Script +STR_FRAMETIME_CAPTION_GAMESCRIPT :Script +STR_FRAMETIME_CAPTION_AI :IA {NUM} {STRING} ############ End of leave-in-this-order diff --git a/src/lang/russian.txt b/src/lang/russian.txt index ad9d13c653..66e4d59ae7 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2927,6 +2927,8 @@ STR_FRAMERATE_DRAWING :{BLACK}Отри STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Дополнительные окна: STR_FRAMERATE_VIDEO :{BLACK}Вывод на экран: STR_FRAMERATE_SOUND :{BLACK}Обработка звука: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} Выполнение скриптов: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Игровой скрипт: STR_FRAMERATE_AI :{BLACK} ИИ {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! @@ -2942,6 +2944,9 @@ STR_FRAMETIME_CAPTION_DRAWING :Отрисов STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Отрисовка изображения в доп. окнах STR_FRAMETIME_CAPTION_VIDEO :Вывод на экран STR_FRAMETIME_CAPTION_SOUND :Обработка звука +STR_FRAMETIME_CAPTION_ALLSCRIPTS :Общее время выполнения скриптов +STR_FRAMETIME_CAPTION_GAMESCRIPT :Время выполнения игрового скрипта +STR_FRAMETIME_CAPTION_AI :ИИ {NUM} {STRING} ############ End of leave-in-this-order From fa2bea7394a1e29ef0ef037cd0d24db31dad4684 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 24 Feb 2019 21:34:37 +0100 Subject: [PATCH 390/622] Change: [AzurePipelines] Use a minimum OSX version of 10.9 during building. OpenTTD sources are still written in a way to work down to OSX 10.4 or so, as long as you can obtain a C++11 capable compiler. 10.9 is the minimal useful C++11 target using only Apple stuff out-of-the-box. --- azure-pipelines-ci.yml | 3 +++ azure-pipelines/templates/release.yml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/azure-pipelines-ci.yml b/azure-pipelines-ci.yml index d624f8ce73..7bab1a9369 100644 --- a/azure-pipelines-ci.yml +++ b/azure-pipelines-ci.yml @@ -55,6 +55,9 @@ jobs: pool: vmImage: 'macOS-10.13' + variables: + MACOSX_DEPLOYMENT_TARGET: 10.9 + steps: - template: azure-pipelines/templates/ci-git-rebase.yml - template: azure-pipelines/templates/osx-dependencies.yml diff --git a/azure-pipelines/templates/release.yml b/azure-pipelines/templates/release.yml index 86f2be40ed..7628d3c91e 100644 --- a/azure-pipelines/templates/release.yml +++ b/azure-pipelines/templates/release.yml @@ -135,6 +135,9 @@ jobs: vmImage: 'macOS-10.13' dependsOn: source + variables: + MACOSX_DEPLOYMENT_TARGET: 10.9 + steps: - template: release-fetch-source.yml - template: osx-dependencies.yml From 919d7accd7a055e8e5feb300a40fcabb23e88d42 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 24 Feb 2019 22:06:07 +0100 Subject: [PATCH 391/622] Update: Changelog for 1.9.0-beta3 and prepare for release. --- changelog.txt | 26 ++++++++++++++++++++++++++ known-bugs.txt | 4 ++-- os/debian/changelog | 6 ++++++ os/rpm/openttd.spec | 4 ++-- os/windows/installer/install.nsi | 4 ++-- 5 files changed, 38 insertions(+), 6 deletions(-) diff --git a/changelog.txt b/changelog.txt index 7a8651d6e5..1d9f8947ea 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,29 @@ +1.9.0-beta3 (2019-02-24) +------------------------------------------------------------------------ +- Feature: Option to adjust font size separately from GUI size (#7003) +- Feature: Increase maximum number of orders from 64000 to ~16.7m (#7220) +- Add: Show performance of AI and GS in framerate window +- Add: News menu entry and shortcut for deleting all messages (#7240) +- Change: [OSX] Improved scrolling behaviour when using touchpads +- Change: Add scrollbar to cargo legend in cargo payment rates window +- Change: Owner of vehicle with exclusive transport rights may now load cargo from neutral stations (#7256) +- Change: Improved UI behaviour when dragging sound volume sliders with the mouse (#7227) +- Change: Use selected vehicle group as parent when creating a new group (#7224) +- Change: Use SlErrorCorrupt() on pool index error when loading a savegame, instead of terminating (#7219) +- Change: Skip reliability decay if servicing is disabled +- Fix: Remove desert around lakes upon generation +- Fix: Re-sorting file list did not update filtered rows +- Fix #7159: Waiting time at red one-way signals was too short +- Fix #7189: Fluidsynth volume gain too high +- Fix #7004: Cargo flow legend was not properly refreshed after zooming (#7265) +- Fix: Possibility to modify wrong AI/GS settings when switching AI/GS scripts around (#7090, #7091) +- Fix: Use more descriptive "spectator" strings for story book and goal dropdown menus +- Fix #6599: Disable build and rename button in build vehicle window when no vehicle is selected +- Fix: Do not mangle tagged revision strings for network revision strings +- Fix #7151: AI start date deviation was still applied when not set to a random AI (#7223) +- Fix #7197: Invalidate depot buttons when necessary (#7212) +- Doc: [AI] UnshareOrders empties the orders list of the vehicle + 1.9.0-beta2 (2019-02-09) ------------------------------------------------------------------------ - Fix: Non-Windows builds did not get correct git hash diff --git a/known-bugs.txt b/known-bugs.txt index bcb9c354a9..c02897e501 100644 --- a/known-bugs.txt +++ b/known-bugs.txt @@ -1,6 +1,6 @@ OpenTTD's known bugs -Last updated: 2019-02-09 -Release version: 1.9.0-beta2 +Last updated: 2019-02-24 +Release version: 1.9.0-beta3 ------------------------------------------------------------------------ diff --git a/os/debian/changelog b/os/debian/changelog index e429487ec0..858c15371b 100644 --- a/os/debian/changelog +++ b/os/debian/changelog @@ -1,3 +1,9 @@ +openttd (1.9.0~beta3-0) unstable; urgency=low + + * New upstream release 1.9.0-beta3 + + -- OpenTTD Sun, 24 Feb 2019 23:00:00 +0000 + openttd (1.9.0~beta2-0) unstable; urgency=low * New upstream release 1.9.0-beta2 diff --git a/os/rpm/openttd.spec b/os/rpm/openttd.spec index d16230f312..7f17b7ea9b 100644 --- a/os/rpm/openttd.spec +++ b/os/rpm/openttd.spec @@ -17,9 +17,9 @@ # Name: openttd -Version: 1.9.beta2 +Version: 1.9.beta3 Release: 0 -%define srcver 1.9.0-beta2 +%define srcver 1.9.0-beta3 Summary: An open source reimplementation of Chris Sawyer's Transport Tycoon Deluxe License: GPL-2.0 Group: Amusements/Games/Strategy/Other diff --git a/os/windows/installer/install.nsi b/os/windows/installer/install.nsi index d0c933ca21..da45165d4f 100644 --- a/os/windows/installer/install.nsi +++ b/os/windows/installer/install.nsi @@ -2,8 +2,8 @@ !define APPV_MAJOR 1 !define APPV_MINOR 9 !define APPV_MAINT 0 -!define APPV_BUILD 1 -!define APPV_EXTRA "-beta2" +!define APPV_BUILD 2 +!define APPV_EXTRA "-beta3" !define APPNAME "OpenTTD" ; Define application name !define APPVERSION "${APPV_MAJOR}.${APPV_MINOR}.${APPV_MAINT}${APPV_EXTRA}" ; Define application version From 6ff02f0615d19ab1bf019279bd2da6713015a246 Mon Sep 17 00:00:00 2001 From: glx22 Date: Mon, 25 Feb 2019 01:47:00 +0100 Subject: [PATCH 392/622] Fix: [Windows] make the installer DPI aware (#7277) --- os/windows/installer/install.nsi | 1 + 1 file changed, 1 insertion(+) diff --git a/os/windows/installer/install.nsi b/os/windows/installer/install.nsi index da45165d4f..604e252c40 100644 --- a/os/windows/installer/install.nsi +++ b/os/windows/installer/install.nsi @@ -24,6 +24,7 @@ !define MUI_HEADERIMAGE !define MUI_HEADERIMAGE_BITMAP "top.bmp" +ManifestDPIAware true BrandingText "OpenTTD Installer" SetCompressor LZMA From 93c6398810b08f0d7ac0ceb58d406a1daf9c81e6 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 25 Feb 2019 19:45:43 +0100 Subject: [PATCH 393/622] Update: Translations from eints dutch: 68 changes by JanWillem danish: 17 changes by nielsmh hungarian: 3 changes by Brumi --- src/lang/danish.txt | 34 +++++------ src/lang/dutch.txt | 136 ++++++++++++++++++++--------------------- src/lang/hungarian.txt | 6 +- 3 files changed, 88 insertions(+), 88 deletions(-) diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 4da1f15e5d..f70ea0f53e 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -373,7 +373,7 @@ STR_SCENEDIT_FILE_MENU_QUIT :Afslut ############ range for SE file menu starts ############ range for settings menu starts -STR_SETTINGS_MENU_GAME_OPTIONS :Spilvalg +STR_SETTINGS_MENU_GAME_OPTIONS :Opsætning STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Indstillinger STR_SETTINGS_MENU_SCRIPT_SETTINGS :AI/spilscript-indstillinger STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF indstillinger @@ -391,7 +391,7 @@ STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Gennemsigtige s ############ range for file menu starts STR_FILE_MENU_SAVE_GAME :Gem spil -STR_FILE_MENU_LOAD_GAME :Hent spil +STR_FILE_MENU_LOAD_GAME :Fortsæt spil STR_FILE_MENU_QUIT_GAME :Forlad spillet STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Afslut @@ -892,7 +892,7 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Flyt hov STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Bevæg hovedvisningen til samme sted som dette vindue # Game options window -STR_GAME_OPTIONS_CAPTION :{WHITE}Spilvalg +STR_GAME_OPTIONS_CAPTION :{WHITE}Opsætning STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Valutaenhed STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Valg af valutaenhed @@ -1422,8 +1422,8 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Vis ankomst og STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Vis forventede ankomst-og afgangstider i tidsplaner STR_CONFIG_SETTING_QUICKGOTO :Hurtig oprettelse af køretøjsordrer: {STRING} STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Forvælg 'gå-til' når du åbner ordrer vinduet -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Standard skinnetype (efter nyt spil/hentet spil): {STRING} -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Hvilken sportype der skal vælges efter start eller hentning af et spil. 'første tilgængelige' vælger den ældste type spor, 'sidste tilgængelige' vælger den nyeste form for spor, og 'mest anvendte' vælger den type, der i øjeblikket er mest i brug +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Standard sportype (efter nyt spil/indlæst spil): {STRING} +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Hvilken sportype der skal vælges efter start eller indlæsning af et spil. 'Første tilgængelige' vælger den ældste type spor, 'sidste tilgængelige' vælger den nyeste form for spor, og 'mest anvendte' vælger den type, der i øjeblikket er mest i brug STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :Første tilgængelige STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Sidste tilgængelige STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :Mest anvendte @@ -1749,13 +1749,13 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Allokeri STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} STR_INTRO_NEW_GAME :{BLACK}Nyt spil -STR_INTRO_LOAD_GAME :{BLACK}Hent spil +STR_INTRO_LOAD_GAME :{BLACK}Fortsæt spil STR_INTRO_PLAY_SCENARIO :{BLACK}Spil et scenarie STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Spil højdekort STR_INTRO_SCENARIO_EDITOR :{BLACK}Scenarieeditor STR_INTRO_MULTIPLAYER :{BLACK}Netværksspil -STR_INTRO_GAME_OPTIONS :{BLACK}Spilvalg +STR_INTRO_GAME_OPTIONS :{BLACK}Opsætning STR_INTRO_HIGHSCORE :{BLACK} Topresultater STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Indstillinger STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF indstillinger @@ -1764,7 +1764,7 @@ STR_INTRO_SCRIPT_SETTINGS :{BLACK}AI/Spils STR_INTRO_QUIT :{BLACK}Afslut STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Start et nyt spil. Ctrl+Klik springer kortindstillingerne over. -STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Hent et gemt spil +STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Fortsæt et gemt spil STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Start et nyt spil med et højdekort som landskab STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Start et nyt spil med et brugerdefineret scenarie STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Lav en brugerdefineret verden/scenarie @@ -1775,7 +1775,7 @@ STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Vælg 's STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Vælg 'subtropisk' landskab STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Vælg 'legetøjsland' landskab -STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Vis spilvalg +STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Sæt spillet op STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Hvis topscoreliste STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Skærm indstillinger STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Vis NewGRF-indstillinger @@ -1882,7 +1882,7 @@ STR_FACE_SIMPLE :{BLACK}Simpel STR_FACE_SIMPLE_TOOLTIP :{BLACK}Simpelt valg af ansigt. STR_FACE_LOAD :{BLACK}Hent STR_FACE_LOAD_TOOLTIP :{BLACK}Hent favoritansigt -STR_FACE_LOAD_DONE :{WHITE}Dit favoritansigt er hentet fra OpenTTD-konfigurationsfilen. +STR_FACE_LOAD_DONE :{WHITE}Dit favoritansigt er indlæst fra OpenTTD konfigurationsfilen. STR_FACE_FACECODE :{BLACK}Spiller ansigtsnr. STR_FACE_FACECODE_TOOLTIP :{BLACK}Vis og/eller indstil spillers ansigtsnummer STR_FACE_FACECODE_CAPTION :{WHITE}Vis og/eller indstil spillers ansigtsnummer @@ -2062,8 +2062,8 @@ STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Spiller STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Nyt selskab STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Opret et nyt selskab -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Tilskuer spil -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Se et spil som tilskuer +STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Tilskuer +STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Tilslut spillet som tilskuer STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Tilslut dig selskab STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Hjælp med at bestyrre dette selskab @@ -2772,12 +2772,12 @@ STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRIN # Save/load game/scenario STR_SAVELOAD_SAVE_CAPTION :{WHITE}Gem spil -STR_SAVELOAD_LOAD_CAPTION :{WHITE}Hent spil +STR_SAVELOAD_LOAD_CAPTION :{WHITE}Fortsæt spil STR_SAVELOAD_SAVE_SCENARIO :{WHITE}Gem scenarie STR_SAVELOAD_LOAD_SCENARIO :{WHITE}Hent scenarie STR_SAVELOAD_LOAD_HEIGHTMAP :{WHITE}Hent højdekort STR_SAVELOAD_SAVE_HEIGHTMAP :{WHITE}Gem højdekort -STR_SAVELOAD_HOME_BUTTON :{BLACK}Klik her for at gå til det nuværende standard gemme/hente bibliotek +STR_SAVELOAD_HOME_BUTTON :{BLACK}Klik her for at gå til den nuværende standard gem/indlæs mappe STR_SAVELOAD_BYTES_FREE :{BLACK}{BYTES} fri STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Liste over drev, biblioteker og gemte spilfiler STR_SAVELOAD_EDITBOX_TOOLTIP :{BLACK}Nuværende gemte spils navn @@ -4165,7 +4165,7 @@ STR_ERROR_AUTOSAVE_FAILED :{WHITE}Fejl und STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Kan ikke læse drevet STR_ERROR_GAME_SAVE_FAILED :{WHITE}Fejl under gemning af spil{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Kan ikke slette fil -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Fejl under hentning af spil{}{STRING} +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Fejl under indlæsning af spil{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Intern fejl: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Ødelagt gemt spil - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spillet er gemt med en nyere version @@ -4179,12 +4179,12 @@ STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Spillet STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Kortgenerering afbrudt...{}... ingen brugbare lokaliteter til byer STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... der er ingen byer i dette scenarie -STR_ERROR_PNGMAP :{WHITE}Kan ikke hente landskab fra PNG... +STR_ERROR_PNGMAP :{WHITE}Kan ikke indlæse landskab fra PNG... STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... filen blev ikke fundet. STR_ERROR_PNGMAP_IMAGE_TYPE :{WHITE}... kan ikke konvertere billedtype. Der skal bruges 8 eller 24-bit PNG. STR_ERROR_PNGMAP_MISC :{WHITE}... noget gik galt. Undskyld (Måske en ødelagt fil) -STR_ERROR_BMPMAP :{WHITE}Kan ikke hente landskab fra BMP... +STR_ERROR_BMPMAP :{WHITE}Kan ikke indlæse landskab fra BMP... STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}... kunne ikke konvertere billedtypen. STR_ERROR_HEIGHTMAP_TOO_LARGE :{WHITE}... billede er for stort diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index c5e32f176d..843d641284 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -812,7 +812,7 @@ STR_NEWS_COMPANY_MERGER_TITLE :{BIG_FONT}{BLAC STR_NEWS_COMPANY_MERGER_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} is verkocht aan {STRING} voor {CURRENCY_LONG}! STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLACK}Failliet! STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} is gesloten door schuldeisers en alle eigendommen zijn verkocht! -STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Nieuw transportbedrijf opgestart! +STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Nieuw transportbedrijf gestart! STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} begint werkzaamheden bij {TOWN}! STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} is overgenomen door {STRING}! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Directeur) @@ -827,7 +827,7 @@ STR_NEWS_INDUSTRY_CLOSURE_GENERAL :{BIG_FONT}{BLAC STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS :{BIG_FONT}{BLACK}Leveringsproblemen noodzaken {STRING} dreigende sluiting aan te kondigen! STR_NEWS_INDUSTRY_CLOSURE_LACK_OF_TREES :{BIG_FONT}{BLACK}Gebrek aan nabije bomen noodzaakt {STRING} dreigende sluitng aan te kondigen! -STR_NEWS_EURO_INTRODUCTION :{BIG_FONT}{BLACK}Europese Monetaire Unie!{}{}De Euro is geïntroduceerd als de enige munt voor alledaagse transacties in jouw land! +STR_NEWS_EURO_INTRODUCTION :{BIG_FONT}{BLACK}Europese Monetaire Unie!{}{}De euro wordt in jouw land ingevoerd als de enige munt voor gewone transacties! STR_NEWS_BEGIN_OF_RECESSION :{BIG_FONT}{BLACK}Wereldwijde recessie!{}{}Financiële experts vrezen het ergste terwijl economie ineenstort! STR_NEWS_END_OF_RECESSION :{BIG_FONT}{BLACK}Recessie voorbij!{}{}Toenemende handel geeft industrie vertrouwen vanwege sterkere economie! @@ -857,7 +857,7 @@ STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE} is erg oud aan het worden en moet nodig vervangen worden STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} kan geen route vinden om verder te gaan STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} is verdwaald -STR_NEWS_VEHICLE_IS_UNPROFITABLE :{WHITE}Winst van {VEHICLE} was vorig jaar {CURRENCY_LONG} +STR_NEWS_VEHICLE_IS_UNPROFITABLE :{WHITE}Winst van {VEHICLE} was vorig jaar:{}{CURRENCY_LONG} STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} kan niet naar de volgende bestemming omdat deze buiten bereik ligt STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} is gestopt omdat een ombouworder is mislukt @@ -880,7 +880,7 @@ STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLAC STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subsidie toegekend aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt volgend jaar driedubbel betaald! STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subsidie toegekend aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt volgend jaar vierdubbel betaald! -STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Verkeerschaos in {TOWN}!{}{}Wegherstelling betaald door {STRING} zorgt voor 6 maanden van miserie bij weggebruikers! +STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Verkeerschaos in {TOWN}!{}{}Wegreconstructie betaald door {STRING} zorgt voor 6 maanden van misère bij weggebruikers! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transportmonopolie! STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLACK}Gemeentebestuur van {TOWN} tekent contract met {STRING} voor een jaar exclusieve transportrechten! @@ -1004,7 +1004,7 @@ STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Viervoudige gro STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basisset voor graphics STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Kiest de te gebruiken basisset voor grafische elementen -STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} ontbrekend{P "" e}/corrupt{P "" e} bestand{P "" en} +STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} ontbrekend{P "" e}/beschadigd{P "" e} bestand{P "" en} STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Aanvullende informatie over de basisset voor graphics STR_GAME_OPTIONS_BASE_SFX :{BLACK}Basisset voor geluidseffecten @@ -1013,7 +1013,7 @@ STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Aanvulle STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Basisset voor muziek STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Kiest de te gebruiken basisset voor muziek -STR_GAME_OPTIONS_BASE_MUSIC_STATUS :{RED}{NUM} corrupt{P "" e} bestand{P "" en} +STR_GAME_OPTIONS_BASE_MUSIC_STATUS :{RED}{NUM} beschadigd{P "" e} bestand{P "" en} STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Aanvullende informatie over the basisset voor muziek STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Mislukt om een lijst met ondersteunde resoluties op te halen @@ -1023,9 +1023,9 @@ STR_ERROR_FULLSCREEN_FAILED :{WHITE}Modus vo STR_CURRENCY_WINDOW :{WHITE}Aangepaste valuta STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Wisselkoers: {ORANGE}{CURRENCY_LONG} = £ {COMMA} -STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Verlaag de wisselkoers van jouw munteenheid ten opzicht van de Pond (£) -STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Verhoog de wisselkoers van jouw munteenheid ten opzicht van de Pond (£) -STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Stel de wisselkoers in van jouw munteenheid ten opzichte van de Pond (£) +STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Verlaag de wisselkoers van jouw munteenheid ten opzichte van het pond (£) +STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Verhoog de wisselkoers van jouw munteenheid ten opzichte van het pond (£) +STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Stel de wisselkoers in van jouw munteenheid ten opzichte van het pond (£) STR_CURRENCY_SEPARATOR :{LTBLUE}Scheidingsteken: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Stel het scheidingsteken in voor jouw munteenheid @@ -1035,14 +1035,14 @@ STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Stel het STR_CURRENCY_SUFFIX :{LTBLUE}Achtervoegsel: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_SUFFIX_TOOLTIP :{BLACK}Stel het eindteken in voor jouw munteenheid -STR_CURRENCY_SWITCH_TO_EURO :{LTBLUE}Overgaan op de Euro: {ORANGE}{NUM} -STR_CURRENCY_SWITCH_TO_EURO_NEVER :{LTBLUE}Overgaan op de Euro: {ORANGE}nooit -STR_CURRENCY_SET_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Stel het jaar in waarin de Euro wordt geïntroduceerd -STR_CURRENCY_DECREASE_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Eerder naar de Euro -STR_CURRENCY_INCREASE_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Later naar de Euro +STR_CURRENCY_SWITCH_TO_EURO :{LTBLUE}Overgaan op de euro: {ORANGE}{NUM} +STR_CURRENCY_SWITCH_TO_EURO_NEVER :{LTBLUE}Overgaan op de euro: {ORANGE}nooit +STR_CURRENCY_SET_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Stel het jaar in waarin de euro wordt geïntroduceerd +STR_CURRENCY_DECREASE_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Eerder naar de euro +STR_CURRENCY_INCREASE_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Later naar de euro STR_CURRENCY_PREVIEW :{LTBLUE}Voorbeeld: {ORANGE}{CURRENCY_LONG} -STR_CURRENCY_CUSTOM_CURRENCY_PREVIEW_TOOLTIP :{BLACK}10000 Pound (£) in jouw munteenheid +STR_CURRENCY_CUSTOM_CURRENCY_PREVIEW_TOOLTIP :{BLACK}10.000 pond (£) in jouw munteenheid STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Verander optie van aangepaste valuta STR_DIFFICULTY_LEVEL_SETTING_MAXIMUM_NO_COMPETITORS :{LTBLUE}Maximaal aantal tegenstanders: {ORANGE}{COMMA} @@ -1750,8 +1750,8 @@ STR_INTRO_CAPTION :{WHITE}OpenTTD STR_INTRO_NEW_GAME :{BLACK}Nieuw spel STR_INTRO_LOAD_GAME :{BLACK}Spel laden -STR_INTRO_PLAY_SCENARIO :{BLACK}Speel scenario -STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Speel hoogtekaart +STR_INTRO_PLAY_SCENARIO :{BLACK}Scenario spelen +STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Hoogtekaart spelen STR_INTRO_SCENARIO_EDITOR :{BLACK}Scenario bewerken STR_INTRO_MULTIPLAYER :{BLACK}Netwerkspel @@ -1767,8 +1767,8 @@ STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Start ee STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Een opgeslagen spel laden STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Start een nieuw spel, gebruik een hoogtekaart als landschap STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Start een nieuw spel, gebaseerd op een scenario -STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Maak een eigen spelwereld/scenario -STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Start een multiplayerspel +STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Een eigen spelwereld/scenario maken +STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Een netwerkspel spelen STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Gematigd klimaat STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Subarctisch klimaat @@ -1784,7 +1784,7 @@ STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}AI-/spel STR_INTRO_TOOLTIP_QUIT :{BLACK}'OpenTTD' afsluiten STR_INTRO_BASESET :{BLACK}De huidige gekozen set grafische elementen mist {NUM} sprite{P "" s}. Controleer of er updates zijn voor deze basisset. -STR_INTRO_TRANSLATION :{BLACK}Deze vertaling mist {NUM} tekst{P "" en}. Help aub om OpenTTD beter te maken door je al vertaler aan te melden. Zie readme.txt voor details. +STR_INTRO_TRANSLATION :{BLACK}Deze vertaling mist {NUM} tekst{P "" en}. Help alsjeblieft mee om OpenTTD beter te maken door je als vertaler aan te melden. Zie readme.txt voor details. # Quit window STR_QUIT_CAPTION :{WHITE}Afsluiten @@ -2525,8 +2525,8 @@ STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Definiee STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Vergroot de landoppervlakte om te verhogen/verlagen STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Verklein de landoppervlakte om te verhogen/verlagen STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Genereer willekeurig land -STR_TERRAFORM_SE_NEW_WORLD :{BLACK}Maak nieuw scenario aan -STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Verwijder landschap +STR_TERRAFORM_SE_NEW_WORLD :{BLACK}Nieuw scenario maken +STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Landschap verwijderen STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Verwijder alle eigendommen van een bedrijf van de kaart STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Landschap terugstellen @@ -2903,14 +2903,14 @@ STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Palet om STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Verander het palet van het geselecteerde NewGRF-bestand.{}Gebruik deze mogelijkheid als de afbeeldingen van dit NewGRF-bestand er paars uit zien in het spel STR_NEWGRF_SETTINGS_APPLY_CHANGES :{BLACK}Wijzigingen doorvoeren -STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Zoek ontbrekende content online -STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_TOOLTIP :{BLACK}Kijk of de ontbrekende content online te vinden is +STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Online naar ontbrekende inhoud zoeken +STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_TOOLTIP :{BLACK}Kijk of de ontbrekende inhoud online te vinden is STR_NEWGRF_SETTINGS_FILENAME :{BLACK}Bestandsnaam: {SILVER}{STRING} STR_NEWGRF_SETTINGS_GRF_ID :{BLACK}GRF-ID: {SILVER}{STRING} STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versie: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Laagste compatibele versie: {SILVER}{NUM} -STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5-controlesom: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palet: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Standaard (D) STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Standaard (D) / 32 bpp @@ -2928,7 +2928,7 @@ STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Niet compa STR_SAVE_PRESET_CAPTION :{WHITE}Voorkeursinstelling opslaan STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Lijst met beschikbare voorkeursinstellingen, Selecteer om deze te kopiëren naar de opslagnaam hieronder. STR_SAVE_PRESET_TITLE :{BLACK}Voer een naam in voor de voorkeursinstelling -STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Huidig gekozen naam voor de preset om op te slaan +STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Huidige gekozen naam voor de voorkeursinstelling om op te slaan STR_SAVE_PRESET_CANCEL :{BLACK}Annuleren STR_SAVE_PRESET_CANCEL_TOOLTIP :{BLACK}Voorkeursinstelling niet wijzigen STR_SAVE_PRESET_SAVE :{BLACK}Opslaan @@ -2937,22 +2937,22 @@ STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Sla de h # NewGRF parameters window STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}NewGRF-parameters wijzigen STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Sluiten -STR_NEWGRF_PARAMETERS_RESET :{BLACK}Reset +STR_NEWGRF_PARAMETERS_RESET :{BLACK}Terugstellen STR_NEWGRF_PARAMETERS_RESET_TOOLTIP :{BLACK}Zet alle parameters naar de standaardwaarde STR_NEWGRF_PARAMETERS_DEFAULT_NAME :Parameter {NUM} STR_NEWGRF_PARAMETERS_SETTING :{STRING}: {ORANGE}{STRING} STR_NEWGRF_PARAMETERS_NUM_PARAM :{LTBLUE}Aantal parameters: {ORANGE}{NUM} # NewGRF inspect window -STR_NEWGRF_INSPECT_CAPTION :{WHITE}Inspecteer - {STRING} +STR_NEWGRF_INSPECT_CAPTION :{WHITE}Inspecteren - {STRING} STR_NEWGRF_INSPECT_PARENT_BUTTON :{BLACK}Huidig -STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Inspecteer het object van het huidige hoofd bestand +STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Inspecteer het object van het bovenliggende element STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} bij {HEX} STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Object STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Spoortype -STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x parameter (hexadecimaal) +STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parameter 60+x voor NewGRF-variabele (hexadecimaal) # Sprite aligner window STR_SPRITE_ALIGNER_CAPTION :{WHITE}Sprite uitlijnen {COMMA} ({STRING}) @@ -2980,7 +2980,7 @@ STR_NEWGRF_ERROR_MSG_ERROR :{RED}Fout: {SIL STR_NEWGRF_ERROR_MSG_FATAL :{RED}Fatale fout: {SILVER}{STRING} STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}Een fatale NewGRF-fout is ontstaan:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} werkt niet met de TTDPatch-versie die is opgegeven door OpenTTD -STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} is voor de {STRING} versie van TTD +STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} is voor versie {STRING} van TTD STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} is ontwikkeld voor {STRING} STR_NEWGRF_ERROR_INVALID_PARAMETER :Ongeldige parameter voor {1:STRING}: parameter {STRING} ({NUM}) STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} moet geladen zijn voor {STRING} @@ -3012,7 +3012,7 @@ STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}Kan best STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}Compatibele GRF(s) geladen voor ontbrekende bestanden STR_NEWGRF_DISABLED_WARNING :{WHITE}Missend(e) GRF-bestand(en) zijn uitgeschakeld STR_NEWGRF_UNPAUSE_WARNING_TITLE :{YELLOW}Ontbrekend(e) GRF-bestand(en) -STR_NEWGRF_UNPAUSE_WARNING :{WHITE}Het spel vervolgen kan OpenTTD laten vastlopen. Rapporteer geen bugs als het spel vastloopt.{}Weet je zeker dat je het spel wilt vervolgen? +STR_NEWGRF_UNPAUSE_WARNING :{WHITE}Het spel vervolgen kan OpenTTD laten vastlopen. Rapporteer geen fouten als het spel nogmaals vastloopt.{}Weet je zeker dat je het spel wilt vervolgen? # NewGRF status STR_NEWGRF_LIST_NONE :Geen @@ -3044,7 +3044,7 @@ STR_INVALID_VEHICLE : Date: Mon, 25 Feb 2019 12:20:55 +0000 Subject: [PATCH 394/622] Fix 195fd0dc60: Sprite cache must still be cleared when using bitmap fonts. --- src/settings_gui.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index a31c3afa41..c3a38b4081 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -561,6 +561,7 @@ struct GameOptionsWindow : Window { break; case WID_GO_FONT_ZOOM_DROPDOWN: + GfxClearSpriteCache(); _font_zoom = (ZoomLevel)(ZOOM_LVL_OUT_4X - index); ClearFontCache(); LoadStringWidthTable(); From 7ac17f5ae4576a11d1f16281b656ffcd463ab5ac Mon Sep 17 00:00:00 2001 From: peter1138 Date: Tue, 26 Feb 2019 06:45:14 +0000 Subject: [PATCH 395/622] Fix #7281: Unable to select last group in open livery window on group creation. --- src/company_gui.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 5a751a3635..143fa0ab82 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -1025,9 +1025,15 @@ public: if (data != -1) { /* data contains a VehicleType, rebuild list if it displayed */ if (this->livery_class == data + LC_GROUP_RAIL) { - if (!Group::IsValidID(this->sel)) this->sel = INVALID_GROUP; this->groups.ForceRebuild(); this->BuildGroupList((CompanyID)this->window_number); + this->SetRows(); + + if (!Group::IsValidID(this->sel)) { + this->sel = INVALID_GROUP; + if (this->groups.Length() > 0) this->sel = this->groups[0]->index; + } + this->SetDirty(); } return; From 9b99b95955d72e49821fe235c0d6fc1e75dc64b2 Mon Sep 17 00:00:00 2001 From: Samu Date: Mon, 1 Oct 2018 16:01:28 +0100 Subject: [PATCH 396/622] Fix #6574: Remove go to hangar orders when rebuilding airport When replacing an airport with another, cancel current orders of type 'go to depot' from aircraft still heading to it if the rebuilt airport doesn't have a hangar (helicopter vs heliport), or if the airplane can't land on the rebuilt airport (airplane vs helistation). Removes 'go to hangar' orders from all aircraft when replacing an airport with hangar with another without hangar (heliport). --- src/aircraft_cmd.cpp | 12 ++++++++++++ src/order_backup.cpp | 7 +++++-- src/order_backup.h | 2 +- src/order_cmd.cpp | 11 +++++++---- src/order_func.h | 2 +- 5 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index d6d99ae242..7c35663726 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -2103,7 +2103,19 @@ void UpdateAirplanesOnNewStation(const Station *st) FOR_ALL_AIRCRAFT(v) { if (!v->IsNormalAircraft() || v->targetairport != st->index) continue; assert(v->state == FLYING); + + Order *o = &v->current_order; + /* The aircraft is heading to a hangar, but the new station doesn't have one, + * or the aircraft can't land on the new station. Cancel current order. */ + if (o->IsType(OT_GOTO_DEPOT) && !(o->GetDepotOrderType() & ODTFB_PART_OF_ORDERS) && o->GetDestination() == st->index && + (!st->airport.HasHangar() || !CanVehicleUseStation(v, st))) { + o->MakeDummy(); + SetWindowWidgetDirty(WC_VEHICLE_VIEW, v->index, WID_VV_START_STOP); + } v->pos = v->previous_pos = AircraftGetEntryPoint(v, ap, rotation); UpdateAircraftCache(v); } + + /* Heliports don't have a hangar. Invalidate all go to hangar orders from all aircraft. */ + if (!st->airport.HasHangar()) RemoveOrderFromAllVehicles(OT_GOTO_DEPOT, st->index, true); } diff --git a/src/order_backup.cpp b/src/order_backup.cpp index 597ad13bba..181e3e59da 100644 --- a/src/order_backup.cpp +++ b/src/order_backup.cpp @@ -256,15 +256,18 @@ CommandCost CmdClearOrderBackup(TileIndex tile, DoCommandFlag flags, uint32 p1, * Removes an order from all vehicles. Triggers when, say, a station is removed. * @param type The type of the order (OT_GOTO_[STATION|DEPOT|WAYPOINT]). * @param destination The destination. Can be a StationID, DepotID or WaypointID. + * @param hangar Only used for airports in the destination. + * When false, remove airport and hangar orders. + * When true, remove either airport or hangar order. */ -/* static */ void OrderBackup::RemoveOrder(OrderType type, DestinationID destination) +/* static */ void OrderBackup::RemoveOrder(OrderType type, DestinationID destination, bool hangar) { OrderBackup *ob; FOR_ALL_ORDER_BACKUPS(ob) { for (Order *order = ob->orders; order != NULL; order = order->next) { OrderType ot = order->GetType(); if (ot == OT_GOTO_DEPOT && (order->GetDepotActionType() & ODATFB_NEAREST_DEPOT) != 0) continue; - if (ot == OT_IMPLICIT || (IsHangarTile(ob->tile) && ot == OT_GOTO_DEPOT)) ot = OT_GOTO_STATION; + if (ot == OT_IMPLICIT || (IsHangarTile(ob->tile) && ot == OT_GOTO_DEPOT && !hangar)) ot = OT_GOTO_STATION; if (ot == type && order->GetDestination() == destination) { /* Remove the order backup! If a station/depot gets removed, we can't/shouldn't restore those broken orders. */ delete ob; diff --git a/src/order_backup.h b/src/order_backup.h index 59404d5beb..c56bc0ecc6 100644 --- a/src/order_backup.h +++ b/src/order_backup.h @@ -63,7 +63,7 @@ public: static void ClearGroup(GroupID group); static void ClearVehicle(const Vehicle *v); - static void RemoveOrder(OrderType type, DestinationID destination); + static void RemoveOrder(OrderType type, DestinationID destination, bool hangar); }; /** diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index 83dacdca45..c2805bef34 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -1834,8 +1834,11 @@ void CheckOrders(const Vehicle *v) * Removes an order from all vehicles. Triggers when, say, a station is removed. * @param type The type of the order (OT_GOTO_[STATION|DEPOT|WAYPOINT]). * @param destination The destination. Can be a StationID, DepotID or WaypointID. + * @param hangar Only used for airports in the destination. + * When false, remove airport and hangar orders. + * When true, remove either airport or hangar order. */ -void RemoveOrderFromAllVehicles(OrderType type, DestinationID destination) +void RemoveOrderFromAllVehicles(OrderType type, DestinationID destination, bool hangar) { Vehicle *v; @@ -1848,7 +1851,7 @@ void RemoveOrderFromAllVehicles(OrderType type, DestinationID destination) Order *order; order = &v->current_order; - if ((v->type == VEH_AIRCRAFT && order->IsType(OT_GOTO_DEPOT) ? OT_GOTO_STATION : order->GetType()) == type && + if ((v->type == VEH_AIRCRAFT && order->IsType(OT_GOTO_DEPOT) && !hangar ? OT_GOTO_STATION : order->GetType()) == type && v->current_order.GetDestination() == destination) { order->MakeDummy(); SetWindowDirty(WC_VEHICLE_VIEW, v->index); @@ -1862,7 +1865,7 @@ restart: OrderType ot = order->GetType(); if (ot == OT_GOTO_DEPOT && (order->GetDepotActionType() & ODATFB_NEAREST_DEPOT) != 0) continue; - if (ot == OT_IMPLICIT || (v->type == VEH_AIRCRAFT && ot == OT_GOTO_DEPOT)) ot = OT_GOTO_STATION; + if (ot == OT_IMPLICIT || (v->type == VEH_AIRCRAFT && ot == OT_GOTO_DEPOT && !hangar)) ot = OT_GOTO_STATION; if (ot == type && order->GetDestination() == destination) { /* We want to clear implicit orders, but we don't want to make them * dummy orders. They should just vanish. Also check the actual order @@ -1896,7 +1899,7 @@ restart: } } - OrderBackup::RemoveOrder(type, destination); + OrderBackup::RemoveOrder(type, destination, hangar); } /** diff --git a/src/order_func.h b/src/order_func.h index 54977181ab..df99394282 100644 --- a/src/order_func.h +++ b/src/order_func.h @@ -17,7 +17,7 @@ #include "company_type.h" /* Functions */ -void RemoveOrderFromAllVehicles(OrderType type, DestinationID destination); +void RemoveOrderFromAllVehicles(OrderType type, DestinationID destination, bool hangar = false); void InvalidateVehicleOrder(const Vehicle *v, int data); void CheckOrders(const Vehicle*); void DeleteVehicleOrders(Vehicle *v, bool keep_orderlist = false, bool reset_order_indices = true); From adb50cebcc8e2dec65c8e0bc67762763e75176e3 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 27 Feb 2019 19:45:42 +0100 Subject: [PATCH 397/622] Update: Translations from eints romanian: 7 changes by alexmerlin1985 --- src/lang/romanian.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 31986c499b..7d644a3a06 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -475,6 +475,7 @@ STR_ABOUT_MENU_SCREENSHOT :Capturează ecr STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Captură mărită STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Mărimea implicită a capturii STR_ABOUT_MENU_GIANT_SCREENSHOT :Capturează toată harta +STR_ABOUT_MENU_SHOW_FRAMERATE :Arată FPS STR_ABOUT_MENU_ABOUT_OPENTTD :Despre 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Aliniere imagini STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Afişează/ascunde casetele de încadrare @@ -923,6 +924,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Rand sud-africa STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalizată... STR_GAME_OPTIONS_CURRENCY_GEL :Lari Georgian (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iranian (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Ruble rusești (RUB) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Autovehiculele circulă... @@ -1118,6 +1120,7 @@ STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Setări joc (st STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Setări companie (stocate în salvări; afectează doar jocurile noi) STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Setări compenia (stocate în salvări; afectează doar compania curentă) STR_CONFIG_SETTING_CATEGORY_HIDES :{BLACK}Arată toate rezultatele de căutare setând{}{SILVER}Categoria {BLACK}în {WHITE}{STRING} +STR_CONFIG_SETTING_TYPE_HIDES :{BLACK}Arată toate rezultatele de căutare setând{}{SILVER}Tipul {BLACK}în {WHITE}Toate tipurile de setări STR_CONFIG_SETTINGS_NONE :{WHITE}- Nespecificat - STR_CONFIG_SETTING_OFF :Inactiv @@ -1328,6 +1331,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Culoarea terenu STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Verde STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Verde închis STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Mov +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Mută harta ținând apăsat click dreapta, poziția cursorului rămânând fixă STR_CONFIG_SETTING_SMOOTH_SCROLLING :Derulare uşoară ecran: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Controlează modul de deplasare a imaginii din ecranul principal când se face click pe harta mică sau când se execută o comandă de deplasare către un obiect anume de pe hartă. Dacă este activată, imaginea se deplasează în mod fluid, altfel imaginea sare direct la zona dorită STR_CONFIG_SETTING_MEASURE_TOOLTIP :Arată o indicaţie de distanţă la folosirea uneltelor de construcţie: {STRING} @@ -1598,6 +1602,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Modalitatea de STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Modalitatea de distribuire pentru alte clase de cargo: {STRING} STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Acurateţea distribuţiei: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE :Efectul distanţei asupra cererii: {STRING} +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Dacă setezi această valoare peste 0, distanța dintre stația origine A al mărfii și o posibilă stație B va afecta cantitatea de marfă trimisă din punctul A în B. Cu cât e mai departe B de A cu atât va fi mai mică cantitatea de marfă transportată. Cu cât mărești această valoare, cu atât mai puțină marfă se livrează spre destinațiile îndepărtate si cu atât mai multă la cele mai apropiate. STR_CONFIG_SETTING_DEMAND_SIZE :Cantitatea de cargo la întoarcere pentru modul simetric: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Saturaţia căilor de capacitate mică înainte de a utiliza căi de capacitate mare: {STRING} @@ -2690,6 +2695,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Detalii STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nicio informaţie disponibilă STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Filtrare după: STR_SAVELOAD_OSKTITLE :{BLACK}Introduceţi un nume pentru salvare @@ -4423,6 +4429,7 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Setul de sunete STR_BASESOUNDS_WIN_DESCRIPTION :Setul de sunete original al Transport Tycoon Deluxe pentru Windows. STR_BASESOUNDS_NONE_DESCRIPTION :Un set de sunete fără nici un sunet inclus. STR_BASEMUSIC_WIN_DESCRIPTION :Setul de muzică original al Transport Tycoon Deluxe pentru Windows. +STR_BASEMUSIC_DOS_DESCRIPTION :Setul de muzică original al Transport Tycoon Deluxe pentru DOS. STR_BASEMUSIC_NONE_DESCRIPTION :Un set de muzică fără muzică inclusă. ##id 0x2000 From 03264059e43c7f8806a565e4d0db9036706b1fc1 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Thu, 28 Feb 2019 17:37:50 +0000 Subject: [PATCH 398/622] Change: Decrease minimum permitted value for script_max_opcode_till_suspend setting (#7243) --- src/table/settings.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/table/settings.ini b/src/table/settings.ini index 2b36e32b7c..5bb2c73aad 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -1524,7 +1524,7 @@ type = SLE_UINT32 from = SLV_107 guiflags = SGF_NEWGAME_ONLY def = 10000 -min = 5000 +min = 500 max = 250000 interval = 2500 str = STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES From 50a0cf19158a1a1fda628a64e3ea490c9d06c42c Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Thu, 28 Feb 2019 17:45:17 +0000 Subject: [PATCH 399/622] Change: Allow towns to build bridges over rails and one-way roads. (#7291) --- src/town_cmd.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index dacf59ddc4..84c7d44f3a 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -1080,14 +1080,14 @@ static bool GrowTownWithBridge(const Town *t, const TileIndex tile, const DiagDi const int delta = TileOffsByDiagDir(bridge_dir); if (slope == SLOPE_FLAT) { - /* Bridges starting on flat tiles are only allowed when crossing rivers. */ + /* Bridges starting on flat tiles are only allowed when crossing rivers, rails or one-way roads. */ do { if (bridge_length++ >= 4) { - /* Allow to cross rivers, not big lakes. */ + /* Allow to cross rivers, not big lakes, nor large amounts of rails or one-way roads. */ return false; } bridge_tile += delta; - } while (IsValidTile(bridge_tile) && IsWaterTile(bridge_tile) && !IsSea(bridge_tile)); + } while (IsValidTile(bridge_tile) && ((IsWaterTile(bridge_tile) && !IsSea(bridge_tile)) || IsPlainRailTile(bridge_tile) || (IsNormalRoadTile(bridge_tile) && GetDisallowedRoadDirections(bridge_tile) != DRD_NONE))); } else { do { if (bridge_length++ >= 11) { @@ -1095,7 +1095,7 @@ static bool GrowTownWithBridge(const Town *t, const TileIndex tile, const DiagDi return false; } bridge_tile += delta; - } while (IsValidTile(bridge_tile) && IsWaterTile(bridge_tile)); + } while (IsValidTile(bridge_tile) && (IsWaterTile(bridge_tile) || IsPlainRailTile(bridge_tile) || (IsNormalRoadTile(bridge_tile) && GetDisallowedRoadDirections(bridge_tile) != DRD_NONE))); } /* no water tiles in between? */ From 76f983a8e75b98233a1b0aee5bdb21aa9c512d9f Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 28 Feb 2019 19:45:43 +0100 Subject: [PATCH 400/622] Update: Translations from eints dutch: 80 changes by JanWillem --- src/lang/dutch.txt | 160 ++++++++++++++++++++++----------------------- 1 file changed, 80 insertions(+), 80 deletions(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 843d641284..44e6ab1041 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1031,9 +1031,9 @@ STR_CURRENCY_SEPARATOR :{LTBLUE}Scheidi STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Stel het scheidingsteken in voor jouw munteenheid STR_CURRENCY_PREFIX :{LTBLUE}Voorvoegsel: {ORANGE}{STRING} -STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Stel het voorloopteken in voor jouw munteenheid +STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Stel het voorvoegsel in voor jouw munteenheid STR_CURRENCY_SUFFIX :{LTBLUE}Achtervoegsel: {ORANGE}{STRING} -STR_CURRENCY_SET_CUSTOM_CURRENCY_SUFFIX_TOOLTIP :{BLACK}Stel het eindteken in voor jouw munteenheid +STR_CURRENCY_SET_CUSTOM_CURRENCY_SUFFIX_TOOLTIP :{BLACK}Stel het achtervoegsel in voor jouw munteenheid STR_CURRENCY_SWITCH_TO_EURO :{LTBLUE}Overgaan op de euro: {ORANGE}{NUM} STR_CURRENCY_SWITCH_TO_EURO_NEVER :{LTBLUE}Overgaan op de euro: {ORANGE}nooit @@ -1043,7 +1043,7 @@ STR_CURRENCY_INCREASE_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Later na STR_CURRENCY_PREVIEW :{LTBLUE}Voorbeeld: {ORANGE}{CURRENCY_LONG} STR_CURRENCY_CUSTOM_CURRENCY_PREVIEW_TOOLTIP :{BLACK}10.000 pond (£) in jouw munteenheid -STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Verander optie van aangepaste valuta +STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Aangepaste valutaparameters wijzigen STR_DIFFICULTY_LEVEL_SETTING_MAXIMUM_NO_COMPETITORS :{LTBLUE}Maximaal aantal tegenstanders: {ORANGE}{COMMA} @@ -1254,7 +1254,7 @@ STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Geld overmaken STR_CONFIG_SETTING_FREIGHT_TRAINS :Gewichtsfactor voor vracht om zware treinen te simuleren: {STRING} STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Stelt in hoe vracht treinen beïnvloedt. Een hogere waarde maakt het vervoer van vracht veeleisender voor treinen, met name in heuvels. STR_CONFIG_SETTING_PLANE_SPEED :Snelheidsfactor voor vliegtuigen: {STRING} -STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Stel de relatieve snelheid van de vliegtuigen in vergelijking met andere typen voertuigen, om de hoogte van het inkomen van het vervoer door vliegtuigen te verminderen +STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Stel de relatieve snelheid van de vliegtuigen in vergelijking met andere typen voertuigen in om de inkomsten door luchttransport te verminderen STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Aantal neerstortende vliegtuigen: {STRING} STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Bepaalt de kans op neerstorten van een vliegtuig @@ -1380,7 +1380,7 @@ STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Uit STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER :Muiswielsnelheid: {STRING} STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Gevoeligheid van verplaatsen met de instellen STR_CONFIG_SETTING_OSK_ACTIVATION :Toetsenbord op scherm: {STRING} -STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Selecteer de methode om het toetsenbord op het scherm te openen voor tekst invoeren in editboxes alleen met behulp van het aanwijsapparaat. Dit is bedoeld voor kleine apparaten zonder toetsenbord +STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Selecteer de methode om het toetsenbord op het scherm te openen voor tekst invoeren in bewerkingsvensters met alleen het aanwijsapparaat. Dit is bedoeld voor kleine apparaten zonder toetsenbord. STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :Uitgeschakeld STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dubbelklik STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Enkel klik (met focus) @@ -1441,7 +1441,7 @@ STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Geluidseffect w STR_CONFIG_SETTING_SOUND_NEW_YEAR :Einde jaar: {STRING} STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Geluidseffect afspelen bij jaaroverzicht van bedrijf t.o.v. vorig jaar STR_CONFIG_SETTING_SOUND_CONFIRM :Bouw: {STRING} -STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Speel geluidseffecten bij succesvolle constructies of andere acties +STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Speel geluidseffecten af wanneer constructies of andere acties zijn gelukt STR_CONFIG_SETTING_SOUND_CLICK :Klikgeluid knoppen: {STRING} STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT :Piep bij het klikken op knoppen STR_CONFIG_SETTING_SOUND_DISASTER :Rampen/ongelukken: {STRING} @@ -1859,7 +1859,7 @@ STR_LIVERY_TRUCK :Vrachtwagen STR_LIVERY_PASSENGER_SHIP :Passagiersschip STR_LIVERY_FREIGHT_SHIP :Vrachtschip STR_LIVERY_HELICOPTER :Helikopter -STR_LIVERY_SMALL_PLANE :Klein Vliegtuig +STR_LIVERY_SMALL_PLANE :Klein vliegtuig STR_LIVERY_LARGE_PLANE :Groot Vliegtuig STR_LIVERY_PASSENGER_TRAM :Passagierstram STR_LIVERY_FREIGHT_TRAM :Vrachttram @@ -1884,15 +1884,15 @@ STR_FACE_LOAD :{BLACK}Laden STR_FACE_LOAD_TOOLTIP :{BLACK}Favoriet gezicht laden STR_FACE_LOAD_DONE :{WHITE}Je favoriete gezicht is geladen uit het OpenTTD-configuratiebestand STR_FACE_FACECODE :{BLACK}Gezichtsnummer -STR_FACE_FACECODE_TOOLTIP :{BLACK}Bekijk en/of bewaar gezichtsnummer van de bedrijfspresident -STR_FACE_FACECODE_CAPTION :{WHITE}Bekijk en/of bewaar huidig gezichtsnummer +STR_FACE_FACECODE_TOOLTIP :{BLACK}Gezichtsnummer van directeur bekijken en/of instellen +STR_FACE_FACECODE_CAPTION :{WHITE}Huidig gezichtsnummer bekijken en/of instellen STR_FACE_FACECODE_SET :{WHITE}Nieuwe gezichtsnummercode is opgeslagen -STR_FACE_FACECODE_ERR :{WHITE}Kon gezichtsnummer niet bewaren - het moet een getal zijn tussen 0 en 4.294.967.295! +STR_FACE_FACECODE_ERR :{WHITE}Kon gezichtsnummer voor directeur niet instellen - moet een getal zijn tussen 0 en 4.294.967.295! STR_FACE_SAVE :{BLACK}Opslaan STR_FACE_SAVE_TOOLTIP :{BLACK}Favoriet gezicht opslaan -STR_FACE_SAVE_DONE :{WHITE}Dit gezicht wordt zal worden opgeslagen als jouw favoriet in het OpenTTD-configuratiebestand +STR_FACE_SAVE_DONE :{WHITE}Dit gezicht wordt in het OpenTTD-configuratiebestand opgeslagen als jouw favoriet STR_FACE_EUROPEAN :{BLACK}Europeaans -STR_FACE_SELECT_EUROPEAN :{BLACK}Selecteer Europeaanse gezichten +STR_FACE_SELECT_EUROPEAN :{BLACK}Selecteer Europese gezichten STR_FACE_AFRICAN :{BLACK}Afrikaans STR_FACE_SELECT_AFRICAN :{BLACK}Selecteer Afrikaanse gezichten STR_FACE_YES :Ja @@ -2072,7 +2072,7 @@ STR_NETWORK_CONNECTING_CAPTION :{WHITE}Verbinde ############ Leave those lines in this order!! STR_NETWORK_CONNECTING_1 :{BLACK}(1/6) Verbinden... -STR_NETWORK_CONNECTING_2 :{BLACK}(2/6) Inloggen... +STR_NETWORK_CONNECTING_2 :{BLACK}(2/6) Verifiëren... STR_NETWORK_CONNECTING_3 :{BLACK}(3/6) Wachten... STR_NETWORK_CONNECTING_4 :{BLACK}(4/6) Kaart downloaden... STR_NETWORK_CONNECTING_5 :{BLACK}(5/6) Gegevens verwerken... @@ -2085,7 +2085,7 @@ STR_NETWORK_CONNECTING_WAITING :{BLACK}{NUM} sp STR_NETWORK_CONNECTING_DOWNLOADING_1 :{BLACK}{BYTES} tot dusver gedownload STR_NETWORK_CONNECTING_DOWNLOADING_2 :{BLACK}{BYTES} / {BYTES} opgehaald -STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Verbreek verbinding +STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Verbinding verbreken STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server is beveiligd. Voer wachtwoord in STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Bedrijf is beveiligd. Voer wachtwoord in @@ -2093,16 +2093,16 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Spelersl # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Spelerslijst -STR_NETWORK_COMPANY_LIST_SPECTATE :Kijk toe +STR_NETWORK_COMPANY_LIST_SPECTATE :Toekijken STR_NETWORK_COMPANY_LIST_NEW_COMPANY :Nieuw bedrijf # Network client list -STR_NETWORK_CLIENTLIST_KICK :Gooi uit het spel -STR_NETWORK_CLIENTLIST_BAN :Verban uit het spel -STR_NETWORK_CLIENTLIST_GIVE_MONEY :Geef geld -STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Praat met iedereen -STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Praat met het bedrijf -STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Praat met deze persoon +STR_NETWORK_CLIENTLIST_KICK :Uit het spel schoppen +STR_NETWORK_CLIENTLIST_BAN :Verbannen +STR_NETWORK_CLIENTLIST_GIVE_MONEY :Geld geven +STR_NETWORK_CLIENTLIST_SPEAK_TO_ALL :Met iedereen praten +STR_NETWORK_CLIENTLIST_SPEAK_TO_COMPANY :Met bedrijf praten +STR_NETWORK_CLIENTLIST_SPEAK_TO_CLIENT :Privébericht STR_NETWORK_SERVER :Server STR_NETWORK_CLIENT :Speler @@ -2217,22 +2217,22 @@ STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}De serve # Content downloading window STR_CONTENT_TITLE :{WHITE}Download extra inhoud STR_CONTENT_TYPE_CAPTION :{BLACK}Type -STR_CONTENT_TYPE_CAPTION_TOOLTIP :{BLACK}Type van de content +STR_CONTENT_TYPE_CAPTION_TOOLTIP :{BLACK}Type inhoud STR_CONTENT_NAME_CAPTION :{BLACK}Naam STR_CONTENT_NAME_CAPTION_TOOLTIP :{BLACK}Naam van de inhoud STR_CONTENT_MATRIX_TOOLTIP :{BLACK}Klik op een regel voor details{}Gebruik het selectievakje om het te selecteren voor download -STR_CONTENT_SELECT_ALL_CAPTION :{BLACK}Selecteer alles +STR_CONTENT_SELECT_ALL_CAPTION :{BLACK}Alles selecteren STR_CONTENT_SELECT_ALL_CAPTION_TOOLTIP :{BLACK}Markeer alle inhoud voor download -STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK}Selecteer updates +STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK}Updates selecteren STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}Markeer alle updates voor bestaande inhoud voor download -STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK}Deselecteer alles -STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}Markeer alle content om niet te downloaden -STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Zoek externe websites +STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK}Niets selecteren +STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}Alle markeringen van inhoud voor download ongedaan maken +STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Externe websites zoeken STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Zoek inhoud niet beschikbaar op de server van OpenTTD op websites die niet gekoppeld zijn aan OpenTTD STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Je verlaat OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}De voorwaarden voor het downloaden van inhoud van externe websites variëren.{}Ga naar de externe website voor instructies over het installeren van de inhoud in OpenTTD.{}Wil je doorgaan? STR_CONTENT_FILTER_TITLE :{BLACK}Tag-/naamfilter: -STR_CONTENT_OPEN_URL :{BLACK}Bezoek website +STR_CONTENT_OPEN_URL :{BLACK}Website bezoeken STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Bezoek de website voor deze inhoud STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Download STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Start met het downloaden van de geselecteerde inhoud @@ -2253,7 +2253,7 @@ STR_CONTENT_DETAIL_FILESIZE :{SILVER}Downloa STR_CONTENT_DETAIL_SELECTED_BECAUSE_OF :{SILVER}Geselecteerd omdat: {WHITE}{STRING} STR_CONTENT_DETAIL_DEPENDENCIES :{SILVER}Afhankelijkheden: {WHITE}{STRING} STR_CONTENT_DETAIL_TAGS :{SILVER}Tags: {WHITE}{STRING} -STR_CONTENT_NO_ZLIB :{WHITE}OpenTTD is gemaakt zonder "zlib"-ondersteuning... +STR_CONTENT_NO_ZLIB :{WHITE}OpenTTD is gemaakt zonder 'zlib'-ondersteuning... STR_CONTENT_NO_ZLIB_SUB :{WHITE}... niet mogelijk gegevens te downloaden # Order of these is important! @@ -2282,9 +2282,9 @@ STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_CONNECTION_LOST :{WHITE}... verb STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE :{WHITE}... bestand niet schrijfbaar STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}Kon gedownload bestand niet uitpakken -STR_MISSING_GRAPHICS_SET_CAPTION :{WHITE}Ontbrekende graphics +STR_MISSING_GRAPHICS_SET_CAPTION :{WHITE}Ontbrekende grafische elementen STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD heeft grafische elementen nodig om te kunnen werken, maar deze zijn niet gevonden. Wil je dat OpenTTD deze downloadt en installeert? -STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Ja, download de graphics +STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Ja, grafische elementen downloaden STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Nee, OpenTTD afsluiten # Transparency settings window @@ -2301,10 +2301,10 @@ STR_TRANSPARENT_LOADING_TOOLTIP :{BLACK}Transpar STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Maak objecten onzichtbaar in plaats van transparant # Linkgraph legend window -STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Vrachtstroomlegende +STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Vrachtstroomlegenda STR_LINKGRAPH_LEGEND_ALL :{BLACK}Alle STR_LINKGRAPH_LEGEND_NONE :{BLACK}Geen -STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Selecteer weer te geven bedrijven +STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Weer te geven bedrijven selecteren STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap @@ -2479,7 +2479,7 @@ STR_STATION_BUILD_AIRPORT_LAYOUT_NAME :{BLACK}Layout { STR_AIRPORT_SMALL :Klein STR_AIRPORT_CITY :Stad STR_AIRPORT_METRO :Grootstedelijk -STR_AIRPORT_INTERNATIONAL :Internationaal vliegveld +STR_AIRPORT_INTERNATIONAL :Internationaal STR_AIRPORT_COMMUTER :Forens STR_AIRPORT_INTERCONTINENTAL :Intercontinentaal STR_AIRPORT_HELIPORT :Heliplatform @@ -2537,15 +2537,15 @@ STR_FOUND_TOWN_CAPTION :{WHITE}Stadsont STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Nieuwe stad STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Nieuwe stad stichten. Shift+klik geeft alleen de verwachte kosten. STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Willekeurige stad -STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Sticht stad op willekeurige locatie +STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Hiermee sticht je een stad op een willekeurige locatie STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Veel willekeurige steden -STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Bedek de kaart met willekeurig geplaatste steden +STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Verspreid willekeurig geplaatste steden over de kaart STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Plaatsnaam: -STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Geef plaatsnaam op -STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Klik om plaatsnaam in te geven +STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Plaatsnaam invoeren +STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Klik om plaatsnaam in te voeren STR_FOUND_TOWN_NAME_RANDOM_BUTTON :{BLACK}Willekeurige naam -STR_FOUND_TOWN_NAME_RANDOM_TOOLTIP :{BLACK}Genereer willekeurige nieuwe naam +STR_FOUND_TOWN_NAME_RANDOM_TOOLTIP :{BLACK}Genereer een willekeurige nieuwe naam STR_FOUND_TOWN_INITIAL_SIZE_TITLE :{YELLOW}Stadsgrootte: STR_FOUND_TOWN_INITIAL_SIZE_SMALL_BUTTON :{BLACK}Klein @@ -2662,7 +2662,7 @@ STR_LAI_TOWN_INDUSTRY_DESCRIPTION_UNDER_CONSTRUCTION :{STRING} (in aa STR_LAI_TREE_NAME_TREES :Bomen STR_LAI_TREE_NAME_RAINFOREST :Regenwoud -STR_LAI_TREE_NAME_CACTUS_PLANTS :Cactusplanten +STR_LAI_TREE_NAME_CACTUS_PLANTS :Cactussen STR_LAI_STATION_DESCRIPTION_RAILROAD_STATION :Treinstation STR_LAI_STATION_DESCRIPTION_AIRCRAFT_HANGAR :Hangar @@ -2715,7 +2715,7 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD- STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Het OpenTTD-team # Framerate display window -STR_FRAMERATE_CAPTION :{WHITE}Frame rate +STR_FRAMERATE_CAPTION :{WHITE}Framesnelheid STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulatiesnelheid: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Aantal gesimuleerde speltikken per seconde. @@ -2724,7 +2724,7 @@ STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Aantal v STR_FRAMERATE_SPEED_FACTOR :{BLACK}Huidige spelsnelheidsfactor: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Hoe snel het spel momenteel draait, vergeleken met de verwachte snelheid bij een normale simulatiesnelheid. STR_FRAMERATE_CURRENT :{WHITE}Huidig -STR_FRAMERATE_AVERAGE :{WHITE}Gemiddelde +STR_FRAMERATE_AVERAGE :{WHITE}Gemiddeld STR_FRAMERATE_DATA_POINTS :{BLACK}Gegevens gebaseerd op {COMMA} metingen STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms @@ -2771,13 +2771,13 @@ STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRIN # Save/load game/scenario -STR_SAVELOAD_SAVE_CAPTION :{WHITE}Spel Opslaan -STR_SAVELOAD_LOAD_CAPTION :{WHITE}Spel Laden -STR_SAVELOAD_SAVE_SCENARIO :{WHITE}Scenario Opslaan +STR_SAVELOAD_SAVE_CAPTION :{WHITE}Spel opslaan +STR_SAVELOAD_LOAD_CAPTION :{WHITE}Spel laden +STR_SAVELOAD_SAVE_SCENARIO :{WHITE}Scenario opslaan STR_SAVELOAD_LOAD_SCENARIO :{WHITE}Scenario laden STR_SAVELOAD_LOAD_HEIGHTMAP :{WHITE}Hoogtekaart laden -STR_SAVELOAD_SAVE_HEIGHTMAP :{WHITE}Hoogtekaart Opslaan -STR_SAVELOAD_HOME_BUTTON :{BLACK}Klik hier om naar de standaard bewaar-/laadmap te gaan +STR_SAVELOAD_SAVE_HEIGHTMAP :{WHITE}Hoogtekaart opslaan +STR_SAVELOAD_HOME_BUTTON :{BLACK}Klik hier om naar de standaard-opslagmap te gaan STR_SAVELOAD_BYTES_FREE :{BLACK}{BYTES} vrij STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Lijst van schijven, mappen en opgeslagen spellen STR_SAVELOAD_EDITBOX_TOOLTIP :{BLACK}Huidige gekozen naam voor opgeslagen spel @@ -2785,10 +2785,10 @@ STR_SAVELOAD_DELETE_BUTTON :{BLACK}Verwijde STR_SAVELOAD_DELETE_TOOLTIP :{BLACK}Verwijder het momenteel geselecteerde opgeslagen spel STR_SAVELOAD_SAVE_BUTTON :{BLACK}Opslaan STR_SAVELOAD_SAVE_TOOLTIP :{BLACK}Het huidige spel opslaan onder de gekozen naam -STR_SAVELOAD_LOAD_BUTTON :{BLACK}Laad +STR_SAVELOAD_LOAD_BUTTON :{BLACK}Laden STR_SAVELOAD_LOAD_TOOLTIP :{BLACK}Laad het geselecteerde spel STR_SAVELOAD_LOAD_HEIGHTMAP_TOOLTIP :{BLACK}Laad de geselecteerde hoogtekaart -STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Spel details +STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Speldetails STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Geen informatie beschikbaar STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} @@ -2827,7 +2827,7 @@ STR_MAPGEN_NORTHWEST :{BLACK}Noordwes STR_MAPGEN_NORTHEAST :{BLACK}Noordoost STR_MAPGEN_SOUTHEAST :{BLACK}Zuidoost STR_MAPGEN_SOUTHWEST :{BLACK}Zuidwest -STR_MAPGEN_BORDER_FREEFORM :{BLACK}Vrij vormen +STR_MAPGEN_BORDER_FREEFORM :{BLACK}Vrije vorm STR_MAPGEN_BORDER_WATER :{BLACK}Water STR_MAPGEN_BORDER_RANDOM :{BLACK}Willekeurig STR_MAPGEN_BORDER_RANDOMIZE :{BLACK}Willekeurig @@ -2839,7 +2839,7 @@ STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Grootte: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} STR_MAPGEN_MAX_HEIGHTLEVEL_QUERY_CAPT :{WHITE}Maximale kaarthoogte wijzigen -STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Verander hoogte van sneeuwgrens +STR_MAPGEN_SNOW_LINE_QUERY_CAPT :{WHITE}Hoogte van sneeuwgrens wijzigen STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Verander startjaar # SE Map generation @@ -2932,7 +2932,7 @@ STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Huidige STR_SAVE_PRESET_CANCEL :{BLACK}Annuleren STR_SAVE_PRESET_CANCEL_TOOLTIP :{BLACK}Voorkeursinstelling niet wijzigen STR_SAVE_PRESET_SAVE :{BLACK}Opslaan -STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Sla de huidige preset op naar de huidig gekozen naam +STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Sla de huidige voorkeursinstelling op onder de huidige gekozen naam # NewGRF parameters window STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}NewGRF-parameters wijzigen @@ -3101,21 +3101,21 @@ STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Reputati STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Beschikbare acties: STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lijst met dingen die mogelijk zijn in deze gemeente - klik op een onderdeel voor meer details -STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Doe het +STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Doen STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Voer de actie uit die in de bovenstaande lijst is geselecteerd STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN :Kleine reclamecampagne STR_LOCAL_AUTHORITY_ACTION_MEDIUM_ADVERTISING_CAMPAIGN :Middelgrote reclamecampagne STR_LOCAL_AUTHORITY_ACTION_LARGE_ADVERTISING_CAMPAIGN :Grote reclamecampagne -STR_LOCAL_AUTHORITY_ACTION_ROAD_RECONSTRUCTION :Betaal wegreparatie +STR_LOCAL_AUTHORITY_ACTION_ROAD_RECONSTRUCTION :Wegreconstructie financieren STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :Standbeeld van directeur bouwen -STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Financier nieuwe gebouwen -STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Koop exclusieve transportrechten +STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Nieuwe gebouwen financieren +STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Exclusieve transportrechten kopen STR_LOCAL_AUTHORITY_ACTION_BRIBE :Gemeentebestuur omkopen -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Begin een kleine reclamecampagne, om meer passagiers en vracht naar jouw transportdiensten te trekken.{}Kosten: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Begin een middelgrote advertentiecampagne, om meer passagiers en vracht naar jouw transportdiensten te trekken.{}Kosten: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Begin een grote advertentiecampagne, om meer passagiers en vracht naar jouw transportdiensten te trekken.{}Kosten: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Begin een kleine reclamecampagne om meer passagiers en vracht naar jouw transportdiensten te trekken.{}Kosten: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Begin een middelgrote reclamecampagne om meer passagiers en vracht naar jouw transportdiensten te trekken.{}Kosten: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Begin een grote reclamecampagne om meer passagiers en vracht naar jouw transportdiensten te trekken.{}Kosten: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Financier een herstelling van het wegennetwerk. Veroorzaakt tot 6 maanden lang een aanzienlijke verstoring van het wegverkeer.{}Kosten: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Een standbeeld bouwen ter ere van jouw bedrijf.{}Kosten: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}De bouw van nieuwe commerciële gebouwen in de stad financieren.{}Kosten: {CURRENCY_LONG} @@ -3284,7 +3284,7 @@ STR_FINANCES_SECTION_TRAIN_INCOME :{GOLD}Treininko STR_FINANCES_SECTION_ROAD_VEHICLE_INCOME :{GOLD}Wegvoertuiginkomsten STR_FINANCES_SECTION_AIRCRAFT_INCOME :{GOLD}Vliegtuiginkomsten STR_FINANCES_SECTION_SHIP_INCOME :{GOLD}Schipinkomsten -STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD} De rente van de lening +STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD} Rente van lening STR_FINANCES_SECTION_OTHER :{GOLD}Overig STR_FINANCES_NEGATIVE_INCOME :{BLACK}-{CURRENCY_LONG} STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG} @@ -3293,9 +3293,9 @@ STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Banksald STR_FINANCES_LOAN_TITLE :{WHITE}Lening STR_FINANCES_MAX_LOAN :{WHITE}Maximale lening: {BLACK}{CURRENCY_LONG} STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG} -STR_FINANCES_BORROW_BUTTON :{BLACK}Leen {CURRENCY_LONG} +STR_FINANCES_BORROW_BUTTON :{BLACK}{CURRENCY_LONG} lenen STR_FINANCES_BORROW_TOOLTIP :{BLACK}Vergroot lening. Ctrl+klik om zoveel als mogelijk te lenen -STR_FINANCES_REPAY_BUTTON :{BLACK}Betaal {CURRENCY_LONG} terug +STR_FINANCES_REPAY_BUTTON :{BLACK}{CURRENCY_LONG} terugbetalen STR_FINANCES_REPAY_TOOLTIP :{BLACK}Betaal deel van lening terug. Ctrl+klik om zoveel als mogelijk terug te betalen STR_FINANCES_INFRASTRUCTURE_BUTTON :{BLACK}Infrastructuur @@ -3467,7 +3467,7 @@ STR_BUY_VEHICLE_SHIP_CAPTION :Nieuwe schepen STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nieuwe vliegtuigen STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Kosten: {GOLD}{CURRENCY_LONG}{BLACK} Gewicht: {GOLD}{WEIGHT_SHORT} -STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Snelheid: {GOLD}{VELOCITY}{BLACK} Kracht: {GOLD}{POWER} +STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Snelheid: {GOLD}{VELOCITY}{BLACK} Vermogen: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Snelheid: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Snelheid op oceaan: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}Snelheid op kanaal/rivier: {GOLD}{VELOCITY} @@ -3487,7 +3487,7 @@ STR_PURCHASE_INFO_NONE :Geen STR_PURCHASE_INFO_ALL_BUT :Alles behalve {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Max. trekkracht: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Bereik: {GOLD}{COMMA} tegels -STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Vliegtuig type: {GOLD}{STRING} +STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Vliegtuigtype: {GOLD}{STRING} STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Spoorvoertuigkeuzelijst. Klik op een spoorvoertuig voor informatie. Ctrl+klik voor spoorvoertuigtype weergeven-verbergen. STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Wegvoertuigkeuzelijst. Klik op wegvoertuig voor informatie. Ctrl+klik voor voertuigtype weergeven-verbergen. @@ -3551,7 +3551,7 @@ STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Schepen STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Vliegtuigen - rechts-klik op een vliegtuig voor informatie STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Sleep trein hierheen om te verkopen -STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Sleep wegvoertuig hier om het te verkopen +STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Sleep wegvoertuig hierheen om het te verkopen STR_DEPOT_SHIP_SELL_TOOLTIP :{BLACK}Sleep schip hier om het te verkopen STR_DEPOT_AIRCRAFT_SELL_TOOLTIP :{BLACK}Sleep vliegtuig hier om het te verkopen @@ -3574,7 +3574,7 @@ STR_DEPOT_AIRCRAFT_NEW_VEHICLES_BUTTON :{BLACK}Nieuwe v STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP :{BLACK}Koop nieuwe trein STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_TOOLTIP :{BLACK}Koop nieuw wegvoertuig -STR_DEPOT_SHIP_NEW_VEHICLES_TOOLTIP :{BLACK}Koop nieuw schip +STR_DEPOT_SHIP_NEW_VEHICLES_TOOLTIP :{BLACK}Koop een nieuw schip STR_DEPOT_AIRCRAFT_NEW_VEHICLES_TOOLTIP :{BLACK}Koop een nieuw vliegtuig STR_DEPOT_CLONE_TRAIN :{BLACK}Trein klonen @@ -3621,11 +3621,11 @@ STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :zweeflocomotief STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Kosten: {CURRENCY_LONG} Gewicht: {WEIGHT_SHORT}{}Snelheid: {VELOCITY} Kracht: {POWER}{}Lopende kosten: {CURRENCY_LONG}/jr{}Capaciteit: {CARGO_LONG} STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Kosten: {CURRENCY_LONG} Gewicht: {WEIGHT_SHORT}{}Snelheid: {VELOCITY} Kracht: {POWER} Max. T.E.: {6:FORCE}{}Lopende kosten: {4:CURRENCY_LONG}/yr{}Capaciteit: {5:CARGO_LONG} -STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Kosten: {CURRENCY_LONG} Max. Snelheid: {VELOCITY}{}Capaciteit: {CARGO_LONG}{}Gebruikskosten: {CURRENCY_LONG}/jaar -STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Kosten: {CURRENCY_LONG} Max. Snelheid: {VELOCITY}{}Vliegtuig type: {STRING}{}Capaciteit: {CARGO_LONG}, {CARGO_LONG}{}Gebruikskosten: {CURRENCY_LONG}/jaar -STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Kosten: {CURRENCY_LONG} Max. Snelheid: {VELOCITY}{}Vliegtuig type: {STRING}{}Capaciteit: {CARGO_LONG}{}Gebruikskosten: {CURRENCY_LONG}/jaar -STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Kosten: {CURRENCY_LONG} Max. Snelheid: {VELOCITY}{}Vliegtuig type: {STRING} Bereik: {COMMA} tiles{}Capaciteit: {CARGO_LONG}, {CARGO_LONG}{}Gebruikskosten: {CURRENCY_LONG}/jaar -STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Kosten: {CURRENCY_LONG} Max. Snelheid: {VELOCITY}{}Vliegtuig type: {STRING} Bereik: {COMMA} tiles{}Capaciteit: {CARGO_LONG}{}Gebruikskosten: {CURRENCY_LONG}/jaar +STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Kosten: {CURRENCY_LONG} Max.snelheid: {VELOCITY}{}Capaciteit: {CARGO_LONG}{}Gebruikskosten: {CURRENCY_LONG}/jaar +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_CAP_RUNCOST :{BLACK}Kosten: {CURRENCY_LONG} Max.snelheid: {VELOCITY}{}Vliegtuigtype: {STRING}{}Capaciteit: {CARGO_LONG}, {CARGO_LONG}{}Gebruikskosten: {CURRENCY_LONG}/jaar +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_CAP_RUNCOST :{BLACK}Kosten: {CURRENCY_LONG} Max.snelheid: {VELOCITY}{}Vliegtuigtype: {STRING}{}Capaciteit: {CARGO_LONG}{}Gebruikskosten: {CURRENCY_LONG}/jaar +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Kosten: {CURRENCY_LONG} Max.snelheid: {VELOCITY}{}Vliegtuigtype: {STRING} Bereik: {COMMA} tiles{}Capaciteit: {CARGO_LONG}, {CARGO_LONG}{}Gebruikskosten: {CURRENCY_LONG}/jaar +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Kosten: {CURRENCY_LONG} Max.snelheid: {VELOCITY}{}Vliegtuigtype: {STRING} Bereik: {COMMA} tiles{}Capaciteit: {CARGO_LONG}{}Gebruikskosten: {CURRENCY_LONG}/jaar # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Vervang {STRING} - {STRING} @@ -3747,11 +3747,11 @@ STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Leeftijd STR_VEHICLE_INFO_AGE :{COMMA} ja{P ar ren} ({COMMA}) STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} ja{P ar ren} ({COMMA}) -STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Max. snelheid: {LTBLUE}{VELOCITY} -STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Max. snelheid: {LTBLUE}{VELOCITY} {BLACK}Vliegtuigtype: {LTBLUE}{STRING} -STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Max. snelheid: {LTBLUE}{VELOCITY} {BLACK}Vliegtuig type: {LTBLUE}{STRING} {BLACK}Bereik: {LTBLUE}{COMMA} tegels -STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Gewicht: {LTBLUE}{WEIGHT_SHORT} {BLACK}Kracht: {LTBLUE}{POWER}{BLACK} Max. snelheid: {LTBLUE}{VELOCITY} -STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Gewicht: {LTBLUE}{WEIGHT_SHORT} {BLACK}Kracht: {LTBLUE}{POWER}{BLACK} Max. snelheid: {LTBLUE}{VELOCITY} {BLACK}Max. T.K.: {LTBLUE}{FORCE} +STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Max.snelheid: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Max.snelheid: {LTBLUE}{VELOCITY} {BLACK}Vliegtuigtype: {LTBLUE}{STRING} +STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Max.snelheid: {LTBLUE}{VELOCITY} {BLACK}Vliegtuigtype: {LTBLUE}{STRING} {BLACK}Bereik: {LTBLUE}{COMMA} tegels +STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Gewicht: {LTBLUE}{WEIGHT_SHORT} {BLACK}Vermogen: {LTBLUE}{POWER}{BLACK} Max.snelheid: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Gewicht: {LTBLUE}{WEIGHT_SHORT} {BLACK}Vermogen: {LTBLUE}{POWER}{BLACK} Max.snelheid: {LTBLUE}{VELOCITY} {BLACK}Max. tr.kr..: {LTBLUE}{FORCE} STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Winst dit jaar: {LTBLUE}{CURRENCY_LONG} (vorig jaar: {CURRENCY_LONG}) STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Betrouwbaarheid: {LTBLUE}{COMMA}% {BLACK}Aantal keren motorpech sinds laatste onderhoud: {LTBLUE}{COMMA} @@ -4046,9 +4046,9 @@ STR_TIMETABLE_DEPARTURE_ABBREVIATION :V: STR_DATE_CAPTION :{WHITE}Datum selecteren STR_DATE_SET_DATE :{BLACK}Datum selecteren STR_DATE_SET_DATE_TOOLTIP :{BLACK}Gebruik de geselecteerde datum als startdatum voor de dienstregeling -STR_DATE_DAY_TOOLTIP :{BLACK}Selecteer dag -STR_DATE_MONTH_TOOLTIP :{BLACK}Selecteer maand -STR_DATE_YEAR_TOOLTIP :{BLACK}Selecteer jaar +STR_DATE_DAY_TOOLTIP :{BLACK}Selecteer de dag +STR_DATE_MONTH_TOOLTIP :{BLACK}Selecteer de maand +STR_DATE_YEAR_TOOLTIP :{BLACK}Selecteer het jaar # AI debug window @@ -4199,7 +4199,7 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Alleen b STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Grote schermfoto STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}De schermfoto heeft een resolutie van {COMMA} x {COMMA} pixels. Het maken van de schermfoto kan even duren. Verder gaan? -STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Schermafbeelding succesvol opgeslagen als '{STRING}' +STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Schermafbeelding opgeslagen als '{STRING}' STR_ERROR_SCREENSHOT_FAILED :{WHITE}Schermfoto mislukt! # Error message titles From 9ad511262847c7137fdd7e3c811fea070ac0e72b Mon Sep 17 00:00:00 2001 From: PeterN Date: Thu, 28 Feb 2019 19:33:31 +0000 Subject: [PATCH 401/622] Change: [AzurePipelines] Add freetype dependency for OSX. (#7299) --- azure-pipelines/templates/osx-dependencies.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/azure-pipelines/templates/osx-dependencies.yml b/azure-pipelines/templates/osx-dependencies.yml index c4b723c58b..0393a56621 100644 --- a/azure-pipelines/templates/osx-dependencies.yml +++ b/azure-pipelines/templates/osx-dependencies.yml @@ -1,11 +1,12 @@ steps: - script: | set -ex - HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config lzo xz libpng + HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config lzo xz libpng freetype # Remove the dynamic libraries of these libraries, to ensure we use # the static versions. That is important, as it is unlikely any # end-user has these brew libraries installed. rm /usr/local/Cellar/lzo/*/lib/*.dylib rm /usr/local/Cellar/xz/*/lib/*.dylib rm /usr/local/Cellar/libpng/*/lib/*.dylib + rm /usr/local/Cellar/freetype/*/lib/*.dylib displayName: 'Install dependencies' From 1447661d204570883cd1d463f2f08f81948d436e Mon Sep 17 00:00:00 2001 From: Eddi-z <43699911+Eddi-z@users.noreply.github.com> Date: Fri, 1 Mar 2019 00:00:50 +0100 Subject: [PATCH 402/622] Cleanup: spurious TODOs in newgrf.cpp (#7297) --- src/newgrf.cpp | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 74d29e3e50..ff10287981 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -5828,7 +5828,6 @@ static void GraphicsNew(ByteReader *buf) * B graphics-type What set of graphics the sprites define. * E num-sprites How many sprites are in this set? * V other data Graphics type specific data. Currently unused. */ - /* TODO */ uint8 type = buf->ReadByte(); uint16 num = buf->ReadExtendedByte(); @@ -6216,7 +6215,6 @@ static void SkipIf(ByteReader *buf) * B condition-type * V value * B num-sprites */ - /* TODO: More params. More condition types. */ uint32 cond_val = 0; uint32 mask = 0; bool result; @@ -6902,12 +6900,6 @@ static void ParamSet(ByteReader *buf) src2 = (src2 == 0xFF) ? data : GetParamVal(src2, NULL); } - /* TODO: You can access the parameters of another GRF file by using - * source2=FE, source1=the other GRF's parameter number and data=GRF - * ID. This is only valid with operation 00 (set). If the GRF ID - * cannot be found, a value of 0 is used for the parameter value - * instead. */ - uint32 res; switch (oper) { case 0x00: @@ -7008,13 +7000,13 @@ static void ParamSet(ByteReader *buf) break; } - /* @todo implement */ - case 0x93: // Tile refresh offset to left + /* not implemented */ + case 0x93: // Tile refresh offset to left -- Intended to allow support for larger sprites, not necessary for OTTD case 0x94: // Tile refresh offset to right case 0x95: // Tile refresh offset upwards case 0x96: // Tile refresh offset downwards - case 0x97: // Snow line height - case 0x99: // Global ID offset + case 0x97: // Snow line height -- Better supported by feature 8 property 10h (snow line table) TODO: implement by filling the entire snow line table with the given value + case 0x99: // Global ID offset -- Not necessary since IDs are remapped automatically grfmsg(7, "ParamSet: Skipping unimplemented target 0x%02X", target); break; @@ -8237,7 +8229,6 @@ static void ResetNewGRFErrors() /** * Reset all NewGRF loaded data - * TODO */ void ResetNewGRFData() { From 7ecfae8f7f42906065d8861d424271c1a412ff12 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 1 Mar 2019 19:45:42 +0100 Subject: [PATCH 403/622] Update: Translations from eints turkish: 4 changes by DarkSapling danish: 10 changes by Deb622 norwegian (bokmal): 11 changes by Leifbk portuguese: 11 changes by vesgo --- src/lang/danish.txt | 20 ++++++++++---------- src/lang/norwegian_bokmal.txt | 11 +++++++++++ src/lang/portuguese.txt | 11 +++++++++++ src/lang/turkish.txt | 4 ++++ 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/lang/danish.txt b/src/lang/danish.txt index f70ea0f53e..d10763b597 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -840,7 +840,7 @@ STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLAC STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Insekter foresager kaos ved {INDUSTRY}!{}Produktionen er faldet med 50% STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}{STRING}produktionen på {INDUSTRY} sænkes med {COMMA}%! -STR_NEWS_TRAIN_IS_WAITING :{WHITE}{VEHICLE} venter i remisen +STR_NEWS_TRAIN_IS_WAITING :{WHITE}{VEHICLE} afventer i remisen STR_NEWS_ROAD_VEHICLE_IS_WAITING :{WHITE}{VEHICLE} venter på værkstedet STR_NEWS_SHIP_IS_WAITING :{WHITE}{VEHICLE} venter i skibsdokken STR_NEWS_AIRCRAFT_IS_WAITING :{WHITE}{VEHICLE} venter i hangaren @@ -2152,7 +2152,7 @@ STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Der opst STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Revisionen af denne klient passer ikke sammen med serverens revision STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Forkert kodeord STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Serveren er fuld -STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Du har forbud mod at bruge denne server +STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Du er bandlyst fra denne server STR_NETWORK_ERROR_KICKED :{WHITE}Du blev smidt ud af spillet STR_NETWORK_ERROR_CHEATER :{WHITE}Snyderi er ikke tilladt på denne server STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Du sendte for mange kommandoer til serveren @@ -2348,7 +2348,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Ombyg/op STR_RAIL_NAME_RAILROAD :Jernbane STR_RAIL_NAME_ELRAIL :Elektrisk jernbane STR_RAIL_NAME_MONORAIL :Monorail -STR_RAIL_NAME_MAGLEV :Magnetskinne +STR_RAIL_NAME_MAGLEV :Magnetsvævebane # Rail depot construction window STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Retning af remise @@ -3258,7 +3258,7 @@ STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Vis alle STR_STATION_VIEW_RENAME_STATION_CAPTION :Omdøb stationen/fragtcentralen STR_STATION_VIEW_CLOSE_AIRPORT :{BLACK}Luk lufthavn -STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Undgå at fly lander i denne lufthavn +STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Forhindre at fly lander i denne lufthavn # Waypoint/buoy view window STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} @@ -3457,7 +3457,7 @@ STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Nye jernbanekøretøjer -STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Nyt elektrisk lokomotiv +STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Nye elektriske jernbanekøretøjer STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Nye monorailkøretøjer STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Nye magnetskinnekøretøjer @@ -3585,7 +3585,7 @@ STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Klon fly STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Dette vil købe en kopi af toget inklusiv alle vogne. Klik på denne knap og så på et tog indeni eller udenfor remisen. Ctrl-klik vil kopiere ordrer. Shift-klik vil vise prisoverslag. STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Dette vil købe en kopi af køretøjet. Klik på denne knap og så på et køretøj indeni eller udenfor værkstedet. Ctrl-klik vil dele ordrer. Shift-klik viser anslået pris uden køb STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Dette vil købe en kopi af skibet. Klik på denne knap og så på et skib indeni eller udenfor dokken. Ctrl-klik vil dele ordrer. Shift-klik vil vise prisoverslag. -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Dette vil købe en kopi af et fly. Klik på denne knap og så på et fly indeni eller udenfor hangaren. Ctrl-klik vil dele ordrer. Shift-klik vil vise prisoverslag. +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Dette vil købe en kopi af et fly. Klik på denne knap og så på et fly indeni eller udenfor hangaren. Ctrl-klik vil dele ordrer. Shift-klik viser estimerede omkostninger uden at indkøbe STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centrer skærmen over remisens lokalitet. Ctrl+Klik åbner et nyt vindue ved remisens lokalitet. STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centrer skærmen over værkstedets lokalitet. Ctrl+Klik åbner et nyt vindue ved køretøjsværkstedets lokalitet. @@ -3595,7 +3595,7 @@ STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrér STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Vis en liste over alle tog med denne remise i ordrelisten STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Vis liste over alle køretøjer med dette værksted i ordrelisten STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TOOLTIP :{BLACK}Vis liste over alle skibe med denne skibsdok i ordrelisten -STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TOOLTIP :{BLACK}Vis liste over alle fly med en hangar ved denne lufthavn i ordrelisten +STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TOOLTIP :{BLACK}Hent en liste over alle fly der har hvilken som helst hangar ved denne lufthavn i deres ordrer STR_DEPOT_MASS_STOP_DEPOT_TRAIN_TOOLTIP :{BLACK}Klik for at stoppe alle toge i remisen STR_DEPOT_MASS_STOP_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Klik for at stoppe alle køretøjer i værkstedet @@ -3617,7 +3617,7 @@ STR_ENGINE_PREVIEW_ROAD_VEHICLE :vejkøretøj STR_ENGINE_PREVIEW_AIRCRAFT :fly STR_ENGINE_PREVIEW_SHIP :skib STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :monoraillokomotiv -STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :magnetskinnelokomotiv +STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :magnettog STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Pris: {CURRENCY_LONG} Vægt: {WEIGHT_SHORT}{}Hastighed: {VELOCITY} Styrke: {POWER}{}Driftsomkostninger: {CURRENCY_LONG}/år{}Kapacitet: {CARGO_LONG} STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Pris: {CURRENCY_LONG} Vægt: {WEIGHT_SHORT}{}Hastighed: {VELOCITY} Hestekræfter: {POWER} Maks. Trækkraft: {6:FORCE}{}Driftsomkostning: {4:CURRENCY_LONG}/år{}Kapacitet: {5:CARGO_LONG} @@ -4052,7 +4052,7 @@ STR_DATE_YEAR_TOOLTIP :{BLACK}Vælg å # AI debug window -STR_AI_DEBUG :{WHITE}Computerspiller/Spilscript-debug +STR_AI_DEBUG :{WHITE}KI/Spilscript-debug STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} (v{NUM}) STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Navn på scriptet STR_AI_DEBUG_SETTINGS :{BLACK}Indstillinger @@ -4089,7 +4089,7 @@ STR_AI_CONFIG_MOVE_DOWN :{BLACK}Flyt ned STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Flyt valgte computerspiller ned i listen STR_AI_CONFIG_GAMESCRIPT :{SILVER}Spilscript -STR_AI_CONFIG_AI :{SILVER}AIer +STR_AI_CONFIG_AI :{SILVER}KI'er STR_AI_CONFIG_CHANGE :{BLACK}Vælg {STRING} STR_AI_CONFIG_CHANGE_NONE :Ingen ændringer diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 79114a2e18..ef621f40f4 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -997,7 +997,12 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :2 ganger størrelse STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :4 ganger størrelse +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Skriftstørrelse +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Velg skriftstørrelse for grensesnitt +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Dobbel størrelse +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Firedobbel størrelse STR_GAME_OPTIONS_BASE_GRF :{BLACK}Grafikksett STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Velg grafikksett som skal brukes @@ -2746,6 +2751,9 @@ STR_FRAMERATE_DRAWING :{BLACK}Grafikkt STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Synsfelt for spillverden: STR_FRAMERATE_VIDEO :{BLACK}Video output: STR_FRAMERATE_SOUND :{BLACK}Lydmiksing: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} GS/AI total: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Game script: +STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Spill-løkke @@ -2760,6 +2768,9 @@ STR_FRAMETIME_CAPTION_DRAWING :Grafikktegning STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Tegning av synsfelt for spillverden STR_FRAMETIME_CAPTION_VIDEO :Video output STR_FRAMETIME_CAPTION_SOUND :Lydmiksing +STR_FRAMETIME_CAPTION_ALLSCRIPTS :GS/AI scripts total +STR_FRAMETIME_CAPTION_GAMESCRIPT :Game script +STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING} ############ End of leave-in-this-order diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index cb70ceeae3..1622766929 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -996,7 +996,12 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Dobro do tamanho STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quádruplo do tamanho +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Tamanho da fonte +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Seleccionar tamanho da fonte de interface a usar +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Dobro do tamanho +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Quádruplo do tamanho STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunto de gráficos base STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Seleccione o conjunto de gráficos base a usar @@ -2743,6 +2748,9 @@ STR_FRAMERATE_DRAWING :{BLACK}Renderiz STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Janelas de exibição do mundo: STR_FRAMERATE_VIDEO :{BLACK}Saída de video: STR_FRAMERATE_SOUND :{BLACK}Mistura de Som: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} GS/AI total: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Script de jogo: +STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Loop de jogo @@ -2757,6 +2765,9 @@ STR_FRAMETIME_CAPTION_DRAWING :Renderização STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Renderização de janela de exibição do mundo STR_FRAMETIME_CAPTION_VIDEO :Saída de video STR_FRAMETIME_CAPTION_SOUND :Mistura de Som +STR_FRAMETIME_CAPTION_ALLSCRIPTS :total scripts GS/AI +STR_FRAMETIME_CAPTION_GAMESCRIPT :Script de jogo +STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING} ############ End of leave-in-this-order diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 9be9cf4590..74b56f6558 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -996,7 +996,10 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :İki kat büyük STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Dört kat büyük +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :Arayüz boyutunu seç +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Yazı iki kat büyük STR_GAME_OPTIONS_BASE_GRF :{BLACK}Temel grafik kümesi STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Kullanılacak temel grafik kümesini seçin @@ -2743,6 +2746,7 @@ STR_FRAMERATE_DRAWING :{BLACK}Grafik i STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Dünya görüş alanları: STR_FRAMERATE_VIDEO :{BLACK}Video çıkışı: STR_FRAMERATE_SOUND :{BLACK}Ses karıştırma: +STR_FRAMERATE_GAMESCRIPT :Oyun scripti ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Oyun döngüsü From 63fe6c65983a4cf2eba4995d03abd7e8a39c4a43 Mon Sep 17 00:00:00 2001 From: PeterN Date: Sat, 2 Mar 2019 08:06:02 +0000 Subject: [PATCH 404/622] Codechange: Make std::stack use std::vector container in string formatting/drawing. (#7305) This is a very minor performance increase which can add up during operations such as sorting. Performance impact my be platform/compiler dependent. --- src/gfx_layout.h | 3 ++- src/strings.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gfx_layout.h b/src/gfx_layout.h index f6fc3b5c71..94cbac073a 100644 --- a/src/gfx_layout.h +++ b/src/gfx_layout.h @@ -19,6 +19,7 @@ #include #include #include +#include #ifdef WITH_ICU_LAYOUT #include "layout/ParagraphLayout.h" @@ -35,7 +36,7 @@ struct FontState { FontSize fontsize; ///< Current font size. TextColour cur_colour; ///< Current text colour. - std::stack colour_stack; ///< Stack of colours to assist with colour switching. + std::stack> colour_stack; ///< Stack of colours to assist with colour switching. FontState() : fontsize(FS_END), cur_colour(TC_INVALID) {} FontState(TextColour colour, FontSize fontsize) : fontsize(fontsize), cur_colour(colour) {} diff --git a/src/strings.cpp b/src/strings.cpp index 2cc3a23be2..a3ece9830e 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -791,7 +791,7 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg WChar b = '\0'; uint next_substr_case_index = 0; char *buf_start = buff; - std::stack str_stack; + std::stack> str_stack; str_stack.push(str_arg); for (;;) { From c3bc7d657e84824bb2cfdea39f604c33110eaa14 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sat, 2 Mar 2019 00:05:36 +0000 Subject: [PATCH 405/622] Codechange: Remove ability for SDL to be dynamically loaded on Windows --- projects/openttd_vs140.vcxproj | 2 - projects/openttd_vs140.vcxproj.filters | 6 -- projects/openttd_vs141.vcxproj | 2 - projects/openttd_vs141.vcxproj.filters | 6 -- projects/openttd_vs142.vcxproj | 2 - projects/openttd_vs142.vcxproj.filters | 6 -- source.list | 4 - src/crashlog.cpp | 11 +-- src/sdl.cpp | 119 ------------------------- src/sdl.h | 71 --------------- src/sound/sdl_s.cpp | 22 +++-- src/video/sdl_v.cpp | 95 ++++++++++---------- 12 files changed, 66 insertions(+), 280 deletions(-) delete mode 100644 src/sdl.cpp delete mode 100644 src/sdl.h diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index b2dbfd2932..c5137a61d4 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -410,7 +410,6 @@ - @@ -623,7 +622,6 @@ - diff --git a/projects/openttd_vs140.vcxproj.filters b/projects/openttd_vs140.vcxproj.filters index e93c94f1f7..751e54887c 100644 --- a/projects/openttd_vs140.vcxproj.filters +++ b/projects/openttd_vs140.vcxproj.filters @@ -318,9 +318,6 @@ Source Files - - Source Files - Source Files @@ -957,9 +954,6 @@ Header Files - - Header Files - Header Files diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj index 92edccd7c9..66974da28f 100644 --- a/projects/openttd_vs141.vcxproj +++ b/projects/openttd_vs141.vcxproj @@ -410,7 +410,6 @@ - @@ -623,7 +622,6 @@ - diff --git a/projects/openttd_vs141.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters index e93c94f1f7..751e54887c 100644 --- a/projects/openttd_vs141.vcxproj.filters +++ b/projects/openttd_vs141.vcxproj.filters @@ -318,9 +318,6 @@ Source Files - - Source Files - Source Files @@ -957,9 +954,6 @@ Header Files - - Header Files - Header Files diff --git a/projects/openttd_vs142.vcxproj b/projects/openttd_vs142.vcxproj index 34f7c5f280..f0a75ff827 100644 --- a/projects/openttd_vs142.vcxproj +++ b/projects/openttd_vs142.vcxproj @@ -410,7 +410,6 @@ - @@ -623,7 +622,6 @@ - diff --git a/projects/openttd_vs142.vcxproj.filters b/projects/openttd_vs142.vcxproj.filters index e93c94f1f7..751e54887c 100644 --- a/projects/openttd_vs142.vcxproj.filters +++ b/projects/openttd_vs142.vcxproj.filters @@ -318,9 +318,6 @@ Source Files - - Source Files - Source Files @@ -957,9 +954,6 @@ Header Files - - Header Files - Header Files diff --git a/source.list b/source.list index 358b16a7cd..ce6c4cf150 100644 --- a/source.list +++ b/source.list @@ -71,9 +71,6 @@ rev.cpp road.cpp roadstop.cpp screenshot.cpp -#if SDL - sdl.cpp -#end settings.cpp signal.cpp signs.cpp @@ -312,7 +309,6 @@ roadstop_base.h roadveh.h safeguards.h screenshot.h -sdl.h sound/sdl_s.h video/sdl_v.h settings_func.h diff --git a/src/crashlog.cpp b/src/crashlog.cpp index 78d9b1465b..5aa707eb5d 100644 --- a/src/crashlog.cpp +++ b/src/crashlog.cpp @@ -62,7 +62,6 @@ #include #endif #ifdef WITH_SDL -# include "sdl.h" # include #endif /* WITH_SDL */ #ifdef WITH_ZLIB @@ -268,14 +267,8 @@ char *CrashLog::LogLibraries(char *buffer, const char *last) const #endif /* WITH_PNG */ #ifdef WITH_SDL -#ifdef DYNAMICALLY_LOADED_SDL - if (SDL_CALL SDL_Linked_Version != NULL) { -#else - { -#endif - const SDL_version *v = SDL_CALL SDL_Linked_Version(); - buffer += seprintf(buffer, last, " SDL: %d.%d.%d\n", v->major, v->minor, v->patch); - } + const SDL_version *v = SDL_Linked_Version(); + buffer += seprintf(buffer, last, " SDL: %d.%d.%d\n", v->major, v->minor, v->patch); #endif /* WITH_SDL */ #ifdef WITH_ZLIB diff --git a/src/sdl.cpp b/src/sdl.cpp deleted file mode 100644 index 79e9ed2927..0000000000 --- a/src/sdl.cpp +++ /dev/null @@ -1,119 +0,0 @@ -/* $Id$ */ - -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/** @file sdl.cpp Implementation of SDL support. */ - -#include "stdafx.h" - -#ifdef WITH_SDL - -#include "sdl.h" -#include - -/** Number of users of the SDL library. */ -static int _sdl_usage; - -#ifdef DYNAMICALLY_LOADED_SDL - -#include "os/windows/win32.h" - -#define M(x) x "\0" -static const char sdl_files[] = - M("sdl.dll") - M("SDL_Init") - M("SDL_InitSubSystem") - M("SDL_GetError") - M("SDL_QuitSubSystem") - M("SDL_UpdateRect") - M("SDL_UpdateRects") - M("SDL_SetColors") - M("SDL_WM_SetCaption") - M("SDL_ShowCursor") - M("SDL_FreeSurface") - M("SDL_PollEvent") - M("SDL_WarpMouse") - M("SDL_GetTicks") - M("SDL_OpenAudio") - M("SDL_PauseAudio") - M("SDL_CloseAudio") - M("SDL_LockSurface") - M("SDL_UnlockSurface") - M("SDL_GetModState") - M("SDL_Delay") - M("SDL_Quit") - M("SDL_SetVideoMode") - M("SDL_EnableKeyRepeat") - M("SDL_EnableUNICODE") - M("SDL_VideoDriverName") - M("SDL_ListModes") - M("SDL_GetKeyState") - M("SDL_LoadBMP_RW") - M("SDL_RWFromFile") - M("SDL_SetColorKey") - M("SDL_WM_SetIcon") - M("SDL_MapRGB") - M("SDL_VideoModeOK") - M("SDL_Linked_Version") - M("") -; -#undef M - -SDLProcs sdl_proc; - -static const char *LoadSdlDLL() -{ - if (sdl_proc.SDL_Init != NULL) { - return NULL; - } - if (!LoadLibraryList((Function *)(void *)&sdl_proc, sdl_files)) { - return "Unable to load sdl.dll"; - } - return NULL; -} - -#endif /* DYNAMICALLY_LOADED_SDL */ - -#include "safeguards.h" - -/** - * Open the SDL library. - * @param x The subsystem to load. - */ -const char *SdlOpen(uint32 x) -{ -#ifdef DYNAMICALLY_LOADED_SDL - { - const char *s = LoadSdlDLL(); - if (s != NULL) return s; - } -#endif - if (_sdl_usage++ == 0) { - if (SDL_CALL SDL_Init(x | SDL_INIT_NOPARACHUTE) == -1) return SDL_CALL SDL_GetError(); - } else if (x != 0) { - if (SDL_CALL SDL_InitSubSystem(x) == -1) return SDL_CALL SDL_GetError(); - } - - return NULL; -} - -/** - * Close the SDL library. - * @param x The subsystem to close. - */ -void SdlClose(uint32 x) -{ - if (x != 0) { - SDL_CALL SDL_QuitSubSystem(x); - } - if (--_sdl_usage == 0) { - SDL_CALL SDL_Quit(); - } -} - -#endif diff --git a/src/sdl.h b/src/sdl.h deleted file mode 100644 index 9033899a59..0000000000 --- a/src/sdl.h +++ /dev/null @@ -1,71 +0,0 @@ -/* $Id$ */ - -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/** @file sdl.h SDL support. */ - -#ifndef SDL_H -#define SDL_H - -const char *SdlOpen(uint32 x); -void SdlClose(uint32 x); - -#ifdef _WIN32 - #define DYNAMICALLY_LOADED_SDL -#endif - -#ifdef DYNAMICALLY_LOADED_SDL - #include - - struct SDLProcs { - int (SDLCALL *SDL_Init)(Uint32); - int (SDLCALL *SDL_InitSubSystem)(Uint32); - char *(SDLCALL *SDL_GetError)(); - void (SDLCALL *SDL_QuitSubSystem)(Uint32); - void (SDLCALL *SDL_UpdateRect)(SDL_Surface *, Sint32, Sint32, Uint32, Uint32); - void (SDLCALL *SDL_UpdateRects)(SDL_Surface *, int, SDL_Rect *); - int (SDLCALL *SDL_SetColors)(SDL_Surface *, SDL_Color *, int, int); - void (SDLCALL *SDL_WM_SetCaption)(const char *, const char *); - int (SDLCALL *SDL_ShowCursor)(int); - void (SDLCALL *SDL_FreeSurface)(SDL_Surface *); - int (SDLCALL *SDL_PollEvent)(SDL_Event *); - void (SDLCALL *SDL_WarpMouse)(Uint16, Uint16); - uint32 (SDLCALL *SDL_GetTicks)(); - int (SDLCALL *SDL_OpenAudio)(SDL_AudioSpec *, SDL_AudioSpec*); - void (SDLCALL *SDL_PauseAudio)(int); - void (SDLCALL *SDL_CloseAudio)(); - int (SDLCALL *SDL_LockSurface)(SDL_Surface*); - void (SDLCALL *SDL_UnlockSurface)(SDL_Surface*); - SDLMod (SDLCALL *SDL_GetModState)(); - void (SDLCALL *SDL_Delay)(Uint32); - void (SDLCALL *SDL_Quit)(); - SDL_Surface *(SDLCALL *SDL_SetVideoMode)(int, int, int, Uint32); - int (SDLCALL *SDL_EnableKeyRepeat)(int, int); - void (SDLCALL *SDL_EnableUNICODE)(int); - void (SDLCALL *SDL_VideoDriverName)(char *, int); - SDL_Rect **(SDLCALL *SDL_ListModes)(void *, int); - Uint8 *(SDLCALL *SDL_GetKeyState)(int *); - SDL_Surface *(SDLCALL *SDL_LoadBMP_RW)(SDL_RWops *, int); - SDL_RWops *(SDLCALL *SDL_RWFromFile)(const char *, const char *); - int (SDLCALL *SDL_SetColorKey)(SDL_Surface *, Uint32, Uint32); - void (SDLCALL *SDL_WM_SetIcon)(SDL_Surface *, Uint8 *); - Uint32 (SDLCALL *SDL_MapRGB)(SDL_PixelFormat *, Uint8, Uint8, Uint8); - int (SDLCALL *SDL_VideoModeOK)(int, int, int, Uint32); - SDL_version *(SDLCALL *SDL_Linked_Version)(); - int (SDLCALL *SDL_BlitSurface)(SDL_Surface *, SDL_Rect *, SDL_Surface *, SDL_Rect *); - SDL_Surface *(SDLCALL *SDL_CreateRGBSurface)(Uint32, int, int, int, Uint32, Uint32, Uint32, Uint32); - }; - - extern SDLProcs sdl_proc; - - #define SDL_CALL sdl_proc. -#else - #define SDL_CALL -#endif - -#endif /* SDL_H */ diff --git a/src/sound/sdl_s.cpp b/src/sound/sdl_s.cpp index e3fb99eaa7..b37016c24e 100644 --- a/src/sound/sdl_s.cpp +++ b/src/sound/sdl_s.cpp @@ -14,7 +14,6 @@ #include "../stdafx.h" #include "../mixer.h" -#include "../sdl.h" #include "sdl_s.h" #include @@ -38,8 +37,14 @@ const char *SoundDriver_SDL::Start(const char * const *parm) { SDL_AudioSpec spec; - const char *s = SdlOpen(SDL_INIT_AUDIO); - if (s != NULL) return s; + /* Only initialise SDL if the video driver hasn't done it already */ + int ret_code = 0; + if (SDL_WasInit(SDL_INIT_EVERYTHING) == 0) { + ret_code = SDL_Init(SDL_INIT_AUDIO | SDL_INIT_NOPARACHUTE); + } else if (SDL_WasInit(SDL_INIT_AUDIO) == 0) { + ret_code = SDL_InitSubSystem(SDL_INIT_AUDIO); + } + if (ret_code == -1) return SDL_GetError(); spec.freq = GetDriverParamInt(parm, "hz", 44100); spec.format = AUDIO_S16SYS; @@ -47,15 +52,18 @@ const char *SoundDriver_SDL::Start(const char * const *parm) spec.samples = GetDriverParamInt(parm, "samples", 1024); spec.callback = fill_sound_buffer; MxInitialize(spec.freq); - SDL_CALL SDL_OpenAudio(&spec, &spec); - SDL_CALL SDL_PauseAudio(0); + SDL_OpenAudio(&spec, &spec); + SDL_PauseAudio(0); return NULL; } void SoundDriver_SDL::Stop() { - SDL_CALL SDL_CloseAudio(); - SdlClose(SDL_INIT_AUDIO); + SDL_CloseAudio(); + SDL_QuitSubSystem(SDL_INIT_AUDIO); + if (SDL_WasInit(SDL_INIT_EVERYTHING) == 0) { + SDL_Quit(); // If there's nothing left, quit SDL + } } #endif /* WITH_SDL */ diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index e96decb451..8493ae89fc 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -14,7 +14,6 @@ #include "../stdafx.h" #include "../openttd.h" #include "../gfx_func.h" -#include "../sdl.h" #include "../rev.h" #include "../blitter/factory.hpp" #include "../network/network.h" @@ -73,7 +72,7 @@ static void UpdatePalette(bool init = false) pal[i].unused = 0; } - SDL_CALL SDL_SetColors(_sdl_screen, pal, _local_palette.first_dirty, _local_palette.count_dirty); + SDL_SetColors(_sdl_screen, pal, _local_palette.first_dirty, _local_palette.count_dirty); if (_sdl_screen != _sdl_realscreen && init) { /* When using a shadow surface, also set our palette on the real screen. This lets SDL @@ -96,7 +95,7 @@ static void UpdatePalette(bool init = false) * palette change and the blitting below, so we only set * the real palette during initialisation. */ - SDL_CALL SDL_SetColors(_sdl_realscreen, pal, _local_palette.first_dirty, _local_palette.count_dirty); + SDL_SetColors(_sdl_realscreen, pal, _local_palette.first_dirty, _local_palette.count_dirty); } if (_sdl_screen != _sdl_realscreen && !init) { @@ -110,8 +109,8 @@ static void UpdatePalette(bool init = false) * best mapping of shadow palette colors to real palette * colors from scratch. */ - SDL_CALL SDL_BlitSurface(_sdl_screen, NULL, _sdl_realscreen, NULL); - SDL_CALL SDL_UpdateRect(_sdl_realscreen, 0, 0, 0, 0); + SDL_BlitSurface(_sdl_screen, NULL, _sdl_realscreen, NULL); + SDL_UpdateRect(_sdl_realscreen, 0, 0, 0, 0); } } @@ -157,16 +156,16 @@ static void DrawSurfaceToScreen() _num_dirty_rects = 0; if (n > MAX_DIRTY_RECTS) { if (_sdl_screen != _sdl_realscreen) { - SDL_CALL SDL_BlitSurface(_sdl_screen, NULL, _sdl_realscreen, NULL); + SDL_BlitSurface(_sdl_screen, NULL, _sdl_realscreen, NULL); } - SDL_CALL SDL_UpdateRect(_sdl_realscreen, 0, 0, 0, 0); + SDL_UpdateRect(_sdl_realscreen, 0, 0, 0, 0); } else { if (_sdl_screen != _sdl_realscreen) { for (int i = 0; i < n; i++) { - SDL_CALL SDL_BlitSurface(_sdl_screen, &_dirty_rects[i], _sdl_realscreen, &_dirty_rects[i]); + SDL_BlitSurface(_sdl_screen, &_dirty_rects[i], _sdl_realscreen, &_dirty_rects[i]); } } - SDL_CALL SDL_UpdateRects(_sdl_realscreen, n, _dirty_rects); + SDL_UpdateRects(_sdl_realscreen, n, _dirty_rects); } } @@ -206,14 +205,14 @@ static const Dimension _default_resolutions[] = { static void GetVideoModes() { - SDL_Rect **modes = SDL_CALL SDL_ListModes(NULL, SDL_SWSURFACE | SDL_FULLSCREEN); + SDL_Rect **modes = SDL_ListModes(NULL, SDL_SWSURFACE | SDL_FULLSCREEN); if (modes == NULL) usererror("sdl: no modes available"); - _all_modes = (SDL_CALL SDL_ListModes(NULL, SDL_SWSURFACE | (_fullscreen ? SDL_FULLSCREEN : 0)) == (void*)-1); + _all_modes = (SDL_ListModes(NULL, SDL_SWSURFACE | (_fullscreen ? SDL_FULLSCREEN : 0)) == (void*)-1); if (modes == (void*)-1) { int n = 0; for (uint i = 0; i < lengthof(_default_resolutions); i++) { - if (SDL_CALL SDL_VideoModeOK(_default_resolutions[i].width, _default_resolutions[i].height, 8, SDL_FULLSCREEN) != 0) { + if (SDL_VideoModeOK(_default_resolutions[i].width, _default_resolutions[i].height, 8, SDL_FULLSCREEN) != 0) { _resolutions[n] = _default_resolutions[i]; if (++n == lengthof(_resolutions)) break; } @@ -264,13 +263,6 @@ static void GetAvailableVideoMode(uint *w, uint *h) *h = _resolutions[best].height; } -#ifdef _WIN32 -/* Let's redefine the LoadBMP macro with because we are dynamically - * loading SDL and need to 'SDL_CALL' all functions */ -#undef SDL_LoadBMP -#define SDL_LoadBMP(file) SDL_LoadBMP_RW(SDL_CALL SDL_RWFromFile(file, "rb"), 1) -#endif - bool VideoDriver_SDL::CreateMainSurface(uint w, uint h) { SDL_Surface *newscreen, *icon; @@ -287,14 +279,14 @@ bool VideoDriver_SDL::CreateMainSurface(uint w, uint h) char icon_path[MAX_PATH]; if (FioFindFullPath(icon_path, lastof(icon_path), BASESET_DIR, "openttd.32.bmp") != NULL) { /* Give the application an icon */ - icon = SDL_CALL SDL_LoadBMP(icon_path); + icon = SDL_LoadBMP(icon_path); if (icon != NULL) { /* Get the colourkey, which will be magenta */ - uint32 rgbmap = SDL_CALL SDL_MapRGB(icon->format, 255, 0, 255); + uint32 rgbmap = SDL_MapRGB(icon->format, 255, 0, 255); - SDL_CALL SDL_SetColorKey(icon, SDL_SRCCOLORKEY, rgbmap); - SDL_CALL SDL_WM_SetIcon(icon, NULL); - SDL_CALL SDL_FreeSurface(icon); + SDL_SetColorKey(icon, SDL_SRCCOLORKEY, rgbmap); + SDL_WM_SetIcon(icon, NULL); + SDL_FreeSurface(icon); } } @@ -329,7 +321,7 @@ bool VideoDriver_SDL::CreateMainSurface(uint w, uint h) if (want_hwpalette) DEBUG(driver, 1, "SDL: requesting hardware palette"); /* Free any previously allocated shadow surface */ - if (_sdl_screen != NULL && _sdl_screen != _sdl_realscreen) SDL_CALL SDL_FreeSurface(_sdl_screen); + if (_sdl_screen != NULL && _sdl_screen != _sdl_realscreen) SDL_FreeSurface(_sdl_screen); if (_sdl_realscreen != NULL) { if (_requested_hwpalette != want_hwpalette) { @@ -342,8 +334,8 @@ bool VideoDriver_SDL::CreateMainSurface(uint w, uint h) * subsystem to force creating a new window. */ DEBUG(driver, 0, "SDL: Restarting SDL video subsystem, to force hwpalette change"); - SDL_CALL SDL_QuitSubSystem(SDL_INIT_VIDEO); - SDL_CALL SDL_InitSubSystem(SDL_INIT_VIDEO); + SDL_QuitSubSystem(SDL_INIT_VIDEO); + SDL_InitSubSystem(SDL_INIT_VIDEO); ClaimMousePointer(); SetupKeyboard(); } @@ -355,7 +347,7 @@ bool VideoDriver_SDL::CreateMainSurface(uint w, uint h) _requested_hwpalette = want_hwpalette; /* DO NOT CHANGE TO HWSURFACE, IT DOES NOT WORK */ - newscreen = SDL_CALL SDL_SetVideoMode(w, h, bpp, SDL_SWSURFACE | (want_hwpalette ? SDL_HWPALETTE : 0) | (_fullscreen ? SDL_FULLSCREEN : SDL_RESIZABLE)); + newscreen = SDL_SetVideoMode(w, h, bpp, SDL_SWSURFACE | (want_hwpalette ? SDL_HWPALETTE : 0) | (_fullscreen ? SDL_FULLSCREEN : SDL_RESIZABLE)); if (newscreen == NULL) { DEBUG(driver, 0, "SDL: Couldn't allocate a window to draw on"); return false; @@ -382,7 +374,7 @@ bool VideoDriver_SDL::CreateMainSurface(uint w, uint h) * we won't create a second shadow surface in this case. */ DEBUG(driver, 1, "SDL: using shadow surface"); - newscreen = SDL_CALL SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, bpp, 0, 0, 0, 0); + newscreen = SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, bpp, 0, 0, 0, 0); if (newscreen == NULL) { DEBUG(driver, 0, "SDL: Couldn't allocate a shadow surface to draw on"); return false; @@ -409,7 +401,7 @@ bool VideoDriver_SDL::CreateMainSurface(uint w, uint h) InitPalette(); seprintf(caption, lastof(caption), "OpenTTD %s", _openttd_revision); - SDL_CALL SDL_WM_SetCaption(caption, caption); + SDL_WM_SetCaption(caption, caption); GameSizeChanged(); @@ -418,7 +410,7 @@ bool VideoDriver_SDL::CreateMainSurface(uint w, uint h) bool VideoDriver_SDL::ClaimMousePointer() { - SDL_CALL SDL_ShowCursor(0); + SDL_ShowCursor(0); return true; } @@ -531,18 +523,18 @@ int VideoDriver_SDL::PollEvent() { SDL_Event ev; - if (!SDL_CALL SDL_PollEvent(&ev)) return -2; + if (!SDL_PollEvent(&ev)) return -2; switch (ev.type) { case SDL_MOUSEMOTION: if (_cursor.UpdateCursorPosition(ev.motion.x, ev.motion.y, true)) { - SDL_CALL SDL_WarpMouse(_cursor.pos.x, _cursor.pos.y); + SDL_WarpMouse(_cursor.pos.x, _cursor.pos.y); } HandleMouseEvents(); break; case SDL_MOUSEBUTTONDOWN: - if (_rightclick_emulate && SDL_CALL SDL_GetModState() & KMOD_CTRL) { + if (_rightclick_emulate && SDL_GetModState() & KMOD_CTRL) { ev.button.button = SDL_BUTTON_RIGHT; } @@ -626,15 +618,23 @@ const char *VideoDriver_SDL::Start(const char * const *parm) char buf[30]; _use_hwpalette = GetDriverParamInt(parm, "hw_palette", 2); - const char *s = SdlOpen(SDL_INIT_VIDEO); - if (s != NULL) return s; + /* Just on the offchance the audio subsystem started before the video system, + * check whether any part of SDL has been initialised before getting here. + * Slightly duplicated with sound/sdl_s.cpp */ + int ret_code = 0; + if (SDL_WasInit(SDL_INIT_EVERYTHING) == 0) { + ret_code = SDL_Init(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE); + } else if (SDL_WasInit(SDL_INIT_VIDEO) == 0) { + ret_code = SDL_InitSubSystem(SDL_INIT_VIDEO); + } + if (ret_code == -1) return SDL_GetError(); GetVideoModes(); if (!CreateMainSurface(_cur_resolution.width, _cur_resolution.height)) { - return SDL_CALL SDL_GetError(); + return SDL_GetError(); } - SDL_CALL SDL_VideoDriverName(buf, sizeof buf); + SDL_VideoDriverName(buf, sizeof buf); DEBUG(driver, 1, "SDL: using driver '%s'", buf); MarkWholeScreenDirty(); @@ -647,18 +647,21 @@ const char *VideoDriver_SDL::Start(const char * const *parm) void VideoDriver_SDL::SetupKeyboard() { - SDL_CALL SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); - SDL_CALL SDL_EnableUNICODE(1); + SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); + SDL_EnableUNICODE(1); } void VideoDriver_SDL::Stop() { - SdlClose(SDL_INIT_VIDEO); + SDL_QuitSubSystem(SDL_INIT_VIDEO); + if (SDL_WasInit(SDL_INIT_EVERYTHING) == 0) { + SDL_Quit(); // If there's nothing left, quit SDL + } } void VideoDriver_SDL::MainLoop() { - uint32 cur_ticks = SDL_CALL SDL_GetTicks(); + uint32 cur_ticks = SDL_GetTicks(); uint32 last_cur_ticks = cur_ticks; uint32 next_tick = cur_ticks + MILLISECONDS_PER_TICK; uint32 mod; @@ -700,11 +703,11 @@ void VideoDriver_SDL::MainLoop() while (PollEvent() == -1) {} if (_exit_game) break; - mod = SDL_CALL SDL_GetModState(); + mod = SDL_GetModState(); #if SDL_VERSION_ATLEAST(1, 3, 0) - keys = SDL_CALL SDL_GetKeyboardState(&numkeys); + keys = SDL_GetKeyboardState(&numkeys); #else - keys = SDL_CALL SDL_GetKeyState(&numkeys); + keys = SDL_GetKeyState(&numkeys); #endif #if defined(_DEBUG) if (_shift_pressed) @@ -723,7 +726,7 @@ void VideoDriver_SDL::MainLoop() _fast_forward = 0; } - cur_ticks = SDL_CALL SDL_GetTicks(); + cur_ticks = SDL_GetTicks(); if (cur_ticks >= next_tick || (_fast_forward && !_pause_mode) || cur_ticks < prev_cur_ticks) { _realtime_tick += cur_ticks - last_cur_ticks; last_cur_ticks = cur_ticks; From cbaf52fbe1aaf7fc34cd585739b4f9fc10af1ad8 Mon Sep 17 00:00:00 2001 From: PeterN Date: Sat, 2 Mar 2019 17:08:45 +0000 Subject: [PATCH 406/622] Codechange: Sort and filter sign names directly rather than through string system. (#7304) This provides a notable performance benefit in the Sign List window when there are many signs. --- src/signs_gui.cpp | 48 +++++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index 15adef0890..56af6e6655 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -41,11 +41,11 @@ struct SignList { */ typedef GUIList GUISignList; - static const Sign *last_sign; GUISignList signs; StringFilter string_filter; ///< The match string to be used when the GUIList is (re)-sorted. static bool match_case; ///< Should case sensitive matching be used? + static char default_name[64]; ///< Default sign name, used if Sign::name is NULL. /** * Creates a SignList with filtering disabled by default. @@ -74,19 +74,17 @@ struct SignList { /** Sort signs by their name */ static int CDECL SignNameSorter(const Sign * const *a, const Sign * const *b) { - static char buf_cache[64]; - char buf[64]; + /* Signs are very very rarely using the default text, but there can also be + * a lot of them. Therefore a worthwhile performance gain can be made by + * directly comparing Sign::name instead of going through the string + * system for each comparison. */ + const char *a_name = (*a)->name; + const char *b_name = (*b)->name; - SetDParam(0, (*a)->index); - GetString(buf, STR_SIGN_NAME, lastof(buf)); + if (a_name == NULL) a_name = SignList::default_name; + if (b_name == NULL) b_name = SignList::default_name; - if (*b != last_sign) { - last_sign = *b; - SetDParam(0, (*b)->index); - GetString(buf_cache, STR_SIGN_NAME, lastof(buf_cache)); - } - - int r = strnatcmp(buf, buf_cache); // Sort by name (natural sorting). + int r = strnatcmp(a_name, b_name); // Sort by name (natural sorting). return r != 0 ? r : ((*a)->index - (*b)->index); } @@ -94,21 +92,18 @@ struct SignList { void SortSignsList() { if (!this->signs.Sort(&SignNameSorter)) return; - - /* Reset the name sorter sort cache */ - this->last_sign = NULL; } /** Filter sign list by sign name */ static bool CDECL SignNameFilter(const Sign * const *a, StringFilter &filter) { - /* Get sign string */ - char buf1[MAX_LENGTH_SIGN_NAME_CHARS * MAX_CHAR_LENGTH]; - SetDParam(0, (*a)->index); - GetString(buf1, STR_SIGN_NAME, lastof(buf1)); + /* Same performance benefit as above for sorting. */ + const char *a_name = (*a)->name; + + if (a_name == NULL) a_name = SignList::default_name; filter.ResetState(); - filter.AddLine(buf1); + filter.AddLine(a_name); return filter.GetState(); } @@ -138,8 +133,8 @@ struct SignList { } }; -const Sign *SignList::last_sign = NULL; bool SignList::match_case = false; +char SignList::default_name[64]; /** Enum referring to the Hotkeys in the sign list window */ enum SignListHotkeys { @@ -171,6 +166,15 @@ struct SignListWindow : Window, SignList { this->BuildSortSignList(); } + virtual void OnInit() + { + /* Default sign name, used if Sign::name is NULL. */ + GetString(SignList::default_name, STR_DEFAULT_SIGN_NAME, lastof(SignList::default_name)); + this->signs.ForceResort(); + this->SortSignsList(); + this->SetDirty(); + } + /** * This function sets the filter string of the sign list. The contents of * the edit widget is not updated by this function. Depending on if the @@ -188,7 +192,7 @@ struct SignListWindow : Window, SignList { virtual void OnPaint() { - if (this->signs.NeedRebuild()) this->BuildSortSignList(); + if (!this->IsShaded() && this->signs.NeedRebuild()) this->BuildSortSignList(); this->DrawWidgets(); } From 780593ae6010adb3e80620cfcac99934330a14ae Mon Sep 17 00:00:00 2001 From: Samu Date: Mon, 4 Feb 2019 00:44:50 +0000 Subject: [PATCH 407/622] Fix #6633: Cargo monitor industry delivery now accounts for which IndustryID the cargo was delivered to --- src/cargomonitor.cpp | 4 +++- src/cargomonitor.h | 2 +- src/economy.cpp | 20 ++++++++++++-------- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/cargomonitor.cpp b/src/cargomonitor.cpp index b1d52d6b18..40a029ac53 100644 --- a/src/cargomonitor.cpp +++ b/src/cargomonitor.cpp @@ -117,8 +117,9 @@ int32 GetPickupAmount(CargoMonitorID monitor, bool keep_monitoring) * @param src_type type of \a src. * @param src index of source. * @param st station where the cargo is delivered to. + * @param dest industry index where the cargo is delivered to. */ -void AddCargoDelivery(CargoID cargo_type, CompanyID company, uint32 amount, SourceType src_type, SourceID src, const Station *st) +void AddCargoDelivery(CargoID cargo_type, CompanyID company, uint32 amount, SourceType src_type, SourceID src, const Station *st, IndustryID dest) { if (amount == 0) return; @@ -151,6 +152,7 @@ void AddCargoDelivery(CargoID cargo_type, CompanyID company, uint32 amount, Sour /* Industry delivery. */ for (const Industry * const *ip = st->industries_near.Begin(); ip != st->industries_near.End(); ip++) { + if ((*ip)->index != dest) continue; CargoMonitorID num = EncodeCargoIndustryMonitor(company, cargo_type, (*ip)->index); CargoMonitorMap::iterator iter = _cargo_deliveries.find(num); if (iter != _cargo_deliveries.end()) iter->second += amount; diff --git a/src/cargomonitor.h b/src/cargomonitor.h index e74f717e05..c7e5da135b 100644 --- a/src/cargomonitor.h +++ b/src/cargomonitor.h @@ -149,6 +149,6 @@ void ClearCargoPickupMonitoring(CompanyID company = INVALID_OWNER); void ClearCargoDeliveryMonitoring(CompanyID company = INVALID_OWNER); int32 GetDeliveryAmount(CargoMonitorID monitor, bool keep_monitoring); int32 GetPickupAmount(CargoMonitorID monitor, bool keep_monitoring); -void AddCargoDelivery(CargoID cargo_type, CompanyID company, uint32 amount, SourceType src_type, SourceID src, const Station *st); +void AddCargoDelivery(CargoID cargo_type, CompanyID company, uint32 amount, SourceType src_type, SourceID src, const Station *st, IndustryID dest = INVALID_INDUSTRY); #endif /* CARGOMONITOR_H */ diff --git a/src/economy.cpp b/src/economy.cpp index 74c4cf079b..898bc54478 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1030,9 +1030,10 @@ static SmallIndustryList _cargo_delivery_destinations; * @param cargo_type Type of cargo delivered * @param num_pieces Amount of cargo delivered * @param source The source of the cargo + * @param company The company delivering the cargo * @return actually accepted pieces of cargo */ -static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint num_pieces, IndustryID source) +static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint num_pieces, IndustryID source, CompanyID company) { /* Find the nearest industrytile to the station sign inside the catchment area, whose industry accepts the cargo. * This fails in three cases: @@ -1065,6 +1066,9 @@ static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint n ind->last_cargo_accepted_at[cargo_index] = _date; num_pieces -= amount; accepted += amount; + + /* Update the cargo monitor. */ + AddCargoDelivery(cargo_type, company, amount, ST_INDUSTRY, source, st, ind->index); } return accepted; @@ -1090,30 +1094,30 @@ static Money DeliverGoods(int num_pieces, CargoID cargo_type, StationID dest, Ti Station *st = Station::Get(dest); /* Give the goods to the industry. */ - uint accepted = DeliverGoodsToIndustry(st, cargo_type, num_pieces, src_type == ST_INDUSTRY ? src : INVALID_INDUSTRY); + uint accepted_ind = DeliverGoodsToIndustry(st, cargo_type, num_pieces, src_type == ST_INDUSTRY ? src : INVALID_INDUSTRY, company->index); /* If this cargo type is always accepted, accept all */ - if (HasBit(st->always_accepted, cargo_type)) accepted = num_pieces; + uint accepted_total = HasBit(st->always_accepted, cargo_type) ? num_pieces : accepted_ind; /* Update station statistics */ - if (accepted > 0) { + if (accepted_total > 0) { SetBit(st->goods[cargo_type].status, GoodsEntry::GES_EVER_ACCEPTED); SetBit(st->goods[cargo_type].status, GoodsEntry::GES_CURRENT_MONTH); SetBit(st->goods[cargo_type].status, GoodsEntry::GES_ACCEPTED_BIGTICK); } /* Update company statistics */ - company->cur_economy.delivered_cargo[cargo_type] += accepted; + company->cur_economy.delivered_cargo[cargo_type] += accepted_total; /* Increase town's counter for town effects */ const CargoSpec *cs = CargoSpec::Get(cargo_type); - st->town->received[cs->town_effect].new_act += accepted; + st->town->received[cs->town_effect].new_act += accepted_total; /* Determine profit */ - Money profit = GetTransportedGoodsIncome(accepted, DistanceManhattan(source_tile, st->xy), days_in_transit, cargo_type); + Money profit = GetTransportedGoodsIncome(accepted_total, DistanceManhattan(source_tile, st->xy), days_in_transit, cargo_type); /* Update the cargo monitor. */ - AddCargoDelivery(cargo_type, company->index, accepted, src_type, src, st); + AddCargoDelivery(cargo_type, company->index, accepted_total - accepted_ind, src_type, src, st); /* Modify profit if a subsidy is in effect */ if (CheckSubsidised(cargo_type, company->index, src_type, src, st)) { From b242a04c7d530e5d73c809c53ae857455231a4c6 Mon Sep 17 00:00:00 2001 From: Eddi-z <43699911+Eddi-z@users.noreply.github.com> Date: Sat, 2 Mar 2019 18:33:16 +0100 Subject: [PATCH 408/622] Fix #7307: Add WaterClass to MP_TREES, set when trees are on coast tiles (#7309) This allows allows NewGRF object/industry placement rules to treat trees on coast tiles the same as regular bare coast. --- docs/landscape.html | 1 + docs/landscape_grid.html | 2 +- src/tree_map.h | 2 ++ src/water_map.h | 4 ++-- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/landscape.html b/docs/landscape.html index a345128ea4..d4d8f7efeb 100644 --- a/docs/landscape.html +++ b/docs/landscape.html @@ -759,6 +759,7 @@  
      +
    • m1 bits 6..5: water class (sea or land)
    • m1 bits 4..0: owner (normally 10)
    • m2 bits 8..6: ground diff --git a/docs/landscape_grid.html b/docs/landscape_grid.html index 8519fa990a..4948366e65 100644 --- a/docs/landscape_grid.html +++ b/docs/landscape_grid.html @@ -194,7 +194,7 @@ the array so you can quickly see what is used and what is not. - + diff --git a/src/tree_map.h b/src/tree_map.h index e614099fc9..df9fd441cc 100644 --- a/src/tree_map.h +++ b/src/tree_map.h @@ -13,6 +13,7 @@ #define TREE_MAP_H #include "tile_map.h" +#include "water_map.h" /** * List of tree types along all landscape types. @@ -133,6 +134,7 @@ static inline void SetTreeGroundDensity(TileIndex t, TreeGround g, uint d) assert(IsTileType(t, MP_TREES)); // XXX incomplete SB(_m[t].m2, 4, 2, d); SB(_m[t].m2, 6, 3, g); + SetWaterClass(t, g == TREE_GROUND_SHORE ? WATER_CLASS_SEA : WATER_CLASS_INVALID); } /** diff --git a/src/water_map.h b/src/water_map.h index ab249a8279..5d84d5ba66 100644 --- a/src/water_map.h +++ b/src/water_map.h @@ -94,7 +94,7 @@ static inline WaterTileType GetWaterTileType(TileIndex t) */ static inline bool HasTileWaterClass(TileIndex t) { - return IsTileType(t, MP_WATER) || IsTileType(t, MP_STATION) || IsTileType(t, MP_INDUSTRY) || IsTileType(t, MP_OBJECT); + return IsTileType(t, MP_WATER) || IsTileType(t, MP_STATION) || IsTileType(t, MP_INDUSTRY) || IsTileType(t, MP_OBJECT) || IsTileType(t, MP_TREES); } /** @@ -204,7 +204,7 @@ static inline bool IsCoast(TileIndex t) */ static inline bool IsCoastTile(TileIndex t) { - return IsTileType(t, MP_WATER) && IsCoast(t); + return (IsTileType(t, MP_WATER) && IsCoast(t)) || (IsTileType(t, MP_TREES) && GetWaterClass(t) != WATER_CLASS_INVALID); } /** From 90a4737bf6f082a3620de1649b5dede4af5cb89f Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 2 Mar 2019 19:45:43 +0100 Subject: [PATCH 409/622] Update: Translations from eints croatian: 6 changes by VoyagerOne --- src/lang/croatian.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index f8064f6e5f..4cf139dd98 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -2843,6 +2843,9 @@ STR_FRAMERATE_DRAWING :{BLACK}Prikaz g STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Prikazi svijeta: STR_FRAMERATE_VIDEO :{BLACK}Video izlaz: STR_FRAMERATE_SOUND :{BLACK}Miksanje zvukova: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} Ukupni broj GS/AI: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Skripta Igre: +STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Petlja igre @@ -2857,6 +2860,9 @@ STR_FRAMETIME_CAPTION_DRAWING :Prikaz grafike STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Prikazi svijeta STR_FRAMETIME_CAPTION_VIDEO :Video izlaz STR_FRAMETIME_CAPTION_SOUND :Miksanje zvukova +STR_FRAMETIME_CAPTION_ALLSCRIPTS :GS/AI broj skripti +STR_FRAMETIME_CAPTION_GAMESCRIPT :Skripta Igre +STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING} ############ End of leave-in-this-order From 5e403385431babbc7b3b976fb140fe990786c378 Mon Sep 17 00:00:00 2001 From: "Johannes E. Krause" Date: Sat, 2 Mar 2019 20:34:45 +0100 Subject: [PATCH 410/622] Doc: table alignment when viewing README.md as a monospace textfile --- README.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 038c177a74..e621dc0215 100644 --- a/README.md +++ b/README.md @@ -310,22 +310,22 @@ your operating system: Different types of data or extensions go into different subdirectories of the chosen main OpenTTD directory: -| data type | directory | additional info | -| --- | --- | --- | -| Config File | (no subdirectory) | | -| Screenshots | screenshot | | -| Base Graphics | baseset | (or a subdirectory thereof) | -| Sound Sets | baseset | (or a subdirectory thereof) | -| NewGRFs | newgrf | (or a subdirectory thereof) | -| 32bpp Sets | newgrf | (or a subdirectory thereof) | -| Music Sets | baseset | (or a subdirectory thereof) | -| AIs | ai | (or a subdirectory thereof) | -| AI Libraries | ai/library | (or a subdirectory thereof) | -| Game Scripts (GS) | game | (or a subdirectory thereof) | -| GS Libraries | game/library | (or a subdirectory thereof) | -| Savegames | save | | -| Automatic Savegames | save/autosave | | -| Scenarios | scenario | | +| data type | directory | additional info | +| ------------------- | ----------------- | --------------------------- | +| Config File | (no subdirectory) | | +| Screenshots | screenshot | | +| Base Graphics | baseset | (or a subdirectory thereof) | +| Sound Sets | baseset | (or a subdirectory thereof) | +| NewGRFs | newgrf | (or a subdirectory thereof) | +| 32bpp Sets | newgrf | (or a subdirectory thereof) | +| Music Sets | baseset | (or a subdirectory thereof) | +| AIs | ai | (or a subdirectory thereof) | +| AI Libraries | ai/library | (or a subdirectory thereof) | +| Game Scripts (GS) | game | (or a subdirectory thereof) | +| GS Libraries | game/library | (or a subdirectory thereof) | +| Savegames | save | | +| Automatic Savegames | save/autosave | | +| Scenarios | scenario | | The (automatically created) directory content_download is for OpenTTD's internal use and no files should be added to it or its subdirectories manually. From 8139b14e9c941433bce74e46a7330123cae4ae2b Mon Sep 17 00:00:00 2001 From: Eddi-z <43699911+Eddi-z@users.noreply.github.com> Date: Sat, 2 Mar 2019 22:28:22 +0100 Subject: [PATCH 411/622] Change: Synchronize introduction date and reliability randomness across vehicles with the same base introduction date (#7147) --- src/engine.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/engine.cpp b/src/engine.cpp index 9f500e1cdf..d539a48520 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -652,7 +652,14 @@ void StartupOneEngine(Engine *e, Date aging_date) /* Don't randomise the start-date in the first two years after gamestart to ensure availability * of engines in early starting games. * Note: TTDP uses fixed 1922 */ + SavedRandomSeeds saved_seeds; + SaveRandomSeeds(&saved_seeds); + SetRandomSeed(_settings_game.game_creation.generation_seed ^ + ei->base_intro ^ + e->type ^ + e->GetGRFID()); uint32 r = Random(); + e->intro_date = ei->base_intro <= ConvertYMDToDate(_settings_game.game_creation.starting_year + 2, 0, 1) ? ei->base_intro : (Date)GB(r, 0, 9) + ei->base_intro; if (e->intro_date <= _date) { e->age = (aging_date - e->intro_date) >> 5; @@ -672,6 +679,7 @@ void StartupOneEngine(Engine *e, Date aging_date) e->reliability_spd_dec = ei->decay_speed << 2; + RestoreRandomSeeds(saved_seeds); CalcEngineReliability(e); /* prevent certain engines from ever appearing. */ From b62452903a3af9e51dc308fd674a788214942382 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 13 Feb 2019 21:18:44 +0000 Subject: [PATCH 412/622] Add: AI functions to set/get vehicle group parent. --- src/script/api/ai/ai_group.hpp.sq | 2 ++ src/script/api/ai_changelog.hpp | 2 ++ src/script/api/script_group.cpp | 16 ++++++++++++++++ src/script/api/script_group.hpp | 18 ++++++++++++++++++ 4 files changed, 38 insertions(+) diff --git a/src/script/api/ai/ai_group.hpp.sq b/src/script/api/ai/ai_group.hpp.sq index 52ade08d56..a5f0e25a04 100644 --- a/src/script/api/ai/ai_group.hpp.sq +++ b/src/script/api/ai/ai_group.hpp.sq @@ -31,6 +31,8 @@ void SQAIGroup_Register(Squirrel *engine) SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetVehicleType, "GetVehicleType", 2, ".i"); SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::SetName, "SetName", 3, ".i."); SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetName, "GetName", 2, ".i"); + SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::SetParent, "SetParent", 3, ".ii"); + SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetParent, "GetParent", 2, ".i"); SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::EnableAutoReplaceProtection, "EnableAutoReplaceProtection", 3, ".ib"); SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetAutoReplaceProtection, "GetAutoReplaceProtection", 2, ".i"); SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetNumEngines, "GetNumEngines", 3, ".ii"); diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index eb2b3a5013..bba36b7ea6 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -20,6 +20,8 @@ * 1.9.0 is not yet released. The following changes are not set in stone yet. * API additions: * \li AIAirport::GetMonthlyMaintenanceCost + * \li AIGroup::SetParent + * \li AIGroup::GetParent * * Other changes: * \li AIBridge::GetName takes one extra parameter to refer the vehicle type diff --git a/src/script/api/script_group.cpp b/src/script/api/script_group.cpp index cf8dd51a8c..7823fb28bc 100644 --- a/src/script/api/script_group.cpp +++ b/src/script/api/script_group.cpp @@ -70,6 +70,22 @@ return GetString(STR_GROUP_NAME); } +/* static */ bool ScriptGroup::SetParent(GroupID group_id, GroupID parent_group_id) +{ + EnforcePrecondition(false, IsValidGroup(group_id)); + EnforcePrecondition(false, IsValidGroup(parent_group_id)); + + return ScriptObject::DoCommand(0, group_id | 1 << 16, parent_group_id, CMD_ALTER_GROUP); +} + +/* static */ ScriptGroup::GroupID ScriptGroup::GetParent(GroupID group_id) +{ + EnforcePrecondition((ScriptGroup::GroupID)INVALID_GROUP, IsValidGroup(group_id)); + + const Group *g = ::Group::GetIfValid(group_id); + return (ScriptGroup::GroupID)g->parent; +} + /* static */ bool ScriptGroup::EnableAutoReplaceProtection(GroupID group_id, bool enable) { EnforcePrecondition(false, IsValidGroup(group_id)); diff --git a/src/script/api/script_group.hpp b/src/script/api/script_group.hpp index fd8888a171..7b375e29a2 100644 --- a/src/script/api/script_group.hpp +++ b/src/script/api/script_group.hpp @@ -84,6 +84,24 @@ public: */ static char *GetName(GroupID group_id); + /** + * Set parent group of a group. + * @param group_id The group to set the parent for. + * @param parent_group_id The parent group to set. + * @pre IsValidGroup(group_id). + * @pre IsValidGroup(parent_group_id). + * @return True if and only if the parent group was changed. + */ + static bool SetParent(GroupID group_id, GroupID parent_group_id); + + /** + * Get parent group of a group. + * @param group_id The group to get the parent of. + * @pre IsValidGroup(group_id). + * @return The group id of the parent group. + */ + static GroupID GetParent(GroupID group_id); + /** * Enable or disable autoreplace protected. If the protection is * enabled, global autoreplace won't affect vehicles in this group. From 3c047b124e28db45621de06d5556c96598352fc7 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 13 Feb 2019 22:18:33 +0000 Subject: [PATCH 413/622] Add: AI functions to get current and last year profit of a group. --- src/script/api/ai/ai_group.hpp.sq | 2 ++ src/script/api/script_group.cpp | 25 +++++++++++++++++++++++++ src/script/api/script_group.hpp | 16 ++++++++++++++++ 3 files changed, 43 insertions(+) diff --git a/src/script/api/ai/ai_group.hpp.sq b/src/script/api/ai/ai_group.hpp.sq index a5f0e25a04..d721ddfbf5 100644 --- a/src/script/api/ai/ai_group.hpp.sq +++ b/src/script/api/ai/ai_group.hpp.sq @@ -42,6 +42,8 @@ void SQAIGroup_Register(Squirrel *engine) SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::SetAutoReplace, "SetAutoReplace", 4, ".iii"); SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetEngineReplacement, "GetEngineReplacement", 3, ".ii"); SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::StopAutoReplace, "StopAutoReplace", 3, ".ii"); + SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetProfitThisYear, "GetProfitThisYear", 2, ".i"); + SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetProfitLastYear, "GetProfitLastYear", 2, ".i"); SQAIGroup.PostRegister(engine); } diff --git a/src/script/api/script_group.cpp b/src/script/api/script_group.cpp index 7823fb28bc..023f5534c5 100644 --- a/src/script/api/script_group.cpp +++ b/src/script/api/script_group.cpp @@ -17,6 +17,7 @@ #include "../../strings_func.h" #include "../../autoreplace_func.h" #include "../../settings_func.h" +#include "../../vehicle_base.h" #include "table/strings.h" #include "../../safeguards.h" @@ -148,3 +149,27 @@ return ScriptObject::DoCommand(0, group_id << 16, (::INVALID_ENGINE << 16) | engine_id, CMD_SET_AUTOREPLACE); } + +/* static */ Money ScriptGroup::GetProfitThisYear(GroupID group_id) +{ + if (!IsValidGroup(group_id)) return -1; + + Money profit = 0; + + const Vehicle *v; + FOR_ALL_VEHICLES(v) { + if (v->group_id != group_id) continue; + if (!v->IsPrimaryVehicle()) continue; + + profit += v->GetDisplayProfitThisYear(); + } + + return profit; +} + +/* static */ Money ScriptGroup::GetProfitLastYear(GroupID group_id) +{ + if (!IsValidGroup(group_id)) return -1; + + return ::Group::Get(group_id)->statistics.profit_last_year; +} diff --git a/src/script/api/script_group.hpp b/src/script/api/script_group.hpp index 7b375e29a2..c5f41cdb6e 100644 --- a/src/script/api/script_group.hpp +++ b/src/script/api/script_group.hpp @@ -189,6 +189,22 @@ public: * @return True if and if the replacing was successfully stopped. */ static bool StopAutoReplace(GroupID group_id, EngineID engine_id); + + /** + * Get the current profit of a group. + * @param group_id The group to get the profit of. + * @pre IsValidGroup(group_id). + * @return The current profit the group has. + */ + static Money GetProfitThisYear(GroupID group_id); + + /** + * Get the profit of last year of a group. + * @param group_id The group to get the profit of. + * @pre IsValidGroup(group_id). + * @return The current profit the group had last year. + */ + static Money GetProfitLastYear(GroupID group_id); }; #endif /* SCRIPT_GROUP_HPP */ From e0c2ad1b6591859a1a30216e396cdab6e6bb028f Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 13 Feb 2019 22:05:08 +0000 Subject: [PATCH 414/622] Add: AI functions to get/set company colours. --- src/script/api/ai/ai_company.hpp.sq | 65 +++++++++++-- src/script/api/ai_changelog.hpp | 4 + src/script/api/game/game_company.hpp.sq | 93 ++++++++++++++----- src/script/api/script_company.cpp | 30 ++++++ src/script/api/script_company.hpp | 81 ++++++++++++++++ .../api/template/template_company.hpp.sq | 4 + 6 files changed, 243 insertions(+), 34 deletions(-) diff --git a/src/script/api/ai/ai_company.hpp.sq b/src/script/api/ai/ai_company.hpp.sq index 7ed55d97b6..ecab99c915 100644 --- a/src/script/api/ai/ai_company.hpp.sq +++ b/src/script/api/ai/ai_company.hpp.sq @@ -21,16 +21,57 @@ void SQAICompany_Register(Squirrel *engine) SQAICompany.PreRegister(engine); SQAICompany.AddConstructor(engine, "x"); - SQAICompany.DefSQConst(engine, ScriptCompany::CURRENT_QUARTER, "CURRENT_QUARTER"); - SQAICompany.DefSQConst(engine, ScriptCompany::EARLIEST_QUARTER, "EARLIEST_QUARTER"); - SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_FIRST, "COMPANY_FIRST"); - SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_LAST, "COMPANY_LAST"); - SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_INVALID, "COMPANY_INVALID"); - SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_SELF, "COMPANY_SELF"); - SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_SPECTATOR, "COMPANY_SPECTATOR"); - SQAICompany.DefSQConst(engine, ScriptCompany::GENDER_MALE, "GENDER_MALE"); - SQAICompany.DefSQConst(engine, ScriptCompany::GENDER_FEMALE, "GENDER_FEMALE"); - SQAICompany.DefSQConst(engine, ScriptCompany::GENDER_INVALID, "GENDER_INVALID"); + SQAICompany.DefSQConst(engine, ScriptCompany::CURRENT_QUARTER, "CURRENT_QUARTER"); + SQAICompany.DefSQConst(engine, ScriptCompany::EARLIEST_QUARTER, "EARLIEST_QUARTER"); + SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_FIRST, "COMPANY_FIRST"); + SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_LAST, "COMPANY_LAST"); + SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_INVALID, "COMPANY_INVALID"); + SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_SELF, "COMPANY_SELF"); + SQAICompany.DefSQConst(engine, ScriptCompany::COMPANY_SPECTATOR, "COMPANY_SPECTATOR"); + SQAICompany.DefSQConst(engine, ScriptCompany::GENDER_MALE, "GENDER_MALE"); + SQAICompany.DefSQConst(engine, ScriptCompany::GENDER_FEMALE, "GENDER_FEMALE"); + SQAICompany.DefSQConst(engine, ScriptCompany::GENDER_INVALID, "GENDER_INVALID"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_DEFAULT, "LS_DEFAULT"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_STEAM, "LS_STEAM"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_DIESEL, "LS_DIESEL"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_ELECTRIC, "LS_ELECTRIC"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_MONORAIL, "LS_MONORAIL"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_MAGLEV, "LS_MAGLEV"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_DMU, "LS_DMU"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_EMU, "LS_EMU"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_WAGON_STEAM, "LS_PASSENGER_WAGON_STEAM"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_WAGON_DIESEL, "LS_PASSENGER_WAGON_DIESEL"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_WAGON_ELECTRIC, "LS_PASSENGER_WAGON_ELECTRIC"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_WAGON_MONORAIL, "LS_PASSENGER_WAGON_MONORAIL"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_WAGON_MAGLEV, "LS_PASSENGER_WAGON_MAGLEV"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_FREIGHT_WAGON, "LS_FREIGHT_WAGON"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_BUS, "LS_BUS"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_TRUCK, "LS_TRUCK"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_SHIP, "LS_PASSENGER_SHIP"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_FREIGHT_SHIP, "LS_FREIGHT_SHIP"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_HELICOPTER, "LS_HELICOPTER"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_SMALL_PLANE, "LS_SMALL_PLANE"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_LARGE_PLANE, "LS_LARGE_PLANE"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_TRAM, "LS_PASSENGER_TRAM"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_FREIGHT_TRAM, "LS_FREIGHT_TRAM"); + SQAICompany.DefSQConst(engine, ScriptCompany::LS_INVALID, "LS_INVALID"); + SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_DARK_BLUE, "COLOUR_DARK_BLUE"); + SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_PALE_GREEN, "COLOUR_PALE_GREEN"); + SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_PINK, "COLOUR_PINK"); + SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_YELLOW, "COLOUR_YELLOW"); + SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_RED, "COLOUR_RED"); + SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_LIGHT_BLUE, "COLOUR_LIGHT_BLUE"); + SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_GREEN, "COLOUR_GREEN"); + SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_DARK_GREEN, "COLOUR_DARK_GREEN"); + SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_BLUE, "COLOUR_BLUE"); + SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_CREAM, "COLOUR_CREAM"); + SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_MAUVE, "COLOUR_MAUVE"); + SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_PURPLE, "COLOUR_PURPLE"); + SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_ORANGE, "COLOUR_ORANGE"); + SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_BROWN, "COLOUR_BROWN"); + SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_GREY, "COLOUR_GREY"); + SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_WHITE, "COLOUR_WHITE"); + SQAICompany.DefSQConst(engine, ScriptCompany::COLOUR_INVALID, "COLOUR_INVALID"); SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::ResolveCompanyID, "ResolveCompanyID", 2, ".i"); SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::IsMine, "IsMine", 2, ".i"); @@ -59,6 +100,10 @@ void SQAICompany_Register(Squirrel *engine) SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetAutoRenewMonths, "GetAutoRenewMonths", 2, ".i"); SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::SetAutoRenewMoney, "SetAutoRenewMoney", 2, ".i"); SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetAutoRenewMoney, "GetAutoRenewMoney", 2, ".i"); + SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::SetPrimaryLiveryColour, "SetPrimaryLiveryColour", 3, ".ii"); + SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::SetSecondaryLiveryColour, "SetSecondaryLiveryColour", 3, ".ii"); + SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetPrimaryLiveryColour, "GetPrimaryLiveryColour", 2, ".i"); + SQAICompany.DefSQStaticMethod(engine, &ScriptCompany::GetSecondaryLiveryColour, "GetSecondaryLiveryColour", 2, ".i"); SQAICompany.PostRegister(engine); } diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index bba36b7ea6..24b5d5b516 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -22,6 +22,10 @@ * \li AIAirport::GetMonthlyMaintenanceCost * \li AIGroup::SetParent * \li AIGroup::GetParent + * \li AICompany::SetPrimaryLiveryColour + * \li AICompany::SetSecondaryLiveryColour + * \li AICompany::GetPrimaryLiveryColour + * \li AICompany::GetSecondaryLiveryColour * * Other changes: * \li AIBridge::GetName takes one extra parameter to refer the vehicle type diff --git a/src/script/api/game/game_company.hpp.sq b/src/script/api/game/game_company.hpp.sq index 29476fc8aa..626664484a 100644 --- a/src/script/api/game/game_company.hpp.sq +++ b/src/script/api/game/game_company.hpp.sq @@ -21,30 +21,71 @@ void SQGSCompany_Register(Squirrel *engine) SQGSCompany.PreRegister(engine); SQGSCompany.AddConstructor(engine, "x"); - SQGSCompany.DefSQConst(engine, ScriptCompany::CURRENT_QUARTER, "CURRENT_QUARTER"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EARLIEST_QUARTER, "EARLIEST_QUARTER"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COMPANY_FIRST, "COMPANY_FIRST"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COMPANY_LAST, "COMPANY_LAST"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COMPANY_INVALID, "COMPANY_INVALID"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COMPANY_SELF, "COMPANY_SELF"); - SQGSCompany.DefSQConst(engine, ScriptCompany::COMPANY_SPECTATOR, "COMPANY_SPECTATOR"); - SQGSCompany.DefSQConst(engine, ScriptCompany::GENDER_MALE, "GENDER_MALE"); - SQGSCompany.DefSQConst(engine, ScriptCompany::GENDER_FEMALE, "GENDER_FEMALE"); - SQGSCompany.DefSQConst(engine, ScriptCompany::GENDER_INVALID, "GENDER_INVALID"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_CONSTRUCTION, "EXPENSES_CONSTRUCTION"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_NEW_VEHICLES, "EXPENSES_NEW_VEHICLES"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_TRAIN_RUN, "EXPENSES_TRAIN_RUN"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_ROADVEH_RUN, "EXPENSES_ROADVEH_RUN"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_AIRCRAFT_RUN, "EXPENSES_AIRCRAFT_RUN"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_SHIP_RUN, "EXPENSES_SHIP_RUN"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_PROPERTY, "EXPENSES_PROPERTY"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_TRAIN_INC, "EXPENSES_TRAIN_INC"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_ROADVEH_INC, "EXPENSES_ROADVEH_INC"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_AIRCRAFT_INC, "EXPENSES_AIRCRAFT_INC"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_SHIP_INC, "EXPENSES_SHIP_INC"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_LOAN_INT, "EXPENSES_LOAN_INT"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_OTHER, "EXPENSES_OTHER"); - SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_INVALID, "EXPENSES_INVALID"); + SQGSCompany.DefSQConst(engine, ScriptCompany::CURRENT_QUARTER, "CURRENT_QUARTER"); + SQGSCompany.DefSQConst(engine, ScriptCompany::EARLIEST_QUARTER, "EARLIEST_QUARTER"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COMPANY_FIRST, "COMPANY_FIRST"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COMPANY_LAST, "COMPANY_LAST"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COMPANY_INVALID, "COMPANY_INVALID"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COMPANY_SELF, "COMPANY_SELF"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COMPANY_SPECTATOR, "COMPANY_SPECTATOR"); + SQGSCompany.DefSQConst(engine, ScriptCompany::GENDER_MALE, "GENDER_MALE"); + SQGSCompany.DefSQConst(engine, ScriptCompany::GENDER_FEMALE, "GENDER_FEMALE"); + SQGSCompany.DefSQConst(engine, ScriptCompany::GENDER_INVALID, "GENDER_INVALID"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_DEFAULT, "LS_DEFAULT"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_STEAM, "LS_STEAM"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_DIESEL, "LS_DIESEL"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_ELECTRIC, "LS_ELECTRIC"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_MONORAIL, "LS_MONORAIL"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_MAGLEV, "LS_MAGLEV"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_DMU, "LS_DMU"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_EMU, "LS_EMU"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_WAGON_STEAM, "LS_PASSENGER_WAGON_STEAM"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_WAGON_DIESEL, "LS_PASSENGER_WAGON_DIESEL"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_WAGON_ELECTRIC, "LS_PASSENGER_WAGON_ELECTRIC"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_WAGON_MONORAIL, "LS_PASSENGER_WAGON_MONORAIL"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_WAGON_MAGLEV, "LS_PASSENGER_WAGON_MAGLEV"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_FREIGHT_WAGON, "LS_FREIGHT_WAGON"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_BUS, "LS_BUS"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_TRUCK, "LS_TRUCK"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_SHIP, "LS_PASSENGER_SHIP"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_FREIGHT_SHIP, "LS_FREIGHT_SHIP"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_HELICOPTER, "LS_HELICOPTER"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_SMALL_PLANE, "LS_SMALL_PLANE"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_LARGE_PLANE, "LS_LARGE_PLANE"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_PASSENGER_TRAM, "LS_PASSENGER_TRAM"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_FREIGHT_TRAM, "LS_FREIGHT_TRAM"); + SQGSCompany.DefSQConst(engine, ScriptCompany::LS_INVALID, "LS_INVALID"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_DARK_BLUE, "COLOUR_DARK_BLUE"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_PALE_GREEN, "COLOUR_PALE_GREEN"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_PINK, "COLOUR_PINK"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_YELLOW, "COLOUR_YELLOW"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_RED, "COLOUR_RED"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_LIGHT_BLUE, "COLOUR_LIGHT_BLUE"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_GREEN, "COLOUR_GREEN"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_DARK_GREEN, "COLOUR_DARK_GREEN"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_BLUE, "COLOUR_BLUE"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_CREAM, "COLOUR_CREAM"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_MAUVE, "COLOUR_MAUVE"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_PURPLE, "COLOUR_PURPLE"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_ORANGE, "COLOUR_ORANGE"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_BROWN, "COLOUR_BROWN"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_GREY, "COLOUR_GREY"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_WHITE, "COLOUR_WHITE"); + SQGSCompany.DefSQConst(engine, ScriptCompany::COLOUR_INVALID, "COLOUR_INVALID"); + SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_CONSTRUCTION, "EXPENSES_CONSTRUCTION"); + SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_NEW_VEHICLES, "EXPENSES_NEW_VEHICLES"); + SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_TRAIN_RUN, "EXPENSES_TRAIN_RUN"); + SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_ROADVEH_RUN, "EXPENSES_ROADVEH_RUN"); + SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_AIRCRAFT_RUN, "EXPENSES_AIRCRAFT_RUN"); + SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_SHIP_RUN, "EXPENSES_SHIP_RUN"); + SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_PROPERTY, "EXPENSES_PROPERTY"); + SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_TRAIN_INC, "EXPENSES_TRAIN_INC"); + SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_ROADVEH_INC, "EXPENSES_ROADVEH_INC"); + SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_AIRCRAFT_INC, "EXPENSES_AIRCRAFT_INC"); + SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_SHIP_INC, "EXPENSES_SHIP_INC"); + SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_LOAN_INT, "EXPENSES_LOAN_INT"); + SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_OTHER, "EXPENSES_OTHER"); + SQGSCompany.DefSQConst(engine, ScriptCompany::EXPENSES_INVALID, "EXPENSES_INVALID"); SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::ResolveCompanyID, "ResolveCompanyID", 2, ".i"); SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::SetName, "SetName", 2, ".."); @@ -69,6 +110,10 @@ void SQGSCompany_Register(Squirrel *engine) SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetAutoRenewStatus, "GetAutoRenewStatus", 2, ".i"); SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetAutoRenewMonths, "GetAutoRenewMonths", 2, ".i"); SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetAutoRenewMoney, "GetAutoRenewMoney", 2, ".i"); + SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::SetPrimaryLiveryColour, "SetPrimaryLiveryColour", 3, ".ii"); + SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::SetSecondaryLiveryColour, "SetSecondaryLiveryColour", 3, ".ii"); + SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetPrimaryLiveryColour, "GetPrimaryLiveryColour", 2, ".i"); + SQGSCompany.DefSQStaticMethod(engine, &ScriptCompany::GetSecondaryLiveryColour, "GetSecondaryLiveryColour", 2, ".i"); SQGSCompany.PostRegister(engine); } diff --git a/src/script/api/script_company.cpp b/src/script/api/script_company.cpp index a1f40c5e1e..54888c33cb 100644 --- a/src/script/api/script_company.cpp +++ b/src/script/api/script_company.cpp @@ -296,3 +296,33 @@ return ::Company::Get((CompanyID)company)->settings.engine_renew_money; } + +/* static */ bool ScriptCompany::SetPrimaryLiveryColour(LiveryScheme scheme, Colours colour) +{ + return ScriptObject::DoCommand(0, scheme, colour, CMD_SET_COMPANY_COLOUR); +} + +/* static */ bool ScriptCompany::SetSecondaryLiveryColour(LiveryScheme scheme, Colours colour) +{ + return ScriptObject::DoCommand(0, scheme | 1 << 8, colour, CMD_SET_COMPANY_COLOUR); +} + +/* static */ ScriptCompany::Colours ScriptCompany::GetPrimaryLiveryColour(ScriptCompany::LiveryScheme scheme) +{ + if ((::LiveryScheme)scheme < LS_BEGIN || (::LiveryScheme)scheme >= LS_END) return COLOUR_INVALID; + + const Company *c = ::Company::GetIfValid(_current_company); + if (c == NULL) return COLOUR_INVALID; + + return (ScriptCompany::Colours)c->livery[scheme].colour1; +} + +/* static */ ScriptCompany::Colours ScriptCompany::GetSecondaryLiveryColour(ScriptCompany::LiveryScheme scheme) +{ + if ((::LiveryScheme)scheme < LS_BEGIN || (::LiveryScheme)scheme >= LS_END) return COLOUR_INVALID; + + const Company *c = ::Company::GetIfValid(_current_company); + if (c == NULL) return COLOUR_INVALID; + + return (ScriptCompany::Colours)c->livery[scheme].colour2; +} diff --git a/src/script/api/script_company.hpp b/src/script/api/script_company.hpp index dc917500b7..55cb7a9300 100644 --- a/src/script/api/script_company.hpp +++ b/src/script/api/script_company.hpp @@ -14,6 +14,8 @@ #include "script_text.hpp" #include "../../economy_type.h" +#include "../../livery.h" +#include "../../gfx_type.h" /** * Class that handles all company related functions. @@ -46,6 +48,55 @@ public: GENDER_INVALID = -1, ///< An invalid gender. }; + /** List of different livery schemes. */ + enum LiveryScheme { + LS_DEFAULT, ///< Default scheme. + LS_STEAM, ///< Steam engines. + LS_DIESEL, ///< Diesel engines. + LS_ELECTRIC, ///< Electric engines. + LS_MONORAIL, ///< Monorail engines. + LS_MAGLEV, ///< Maglev engines. + LS_DMU, ///< DMUs and their passenger wagons. + LS_EMU, ///< EMUs and their passenger wagons. + LS_PASSENGER_WAGON_STEAM, ///< Passenger wagons attached to steam engines. + LS_PASSENGER_WAGON_DIESEL, ///< Passenger wagons attached to diesel engines. + LS_PASSENGER_WAGON_ELECTRIC, ///< Passenger wagons attached to electric engines. + LS_PASSENGER_WAGON_MONORAIL, ///< Passenger wagons attached to monorail engines. + LS_PASSENGER_WAGON_MAGLEV, ///< Passenger wagons attached to maglev engines. + LS_FREIGHT_WAGON, ///< Freight wagons. + LS_BUS, ///< Buses. + LS_TRUCK, ///< Trucks. + LS_PASSENGER_SHIP, ///< Passenger ships. + LS_FREIGHT_SHIP, ///< Freight ships. + LS_HELICOPTER, ///< Helicopters. + LS_SMALL_PLANE, ///< Small aeroplanes. + LS_LARGE_PLANE, ///< Large aeroplanes. + LS_PASSENGER_TRAM, ///< Passenger trams. + LS_FREIGHT_TRAM, ///< Freight trams. + LS_INVALID = -1, + }; + + /** List of colours. */ + enum Colours { + COLOUR_DARK_BLUE, + COLOUR_PALE_GREEN, + COLOUR_PINK, + COLOUR_YELLOW, + COLOUR_RED, + COLOUR_LIGHT_BLUE, + COLOUR_GREEN, + COLOUR_DARK_GREEN, + COLOUR_BLUE, + COLOUR_CREAM, + COLOUR_MAUVE, + COLOUR_PURPLE, + COLOUR_ORANGE, + COLOUR_BROWN, + COLOUR_GREY, + COLOUR_WHITE, + COLOUR_INVALID = ::INVALID_COLOUR + }; + /** * Types of expenses. * @api -ai @@ -331,6 +382,36 @@ public: * @return The minimum required money for autorenew to work. */ static Money GetAutoRenewMoney(CompanyID company); + + /** + * Set primary colour for your company. + * @param scheme Livery scheme to set. + * @param colour Colour to set. + * @return False if unable to set primary colour of the livery scheme (e.g. colour in use). + */ + static bool SetPrimaryLiveryColour(LiveryScheme scheme, Colours colour); + + /** + * Set secondary colour for your company. + * @param scheme Livery scheme to set. + * @param colour Colour to set. + * @return False if unable to set secondary colour of the livery scheme. + */ + static bool SetSecondaryLiveryColour(LiveryScheme scheme, Colours colour); + + /** + * Get primary colour of a livery for your company. + * @param scheme Livery scheme to get. + * @return Primary colour of livery. + */ + static ScriptCompany::Colours GetPrimaryLiveryColour(LiveryScheme scheme); + + /** + * Get secondary colour of a livery for your company. + * @param scheme Livery scheme to get. + * @return Secondary colour of livery. + */ + static ScriptCompany::Colours GetSecondaryLiveryColour(LiveryScheme scheme); }; DECLARE_POSTFIX_INCREMENT(ScriptCompany::CompanyID) diff --git a/src/script/api/template/template_company.hpp.sq b/src/script/api/template/template_company.hpp.sq index 7dc63f24bc..82c10381ab 100644 --- a/src/script/api/template/template_company.hpp.sq +++ b/src/script/api/template/template_company.hpp.sq @@ -19,6 +19,10 @@ namespace SQConvert { template <> inline int Return(HSQUIRRELVM vm, ScriptCompany::CompanyID res) { sq_pushinteger(vm, (int32)res); return 1; } template <> inline ScriptCompany::Gender GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptCompany::Gender)tmp; } template <> inline int Return(HSQUIRRELVM vm, ScriptCompany::Gender res) { sq_pushinteger(vm, (int32)res); return 1; } + template <> inline ScriptCompany::LiveryScheme GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptCompany::LiveryScheme)tmp; } + template <> inline int Return(HSQUIRRELVM vm, ScriptCompany::LiveryScheme res) { sq_pushinteger(vm, (int32)res); return 1; } + template <> inline ScriptCompany::Colours GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptCompany::Colours)tmp; } + template <> inline int Return(HSQUIRRELVM vm, ScriptCompany::Colours res) { sq_pushinteger(vm, (int32)res); return 1; } template <> inline ScriptCompany::ExpensesType GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptCompany::ExpensesType)tmp; } template <> inline int Return(HSQUIRRELVM vm, ScriptCompany::ExpensesType res) { sq_pushinteger(vm, (int32)res); return 1; } From 5d3ccae6c5bd3f328ad0d8e68ae7c69451b9ca48 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 13 Feb 2019 22:48:46 +0000 Subject: [PATCH 415/622] Add: AI function to get current usage of a group. --- src/script/api/ai/ai_group.hpp.sq | 1 + src/script/api/script_group.cpp | 21 +++++++++++++++++++++ src/script/api/script_group.hpp | 8 ++++++++ 3 files changed, 30 insertions(+) diff --git a/src/script/api/ai/ai_group.hpp.sq b/src/script/api/ai/ai_group.hpp.sq index d721ddfbf5..cae6cb3acb 100644 --- a/src/script/api/ai/ai_group.hpp.sq +++ b/src/script/api/ai/ai_group.hpp.sq @@ -44,6 +44,7 @@ void SQAIGroup_Register(Squirrel *engine) SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::StopAutoReplace, "StopAutoReplace", 3, ".ii"); SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetProfitThisYear, "GetProfitThisYear", 2, ".i"); SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetProfitLastYear, "GetProfitLastYear", 2, ".i"); + SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetCurrentUsage, "GetCurrentUsage", 2, ".i"); SQAIGroup.PostRegister(engine); } diff --git a/src/script/api/script_group.cpp b/src/script/api/script_group.cpp index 023f5534c5..0e89c3c605 100644 --- a/src/script/api/script_group.cpp +++ b/src/script/api/script_group.cpp @@ -173,3 +173,24 @@ return ::Group::Get(group_id)->statistics.profit_last_year; } + +/* static */ uint32 ScriptGroup::GetCurrentUsage(GroupID group_id) +{ + if (!IsValidGroup(group_id)) return -1; + + uint32 occupancy = 0; + uint32 vehicle_count = 0; + + const Vehicle *v; + FOR_ALL_VEHICLES(v) { + if (v->group_id != group_id) continue; + if (!v->IsPrimaryVehicle()) continue; + + occupancy += v->trip_occupancy; + vehicle_count++; + } + + if (vehicle_count == 0) return -1; + + return occupancy / vehicle_count; +} diff --git a/src/script/api/script_group.hpp b/src/script/api/script_group.hpp index c5f41cdb6e..a411967184 100644 --- a/src/script/api/script_group.hpp +++ b/src/script/api/script_group.hpp @@ -205,6 +205,14 @@ public: * @return The current profit the group had last year. */ static Money GetProfitLastYear(GroupID group_id); + + /** + * Get the current vehicle usage of a group. + * @param group_id The group to get the current usage of. + * @pre IsValidGroup(group_id). + * @return The current usage of the group. + */ + static uint32 GetCurrentUsage(GroupID group_id); }; #endif /* SCRIPT_GROUP_HPP */ From 5a5944867dfeaa556ec78c23af4796adb28a6a9f Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 15 Feb 2019 20:14:50 +0000 Subject: [PATCH 416/622] Add: Add parent_group_id parameter to CreateGroup() --- bin/ai/compat_0.7.nut | 7 +++++++ bin/ai/compat_1.0.nut | 7 +++++++ bin/ai/compat_1.1.nut | 7 +++++++ bin/ai/compat_1.2.nut | 7 +++++++ bin/ai/compat_1.3.nut | 7 +++++++ bin/ai/compat_1.4.nut | 7 +++++++ bin/ai/compat_1.5.nut | 7 +++++++ bin/ai/compat_1.6.nut | 7 +++++++ bin/ai/compat_1.7.nut | 7 +++++++ bin/ai/compat_1.8.nut | 7 +++++++ bin/ai/regression/tst_regression/main.nut | 2 +- src/script/api/ai/ai_group.hpp.sq | 2 +- src/script/api/ai_changelog.hpp | 1 + src/script/api/script_group.cpp | 4 ++-- src/script/api/script_group.hpp | 3 ++- 15 files changed, 77 insertions(+), 5 deletions(-) diff --git a/bin/ai/compat_0.7.nut b/bin/ai/compat_0.7.nut index 98c03c6731..86ab06bba5 100644 --- a/bin/ai/compat_0.7.nut +++ b/bin/ai/compat_0.7.nut @@ -374,3 +374,10 @@ AIBridge.GetName <- function(bridge_id) { return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL); } + +/* 1.9 adds parent_group_id to CreateGroup function */ +AIGroup._CreateGroup <- AIGroup.CreateGroup; +AIGroup.CreateGroup <- function(vehicle_type) +{ + return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID); +} diff --git a/bin/ai/compat_1.0.nut b/bin/ai/compat_1.0.nut index 627c949cc3..6aa0e1a973 100644 --- a/bin/ai/compat_1.0.nut +++ b/bin/ai/compat_1.0.nut @@ -126,3 +126,10 @@ AIBridge.GetName <- function(bridge_id) { return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL); } + +/* 1.9 adds parent_group_id to CreateGroup function */ +AIGroup._CreateGroup <- AIGroup.CreateGroup; +AIGroup.CreateGroup <- function(vehicle_type) +{ + return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID); +} diff --git a/bin/ai/compat_1.1.nut b/bin/ai/compat_1.1.nut index a47f3d5b16..3d7b7553ee 100644 --- a/bin/ai/compat_1.1.nut +++ b/bin/ai/compat_1.1.nut @@ -63,3 +63,10 @@ AIBridge.GetName <- function(bridge_id) { return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL); } + +/* 1.9 adds parent_group_id to CreateGroup function */ +AIGroup._CreateGroup <- AIGroup.CreateGroup; +AIGroup.CreateGroup <- function(vehicle_type) +{ + return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID); +} diff --git a/bin/ai/compat_1.2.nut b/bin/ai/compat_1.2.nut index 95ccabda24..594ba98352 100644 --- a/bin/ai/compat_1.2.nut +++ b/bin/ai/compat_1.2.nut @@ -15,3 +15,10 @@ AIBridge.GetName <- function(bridge_id) { return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL); } + +/* 1.9 adds parent_group_id to CreateGroup function */ +AIGroup._CreateGroup <- AIGroup.CreateGroup; +AIGroup.CreateGroup <- function(vehicle_type) +{ + return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID); +} diff --git a/bin/ai/compat_1.3.nut b/bin/ai/compat_1.3.nut index fc8e06bf5e..fb0f41d308 100644 --- a/bin/ai/compat_1.3.nut +++ b/bin/ai/compat_1.3.nut @@ -15,3 +15,10 @@ AIBridge.GetName <- function(bridge_id) { return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL); } + +/* 1.9 adds parent_group_id to CreateGroup function */ +AIGroup._CreateGroup <- AIGroup.CreateGroup; +AIGroup.CreateGroup <- function(vehicle_type) +{ + return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID); +} diff --git a/bin/ai/compat_1.4.nut b/bin/ai/compat_1.4.nut index 169ead959d..4bbb971604 100644 --- a/bin/ai/compat_1.4.nut +++ b/bin/ai/compat_1.4.nut @@ -15,3 +15,10 @@ AIBridge.GetName <- function(bridge_id) { return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL); } + +/* 1.9 adds parent_group_id to CreateGroup function */ +AIGroup._CreateGroup <- AIGroup.CreateGroup; +AIGroup.CreateGroup <- function(vehicle_type) +{ + return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID); +} diff --git a/bin/ai/compat_1.5.nut b/bin/ai/compat_1.5.nut index 681a708bee..b006f1733e 100644 --- a/bin/ai/compat_1.5.nut +++ b/bin/ai/compat_1.5.nut @@ -15,3 +15,10 @@ AIBridge.GetName <- function(bridge_id) { return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL); } + +/* 1.9 adds parent_group_id to CreateGroup function */ +AIGroup._CreateGroup <- AIGroup.CreateGroup; +AIGroup.CreateGroup <- function(vehicle_type) +{ + return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID); +} diff --git a/bin/ai/compat_1.6.nut b/bin/ai/compat_1.6.nut index 5242821d1d..e57a3cb980 100644 --- a/bin/ai/compat_1.6.nut +++ b/bin/ai/compat_1.6.nut @@ -15,3 +15,10 @@ AIBridge.GetName <- function(bridge_id) { return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL); } + +/* 1.9 adds parent_group_id to CreateGroup function */ +AIGroup._CreateGroup <- AIGroup.CreateGroup; +AIGroup.CreateGroup <- function(vehicle_type) +{ + return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID); +} diff --git a/bin/ai/compat_1.7.nut b/bin/ai/compat_1.7.nut index 93884e6637..ae403d104b 100644 --- a/bin/ai/compat_1.7.nut +++ b/bin/ai/compat_1.7.nut @@ -15,3 +15,10 @@ AIBridge.GetName <- function(bridge_id) { return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL); } + +/* 1.9 adds parent_group_id to CreateGroup function */ +AIGroup._CreateGroup <- AIGroup.CreateGroup; +AIGroup.CreateGroup <- function(vehicle_type) +{ + return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID); +} diff --git a/bin/ai/compat_1.8.nut b/bin/ai/compat_1.8.nut index f3fa1bc0a6..ecf4accdde 100644 --- a/bin/ai/compat_1.8.nut +++ b/bin/ai/compat_1.8.nut @@ -15,3 +15,10 @@ AIBridge.GetName <- function(bridge_id) { return AIBridge._GetName(bridge_id, AIVehicle.VT_RAIL); } + +/* 1.9 adds parent_group_id to CreateGroup function */ +AIGroup._CreateGroup <- AIGroup.CreateGroup; +AIGroup.CreateGroup <- function(vehicle_type) +{ + return AIGroup._CreateGroup(vehicle_type, AIGroup.GROUP_INVALID); +} diff --git a/bin/ai/regression/tst_regression/main.nut b/bin/ai/regression/tst_regression/main.nut index 8b92b6f881..7315f33f82 100644 --- a/bin/ai/regression/tst_regression/main.nut +++ b/bin/ai/regression/tst_regression/main.nut @@ -574,7 +574,7 @@ function Regression::Group() local vehicle = AIVehicle.BuildVehicle(10000, 116); print(" AIVehicle.BuildVehicle(): " + vehicle); print(" GetNumEngines(): " + AIGroup.GetNumEngines(AIGroup.GROUP_ALL, 116)); - local group = AIGroup.CreateGroup(AIVehicle.VT_ROAD); + local group = AIGroup.CreateGroup(AIVehicle.VT_ROAD, AIGroup.GROUP_INVALID); print(" CreateGroup(): " + group); print(" MoveVehicle(): " + AIGroup.MoveVehicle(group, vehicle)); print(" GetNumEngines(): " + AIGroup.GetNumEngines(group, 116)); diff --git a/src/script/api/ai/ai_group.hpp.sq b/src/script/api/ai/ai_group.hpp.sq index cae6cb3acb..5fa50ae1be 100644 --- a/src/script/api/ai/ai_group.hpp.sq +++ b/src/script/api/ai/ai_group.hpp.sq @@ -26,7 +26,7 @@ void SQAIGroup_Register(Squirrel *engine) SQAIGroup.DefSQConst(engine, ScriptGroup::GROUP_INVALID, "GROUP_INVALID"); SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::IsValidGroup, "IsValidGroup", 2, ".i"); - SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::CreateGroup, "CreateGroup", 2, ".i"); + SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::CreateGroup, "CreateGroup", 3, ".ii"); SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::DeleteGroup, "DeleteGroup", 2, ".i"); SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetVehicleType, "GetVehicleType", 2, ".i"); SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::SetName, "SetName", 3, ".i."); diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index 24b5d5b516..0afe4e08c4 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -29,6 +29,7 @@ * * Other changes: * \li AIBridge::GetName takes one extra parameter to refer the vehicle type + * \li AIGroup::CreateGroup gains parent_group_id parameter * * \b 1.8.0 * diff --git a/src/script/api/script_group.cpp b/src/script/api/script_group.cpp index 0e89c3c605..16a50bc17c 100644 --- a/src/script/api/script_group.cpp +++ b/src/script/api/script_group.cpp @@ -28,9 +28,9 @@ return g != NULL && g->owner == ScriptObject::GetCompany(); } -/* static */ ScriptGroup::GroupID ScriptGroup::CreateGroup(ScriptVehicle::VehicleType vehicle_type) +/* static */ ScriptGroup::GroupID ScriptGroup::CreateGroup(ScriptVehicle::VehicleType vehicle_type, GroupID parent_group_id) { - if (!ScriptObject::DoCommand(0, (::VehicleType)vehicle_type, INVALID_GROUP, CMD_CREATE_GROUP, NULL, &ScriptInstance::DoCommandReturnGroupID)) return GROUP_INVALID; + if (!ScriptObject::DoCommand(0, (::VehicleType)vehicle_type, parent_group_id, CMD_CREATE_GROUP, NULL, &ScriptInstance::DoCommandReturnGroupID)) return GROUP_INVALID; /* In case of test-mode, we return GroupID 0 */ return (ScriptGroup::GroupID)0; diff --git a/src/script/api/script_group.hpp b/src/script/api/script_group.hpp index a411967184..9e88eaff1c 100644 --- a/src/script/api/script_group.hpp +++ b/src/script/api/script_group.hpp @@ -42,11 +42,12 @@ public: /** * Create a new group. * @param vehicle_type The type of vehicle to create a group for. + * @param parent_group_id The parent group id to create this group under, INVALID_GROUP for top-level. * @return The GroupID of the new group, or an invalid GroupID when * it failed. Check the return value using IsValidGroup(). In test-mode * 0 is returned if it was successful; any other value indicates failure. */ - static GroupID CreateGroup(ScriptVehicle::VehicleType vehicle_type); + static GroupID CreateGroup(ScriptVehicle::VehicleType vehicle_type, GroupID parent_group_id); /** * Delete the given group. When the deletion succeeds all vehicles in the From c91e0058c27ac3f837de2735e2ce5fcfcd50b6ab Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 26 Feb 2019 21:07:22 +0000 Subject: [PATCH 417/622] Change: Allow vehicle group names to be non-unique. Group names are visual identifiers, and do not need to be unique. Group sorting already falls back to group ID if names are the same, so that sorted list position is stable. --- src/group_cmd.cpp | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp index b6590bc8fd..bd99aa1272 100644 --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -408,17 +408,6 @@ CommandCost CmdDeleteGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 return CommandCost(); } -static bool IsUniqueGroupNameForVehicleType(const char *name, VehicleType type) -{ - const Group *g; - - FOR_ALL_GROUPS(g) { - if (g->name != NULL && g->vehicle_type == type && strcmp(g->name, name) == 0) return false; - } - - return true; -} - /** * Alter a group * @param tile unused @@ -442,7 +431,6 @@ CommandCost CmdAlterGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 if (!reset) { if (Utf8StringLength(text) >= MAX_LENGTH_GROUP_NAME_CHARS) return CMD_ERROR; - if (!IsUniqueGroupNameForVehicleType(text, g->vehicle_type)) return_cmd_error(STR_ERROR_NAME_MUST_BE_UNIQUE); } if (flags & DC_EXEC) { From c61acc7fc1fc6bbc1e5b1d0a782e74ecf16a9a23 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Thu, 28 Feb 2019 19:36:27 +0100 Subject: [PATCH 418/622] Fix #7280: Save in the right location on desync and server timeout --- src/network/network_client.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index b4d0a06f7c..0cb7728e66 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -125,6 +125,7 @@ struct PacketReader : LoadFilter { void ClientNetworkEmergencySave() { if (!_settings_client.gui.autosave_on_network_disconnect) return; + if (!_networking) return; const char *filename = "netsave.sav"; DEBUG(net, 0, "Client: Performing emergency save (%s)", filename); @@ -212,6 +213,8 @@ void ClientNetworkGameSocketHandler::ClientError(NetworkRecvStatus res) SendError(errorno); } + ClientNetworkEmergencySave(); + _switch_mode = SM_MENU; this->CloseConnection(res); _networking = false; @@ -1173,7 +1176,6 @@ void ClientNetworkGameSocketHandler::CheckConnection() if (lag > 20) { this->NetworkGameSocketHandler::CloseConnection(); ShowErrorMessage(STR_NETWORK_ERROR_LOSTCONNECTION, INVALID_STRING_ID, WL_CRITICAL); - ClientNetworkEmergencySave(); return; } From 93a6fd42d1a9eec51943182a8c9ed983e8b2d5b1 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Tue, 26 Feb 2019 22:13:24 +0000 Subject: [PATCH 419/622] Fix 23960d0f2c: Company livery window shows incorrect groups when opened from group window in multiplayer. --- src/company_gui.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 143fa0ab82..a3885ec960 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -707,7 +707,7 @@ public: this->BuildGroupList(company); this->SetRows(); } else { - this->SetSelectedGroup(group); + this->SetSelectedGroup(company, group); } this->FinishInitNested(company); @@ -715,7 +715,7 @@ public: this->InvalidateData(1); } - void SetSelectedGroup(GroupID group) + void SetSelectedGroup(CompanyID company, GroupID group) { this->RaiseWidget(this->livery_class + WID_SCL_CLASS_GENERAL); const Group *g = Group::Get(group); @@ -730,7 +730,7 @@ public: this->LowerWidget(this->livery_class + WID_SCL_CLASS_GENERAL); this->groups.ForceRebuild(); - this->BuildGroupList((CompanyID)this->window_number); + this->BuildGroupList(company); this->SetRows(); /* Position scrollbar to selected group */ @@ -1105,7 +1105,7 @@ void ShowCompanyLiveryWindow(CompanyID company, GroupID group) if (w == NULL) { new SelectCompanyLiveryWindow(&_select_company_livery_desc, company, group); } else if (group != INVALID_GROUP) { - w->SetSelectedGroup(group); + w->SetSelectedGroup(company, group); } } From 1a663d9efc4df763b908d7f405efe9b70bfe7955 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sun, 3 Mar 2019 16:54:04 +0000 Subject: [PATCH 420/622] Fix: Wrong variable was used in zlib detection --- config.lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.lib b/config.lib index 1c3fc2c94e..5312636c4c 100644 --- a/config.lib +++ b/config.lib @@ -820,7 +820,7 @@ check_params() { pre_detect_with_zlib=$with_zlib detect_zlib - if [ "$with_zlib" = "0" ] || [ -z "$zlib-config" ]; then + if [ "$with_zlib" = "0" ] || [ -z "$zlib_config" ]; then log 1 "WARNING: zlib was not detected or disabled" log 1 "WARNING: OpenTTD doesn't require zlib, but it does mean that many features" log 1 "WARNING: (like loading most old savegames/scenarios, loading heightmaps," From d9b4ada7e950dd94be30af7da3e61ffe049229b3 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sun, 3 Mar 2019 16:58:32 +0000 Subject: [PATCH 421/622] Fix 95ccddd6: SDL static library flags was not updated to use pkg-config format --- config.lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.lib b/config.lib index 5312636c4c..f825ea2108 100644 --- a/config.lib +++ b/config.lib @@ -1683,7 +1683,7 @@ make_cflags_and_ldflags() { CFLAGS="$CFLAGS `$sdl_config --cflags | sed 's@-D_GNU_SOURCE[^ ]*@@'`" if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then if [ "$enable_static" != "0" ]; then - LIBS="$LIBS `$sdl_config --static-libs`" + LIBS="$LIBS `$sdl_config --static --libs`" else LIBS="$LIBS `$sdl_config --libs`" fi From 4ac81b3ebb3ed892ff8195c2732694b00d164a75 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sun, 3 Mar 2019 16:59:36 +0000 Subject: [PATCH 422/622] Fix #7308: SDL linker flags were not added on MinGW --- config.lib | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/config.lib b/config.lib index f825ea2108..8d651c502b 100644 --- a/config.lib +++ b/config.lib @@ -1681,12 +1681,10 @@ make_cflags_and_ldflags() { CFLAGS="$CFLAGS -DWITH_SDL" # SDL must not add _GNU_SOURCE as it breaks many platforms CFLAGS="$CFLAGS `$sdl_config --cflags | sed 's@-D_GNU_SOURCE[^ ]*@@'`" - if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ]; then - if [ "$enable_static" != "0" ]; then - LIBS="$LIBS `$sdl_config --static --libs`" - else - LIBS="$LIBS `$sdl_config --libs`" - fi + if [ "$enable_static" != "0" ]; then + LIBS="$LIBS `$sdl_config --static --libs`" + else + LIBS="$LIBS `$sdl_config --libs`" fi fi From 8016b8b3e9f0e1c0190a3dba74ba4d02ed6053c1 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 3 Mar 2019 19:45:43 +0100 Subject: [PATCH 423/622] Update: Translations from eints catalan: 62 changes by juanjo french: 11 changes by glx --- src/lang/catalan.txt | 85 ++++++++++++++++++++++++++++++++------------ src/lang/french.txt | 11 ++++++ 2 files changed, 73 insertions(+), 23 deletions(-) diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index a43b35106d..ab49e700a2 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -190,6 +190,8 @@ STR_COLOUR_ORANGE :{G=Masculin}Tar STR_COLOUR_BROWN :{G=Masculin}Marró STR_COLOUR_GREY :{G=Masculin}Gris STR_COLOUR_WHITE :{G=Masculin}Blanc +STR_COLOUR_RANDOM :Aleatori +STR_COLOUR_DEFAULT :Per defecte # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -465,6 +467,7 @@ STR_TOOLBAR_SOUND_MUSIC :So/música ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Darrer missatge/notícia STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Historial de missatges +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Esborra tots els missatges ############ range ends here ############ range for about menu starts @@ -816,6 +819,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(President) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} ha patrocinat la construcció d'una nova població, anomenada {TOWN} +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}S'ha fundat una nova població que es diu {TOWN}! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}No{G u va} {STRING} en construcció prop de {TOWN} STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}S'està plantant {G un una} {G nou nova} {STRING} prop de {TOWN} @@ -928,6 +932,8 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Rand sud-afric STR_GAME_OPTIONS_CURRENCY_CUSTOM :Personalitzada STR_GAME_OPTIONS_CURRENCY_GEL :Lari georgià (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Rial iranià (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Ruble rus modern (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Peso mexicà (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vehicles de carretera @@ -990,7 +996,12 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Doble STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quàdruple +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Mida de la lletra +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Seleccioneu la mida de les fonts de la interfície. +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Doble +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Quàdruple STR_GAME_OPTIONS_BASE_GRF :{BLACK}Conjunt de gràfics base STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Selecciona el conjunt de gràfics base a utilitzar @@ -1259,6 +1270,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}No es po STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Manteniment de la infraestructura: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Quan està activat, la infraestructura provoca costos de manteniment. El cost creix proporcionalment al tamany de la xarxa de transport, afectant en conseqüència més a les companyies grosses que a les petites +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Color inicial de la companyia: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Escolliu el color inicial de la vostra companyia. STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Els aeroports mai caduquen: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Activant aquesta opció fa que cada tipus d'aeroport estigui disponible per sempre després de la seva introducció @@ -1817,6 +1830,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Canvia l STR_CHEAT_SETUP_PROD :{LTBLUE}Activa la modificació dels valors de producció: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Esquema de colors nou STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Mostra esquemes de colors generals STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Mostra els esquemes de colors dels trens @@ -2076,6 +2090,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desconne STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegit: escriviu-ne la contrasenya STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Companyia protegida: escriviu-ne la contrasenya +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Llista de clients # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Llista de clients @@ -2376,7 +2391,7 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Senyal p STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Senyal de ruta (elèctric){}Un senyal de ruta permet entrar més d'un tren dins de la mateixa secció de vies. Cal, però, que sigui capaç de reservar una ruta fins un punt de parada segur sense creuar-se amb cap altre tren. Es pot travessar en el sentit contrari al senyal. STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Senyal de ruta d'un sentit (elèctric){}Un senyal de ruta permet entrar més d'un tren dins de la mateixa secció de vies. Cal, però, que sigui capaç de reservar una ruta fins un punt de parada segur sense creuar-se amb cap altre tren. No es pot travessar en el sentit contrari al senyal. STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Conversió de senyals{}Quan aquest botó està premut, si es clica un senyal existent el converteix al tipus de senyal seleccionat. Ctrl+Clic commuta la variant existent. Maj+Clic mostra el cost estimat de conversió. -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Espaiat entre senyals +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distància entre senyals STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Disminueix l'espai entre senyals consecutives situades automàticament quan s'arrossega el ratolí o es manté premuda la tecla Ctrl. STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Augmenta l'espai entre senyals consecutives situades automàticament quan s'arrossega el ratolí o es manté premuda la tecla Ctrl. @@ -2703,36 +2718,39 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Fotogrames per segon STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} (x{DECIMAL}) -STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Velocitat de simulació: {STRING} +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Velocitat de simulació: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Nombre de tics del joc per segon. -STR_FRAMERATE_RATE_BLITTER :{WHITE}Fotogrames per segon: {STRING} +STR_FRAMERATE_RATE_BLITTER :{BLACK}Fotogrames per segon: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Nombre de fotogrames renderitzats per segon. -STR_FRAMERATE_SPEED_FACTOR :{WHITE}Factor de velocitat actual: x{DECIMAL} +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Factor de velocitat actual: x{DECIMAL} STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Quant ràpid va la partida actual, comparant-ho amb l'estimació de la velocitat normal. STR_FRAMERATE_CURRENT :{WHITE}Actual STR_FRAMERATE_AVERAGE :{WHITE}Mitjana -STR_FRAMERATE_DATA_POINTS :{WHITE}Dades basades en {COMMA} mesures. -STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE}{NBSP}ms -STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE}{NBSP}ms -STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE}{NBSP}ms -STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE}{NBSP}fps -STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE}{NBSP}fps -STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE}{NBSP}fps +STR_FRAMERATE_DATA_POINTS :{BLACK}Dades basades en {COMMA} mesures. +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{NBSP}ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{NBSP}ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{NBSP}ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{NBSP}fps +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{NBSP}fps +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{NBSP}fps STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA}{NBSP}ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA}{NBSP}s ############ Leave those lines in this order!! -STR_FRAMERATE_GAMELOOP :{WHITE}Total del bucle: -STR_FRAMERATE_GL_ECONOMY :{WHITE} Tractament de la càrrega: -STR_FRAMERATE_GL_TRAINS :{WHITE} Tics de tren: -STR_FRAMERATE_GL_ROADVEHS :{WHITE} Tics de vehicles de carretera: -STR_FRAMERATE_GL_SHIPS :{WHITE} Tics de vaixell: -STR_FRAMERATE_GL_AIRCRAFT :{WHITE} Tics d'aeronau: -STR_FRAMERATE_GL_LANDSCAPE :{WHITE} Tics del mapa: -STR_FRAMERATE_GL_LINKGRAPH :{WHITE} Retard del graf de distribució: -STR_FRAMERATE_DRAWING :{WHITE}Renderitzat de gràfics: -STR_FRAMERATE_DRAWING_VIEWPORTS :{WHITE} Vistes del mapa: -STR_FRAMERATE_VIDEO :{WHITE}Sortida de vídeo: -STR_FRAMERATE_SOUND :{WHITE}Mescla de so: +STR_FRAMERATE_GAMELOOP :{BLACK}Total del bucle: +STR_FRAMERATE_GL_ECONOMY :{BLACK} Tractament de càrrega: +STR_FRAMERATE_GL_TRAINS :{BLACK} Tics de trens: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Tics de vehicles de carretera: +STR_FRAMERATE_GL_SHIPS :{BLACK} Tics de vaixells: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Tics d'aeronaus: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Tics del mapa: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Retard del graf de distribució: +STR_FRAMERATE_DRAWING :{BLACK}Renderitzat de gràfics: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Vistes del mapa: +STR_FRAMERATE_VIDEO :{BLACK}Sortida de vídeo: +STR_FRAMERATE_SOUND :{BLACK}Mescla de so: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} Total GS/IA: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Script de partida: +STR_FRAMERATE_AI :{BLACK} IA {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Bucle @@ -2747,6 +2765,9 @@ STR_FRAMETIME_CAPTION_DRAWING :Renderitzat de STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Renderitzat de la vista del mapa STR_FRAMETIME_CAPTION_VIDEO :Sortida de vídeo STR_FRAMETIME_CAPTION_SOUND :Mescla de so +STR_FRAMETIME_CAPTION_ALLSCRIPTS :Total de scripts d'IA/GS +STR_FRAMETIME_CAPTION_GAMESCRIPT :Script de partida +STR_FRAMETIME_CAPTION_AI :AI {NUM}: {STRING} ############ End of leave-in-this-order @@ -2772,6 +2793,9 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Detalls STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}No hi ha informació disponible STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Cadena de filtre: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Sobreescriu fitxer +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Esteu segur que voleu sobreescriure el fitxer? STR_SAVELOAD_OSKTITLE :{BLACK}Posa el nom amb què desar la partida actual @@ -2889,7 +2913,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versió: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Mín. versió compatible: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Per defecte (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Per defecte (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Antic (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Antic (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Paràmetres: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Cap STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}No hi ha informació disponible STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}No s'ha trobat cap arxiu coincident @@ -2970,6 +2999,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :S'ha llegit des STR_NEWGRF_ERROR_GRM_FAILED :Els recursos GRF demanats no estan disponibles (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} ha estat desactivat per {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Format de disposició de sprite no vàlid o desconegut (sprite {3:NUM}). +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Hi ha massa elements a la llista de valors de propietats (sprite {3:NUM}, propietat {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :«Callback» de producció d'indústria no vàlid (sprite {3:NUM}, «{1:STRING}»). # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Alerta! @@ -3095,6 +3126,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Suborna # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Objectius STR_GOALS_SPECTATOR_CAPTION :{WHITE}Objectius globals +STR_GOALS_SPECTATOR :Objectius globals STR_GOALS_GLOBAL_TITLE :{BLACK}Objectius globals: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Cap - @@ -3143,6 +3175,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clica al # Story book window STR_STORY_BOOK_CAPTION :{WHITE}Llibre de Partida de {COMPANY} STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Llibre Global de Partida +STR_STORY_BOOK_SPECTATOR :Llibre de partida global STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Pàgina {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Salteu a una pàgina seleccionant-la en aquesta llista desplegable. @@ -3347,6 +3380,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Centra l STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Nivell de producció: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}La indústria ha anunciat la seva clausura imminent! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Requereix: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produeix: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Necessita: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} @@ -3404,6 +3440,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grups - STR_GROUP_CREATE_TOOLTIP :{BLACK}Clica per crear un grup STR_GROUP_DELETE_TOOLTIP :{BLACK}Elimina el grup seleccionat STR_GROUP_RENAME_TOOLTIP :{BLACK}Canvia el nom del grup seleccionat +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Canvia l'aspecte dels vehicles del grup seleccionat. STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Clica per protegir aquest grup de l'autosubstitueix global STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Esborrar grup @@ -3447,6 +3484,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacita STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagons Automotrius: {GOLD}+{POWER}{BLACK} Pes: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Remodelable a: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Totes les càrregues +STR_PURCHASE_INFO_NONE :Cap STR_PURCHASE_INFO_ALL_BUT :Qualsevol excepte {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Esforç de tracció màxim: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Abast: {GOLD}{COMMA} cel·les @@ -3846,6 +3884,7 @@ STR_ORDER_CONDITIONAL_AGE :Antiguitat (any STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Necessita revisió STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Sempre STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Temps de vida restant (anys) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Fiabilitat màxima STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Com comparar les dades del vehicle al valor donat STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :és igual a diff --git a/src/lang/french.txt b/src/lang/french.txt index aa9dc639a7..26bbdfe22c 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -996,7 +996,12 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Taille double STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Taille quadruple +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Taille de police +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Choisir la taille de police d'interface à utiliser +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Taille double +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Taille quadruple STR_GAME_OPTIONS_BASE_GRF :{BLACK}Graphiques de base STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Sélectionner les graphiques de base à utiliser @@ -2743,6 +2748,9 @@ STR_FRAMERATE_DRAWING :{BLACK}Rendu de STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Vues{NBSP}: STR_FRAMERATE_VIDEO :{BLACK}Sortie vidéo{NBSP}: STR_FRAMERATE_SOUND :{BLACK}Mixage sonore{NBSP}: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} Total GS/IA{NBSP}: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Script de jeu{NBSP}: +STR_FRAMERATE_AI :{BLACK} IA {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Boucle de jeu @@ -2757,6 +2765,9 @@ STR_FRAMETIME_CAPTION_DRAWING :Rendu des graph STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Rendu des vues STR_FRAMETIME_CAPTION_VIDEO :Sortie vidéo STR_FRAMETIME_CAPTION_SOUND :Mixage sonore +STR_FRAMETIME_CAPTION_ALLSCRIPTS :Total des scripts GS/IA +STR_FRAMETIME_CAPTION_GAMESCRIPT :Script de jeu +STR_FRAMETIME_CAPTION_AI :IA {NUM} {STRING} ############ End of leave-in-this-order From 39cda89e858325cf4c8b76a78566d96294d95b43 Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 3 Mar 2019 20:08:28 +0100 Subject: [PATCH 424/622] Add: Detect stable tags automatically, and set the 'stable' flag in '_openttd_newgrf_version' accordingly. (#7317) --- Makefile.src.in | 5 +++-- findversion.sh | 9 ++++++++- projects/determineversion.vbs | 25 +++++++++++++++++++------ src/rev.cpp.in | 2 +- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/Makefile.src.in b/Makefile.src.in index 19231d45ce..6b235be9d3 100644 --- a/Makefile.src.in +++ b/Makefile.src.in @@ -92,6 +92,7 @@ VERSION := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ') ISODATE := $(shell echo "$(VERSIONS)" | cut -f 2 -d' ') GITHASH := $(shell echo "$(VERSIONS)" | cut -f 4 -d' ') ISTAG := $(shell echo "$(VERSIONS)" | cut -f 5 -d' ') +ISSTABLETAG := $(shell echo "$(VERSIONS)" | cut -f 6 -d' ') # Make sure we have something in VERSION and ISODATE ifeq ($(VERSION),) @@ -277,10 +278,10 @@ endif # Revision files $(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in - $(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g" > $(SRC_DIR)/rev.cpp + $(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g;s@!!ISSTABLETAG!!@$(ISSTABLETAG)@g" > $(SRC_DIR)/rev.cpp $(SRC_DIR)/os/windows/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/os/windows/ottdres.rc.in - $(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g" > $(SRC_DIR)/os/windows/ottdres.rc + $(Q)cat $(SRC_DIR)/os/windows/ottdres.rc.in | sed "s@\!\!ISODATE\!\!@$(ISODATE)@g;s@!!VERSION!!@$(VERSION)@g;s@!!DATE!!@`date +%d.%m.%y`@g;s@!!GITHASH!!@$(GITHASH)@g;s@!!ISTAG!!@$(ISTAG)@g;s@!!ISSTABLETAG!!@$(ISSTABLETAG)@g" > $(SRC_DIR)/os/windows/ottdres.rc FORCE: diff --git a/findversion.sh b/findversion.sh index 37e483cae3..95a041bac0 100755 --- a/findversion.sh +++ b/findversion.sh @@ -83,9 +83,15 @@ if [ -d "$ROOT_DIR/.git" ]; then if [ -n "$TAG" ]; then VERSION="${TAG}" ISTAG="1" + if [ -n "`echo \"${TAG}\" | grep \"^[0-9.]*$\"`" ]; then + ISSTABLETAG="1" + else + ISSTABLETAG="0" + fi else VERSION="${ISODATE}-${BRANCH}${hashprefix}${SHORTHASH}" ISTAG="0" + ISSTABLETAG="0" fi elif [ -f "$ROOT_DIR/.ottdrev" ]; then @@ -102,6 +108,7 @@ else TAG="" VERSION="" ISTAG="0" + ISSTABLETAG="0" fi -echo "$VERSION $ISODATE $MODIFIED $HASH $ISTAG" +echo "$VERSION $ISODATE $MODIFIED $HASH $ISTAG $ISSTABLETAG" diff --git a/projects/determineversion.vbs b/projects/determineversion.vbs index a2f348faf0..10b38d35a1 100755 --- a/projects/determineversion.vbs +++ b/projects/determineversion.vbs @@ -21,7 +21,7 @@ Sub FindReplaceInFile(filename, to_find, replacement) file.Close End Sub -Sub UpdateFile(modified, isodate, version, cur_date, githash, istag, filename) +Sub UpdateFile(modified, isodate, version, cur_date, githash, istag, isstabletag, filename) FSO.CopyFile filename & ".in", filename FindReplaceInFile filename, "!!MODIFIED!!", modified FindReplaceInFile filename, "!!ISODATE!!", isodate @@ -29,10 +29,11 @@ Sub UpdateFile(modified, isodate, version, cur_date, githash, istag, filename) FindReplaceInFile filename, "!!DATE!!", cur_date FindReplaceInFile filename, "!!GITHASH!!", githash FindReplaceInFile filename, "!!ISTAG!!", istag + FindReplaceInFile filename, "!!ISSTABLETAG!!", isstabletag End Sub Sub UpdateFiles(version) - Dim modified, isodate, cur_date, githash, istag + Dim modified, isodate, cur_date, githash, istag, isstabletag cur_date = DatePart("D", Date) & "." & DatePart("M", Date) & "." & DatePart("YYYY", Date) If InStr(version, Chr(9)) Then @@ -41,20 +42,23 @@ Sub UpdateFiles(version) modified = Mid(isodate, InStr(isodate, Chr(9)) + 1) githash = Mid(modified, InStr(modified, Chr(9)) + 1) istag = Mid(githash, InStr(githash, Chr(9)) + 1) + isstabletag = Mid(istag, InStr(istag, Chr(9)) + 1) ' Remove tails from fields version = Mid(version, 1, InStr(version, Chr(9)) - 1) isodate = Mid(isodate, 1, InStr(isodate, Chr(9)) - 1) modified = Mid(modified, 1, InStr(modified, Chr(9)) - 1) githash = Mid(githash, 1, InStr(githash, Chr(9)) - 1) + istag = Mid(istag, 1, InStr(istag, Chr(9)) - 1) Else isodate = 0 modified = 1 githash = "" istag = 0 + isstabletag = 0 End If - UpdateFile modified, isodate, version, cur_date, githash, istag, "../src/rev.cpp" - UpdateFile modified, isodate, version, cur_date, githash, istag, "../src/os/windows/ottdres.rc" + UpdateFile modified, isodate, version, cur_date, githash, istag, isstabletag, "../src/rev.cpp" + UpdateFile modified, isodate, version, cur_date, githash, istag, isstabletag, "../src/os/windows/ottdres.rc" End Sub Function DetermineVersion() @@ -143,7 +147,7 @@ Function DetermineVersion() DetermineVersion = "norev000" modified = 1 Else - Dim version, hashprefix, istag + Dim version, hashprefix, istag, isstabletag If modified = 0 Then hashprefix = "-g" ElseIf modified = 2 Then @@ -155,12 +159,21 @@ Function DetermineVersion() If tag <> "" Then version = tag istag = 1 + + Set stable_regexp = New RegExp + stable_regexp.Pattern = "^[0-9.]*$" + If stable_regexp.Test(tag) Then + isstabletag = 1 + Else + isstabletag = 0 + End If Else version = isodate & "-" & branch & hashprefix & shorthash istag = 0 + isstabletag = 0 End If - DetermineVersion = version & Chr(9) & isodate & Chr(9) & modified & Chr(9) & hash & Chr(9) & istag + DetermineVersion = version & Chr(9) & isodate & Chr(9) & modified & Chr(9) & hash & Chr(9) & istag & Chr(9) & isstabletag End If End Function diff --git a/src/rev.cpp.in b/src/rev.cpp.in index b4855d4cc8..2d58bb152d 100644 --- a/src/rev.cpp.in +++ b/src/rev.cpp.in @@ -82,7 +82,7 @@ const byte _openttd_revision_tagged = !!ISTAG!!; * final release will always have a lower version number than the released * version, thus making comparisons on specific revisions easy. */ -const uint32 _openttd_newgrf_version = 1 << 28 | 9 << 24 | 0 << 20 | 0 << 19 | 28004; +const uint32 _openttd_newgrf_version = 1 << 28 | 9 << 24 | 0 << 20 | !!ISSTABLETAG!! << 19 | 28004; #ifdef __MORPHOS__ /** From eb46a89855c01a4898f5a9760969f2d9a7b3137d Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 3 Mar 2019 20:15:26 +0100 Subject: [PATCH 425/622] Fix: [AzurePipelines] also trigger CI on release branches --- azure-pipelines-ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/azure-pipelines-ci.yml b/azure-pipelines-ci.yml index 7bab1a9369..789f8f6a32 100644 --- a/azure-pipelines-ci.yml +++ b/azure-pipelines-ci.yml @@ -1,7 +1,9 @@ trigger: - master +- release/* pr: - master +- release/* jobs: - job: windows From a67ee025294278f9113a1c8bcb5ee91d9e174f69 Mon Sep 17 00:00:00 2001 From: frosch Date: Sun, 3 Mar 2019 20:51:57 +0100 Subject: [PATCH 426/622] Change: Heading for 1.10 now (#7319) --- .gitignore | 3 +++ bin/ai/compat_1.10.nut | 8 ++++++++ bin/ai/compat_1.9.nut | 2 ++ bin/ai/regression/regression_info.nut | 2 +- bin/game/compat_1.10.nut | 8 ++++++++ bin/game/compat_1.9.nut | 2 ++ os/os2/installer/make_installer.cmd | 2 +- os/rpm/openttd.spec | 4 ++-- os/windows/installer/install.nsi | 6 +++--- src/ai/ai_info.cpp | 2 +- src/game/game_info.cpp | 2 +- src/os/windows/ottdres.rc.in | 4 ++-- src/rev.cpp.in | 2 +- src/saveload/saveload.h | 4 ++-- src/script/api/ai_changelog.hpp | 5 ++++- src/script/api/game_changelog.hpp | 5 ++++- 16 files changed, 45 insertions(+), 16 deletions(-) create mode 100644 bin/ai/compat_1.10.nut create mode 100644 bin/game/compat_1.10.nut diff --git a/.gitignore b/.gitignore index e30aabe37c..3e74133dfe 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,9 @@ bin/baseset/* !bin/baseset/no_sound.obs !bin/baseset/no_music.obm !bin/baseset/orig_*.obm +!bin/game +bin/game/* +!bin/game/compat*.nut !bin/scripts bin/scripts/* !bin/scripts/*.example diff --git a/bin/ai/compat_1.10.nut b/bin/ai/compat_1.10.nut new file mode 100644 index 0000000000..fe985b90d0 --- /dev/null +++ b/bin/ai/compat_1.10.nut @@ -0,0 +1,8 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ diff --git a/bin/ai/compat_1.9.nut b/bin/ai/compat_1.9.nut index fe985b90d0..6dae3ebc0b 100644 --- a/bin/ai/compat_1.9.nut +++ b/bin/ai/compat_1.9.nut @@ -6,3 +6,5 @@ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . */ + +AILog.Info("1.9 API compatibility in effect."); diff --git a/bin/ai/regression/regression_info.nut b/bin/ai/regression/regression_info.nut index 341d13a085..d5c3f7dd29 100644 --- a/bin/ai/regression/regression_info.nut +++ b/bin/ai/regression/regression_info.nut @@ -6,7 +6,7 @@ class Regression extends AIInfo { function GetShortName() { return "REGR"; } function GetDescription() { return "This runs regression-tests on some commands. On the same map the result should always be the same."; } function GetVersion() { return 1; } - function GetAPIVersion() { return "1.9"; } + function GetAPIVersion() { return "1.10"; } function GetDate() { return "2007-03-18"; } function CreateInstance() { return "Regression"; } } diff --git a/bin/game/compat_1.10.nut b/bin/game/compat_1.10.nut new file mode 100644 index 0000000000..fe985b90d0 --- /dev/null +++ b/bin/game/compat_1.10.nut @@ -0,0 +1,8 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ diff --git a/bin/game/compat_1.9.nut b/bin/game/compat_1.9.nut index fe985b90d0..c2acf9e909 100644 --- a/bin/game/compat_1.9.nut +++ b/bin/game/compat_1.9.nut @@ -6,3 +6,5 @@ * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . */ + +GSLog.Info("1.9 API compatibility in effect."); diff --git a/os/os2/installer/make_installer.cmd b/os/os2/installer/make_installer.cmd index a15198b5f1..3addeca1ae 100644 --- a/os/os2/installer/make_installer.cmd +++ b/os/os2/installer/make_installer.cmd @@ -1,6 +1,6 @@ @echo off -set OPENTTD_VERSION=1.9.0 +set OPENTTD_VERSION=1.10.0 set OPENSFX_VERSION=0.8.0 set NOSOUND_VERSION=0.8.0 set OPENGFX_VERSION=1.2.0 diff --git a/os/rpm/openttd.spec b/os/rpm/openttd.spec index 7f17b7ea9b..09d19621fe 100644 --- a/os/rpm/openttd.spec +++ b/os/rpm/openttd.spec @@ -17,9 +17,9 @@ # Name: openttd -Version: 1.9.beta3 +Version: 1.10.beta1 Release: 0 -%define srcver 1.9.0-beta3 +%define srcver 1.10.0-beta1 Summary: An open source reimplementation of Chris Sawyer's Transport Tycoon Deluxe License: GPL-2.0 Group: Amusements/Games/Strategy/Other diff --git a/os/windows/installer/install.nsi b/os/windows/installer/install.nsi index 604e252c40..a0ca6ee6be 100644 --- a/os/windows/installer/install.nsi +++ b/os/windows/installer/install.nsi @@ -1,9 +1,9 @@ # Version numbers to update !define APPV_MAJOR 1 -!define APPV_MINOR 9 +!define APPV_MINOR 10 !define APPV_MAINT 0 -!define APPV_BUILD 2 -!define APPV_EXTRA "-beta3" +!define APPV_BUILD 0 +!define APPV_EXTRA "-beta1" !define APPNAME "OpenTTD" ; Define application name !define APPVERSION "${APPV_MAJOR}.${APPV_MINOR}.${APPV_MAINT}${APPV_EXTRA}" ; Define application version diff --git a/src/ai/ai_info.cpp b/src/ai/ai_info.cpp index 43a4345460..62ddb2344f 100644 --- a/src/ai/ai_info.cpp +++ b/src/ai/ai_info.cpp @@ -29,7 +29,7 @@ static bool CheckAPIVersion(const char *api_version) return strcmp(api_version, "0.7") == 0 || strcmp(api_version, "1.0") == 0 || strcmp(api_version, "1.1") == 0 || strcmp(api_version, "1.2") == 0 || strcmp(api_version, "1.3") == 0 || strcmp(api_version, "1.4") == 0 || strcmp(api_version, "1.5") == 0 || strcmp(api_version, "1.6") == 0 || strcmp(api_version, "1.7") == 0 || - strcmp(api_version, "1.8") == 0 || strcmp(api_version, "1.9") == 0; + strcmp(api_version, "1.8") == 0 || strcmp(api_version, "1.9") == 0 || strcmp(api_version, "1.10") == 0; } #if defined(_WIN32) diff --git a/src/game/game_info.cpp b/src/game/game_info.cpp index f8c04608b7..0aa3161740 100644 --- a/src/game/game_info.cpp +++ b/src/game/game_info.cpp @@ -26,7 +26,7 @@ static bool CheckAPIVersion(const char *api_version) { return strcmp(api_version, "1.2") == 0 || strcmp(api_version, "1.3") == 0 || strcmp(api_version, "1.4") == 0 || strcmp(api_version, "1.5") == 0 || strcmp(api_version, "1.6") == 0 || strcmp(api_version, "1.7") == 0 || - strcmp(api_version, "1.8") == 0 || strcmp(api_version, "1.9") == 0; + strcmp(api_version, "1.8") == 0 || strcmp(api_version, "1.9") == 0 || strcmp(api_version, "1.10") == 0; } #if defined(_WIN32) diff --git a/src/os/windows/ottdres.rc.in b/src/os/windows/ottdres.rc.in index ebf0cc4afb..88cf64f666 100644 --- a/src/os/windows/ottdres.rc.in +++ b/src/os/windows/ottdres.rc.in @@ -79,8 +79,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,9,0,!!ISODATE!! - PRODUCTVERSION 1,9,0,!!ISODATE!! + FILEVERSION 1,10,0,!!ISODATE!! + PRODUCTVERSION 1,10,0,!!ISODATE!! FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L diff --git a/src/rev.cpp.in b/src/rev.cpp.in index 2d58bb152d..2ba4068685 100644 --- a/src/rev.cpp.in +++ b/src/rev.cpp.in @@ -82,7 +82,7 @@ const byte _openttd_revision_tagged = !!ISTAG!!; * final release will always have a lower version number than the released * version, thus making comparisons on specific revisions easy. */ -const uint32 _openttd_newgrf_version = 1 << 28 | 9 << 24 | 0 << 20 | !!ISSTABLETAG!! << 19 | 28004; +const uint32 _openttd_newgrf_version = 1 << 28 | 10 << 24 | 0 << 20 | !!ISSTABLETAG!! << 19 | 28004; #ifdef __MORPHOS__ /** diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index ad6b76e05e..c5e7489c1a 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -266,7 +266,7 @@ enum SaveLoadVersion : uint16 { SLV_185, ///< 185 25620 Storybooks SLV_186, ///< 186 25833 Objects storage SLV_187, ///< 187 25899 Linkgraph - restricted flows - SLV_188, ///< 188 26169 FS#5831 Unify RV travel time + SLV_188, ///< 188 26169 v1.4 FS#5831 Unify RV travel time SLV_189, ///< 189 26450 Heirarchical vehicle subgroups SLV_190, ///< 190 26547 Separate order travel and wait times @@ -290,7 +290,7 @@ enum SaveLoadVersion : uint16 { SLV_GROUP_LIVERIES, ///< 205 PR#7108 Livery storage change and group liveries. SLV_SHIPS_STOP_IN_LOCKS, ///< 206 PR#7150 Ship/lock movement changes. - SLV_FIX_CARGO_MONITOR, ///< 207 PR#7175 Cargo monitor data packing fix to support 64 cargotypes. + SLV_FIX_CARGO_MONITOR, ///< 207 PR#7175 v1.9 Cargo monitor data packing fix to support 64 cargotypes. SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index 0afe4e08c4..f3ec539a40 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -15,9 +15,12 @@ * functions may still be available if you return an older API version * in GetAPIVersion() in info.nut. * + * \b 1.10.0 + * + * This version is not yet released. The following changes are not set in stone yet. + * * \b 1.9.0 * - * 1.9.0 is not yet released. The following changes are not set in stone yet. * API additions: * \li AIAirport::GetMonthlyMaintenanceCost * \li AIGroup::SetParent diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index 094449d73b..1ba2549734 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -15,9 +15,12 @@ * functions may still be available if you return an older API version * in GetAPIVersion() in info.nut. * + * \b 1.10.0 + * + * This version is not yet released. The following changes are not set in stone yet. + * * \b 1.9.0 * - * 1.9.0 is not yet released. The following changes are not set in stone yet. * API additions: * \li GSAirport::GetMonthlyMaintenanceCost * \li GSClient From 3f327116db615a902c0ddf149fd35d031955fcfa Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 18 May 2018 22:16:15 +0100 Subject: [PATCH 427/622] Change: Don't apply forbid 90 deg turn settings to ships. --- src/lang/english.txt | 4 ++-- src/pathfinder/follow_track.hpp | 2 -- src/pathfinder/npf/npf.cpp | 2 +- src/pathfinder/yapf/yapf_road.cpp | 6 +++--- src/pathfinder/yapf/yapf_ship.cpp | 22 ++++++++-------------- src/ship_cmd.cpp | 9 +-------- 6 files changed, 15 insertions(+), 30 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 6c482f053f..5602094ee5 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1200,8 +1200,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Steepness of a STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Slope steepness for road vehicles: {STRING2} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Steepness of a sloped tile for a road vehicle. Higher values make it more difficult to climb a hill -STR_CONFIG_SETTING_FORBID_90_DEG :Forbid trains and ships from making 90° turns: {STRING2} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 degree turns occur when a horizontal track is directly followed by a vertical track piece on the adjacent tile, thus making the train turn by 90 degree when traversing the tile edge instead of the usual 45 degrees for other track combinations. This also applies to the turning radius of ships +STR_CONFIG_SETTING_FORBID_90_DEG :Forbid trains from making 90° turns: {STRING2} +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 degree turns occur when a horizontal track is directly followed by a vertical track piece on the adjacent tile, thus making the train turn by 90 degree when traversing the tile edge instead of the usual 45 degrees for other track combinations. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Allow to join stations not directly adjacent: {STRING2} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Allow adding parts to a station without directly touching the existing parts. Needs Ctrl+Click while placing the new parts STR_CONFIG_SETTING_INFLATION :Inflation: {STRING2} diff --git a/src/pathfinder/follow_track.hpp b/src/pathfinder/follow_track.hpp index 9b4377248e..acdff68a73 100644 --- a/src/pathfinder/follow_track.hpp +++ b/src/pathfinder/follow_track.hpp @@ -474,8 +474,6 @@ typedef CFollowTrackT CFollowTrackWater; typedef CFollowTrackT CFollowTrackRoad; typedef CFollowTrackT CFollowTrackRail; -typedef CFollowTrackT CFollowTrackWaterNo90; -typedef CFollowTrackT CFollowTrackRoadNo90; typedef CFollowTrackT CFollowTrackRailNo90; typedef CFollowTrackT CFollowTrackFreeRail; diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp index 7d19d4ef1d..d7722ae671 100644 --- a/src/pathfinder/npf/npf.cpp +++ b/src/pathfinder/npf/npf.cpp @@ -836,7 +836,7 @@ static TrackdirBits GetDriveableTrackdirBits(TileIndex dst_tile, Trackdir src_tr trackdirbits &= TrackdirReachesTrackdirs(src_trackdir); /* Filter out trackdirs that would make 90 deg turns for trains */ - if (_settings_game.pf.forbid_90_deg && (type == TRANSPORT_RAIL || type == TRANSPORT_WATER)) trackdirbits &= ~TrackdirCrossesTrackdirs(src_trackdir); + if (_settings_game.pf.forbid_90_deg && type == TRANSPORT_RAIL) trackdirbits &= ~TrackdirCrossesTrackdirs(src_trackdir); DEBUG(npf, 6, "After filtering: (%d, %d), possible trackdirs: 0x%X", TileX(dst_tile), TileY(dst_tile), trackdirbits); diff --git a/src/pathfinder/yapf/yapf_road.cpp b/src/pathfinder/yapf/yapf_road.cpp index 0240eb9366..8da84444c7 100644 --- a/src/pathfinder/yapf/yapf_road.cpp +++ b/src/pathfinder/yapf/yapf_road.cpp @@ -501,11 +501,11 @@ Trackdir YapfRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDi { /* default is YAPF type 2 */ typedef Trackdir (*PfnChooseRoadTrack)(const RoadVehicle*, TileIndex, DiagDirection, bool &path_found); - PfnChooseRoadTrack pfnChooseRoadTrack = &CYapfRoad2::stChooseRoadTrack; // default: ExitDir, allow 90-deg + PfnChooseRoadTrack pfnChooseRoadTrack = &CYapfRoad2::stChooseRoadTrack; // default: ExitDir /* check if non-default YAPF type should be used */ if (_settings_game.pf.yapf.disable_node_optimization) { - pfnChooseRoadTrack = &CYapfRoad1::stChooseRoadTrack; // Trackdir, allow 90-deg + pfnChooseRoadTrack = &CYapfRoad1::stChooseRoadTrack; // Trackdir } Trackdir td_ret = pfnChooseRoadTrack(v, tile, enterdir, path_found); @@ -526,7 +526,7 @@ FindDepotData YapfRoadVehicleFindNearestDepot(const RoadVehicle *v, int max_dist /* check if non-default YAPF type should be used */ if (_settings_game.pf.yapf.disable_node_optimization) { - pfnFindNearestDepot = &CYapfRoadAnyDepot1::stFindNearestDepot; // Trackdir, allow 90-deg + pfnFindNearestDepot = &CYapfRoadAnyDepot1::stFindNearestDepot; // Trackdir } return pfnFindNearestDepot(v, tile, trackdir, max_distance); diff --git a/src/pathfinder/yapf/yapf_ship.cpp b/src/pathfinder/yapf/yapf_ship.cpp index c6e484feaa..5a8afc1b9b 100644 --- a/src/pathfinder/yapf/yapf_ship.cpp +++ b/src/pathfinder/yapf/yapf_ship.cpp @@ -224,25 +224,21 @@ struct CYapfShip_TypesT typedef CYapfCostShipT PfCost; // cost provider }; -/* YAPF type 1 - uses TileIndex/Trackdir as Node key, allows 90-deg turns */ +/* YAPF type 1 - uses TileIndex/Trackdir as Node key */ struct CYapfShip1 : CYapfT > {}; -/* YAPF type 2 - uses TileIndex/DiagDirection as Node key, allows 90-deg turns */ +/* YAPF type 2 - uses TileIndex/DiagDirection as Node key */ struct CYapfShip2 : CYapfT > {}; -/* YAPF type 3 - uses TileIndex/Trackdir as Node key, forbids 90-deg turns */ -struct CYapfShip3 : CYapfT > {}; /** Ship controller helper - path finder invoker */ Track YapfShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, ShipPathCache &path_cache) { /* default is YAPF type 2 */ typedef Trackdir (*PfnChooseShipTrack)(const Ship*, TileIndex, DiagDirection, TrackBits, bool &path_found, ShipPathCache &path_cache); - PfnChooseShipTrack pfnChooseShipTrack = CYapfShip2::ChooseShipTrack; // default: ExitDir, allow 90-deg + PfnChooseShipTrack pfnChooseShipTrack = CYapfShip2::ChooseShipTrack; // default: ExitDir /* check if non-default YAPF type needed */ - if (_settings_game.pf.forbid_90_deg) { - pfnChooseShipTrack = &CYapfShip3::ChooseShipTrack; // Trackdir, forbid 90-deg - } else if (_settings_game.pf.yapf.disable_node_optimization) { - pfnChooseShipTrack = &CYapfShip1::ChooseShipTrack; // Trackdir, allow 90-deg + if (_settings_game.pf.yapf.disable_node_optimization) { + pfnChooseShipTrack = &CYapfShip1::ChooseShipTrack; // Trackdir } Trackdir td_ret = pfnChooseShipTrack(v, tile, enterdir, tracks, path_found, path_cache); @@ -256,13 +252,11 @@ bool YapfShipCheckReverse(const Ship *v) TileIndex tile = v->tile; typedef bool (*PfnCheckReverseShip)(const Ship*, TileIndex, Trackdir, Trackdir); - PfnCheckReverseShip pfnCheckReverseShip = CYapfShip2::CheckShipReverse; // default: ExitDir, allow 90-deg + PfnCheckReverseShip pfnCheckReverseShip = CYapfShip2::CheckShipReverse; // default: ExitDir /* check if non-default YAPF type needed */ - if (_settings_game.pf.forbid_90_deg) { - pfnCheckReverseShip = &CYapfShip3::CheckShipReverse; // Trackdir, forbid 90-deg - } else if (_settings_game.pf.yapf.disable_node_optimization) { - pfnCheckReverseShip = &CYapfShip1::CheckShipReverse; // Trackdir, allow 90-deg + if (_settings_game.pf.yapf.disable_node_optimization) { + pfnCheckReverseShip = &CYapfShip1::CheckShipReverse; // Trackdir } bool reverse = pfnCheckReverseShip(v, tile, td, td_rev); diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index c2ce5adc95..0f3f7b74d1 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -474,14 +474,7 @@ static Track ChooseShipTrack(Ship *v, TileIndex tile, DiagDirection enterdir, Tr /* No destination or destination too far, don't invoke pathfinder. */ track = TrackBitsToTrack(v->state); if (!IsDiagonalTrack(track)) track = TrackToOppositeTrack(track); - if (!HasBit(tracks, track)) { - /* Can't continue in same direction so pick first available track. */ - if (_settings_game.pf.forbid_90_deg) { - tracks &= ~TrackCrossesTracks(TrackdirToTrack(v->GetVehicleTrackdir())); - if (tracks == TRACK_BIT_NONE) return INVALID_TRACK; - } - track = FindFirstTrack(tracks); - } + if (!HasBit(tracks, track)) track = FindFirstTrack(tracks); path_found = false; } else { /* Attempt to follow cached path. */ From 3c94bddbc221a604dab184f6f1133764bfef03e1 Mon Sep 17 00:00:00 2001 From: "Johannes E. Krause" Date: Fri, 1 Mar 2019 00:23:18 +0100 Subject: [PATCH 428/622] Change: make crash chance at short runway independent of plane crash rate setting (there's a cheat for this) --- src/aircraft_cmd.cpp | 9 ++++----- src/lang/english.txt | 4 ++-- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 7c35663726..b08cb188d3 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -1309,18 +1309,17 @@ static void CrashAirplane(Aircraft *v) */ static void MaybeCrashAirplane(Aircraft *v) { - if (_settings_game.vehicle.plane_crashes == 0) return; Station *st = Station::Get(v->targetairport); - /* FIXME -- MaybeCrashAirplane -> increase crashing chances of very modern airplanes on smaller than AT_METROPOLITAN airports */ - uint32 prob = (0x4000 << _settings_game.vehicle.plane_crashes); + uint32 prob; if ((st->airport.GetFTA()->flags & AirportFTAClass::SHORT_STRIP) && (AircraftVehInfo(v->engine_type)->subtype & AIR_FAST) && !_cheats.no_jetcrash.value) { - prob /= 20; + prob = 3276; } else { - prob /= 1500; + if (_settings_game.vehicle.plane_crashes == 0) return; + prob = (0x4000 << _settings_game.vehicle.plane_crashes) / 1500; } if (GB(Random(), 0, 22) > prob) return; diff --git a/src/lang/english.txt b/src/lang/english.txt index 5602094ee5..c131fdabd9 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1257,8 +1257,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Plane speed fac STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Set the relative speed of planes compared to other vehicle types, to reduce the amount of income of transport by aircraft STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Number of plane crashes: {STRING2} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Set the chance of an aircraft crash happening -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :None +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Set the chance of a random aircraft crash happening.{}* Large airplanes always have a risk of crashing when landing on small airports +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :None* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Reduced STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Allow drive-through road stops on town owned roads: {STRING2} From ebc3934ee642e2528768d6747ce6c09869f32b76 Mon Sep 17 00:00:00 2001 From: PeterN Date: Sun, 3 Mar 2019 22:28:55 +0000 Subject: [PATCH 429/622] Fix #7043, Fix #7274: Delete town owned bridge based on adjacent tile ownership, not nearest town. (#7284) This only affects failed town generation, as towns do not delete bridges under any other circumstances. The existing test performed badly with a large number of towns due to having to calculate the nearest town, and also by its nature assumed a bridge was built by the nearest town, leading to bridges of nearby large towns be removed incorrectly. If we gain the ability to quickly retrieve the correct town (which is _not_ the nearest town) from the bridge, this change should be reviewed. --- src/town_cmd.cpp | 44 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 84c7d44f3a..32875974c9 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -59,6 +59,31 @@ CargoTypes _town_cargoes_accepted; ///< Bitmap of all cargoes accepted by houses TownPool _town_pool("Town"); INSTANTIATE_POOL_METHODS(Town) +/** + * Check if a town 'owns' a bridge. + * Bridges to not directly have an owner, so we check the tiles adjacent to the bridge ends. + * If either adjacent tile belongs to the town then it will be assumed that the town built + * the bridge. + * @param tile Bridge tile to test + * @param t Town we are interested in + * @return true if town 'owns' a bridge. + */ +static bool TestTownOwnsBridge(TileIndex tile, const Town *t) +{ + if (!IsTileOwner(tile, OWNER_TOWN)) return false; + + TileIndex adjacent = tile + TileOffsByDiagDir(ReverseDiagDir(GetTunnelBridgeDirection(tile))); + bool town_owned = IsTileType(adjacent, MP_ROAD) && IsTileOwner(adjacent, OWNER_TOWN) && GetTownIndex(adjacent) == t->index; + + if (!town_owned) { + /* Or other adjacent road */ + TileIndex adjacent = tile + TileOffsByDiagDir(ReverseDiagDir(GetTunnelBridgeDirection(GetOtherTunnelBridgeEnd(tile)))); + town_owned = IsTileType(adjacent, MP_ROAD) && IsTileOwner(adjacent, OWNER_TOWN) && GetTownIndex(adjacent) == t->index; + } + + return town_owned; +} + Town::~Town() { free(this->name); @@ -90,7 +115,7 @@ Town::~Town() break; case MP_TUNNELBRIDGE: - assert(!IsTileOwner(tile, OWNER_TOWN) || ClosestTownFromTile(tile, UINT_MAX) != this); + assert(!TestTownOwnsBridge(tile, this)); break; default: @@ -2730,7 +2755,18 @@ CommandCost CmdDeleteTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 if (d->town == t) return CMD_ERROR; } - /* Check all tiles for town ownership. */ + /* Check all tiles for town ownership. First check for bridge tiles, as + * these do not directly have an owner so we need to check adjacent + * tiles. This won't work correctly in the same loop if the adjacent + * tile was already deleted earlier in the loop. */ + for (TileIndex tile = 0; tile < MapSize(); ++tile) { + if (IsTileType(tile, MP_TUNNELBRIDGE) && TestTownOwnsBridge(tile, t)) { + CommandCost ret = DoCommand(tile, 0, 0, flags, CMD_LANDSCAPE_CLEAR); + if (ret.Failed()) return ret; + } + } + + /* Check all remaining tiles for town ownership. */ for (TileIndex tile = 0; tile < MapSize(); ++tile) { bool try_clear = false; switch (GetTileType(tile)) { @@ -2738,10 +2774,6 @@ CommandCost CmdDeleteTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 try_clear = HasTownOwnedRoad(tile) && GetTownIndex(tile) == t->index; break; - case MP_TUNNELBRIDGE: - try_clear = IsTileOwner(tile, OWNER_TOWN) && ClosestTownFromTile(tile, UINT_MAX) == t; - break; - case MP_HOUSE: try_clear = GetTownIndex(tile) == t->index; break; From 585957b2269fac01292756a4f9f6c70426bd7b93 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 4 Mar 2019 19:45:42 +0100 Subject: [PATCH 430/622] Update: Translations from eints finnish: 39 changes by hpiirai french: 4 changes by glx hungarian: 4 changes by Brumi russian: 3 changes by Lone_Wolf korean: 20 changes by telk5093 croatian: 5 changes by VoyagerOne --- src/lang/croatian.txt | 10 +++++----- src/lang/finnish.txt | 39 +++++++++++++++++++++++++++++++++++++++ src/lang/french.txt | 8 ++++---- src/lang/hungarian.txt | 8 ++++---- src/lang/korean.txt | 25 ++++++++++++++++++++----- src/lang/russian.txt | 6 +++--- 6 files changed, 75 insertions(+), 21 deletions(-) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 4cf139dd98..b8de836fa5 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1296,8 +1296,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Kosina nagiba p STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Strmina nagiba za cestovna vozila: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Kosina nagiba polja za cestovna vozila. Veće vrijednosti čine nagib težim za penjanje -STR_CONFIG_SETTING_FORBID_90_DEG :Zabrani vlakovima i brodovima skretanja pod 90 stupnjeva: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Okreti za 90 stupnjeva se događaju kada vodoravni dio pruge odmah nastavlja okomiti dio pruge na sljedećem polju, dakle čineći zaokret vlaka od 90 stupnjeva prelaskom ruba polja umjesto uobičajenih 45 stupnjeva kod drugih kombinacija pruge. Ovo se primjenjuje i na radijus okretanja brodova +STR_CONFIG_SETTING_FORBID_90_DEG :Zabrani vlakovima skretanja pod 90 stupnjeva: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Okreti za 90 stupnjeva se događaju kada se na vodoravni dio pruge odmah nastavlja okomiti dio pruge na sljedećem polju, dakle čineći zaokret vlaka od 90 stupnjeva prelaskom ruba polja umjesto uobičajenih 45 stupnjeva kod drugih kombinacija pruge. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Dopusti spajanje postaja koje nisu izravno jedna do druge {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Dopusti dodavanje dijelova stanice bez izravnog dodira s postojećim dijelovima. Potrebno pritisnuti Ctrl+klik dok se dodaju novi dijelovi STR_CONFIG_SETTING_INFLATION :Inflacija: {STRING} @@ -1353,8 +1353,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Faktor brzine z STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Postavite relativnu brzinu zrakoplova u odnosu na ostale vrste vozila, kako bi se smanjio iznos prihoda od prijevoza zrakoplovom STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Broj padova zrakoplova: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Odredi šansu za događanje zrakoplovne nesreće -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ništa +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Odredi šansu za događanje avionske nesreće.{}* Veliki avioni uvijek riskiraju nesreću kad slijeću na male aerodrome +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ništa* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Smanjeno STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normalno STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Dopusti prolazne postaje na cestama u vlasništvu gradova: {STRING} @@ -3641,7 +3641,7 @@ STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE} STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} vozil{P o a a}{STRING} STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) -STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Vlakovi - drži lijevi klik i vuci vozilo za dodavanje/skidanjed iz vlaka, desni klik za informacije. Drži tipku Ctrl da obje funkcije rade na slijedu +STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Vlakovi - drži lijevi klik i vuci vozilo za dodavanje/skidanje iz vlaka, desni klik za informacije. Drži tipku Ctrl da obje funkcije rade na slijedu STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Vozila - desni klik na vozilo za informacije STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Brodovi - desni klik na brod za informacije STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Zrakoplov - desni klik na zrakoplov za informacije diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index a8760c1849..47e2eac50d 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -678,6 +678,7 @@ STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTB STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Raita STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Soittolista - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Tyhjennä +STR_PLAYLIST_CHANGE_SET :{BLACK}Vaihda kokoelma STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Tyhjennä nykyinen soittolista (vain Oma1 tai Oma2) STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Valitse musiikkiraita lisätäksesi sen nykyiseen soittolistaan (vain Oma1 tai Oma2). STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Poista musiikkiraita nykyseiltä soittolistalta napsauttamalla (ainoastaan Custom1 tai Custom2) @@ -991,7 +992,11 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Tavallinen STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Kaksinkertainen STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Nelinkertainen +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Kirjasinkoko +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Valitse käyttöliittymän kirjasinkoko +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normaali +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Nelinkertainen koko STR_GAME_OPTIONS_BASE_GRF :{BLACK}Perusgrafiikat STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Valitse käytettävät perusgrafiikat @@ -1260,6 +1265,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Tätä a STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Infrastruktuurin huoltokustannukset: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Mikäli käytössä, infrastruktuurista aiheutuu huoltokuluja. Kulut kasvavat suhteettomasti verkon kokoon nähden, täten ne vaikuttavat suurempiin yhtiöihin enemmän kuin pieniin +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Yhtiön väri alussa: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Valitse yhtiön aloitusväri STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Lentokentät eivät vanhene: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Mikäli käytössä, kaikki lentokenttätyypit ovat saatavilla ikuisesti niiden julkistamisen jälkeen @@ -2706,9 +2713,13 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Kuvataajuus STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}×) STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Simulaationopeus: {STRING} +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Simuloitujen peliaskelten määrä sekunnissa. STR_FRAMERATE_RATE_BLITTER :{WHITE}Grafiikan kuvataajuus: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Piirrettyjen kuvien määrä sekunnissa. STR_FRAMERATE_SPEED_FACTOR :{WHITE}Pelin nykyinen nopeuskerroin: {DECIMAL}× +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Pelin tämänhetkinen nopeus verrattuna normaalilla simulaationopeudella odotettavissa olevaan. STR_FRAMERATE_CURRENT :{WHITE}Nykyinen +STR_FRAMERATE_AVERAGE :{WHITE}Keskiarvo STR_FRAMERATE_DATA_POINTS :{BLACK}Data perustuu {COMMA} mittaukseen STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms @@ -2719,16 +2730,31 @@ STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{ STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GL_ECONOMY :{BLACK} Rahdin käsittely: +STR_FRAMERATE_GL_TRAINS :{BLACK} Juna-askeleet: STR_FRAMERATE_GL_ROADVEHS :{BLACK} Ajoneuvoaskeleet: STR_FRAMERATE_GL_SHIPS :{BLACK} Laiva-askeleet: STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Maailma-askeleet: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Yhteyskuvaajan viive: +STR_FRAMERATE_DRAWING :{BLACK}Grafiikan hahmonnus: STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Maailmanäkymät: STR_FRAMERATE_VIDEO :{WHITE}Videolähtö: +STR_FRAMERATE_SOUND :{BLACK}Äänen miksaus: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Peliskripti: +STR_FRAMERATE_AI :{BLACK} Tekoäly {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GL_TRAINS :Juna-askeleet +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Ajoneuvoaskeleet STR_FRAMETIME_CAPTION_GL_SHIPS :Laiva-askeleet STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Ilma-alusaskeleet +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Maailma-askeleet +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Maailmanäkymän hahmonnus STR_FRAMETIME_CAPTION_VIDEO :Videolähtö +STR_FRAMETIME_CAPTION_SOUND :Äänen miksaus +STR_FRAMETIME_CAPTION_ALLSCRIPTS :Peliskriptit ja tekoälyt yht. +STR_FRAMETIME_CAPTION_GAMESCRIPT :Peliskripti +STR_FRAMETIME_CAPTION_AI :Tekoäly {NUM} {STRING} ############ End of leave-in-this-order @@ -2755,6 +2781,7 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Tietoja STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} STR_SAVELOAD_FILTER_TITLE :{BLACK}Suodatinteksti: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Tiedosto on jo olemassa STR_SAVELOAD_OSKTITLE :{BLACK}Syötä nimi tallennustiedostolle @@ -2872,7 +2899,11 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versio: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Pienin yhteensopiva versio: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5-summa: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paletti: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Oletus (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Oletus (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Perinteinen (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parametrit: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Ei mitään STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Ei tietoa STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Sopivaa tiedostoa ei löydy @@ -2953,6 +2984,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Luku pseudo-spr STR_NEWGRF_ERROR_GRM_FAILED :Pyydetyt GRF-resurssit eivät ole saatavilla (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{2:STRING} poisti käytöstä NewGRF:n {1:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Virheellinen/tuntematon spriten asettelumuoto (sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Liian monta elementtiä ominaisuusarvolistassa (sprite {3:NUM}, ominaisuus {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Virhe teollisuuden tuotannon takaisinkutsussa (sprite {3:NUM}, "{1:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Varoitus! @@ -3025,6 +3058,7 @@ STR_TOWN_POPULATION :{BLACK}Maailman STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (City) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Asukasluku: {ORANGE}{COMMA}{BLACK} Taloja: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} viime kuussa: {ORANGE}{COMMA}{BLACK} enimmillään: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Kaupungin kasvuun tarvittava rahti: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} vaadittu STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} vaaditaan talvella @@ -3125,6 +3159,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Napsauta # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY}: historia STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Yleinen yhtiöhistoria +STR_STORY_BOOK_SPECTATOR :Yleinen yhtiöhistoria STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Sivu {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Siirry tietylle sivulle valitsemalla se tästä valikosta @@ -3386,6 +3421,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Ryhmät STR_GROUP_CREATE_TOOLTIP :{BLACK}Luo ryhmä STR_GROUP_DELETE_TOOLTIP :{BLACK}Poista valittu ryhmä STR_GROUP_RENAME_TOOLTIP :{BLACK}Nimeä valittu ryhmä +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Muuta valitun ryhmän väritystä STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Poista ryhmä automaattisesti korvattavien joukosta STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Poista ryhmä @@ -3429,6 +3465,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapasite STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Moottoroidut vaunut: {GOLD}+{POWER}{BLACK} Paino: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Sovitettavissa: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Kaikki rahtityypit +STR_PURCHASE_INFO_NONE :Ei mitään STR_PURCHASE_INFO_ALL_BUT :Kaikki paitsi {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Suurin vetovoima: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Toimintasäde: {GOLD}{COMMA} ruutua @@ -3828,6 +3865,7 @@ STR_ORDER_CONDITIONAL_AGE :Ikä (vuotta) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Vaatii huoltoa STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Aina STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Jäljelläoleva elinikä (vuotta) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Enimmäisluotettavuus STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Miten kulkuneuvon tietoja verrataan annettuihin arvoihin STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :on yhtä kuin @@ -4513,6 +4551,7 @@ STR_BASESOUNDS_WIN_DESCRIPTION :Alkuperäiset T STR_BASESOUNDS_NONE_DESCRIPTION :Äänipaketti, jossa ei ole ääniä. STR_BASEMUSIC_WIN_DESCRIPTION :Alkuperäinen Transport Tycoon Deluxen Windows-version musiikki. STR_BASEMUSIC_DOS_DESCRIPTION :Alkuperäinen Transport Tycoon Deluxen DOS-version musiikki. +STR_BASEMUSIC_TTO_DESCRIPTION :Alkuperäinen Transport Tycoonin (alkuperäinen / World Editor) DOS-version musiikki. STR_BASEMUSIC_NONE_DESCRIPTION :Musiikkipaketti, jossa ei ole musiikkia. ##id 0x2000 diff --git a/src/lang/french.txt b/src/lang/french.txt index 26bbdfe22c..b93f94e9e5 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1201,8 +1201,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Inclinaison d'u STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Inclinaison des pentes pour les véhicules routiers{NBSP}: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Inclinaison d'une case en pente pour un véhicule routier. Les valeurs les plus hautes rendent l’ascension plus difficile -STR_CONFIG_SETTING_FORBID_90_DEG :Interdire aux trains et aux navires les virages à 90°{NBSP}: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Les virages à 90° se produisent lorsqu'une voie horizontale est directement suivie par une voie verticale, impliquant que le train tourne de 90° en traversant la bordure de la case au lieu des 45° habituels pour les autres combinaisons de voies.{}S'applique également à la rotation des navires. +STR_CONFIG_SETTING_FORBID_90_DEG :Interdire aux trains les virages à 90°{NBSP}: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Les virages à 90° se produisent lorsqu'une voie horizontale est directement suivie par une voie verticale, impliquant que le train tourne de 90° en traversant la bordure de la case au lieu des 45° habituels pour les autres combinaisons de voies. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permettre de joindre des stations non adjacentes{NBSP}: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Autoriser l'ajout à une station de morceaux ne touchant pas directement les morceaux existants. Un Ctrl-clic est requis pour placer les nouveaux morceaux. STR_CONFIG_SETTING_INFLATION :Inflation{NBSP}: {STRING} @@ -1258,8 +1258,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Facteur de vite STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Définir la vitesse relative des aéronefs par rapport aux autres types de véhicule, pour réduire les revenus du transport aérien STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Nombre d'accidents d'avion{NBSP}: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Définir la probabilité qu'un accident d'avion se produise -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Aucun +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Définir la probabilité qu'un accident d'avion se produise.{}* Les jets auront toujours un risque de s'écraser en atterrissant sur les petits aéroports +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Aucun* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Réduit STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Autoriser les arrêts de bus sur les routes des municipalités{NBSP}: {STRING} diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 0d26674d13..820e6f1a19 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1264,8 +1264,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Egy emelkedő m STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Emelkedő meredeksége közúti járműveknek: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Egy emelkedő mező meredeksége közúti járműveknek. Nagyobb érték esetén a jármű nehezebben mássza meg az emelkedőt -STR_CONFIG_SETTING_FORBID_90_DEG :Vonatok és hajók nem tehetnek 90 fokos kanyart: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 fokos kanyarok akkor fordulnak elő, ha egy vízszintes pályaelemet egy függőleges elem követ közvetlenül a következő mezőn, ami által a vonat egy 90 fokos kanyart tesz a szokásos 45 fokos helyett. Ez ugyanígy előfordulhat hajók esetében is +STR_CONFIG_SETTING_FORBID_90_DEG :Vonatok nem tehetnek 90 fokos kanyart: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 fokos kanyarok akkor fordulnak elő, ha egy vízszintes pályaelemet egy függőleges elem követ közvetlenül a következő mezőn, ami által a vonat egy 90 fokos kanyart tesz a szokásos 45 fokos helyett. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Nem közvetlen szomszédos állomások egyesítése: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Állomásrészek hozzáadásának engedélyezése úgy, hogy az nem érinti közvetlenül a meglévő részeket. Ctrl+kattintás szükséges hozzá az új részek elhelyezése közben STR_CONFIG_SETTING_INFLATION :Infláció: {STRING} @@ -1321,8 +1321,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Repülőgép se STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Repülőgépek relatív sebességének beállítása más járműtípusokhoz viszonyítva, a légi szállítás bevételének csökkentéséhez STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Repülőgép-szerencsétlenségek száma: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Repülőgép-szerencsétlenség esélyének beállítása -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :nincs +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Repülőgép-szerencsétlenség esélyének beállítása.{}* Nagy repülőgépek esetén mindig fennáll a baleset veszélye, ha kis reptéren próbálnak leszállni! +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :nincs* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :csökkentett STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :normál STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Áthaladó megállóhelyek engedélyezése települési tulajdonú utakon: {STRING} diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 13c7c78159..7deed04c26 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -467,6 +467,7 @@ STR_TOOLBAR_SOUND_MUSIC :효과음/배 ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :최근 메시지/뉴스 기록 STR_NEWS_MENU_MESSAGE_HISTORY_MENU :과거 메시지 목록 +STR_NEWS_MENU_DELETE_ALL_MESSAGES :모든 뉴스 메시지 삭제 ############ range ends here ############ range for about menu starts @@ -989,13 +990,18 @@ STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}사용 STR_GAME_OPTIONS_RESOLUTION_OTHER :기타 STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}인터페이스 크기 -STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}인터페이스의 크기를 선택하십시오. +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}인터페이스의 크기를 선택합니다. -STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :보통 +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :기본 크기 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_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}사용하실 기본 그래픽을 선택하세요. @@ -1195,7 +1201,7 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :열차에 적 STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :경사도 설정 (자동차/전차용): {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :자동차/전차에 적용시킬 경사도를 설정합니다. 값이 높을수록 차량이 언덕을 오를 때 더 힘이 듭니다. -STR_CONFIG_SETTING_FORBID_90_DEG :열차/선박의 90도 회전을 금지함: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG :열차의 90도 회전을 금지함: {STRING} STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :─ 모양의 수평 선로와 │ 모양의 수직 선로가 바로 이어져 만날 때 90도 회전이 발생합니다. 이 설정을 켜면, 열차가 칸 가장자리를 통과할 때 90도로 회전할 수 있도록 허용합니다. 이 설정은 선박의 회전 반경에도 적용됩니다. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :역이 같은 방향으로 붙어있지 않아도 같은 이름의 역 짓기 허용: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :이미 존재하는 역을 직접 건드리지 않고도 역의 일부분을 새로 추가/확장하는 것을 허용합니다. 인접한 칸에 기존과 다른 새로운 역을 놓을 때에는 CTRL+클릭해야 합니다. @@ -1252,8 +1258,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :항공기 속 STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :항공 수송에 대한 수익을 제한하기 위해, 다른 운송 수단의 속력을 1로 보았을 때의 항공기의 속력 비율을 설정합니다. STR_CONFIG_SETTING_PLANE_SPEED_VALUE :(실제 속력) x {COMMA}분의 1 STR_CONFIG_SETTING_PLANE_CRASHES :항공기 추락 빈도수: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :항공기 충돌 사고가 일어날 수 있는지 여부를 설정합니다. -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :없음 +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :항공기 충돌 사고가 일어날 수 있는지 여부를 설정합니다.{}* 대형 항공기는 소형 공항에 착륙할 때 항상 충돌 사고를 일으킬 가능성이 있습니다. +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :없음* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :적음 STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :보통 STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :도시 소유의 도로 위에 버스 정류장 건설 허용: {STRING} @@ -2084,6 +2090,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}접속 STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}서버 암호가 걸려있습니다. 암호를 입력하세요. STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}회사 암호가 걸려있습니다. 암호를 입력하세요. +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}접속자 목록 # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :접속자 목록 @@ -2741,6 +2748,9 @@ STR_FRAMERATE_DRAWING :{BLACK}그래 STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} 세계 화면: STR_FRAMERATE_VIDEO :{BLACK}비디오 출력: STR_FRAMERATE_SOUND :{BLACK}사운드 합성: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} 총 게임 스크립트/AI: +STR_FRAMERATE_GAMESCRIPT :{BLACK} 게임 스크립트: +STR_FRAMERATE_AI :{BLACK} 인공지능 {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :게임 루프 @@ -2755,6 +2765,9 @@ STR_FRAMETIME_CAPTION_DRAWING :그래픽 렌 STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :세계 화면 렌더링 STR_FRAMETIME_CAPTION_VIDEO :비디오 출력 STR_FRAMETIME_CAPTION_SOUND :사운드 합성 +STR_FRAMETIME_CAPTION_ALLSCRIPTS :게임 스크립트/인공지능의 전체 스크립트 양입니다. +STR_FRAMETIME_CAPTION_GAMESCRIPT :게임 스크립트 +STR_FRAMETIME_CAPTION_AI :인공지능 {NUM} {STRING} ############ End of leave-in-this-order @@ -3113,6 +3126,7 @@ 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_TITLE :{BLACK}전체 목표: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- 없음 - @@ -3161,6 +3175,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}산업 # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY}의 스토리 북 STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}전체 스토리 북 +STR_STORY_BOOK_SPECTATOR :전체 스토리 북 STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :{NUM}쪽 STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}드롭 다운 목록에서 이동하고자 하는 쪽수를 선택하세요. diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 66e4d59ae7..39023c8afe 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1352,8 +1352,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Настрой STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Крутизна склона для автотранспорта: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Настройка крутизны склона для автотранспорта. Высокие значения делают подъём более тяжёлым. -STR_CONFIG_SETTING_FORBID_90_DEG :Запретить 90-градусные повороты на ж/д и море: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Поворот на 90° происходит, когда к горизонтальному участку рельсов примыкает вертикальный. В остальных случаях поезда поворачивают на 45°. Запрет поворота на 90° относится также и к кораблям. +STR_CONFIG_SETTING_FORBID_90_DEG :Запретить 90-градусные повороты на ж/д: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Поворот на 90° происходит, когда к горизонтальному участку рельсов примыкает вертикальный. В остальных случаях поезда поворачивают на 45°. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Разрешить объединение не примыкающих друг к другу станций: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Разрешить объединять несколько станций в одну, даже если они не примыкают друг к другу. Требуется нажать Ctrl+щелчок при расширении станции. STR_CONFIG_SETTING_INFLATION :Включить инфляцию: {STRING} @@ -1409,7 +1409,7 @@ STR_CONFIG_SETTING_PLANE_SPEED :Множите STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Ограничение скорости воздушных судов относительно другого транспорта для снижения сверхприбылей от использования самолётов STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Вероятность падения самолётов: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Настройка вероятности падения самолёта +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Настройка вероятности падения самолёта.{}У крупных самолётов всегда есть риск крушения при посадке в маленьких аэропортах. STR_CONFIG_SETTING_PLANE_CRASHES_NONE :отсутствует STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :сниженная STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :обычная From 7f00a420cbd2e4311a34937bc33966981b0ef5e5 Mon Sep 17 00:00:00 2001 From: PeterN Date: Mon, 4 Mar 2019 19:00:11 +0000 Subject: [PATCH 431/622] Fix: Runway too short for large aircraft message should not depend on plane crashes setting. (#7325) --- src/order_cmd.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index c2805bef34..007cfa5ec0 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -1798,7 +1798,6 @@ void CheckOrders(const Vehicle *v) } else if (v->type == VEH_AIRCRAFT && (AircraftVehInfo(v->engine_type)->subtype & AIR_FAST) && (st->airport.GetFTA()->flags & AirportFTAClass::SHORT_STRIP) && - _settings_game.vehicle.plane_crashes != 0 && !_cheats.no_jetcrash.value && message == INVALID_STRING_ID) { message = STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY; From 52572cafa62b1ab2f095f8a6d7db23f5d0fa618e Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Wed, 7 Nov 2018 19:06:39 +0100 Subject: [PATCH 432/622] Add: Option for population-linear town cargo generation Introduce a new default algorithm for town cargo generation (passengers and mail), and a game setting to choose between the new and original algorithm. The original town cargo generation algorithm has the property of the generated amount relating to the square of each building's population, meaning large towns easily produce more cargo than can realistically be transported. The problem is excessive cargo is amplified if playing with cargodist. The new algorithm introduced instead has a linear relation to the population. The result is that smaller towns will produce slightly more cargo, while the largest towns will produce about a fourth of what they would with the original algorithm. Existing savegames will use the original algorithm, while new games will default to the new algorithm. --- src/lang/english.txt | 4 +++ src/saveload/afterload.cpp | 5 ++++ src/saveload/saveload.h | 1 + src/settings_gui.cpp | 1 + src/settings_type.h | 1 + src/table/settings.ini | 15 ++++++++++ src/town_cmd.cpp | 56 ++++++++++++++++++++++++++++++-------- src/town_type.h | 8 ++++++ 8 files changed, 80 insertions(+), 11 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index c131fdabd9..78b49280e3 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1583,6 +1583,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Enabling this s STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Forbidden STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Allowed STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Allowed, custom town layout +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Town cargo generation: {STRING2} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :How much cargo is produced by houses in towns, relative to the overall population of the town.{}Quadratic growth: A town twice the size generates four times as many passengers.{}Linear growth: A town twice the size generates twice the amount of passengers. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadratic (original) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :In game placement of trees: {STRING2} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Control random appearance of trees during the game. This might affect industries which rely on tree growth, for example lumber mills diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 0b570966dc..55552413aa 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -3080,6 +3080,11 @@ bool AfterLoadGame() } } + if (IsSavegameVersionBefore(SLV_TOWN_CARGOGEN)) { + /* Ensure the original cargo generation mode is used */ + _settings_game.economy.town_cargogen_mode = TCGM_ORIGINAL; + } + /* Station acceptance is some kind of cache */ if (IsSavegameVersionBefore(SLV_127)) { Station *st; diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index c5e7489c1a..36c9687ea0 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -291,6 +291,7 @@ enum SaveLoadVersion : uint16 { SLV_GROUP_LIVERIES, ///< 205 PR#7108 Livery storage change and group liveries. SLV_SHIPS_STOP_IN_LOCKS, ///< 206 PR#7150 Ship/lock movement changes. SLV_FIX_CARGO_MONITOR, ///< 207 PR#7175 v1.9 Cargo monitor data packing fix to support 64 cargotypes. + SLV_TOWN_CARGOGEN, ///< 208 PR#6965 New algorithms for town building cargo generation. SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index c3a38b4081..4d851333c3 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -1733,6 +1733,7 @@ static SettingsContainer &GetSettingsTree() towns->Add(new SettingEntry("economy.allow_town_roads")); towns->Add(new SettingEntry("economy.allow_town_level_crossings")); towns->Add(new SettingEntry("economy.found_town")); + towns->Add(new SettingEntry("economy.town_cargogen_mode")); } SettingsPage *industries = environment->Add(new SettingsPage(STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES)); diff --git a/src/settings_type.h b/src/settings_type.h index 8f03b1dc15..6fba8ed2cd 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -493,6 +493,7 @@ struct EconomySettings { uint8 larger_towns; ///< the number of cities to build. These start off larger and grow twice as fast uint8 initial_city_size; ///< multiplier for the initial size of the cities compared to towns TownLayoutByte town_layout; ///< select town layout, @see TownLayout + TownCargoGenMode town_cargogen_mode; ///< algorithm for generating cargo from houses, @see TownCargoGenMode bool allow_town_roads; ///< towns are allowed to build roads (always allowed when generating world / in SE) TownFoundingByte found_town; ///< town founding, @see TownFounding bool station_noise_level; ///< build new airports when the town noise level is still within accepted limits diff --git a/src/table/settings.ini b/src/table/settings.ini index 5bb2c73aad..c2faa43cae 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -618,6 +618,21 @@ def = true str = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT +[SDT_VAR] +base = GameSettings +var = economy.town_cargogen_mode +type = SLE_UINT8 +from = SLV_TOWN_CARGOGEN +guiflags = SGF_MULTISTRING +def = TCGM_BITCOUNT +min = TCGM_BEGIN +max = TCGM_END - 1 +interval = 1 +str = STR_CONFIG_SETTING_TOWN_CARGOGENMODE +strhelp = STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT +strval = STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL +cat = SC_ADVANCED + ; link graph [SDT_VAR] diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 32875974c9..d7cb45bb9a 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -536,20 +536,54 @@ static void TileLoop_Town(TileIndex tile) t->supplied[cs->Index()].new_act += moved; } } else { - if (GB(r, 0, 8) < hs->population) { - uint amt = GB(r, 0, 8) / 8 + 1; + switch (_settings_game.economy.town_cargogen_mode) { + case TCGM_ORIGINAL: + /* Original (quadratic) cargo generation algorithm */ + if (GB(r, 0, 8) < hs->population) { + uint amt = GB(r, 0, 8) / 8 + 1; - if (EconomyIsInRecession()) amt = (amt + 1) >> 1; - t->supplied[CT_PASSENGERS].new_max += amt; - t->supplied[CT_PASSENGERS].new_act += MoveGoodsToStation(CT_PASSENGERS, amt, ST_TOWN, t->index, stations.GetStations()); - } + if (EconomyIsInRecession()) amt = (amt + 1) >> 1; + t->supplied[CT_PASSENGERS].new_max += amt; + t->supplied[CT_PASSENGERS].new_act += MoveGoodsToStation(CT_PASSENGERS, amt, ST_TOWN, t->index, stations.GetStations()); + } - if (GB(r, 8, 8) < hs->mail_generation) { - uint amt = GB(r, 8, 8) / 8 + 1; + if (GB(r, 8, 8) < hs->mail_generation) { + uint amt = GB(r, 8, 8) / 8 + 1; - if (EconomyIsInRecession()) amt = (amt + 1) >> 1; - t->supplied[CT_MAIL].new_max += amt; - t->supplied[CT_MAIL].new_act += MoveGoodsToStation(CT_MAIL, amt, ST_TOWN, t->index, stations.GetStations()); + if (EconomyIsInRecession()) amt = (amt + 1) >> 1; + t->supplied[CT_MAIL].new_max += amt; + t->supplied[CT_MAIL].new_act += MoveGoodsToStation(CT_MAIL, amt, ST_TOWN, t->index, stations.GetStations()); + } + break; + + case TCGM_BITCOUNT: + /* Binomial distribution per tick, by a series of coin flips */ + /* Reduce generation rate to a 1/4, using tile bits to spread out distribution. + * As tick counter is incremented by 256 between each call, we ignore the lower 8 bits. */ + if (GB(_tick_counter, 8, 2) == GB(tile, 0, 2)) { + /* Make a bitmask with up to 32 bits set, one for each potential pax */ + int genmax = (hs->population + 7) / 8; + uint32 genmask = (genmax >= 32) ? 0xFFFFFFFF : ((1 << genmax) - 1); + /* Mask random value by potential pax and count number of actual pax */ + uint amt = CountBits(r & genmask); + /* Adjust and apply */ + if (EconomyIsInRecession()) amt = (amt + 1) >> 1; + t->supplied[CT_PASSENGERS].new_max += amt; + t->supplied[CT_PASSENGERS].new_act += MoveGoodsToStation(CT_PASSENGERS, amt, ST_TOWN, t->index, stations.GetStations()); + + /* Do the same for mail, with a fresh random */ + r = Random(); + genmax = (hs->mail_generation + 7) / 8; + genmask = (genmax >= 32) ? 0xFFFFFFFF : ((1 << genmax) - 1); + amt = CountBits(r & genmask); + if (EconomyIsInRecession()) amt = (amt + 1) >> 1; + t->supplied[CT_MAIL].new_max += amt; + t->supplied[CT_MAIL].new_act += MoveGoodsToStation(CT_MAIL, amt, ST_TOWN, t->index, stations.GetStations()); + } + break; + + default: + NOT_REACHED(); } } diff --git a/src/town_type.h b/src/town_type.h index 0c93c8df85..608530106e 100644 --- a/src/town_type.h +++ b/src/town_type.h @@ -105,6 +105,14 @@ enum TownFounding { /** It needs to be 8bits, because we save and load it as such */ typedef SimpleTinyEnumT TownFoundingByte; +/** Town cargo generation modes */ +enum TownCargoGenMode : byte { + TCGM_BEGIN = 0, + TCGM_ORIGINAL = 0, ///< Original algorithm (quadratic cargo by population) + TCGM_BITCOUNT, ///< Bit-counted algorithm (normal distribution from individual house population) + TCGM_END, +}; + static const uint MAX_LENGTH_TOWN_NAME_CHARS = 32; ///< The maximum length of a town name in characters including '\0' /** Store the maximum and actually transported cargo amount for the current and the last month. */ From db49efe29afe92cac12184f5562ebc8e4a6795fa Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 5 Mar 2019 19:45:42 +0100 Subject: [PATCH 433/622] Update: Translations from eints finnish: 40 changes by hpiirai english (us): 19 changes by njn spanish (mexican): 3 changes by njn --- src/lang/english_US.txt | 23 +++++++++++++--- src/lang/finnish.txt | 58 ++++++++++++++++++++++++++++------------- src/lang/spanish_MX.txt | 6 ++--- 3 files changed, 62 insertions(+), 25 deletions(-) diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 1afb74f976..4928025ab4 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -995,7 +995,12 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Double size STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quad size +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Font size +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Select the interface font size to use +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Double size +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Quad size STR_GAME_OPTIONS_BASE_GRF :{BLACK}Base graphics set STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Select the base graphics set to use @@ -1195,8 +1200,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Steepness of a STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Slope steepness for road vehicles: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Steepness of a sloped tile for a road vehicle. Higher values make it more difficult to climb a hill -STR_CONFIG_SETTING_FORBID_90_DEG :Forbid trains and ships from making 90° turns: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 degree turns occur when a horizontal track is directly followed by a vertical track piece on the adjacent tile, thus making the train turn by 90 degree when traversing the tile edge instead of the usual 45 degrees for other track combinations. This also applies to the turning radius of ships +STR_CONFIG_SETTING_FORBID_90_DEG :Forbid trains from making 90° turns: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 degree turns occur when a horizontal track is directly followed by a vertical track piece on the adjacent tile, thus making the train turn by 90 degrees when traversing the tile edge instead of the usual 45 degrees for other track combinations. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Allow joining stations not directly adjacent: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Allow adding parts to a station without directly touching the existing parts. Needs Ctrl+Click while placing the new parts STR_CONFIG_SETTING_INFLATION :Inflation: {STRING} @@ -1252,8 +1257,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Plane speed fac STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Set the relative speed of planes compared to other vehicle types, to reduce the amount of income of transport by aircraft STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Number of plane crashes: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Set the chance of an aircraft crash happening -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :None +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Set the chance of a random aircraft crash happening.{}* Large airplanes always have a risk of crashing when landing on small airports +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :None* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Reduced STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Allow drive-through road stops on town owned roads: {STRING} @@ -1578,6 +1583,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Enabling this s STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Forbidden STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Allowed STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Allowed, custom town layout +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Town cargo generation: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :How much cargo is produced by houses in towns, relative to the overall population of the town.{}Quadratic growth: A town twice the size generates four times as many passengers.{}Linear growth: A town twice the size generates twice the amount of passengers. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadratic (original) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :In-game placement of trees: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Control random appearance of trees during the game. This might affect industries which rely on tree growth, for example lumber mills @@ -2742,6 +2751,9 @@ STR_FRAMERATE_DRAWING :{BLACK}Graphics STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} World viewports: STR_FRAMERATE_VIDEO :{BLACK}Video output: STR_FRAMERATE_SOUND :{BLACK}Sound mixing: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} GS/AI total: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Game script: +STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Game loop @@ -2756,6 +2768,9 @@ STR_FRAMETIME_CAPTION_DRAWING :Graphics render STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :World viewport rendering STR_FRAMETIME_CAPTION_VIDEO :Video output STR_FRAMETIME_CAPTION_SOUND :Sound mixing +STR_FRAMETIME_CAPTION_ALLSCRIPTS :GS/AI scripts total +STR_FRAMETIME_CAPTION_GAMESCRIPT :Game script +STR_FRAMETIME_CAPTION_AI :AI {NUM} {STRING} ############ End of leave-in-this-order diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 47e2eac50d..4db5d8fd99 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -190,6 +190,7 @@ STR_COLOUR_BROWN :Ruskea STR_COLOUR_GREY :Harmaa STR_COLOUR_WHITE :Valkoinen STR_COLOUR_RANDOM :Satunnainen +STR_COLOUR_DEFAULT :Oletus # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -465,6 +466,7 @@ STR_TOOLBAR_SOUND_MUSIC :Ääni/musiikki ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Viimeisin viesti/uutisraportti STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Viestihistoria +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Poista kaikki viestit ############ range ends here ############ range for about menu starts @@ -680,6 +682,7 @@ STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLA STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Tyhjennä STR_PLAYLIST_CHANGE_SET :{BLACK}Vaihda kokoelma STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Tyhjennä nykyinen soittolista (vain Oma1 tai Oma2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Valitse toinen asennettu kokoelma musiikkivalikoimaksesi STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Valitse musiikkiraita lisätäksesi sen nykyiseen soittolistaan (vain Oma1 tai Oma2). STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Poista musiikkiraita nykyseiltä soittolistalta napsauttamalla (ainoastaan Custom1 tai Custom2) @@ -883,10 +886,10 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC # Extra view window STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Näkymä {COMMA} -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopioi näkymään +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Päänäkymästä tähän STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopioi päänäkymän sijainti tähän näkymään -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Liitä näkymästä -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Liitä sijainti tästä näkymästä päänäkymään +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Vaihda päänäkymää +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Siirrä päänäkymää tämän näkymän sijaintiin # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Pelin valinnat @@ -996,6 +999,7 @@ STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Kirjasin STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Valitse käyttöliittymän kirjasinkoko STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normaali +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Kaksinkertainen koko STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Nelinkertainen koko STR_GAME_OPTIONS_BASE_GRF :{BLACK}Perusgrafiikat @@ -1196,8 +1200,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Mäkien jyrkkyy STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Mäkien jyrkkyys ajoneuvoille: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Mäkien jyrkkyys ajoneuvoille. Korkeammat arvot tekevät mäkien nousemisesta vaikeampaa -STR_CONFIG_SETTING_FORBID_90_DEG :90 asteen käännökset kielletty junilta ja laivoilta: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 asteen käännöksiä esiintyy kun vaakasuuntaista rataa seuraa pystysuuntainen rata viereisellä ruudulla, tämä vaatii junan kääntymään 90 astetta ruutujen reunalla normaalin 45 asteen sijasta. Tämä asetus vaikuttaa myös laivojen kääntymissäteeseen +STR_CONFIG_SETTING_FORBID_90_DEG :90 asteen käännökset kielletty junilta: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 asteen käännöksiä esiintyy kun vaakasuuntaista rataa seuraa pystysuuntainen rata viereisellä ruudulla, tämä vaatii junan kääntymään 90 astetta ruutujen reunalla normaalin 45 asteen sijasta. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Salli ei-vierekkäisten asemien yhdistäminen: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Mahdollistaa aseman osien rakentamisen vaikka ne eivät olisi kosketuksissa olemassaoleviin aseman osiin. Vaatii Ctrl-näppäimen painamisen rakennettaessa STR_CONFIG_SETTING_INFLATION :Inflaatio: {STRING} @@ -1253,8 +1257,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Lentokoneiden n STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Määritä lentokoneiden suhteellinen nopeus verrattuna toisiin kulkuneuvotyyppeihin STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Lento-onnettomuuksien määrä: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Määrittää lento-onnettomuuksien todennäköisyyden -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ei yhtään +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Määrittää lento-onnettomuuksien todennäköisyyden.{}¹ Isot lentokoneet voivat kuitenkin aina tuhoutua pienille lentokentille laskeutuessaan. +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ei yhtään¹ STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Vähennetty STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Tavallinen STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Läpiajettavat pysäkit kaupungin teille: {STRING} @@ -1579,6 +1583,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Mikäli käytö STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Kielletty STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Sallittu STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Sallittu, oma kaupungin kaava +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Kaupunkirahdin luonti: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Talojen tuottaman rahdin määrä suhteessa kunnan asukaslukuun.{}Neliöllinen kasvu: Kaksinkertainen asukasmäärä tuottaa matkustajia nelinkertaisesti.{}Lineaarinen kasvu: Kaksinkertainen asukasmäärä tuottaa matkustajia kaksinkertaisesti. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Neliöllinen (alkuperäinen) +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 @@ -2085,6 +2093,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Pura yht STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Palvelin on suojattu. Anna salasana STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Yhtiö on suojattu. Anna salasana +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Asiakaslista # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Asiakaslista @@ -2643,7 +2652,7 @@ STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Rautatie poistu STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Rautatie yhdistelmä- ja reittiopastimilla STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Rautatie yhdistelmä- ja yksisuuntaisilla opastimilla STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Rautatie reitti- ja yksisuuntaisilla opastimilla -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Rautatie veturitalli +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Veturitalli STR_LAI_ROAD_DESCRIPTION_ROAD :Tie STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Tie katuvaloilla @@ -2712,43 +2721,50 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Kuvataajuus STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}×) -STR_FRAMERATE_RATE_GAMELOOP :{WHITE}Simulaationopeus: {STRING} +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulaationopeus: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Simuloitujen peliaskelten määrä sekunnissa. -STR_FRAMERATE_RATE_BLITTER :{WHITE}Grafiikan kuvataajuus: {STRING} +STR_FRAMERATE_RATE_BLITTER :{BLACK}Grafiikan kuvataajuus: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Piirrettyjen kuvien määrä sekunnissa. -STR_FRAMERATE_SPEED_FACTOR :{WHITE}Pelin nykyinen nopeuskerroin: {DECIMAL}× +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Pelin nykyinen nopeuskerroin: {DECIMAL}× STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Pelin tämänhetkinen nopeus verrattuna normaalilla simulaationopeudella odotettavissa olevaan. STR_FRAMERATE_CURRENT :{WHITE}Nykyinen STR_FRAMERATE_AVERAGE :{WHITE}Keskiarvo STR_FRAMERATE_DATA_POINTS :{BLACK}Data perustuu {COMMA} mittaukseen -STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms -STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL}{WHITE} ms -STR_FRAMERATE_MS_BAD :{RED}{DECIMAL}{WHITE} ms -STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL}{WHITE} kuvaa/s -STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL}{WHITE} kuvaa/s -STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL}{WHITE} kuvaa/s +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} kuvaa/s +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} kuvaa/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} kuvaa/s STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{BLACK}Pelisilmukka yhteensä: STR_FRAMERATE_GL_ECONOMY :{BLACK} Rahdin käsittely: STR_FRAMERATE_GL_TRAINS :{BLACK} Juna-askeleet: STR_FRAMERATE_GL_ROADVEHS :{BLACK} Ajoneuvoaskeleet: STR_FRAMERATE_GL_SHIPS :{BLACK} Laiva-askeleet: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Ilma-alusaskeleet: STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Maailma-askeleet: STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Yhteyskuvaajan viive: STR_FRAMERATE_DRAWING :{BLACK}Grafiikan hahmonnus: STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Maailmanäkymät: -STR_FRAMERATE_VIDEO :{WHITE}Videolähtö: +STR_FRAMERATE_VIDEO :{BLACK}Videolähtö: STR_FRAMERATE_SOUND :{BLACK}Äänen miksaus: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} Peliskriptit/tekoälyt yht.: STR_FRAMERATE_GAMESCRIPT :{BLACK} Peliskripti: STR_FRAMERATE_AI :{BLACK} Tekoäly {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Pelisilmukka +STR_FRAMETIME_CAPTION_GL_ECONOMY :Rahdin käsittely STR_FRAMETIME_CAPTION_GL_TRAINS :Juna-askeleet STR_FRAMETIME_CAPTION_GL_ROADVEHS :Ajoneuvoaskeleet STR_FRAMETIME_CAPTION_GL_SHIPS :Laiva-askeleet STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Ilma-alusaskeleet STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Maailma-askeleet +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Yhteyskuvaajan viive +STR_FRAMETIME_CAPTION_DRAWING :Grafiikan hahmonnus STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Maailmanäkymän hahmonnus STR_FRAMETIME_CAPTION_VIDEO :Videolähtö STR_FRAMETIME_CAPTION_SOUND :Äänen miksaus @@ -2782,6 +2798,7 @@ STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} STR_SAVELOAD_FILTER_TITLE :{BLACK}Suodatinteksti: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Tiedosto on jo olemassa +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Haluatko varmasti korvata olemassaolevan tiedoston? STR_SAVELOAD_OSKTITLE :{BLACK}Syötä nimi tallennustiedostolle @@ -2901,6 +2918,7 @@ STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5-summ STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paletti: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Oletus (D) STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Oletus (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Perinteinen (W) STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Perinteinen (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parametrit: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PARAMETER_NONE :Ei mitään @@ -3111,6 +3129,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Lahjo v # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Tavoitteet STR_GOALS_SPECTATOR_CAPTION :{WHITE}Maailmanlaajuiset tavoitteet +STR_GOALS_SPECTATOR :Maailmanlaajuiset tavoitteet STR_GOALS_GLOBAL_TITLE :{BLACK}Maailmanlaajuiset tavoitteet: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Ei mitään - @@ -3364,6 +3383,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Keskitä STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tuotantotaso: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Teollisuuslaitos ilmoittaa pikaisesta sulkeutumisestaan! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Tarvitsee: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Tuottaa: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Tarvitsee: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 871fbc70a3..261aa155bd 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1201,8 +1201,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Grado de inclin STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Inclinación de pendientes para vehículos de carretera: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Grado de inclinación de una casilla con pendiente para un vehículo de carretera. Los valores altos hacen que sea más difícil subir las colinas -STR_CONFIG_SETTING_FORBID_90_DEG :Prohibir a trenes y barcos realizar giros de 90°: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Los giros de 90° ocurren en vías férreas perpendiculares donde el tren gira 90° al pasar de una casilla a otra, en lugar de los 45° habituales en otras combinaciones de vías. Esto también se aplica al radio de giro de los barcos +STR_CONFIG_SETTING_FORBID_90_DEG :Prohibir a trenes realizar giros de 90°: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Los giros de 90° ocurren en vías férreas perpendiculares donde el tren gira 90° al pasar de una casilla a otra, en lugar de los 45° habituales en otras combinaciones de vías. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permitir la ampliación de estaciones no adyacentes: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permitir añadir de partes a una estación sin tener que estar en contacto directo con las partes existentes. Se debe pulsar Ctrl+Clic para añadir las nuevas partes STR_CONFIG_SETTING_INFLATION :Inflación: {STRING} @@ -1259,7 +1259,7 @@ STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Establece la ve STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1/{COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Cantidad de accidentes aéreos: {STRING} STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Probabilidad de que ocurran accidentes aéreos -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ninguno +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ninguno* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Reducida STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Permitir la construcción de paradas intermedias sobre carreteras en pueblos: {STRING} From 7784d7771362f98145f17c469430e0f3e3b207b5 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Mon, 4 Mar 2019 19:21:13 +0100 Subject: [PATCH 434/622] Remove: MorphOS / AmigaOS support In 10 years there is no commit to change how MorphOS works, and we have no active maintainer for it. It is unlikely it works in its current state (but not impossible). With the arrival of SDL2 (and removal of SDL), MorphOS is no longer support. There is an SDL2 port for MorphOS, but it is not maintained by upstream SDL2, and nobody can currently test it out. If anyone wants to re-add MorphOS, please do (revert this patch, fix the problems, and create a Pull Request). If you need any help doing so, let us know! It is not that we don't like MorphOS, it is that we don't have anyone fixing the problems :( --- README.md | 8 -- config.lib | 37 ++---- configure | 1 - source.list | 11 +- src/core/geometry_type.hpp | 5 - src/dedicated.cpp | 4 +- src/fileio.cpp | 20 +-- src/fios.cpp | 21 +-- src/intro_gui.cpp | 4 - src/lang/afrikaans.txt | 2 - src/lang/arabic_egypt.txt | 2 - src/lang/basque.txt | 2 - src/lang/belarusian.txt | 2 - src/lang/brazilian_portuguese.txt | 2 - src/lang/bulgarian.txt | 2 - src/lang/catalan.txt | 2 - src/lang/croatian.txt | 2 - src/lang/czech.txt | 2 - src/lang/danish.txt | 2 - src/lang/dutch.txt | 2 - src/lang/english.txt | 2 - src/lang/english_AU.txt | 2 - src/lang/english_US.txt | 2 - src/lang/esperanto.txt | 2 - src/lang/estonian.txt | 2 - src/lang/faroese.txt | 2 - src/lang/finnish.txt | 2 - src/lang/french.txt | 2 - src/lang/gaelic.txt | 2 - src/lang/galician.txt | 2 - src/lang/german.txt | 2 - src/lang/greek.txt | 2 - src/lang/hebrew.txt | 2 - src/lang/hungarian.txt | 2 - src/lang/icelandic.txt | 2 - src/lang/indonesian.txt | 2 - src/lang/irish.txt | 2 - src/lang/italian.txt | 2 - src/lang/japanese.txt | 2 - src/lang/korean.txt | 2 - src/lang/latin.txt | 2 - src/lang/latvian.txt | 2 - src/lang/lithuanian.txt | 2 - src/lang/luxembourgish.txt | 2 - src/lang/malay.txt | 2 - src/lang/norwegian_bokmal.txt | 2 - src/lang/norwegian_nynorsk.txt | 2 - src/lang/polish.txt | 2 - src/lang/portuguese.txt | 2 - src/lang/romanian.txt | 2 - src/lang/russian.txt | 2 - src/lang/serbian.txt | 2 - src/lang/simplified_chinese.txt | 2 - src/lang/slovak.txt | 2 - src/lang/slovenian.txt | 2 - src/lang/spanish.txt | 2 - src/lang/spanish_MX.txt | 2 - src/lang/swedish.txt | 2 - src/lang/tamil.txt | 2 - src/lang/thai.txt | 2 - src/lang/traditional_chinese.txt | 2 - src/lang/turkish.txt | 2 - src/lang/ukrainian.txt | 2 - src/lang/unfinished/chuvash.txt | 2 - src/lang/unfinished/frisian.txt | 2 - src/lang/unfinished/macedonian.txt | 2 - src/lang/unfinished/persian.txt | 2 - src/lang/unfinished/urdu.txt | 2 - src/lang/vietnamese.txt | 2 - src/lang/welsh.txt | 2 - src/network/core/core.cpp | 47 ------- src/network/core/os_abstraction.h | 41 +----- src/network/core/tcp.cpp | 4 - src/network/core/tcp_http.cpp | 4 - src/network/core/tcp_listen.h | 4 - src/openttd.cpp | 8 +- src/os/unix/unix.cpp | 54 -------- src/rev.cpp.in | 7 - src/settingsgen/settingsgen.cpp | 7 - src/stdafx.h | 34 +---- src/strgen/strgen.cpp | 7 - src/thread/thread_morphos.cpp | 197 ----------------------------- src/video/sdl_v.cpp | 2 - 83 files changed, 32 insertions(+), 617 deletions(-) delete mode 100644 src/thread/thread_morphos.cpp diff --git a/README.md b/README.md index e621dc0215..bf90f51424 100644 --- a/README.md +++ b/README.md @@ -157,7 +157,6 @@ platforms are: - FreeBSD (SDL) - Linux (SDL or Allegro) - macOS (universal) (Cocoa video and sound drivers) -- MorphOS (SDL) - OpenBSD (SDL) - OS/2 (SDL) - Windows (Win32 GDI (faster) or SDL or Allegro) @@ -551,13 +550,6 @@ instead of '`./configure`'. Use '`make`', but do a '`./configure`' before the first build. -### MorphOS: - -Use '`make`'. However, for the first build one has to do a '`./configure`' -first. Note that you need the MorphOS SDK, latest libnix updates (else C++ -parts of OpenTTD will not build) and the powersdl.library SDK. Optionally libz, -libpng and freetype2 developer files. - ### OS/2: A comprehensive GNU build environment is required to build the OS/2 version. diff --git a/config.lib b/config.lib index 8d651c502b..31476cd80b 100644 --- a/config.lib +++ b/config.lib @@ -559,10 +559,10 @@ check_params() { # Check if all params have valid values - # OS only allows DETECT, UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, MORPHOS, BEOS, HAIKU, SUNOS, CYGWIN, MINGW, OS2, and DOS - if [ -z "`echo $os | egrep '^(DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|MORPHOS|BEOS|HAIKU|SUNOS|CYGWIN|MINGW|OS2|DOS)$'`" ]; then + # OS only allows DETECT, UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, BEOS, HAIKU, SUNOS, CYGWIN, MINGW, OS2, and DOS + if [ -z "`echo $os | egrep '^(DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|BEOS|HAIKU|SUNOS|CYGWIN|MINGW|OS2|DOS)$'`" ]; then log 1 "configure: error: invalid option --os=$os" - log 1 " Available options are: --os=[DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|MORPHOS|BEOS|HAIKU|SUNOS|CYGWIN|MINGW|OS2|DOS]" + log 1 " Available options are: --os=[DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|BEOS|HAIKU|SUNOS|CYGWIN|MINGW|OS2|DOS]" exit 1 fi # cpu_type can be either 32 or 64 @@ -629,7 +629,7 @@ check_params() { detect_sse_capable_architecture if [ "$enable_static" = "1" ]; then - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "MORPHOS" ] || [ "$os" = "DOS" ]; then + if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "DOS" ]; then enable_static="2" else enable_static="0" @@ -639,8 +639,8 @@ check_params() { if [ "$enable_static" != "0" ]; then log 1 "checking static... yes" - if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "OSX" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "DOS" ]; then - log 1 "WARNING: static is only known to work on Windows, DOS, MacOSX and MorphOS" + if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "OSX" ] && [ "$os" != "DOS" ]; then + log 1 "WARNING: static is only known to work on Windows, DOS, and MacOSX" log 1 "WARNING: use static at your own risk on this platform" sleep 5 @@ -939,9 +939,7 @@ check_params() { fi if [ "$enable_debug" = "0" ] && [ "$enable_profiling" = "0" ] && [ "$enable_strip" != "0" ]; then - if [ "$os" = "MORPHOS" ]; then - strip_arg="--strip-all --strip-unneeded --remove-section .comment" - elif [ "$os" = "OSX" ]; then + if [ "$os" = "OSX" ]; then strip_arg="" elif [ "$os" = "OS2" ]; then strip_arg="" @@ -1527,10 +1525,6 @@ make_cflags_and_ldflags() { if [ "$enable_debug" = "0" ]; then # No debug, add default stuff OBJS_SUBDIR="release" - if [ "$os" = "MORPHOS" ]; then - CFLAGS="-I/gg/os-include -noixemul -fstrict-aliasing -fexpensive-optimizations -mcpu=604 -fno-inline -mstring -mmultiple $CFLAGS" - LDFLAGS="$LDFLAGS -noixemul" - fi if [ "$enable_profiling" = "0" ]; then # -fomit-frame-pointer and -pg do not go well together (gcc errors they are incompatible) @@ -1616,7 +1610,7 @@ make_cflags_and_ldflags() { fi fi - if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "OSX" ] && [ "$os" != "DOS" ] && [ "$os" != "OS2" ]; then + if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "OSX" ] && [ "$os" != "DOS" ] && [ "$os" != "OS2" ]; then LIBS="$LIBS -lpthread" fi @@ -1624,11 +1618,6 @@ make_cflags_and_ldflags() { LIBS="$LIBS -lc" fi - if [ "$os" = "MORPHOS" ]; then - # -Wstrict-prototypes generates much noise because of system headers - CFLAGS="$CFLAGS -Wno-strict-prototypes" - fi - if [ "$os" = "OPENBSD" ]; then LIBS="$LIBS -pthread" fi @@ -1657,7 +1646,7 @@ make_cflags_and_ldflags() { fi # Most targets act like UNIX, just with some additions - if [ "$os" = "BEOS" ] || [ "$os" = "HAIKU" ] || [ "$os" = "OSX" ] || [ "$os" = "MORPHOS" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ] || [ "$os" = "OS2" ]; then + if [ "$os" = "BEOS" ] || [ "$os" = "HAIKU" ] || [ "$os" = "OSX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ] || [ "$os" = "OS2" ]; then CFLAGS="$CFLAGS -DUNIX" fi # And others like Windows @@ -2361,7 +2350,7 @@ detect_awk() { detect_os() { if [ "$os" = "DETECT" ]; then - # Detect UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, MORPHOS, BEOS, SUNOS, CYGWIN, MINGW, OS2, and DOS + # Detect UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, BEOS, SUNOS, CYGWIN, MINGW, OS2, and DOS # Try first via dumpmachine, then via uname os=`echo "$host" | tr '[A-Z]' '[a-z]' | $awk ' @@ -2372,7 +2361,6 @@ detect_os() { /openbsd/ { print "OPENBSD"; exit} /netbsd/ { print "NETBSD"; exit} /hp-ux/ { print "HPUX"; exit} - /morphos/ { print "MORPHOS"; exit} /beos/ { print "BEOS"; exit} /haiku/ { print "HAIKU"; exit} /sunos/ { print "SUNOS"; exit} @@ -2392,7 +2380,6 @@ detect_os() { /openbsd/ { print "OPENBSD"; exit} /netbsd/ { print "NETBSD"; exit} /hp-ux/ { print "HPUX"; exit} - /morphos/ { print "MORPHOS"; exit} /beos/ { print "BEOS"; exit} /haiku/ { print "HAIKU"; exit} /sunos/ { print "SUNOS"; exit} @@ -2406,7 +2393,7 @@ detect_os() { if [ -z "$os" ]; then log 1 "detecting OS... none detected" log 1 "I couldn't detect your OS. Please use --os=OS to force one" - log 1 "Allowed values are: UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, MORPHOS, HPUX, BEOS, HAIKU, SUNOS, CYGWIN, MINGW, OS2, and DOS" + log 1 "Allowed values are: UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, BEOS, HAIKU, SUNOS, CYGWIN, MINGW, OS2, and DOS" exit 1 fi @@ -3493,7 +3480,7 @@ showhelp() { echo " --lipo=LIPO the lipo to use (OSX ONLY) [HOST-lipo]" echo " --os=OS the OS we are compiling for [DETECT]" echo " DETECT/UNIX/OSX/FREEBSD/DRAGONFLY/OPENBSD/" - echo " NETBSD/MORPHOS/HPUX/BEOS/SUNOS/CYGWIN/" + echo " NETBSD/HPUX/BEOS/SUNOS/CYGWIN/" echo " MINGW/OS2/DOS/HAIKU" echo "" echo "Paths:" diff --git a/configure b/configure index afc1de51b4..744273a5a5 100755 --- a/configure +++ b/configure @@ -121,7 +121,6 @@ AWKCOMMAND=' "'$os'" != "HAIKU") { next; } if ($0 == "WIN32" && "'$os'" != "MINGW" && "'$os'" != "CYGWIN" && "'$os'" != "MSVC") { next; } - if ($0 == "MORPHOS" && "'$os'" != "MORPHOS") { next; } if ($0 == "MSVC" && "'$os'" != "MSVC") { next; } if ($0 == "DIRECTMUSIC" && "'$with_direct_music'" == "0") { next; } if ($0 == "LIBTIMIDITY" && "'$libtimidity'" == "" ) { next; } diff --git a/source.list b/source.list index ce6c4cf150..9c2761eaf3 100644 --- a/source.list +++ b/source.list @@ -1114,10 +1114,7 @@ music/midifile.cpp #else #if DOS #else - #if MORPHOS - #else - music/extmidi.cpp - #end + music/extmidi.cpp #end #end #if BEOS @@ -1186,11 +1183,7 @@ thread/thread.h #if OS2 thread/thread_os2.cpp #else - #if MORPHOS - thread/thread_morphos.cpp - #else - thread/thread_pthread.cpp - #end + thread/thread_pthread.cpp #end #end #else diff --git a/src/core/geometry_type.hpp b/src/core/geometry_type.hpp index 2bd8ffbade..d1f363127b 100644 --- a/src/core/geometry_type.hpp +++ b/src/core/geometry_type.hpp @@ -12,11 +12,6 @@ #ifndef GEOMETRY_TYPE_HPP #define GEOMETRY_TYPE_HPP -#if defined(__AMIGA__) - /* AmigaOS already has a Point declared */ - #define Point OTTD_Point -#endif /* __AMIGA__ */ - #if defined(__APPLE__) /* Mac OS X already has both Rect and Point declared */ #define Rect OTTD_Rect diff --git a/src/dedicated.cpp b/src/dedicated.cpp index ce383ee4a5..e80abab164 100644 --- a/src/dedicated.cpp +++ b/src/dedicated.cpp @@ -16,7 +16,7 @@ char *_log_file = NULL; ///< File to reroute output of a forked OpenTTD to FILE *_log_fd = NULL; ///< File to reroute output of a forked OpenTTD to -#if defined(UNIX) && !defined(__MORPHOS__) +#if defined(UNIX) #include @@ -71,7 +71,7 @@ void DedicatedFork() #else -/** Empty helper function call for NOT(UNIX and not MORPHOS) systems */ +/** Empty helper function call for NOT(UNIX) systems */ void DedicatedFork() {} #endif /* ENABLE_NETWORK */ diff --git a/src/fileio.cpp b/src/fileio.cpp index 0e6d86e3c7..c93d3b3dff 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -539,16 +539,6 @@ void FioCreateDirectory(const char *name) CreateDirectory(OTTD2FS(name), NULL); #elif defined(OS2) && !defined(__INNOTEK_LIBC__) mkdir(OTTD2FS(name)); -#elif defined(__MORPHOS__) || defined(__AMIGAOS__) - char buf[MAX_PATH]; - strecpy(buf, name, lastof(buf)); - - size_t len = strlen(name) - 1; - if (buf[len] == '/') { - buf[len] = '\0'; // Kill pathsep, so mkdir() will not fail - } - - mkdir(OTTD2FS(buf), 0755); #else mkdir(OTTD2FS(name), 0755); #endif @@ -1066,7 +1056,7 @@ void DetermineBasePaths(const char *exe) AppendPathSeparator(tmp, lastof(tmp)); _searchpaths[SP_PERSONAL_DIR_XDG] = stredup(tmp); #endif -#if defined(__MORPHOS__) || defined(__AMIGA__) || defined(DOS) || defined(OS2) || !defined(WITH_PERSONAL_DIR) +#if defined(DOS) || defined(OS2) || !defined(WITH_PERSONAL_DIR) _searchpaths[SP_PERSONAL_DIR] = NULL; #else #ifdef __HAIKU__ @@ -1109,13 +1099,9 @@ void DetermineBasePaths(const char *exe) _searchpaths[SP_SHARED_DIR] = NULL; #endif -#if defined(__MORPHOS__) || defined(__AMIGA__) - _searchpaths[SP_WORKING_DIR] = NULL; -#else if (getcwd(tmp, MAX_PATH) == NULL) *tmp = '\0'; AppendPathSeparator(tmp, lastof(tmp)); _searchpaths[SP_WORKING_DIR] = stredup(tmp); -#endif _do_scan_working_directory = DoScanWorkingDirectory(); @@ -1135,7 +1121,7 @@ void DetermineBasePaths(const char *exe) } } -#if defined(__MORPHOS__) || defined(__AMIGA__) || defined(DOS) || defined(OS2) +#if defined(DOS) || defined(OS2) _searchpaths[SP_INSTALLATION_DIR] = NULL; #else seprintf(tmp, lastof(tmp), "%s", GLOBAL_DATA_DIR); @@ -1239,7 +1225,7 @@ void DeterminePaths(const char *exe) } /* Make the necessary folders */ -#if !defined(__MORPHOS__) && !defined(__AMIGA__) && defined(WITH_PERSONAL_DIR) +#if defined(WITH_PERSONAL_DIR) FioCreateDirectory(config_dir); if (config_dir != _personal_dir) FioCreateDirectory(_personal_dir); #endif diff --git a/src/fios.cpp b/src/fios.cpp index 73365ddc29..aef3a8407d 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -162,7 +162,7 @@ const char *FiosBrowseTo(const FiosItem *item) break; case FIOS_TYPE_PARENT: { - /* Check for possible NULL ptr (not required for UNIXes, but AmigaOS-alikes) */ + /* Check for possible NULL ptr */ char *s = strrchr(_fios_path, PATHSEPCHAR); if (s != NULL && s != _fios_path) { s[0] = '\0'; // Remove last path separator character, so we can go up one level. @@ -170,11 +170,6 @@ const char *FiosBrowseTo(const FiosItem *item) s = strrchr(_fios_path, PATHSEPCHAR); if (s != NULL) { s[1] = '\0'; // go up a directory -#if defined(__MORPHOS__) || defined(__AMIGAOS__) - /* On MorphOS or AmigaOS paths look like: "Volume:directory/subdirectory" */ - } else if ((s = strrchr(_fios_path, ':')) != NULL) { - s[1] = '\0'; -#endif } break; } @@ -215,21 +210,7 @@ static void FiosMakeFilename(char *buf, const char *path, const char *name, cons /* Don't append the extension if it is already there */ period = strrchr(name, '.'); if (period != NULL && strcasecmp(period, ext) == 0) ext = ""; -#if defined(__MORPHOS__) || defined(__AMIGAOS__) - if (path != NULL) { - unsigned char sepchar = path[(strlen(path) - 1)]; - - if (sepchar != ':' && sepchar != '/') { - seprintf(buf, last, "%s" PATHSEP "%s%s", path, name, ext); - } else { - seprintf(buf, last, "%s%s%s", path, name, ext); - } - } else { - seprintf(buf, last, "%s%s", name, ext); - } -#else seprintf(buf, last, "%s" PATHSEP "%s%s", path, name, ext); -#endif } /** diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp index 3659b033cf..3541050ac6 100644 --- a/src/intro_gui.cpp +++ b/src/intro_gui.cpp @@ -297,10 +297,6 @@ void AskExitGame() SetDParam(0, STR_OSNAME_BEOS); #elif defined(__HAIKU__) SetDParam(0, STR_OSNAME_HAIKU); -#elif defined(__MORPHOS__) - SetDParam(0, STR_OSNAME_MORPHOS); -#elif defined(__AMIGA__) - SetDParam(0, STR_OSNAME_AMIGAOS); #elif defined(__OS2__) SetDParam(0, STR_OSNAME_OS2); #elif defined(SUNOS) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 3fd6ff7dae..01329000b2 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1773,8 +1773,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 2f658115c7..d17ed95184 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1445,8 +1445,6 @@ STR_OSNAME_UNIX :يونكس STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :بي او اس STR_OSNAME_HAIKU :هايكو -STR_OSNAME_MORPHOS :مورف او اس -STR_OSNAME_AMIGAOS :اميقا STR_OSNAME_OS2 :او اس/2 STR_OSNAME_SUNOS :صن diff --git a/src/lang/basque.txt b/src/lang/basque.txt index e5ea6a873b..5ffac53a36 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1685,8 +1685,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 5560ef785b..c5bf66d02c 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -2098,8 +2098,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 660e9caa7c..9765019215 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1789,8 +1789,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 50229f6d0a..36af6ab179 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1721,8 +1721,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index ab49e700a2..a2b4a71c3c 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1800,8 +1800,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index b8de836fa5..3087dd177a 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1895,8 +1895,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 2e622b1422..7ebbff602b 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1867,8 +1867,6 @@ STR_OSNAME_UNIX :Unixu STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/danish.txt b/src/lang/danish.txt index d10763b597..63826ba4bb 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1799,8 +1799,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 44e6ab1041..23a9eb3b51 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1799,8 +1799,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/english.txt b/src/lang/english.txt index 78b49280e3..2a54875885 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1803,8 +1803,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 4ca2bf1b59..44f4221f47 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1749,8 +1749,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 4928025ab4..5a0aeef439 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1803,8 +1803,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index c82ca05527..4d0a637fae 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1432,8 +1432,6 @@ STR_OSNAME_UNIX :Unikso STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 458c9e9e15..a85cc51ba3 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1833,8 +1833,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index b738ba9bbe..bfa6706289 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1596,8 +1596,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 4db5d8fd99..f7196613cc 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1803,8 +1803,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/french.txt b/src/lang/french.txt index b93f94e9e5..3a2a7bb3e8 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1800,8 +1800,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index f2096687f1..2f465fe0cf 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -1983,8 +1983,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/galician.txt b/src/lang/galician.txt index f301e71f1f..3bfe8b6d73 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1776,8 +1776,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/german.txt b/src/lang/german.txt index 7bdc25f3ea..379d4ef988 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1794,8 +1794,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/greek.txt b/src/lang/greek.txt index b61abc44ae..72bc7de0e7 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1896,8 +1896,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 05fb5fe1d7..7523369e25 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1798,8 +1798,6 @@ STR_OSNAME_UNIX :יוניקס STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :מערכת הפעלה בי STR_OSNAME_HAIKU :הייקו -STR_OSNAME_MORPHOS :מערכת הפעלה מורפ -STR_OSNAME_AMIGAOS :מערכת הפעלה אניגמה STR_OSNAME_OS2 :מערכת הפעלה או.אס שתיים STR_OSNAME_SUNOS :סולריס diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 820e6f1a19..93a80acc6c 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1863,8 +1863,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 44f3b40598..49705f02dd 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1637,8 +1637,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index fe1991d835..8f1f6a447c 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -1782,8 +1782,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 73a86c940b..6a2bcd9c27 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1772,8 +1772,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 2988dc1dec..a0d6c3416b 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1823,8 +1823,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index d9291ebcd2..2126302067 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -1772,8 +1772,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 7deed04c26..cdd469aa12 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1800,8 +1800,6 @@ STR_OSNAME_UNIX :{G=f}Unix STR_OSNAME_OSX :{G=f}OS{NBSP}X STR_OSNAME_BEOS :{G=f}BeOS STR_OSNAME_HAIKU :{G=f}Haiku -STR_OSNAME_MORPHOS :{G=f}MorphOS -STR_OSNAME_AMIGAOS :{G=f}AmigaOS STR_OSNAME_OS2 :{G=f}OS/2 STR_OSNAME_SUNOS :{G=f}SunOS diff --git a/src/lang/latin.txt b/src/lang/latin.txt index ea71713907..4aee90222b 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -1973,8 +1973,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 9ab4dd48cc..6b7b6a47b5 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1719,8 +1719,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index f030ba2b4f..bad08f2be5 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1991,8 +1991,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 8f8769d43d..de8e41ca1c 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1775,8 +1775,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 0a0c8eb026..040d30a0d1 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1533,8 +1533,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index ef621f40f4..d7c1dd74fa 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1802,8 +1802,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 757ffe25ee..03cd84e8c1 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1695,8 +1695,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 046f06553b..53211734b1 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2171,8 +2171,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 1622766929..16e23126fe 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1800,8 +1800,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 7d644a3a06..5eea779acd 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -1749,8 +1749,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 39023c8afe..5ebb7fd7a6 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1951,8 +1951,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 20a813b38a..b35181aeea 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -1979,8 +1979,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 27c35cdabd..a4de3f33d3 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1782,8 +1782,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 4ba647de92..73123a7cbe 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1840,8 +1840,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 4de468b497..282b537a0f 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1926,8 +1926,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 79a0dfac19..7505c90ede 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1785,8 +1785,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 261aa155bd..71a2a33752 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1800,8 +1800,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index d1e2094ee4..c89294e30b 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1793,8 +1793,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 13e4772d5c..6054d51d12 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1542,8 +1542,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 1c5d4400d3..dfa65c8bff 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1723,8 +1723,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :ระบบปฏิบัติการ Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 7ddf4fbd3e..afc0658077 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1772,8 +1772,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 74b56f6558..09684c587f 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -1798,8 +1798,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index d13654d540..857c6eaf60 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1901,8 +1901,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/unfinished/chuvash.txt b/src/lang/unfinished/chuvash.txt index 7366b99fcf..41a195c1ee 100644 --- a/src/lang/unfinished/chuvash.txt +++ b/src/lang/unfinished/chuvash.txt @@ -667,8 +667,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index 4d4101b1aa..28bd4678cd 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -1706,8 +1706,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/unfinished/macedonian.txt b/src/lang/unfinished/macedonian.txt index c080592407..71cc06d42a 100644 --- a/src/lang/unfinished/macedonian.txt +++ b/src/lang/unfinished/macedonian.txt @@ -953,8 +953,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index cf9c0098ae..427154cbca 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -1489,8 +1489,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :هایکو -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index 9f11fa11de..9a6283314b 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -1386,8 +1386,6 @@ STR_OSNAME_UNIX :یونیکس STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 6b3c288342..1aca325130 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1788,8 +1788,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 4e8e0b14fb..ebe3d3f7f9 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1775,8 +1775,6 @@ STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku -STR_OSNAME_MORPHOS :MorphOS -STR_OSNAME_AMIGAOS :AmigaOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/network/core/core.cpp b/src/network/core/core.cpp index c8db860dd5..e5f1df7214 100644 --- a/src/network/core/core.cpp +++ b/src/network/core/core.cpp @@ -21,48 +21,12 @@ #include "../../safeguards.h" -#ifdef __MORPHOS__ -/* the library base is required here */ -struct Library *SocketBase = NULL; -#endif - /** * Initializes the network core (as that is needed for some platforms * @return true if the core has been initialized, false otherwise */ bool NetworkCoreInitialize() { -#if defined(__MORPHOS__) || defined(__AMIGA__) - /* - * IMPORTANT NOTE: SocketBase needs to be initialized before we use _any_ - * network related function, else: crash. - */ - DEBUG(net, 3, "[core] loading bsd socket library"); - SocketBase = OpenLibrary("bsdsocket.library", 4); - if (SocketBase == NULL) { - DEBUG(net, 0, "[core] can't open bsdsocket.library version 4, network unavailable"); - return false; - } - -#if defined(__AMIGA__) - /* for usleep() implementation (only required for legacy AmigaOS builds) */ - TimerPort = CreateMsgPort(); - if (TimerPort != NULL) { - TimerRequest = (struct timerequest*)CreateIORequest(TimerPort, sizeof(struct timerequest); - if (TimerRequest != NULL) { - if (OpenDevice("timer.device", UNIT_MICROHZ, (struct IORequest*)TimerRequest, 0) == 0) { - TimerBase = TimerRequest->tr_node.io_Device; - if (TimerBase == NULL) { - /* free resources... */ - DEBUG(net, 0, "[core] can't initialize timer, network unavailable"); - return false; - } - } - } - } -#endif /* __AMIGA__ */ -#endif /* __MORPHOS__ / __AMIGA__ */ - /* Let's load the network in windows */ #ifdef _WIN32 { @@ -83,17 +47,6 @@ bool NetworkCoreInitialize() */ void NetworkCoreShutdown() { -#if defined(__MORPHOS__) || defined(__AMIGA__) - /* free allocated resources */ -#if defined(__AMIGA__) - if (TimerBase != NULL) CloseDevice((struct IORequest*)TimerRequest); // XXX This smells wrong - if (TimerRequest != NULL) DeleteIORequest(TimerRequest); - if (TimerPort != NULL) DeleteMsgPort(TimerPort); -#endif - - if (SocketBase != NULL) CloseLibrary(SocketBase); -#endif - #if defined(_WIN32) WSACleanup(); #endif diff --git a/src/network/core/os_abstraction.h b/src/network/core/os_abstraction.h index 32c6cffff2..187e2584c8 100644 --- a/src/network/core/os_abstraction.h +++ b/src/network/core/os_abstraction.h @@ -48,13 +48,11 @@ typedef unsigned long in_addr_t; # endif # define SOCKET int # define INVALID_SOCKET -1 -# if !defined(__MORPHOS__) && !defined(__AMIGA__) -# define ioctlsocket ioctl +# define ioctlsocket ioctl # if !defined(BEOS_NET_SERVER) # define closesocket close # endif -# define GET_LAST_ERROR() (errno) -# endif +# define GET_LAST_ERROR() (errno) /* Need this for FIONREAD on solaris */ # define BSD_COMP @@ -74,7 +72,7 @@ typedef unsigned long in_addr_t; # include # include /* According to glibc/NEWS, appeared in glibc-2.3. */ -# if !defined(__sgi__) && !defined(SUNOS) && !defined(__MORPHOS__) && !defined(__BEOS__) && !defined(__HAIKU__) && !defined(__INNOTEK_LIBC__) \ +# if !defined(__sgi__) && !defined(SUNOS) && !defined(__BEOS__) && !defined(__HAIKU__) && !defined(__INNOTEK_LIBC__) \ && !(defined(__GLIBC__) && (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 2)) && !defined(__dietlibc__) && !defined(HPUX) /* If for any reason ifaddrs.h does not exist on your system, comment out * the following two lines and an alternative way will be used to fetch @@ -164,39 +162,6 @@ typedef unsigned long in_addr_t; #endif /* OS/2 */ -/* MorphOS and Amiga stuff */ -#if defined(__MORPHOS__) || defined(__AMIGA__) -# include -# include /* required for Open/CloseLibrary() */ - /* MorphOS defines his network functions with UBYTE arrays while we - * use char arrays. This gives tons of unneeded warnings */ -# define UBYTE char -# if defined(__MORPHOS__) -# include /* FIO* defines */ -# include /* SIO* defines */ -# include -# else /* __AMIGA__ */ -# include -# endif - -/* Make the names compatible */ -# define closesocket(s) CloseSocket(s) -# define GET_LAST_ERROR() Errno() -# define ioctlsocket(s, request, status) IoctlSocket((LONG)s, (ULONG)request, (char*)status) -# define ioctl ioctlsocket - - typedef unsigned int in_addr_t; - typedef long socklen_t; - extern struct Library *SocketBase; - -# ifdef __AMIGA__ - /* for usleep() implementation */ - extern struct Device *TimerBase; - extern struct MsgPort *TimerPort; - extern struct timerequest *TimerRequest; -# endif -#endif /* __MORPHOS__ || __AMIGA__ */ - /** * Try to set the socket into non-blocking mode. * @param d The socket to set the non-blocking more for. diff --git a/src/network/core/tcp.cpp b/src/network/core/tcp.cpp index 790941fc01..a2f789c096 100644 --- a/src/network/core/tcp.cpp +++ b/src/network/core/tcp.cpp @@ -238,11 +238,7 @@ bool NetworkTCPSocketHandler::CanSendReceive() FD_SET(this->sock, &write_fd); tv.tv_sec = tv.tv_usec = 0; // don't block at all. -#if !defined(__MORPHOS__) && !defined(__AMIGA__) if (select(FD_SETSIZE, &read_fd, &write_fd, NULL, &tv) < 0) return false; -#else - if (WaitSelect(FD_SETSIZE, &read_fd, &write_fd, NULL, &tv, NULL) < 0) return false; -#endif this->writable = !!FD_ISSET(this->sock, &write_fd); return FD_ISSET(this->sock, &read_fd) != 0; diff --git a/src/network/core/tcp_http.cpp b/src/network/core/tcp_http.cpp index aec198bf55..4cd92e5fe2 100644 --- a/src/network/core/tcp_http.cpp +++ b/src/network/core/tcp_http.cpp @@ -310,11 +310,7 @@ int NetworkHTTPSocketHandler::Receive() } tv.tv_sec = tv.tv_usec = 0; // don't block at all. -#if !defined(__MORPHOS__) && !defined(__AMIGA__) int n = select(FD_SETSIZE, &read_fd, NULL, NULL, &tv); -#else - int n = WaitSelect(FD_SETSIZE, &read_fd, NULL, NULL, &tv, NULL); -#endif if (n == -1) return; for (NetworkHTTPSocketHandler **iter = _http_connections.Begin(); iter < _http_connections.End(); /* nothing */) { diff --git a/src/network/core/tcp_listen.h b/src/network/core/tcp_listen.h index e6b5893324..8cd8257b25 100644 --- a/src/network/core/tcp_listen.h +++ b/src/network/core/tcp_listen.h @@ -118,11 +118,7 @@ public: } tv.tv_sec = tv.tv_usec = 0; // don't block at all. -#if !defined(__MORPHOS__) && !defined(__AMIGA__) if (select(FD_SETSIZE, &read_fd, &write_fd, NULL, &tv) < 0) return false; -#else - if (WaitSelect(FD_SETSIZE, &read_fd, &write_fd, NULL, &tv, NULL) < 0) return false; -#endif /* accept clients.. */ for (SocketList::iterator s = sockets.Begin(); s != sockets.End(); s++) { diff --git a/src/openttd.cpp b/src/openttd.cpp index 6265b96849..c2e7455667 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -170,7 +170,7 @@ static void ShowHelp() " -P password = Password to join company\n" " -D [ip][:port] = Start dedicated server\n" " -l ip[:port] = Redirect DEBUG()\n" -#if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(_WIN32) +#if !defined(_WIN32) " -f = Fork into the background (dedicated only)\n" #endif #endif /* ENABLE_NETWORK */ @@ -497,7 +497,7 @@ struct AfterNewGRFScan : NewGRFScanCallback { } }; -#if defined(UNIX) && !defined(__MORPHOS__) +#if defined(UNIX) extern void DedicatedFork(); #endif @@ -516,7 +516,7 @@ static const OptionData _options[] = { GETOPT_SHORT_VALUE('l'), GETOPT_SHORT_VALUE('p'), GETOPT_SHORT_VALUE('P'), -#if !defined(__MORPHOS__) && !defined(__AMIGA__) && !defined(_WIN32) +#if !defined(_WIN32) GETOPT_SHORT_NOVAL('f'), #endif #endif /* ENABLE_NETWORK */ @@ -707,7 +707,7 @@ int openttd_main(int argc, char *argv[]) if (dedicated) DEBUG(net, 0, "Starting dedicated version %s", _openttd_revision); if (_dedicated_forks && !dedicated) _dedicated_forks = false; -#if defined(UNIX) && !defined(__MORPHOS__) +#if defined(UNIX) /* We must fork here, or we'll end up without some resources we need (like sockets) */ if (_dedicated_forks) DedicatedFork(); #endif diff --git a/src/os/unix/unix.cpp b/src/os/unix/unix.cpp index bea69ec931..810b062a64 100644 --- a/src/os/unix/unix.cpp +++ b/src/os/unix/unix.cpp @@ -43,21 +43,6 @@ #include #endif - -#ifdef __MORPHOS__ -#include -ULONG __stack = (1024*1024)*2; // maybe not that much is needed actually ;) - -/* The system supplied definition of SIG_IGN does not match */ -#undef SIG_IGN -#define SIG_IGN (void (*)(int))1 -#endif /* __MORPHOS__ */ - -#ifdef __AMIGA__ -#warning add stack symbol to avoid that user needs to set stack manually (tokai) -// ULONG __stack = -#endif - #if defined(__APPLE__) #if defined(WITH_SDL) /* the mac implementation needs this file included in the same file as main() */ @@ -69,13 +54,7 @@ ULONG __stack = (1024*1024)*2; // maybe not that much is needed actually ;) bool FiosIsRoot(const char *path) { -#if !defined(__MORPHOS__) && !defined(__AMIGAOS__) return path[1] == '\0'; -#else - /* On MorphOS or AmigaOS paths look like: "Volume:directory/subdirectory" */ - const char *s = strchr(path, ':'); - return s != NULL && s[1] == '\0'; -#endif } void FiosGetDrives(FileList &file_list) @@ -106,15 +85,8 @@ bool FiosIsValidFile(const char *path, const struct dirent *ent, struct stat *sb { char filename[MAX_PATH]; int res; -#if defined(__MORPHOS__) || defined(__AMIGAOS__) - /* On MorphOS or AmigaOS paths look like: "Volume:directory/subdirectory" */ - if (FiosIsRoot(path)) { - res = seprintf(filename, lastof(filename), "%s:%s", path, ent->d_name); - } else // XXX - only next line! -#else assert(path[strlen(path) - 1] == PATHSEPCHAR); if (strlen(path) > 2) assert(path[strlen(path) - 2] != PATHSEPCHAR); -#endif res = seprintf(filename, lastof(filename), "%s%s", path, ent->d_name); /* Could we fully concatenate the path and filename? */ @@ -296,36 +268,10 @@ bool GetClipboardContents(char *buffer, const char *last) /* multi os compatible sleep function */ -#ifdef __AMIGA__ -/* usleep() implementation */ -# include -# include - - extern struct Device *TimerBase = NULL; - extern struct MsgPort *TimerPort = NULL; - extern struct timerequest *TimerRequest = NULL; -#endif /* __AMIGA__ */ - void CSleep(int milliseconds) { #if defined(__BEOS__) snooze(milliseconds * 1000); - #elif defined(__AMIGA__) - { - ULONG signals; - ULONG TimerSigBit = 1 << TimerPort->mp_SigBit; - - /* send IORequest */ - TimerRequest->tr_node.io_Command = TR_ADDREQUEST; - TimerRequest->tr_time.tv_secs = (milliseconds * 1000) / 1000000; - TimerRequest->tr_time.tv_micro = (milliseconds * 1000) % 1000000; - SendIO((struct IORequest *)TimerRequest); - - if (!((signals = Wait(TimerSigBit | SIGBREAKF_CTRL_C)) & TimerSigBit) ) { - AbortIO((struct IORequest *)TimerRequest); - } - WaitIO((struct IORequest *)TimerRequest); - } #else usleep(milliseconds * 1000); #endif diff --git a/src/rev.cpp.in b/src/rev.cpp.in index 2ba4068685..d5d19373b3 100644 --- a/src/rev.cpp.in +++ b/src/rev.cpp.in @@ -83,10 +83,3 @@ const byte _openttd_revision_tagged = !!ISTAG!!; * version, thus making comparisons on specific revisions easy. */ const uint32 _openttd_newgrf_version = 1 << 28 | 10 << 24 | 0 << 20 | !!ISSTABLETAG!! << 19 | 28004; - -#ifdef __MORPHOS__ -/** - * Variable used by MorphOS to show the version. - */ -extern const char morphos_versions_tag[] = "$VER: OpenTTD !!VERSION!! (!!DATE!!) OpenTTD Team [MorphOS, PowerPC]"; -#endif diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp index 298539417e..d8d76a4d64 100644 --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -23,13 +23,6 @@ #include #endif -#ifdef __MORPHOS__ -#ifdef stderr -#undef stderr -#endif -#define stderr stdout -#endif /* __MORPHOS__ */ - #include "../safeguards.h" /** diff --git a/src/stdafx.h b/src/stdafx.h index 6e96e98fde..80130ff4df 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -29,9 +29,9 @@ /* It seems that we need to include stdint.h before anything else * We need INT64_MAX, which for most systems comes from stdint.h. However, MSVC - * does not have stdint.h and apparently neither does MorphOS. + * does not have stdint.h. * For OSX the inclusion is already done in osx_stdafx.h. */ -#if !defined(__APPLE__) && (!defined(_MSC_VER) || _MSC_VER >= 1600) && !defined(__MORPHOS__) +#if !defined(__APPLE__) && (!defined(_MSC_VER) || _MSC_VER >= 1600) #if defined(SUNOS) /* SunOS/Solaris does not have stdint.h, but inttypes.h defines everything * stdint.h defines and we need. */ @@ -104,30 +104,6 @@ #include #endif -#if defined(__MORPHOS__) - /* MorphOS defines certain Amiga defines per default, we undefine them - * here to make the rest of source less messy and more clear what is - * required for morphos and what for AmigaOS */ - #if defined(amigaos) - #undef amigaos - #endif - #if defined(__amigaos__) - #undef __amigaos__ - # endif - #if defined(__AMIGA__) - #undef __AMIGA__ - #endif - #if defined(AMIGA) - #undef AMIGA - #endif - #if defined(amiga) - #undef amiga - #endif - /* Act like we already included this file, as it somehow gives linkage problems - * (mismatch linkage of C++ and C between this include and unistd.h). */ - #define CLIB_USERGROUP_PROTOS_H -#endif /* __MORPHOS__ */ - /* Stuff for GCC */ #if defined(__GNUC__) #define NORETURN __attribute__ ((noreturn)) @@ -331,7 +307,7 @@ typedef unsigned char byte; /* This is already defined in unix, but not in QNX Neutrino (6.x)*/ -#if (!defined(UNIX) && !defined(__CYGWIN__) && !defined(__BEOS__) && !defined(__HAIKU__) && !defined(__MORPHOS__)) || defined(__QNXNTO__) +#if (!defined(UNIX) && !defined(__CYGWIN__) && !defined(__BEOS__) && !defined(__HAIKU__)) || defined(__QNXNTO__) typedef unsigned int uint; #endif @@ -457,8 +433,8 @@ void NORETURN CDECL error(const char *str, ...) WARN_FORMAT(1, 2); #define OTTD_ASSERT #endif -#if defined(MORPHOS) || defined(__NDS__) || defined(__DJGPP__) - /* MorphOS and NDS don't have C++ conformant _stricmp... */ +#if defined(__NDS__) || defined(__DJGPP__) + /* DJGPP doesn't have C++ conformant _stricmp... */ #define _stricmp stricmp #elif defined(OPENBSD) /* OpenBSD uses strcasecmp(3) */ diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp index 98e11e2eb6..80fe49a488 100644 --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -30,13 +30,6 @@ #include #endif /* _WIN32 || __WATCOMC__ */ -#ifdef __MORPHOS__ -#ifdef stderr -#undef stderr -#endif -#define stderr stdout -#endif /* __MORPHOS__ */ - #include "../table/strgen_tables.h" #include "../safeguards.h" diff --git a/src/thread/thread_morphos.cpp b/src/thread/thread_morphos.cpp deleted file mode 100644 index e368663f79..0000000000 --- a/src/thread/thread_morphos.cpp +++ /dev/null @@ -1,197 +0,0 @@ -/* $Id$ */ - -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/** @file thread_morphos.cpp MorphOS implementation of Threads. */ - -#include "../stdafx.h" -#include "thread.h" -#include "../debug.h" -#include "../core/alloc_func.hpp" -#include -#include - -#include -#include -#include - -#include -#include - -#include "../safeguards.h" - -/** - * avoid name clashes with MorphOS API functions - */ -#undef Exit -#undef Wait - - -/** - * NOTE: this code heavily depends on latest libnix updates. So make - * sure you link with new stuff which supports semaphore locking of - * the IO resources, else it will just go foobar. - */ - - -struct OTTDThreadStartupMessage { - struct Message msg; ///< standard exec.library message (MUST be the first thing in the message struct!) - OTTDThreadFunc func; ///< function the thread will execute - void *arg; ///< functions arguments for the thread function -}; - - -/** - * Default OpenTTD STDIO/ERR debug output is not very useful for this, so we - * utilize serial/ramdebug instead. - */ -void KPutStr(CONST_STRPTR format) -{ - RawDoFmt(format, NULL, (void (*)())RAWFMTFUNC_SERIAL, NULL); -} - - -/** - * MorphOS version for ThreadObject. - */ -class ThreadObject_MorphOS : public ThreadObject { -private: - APTR m_thr; ///< System thread identifier. - struct MsgPort *m_replyport; - struct OTTDThreadStartupMessage m_msg; - bool self_destruct; - -public: - /** - * Create a sub process and start it, calling proc(param). - */ - ThreadObject_MorphOS(OTTDThreadFunc proc, void *param, self_destruct) : - m_thr(0), self_destruct(self_destruct) - { - struct Task *parent; - - KPutStr("[OpenTTD] Create thread...\n"); - - parent = FindTask(NULL); - - /* Make sure main thread runs with sane priority */ - SetTaskPri(parent, 0); - - /* Things we'll pass down to the child by utilizing NP_StartupMsg */ - m_msg.func = proc; - m_msg.arg = param; - - m_replyport = CreateMsgPort(); - - if (m_replyport != NULL) { - struct Process *child; - - m_msg.msg.mn_Node.ln_Type = NT_MESSAGE; - m_msg.msg.mn_ReplyPort = m_replyport; - m_msg.msg.mn_Length = sizeof(struct OTTDThreadStartupMessage); - - child = CreateNewProcTags( - NP_CodeType, CODETYPE_PPC, - NP_Entry, ThreadObject_MorphOS::Proxy, - NP_StartupMsg, (IPTR)&m_msg, - NP_Priority, 5UL, - NP_Name, (IPTR)"OpenTTD Thread", - NP_PPCStackSize, 131072UL, - TAG_DONE); - - m_thr = (APTR) child; - - if (child != NULL) { - KPutStr("[OpenTTD] Child process launched.\n"); - } else { - KPutStr("[OpenTTD] Couldn't create child process. (constructors never fail, yeah!)\n"); - DeleteMsgPort(m_replyport); - } - } - } - - /* virtual */ ~ThreadObject_MorphOS() - { - } - - /* virtual */ bool Exit() - { - struct OTTDThreadStartupMessage *msg; - - /* You can only exit yourself */ - assert(IsCurrent()); - - KPutStr("[Child] Aborting...\n"); - - if (NewGetTaskAttrs(NULL, &msg, sizeof(struct OTTDThreadStartupMessage *), TASKINFOTYPE_STARTUPMSG, TAG_DONE) && msg != NULL) { - /* For now we terminate by throwing an error, gives much cleaner cleanup */ - throw OTTDThreadExitSignal(); - } - - return true; - } - - /* virtual */ void Join() - { - struct OTTDThreadStartupMessage *reply; - - /* You cannot join yourself */ - assert(!IsCurrent()); - - KPutStr("[OpenTTD] Join threads...\n"); - KPutStr("[OpenTTD] Wait for child to quit...\n"); - WaitPort(m_replyport); - - GetMsg(m_replyport); - DeleteMsgPort(m_replyport); - m_thr = 0; - } - - /* virtual */ bool IsCurrent() - { - return FindTask(NULL) == m_thr; - } - -private: - /** - * On thread creation, this function is called, which calls the real startup - * function. This to get back into the correct instance again. - */ - static void Proxy() - { - struct Task *child = FindTask(NULL); - struct OTTDThreadStartupMessage *msg; - - /* Make sure, we don't block the parent. */ - SetTaskPri(child, -5); - - KPutStr("[Child] Progressing...\n"); - - if (NewGetTaskAttrs(NULL, &msg, sizeof(struct OTTDThreadStartupMessage *), TASKINFOTYPE_STARTUPMSG, TAG_DONE) && msg != NULL) { - try { - msg->func(msg->arg); - } catch(OTTDThreadExitSignal e) { - KPutStr("[Child] Returned to main()\n"); - } catch(...) { - NOT_REACHED(); - } - } - - /* Quit the child, exec.library will reply the startup msg internally. */ - KPutStr("[Child] Done.\n"); - - if (self_destruct) delete this; - } -}; - -/* static */ bool ThreadObject::New(OTTDThreadFunc proc, void *param, ThreadObject **thread, const char *name) -{ - ThreadObject *to = new ThreadObject_MorphOS(proc, param, thread == NULL); - if (thread != NULL) *thread = to; - return true; -} diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index 8493ae89fc..2a636d1aa2 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -496,8 +496,6 @@ static uint ConvertSdlKeyIntoMy(SDL_keysym *sym, WChar *character) if (sym->scancode == 41) key = WKC_BACKQUOTE; #elif defined(__APPLE__) if (sym->scancode == 10) key = WKC_BACKQUOTE; -#elif defined(__MORPHOS__) - if (sym->scancode == 0) key = WKC_BACKQUOTE; // yes, that key is code '0' under MorphOS :) #elif defined(__BEOS__) if (sym->scancode == 17) key = WKC_BACKQUOTE; #elif defined(__SVR4) && defined(__sun) From ad30d04b5eddccea1c547a050b1afc225d277af4 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Mon, 4 Mar 2019 19:33:59 +0100 Subject: [PATCH 435/622] Codechange: removed some left-behind __NDS__ references --- src/core/alloc_type.hpp | 20 -------------------- src/stdafx.h | 5 +---- 2 files changed, 1 insertion(+), 24 deletions(-) diff --git a/src/core/alloc_type.hpp b/src/core/alloc_type.hpp index 9c25cc9e3f..5ea812b0e5 100644 --- a/src/core/alloc_type.hpp +++ b/src/core/alloc_type.hpp @@ -25,24 +25,8 @@ */ template struct SmallStackSafeStackAlloc { -#if !defined(__NDS__) /** Storing the data on the stack */ T data[length]; -#else - /** Storing it on the heap */ - T *data; - /** The length (in elements) of data in this allocator. */ - size_t len; - - /** Allocating the memory */ - SmallStackSafeStackAlloc() : data(MallocT(length)), len(length) {} - - /** And freeing when it goes out of scope */ - ~SmallStackSafeStackAlloc() - { - free(data); - } -#endif /** * Gets a pointer to the data stored in this wrapper. @@ -69,11 +53,7 @@ struct SmallStackSafeStackAlloc { */ inline T *EndOf() { -#if !defined(__NDS__) return endof(data); -#else - return &data[len]; -#endif } }; diff --git a/src/stdafx.h b/src/stdafx.h index 80130ff4df..ac53b6c63d 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -22,9 +22,6 @@ #define _GNU_SOURCE #define TROUBLED_INTS #include -#elif defined(__NDS__) - #include - #define TROUBLED_INTS #endif /* It seems that we need to include stdint.h before anything else @@ -433,7 +430,7 @@ void NORETURN CDECL error(const char *str, ...) WARN_FORMAT(1, 2); #define OTTD_ASSERT #endif -#if defined(__NDS__) || defined(__DJGPP__) +#if defined(__DJGPP__) /* DJGPP doesn't have C++ conformant _stricmp... */ #define _stricmp stricmp #elif defined(OPENBSD) From f58db44ff22c07af984b2d513d24524594f660a7 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Mon, 4 Mar 2019 19:46:11 +0100 Subject: [PATCH 436/622] Remove: BeOS support (deprecated by Haiku) In 10 years there is no commit to change how BeOS works, and we have no active maintainer for it. It is unlikely it works in its current state (but not impossible). With the arrival of SDL2 (and removal of SDL), BeOS is no longer support. SDL2 suggests to use Haiku instead of BeOS. --- README.md | 5 --- config.lib | 22 +++++------- configure | 3 +- projects/generate | 2 +- source.list | 2 +- src/intro_gui.cpp | 2 -- src/lang/afrikaans.txt | 1 - src/lang/arabic_egypt.txt | 1 - src/lang/basque.txt | 1 - src/lang/belarusian.txt | 1 - src/lang/brazilian_portuguese.txt | 1 - src/lang/bulgarian.txt | 1 - src/lang/catalan.txt | 1 - src/lang/croatian.txt | 1 - src/lang/czech.txt | 1 - src/lang/danish.txt | 1 - src/lang/dutch.txt | 1 - src/lang/english.txt | 1 - src/lang/english_AU.txt | 1 - src/lang/english_US.txt | 1 - src/lang/esperanto.txt | 1 - src/lang/estonian.txt | 1 - src/lang/faroese.txt | 1 - src/lang/finnish.txt | 1 - src/lang/french.txt | 1 - src/lang/gaelic.txt | 1 - src/lang/galician.txt | 1 - src/lang/german.txt | 1 - src/lang/greek.txt | 1 - src/lang/hebrew.txt | 1 - src/lang/hungarian.txt | 1 - src/lang/icelandic.txt | 1 - src/lang/indonesian.txt | 1 - src/lang/irish.txt | 1 - src/lang/italian.txt | 1 - src/lang/japanese.txt | 1 - src/lang/korean.txt | 1 - src/lang/latin.txt | 1 - src/lang/latvian.txt | 1 - src/lang/lithuanian.txt | 1 - src/lang/luxembourgish.txt | 1 - src/lang/malay.txt | 1 - src/lang/norwegian_bokmal.txt | 1 - src/lang/norwegian_nynorsk.txt | 1 - src/lang/polish.txt | 1 - src/lang/portuguese.txt | 1 - src/lang/romanian.txt | 1 - src/lang/russian.txt | 1 - src/lang/serbian.txt | 1 - src/lang/simplified_chinese.txt | 1 - src/lang/slovak.txt | 1 - src/lang/slovenian.txt | 1 - src/lang/spanish.txt | 1 - src/lang/spanish_MX.txt | 1 - src/lang/swedish.txt | 1 - src/lang/tamil.txt | 1 - src/lang/thai.txt | 1 - src/lang/traditional_chinese.txt | 1 - src/lang/turkish.txt | 1 - src/lang/ukrainian.txt | 1 - src/lang/unfinished/chuvash.txt | 1 - src/lang/unfinished/frisian.txt | 1 - src/lang/unfinished/macedonian.txt | 1 - src/lang/unfinished/persian.txt | 1 - src/lang/unfinished/urdu.txt | 1 - src/lang/vietnamese.txt | 1 - src/lang/welsh.txt | 1 - src/network/core/host.cpp | 2 +- src/network/core/os_abstraction.h | 56 ++++++++---------------------- src/network/core/udp.cpp | 2 -- src/os/unix/unix.cpp | 6 +--- src/stdafx.h | 6 ++-- src/video/dedicated_v.cpp | 4 --- src/video/sdl_v.cpp | 2 -- 74 files changed, 31 insertions(+), 144 deletions(-) diff --git a/README.md b/README.md index bf90f51424..f69566fdf0 100644 --- a/README.md +++ b/README.md @@ -152,7 +152,6 @@ OpenTTD has been ported to several platforms and operating systems. It should not be very difficult to port it to a new platform. The currently working platforms are: -- BeOS (SDL or Allegro) - DOS (Allegro) - FreeBSD (SDL) - Linux (SDL or Allegro) @@ -546,10 +545,6 @@ However, for the first build one has to do a '`./configure`' first. To make a universal binary type '`./configure --enabled-universal`' instead of '`./configure`'. -### BeOS: - -Use '`make`', but do a '`./configure`' before the first build. - ### OS/2: A comprehensive GNU build environment is required to build the OS/2 version. diff --git a/config.lib b/config.lib index 31476cd80b..6013ab34b8 100644 --- a/config.lib +++ b/config.lib @@ -559,10 +559,10 @@ check_params() { # Check if all params have valid values - # OS only allows DETECT, UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, BEOS, HAIKU, SUNOS, CYGWIN, MINGW, OS2, and DOS - if [ -z "`echo $os | egrep '^(DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|BEOS|HAIKU|SUNOS|CYGWIN|MINGW|OS2|DOS)$'`" ]; then + # OS only allows DETECT, UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HAIKU, SUNOS, CYGWIN, MINGW, OS2, and DOS + if [ -z "`echo $os | egrep '^(DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|HAIKU|SUNOS|CYGWIN|MINGW|OS2|DOS)$'`" ]; then log 1 "configure: error: invalid option --os=$os" - log 1 " Available options are: --os=[DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|BEOS|HAIKU|SUNOS|CYGWIN|MINGW|OS2|DOS]" + log 1 " Available options are: --os=[DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|HAIKU|SUNOS|CYGWIN|MINGW|OS2|DOS]" exit 1 fi # cpu_type can be either 32 or 64 @@ -1641,12 +1641,12 @@ make_cflags_and_ldflags() { fi fi - if [ "$os" = "BEOS" ] || [ "$os" = "HAIKU" ]; then + if [ "$os" = "HAIKU" ]; then LIBS="$LIBS -lmidi -lbe" fi # Most targets act like UNIX, just with some additions - if [ "$os" = "BEOS" ] || [ "$os" = "HAIKU" ] || [ "$os" = "OSX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ] || [ "$os" = "OS2" ]; then + if [ "$os" = "HAIKU" ] || [ "$os" = "OSX" ] || [ "$os" = "FREEBSD" ] || [ "$os" = "DRAGONFLY" ] || [ "$os" = "OPENBSD" ] || [ "$os" = "NETBSD" ] || [ "$os" = "HPUX" ] || [ "$os" = "SUNOS" ] || [ "$os" = "OS2" ]; then CFLAGS="$CFLAGS -DUNIX" fi # And others like Windows @@ -1861,10 +1861,6 @@ make_cflags_and_ldflags() { if [ "$enable_network" != "0" ]; then CFLAGS="$CFLAGS -DENABLE_NETWORK" - if [ "$os" = "BEOS" ]; then - LDFLAGS="$LDFLAGS -lbind -lsocket" - fi - if [ "$os" = "HAIKU" ]; then LDFLAGS="$LDFLAGS -lnetwork" fi @@ -2350,7 +2346,7 @@ detect_awk() { detect_os() { if [ "$os" = "DETECT" ]; then - # Detect UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, BEOS, SUNOS, CYGWIN, MINGW, OS2, and DOS + # Detect UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, SUNOS, CYGWIN, MINGW, OS2, and DOS # Try first via dumpmachine, then via uname os=`echo "$host" | tr '[A-Z]' '[a-z]' | $awk ' @@ -2361,7 +2357,6 @@ detect_os() { /openbsd/ { print "OPENBSD"; exit} /netbsd/ { print "NETBSD"; exit} /hp-ux/ { print "HPUX"; exit} - /beos/ { print "BEOS"; exit} /haiku/ { print "HAIKU"; exit} /sunos/ { print "SUNOS"; exit} /solaris/ { print "SUNOS"; exit} @@ -2380,7 +2375,6 @@ detect_os() { /openbsd/ { print "OPENBSD"; exit} /netbsd/ { print "NETBSD"; exit} /hp-ux/ { print "HPUX"; exit} - /beos/ { print "BEOS"; exit} /haiku/ { print "HAIKU"; exit} /sunos/ { print "SUNOS"; exit} /cygwin/ { print "CYGWIN"; exit} @@ -2393,7 +2387,7 @@ detect_os() { if [ -z "$os" ]; then log 1 "detecting OS... none detected" log 1 "I couldn't detect your OS. Please use --os=OS to force one" - log 1 "Allowed values are: UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, BEOS, HAIKU, SUNOS, CYGWIN, MINGW, OS2, and DOS" + log 1 "Allowed values are: UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, HAIKU, SUNOS, CYGWIN, MINGW, OS2, and DOS" exit 1 fi @@ -3480,7 +3474,7 @@ showhelp() { echo " --lipo=LIPO the lipo to use (OSX ONLY) [HOST-lipo]" echo " --os=OS the OS we are compiling for [DETECT]" echo " DETECT/UNIX/OSX/FREEBSD/DRAGONFLY/OPENBSD/" - echo " NETBSD/HPUX/BEOS/SUNOS/CYGWIN/" + echo " NETBSD/HPUX/SUNOS/CYGWIN/" echo " MINGW/OS2/DOS/HAIKU" echo "" echo "Paths:" diff --git a/configure b/configure index 744273a5a5..bb3efa316a 100755 --- a/configure +++ b/configure @@ -117,8 +117,7 @@ AWKCOMMAND=' if ($0 == "AI" && "'$enable_ai'" == "0") { next; } if ($0 == "COCOA" && "'$with_cocoa'" == "0") { next; } if ($0 == "DOS" && "'$os'" != "DOS") { next; } - if ($0 == "BEOS" && "'$os'" != "BEOS" && - "'$os'" != "HAIKU") { next; } + if ($0 == "HAIKU" && "'$os'" != "HAIKU") { next; } if ($0 == "WIN32" && "'$os'" != "MINGW" && "'$os'" != "CYGWIN" && "'$os'" != "MSVC") { next; } if ($0 == "MSVC" && "'$os'" != "MSVC") { next; } diff --git a/projects/generate b/projects/generate index cfedc8b32d..b7d7da26bb 100755 --- a/projects/generate +++ b/projects/generate @@ -132,7 +132,7 @@ load_main_data() { if ($0 == "DEDICATED" && "'$enable_dedicated'" != "1") { next; } if ($0 == "AI" && "'$enable_ai'" == "0") { next; } if ($0 == "COCOA" && "'$with_cocoa'" == "0") { next; } - if ($0 == "BEOS" && "'$os'" != "BEOS") { next; } + if ($0 == "HAIKU" && "'$os'" != "HAIKU") { next; } if ($0 == "WIN32" && "'$os'" != "MINGW" && "'$os'" != "CYGWIN" && "'$os'" != "MSVC" ) { next; } if ($0 == "MSVC" && "'$os'" != "MSVC") { next; } diff --git a/source.list b/source.list index 9c2761eaf3..22d647dbb5 100644 --- a/source.list +++ b/source.list @@ -1117,7 +1117,7 @@ music/midifile.cpp music/extmidi.cpp #end #end -#if BEOS +#if HAIKU music/bemidi.cpp #end #if LIBTIMIDITY diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp index 3541050ac6..a7a444cc86 100644 --- a/src/intro_gui.cpp +++ b/src/intro_gui.cpp @@ -293,8 +293,6 @@ void AskExitGame() SetDParam(0, STR_OSNAME_WINDOWS); #elif defined(__APPLE__) SetDParam(0, STR_OSNAME_OSX); -#elif defined(__BEOS__) - SetDParam(0, STR_OSNAME_BEOS); #elif defined(__HAIKU__) SetDParam(0, STR_OSNAME_HAIKU); #elif defined(__OS2__) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 01329000b2..9ac3830e6a 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1771,7 +1771,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index d17ed95184..7fe2ac1da0 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1443,7 +1443,6 @@ STR_OSNAME_WINDOWS :ويندوز STR_OSNAME_DOS :دوس STR_OSNAME_UNIX :يونكس STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :بي او اس STR_OSNAME_HAIKU :هايكو STR_OSNAME_OS2 :او اس/2 STR_OSNAME_SUNOS :صن diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 5ffac53a36..1c3b038844 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1683,7 +1683,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index c5bf66d02c..64bf4ce1da 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -2096,7 +2096,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 9765019215..0bf7addacc 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1787,7 +1787,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 36af6ab179..3ae4974b48 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1719,7 +1719,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :ДОС STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index a2b4a71c3c..7a817287b3 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1798,7 +1798,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 3087dd177a..9202b68b02 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1893,7 +1893,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 7ebbff602b..e8b8c2a292 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1865,7 +1865,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unixu STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 63826ba4bb..8739dc5136 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1797,7 +1797,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 23a9eb3b51..2babd4c038 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1797,7 +1797,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/english.txt b/src/lang/english.txt index 2a54875885..c19275c64f 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1801,7 +1801,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 44f4221f47..5deb9abd49 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1747,7 +1747,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 5a0aeef439..28137bd521 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1801,7 +1801,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 4d0a637fae..910be6be85 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1430,7 +1430,6 @@ STR_OSNAME_WINDOWS :Vindozo STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unikso STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index a85cc51ba3..f031b77def 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1831,7 +1831,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index bfa6706289..a9f862e87c 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1594,7 +1594,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index f7196613cc..8704a81821 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1801,7 +1801,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/french.txt b/src/lang/french.txt index 3a2a7bb3e8..2a8cf8dab3 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1798,7 +1798,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 2f465fe0cf..958a185c10 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -1981,7 +1981,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 3bfe8b6d73..5741587d7a 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1774,7 +1774,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/german.txt b/src/lang/german.txt index 379d4ef988..a2cf57371f 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1792,7 +1792,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 72bc7de0e7..b185997c4e 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1894,7 +1894,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 7523369e25..3f7f1457eb 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1796,7 +1796,6 @@ STR_OSNAME_WINDOWS :חלונות STR_OSNAME_DOS :דוס STR_OSNAME_UNIX :יוניקס STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :מערכת הפעלה בי STR_OSNAME_HAIKU :הייקו STR_OSNAME_OS2 :מערכת הפעלה או.אס שתיים STR_OSNAME_SUNOS :סולריס diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 93a80acc6c..5ff6f212dc 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1861,7 +1861,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 49705f02dd..466616e062 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1635,7 +1635,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 8f1f6a447c..3937bcd763 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -1780,7 +1780,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 6a2bcd9c27..3581552a4c 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1770,7 +1770,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/italian.txt b/src/lang/italian.txt index a0d6c3416b..2d931b6bbe 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1821,7 +1821,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 2126302067..eac47fcef2 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -1770,7 +1770,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/korean.txt b/src/lang/korean.txt index cdd469aa12..ffbbbad2b3 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1798,7 +1798,6 @@ STR_OSNAME_WINDOWS :{G=f}Windows STR_OSNAME_DOS :{G=f}DOS STR_OSNAME_UNIX :{G=f}Unix STR_OSNAME_OSX :{G=f}OS{NBSP}X -STR_OSNAME_BEOS :{G=f}BeOS STR_OSNAME_HAIKU :{G=f}Haiku STR_OSNAME_OS2 :{G=f}OS/2 STR_OSNAME_SUNOS :{G=f}SunOS diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 4aee90222b..ad37801bcc 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -1971,7 +1971,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 6b7b6a47b5..c96d7a433d 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1717,7 +1717,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index bad08f2be5..5edd5cb95c 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1989,7 +1989,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index de8e41ca1c..ac29b6e65a 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1773,7 +1773,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 040d30a0d1..a7b69866ba 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1531,7 +1531,6 @@ STR_OSNAME_WINDOWS :Tetingkap STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index d7c1dd74fa..e0efd9fb00 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1800,7 +1800,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 03cd84e8c1..2a71571c22 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1693,7 +1693,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 53211734b1..d28a741af6 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2169,7 +2169,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 16e23126fe..794df12be8 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1798,7 +1798,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 5eea779acd..cb24055ff8 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -1747,7 +1747,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 5ebb7fd7a6..f74b98740d 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1949,7 +1949,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index b35181aeea..9704d5c92d 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -1977,7 +1977,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index a4de3f33d3..f79922a6fd 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1780,7 +1780,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 73123a7cbe..ae47703491 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1838,7 +1838,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 282b537a0f..b9f22e74dc 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1924,7 +1924,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 7505c90ede..938fcbc7b3 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1783,7 +1783,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 71a2a33752..09d44e7166 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1798,7 +1798,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index c89294e30b..63c4b75a16 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1791,7 +1791,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 6054d51d12..ae273e4a19 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1540,7 +1540,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/thai.txt b/src/lang/thai.txt index dfa65c8bff..4a33e7d6b5 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1721,7 +1721,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :ระบบปฏิบัติการ Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index afc0658077..0148767bee 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1770,7 +1770,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 09684c587f..a5d60f7f2e 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -1796,7 +1796,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 857c6eaf60..2e0a9b78f0 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1899,7 +1899,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/unfinished/chuvash.txt b/src/lang/unfinished/chuvash.txt index 41a195c1ee..8d93f19360 100644 --- a/src/lang/unfinished/chuvash.txt +++ b/src/lang/unfinished/chuvash.txt @@ -665,7 +665,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index 28bd4678cd..2c399a5208 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -1704,7 +1704,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/unfinished/macedonian.txt b/src/lang/unfinished/macedonian.txt index 71cc06d42a..b25ee84b06 100644 --- a/src/lang/unfinished/macedonian.txt +++ b/src/lang/unfinished/macedonian.txt @@ -952,7 +952,6 @@ STR_QUIT_NO :{BLACK}Не STR_OSNAME_WINDOWS :Windows STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index 427154cbca..7818d765bf 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -1487,7 +1487,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :هایکو STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index 9a6283314b..988a6c7862 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -1384,7 +1384,6 @@ STR_OSNAME_WINDOWS :ونڈوز STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :یونیکس STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 1aca325130..1de743a340 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1786,7 +1786,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index ebe3d3f7f9..d991c3db33 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1773,7 +1773,6 @@ STR_OSNAME_WINDOWS :Windows STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X -STR_OSNAME_BEOS :BeOS STR_OSNAME_HAIKU :Haiku STR_OSNAME_OS2 :OS/2 STR_OSNAME_SUNOS :SunOS diff --git a/src/network/core/host.cpp b/src/network/core/host.cpp index 216839032b..c2faf4c8b5 100644 --- a/src/network/core/host.cpp +++ b/src/network/core/host.cpp @@ -24,7 +24,7 @@ */ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast); -#if defined(BEOS_NET_SERVER) || defined(__HAIKU__) /* doesn't have neither getifaddrs or net/if.h */ +#if defined(__HAIKU__) /* doesn't have neither getifaddrs or net/if.h */ /* Based on Andrew Bachmann's netstat+.c. Big thanks to him! */ extern "C" int _netstat(int fd, char **output, int verbose); diff --git a/src/network/core/os_abstraction.h b/src/network/core/os_abstraction.h index 187e2584c8..084f763c2b 100644 --- a/src/network/core/os_abstraction.h +++ b/src/network/core/os_abstraction.h @@ -49,9 +49,7 @@ typedef unsigned long in_addr_t; # define SOCKET int # define INVALID_SOCKET -1 # define ioctlsocket ioctl -# if !defined(BEOS_NET_SERVER) -# define closesocket close -# endif +# define closesocket close # define GET_LAST_ERROR() (errno) /* Need this for FIONREAD on solaris */ # define BSD_COMP @@ -59,37 +57,25 @@ typedef unsigned long in_addr_t; /* Includes needed for UNIX-like systems */ # include # include -# if defined(__BEOS__) && defined(BEOS_NET_SERVER) -# include -# include /* snooze() */ -# include - typedef unsigned long in_addr_t; -# define INADDR_NONE INADDR_BROADCAST -# else -# include -# include -# include -# include -# include +# include +# include +# include +# include +# include /* According to glibc/NEWS, appeared in glibc-2.3. */ -# if !defined(__sgi__) && !defined(SUNOS) && !defined(__BEOS__) && !defined(__HAIKU__) && !defined(__INNOTEK_LIBC__) \ - && !(defined(__GLIBC__) && (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 2)) && !defined(__dietlibc__) && !defined(HPUX) +# if !defined(__sgi__) && !defined(SUNOS) && !defined(__HAIKU__) && !defined(__INNOTEK_LIBC__) \ + && !(defined(__GLIBC__) && (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 2)) && !defined(__dietlibc__) && !defined(HPUX) /* If for any reason ifaddrs.h does not exist on your system, comment out * the following two lines and an alternative way will be used to fetch * the list of IPs from the system. */ -# include -# define HAVE_GETIFADDRS -# endif -# if !defined(INADDR_NONE) -# define INADDR_NONE 0xffffffff -# endif -# if defined(__BEOS__) && !defined(BEOS_NET_SERVER) - /* needed on Zeta */ -# include -# endif -# endif /* BEOS_NET_SERVER */ +# include +# define HAVE_GETIFADDRS +# endif +# if !defined(INADDR_NONE) +# define INADDR_NONE 0xffffffff +# endif -# if !defined(__BEOS__) && defined(__GLIBC__) && (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 1) +# if defined(__GLIBC__) && (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 1) typedef uint32_t in_addr_t; # endif @@ -98,10 +84,6 @@ typedef unsigned long in_addr_t; # include #endif /* UNIX */ -#ifdef __BEOS__ - typedef int socklen_t; -#endif - #ifdef __HAIKU__ #define IPV6_V6ONLY 27 #endif @@ -174,11 +156,7 @@ static inline bool SetNonBlocking(SOCKET d) #else int nonblocking = 1; #endif -#if (defined(__BEOS__) && defined(BEOS_NET_SERVER)) - return setsockopt(d, SOL_SOCKET, SO_NONBLOCK, &nonblocking, sizeof(nonblocking)) == 0; -#else return ioctlsocket(d, FIONBIO, &nonblocking) == 0; -#endif } /** @@ -189,13 +167,9 @@ static inline bool SetNonBlocking(SOCKET d) static inline bool SetNoDelay(SOCKET d) { /* XXX should this be done at all? */ -#if !defined(BEOS_NET_SERVER) /* not implemented on BeOS net_server */ int b = 1; /* The (const char*) cast is needed for windows */ return setsockopt(d, IPPROTO_TCP, TCP_NODELAY, (const char*)&b, sizeof(b)) == 0; -#else - return true; -#endif } /* Make sure these structures have the size we expect them to be */ diff --git a/src/network/core/udp.cpp b/src/network/core/udp.cpp index d2dc15d427..1f34d15b0c 100644 --- a/src/network/core/udp.cpp +++ b/src/network/core/udp.cpp @@ -94,7 +94,6 @@ void NetworkUDPSocketHandler::SendPacket(Packet *p, NetworkAddress *recv, bool a p->PrepareToSend(); -#ifndef BEOS_NET_SERVER /* will work around this, some day; maybe. */ if (broadcast) { /* Enable broadcast */ unsigned long val = 1; @@ -102,7 +101,6 @@ void NetworkUDPSocketHandler::SendPacket(Packet *p, NetworkAddress *recv, bool a DEBUG(net, 1, "[udp] setting broadcast failed with: %i", GET_LAST_ERROR()); } } -#endif /* Send the buffer */ int res = sendto(s->second, (const char*)p->buffer, p->size, 0, (const struct sockaddr *)send.GetAddress(), send.GetAddressLength()); diff --git a/src/os/unix/unix.cpp b/src/os/unix/unix.cpp index 810b062a64..2f982dea06 100644 --- a/src/os/unix/unix.cpp +++ b/src/os/unix/unix.cpp @@ -270,11 +270,7 @@ bool GetClipboardContents(char *buffer, const char *last) void CSleep(int milliseconds) { - #if defined(__BEOS__) - snooze(milliseconds * 1000); - #else - usleep(milliseconds * 1000); - #endif + usleep(milliseconds * 1000); } diff --git a/src/stdafx.h b/src/stdafx.h index ac53b6c63d..1f1181b15e 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -16,7 +16,7 @@ #include "os/macosx/osx_stdafx.h" #endif /* __APPLE__ */ -#if defined(__BEOS__) || defined(__HAIKU__) +#if defined(__HAIKU__) #include #include #define _GNU_SOURCE @@ -304,12 +304,12 @@ typedef unsigned char byte; /* This is already defined in unix, but not in QNX Neutrino (6.x)*/ -#if (!defined(UNIX) && !defined(__CYGWIN__) && !defined(__BEOS__) && !defined(__HAIKU__)) || defined(__QNXNTO__) +#if (!defined(UNIX) && !defined(__CYGWIN__) && !defined(__HAIKU__)) || defined(__QNXNTO__) typedef unsigned int uint; #endif #if defined(TROUBLED_INTS) - /* NDS'/BeOS'/Haiku's types for uint32/int32 are based on longs, which causes + /* Haiku's types for uint32/int32 are based on longs, which causes * trouble all over the place in OpenTTD. */ #define uint32 uint32_ugly_hack #define int32 int32_ugly_hack diff --git a/src/video/dedicated_v.cpp b/src/video/dedicated_v.cpp index 47fa64231a..3b053c7d64 100644 --- a/src/video/dedicated_v.cpp +++ b/src/video/dedicated_v.cpp @@ -26,10 +26,6 @@ #include "../saveload/saveload.h" #include "dedicated_v.h" -#ifdef BEOS_NET_SERVER -#include -#endif - #ifdef __OS2__ # include /* gettimeofday */ # include diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index 2a636d1aa2..54502dfae7 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -496,8 +496,6 @@ static uint ConvertSdlKeyIntoMy(SDL_keysym *sym, WChar *character) if (sym->scancode == 41) key = WKC_BACKQUOTE; #elif defined(__APPLE__) if (sym->scancode == 10) key = WKC_BACKQUOTE; -#elif defined(__BEOS__) - if (sym->scancode == 17) key = WKC_BACKQUOTE; #elif defined(__SVR4) && defined(__sun) if (sym->scancode == 60) key = WKC_BACKQUOTE; if (sym->scancode == 49) key = WKC_BACKSPACE; From aa350528dfbfc8175f140202252cfdc6dbf46aa8 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Mon, 4 Mar 2019 19:49:39 +0100 Subject: [PATCH 437/622] Remove: libtimidity support (NOT timidity support) libtimidity was introduced with the support for PSP. PSP has been dropped almost a year ago, but this music driver was not. This corrects that oversight. timidity (via extmidi) still works fine. This purely removes the libtimidity support, which was only really available for PSP. --- config.lib | 24 ------- configure | 1 - projects/generate | 1 - source.list | 4 -- src/music/libtimidity.cpp | 128 -------------------------------------- src/music/libtimidity.h | 41 ------------ 6 files changed, 199 deletions(-) delete mode 100644 src/music/libtimidity.cpp delete mode 100644 src/music/libtimidity.h diff --git a/config.lib b/config.lib index 6013ab34b8..fa27a8ec57 100644 --- a/config.lib +++ b/config.lib @@ -82,7 +82,6 @@ set_default() { with_iconv="1" with_midi="" with_midi_arg="" - with_libtimidity="1" with_fluidsynth="1" with_freetype="1" with_fontconfig="1" @@ -160,7 +159,6 @@ set_default() { with_iconv with_midi with_midi_arg - with_libtimidity with_fluidsynth with_freetype with_fontconfig @@ -370,10 +368,6 @@ detect_params() { --without-libpng) with_png="0";; --with-libpng=*) with_png="$optarg";; - --with-libtimidity) with_libtimidity="2";; - --without-libtimidity) with_libtimidity="0";; - --with-libtimidity=*) with_libtimidity="$optarg";; - --with-fluidsynth) with_fluidsynth="2";; --without-fluidsynth) with_fluidsynth="0";; --with-fluidsynth=*) with_fluidsynth="$optarg";; @@ -895,7 +889,6 @@ check_params() { detect_fontconfig detect_icu_layout detect_icu_sort - detect_libtimidity detect_fluidsynth if [ "$with_direct_music" != "0" ]; then @@ -1812,17 +1805,6 @@ make_cflags_and_ldflags() { CFLAGS="$CFLAGS -DWITH_XAUDIO2" fi - if [ -n "$libtimidity_config" ]; then - CFLAGS="$CFLAGS -DLIBTIMIDITY" - CFLAGS="$CFLAGS `$libtimidity_config --cflags | tr '\n\r' ' '`" - - if [ "$enable_static" != "0" ]; then - LIBS="$LIBS `$libtimidity_config --libs --static | tr '\n\r' ' '`" - else - LIBS="$LIBS `$libtimidity_config --libs | tr '\n\r' ' '`" - fi - fi - if [ -n "$fluidsynth" ]; then LIBS="$LIBS -lfluidsynth" CFLAGS="$CFLAGS -DFLUIDSYNTH" @@ -2752,10 +2734,6 @@ detect_lzo2() { detect_library "$with_lzo2" "lzo2" "liblzo2.a" "lzo/" "lzo1x.h" } -detect_libtimidity() { - detect_pkg_config "$with_libtimidity" "libtimidity" "libtimidity_config" "0.1" "1" -} - detect_fluidsynth() { detect_library "$with_fluidsynth" "fluidsynth" "" "" "fluidsynth.h" } @@ -3544,8 +3522,6 @@ showhelp() { echo " --with-midi=midi define which midi-player to use" echo " --with-midi-arg=arg define which args to use for the" echo " midi-player" - echo " --with-libtimidity[=\"pkg-config libtimidity\"]" - echo " enables libtimidity support" echo " --with-fluidsynth enables fluidsynth support" echo " --with-allegro[=\"pkg-config allegro\"]" echo " enables Allegro video driver support" diff --git a/configure b/configure index bb3efa316a..2163dbe5d7 100755 --- a/configure +++ b/configure @@ -122,7 +122,6 @@ AWKCOMMAND=' "'$os'" != "CYGWIN" && "'$os'" != "MSVC") { next; } if ($0 == "MSVC" && "'$os'" != "MSVC") { next; } if ($0 == "DIRECTMUSIC" && "'$with_direct_music'" == "0") { next; } - if ($0 == "LIBTIMIDITY" && "'$libtimidity'" == "" ) { next; } if ($0 == "FLUIDSYNTH" && "'$fluidsynth'" == "" ) { next; } if ($0 == "HAVE_THREAD" && "'$with_threads'" == "0") { next; } if ($0 == "SSE" && "'$with_sse'" != "1") { next; } diff --git a/projects/generate b/projects/generate index b7d7da26bb..38a9e8e1f1 100755 --- a/projects/generate +++ b/projects/generate @@ -138,7 +138,6 @@ load_main_data() { if ($0 == "MSVC" && "'$os'" != "MSVC") { next; } if ($0 == "DIRECTMUSIC" && "'$enable_directmusic'" != "1") { next; } if ($0 == "FLUIDSYNTH" && "'$enable_fluidsynth'" != "1") { next; } - if ($0 == "LIBTIMIDITY" && "'$libtimidity'" == "" ) { next; } if ($0 == "HAVE_THREAD" && "'$with_threads'" == "0") { next; } skip += 1; diff --git a/source.list b/source.list index 22d647dbb5..5bc395a840 100644 --- a/source.list +++ b/source.list @@ -403,7 +403,6 @@ zoom_type.h music/bemidi.h music/cocoa_m.h music/extmidi.h -music/libtimidity.h music/fluidsynth.h music/os2_m.h music/qtmidi.h @@ -1120,9 +1119,6 @@ music/midifile.cpp #if HAIKU music/bemidi.cpp #end -#if LIBTIMIDITY - music/libtimidity.cpp -#end #if FLUIDSYNTH music/fluidsynth.cpp #end diff --git a/src/music/libtimidity.cpp b/src/music/libtimidity.cpp deleted file mode 100644 index 42c1e3c155..0000000000 --- a/src/music/libtimidity.cpp +++ /dev/null @@ -1,128 +0,0 @@ -/* $Id$ */ - -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/** @file libtimidity.cpp Playing music via the timidity library. */ - -#include "../stdafx.h" -#include "../openttd.h" -#include "../sound_type.h" -#include "../debug.h" -#include "libtimidity.h" -#include "midifile.hpp" -#include "../base_media_base.h" -#include -#include -#include -#include -#include -#include -#include -#include - -#include "../safeguards.h" - -/** The state of playing. */ -enum MidiState { - MIDI_STOPPED = 0, - MIDI_PLAYING = 1, -}; - -static struct { - MidIStream *stream; - MidSongOptions options; - MidSong *song; - - MidiState status; - uint32 song_length; - uint32 song_position; -} _midi; ///< Metadata about the midi we're playing. - -/** Factory for the libtimidity driver. */ -static FMusicDriver_LibTimidity iFMusicDriver_LibTimidity; - -const char *MusicDriver_LibTimidity::Start(const char * const *param) -{ - _midi.status = MIDI_STOPPED; - _midi.song = NULL; - - if (mid_init(param == NULL ? NULL : const_cast(param[0])) < 0) { - /* If init fails, it can be because no configuration was found. - * If it was not forced via param, try to load it without a - * configuration. Who knows that works. */ - if (param != NULL || mid_init_no_config() < 0) { - return "error initializing timidity"; - } - } - DEBUG(driver, 1, "successfully initialised timidity"); - - _midi.options.rate = 44100; - _midi.options.format = MID_AUDIO_S16LSB; - _midi.options.channels = 2; - _midi.options.buffer_size = _midi.options.rate; - - return NULL; -} - -void MusicDriver_LibTimidity::Stop() -{ - if (_midi.status == MIDI_PLAYING) this->StopSong(); - mid_exit(); -} - -void MusicDriver_LibTimidity::PlaySong(const MusicSongInfo &song) -{ - std::string filename = MidiFile::GetSMFFile(song); - - this->StopSong(); - if (filename.empty()) return; - - _midi.stream = mid_istream_open_file(filename.c_str()); - if (_midi.stream == NULL) { - DEBUG(driver, 0, "Could not open music file"); - return; - } - - _midi.song = mid_song_load(_midi.stream, &_midi.options); - mid_istream_close(_midi.stream); - _midi.song_length = mid_song_get_total_time(_midi.song); - - if (_midi.song == NULL) { - DEBUG(driver, 1, "Invalid MIDI file"); - return; - } - - mid_song_start(_midi.song); - _midi.status = MIDI_PLAYING; -} - -void MusicDriver_LibTimidity::StopSong() -{ - _midi.status = MIDI_STOPPED; - /* mid_song_free cannot handle NULL! */ - if (_midi.song != NULL) mid_song_free(_midi.song); - _midi.song = NULL; -} - -bool MusicDriver_LibTimidity::IsSongPlaying() -{ - if (_midi.status == MIDI_PLAYING) { - _midi.song_position = mid_song_get_time(_midi.song); - if (_midi.song_position >= _midi.song_length) { - _midi.status = MIDI_STOPPED; - _midi.song_position = 0; - } - } - - return (_midi.status == MIDI_PLAYING); -} - -void MusicDriver_LibTimidity::SetVolume(byte vol) -{ - if (_midi.song != NULL) mid_song_set_volume(_midi.song, vol); -} diff --git a/src/music/libtimidity.h b/src/music/libtimidity.h deleted file mode 100644 index badb05bab2..0000000000 --- a/src/music/libtimidity.h +++ /dev/null @@ -1,41 +0,0 @@ -/* $Id$ */ - -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/** @file libtimidity.h Base for LibTimidity music playback. */ - -#ifndef MUSIC_LIBTIMIDITY_H -#define MUSIC_LIBTIMIDITY_H - -#include "music_driver.hpp" - -/** Music driver making use of libtimidity. */ -class MusicDriver_LibTimidity : public MusicDriver { -public: - /* virtual */ const char *Start(const char * const *param); - - /* virtual */ void Stop(); - - /* virtual */ void PlaySong(const MusicSongInfo &song); - - /* virtual */ void StopSong(); - - /* virtual */ bool IsSongPlaying(); - - /* virtual */ void SetVolume(byte vol); - /* virtual */ const char *GetName() const { return "libtimidity"; } -}; - -/** Factory for the libtimidity driver. */ -class FMusicDriver_LibTimidity : public DriverFactoryBase { -public: - FMusicDriver_LibTimidity() : DriverFactoryBase(Driver::DT_MUSIC, 5, "libtimidity", "LibTimidity MIDI Driver") {} - /* virtual */ Driver *CreateInstance() const { return new MusicDriver_LibTimidity(); } -}; - -#endif /* MUSIC_LIBTIMIDITY_H */ From 1c5ea330994f183438a47cafd382bfdb53b24888 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Mon, 4 Mar 2019 20:51:46 +0100 Subject: [PATCH 438/622] Fix: warnings when compiling for a recent version of Haiku This might break older Haiku versions, but it is hard to tell. --- src/core/endian_type.hpp | 2 +- src/dedicated.cpp | 3 +-- src/network/core/os_abstraction.h | 6 +----- src/stdafx.h | 14 ++++++++++---- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/core/endian_type.hpp b/src/core/endian_type.hpp index 4058c5c19a..1cacf6c0cb 100644 --- a/src/core/endian_type.hpp +++ b/src/core/endian_type.hpp @@ -26,7 +26,7 @@ #define TTD_BIG_ENDIAN 1 /* Windows has always LITTLE_ENDIAN */ -#if defined(_WIN32) || defined(__OS2__) +#if defined(_WIN32) || defined(__OS2__) || defined(__HAIKU__) # define TTD_ENDIAN TTD_LITTLE_ENDIAN #elif defined(OSX) # include diff --git a/src/dedicated.cpp b/src/dedicated.cpp index e80abab164..574cbb0c34 100644 --- a/src/dedicated.cpp +++ b/src/dedicated.cpp @@ -22,10 +22,9 @@ FILE *_log_fd = NULL; ///< File to reroute output of a forked OpenTTD to #include "safeguards.h" -#if (defined(SUNOS) && !defined(_LP64) && !defined(_I32LPx)) || defined(__HAIKU__) +#if defined(SUNOS) && !defined(_LP64) && !defined(_I32LPx) /* Solaris has, in certain situation, pid_t defined as long, while in other * cases it has it defined as int... this handles all cases nicely. - * Haiku has also defined pid_t as a long. */ # define PRINTF_PID_T "%ld" #else diff --git a/src/network/core/os_abstraction.h b/src/network/core/os_abstraction.h index 084f763c2b..16c85d5660 100644 --- a/src/network/core/os_abstraction.h +++ b/src/network/core/os_abstraction.h @@ -63,7 +63,7 @@ typedef unsigned long in_addr_t; # include # include /* According to glibc/NEWS, appeared in glibc-2.3. */ -# if !defined(__sgi__) && !defined(SUNOS) && !defined(__HAIKU__) && !defined(__INNOTEK_LIBC__) \ +# if !defined(__sgi__) && !defined(SUNOS) && !defined(__INNOTEK_LIBC__) \ && !(defined(__GLIBC__) && (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 2)) && !defined(__dietlibc__) && !defined(HPUX) /* If for any reason ifaddrs.h does not exist on your system, comment out * the following two lines and an alternative way will be used to fetch @@ -84,10 +84,6 @@ typedef unsigned long in_addr_t; # include #endif /* UNIX */ -#ifdef __HAIKU__ - #define IPV6_V6ONLY 27 -#endif - /* OS/2 stuff */ #if defined(__OS2__) # define SOCKET int diff --git a/src/stdafx.h b/src/stdafx.h index 1f1181b15e..98f5d13b91 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -309,12 +309,18 @@ typedef unsigned char byte; #endif #if defined(TROUBLED_INTS) - /* Haiku's types for uint32/int32 are based on longs, which causes - * trouble all over the place in OpenTTD. */ - #define uint32 uint32_ugly_hack - #define int32 int32_ugly_hack + /* Haiku's types for uint32/int32/uint64/int64 are different than what + * they are on other platforms; not in length, but how to print them. + * So make them more like the other platforms, to make printf() etc a + * little bit easier. */ +# define uint32 uint32_ugly_hack +# define int32 int32_ugly_hack +# define uint64 uint64_ugly_hack +# define int64 int64_ugly_hack typedef unsigned int uint32_ugly_hack; typedef signed int int32_ugly_hack; + typedef unsigned __int64 uint64_ugly_hack; + typedef signed __int64 int64_ugly_hack; #else typedef unsigned char uint8; typedef signed char int8; From 18b37e4b81202deea37461a162a5ea95084e2b09 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Mon, 4 Mar 2019 21:38:24 +0100 Subject: [PATCH 439/622] Fix: mention Haiku in the README, including how to build --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index f69566fdf0..05655852d7 100644 --- a/README.md +++ b/README.md @@ -154,6 +154,7 @@ platforms are: - DOS (Allegro) - FreeBSD (SDL) +- Haiku (SDL) - Linux (SDL or Allegro) - macOS (universal) (Cocoa video and sound drivers) - OpenBSD (SDL) @@ -545,6 +546,10 @@ However, for the first build one has to do a '`./configure`' first. To make a universal binary type '`./configure --enabled-universal`' instead of '`./configure`'. +### Haiku: + +Use '`make`', but do a '`./configure`' before the first build. + ### OS/2: A comprehensive GNU build environment is required to build the OS/2 version. From f52e5a4d6191a63b69a6e35950a8bf1a9d8e9a12 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Tue, 5 Mar 2019 21:56:26 +0100 Subject: [PATCH 440/622] Fix: warnings when compiling with DJGPP This was most likely broken for months, if not years. --- src/core/endian_type.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/endian_type.hpp b/src/core/endian_type.hpp index 1cacf6c0cb..6e5defc647 100644 --- a/src/core/endian_type.hpp +++ b/src/core/endian_type.hpp @@ -26,7 +26,7 @@ #define TTD_BIG_ENDIAN 1 /* Windows has always LITTLE_ENDIAN */ -#if defined(_WIN32) || defined(__OS2__) || defined(__HAIKU__) +#if defined(_WIN32) || defined(__OS2__) || defined(__HAIKU__) || defined(__DJGPP__) # define TTD_ENDIAN TTD_LITTLE_ENDIAN #elif defined(OSX) # include From 3d4736cedda5f544abe86c1cc3128dd4531620ba Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 6 Mar 2019 19:45:44 +0100 Subject: [PATCH 441/622] Update: Translations from eints dutch: 13 changes by JanWillem hungarian: 4 changes by Brumi --- src/lang/dutch.txt | 22 +++++++++++++--------- src/lang/hungarian.txt | 4 ++++ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 2babd4c038..17808adc08 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1201,7 +1201,7 @@ STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Hellingsteilheid voor wegvoertuigen: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Steilheid van een schuine tegel voor een wegvoertuig. Hogere waarden maken het moeilijker om een heuvel te beklimmen STR_CONFIG_SETTING_FORBID_90_DEG :Treinen en schepen mogen niet 90° draaien: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Draaiingen met 90° treden op wanneer een horizontale baan direct gevolgd wordt door een verticaal baanstuk op de aangrenzende tegel, waardoor de trein daarna 90 graden draait wanneer de tegelrand wordt overgestoken in plaats van de gebruikelijke 45 graden voor andere spoorcombinaties. Dit geldt ook voor de draaicirkel van schepen +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Draaiingen met 90° treden op wanneer een horizontale baan direct gevolgd wordt door een verticaal baanstuk op de aangrenzende tegel, waardoor de trein daarna 90 graden draait wanneer de tegelrand wordt overgestoken in plaats van de gebruikelijke 45 graden voor andere spoorcombinaties. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Samenvoegen van indirect aansluitende stations toestaan: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Staat toe dat er aanvullende onderdelen aan een station worden geplaatst zonder dat reeds bestaande onderdelen beïnvloed worden. Ctrl+klik is vereist tijdens het plaatsen van nieuwe onderdelen. STR_CONFIG_SETTING_INFLATION :Inflatie: {STRING} @@ -1231,7 +1231,7 @@ STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Indien ingescha STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Nieuwe orders zijn standaard 'non-stop': {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normaal gesproken zal een voertuig stoppen op elk station dit wordt gepasseerd. Door het inschakelen van deze instelling, zal het rijden door alle station op weg naar de eindbestemming zonder te stoppen. Merk op dat deze instelling alleen een standaardwaarde voor nieuwe orders bepaalt. Individuele opdrachten kan expliciet worden ingesteld op het gedrag STR_CONFIG_SETTING_STOP_LOCATION :Nieuwe treinorders stoppen de trein standaard {STRING} van het perron -STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Plaats waar een trein standaard stopt bij het platform . De 'bij einde' betekent in de buurt van de ingang, 'midden' betekent in het midden van het platform, en 'einde' betekent ver weg van de ingang. Merk op dat deze instelling alleen een standaardwaarde voor nieuwe orders bepaalt. Individuele opdrachten kunnen expliciet worden ingesteld op het gedrag +STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Plaats waar een trein standaard stopt aan het perron. 'Aan het begin' betekent in de buurt van de ingang, 'In het midden' betekent in het midden van het perron, en 'Aan het einde' betekent ver weg van de ingang. Merk op dat deze instelling alleen een standaardwaarde voor nieuwe orders bepaalt. Je kunt opdrachten expliciet instellen op elk gewenst gedrag. STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :aan het begin STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :in het midden STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :aan het einde @@ -1258,7 +1258,7 @@ STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Stel de relatie STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Aantal neerstortende vliegtuigen: {STRING} STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Bepaalt de kans op neerstorten van een vliegtuig -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Geen +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Geen* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Verminderd STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normaal STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Haltes plaatsen op door stad beheerde wegen toestaan: {STRING} @@ -1419,7 +1419,7 @@ STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Geef aan of laa STR_CONFIG_SETTING_TIMETABLE_IN_TICKS :Dienstregeling in tikken weergeven i.p.v. in dagen: {STRING} STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Reistijden in tijdtabellen in speltikken weergeven in plaats van dagen STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Aankomst- en vertrektijden in dienstregeling weergeven: {STRING} -STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Geef de verwachte aankomst-en vertrektijden in de dienstregeling +STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Geef de verwachte aankomst-en vertrektijden in de dienstregeling weer STR_CONFIG_SETTING_QUICKGOTO :Snel voertuigorders maken: {STRING} STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Pre-selecteer de 'Ga naar cursor' bij het openen van de orders venster STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Standaard spoorsoort (bij nieuw of opgeslagen spel): {STRING} @@ -1445,11 +1445,11 @@ STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Speel geluidsef STR_CONFIG_SETTING_SOUND_CLICK :Klikgeluid knoppen: {STRING} STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT :Piep bij het klikken op knoppen STR_CONFIG_SETTING_SOUND_DISASTER :Rampen/ongelukken: {STRING} -STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT :Speel geluidseffecten van ongelukken en rampen +STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT :Speel geluidseffecten af bij ongelukken en rampen STR_CONFIG_SETTING_SOUND_VEHICLE :Voertuigen: {STRING} -STR_CONFIG_SETTING_SOUND_VEHICLE_HELPTEXT :Speel geluidseffecten van voertuigen +STR_CONFIG_SETTING_SOUND_VEHICLE_HELPTEXT :Speel geluidseffecten van voertuigen af STR_CONFIG_SETTING_SOUND_AMBIENT :Omgeving: {STRING} -STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Speel omgevingsgeluidseffecten van landschap, industrieën en steden +STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Speel omgevingsgeluidseffecten van landschap, industrieën en steden af STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING :Bouwen van infrastructuur uitschakelen wanneer geen geschikt voertuig beschikbaar is: {STRING} STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING_HELPTEXT :Wanneer je dit inschakelt, is de infrastructuur alleen beschikbaar als er ook voertuigen beschikbaar zijn. Dit voorkomt verspilling van tijd en geld aan onbruikbare infrastructuur @@ -1579,10 +1579,14 @@ STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Door deze optie STR_CONFIG_SETTING_NOISE_LEVEL :Geluidsniveaucontrole door steden voor vliegvelden toestaan: {STRING} STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Met deze instelling uitgeschakeld kunnen er twee luchthavens in elke stad zijn. Als deze instelling is ingeschakeld, wordt het aantal luchthavens in een stad beperkt door het lawaai tollerantie van de stad, die afhankelijk is van de bevolking en de luchthaven grootte en afstand STR_CONFIG_SETTING_TOWN_FOUNDING :Steden stichten in spel: {STRING} -STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Het inschakelen van deze instelling laat spelers toe om nieuwe steden op te richten tijdens het spel. +STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Wanneer deze instelling is ingeschakeld, kunnen spelers nieuwe steden stichten tijdens het spel. STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Verboden STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Toestaan STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Toestaan, eigen wegpatroon +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Genereren van vracht in steden: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Hoeveel vracht wordt geproduceerd door huizen in steden, in relatie tot de totale bevolking van de stad.{}Kwadratische groei: een stad die twee keer zo groot is, genereert vier keer zo veel passagiers.{}Lineaire groei: een stad die twee keer zo groot is, genereert twee keer zo veel passagiers. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kwadratisch (origineel) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineair STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Plaatsing van bomen in het spel: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Beheert het willekeurig verschijnen van bomen tijdens het spel. Dit kan gevolgen hebben voor industrietakken die afhankelijk zijn van groei van bomen, bijvoorbeeld houtzagerijen. @@ -1599,7 +1603,7 @@ STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Afstand tussen STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} pixel{P 0 "" s} STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :Uitgeschakeld STR_CONFIG_SETTING_SOFT_LIMIT :Maximumaantal (niet-blijvende) vensters: {STRING} -STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Aantal niet-klevende open vensters voor oude vensters automatisch worden gesloten om ruimte voor nieuwe vensters te maken +STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Aantal niet-blijvende open vensters voordat oude vensters automatisch worden gesloten om ruimte voor nieuwe vensters te maken STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA} STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :uitgeschakeld STR_CONFIG_SETTING_ZOOM_MIN :Maximaal inzoomniveau: {STRING} diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 5ff6f212dc..828f19584c 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1647,6 +1647,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Bekapcsolva a j STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :tiltott STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :megengedett STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :megengedett, egyéni városelrendezés +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Termelés a településeken: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Azt adja meg, hogy mennyi rakományt termelnek a városi épületek a település lakosságának függvényében.{}Négyzetes növekedés: Egy kétszer nagyobb település négyszer több utast termel.{}Lineáris növekedés: Egy kétszer nagyobb település kétszer több utast termel. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Négyzetes (eredeti) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineáris STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Játékbeli faelhelyezkedés: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Fák véletlenszerű megjelenésének szabályozása a játék során. Ez befolyásolhatja a gazdasági épületeket, melyek a fák növekedésétől függnek, mint a favágók From a7e335c0b36655506b88e7e01a4c717cde7d85c6 Mon Sep 17 00:00:00 2001 From: nikolas Date: Thu, 7 Mar 2019 12:52:57 -0500 Subject: [PATCH 442/622] Fix: spelling for a few real town names (#7338) Added special characters to mostly Slovak towns, a few Spanish, and one Turkish. --- src/table/townname.h | 86 ++++++++++++++++++++++---------------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/src/table/townname.h b/src/table/townname.h index 057583177d..551a050697 100644 --- a/src/table/townname.h +++ b/src/table/townname.h @@ -645,7 +645,7 @@ static const char * const _name_spanish_real[] = { "San Carlos", "El Lim\xC3\xB3n", "Coro", - "Corocoro", + "Coro Coro", "Puerto Ayacucho", "Elorza", "Arismendi", @@ -668,7 +668,7 @@ static const char * const _name_spanish_real[] = { "Ibarra", "San Lorenzo", "Macas", - "Morana", + "Mora\xC3\xB1""a", "Machala", "Zamora", "Latacunga", @@ -2036,28 +2036,28 @@ static const char * const _name_romanian_real[] = { static const char * const _name_slovak_real[] = { "Bratislava", - "Banovce nad Bebravou", + "B\xC3\xA1novce nad Bebravou", "Bansk\xC3\xA1 Bystrica", "Bansk\xC3\xA1 \xC5\xA0tiavnica", "Bardejov", "Brezno", "Brezova pod Bradlom", - "Bytca", - "Cadca", - "Cierna nad Tisou", + "Byt\xC4\x8D""a", + "\xC4\x8C""adca", + "\xC4\x8Cierna nad Tisou", "Detva", "Pre\xC5\xA1ov", "Dolny Kubin", "Spi\xC5\xA1sk\xC3\xA1 Nov\xC3\xA1 Ves", - "Dunajska Streda", - "Gabcikovo", + "Dunajsk\xC3\xA1 Streda", + "Gab\xC4\x8D\xC3\xADikovo", "Galanta", "Gbely", "Gelnica", - "Handlova", + "Handlov\xC3\xA1", "Hlohovec", - "Holic", - "Humenne", + "Hol\xC3\xAD\xC4\x8D", + "Humenn\xC3\xA9", "Hurbanovo", "Kezmarok", "Kom\xC3\xA1rno", @@ -2066,61 +2066,61 @@ static const char * const _name_slovak_real[] = { "Krompachy", "Kuty", "Leopoldov", - "Levoca", - "Liptovsky Mikulas", - "Lucenec", + "Levo\xC4\x8D""a", + "Liptovsk\xC3\xBD Mikul\xC3\xA1\xC5\xA1", + "Lu\xC4\x8D""enec", "Malacky", "Martin", "Medzilaborce", "Michalovce", "Modra", "Myjava", - "Namestovo", + "N\xC3\xA1mestovo", "Nitra", "Nov\xC3\xA1 Ba\xC5\x88""a", "Nov\xC3\xA9"" Mesto nad V\xC3\xA1hom", "Nov\xC3\xA9"" Z\xC3\xA1""mky", - "Partizanske", + "Partiz\xC3\xA1nske", "Pezinok", - "Piestany", - "Poltar", + "Pie\xC5\xA1\xC5\xA5""any", + "Polt\xC3\xA1r", "Poprad", "Pova\xC5\xBEsk\xC3\xA1 Bystrica", "Prievidza", - "Puchov", - "Revuca", - "Rimavska Sobota", - "Roznava", - "Ruzomberok", + "P\xC3\xBA""chov", + "Rev\xC3\xBA""ca", + "Rimavsk\xC3\xA1 Sobota", + "Ro\xC5\xBE\xC5\x88""ava", + "Ru\xC5\xBEomberok", "Sabinov", - "Sala", + "\xC5\xA0""a\xC4\xBE""a", "Senec", "Senica", - "Sered", + "Sere\xC4\x8F", "Skalica", - "Sladkovicovo", + "Sl\xC3\xA1""dkovi\xC3\x8Dovo", "Smolenice", "Snina", - "Stara Lubovna", - "Stara Tura", - "Strazske", + "Star\xC3\xA1 \xC4\xBDubov\xC5\x88""a", + "Star\xC3\xA1 Tur\xC3\xA1", + "Str\xC3\xA1\xC5\xBEske", "Stropkov", "Stupava", - "Sturovo", - "Sulekovo", - "Topolcany", - "Trebisov", - "Trencin", + "\xC5\xA0t\xC3\xBArovo", + "\xC4\xA0ulekovo", + "Topo\xC4\xBE\xC4\x8D""any", + "Trebi\xC5\xA1ov", + "Tren\xC4\x8D\xC3\xADn", "Trnava", - "Turcianske Teplice", - "Tvrdosin", - "Vrable", - "Vranov nad Toplou", - "Zahorska Bystrica", - "Zdiar", - "Ziar nad Hronom", + "Tur\xC4\x8Dianske Teplice", + "Tvrdo\xC5\xA1\xC3\xADn", + "Vr\xC3\xA1""ble", + "Vranov nad Top\xC4\xBEou", + "Z\xC3\xA1horsk\xC3\xA1 Bystrica", + "\xC5\xBD""diar", + "\xC4\xBDiar nad Hronom", "\xC5\xBDilina", - "Zlate Moravce", + "Zlat\xC3\xA9 Moravce", "Zvolen", }; @@ -2834,7 +2834,7 @@ static const char * const _name_turkish_real[] = { "Edirne", "Elaz\xC4\xB1\xC4\x9F", "Erzurum", - "Eskisehir", + "Eski\xC5\x9F""ehir", "Giresun", "G\xC3\xBCm\xC3\xBC\xC5\x9Fhane", "Hatay", From cdb6dbad851cabb99049b6a4b593f36c0cc838c1 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Thu, 7 Mar 2019 18:16:52 +0000 Subject: [PATCH 443/622] Cleanup: Remove repeated network error message on connection timeout. (#7327) --- src/network/network_client.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 0cb7728e66..62db6a5552 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -1175,7 +1175,6 @@ void ClientNetworkGameSocketHandler::CheckConnection() * the server will forcefully disconnect you. */ if (lag > 20) { this->NetworkGameSocketHandler::CloseConnection(); - ShowErrorMessage(STR_NETWORK_ERROR_LOSTCONNECTION, INVALID_STRING_ID, WL_CRITICAL); return; } From 1ad8321fff166c2e620ada7a6fc3239332e64777 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 7 Mar 2019 19:45:45 +0100 Subject: [PATCH 444/622] Update: Translations from eints dutch: 2 changes by JanWillem russian: 4 changes by Lone_Wolf --- src/lang/dutch.txt | 4 ++-- src/lang/russian.txt | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 17808adc08..1048dcf4d0 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1163,7 +1163,7 @@ STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Het niveau van STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Bouwsnelheid: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Beperk de hoeveelheid bouwactiviteiten voor computerspeler STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Voertuigstoringen: {STRING} -STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Controle hoe vaak onvoldoende onderhouden voertuigen kapot kunnen gaan +STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Bepaal hoe vaak onvoldoende onderhouden voertuigen kapot kunnen gaan STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Subsidiefactor: {STRING} STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Instellen hoeveel wordt betaald voor gesubsidieerde verbindingen STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Bouwkosten: {STRING} @@ -2898,7 +2898,7 @@ STR_NEWGRF_SETTINGS_UPGRADE :{BLACK}Opwaarde STR_NEWGRF_SETTINGS_UPGRADE_TOOLTIP :{BLACK}Opwaarderen van NewGRF-bestanden waar je een nieuwere versie van hebt geïnstalleerd STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Een lijst van de NewGRF-bestanden die zijn geïnstalleerd. -STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Stel parameters in +STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Parameters instellen STR_NEWGRF_SETTINGS_SHOW_PARAMETERS :{BLACK}Parameters weergeven STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Palet omzetten STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Verander het palet van het geselecteerde NewGRF-bestand.{}Gebruik deze mogelijkheid als de afbeeldingen van dit NewGRF-bestand er paars uit zien in het spel diff --git a/src/lang/russian.txt b/src/lang/russian.txt index f74b98740d..d8f4d61f63 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1735,6 +1735,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Включен 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 :Количество грузов и пассажиров в городах: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Зависимость количества грузов и пассажиров от размера города.{}Линейная: в городе двукратного размера появляется в 2 раза больше пассажиров.{}Квадратичная: в городе двукратного размера появляется в 4 раза больше пассажиров. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :квадратичная зависимость (оригинальная) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :линейная зависимость STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Размножение деревьев в игре: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Настройка возможности самостоятельного размножения деревьев в игре. Это может влиять на работоспособность некоторых предприятий, например, лесопилок. From a69eb5f516963f6f7a39f90d959cdff61e8e70b2 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Wed, 6 Mar 2019 18:27:54 +0000 Subject: [PATCH 445/622] Fix #7334: Ship lost after crossing bridge due to path cache not being consumed while on final bridge end. --- src/ship_cmd.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 0f3f7b74d1..6d6f8415c8 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -759,6 +759,10 @@ static void ShipController(Ship *v) if ((v->vehstatus & VS_HIDDEN) == 0) v->Vehicle::UpdateViewport(true); return; } + + /* Ship is back on the bridge head, we need to comsume its path + * cache entry here as we didn't have to choose a ship track. */ + if (!v->path.empty()) v->path.pop_front(); } /* update image of ship, as well as delta XY */ From b8a0107ad157e946c46a4e65cb3f63bec1812670 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 14 Feb 2019 23:12:26 +0000 Subject: [PATCH 446/622] Change: Add configurable curve penalty for ships. --- src/pathfinder/yapf/yapf_ship.cpp | 20 ++++++++++++++++---- src/saveload/saveload.h | 1 + src/settings_type.h | 2 ++ src/table/settings.ini | 20 ++++++++++++++++++++ 4 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/pathfinder/yapf/yapf_ship.cpp b/src/pathfinder/yapf/yapf_ship.cpp index 5a8afc1b9b..c71bf8af59 100644 --- a/src/pathfinder/yapf/yapf_ship.cpp +++ b/src/pathfinder/yapf/yapf_ship.cpp @@ -169,6 +169,21 @@ protected: } public: + inline int CurveCost(Trackdir td1, Trackdir td2) + { + assert(IsValidTrackdir(td1)); + assert(IsValidTrackdir(td2)); + + if (HasTrackdir(TrackdirCrossesTrackdirs(td1), td2)) { + /* 90-deg curve penalty */ + return Yapf().PfGetSettings().ship_curve90_penalty; + } else if (td2 != NextTrackdir(td1)) { + /* 45-deg curve penalty */ + return Yapf().PfGetSettings().ship_curve45_penalty; + } + return 0; + } + /** * Called by YAPF to calculate the cost from the origin to the given node. * Calculates only the cost of given node, adds it to the parent node cost @@ -179,10 +194,7 @@ public: /* base tile cost depending on distance */ int c = IsDiagonalTrackdir(n.GetTrackdir()) ? YAPF_TILE_LENGTH : YAPF_TILE_CORNER_LENGTH; /* additional penalty for curves */ - if (n.GetTrackdir() != NextTrackdir(n.m_parent->GetTrackdir())) { - /* new trackdir does not match the next one when going straight */ - c += YAPF_TILE_LENGTH; - } + c += CurveCost(n.m_parent->GetTrackdir(), n.GetTrackdir()); /* Skipped tile cost for aqueducts. */ c += YAPF_TILE_LENGTH * tf->m_tiles_skipped; diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 36c9687ea0..d881a76c2b 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -292,6 +292,7 @@ enum SaveLoadVersion : uint16 { SLV_SHIPS_STOP_IN_LOCKS, ///< 206 PR#7150 Ship/lock movement changes. SLV_FIX_CARGO_MONITOR, ///< 207 PR#7175 v1.9 Cargo monitor data packing fix to support 64 cargotypes. SLV_TOWN_CARGOGEN, ///< 208 PR#6965 New algorithms for town building cargo generation. + SLV_SHIP_CURVE_PENALTY, ///< 209 PR#7289 Configurable ship curve penalties. SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/settings_type.h b/src/settings_type.h index 6fba8ed2cd..46df6c8ece 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -418,6 +418,8 @@ struct YAPFSettings { uint32 rail_longer_platform_per_tile_penalty; ///< penalty for longer station platform than train (per tile) uint32 rail_shorter_platform_penalty; ///< penalty for shorter station platform than train uint32 rail_shorter_platform_per_tile_penalty; ///< penalty for shorter station platform than train (per tile) + uint32 ship_curve45_penalty; ///< penalty for 45-deg curve for ships + uint32 ship_curve90_penalty; ///< penalty for 90-deg curve for ships }; /** Settings related to all pathfinders. */ diff --git a/src/table/settings.ini b/src/table/settings.ini index c2faa43cae..bb8769c4ca 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -2163,6 +2163,26 @@ min = 0 max = 1000000 cat = SC_EXPERT +[SDT_VAR] +base = GameSettings +var = pf.yapf.ship_curve45_penalty +type = SLE_UINT +from = SLV_SHIP_CURVE_PENALTY +def = 1 * YAPF_TILE_LENGTH +min = 0 +max = 1000000 +cat = SC_EXPERT + +[SDT_VAR] +base = GameSettings +var = pf.yapf.ship_curve90_penalty +type = SLE_UINT +from = SLV_SHIP_CURVE_PENALTY +def = 6 * YAPF_TILE_LENGTH +min = 0 +max = 1000000 +cat = SC_EXPERT + ## [SDT_VAR] base = GameSettings From 7ca1793ec4d75c99de41dc27431c3b9c8353d7a1 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 15 Feb 2019 16:50:04 +0000 Subject: [PATCH 447/622] Change: Automatically use Trackdir node key as needed if ship curve penalties differ. --- src/pathfinder/yapf/yapf_ship.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/pathfinder/yapf/yapf_ship.cpp b/src/pathfinder/yapf/yapf_ship.cpp index c71bf8af59..63abd592e0 100644 --- a/src/pathfinder/yapf/yapf_ship.cpp +++ b/src/pathfinder/yapf/yapf_ship.cpp @@ -241,6 +241,16 @@ struct CYapfShip1 : CYapfT > {}; +static inline bool RequireTrackdirKey() +{ + /* If the two curve penalties are not equal, then it is not possible to use the + * ExitDir keyed node list, as it there will be key overlap. Using Trackdir keyed + * nodes means potentially more paths are tested, which would be wasteful if it's + * not necessary. + */ + return _settings_game.pf.yapf.ship_curve45_penalty != _settings_game.pf.yapf.ship_curve90_penalty; +} + /** Ship controller helper - path finder invoker */ Track YapfShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found, ShipPathCache &path_cache) { @@ -249,7 +259,7 @@ Track YapfShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, PfnChooseShipTrack pfnChooseShipTrack = CYapfShip2::ChooseShipTrack; // default: ExitDir /* check if non-default YAPF type needed */ - if (_settings_game.pf.yapf.disable_node_optimization) { + if (_settings_game.pf.yapf.disable_node_optimization || RequireTrackdirKey()) { pfnChooseShipTrack = &CYapfShip1::ChooseShipTrack; // Trackdir } @@ -267,7 +277,7 @@ bool YapfShipCheckReverse(const Ship *v) PfnCheckReverseShip pfnCheckReverseShip = CYapfShip2::CheckShipReverse; // default: ExitDir /* check if non-default YAPF type needed */ - if (_settings_game.pf.yapf.disable_node_optimization) { + if (_settings_game.pf.yapf.disable_node_optimization || RequireTrackdirKey()) { pfnCheckReverseShip = &CYapfShip1::CheckShipReverse; // Trackdir } From 41563a871b175f3469254d57dc019fda5210f8a9 Mon Sep 17 00:00:00 2001 From: PeterN Date: Fri, 8 Mar 2019 18:13:33 +0000 Subject: [PATCH 448/622] Add: AI API for vehicle group colours (#7336) --- src/script/api/ai/ai_group.hpp.sq | 4 ++++ src/script/api/ai_changelog.hpp | 6 ++++++ src/script/api/script_group.cpp | 32 +++++++++++++++++++++++++++++++ src/script/api/script_group.hpp | 30 +++++++++++++++++++++++++++++ 4 files changed, 72 insertions(+) diff --git a/src/script/api/ai/ai_group.hpp.sq b/src/script/api/ai/ai_group.hpp.sq index 5fa50ae1be..29d86754d0 100644 --- a/src/script/api/ai/ai_group.hpp.sq +++ b/src/script/api/ai/ai_group.hpp.sq @@ -45,6 +45,10 @@ void SQAIGroup_Register(Squirrel *engine) SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetProfitThisYear, "GetProfitThisYear", 2, ".i"); SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetProfitLastYear, "GetProfitLastYear", 2, ".i"); SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetCurrentUsage, "GetCurrentUsage", 2, ".i"); + SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::SetPrimaryColour, "SetPrimaryColour", 3, ".ii"); + SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::SetSecondaryColour, "SetSecondaryColour", 3, ".ii"); + SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetPrimaryColour, "GetPrimaryColour", 2, ".i"); + SQAIGroup.DefSQStaticMethod(engine, &ScriptGroup::GetSecondaryColour, "GetSecondaryColour", 2, ".i"); SQAIGroup.PostRegister(engine); } diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index f3ec539a40..3735908011 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -19,6 +19,12 @@ * * This version is not yet released. The following changes are not set in stone yet. * + * API additions: + * \li AIGroup::SetPrimaryColour + * \li AIGroup::SetSecondaryColour + * \li AIGroup::GetPrimaryColour + * \li AIGroup::GetSecondaryColour + * * \b 1.9.0 * * API additions: diff --git a/src/script/api/script_group.cpp b/src/script/api/script_group.cpp index 16a50bc17c..fcae6c3d2d 100644 --- a/src/script/api/script_group.cpp +++ b/src/script/api/script_group.cpp @@ -194,3 +194,35 @@ return occupancy / vehicle_count; } + +/* static */ bool ScriptGroup::SetPrimaryColour(GroupID group_id, ScriptCompany::Colours colour) +{ + EnforcePrecondition(false, IsValidGroup(group_id)); + + return ScriptObject::DoCommand(0, group_id, colour << 16, CMD_SET_GROUP_LIVERY); +} + +/* static */ bool ScriptGroup::SetSecondaryColour(GroupID group_id, ScriptCompany::Colours colour) +{ + EnforcePrecondition(false, IsValidGroup(group_id)); + + return ScriptObject::DoCommand(0, group_id, (1 << 8) | (colour << 16), CMD_SET_GROUP_LIVERY); +} + +/* static */ ScriptCompany::Colours ScriptGroup::GetPrimaryColour(GroupID group_id) +{ + EnforcePrecondition(ScriptCompany::Colours::COLOUR_INVALID, IsValidGroup(group_id)); + + const Group *g = ::Group::GetIfValid(group_id); + if (!HasBit(g->livery.in_use, 0)) return ScriptCompany::Colours::COLOUR_INVALID; + return (ScriptCompany::Colours)g->livery.colour1; +} + +/* static */ ScriptCompany::Colours ScriptGroup::GetSecondaryColour(GroupID group_id) +{ + EnforcePrecondition(ScriptCompany::Colours::COLOUR_INVALID, IsValidGroup(group_id)); + + const Group *g = ::Group::GetIfValid(group_id); + if (!HasBit(g->livery.in_use, 1)) return ScriptCompany::Colours::COLOUR_INVALID; + return (ScriptCompany::Colours)g->livery.colour2; +} diff --git a/src/script/api/script_group.hpp b/src/script/api/script_group.hpp index 9e88eaff1c..6e7deb0b7b 100644 --- a/src/script/api/script_group.hpp +++ b/src/script/api/script_group.hpp @@ -214,6 +214,36 @@ public: * @return The current usage of the group. */ static uint32 GetCurrentUsage(GroupID group_id); + + /** + * Set primary colour for a group. + * @param group_id The group id to set the colour of. + * @param colour Colour to set. + * @pre IsValidGroup(group_id). + */ + static bool SetPrimaryColour(GroupID group_id, ScriptCompany::Colours colour); + + /** + * Set secondary colour for a group. + * @param group_id The group id to set the colour of. + * @param colour Colour to set. + * @pre IsValidGroup(group_id). + */ + static bool SetSecondaryColour(GroupID group_id, ScriptCompany::Colours colour); + + /** + * Get primary colour of a group. + * @param group_id The group id to get the colour of. + * @pre IsValidGroup(group_id). + */ + static ScriptCompany::Colours GetPrimaryColour(GroupID group_id); + + /** + * Get secondary colour for a group. + * @param group_id The group id to get the colour of. + * @pre IsValidGroup(group_id). + */ + static ScriptCompany::Colours GetSecondaryColour(GroupID group_id); }; #endif /* SCRIPT_GROUP_HPP */ From dd20ccee88a55ed08abb2a47b88cafc7c92a5e81 Mon Sep 17 00:00:00 2001 From: PeterN Date: Fri, 8 Mar 2019 18:30:44 +0000 Subject: [PATCH 449/622] Feature: Industries with neutral stations (e.g. Oil Rig) only supply/accept cargo to/from their neutral station. (#7234) This change is a controlled by a game setting, located under Environment -> Industries which allows toggling the behaviour. It defaults to enabled. "Company stations can serve industries with attached neutral stations" When enabled, industries with attached neutral station (such as Oil Rigs) may also be served by company-owned stations built nearby. This is the traditional behaviour. When disabled, these industries may only be served by their neutral station. Any nearby company-owned stations won't be able to serve them, nor will the neutral station serve anything else other than the industry. --- src/economy.cpp | 5 +++++ src/industry.h | 2 ++ src/industry_cmd.cpp | 8 +++++++- src/lang/english.txt | 2 ++ src/saveload/afterload.cpp | 19 +++++++++++++++++++ src/saveload/industry_sl.cpp | 1 + src/saveload/saveload.h | 2 ++ src/settings_gui.cpp | 1 + src/settings_type.h | 1 + src/station.cpp | 6 ++++++ src/station_base.h | 1 + src/station_cmd.cpp | 25 +++++++++++++++++++++++-- src/station_func.h | 3 ++- src/table/settings.ini | 9 +++++++++ 14 files changed, 81 insertions(+), 4 deletions(-) diff --git a/src/economy.cpp b/src/economy.cpp index 898bc54478..2050640966 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1048,6 +1048,11 @@ static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint n Industry *ind = st->industries_near[i]; if (ind->index == source) continue; + if (!_settings_game.station.serve_neutral_industries) { + /* If this industry is only served by its neutral station, check it's us. */ + if (ind->neutral_station != NULL && ind->neutral_station != st) continue; + } + uint cargo_index; for (cargo_index = 0; cargo_index < lengthof(ind->accepts_cargo); cargo_index++) { if (cargo_type == ind->accepts_cargo[cargo_index]) break; diff --git a/src/industry.h b/src/industry.h index af0208b3cc..b7a954d404 100644 --- a/src/industry.h +++ b/src/industry.h @@ -18,6 +18,7 @@ #include "industry_map.h" #include "industrytype.h" #include "tilearea_type.h" +#include "station_base.h" typedef Pool IndustryPool; @@ -41,6 +42,7 @@ enum ProductionLevels { struct Industry : IndustryPool::PoolItem<&_industry_pool> { TileArea location; ///< Location of the industry Town *town; ///< Nearest town + Station *neutral_station; ///< Associated neutral station CargoID produced_cargo[INDUSTRY_NUM_OUTPUTS]; ///< 16 production cargo slots uint16 produced_cargo_waiting[INDUSTRY_NUM_OUTPUTS]; ///< amount of cargo produced per cargo uint16 incoming_cargo_waiting[INDUSTRY_NUM_INPUTS]; ///< incoming cargo waiting to be processed diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index d918ef16bd..ad12e54508 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -517,6 +517,12 @@ static bool TransportIndustryGoods(TileIndex tile) bool moved_cargo = false; StationFinder stations(i->location); + StationList neutral; + + if (i->neutral_station != NULL && !_settings_game.station.serve_neutral_industries) { + /* Industry has a neutral station. Use it and ignore any other nearby stations. */ + *neutral.Append() = i->neutral_station; + } for (uint j = 0; j < lengthof(i->produced_cargo_waiting); j++) { uint cw = min(i->produced_cargo_waiting[j], 255); @@ -528,7 +534,7 @@ static bool TransportIndustryGoods(TileIndex tile) i->this_month_production[j] += cw; - uint am = MoveGoodsToStation(i->produced_cargo[j], cw, ST_INDUSTRY, i->index, stations.GetStations()); + uint am = MoveGoodsToStation(i->produced_cargo[j], cw, ST_INDUSTRY, i->index, neutral.Length() != 0 ? &neutral : stations.GetStations()); i->this_month_transported[j] += am; moved_cargo |= (am != 0); diff --git a/src/lang/english.txt b/src/lang/english.txt index c19275c64f..8bcfd95885 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1184,6 +1184,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Allow landscapi STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Allow landscaping under buildings and tracks without removing them STR_CONFIG_SETTING_CATCHMENT :Allow more realistically sized catchment areas: {STRING2} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Have differently sized catchment areas for different types of stations and airports +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Company stations can serve industries with attached neutral stations: {STRING2} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :When enabled, industries with attached stations (such as Oil Rigs) may also be served by company owned stations built nearby. When disabled, these industries may only be served by their attached stations. Any nearby company stations won't be able to serve them, nor will the attached station serve anything else other than the industry STR_CONFIG_SETTING_EXTRADYNAMITE :Allow removal of more town-owned roads, bridges and tunnels: {STRING2} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Make it easier to remove town-owned infrastructure and buildings STR_CONFIG_SETTING_TRAIN_LENGTH :Maximum length of trains: {STRING2} diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 55552413aa..a29635eab2 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -3085,6 +3085,25 @@ bool AfterLoadGame() _settings_game.economy.town_cargogen_mode = TCGM_ORIGINAL; } + if (IsSavegameVersionBefore(SLV_SERVE_NEUTRAL_INDUSTRIES)) { + /* Ensure the original neutral industry/station behaviour is used */ + _settings_game.station.serve_neutral_industries = true; + + /* Link oil rigs to their industry and back. */ + Station *st; + FOR_ALL_STATIONS(st) { + if (IsTileType(st->xy, MP_STATION) && IsOilRig(st->xy)) { + /* Industry tile is always adjacent during construction by TileDiffXY(0, 1) */ + st->industry = Industry::GetByTile(st->xy + TileDiffXY(0, 1)); + st->industry->neutral_station = st; + } + } + } else { + /* Link neutral station back to industry, as this is not saved. */ + Industry *ind; + FOR_ALL_INDUSTRIES(ind) if (ind->neutral_station != NULL) ind->neutral_station->industry = ind; + } + /* Station acceptance is some kind of cache */ if (IsSavegameVersionBefore(SLV_127)) { Station *st; diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp index 9e81861c4e..e5a0b74a32 100644 --- a/src/saveload/industry_sl.cpp +++ b/src/saveload/industry_sl.cpp @@ -25,6 +25,7 @@ static const SaveLoad _industry_desc[] = { SLE_VAR(Industry, location.w, SLE_FILE_U8 | SLE_VAR_U16), SLE_VAR(Industry, location.h, SLE_FILE_U8 | SLE_VAR_U16), SLE_REF(Industry, town, REF_TOWN), + SLE_CONDREF(Industry, neutral_station, REF_STATION, SLV_SERVE_NEUTRAL_INDUSTRIES, SL_MAX_VERSION), SLE_CONDNULL( 2, SL_MIN_VERSION, SLV_61), ///< used to be industry's produced_cargo SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 2, SLV_78, SLV_EXTEND_INDUSTRY_CARGO_SLOTS), SLE_CONDARR(Industry, produced_cargo, SLE_UINT8, 16, SLV_EXTEND_INDUSTRY_CARGO_SLOTS, SL_MAX_VERSION), diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index d881a76c2b..331d62d7fe 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -294,6 +294,8 @@ enum SaveLoadVersion : uint16 { SLV_TOWN_CARGOGEN, ///< 208 PR#6965 New algorithms for town building cargo generation. SLV_SHIP_CURVE_PENALTY, ///< 209 PR#7289 Configurable ship curve penalties. + SLV_SERVE_NEUTRAL_INDUSTRIES, ///< 210 PR#7234 Company stations can serve industries with attached neutral stations. + SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 4d851333c3..60430b4906 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -1743,6 +1743,7 @@ static SettingsContainer &GetSettingsTree() industries->Add(new SettingEntry("economy.multiple_industry_per_town")); industries->Add(new SettingEntry("game_creation.oil_refinery_limit")); industries->Add(new SettingEntry("economy.smooth_economy")); + industries->Add(new SettingEntry("station.serve_neutral_industries")); } SettingsPage *cdist = environment->Add(new SettingsPage(STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST)); diff --git a/src/settings_type.h b/src/settings_type.h index 46df6c8ece..503342545f 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -527,6 +527,7 @@ struct LinkGraphSettings { /** Settings related to stations. */ struct StationSettings { bool modified_catchment; ///< different-size catchment areas + bool serve_neutral_industries; ///< company stations can serve industries with attached neutral stations bool adjacent_stations; ///< allow stations to be built directly adjacent to other stations bool distant_join_stations; ///< allow to join non-adjacent stations bool never_expire_airports; ///< never expire airports diff --git a/src/station.cpp b/src/station.cpp index f86286f3d9..dc50b4f10d 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -356,6 +356,12 @@ void Station::RecomputeIndustriesNear() this->industries_near.Clear(); if (this->rect.IsEmpty()) return; + if (!_settings_game.station.serve_neutral_industries && this->industry != NULL) { + /* Station is associated with an industry, so we only need to deliver to that industry. */ + *this->industries_near.Append() = this->industry; + return; + } + RectAndIndustryVector riv = { this->GetCatchmentRect(), &this->industries_near diff --git a/src/station_base.h b/src/station_base.h index bf860538d1..0ea960bb10 100644 --- a/src/station_base.h +++ b/src/station_base.h @@ -473,6 +473,7 @@ public: CargoTypes always_accepted; ///< Bitmask of always accepted cargo types (by houses, HQs, industry tiles when industry doesn't accept cargo) IndustryVector industries_near; ///< Cached list of industries near the station that can accept cargo, @see DeliverGoodsToIndustry() + Industry *industry; ///< NOSAVE: Associated industry for neutral stations. (Rebuilt on load from Industry->st) Station(TileIndex tile = INVALID_TILE); ~Station(); diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index e6864d70db..a9460e562e 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -506,6 +506,8 @@ CargoArray GetProductionAroundTiles(TileIndex tile, int w, int h, int rad) const Industry *i; FOR_ALL_INDUSTRIES(i) { if (!ta.Intersects(i->location)) continue; + /* Skip industry with neutral station */ + if (i->neutral_station != NULL && !_settings_game.station.serve_neutral_industries) continue; for (uint j = 0; j < lengthof(i->produced_cargo); j++) { CargoID cargo = i->produced_cargo[j]; @@ -523,8 +525,9 @@ CargoArray GetProductionAroundTiles(TileIndex tile, int w, int h, int rad) * @param h Y extent of area * @param rad Search radius in addition to given area * @param always_accepted bitmask of cargo accepted by houses and headquarters; can be NULL + * @param ind Industry associated with neutral station (e.g. oil rig) or NULL */ -CargoArray GetAcceptanceAroundTiles(TileIndex tile, int w, int h, int rad, CargoTypes *always_accepted) +CargoArray GetAcceptanceAroundTiles(TileIndex tile, int w, int h, int rad, CargoTypes *always_accepted, const Industry *ind) { CargoArray acceptance; if (always_accepted != NULL) *always_accepted = 0; @@ -547,6 +550,15 @@ CargoArray GetAcceptanceAroundTiles(TileIndex tile, int w, int h, int rad, Cargo for (int yc = y1; yc != y2; yc++) { for (int xc = x1; xc != x2; xc++) { TileIndex tile = TileXY(xc, yc); + + if (!_settings_game.station.serve_neutral_industries) { + if (ind != NULL) { + if (!IsTileType(tile, MP_INDUSTRY)) continue; + if (Industry::GetByTile(tile) != ind) continue; + } else { + if (IsTileType(tile, MP_INDUSTRY) && Industry::GetByTile(tile)->neutral_station != NULL) continue; + } + } AddAcceptedCargo(tile, acceptance, always_accepted); } } @@ -572,7 +584,8 @@ void UpdateStationAcceptance(Station *st, bool show_msg) st->rect.right - st->rect.left + 1, st->rect.bottom - st->rect.top + 1, st->GetCatchmentRadius(), - &st->always_accepted + &st->always_accepted, + _settings_game.station.serve_neutral_industries ? NULL : st->industry ); } @@ -3795,6 +3808,8 @@ void FindStationsAroundTiles(const TileArea &location, StationList *stations) uint min_y = (y > max_rad) ? y - max_rad : 0; uint max_y = y + location.h + max_rad; + IndustryID ind = IsTileType(location.tile, MP_INDUSTRY) ? GetIndustryIndex(location.tile) : INVALID_INDUSTRY; + if (min_x == 0 && _settings_game.construction.freeform_edges) min_x = 1; if (min_y == 0 && _settings_game.construction.freeform_edges) min_y = 1; if (max_x >= MapSizeX()) max_x = MapSizeX() - 1; @@ -3809,6 +3824,9 @@ void FindStationsAroundTiles(const TileArea &location, StationList *stations) /* st can be NULL in case of waypoints */ if (st == NULL) continue; + /* Check if neutral station is attached to us */ + if (!_settings_game.station.serve_neutral_industries && st->industry != NULL && st->industry->index != ind) continue; + if (_settings_game.station.modified_catchment) { int rad = st->GetCatchmentRadius(); int rad_x = cx - x; @@ -3918,6 +3936,9 @@ void BuildOilRig(TileIndex tile) st->string_id = GenerateStationName(st, tile, STATIONNAMING_OILRIG); assert(IsTileType(tile, MP_INDUSTRY)); + /* Mark industry as associated both ways */ + st->industry = Industry::GetByTile(tile); + st->industry->neutral_station = st; DeleteAnimatedTile(tile); MakeOilrig(tile, st->index, GetWaterClass(tile)); diff --git a/src/station_func.h b/src/station_func.h index 9748297f21..ca3885e8bc 100644 --- a/src/station_func.h +++ b/src/station_func.h @@ -19,6 +19,7 @@ #include "economy_func.h" #include "rail.h" #include "linkgraph/linkgraph_type.h" +#include "industry_type.h" void ModifyStationRatingAround(TileIndex tile, Owner owner, int amount, uint radius); @@ -28,7 +29,7 @@ void ShowStationViewWindow(StationID station); void UpdateAllStationVirtCoords(); CargoArray GetProductionAroundTiles(TileIndex tile, int w, int h, int rad); -CargoArray GetAcceptanceAroundTiles(TileIndex tile, int w, int h, int rad, CargoTypes *always_accepted = NULL); +CargoArray GetAcceptanceAroundTiles(TileIndex tile, int w, int h, int rad, CargoTypes *always_accepted = NULL, const Industry *ind = NULL); void UpdateStationAcceptance(Station *st, bool show_msg); diff --git a/src/table/settings.ini b/src/table/settings.ini index bb8769c4ca..13d8483627 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -1219,6 +1219,15 @@ strhelp = STR_CONFIG_SETTING_CATCHMENT_HELPTEXT proc = StationCatchmentChanged cat = SC_EXPERT +[SDT_BOOL] +base = GameSettings +var = station.serve_neutral_industries +def = true +from = SLV_SERVE_NEUTRAL_INDUSTRIES +str = STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES +strhelp = STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT +proc = StationCatchmentChanged + [SDT_BOOL] base = GameSettings var = order.gradual_loading From 35a2b3bb0866c35d6b20c7de3d5d97a649702fd7 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 8 Mar 2019 19:45:44 +0100 Subject: [PATCH 450/622] Update: Translations from eints finnish: 14 changes by ln catalan: 8 changes by juanjo polish: 7 changes by xaxa dutch: 7 changes by JanWillem --- src/lang/catalan.txt | 12 ++++++++---- src/lang/dutch.txt | 14 +++++++------- src/lang/finnish.txt | 28 ++++++++++++++-------------- src/lang/polish.txt | 8 +++++++- 4 files changed, 36 insertions(+), 26 deletions(-) diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 7a817287b3..29752bb058 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1201,8 +1201,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :El pendent de l STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Pendent de les costes per als vehicles de carretera: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :El pendent de les caselles amb costes per a vehicles de carretera. Els valors alts fan que sigui més difícil pujar els turons. -STR_CONFIG_SETTING_FORBID_90_DEG :Prohibeix fer girs de 90 graus als trens i vaixells: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Els girs de 90 graus succeeixen quan hi ha una via horitzontal seguida d'una de vertical a la cel·la annexa, provocant que el tren giri 90 graus quan travessi la vora de la cel·la en lloc dels 45 graus usuals en les altres combinacions. Això també s'aplica al gir dels vaixells. +STR_CONFIG_SETTING_FORBID_90_DEG :Prohibeix fer girs de 90 graus als trens: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Els girs de 90 graus succeeixen quan hi ha una via horitzontal seguida d'una de vertical a la cel·la annexa, provocant que el tren giri 90 graus quan travessi la vora de la cel·la en lloc dels 45 graus usuals en les altres combinacions. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permet ajuntar estacions no annexes: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Aquesta opció permet afegir parts noves a una estació existent sense estar les parts noves en contacte directe amb les existents. Cal clicar Ctrl+Clic mentre es col·loquen les parts noves. STR_CONFIG_SETTING_INFLATION :Inflació: {STRING} @@ -1258,8 +1258,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Factor de veloc STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Estableix la velocitat relativa dels avions en comparació amb els altres tipus de vehicles, per reduir la quantitat de guanys de transport dels avions STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Nombre d'accidents d'avió: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Estableix la probabilitat amb què succeeixen els accidents d'avió -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Cap +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Estableix la probabilitat amb què succeeixen els accidents d'avió.{}* Els avions grans sempre tenen un risc d'estavellar-se quan aterren en aeroports petits. +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Cap* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Reduït STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Permet situar parades en carreteres que són propietat de la població: {STRING} @@ -1584,6 +1584,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Activant aquest STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Prohibit STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Permès STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Permès, disposició dels carrers personalitzada +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Generació de càrrega a les poblacions: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Estableix quanta càrrega es produirà a les cases en funció dels habitants de la població.{}Creixement quadràtic: una població el doble de gran generarà el quàdruple de passatgers.{}Creixement lineal: una població el doble de gran generarà el doble de passatgers. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadràtica (original) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineal STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Disposició de nous arbres durant la partida: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controla l'aparició aleatòria dels arbres durant una partida. Això podria afectar a les indústries que es basen en el creixement dels arbres, per exemple les serradores diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 1048dcf4d0..797fd9f7c5 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -326,10 +326,10 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Lijst me STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Financiële informatie over het bedrijf weergeven STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Algemene informatie over het bedrijf weergeven STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Verhaal weergeven -STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Geef doellijst weer +STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Doellijst weergeven STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Grafieken weergeven STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Bedrijfsscoretabel weergeven -STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Financier de bouw van nieuwe industrie of geef lijst van alle industrieën weer +STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Bouw van nieuwe industrie financieren of lijst van alle industrieën weergeven STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Lijst met treinen van het bedrijf weergeven. Ctrl+klik schakelt tussen lijst van groepen/voertuigen. STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Lijst met wegvoertuigen van het bedrijf weergeven. Ctrl+klik schakelt tussen lijst van groepen/voertuigen. STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Lijst met schepen van het bedrijf weergeven. Ctrl+klik schakelt tussen lijst van groepen/voertuigen. @@ -343,7 +343,7 @@ STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Vliegvel STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Hiermee open je de landschapsbalk om land te verhogen/verlagen, bomen te planten, enz. STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Geluid-/muziekvenster weergeven STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Laatste (nieuws-)bericht weergeven, berichtinstellingen weergeven -STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Landinformatie, console, scriptdebug, screenshots, over OpenTTD +STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Landinformatie, console, foutopsporing in scripts, schermfoto's, over OpenTTD STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Knoppenbalken wisselen # Extra tooltips for the scenario editor toolbar @@ -474,10 +474,10 @@ STR_ABOUT_MENU_LAND_BLOCK_INFO :Landinformatie STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Console in-uitschakelen STR_ABOUT_MENU_AI_DEBUG :Probleemoplossing AI/spelscript -STR_ABOUT_MENU_SCREENSHOT :Schermafbeelding -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Ingezoomde schermafbeelding -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Schermafbeelding met standaardzoom -STR_ABOUT_MENU_GIANT_SCREENSHOT :Schermafbeelding van de hele kaart +STR_ABOUT_MENU_SCREENSHOT :Schermfoto +STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Ingezoomde schermfoto +STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Schermfoto met standaardzoom +STR_ABOUT_MENU_GIANT_SCREENSHOT :Schermfoto van de hele kaart STR_ABOUT_MENU_SHOW_FRAMERATE :Framesnelheid weergeven STR_ABOUT_MENU_ABOUT_OPENTTD :Over 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite-uitlijner diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 8704a81821..0f6cb2aa4e 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -243,7 +243,7 @@ STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Ikkunan STR_TOOLTIP_SHADE :{BLACK}Pienennä ikkuna - näytä vain otsikko STR_TOOLTIP_DEBUG :{BLACK}Näytä NewGRF-vianmääritystiedot STR_TOOLTIP_DEFSIZE :{BLACK}Palauta ikkunan oletuskoko. Ctrl+Klik tallentaa nykyisen koon oletukseksi -STR_TOOLTIP_STICKY :{BLACK}'Sulje kaikki ikkunat' -nappi ei vaikuta tähän ikkunaan. Ctrl+Klik tallentaa tilan oletukseksi +STR_TOOLTIP_STICKY :{BLACK}Aseta ikkuna säilymään "Sulje kaikki ikkunat" -napista huolimatta. Ctrl+Klik tallentaa tilan oletukseksi STR_TOOLTIP_RESIZE :{BLACK}Napsauta ja vedä muuttaaksesi tämän ikkunan kokoa. STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Suurenna/pienennä ikkuna STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Vierityspalkki - luettelon vieritys ylös/alas @@ -872,7 +872,7 @@ STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} ottaa nyt vastaan {STRING}. STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION} ottaa nyt vastaan {STRING} ja {STRING}. -STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Tuki päättynyt:{}{}{STRING} väli {STRING} - {STRING} ei ole enää tuettu +STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Tukitarjous päättynyt:{}{}{STRING} välillä {STRING} - {STRING} ei voi enää saada tukea STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Tuki vedetty pois:{}{}{STRING} kuljetuspalvelu välille {STRING}-{STRING} ei ole enää tuettu STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Tuki tarjottu:{}{}Ensimmäinen {STRING}kuljetus välillä {STRING} – {STRING} saa vuoden mittaisen tuen paikallisviranomaisilta! STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Tuki myönnetty yhtiölle {STRING}!{}{}{STRING}kuljetus välillä {STRING}-{STRING} tuottaa 50{NBSP}% enemmän seuraavan vuoden ajan! @@ -1288,10 +1288,10 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Ajoneuvot eivä STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Mikäli käytössä, kaikki kulkuneuvot ovat saatavilla ikuisesti niiden julkistamisen jälkeen STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Uudista ajoneuvo automaattisesti, kun se vanhenee: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Mikäli käytössä, lähellä käyttöikänsä loppua oleva kulkuneuvo korvataan automaattisesti -STR_CONFIG_SETTING_AUTORENEW_MONTHS :Uudista automaattisesti {STRING} ajoneuvon suurinta sallittua ikää +STR_CONFIG_SETTING_AUTORENEW_MONTHS :Uudista automaattisesti {STRING} STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Suhteellinen ikä, jonka jälkeen kulkuneuvo voidaan uudistaa automaattisesti -STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} kuukau{P 0 si tta} ennen -STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} kuukau{P 0 si tta} jälkeen +STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} kuukau{P 0 tta tta} ennen kulkuneuvon käyttöiän loppua +STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} kuukau{P 0 si tta} jälkeen kulkuneuvon käyttöiän lopun STR_CONFIG_SETTING_AUTORENEW_MONEY :Vähimmäisrahamäärä ajoneuvon automaattiseen uudistukseen: {STRING} STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Pienin rahamäärä, joka on oltava pankissa ennen kulkuneuvojen automaattista uudistamista STR_CONFIG_SETTING_ERRMSG_DURATION :Virheilmoitusten näyttöaika: {STRING} @@ -1400,9 +1400,9 @@ STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Valitse aikavä STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Käytä {STRING} päivämäärämuotoa tallennettujen pelien niminä STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Pelitallenteiden tiedostonimissä käytettävä päivämäärän muoto -STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :pitkä (31. joulu 2008) -STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :lyhyt (31.12.2008) -STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31) +STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :pitkää (31. joulu 2008) +STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :lyhyttä (31.12.2008) +STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO- (2008-12-31) STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Uusi peli alkaa pysäytettynä: {STRING} STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Mikäli käytössä, peli pysäytetään automaattisesti uuden pelin alussa, mahdollistaen esimerkiksi kartan tarkemman tutkimisen @@ -1548,9 +1548,9 @@ STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Osuus tuotosta, STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Opastimien väli vedettäessä: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Määrittää etäisyyden opastimien välillä seuraavaan esteeseen saakka (opastin, risteys) opastimia vedettäessä STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} ruutu{P 0 "" a} -STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Vedettäessä, pidä opastimien välinen matka vakiona: {STRING} +STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Pidä opastimien etäisyys vakiona vedettäessä: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Valitse käyttäytyminen vedettäessä opastimia Ctrl-näppäin pohjassa. Mikäli pois käytöstä, opastimia rakennetaan siltojen ja tunnelien ympärille pitkien opastimista vapaiden alueiden välttämiseksi. Mikäli käytössä, opastimia rakennetaan n ruudun välein, tehden vierekkäisten ratojen opastimien kohdistamisesta helpompaa -STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Rakenna oletuksena siipiopastimia ennen vuotta: {STRING} +STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Rakenna ensisijaisesti siipiopastimia ennen vuotta: {STRING} STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Valitse vuosi jonka jälkeen käytetään valo-opastimia. Ennen tätä vuotta käytetään siipiopastimia (joilla on sama toiminnallisuus mutta eri ulkonäkö) STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Käytä graafista opastinkäyttöliittymää: {STRING} STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Näytä ikkuna opastintyypin valitsemiseksi ikkunattoman Ctrl-näppäimen avulla tapahtuvan rakentamisen sijaan @@ -1602,8 +1602,8 @@ STR_CONFIG_SETTING_SNAP_RADIUS :Ikkunoiden kiin STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Ikkunoiden välinen etäisyys ennen niiden kohdistamista toistensa kanssa STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} pikseli{P 0 "" ä} STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :Pois käytöstä -STR_CONFIG_SETTING_SOFT_LIMIT :Suurin sallittu ei-kiinnitettyjen ikkunoiden lukumäärä: {STRING} -STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Suurin sallittu ei-kiinnitettyjen ikkunoiden määrä ennen vanhojen ikkunoiden sulkemista uusien ikkunoiden tieltä +STR_CONFIG_SETTING_SOFT_LIMIT :Suurin sallittu ei-säilyvien ikkunoiden lukumäärä: {STRING} +STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Suurin sallittu ei-säilyvien ikkunoiden määrä ennen vanhojen ikkunoiden sulkemista uusien ikkunoiden tieltä STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA} STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :pois käytöstä STR_CONFIG_SETTING_ZOOM_MIN :Suurin sallittu suurennustaso: {STRING} @@ -1690,7 +1690,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL :Brittiläinen ( STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :Metrinen (m) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (m) -STR_CONFIG_SETTING_LOCALISATION :{ORANGE}Lokalisointi +STR_CONFIG_SETTING_LOCALISATION :{ORANGE}Mittayksiköt ja päivämäärät STR_CONFIG_SETTING_GRAPHICS :{ORANGE}Grafiikka STR_CONFIG_SETTING_SOUND :{ORANGE}Ääni STR_CONFIG_SETTING_INTERFACE :{ORANGE}Käyttöliittymä @@ -1788,7 +1788,7 @@ STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Näytä STR_INTRO_TOOLTIP_QUIT :{BLACK}Sulje OpenTTD. STR_INTRO_BASESET :{BLACK}Valitusta perusgrafiikkapaketista puuttuu {NUM} sprite{P "" ä}. Tarkista, onko sille päivityksiä. -STR_INTRO_TRANSLATION :{BLACK}Tästä käännöksestä puuttuu {NUM} merkkijono{P "" a}. Auta tekemään OpenTTD:stä parempi rekisteröitymällä kääntäjäksi. Lisätietoja tiedostossa readme.txt. +STR_INTRO_TRANSLATION :{BLACK}Tästä käännöksestä puuttuu {NUM} merkkijono{P "" a}. Auta tekemään OpenTTD:stä parempi ryhtymällä kääntäjäksi. Lisätietoja readme.txt:ssä. # Quit window STR_QUIT_CAPTION :{WHITE}Sulje diff --git a/src/lang/polish.txt b/src/lang/polish.txt index d28a741af6..6ff0d135d3 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1374,6 +1374,7 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Podwójny STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Poczwórny +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Poczwórny STR_GAME_OPTIONS_BASE_GRF :{BLACK}Podstawowy zestaw grafik STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Wybierz podstawowy zestaw grafik do użycia @@ -1955,6 +1956,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Aktywacja tej o STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Zabronione STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Dozwolone STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Dozwolone, dowolny układ miasta +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Liniowy STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Rozmieszczenie drzew w grze: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Losowe pojawianie się drzew podczas gry. Może mieć to wpływ na zakłady opierające się na wyrastaniu drzew, np. tartaki @@ -2759,7 +2761,7 @@ STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Jednokie STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Zamiana sygnałów{}Jeżeli włączone, kliknięcie na istniejący sygnał spowoduje zamianę go na wybrany typ i wariant. CTRL+klik przełącza istniejący wariant. Shift+klik pokazuje szacowany koszt zamiany STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Gęstość sygnałów przy przeciąganiu STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Zmniejsz odległość między sygnałami przy przeciąganiu -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Zwiększ gęstość sygnałów przy przeciąganiu +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Zwiększ odległość między sygnałami przy przeciąganiu # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Wybierz rodzaj mostu kolejowego @@ -3083,6 +3085,7 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Ilość klatek na sekundę +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Liczba ticków gry symulowanych na sekundę. STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Liczba renderowanych klatek wideo na sekundę. STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Jak szybko gra obecnie działa, w porównaniu do oczekiwanej prędkości przy normalnym tempie symulacji. @@ -3107,6 +3110,7 @@ STR_FRAMERATE_SOUND :{WHITE}Miksowan ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Pętla gry +STR_FRAMETIME_CAPTION_GL_ECONOMY :Obsługa ładunku STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Opóźnienie wykresu połączeń STR_FRAMETIME_CAPTION_DRAWING :Renderowanie grafiki STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Renderowanie okna podgląu świata @@ -3466,6 +3470,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Daj ła # Goal window STR_GOALS_CAPTION :{WHITE}Cele firmy {COMPANY} STR_GOALS_SPECTATOR_CAPTION :{WHITE}Cele globalne +STR_GOALS_SPECTATOR :Cele globalne STR_GOALS_GLOBAL_TITLE :{BLACK}Cele globalne: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Brak - @@ -3514,6 +3519,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klik na # Story book window STR_STORY_BOOK_CAPTION :{WHITE}Dziennik Historii Firmy {COMPANY} STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Ogólny przewodnik +STR_STORY_BOOK_SPECTATOR :Ogólny przewodnik STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Strona {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Skocz na właściwą stronę wybierając ją z listy. From dae35188abdfd070ea833bb50ced79d92481a284 Mon Sep 17 00:00:00 2001 From: glx22 Date: Fri, 8 Mar 2019 21:15:00 +0100 Subject: [PATCH 451/622] Fix 13962a847, 00d28a500: forgotten squirrel_export run (#7345) --- src/script/api/game/game_window.hpp.sq | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/script/api/game/game_window.hpp.sq b/src/script/api/game/game_window.hpp.sq index 833e9d8ec0..ce2b37bb53 100644 --- a/src/script/api/game/game_window.hpp.sq +++ b/src/script/api/game/game_window.hpp.sq @@ -466,6 +466,7 @@ void SQGSWindow_Register(Squirrel *engine) SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FRW_TIMES_NAMES, "WID_FRW_TIMES_NAMES"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FRW_TIMES_CURRENT, "WID_FRW_TIMES_CURRENT"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FRW_TIMES_AVERAGE, "WID_FRW_TIMES_AVERAGE"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FRW_SCROLLBAR, "WID_FRW_SCROLLBAR"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FGW_CAPTION, "WID_FGW_CAPTION"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_FGW_GRAPH, "WID_FGW_GRAPH"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GL_TEMPERATE, "WID_GL_TEMPERATE"); @@ -1030,7 +1031,6 @@ void SQGSWindow_Register(Squirrel *engine) SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_RESOLUTION_DROPDOWN, "WID_GO_RESOLUTION_DROPDOWN"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_FULLSCREEN_BUTTON, "WID_GO_FULLSCREEN_BUTTON"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_GUI_ZOOM_DROPDOWN, "WID_GO_GUI_ZOOM_DROPDOWN"); - SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_FONT_ZOOM_DROPDOWN, "WID_GO_FONT_ZOOM_DROPDOWN"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_GRF_DROPDOWN, "WID_GO_BASE_GRF_DROPDOWN"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_GRF_STATUS, "WID_GO_BASE_GRF_STATUS"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_GRF_TEXTFILE, "WID_GO_BASE_GRF_TEXTFILE"); @@ -1042,6 +1042,7 @@ void SQGSWindow_Register(Squirrel *engine) SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_MUSIC_STATUS, "WID_GO_BASE_MUSIC_STATUS"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_MUSIC_TEXTFILE, "WID_GO_BASE_MUSIC_TEXTFILE"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BASE_MUSIC_DESCRIPTION, "WID_GO_BASE_MUSIC_DESCRIPTION"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_FONT_ZOOM_DROPDOWN, "WID_GO_FONT_ZOOM_DROPDOWN"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GS_FILTER, "WID_GS_FILTER"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GS_OPTIONSPANEL, "WID_GS_OPTIONSPANEL"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GS_SCROLLBAR, "WID_GS_SCROLLBAR"); From 6c6971fb43514c4e4923c2ec3b1fdd9fe852617d Mon Sep 17 00:00:00 2001 From: PeterN Date: Fri, 8 Mar 2019 23:52:45 +0000 Subject: [PATCH 452/622] Add: Road vehicle path cache. (#7261) --- src/pathfinder/pathfinder_type.h | 3 +++ src/pathfinder/yapf/yapf.h | 3 ++- src/pathfinder/yapf/yapf_node.hpp | 7 +++++++ src/pathfinder/yapf/yapf_road.cpp | 29 +++++++++++++++++++------- src/pathfinder/yapf/yapf_ship.cpp | 3 ++- src/roadveh.h | 22 ++++++++++++++++++++ src/roadveh_cmd.cpp | 34 ++++++++++++++++++++++++++++++- src/saveload/saveload.h | 1 + src/saveload/vehicle_sl.cpp | 28 +++++++++++++------------ 9 files changed, 107 insertions(+), 23 deletions(-) diff --git a/src/pathfinder/pathfinder_type.h b/src/pathfinder/pathfinder_type.h index 0ecf00bbd2..3740d03902 100644 --- a/src/pathfinder/pathfinder_type.h +++ b/src/pathfinder/pathfinder_type.h @@ -43,6 +43,9 @@ static const int YAPF_INFINITE_PENALTY = 1000 * YAPF_TILE_LENGTH; /** Maximum length of ship path cache */ static const int YAPF_SHIP_PATH_CACHE_LENGTH = 32; +/** Maximum segments of road vehicle path cache */ +static const int YAPF_ROADVEH_PATH_CACHE_SEGMENTS = 8; + /** * Helper container to find a depot */ diff --git a/src/pathfinder/yapf/yapf.h b/src/pathfinder/yapf/yapf.h index 84bd35c8b0..3bea692b79 100644 --- a/src/pathfinder/yapf/yapf.h +++ b/src/pathfinder/yapf/yapf.h @@ -16,6 +16,7 @@ #include "../../track_type.h" #include "../../vehicle_type.h" #include "../../ship.h" +#include "../../roadveh.h" #include "../pathfinder_type.h" /** @@ -45,7 +46,7 @@ bool YapfShipCheckReverse(const Ship *v); * @param path_found [out] Whether a path has been found (true) or has been guessed (false) * @return the best trackdir for next turn or INVALID_TRACKDIR if the path could not be found */ -Trackdir YapfRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, TrackdirBits trackdirs, bool &path_found); +Trackdir YapfRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, TrackdirBits trackdirs, bool &path_found, RoadVehPathCache &path_cache); /** * Finds the best path for given train using YAPF. diff --git a/src/pathfinder/yapf/yapf_node.hpp b/src/pathfinder/yapf/yapf_node.hpp index b3021096b3..e510b2a6c2 100644 --- a/src/pathfinder/yapf/yapf_node.hpp +++ b/src/pathfinder/yapf/yapf_node.hpp @@ -67,6 +67,7 @@ struct CYapfNodeT { Node *m_parent; int m_cost; int m_estimate; + bool m_is_choice; inline void Set(Node *parent, TileIndex tile, Trackdir td, bool is_choice) { @@ -75,6 +76,7 @@ struct CYapfNodeT { m_parent = parent; m_cost = 0; m_estimate = 0; + m_is_choice = is_choice; } inline Node *GetHashNext() @@ -112,6 +114,11 @@ struct CYapfNodeT { return m_estimate; } + inline bool GetIsChoice() const + { + return m_is_choice; + } + inline bool operator<(const Node &other) const { return m_estimate < other.m_estimate; diff --git a/src/pathfinder/yapf/yapf_road.cpp b/src/pathfinder/yapf/yapf_road.cpp index 8da84444c7..908915763d 100644 --- a/src/pathfinder/yapf/yapf_road.cpp +++ b/src/pathfinder/yapf/yapf_road.cpp @@ -348,13 +348,13 @@ public: return 'r'; } - static Trackdir stChooseRoadTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, bool &path_found) + static Trackdir stChooseRoadTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, bool &path_found, RoadVehPathCache &path_cache) { Tpf pf; - return pf.ChooseRoadTrack(v, tile, enterdir, path_found); + return pf.ChooseRoadTrack(v, tile, enterdir, path_found, path_cache); } - inline Trackdir ChooseRoadTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, bool &path_found) + inline Trackdir ChooseRoadTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, bool &path_found, RoadVehPathCache &path_cache) { /* Handle special case - when next tile is destination tile. * However, when going to a station the (initial) destination @@ -382,15 +382,30 @@ public: Trackdir next_trackdir = INVALID_TRACKDIR; Node *pNode = Yapf().GetBestNode(); if (pNode != NULL) { + uint steps = 0; + for (Node *n = pNode; n->m_parent != NULL; n = n->m_parent) steps++; + /* path was found or at least suggested * walk through the path back to its origin */ while (pNode->m_parent != NULL) { + steps--; + if (pNode->GetIsChoice() && steps < YAPF_ROADVEH_PATH_CACHE_SEGMENTS) { + TrackdirByte td; + td = pNode->GetTrackdir(); + path_cache.td.push_front(td); + path_cache.tile.push_front(pNode->GetTile()); + } pNode = pNode->m_parent; } /* return trackdir from the best origin node (one of start nodes) */ Node &best_next_node = *pNode; assert(best_next_node.GetTile() == tile); next_trackdir = best_next_node.GetTrackdir(); + /* remove last element for the special case when tile == dest_tile */ + if (path_found && !path_cache.empty() && tile == v->dest_tile) { + path_cache.td.pop_back(); + path_cache.tile.pop_back(); + } } return next_trackdir; } @@ -497,18 +512,18 @@ struct CYapfRoadAnyDepot1 : CYapfT > {}; -Trackdir YapfRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, TrackdirBits trackdirs, bool &path_found) +Trackdir YapfRoadVehicleChooseTrack(const RoadVehicle *v, TileIndex tile, DiagDirection enterdir, TrackdirBits trackdirs, bool &path_found, RoadVehPathCache &path_cache) { /* default is YAPF type 2 */ - typedef Trackdir (*PfnChooseRoadTrack)(const RoadVehicle*, TileIndex, DiagDirection, bool &path_found); - PfnChooseRoadTrack pfnChooseRoadTrack = &CYapfRoad2::stChooseRoadTrack; // default: ExitDir + typedef Trackdir (*PfnChooseRoadTrack)(const RoadVehicle*, TileIndex, DiagDirection, bool &path_found, RoadVehPathCache &path_cache); + PfnChooseRoadTrack pfnChooseRoadTrack = &CYapfRoad2::stChooseRoadTrack; // default: ExitDir, allow 90-deg /* check if non-default YAPF type should be used */ if (_settings_game.pf.yapf.disable_node_optimization) { pfnChooseRoadTrack = &CYapfRoad1::stChooseRoadTrack; // Trackdir } - Trackdir td_ret = pfnChooseRoadTrack(v, tile, enterdir, path_found); + Trackdir td_ret = pfnChooseRoadTrack(v, tile, enterdir, path_found, path_cache); return (td_ret != INVALID_TRACKDIR) ? td_ret : (Trackdir)FindFirstBit2x64(trackdirs); } diff --git a/src/pathfinder/yapf/yapf_ship.cpp b/src/pathfinder/yapf/yapf_ship.cpp index 63abd592e0..b880128f56 100644 --- a/src/pathfinder/yapf/yapf_ship.cpp +++ b/src/pathfinder/yapf/yapf_ship.cpp @@ -96,7 +96,8 @@ public: /* walk through the path back to the origin */ Node *pPrevNode = NULL; while (pNode->m_parent != NULL) { - if (steps > 1 && --steps < YAPF_SHIP_PATH_CACHE_LENGTH) { + steps--; + if (steps > 0 && steps < YAPF_SHIP_PATH_CACHE_LENGTH) { TrackdirByte td; td = pNode->GetTrackdir(); path_cache.push_front(td); diff --git a/src/roadveh.h b/src/roadveh.h index ca069b7acf..c2a799951a 100644 --- a/src/roadveh.h +++ b/src/roadveh.h @@ -18,6 +18,7 @@ #include "track_func.h" #include "road_type.h" #include "newgrf_engine.h" +#include struct RoadVehicle; @@ -82,10 +83,30 @@ static const byte RV_OVERTAKE_TIMEOUT = 35; void RoadVehUpdateCache(RoadVehicle *v, bool same_length = false); void GetRoadVehSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type); +struct RoadVehPathCache { + std::deque td; + std::deque tile; + + inline bool empty() const { return this->td.empty(); } + + inline size_t size() const + { + assert(this->td.size() == this->tile.size()); + return this->td.size(); + } + + inline void clear() + { + this->td.clear(); + this->tile.clear(); + } +}; + /** * Buses, trucks and trams belong to this class. */ struct RoadVehicle FINAL : public GroundVehicle { + RoadVehPathCache path; ///< Cached path. byte state; ///< @see RoadVehicleStates byte frame; uint16 blocked_ctr; @@ -125,6 +146,7 @@ struct RoadVehicle FINAL : public GroundVehicle { int GetCurrentMaxSpeed() const; int UpdateSpeed(); + void SetDestTile(TileIndex tile); protected: // These functions should not be called outside acceleration code. diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 9704770016..559b875479 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -924,6 +924,8 @@ static Trackdir RoadFindPathToDest(RoadVehicle *v, TileIndex tile, DiagDirection /* Remove tracks unreachable from the enter dir */ trackdirs &= DiagdirReachesTrackdirs(enterdir); if (trackdirs == TRACKDIR_BIT_NONE) { + /* If vehicle expected a path, it no longer exists, so invalidate it. */ + if (!v->path.empty()) v->path.clear(); /* No reachable tracks, so we'll reverse */ return_track(_road_reverse_table[enterdir]); } @@ -954,12 +956,35 @@ static Trackdir RoadFindPathToDest(RoadVehicle *v, TileIndex tile, DiagDirection /* Only one track to choose between? */ if (KillFirstBit(trackdirs) == TRACKDIR_BIT_NONE) { + if (!v->path.empty() && v->path.tile.front() == tile) { + /* Vehicle expected a choice here, invalidate its path. */ + v->path.clear(); + } return_track(FindFirstBit2x64(trackdirs)); } + /* Attempt to follow cached path. */ + if (!v->path.empty()) { + if (v->path.tile.front() != tile) { + /* Vehicle didn't expect a choice here, invalidate its path. */ + v->path.clear(); + } else { + Trackdir trackdir = v->path.td.front(); + + if (HasBit(trackdirs, trackdir)) { + v->path.td.pop_front(); + v->path.tile.pop_front(); + return_track(trackdir); + } + + /* Vehicle expected a choice which is no longer available. */ + v->path.clear(); + } + } + switch (_settings_game.pf.pathfinder_for_roadvehs) { case VPF_NPF: best_track = NPFRoadVehicleChooseTrack(v, tile, enterdir, path_found); break; - case VPF_YAPF: best_track = YapfRoadVehicleChooseTrack(v, tile, enterdir, trackdirs, path_found); break; + case VPF_YAPF: best_track = YapfRoadVehicleChooseTrack(v, tile, enterdir, trackdirs, path_found, v->path); break; default: NOT_REACHED(); } @@ -1600,6 +1625,13 @@ bool RoadVehicle::Tick() return true; } +void RoadVehicle::SetDestTile(TileIndex tile) +{ + if (tile == this->dest_tile) return; + this->path.clear(); + this->dest_tile = tile; +} + static void CheckIfRoadVehNeedsService(RoadVehicle *v) { /* If we already got a slot at a stop, use that FIRST, and go to a depot later */ diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 331d62d7fe..77cce4c4a4 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -295,6 +295,7 @@ enum SaveLoadVersion : uint16 { SLV_SHIP_CURVE_PENALTY, ///< 209 PR#7289 Configurable ship curve penalties. SLV_SERVE_NEUTRAL_INDUSTRIES, ///< 210 PR#7234 Company stations can serve industries with attached neutral stations. + SLV_ROADVEH_PATH_CACHE, ///< 211 PR#7261 Add path cache for road vehicles. SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 540416586c..0585871390 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -752,21 +752,23 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) static const SaveLoad _roadveh_desc[] = { SLE_WRITEBYTE(Vehicle, type), SLE_VEH_INCLUDE(), - SLE_VAR(RoadVehicle, state, SLE_UINT8), - SLE_VAR(RoadVehicle, frame, SLE_UINT8), - SLE_VAR(RoadVehicle, blocked_ctr, SLE_UINT16), - SLE_VAR(RoadVehicle, overtaking, SLE_UINT8), - SLE_VAR(RoadVehicle, overtaking_ctr, SLE_UINT8), - SLE_VAR(RoadVehicle, crashed_ctr, SLE_UINT16), - SLE_VAR(RoadVehicle, reverse_ctr, SLE_UINT8), + SLE_VAR(RoadVehicle, state, SLE_UINT8), + SLE_VAR(RoadVehicle, frame, SLE_UINT8), + SLE_VAR(RoadVehicle, blocked_ctr, SLE_UINT16), + SLE_VAR(RoadVehicle, overtaking, SLE_UINT8), + SLE_VAR(RoadVehicle, overtaking_ctr, SLE_UINT8), + SLE_VAR(RoadVehicle, crashed_ctr, SLE_UINT16), + SLE_VAR(RoadVehicle, reverse_ctr, SLE_UINT8), + SLE_CONDDEQUE(RoadVehicle, path.td, SLE_UINT8, SLV_ROADVEH_PATH_CACHE, SL_MAX_VERSION), + SLE_CONDDEQUE(RoadVehicle, path.tile, SLE_UINT32, SLV_ROADVEH_PATH_CACHE, SL_MAX_VERSION), - SLE_CONDNULL(2, SLV_6, SLV_69), - SLE_CONDVAR(RoadVehicle, gv_flags, SLE_UINT16, SLV_139, SL_MAX_VERSION), - SLE_CONDNULL(4, SLV_69, SLV_131), - SLE_CONDNULL(2, SLV_6, SLV_131), - SLE_CONDNULL(16, SLV_2, SLV_144), // old reserved space + SLE_CONDNULL(2, SLV_6, SLV_69), + SLE_CONDVAR(RoadVehicle, gv_flags, SLE_UINT16, SLV_139, SL_MAX_VERSION), + SLE_CONDNULL(4, SLV_69, SLV_131), + SLE_CONDNULL(2, SLV_6, SLV_131), + SLE_CONDNULL(16, SLV_2, SLV_144), // old reserved space - SLE_END() + SLE_END() }; static const SaveLoad _ship_desc[] = { From 4be2c1022e8576f139035ba41cdae97cf3799f5c Mon Sep 17 00:00:00 2001 From: Gabda Date: Sat, 2 Mar 2019 10:50:50 +0100 Subject: [PATCH 453/622] Cleanup: changing variable names in TIC() and TOC() Removing double underscores to be ANSI-C standard compliant. --- src/debug.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/debug.h b/src/debug.h index ce454c962e..1eaa208680 100644 --- a/src/debug.h +++ b/src/debug.h @@ -86,15 +86,15 @@ const char *GetDebugString(); **/ #define TIC() {\ uint64 _xxx_ = ottd_rdtsc();\ - static uint64 __sum__ = 0;\ - static uint32 __i__ = 0; + static uint64 _sum_ = 0;\ + static uint32 _i_ = 0; #define TOC(str, count)\ - __sum__ += ottd_rdtsc() - _xxx_;\ - if (++__i__ == count) {\ - DEBUG(misc, 0, "[%s] " OTTD_PRINTF64 " [avg: %.1f]", str, __sum__, __sum__/(double)__i__);\ - __i__ = 0;\ - __sum__ = 0;\ + _sum_ += ottd_rdtsc() - _xxx_;\ + if (++_i_ == count) {\ + DEBUG(misc, 0, "[%s] " OTTD_PRINTF64 " [avg: %.1f]", str, _sum_, _sum_/(double)_i_);\ + _i_ = 0;\ + _sum_ = 0;\ }\ } From 7e7563f15f999cac5c140cb93e917905a9450df4 Mon Sep 17 00:00:00 2001 From: Gabda Date: Thu, 28 Feb 2019 12:18:06 +0100 Subject: [PATCH 454/622] Add: Chrono based TIC() and TOC() in debug --- src/debug.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/debug.h b/src/debug.h index 1eaa208680..3faefffaf3 100644 --- a/src/debug.h +++ b/src/debug.h @@ -13,6 +13,7 @@ #define DEBUG_H #include "cpu.h" +#include /* Debugging messages policy: * These should be the severities used for direct DEBUG() calls @@ -83,6 +84,9 @@ const char *GetDebugString(); * * TIC() / TOC() creates its own block, so make sure not the mangle * it with another block. + * + * The output is counted in CPU cycles, and not comparable accross + * machines. Mainly useful for local optimisations. **/ #define TIC() {\ uint64 _xxx_ = ottd_rdtsc();\ @@ -98,6 +102,22 @@ const char *GetDebugString(); }\ } +/* Chrono based version. The output is in microseconds. */ +#define TICC() {\ + auto _start_ = std::chrono::high_resolution_clock::now();\ + static uint64 _sum_ = 0;\ + static uint32 _i_ = 0; + +#define TOCC(str, _count_)\ + _sum_ += (std::chrono::duration_cast(std::chrono::high_resolution_clock::now() - _start_)).count();\ + if (++_i_ == _count_) {\ + DEBUG(misc, 0, "[%s] " OTTD_PRINTF64 " us [avg: %.1f us]", str, _sum_, _sum_/(double)_i_);\ + _i_ = 0;\ + _sum_ = 0;\ + }\ +} + + void ShowInfo(const char *str); void CDECL ShowInfoF(const char *str, ...) WARN_FORMAT(1, 2); From 42046af933ac57ab08c83d26bd94e60a253bab66 Mon Sep 17 00:00:00 2001 From: PeterN Date: Sat, 9 Mar 2019 02:53:43 +0000 Subject: [PATCH 455/622] Add: Add flag and railtype sprite type to draw pre-combined ground sprites. (#7231) --- src/rail.h | 3 +++ src/rail_cmd.cpp | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/rail.h b/src/rail.h index 83d1d9b7af..eec87bfb38 100644 --- a/src/rail.h +++ b/src/rail.h @@ -27,11 +27,13 @@ enum RailTypeFlags { RTF_CATENARY = 0, ///< Bit number for drawing a catenary. RTF_NO_LEVEL_CROSSING = 1, ///< Bit number for disallowing level crossings. RTF_HIDDEN = 2, ///< Bit number for hiding from selection. + RTF_NO_SPRITE_COMBINE = 3, ///< Bit number for using non-combined junctions. RTFB_NONE = 0, ///< All flags cleared. RTFB_CATENARY = 1 << RTF_CATENARY, ///< Value for drawing a catenary. RTFB_NO_LEVEL_CROSSING = 1 << RTF_NO_LEVEL_CROSSING, ///< Value for disallowing level crossings. RTFB_HIDDEN = 1 << RTF_HIDDEN, ///< Value for hiding from selection. + RTFB_NO_SPRITE_COMBINE = 1 << RTF_NO_SPRITE_COMBINE, ///< Value for using non-combined junctions. }; DECLARE_ENUM_AS_BIT_SET(RailTypeFlags) @@ -51,6 +53,7 @@ enum RailTypeSpriteGroup { RTSG_FENCES, ///< Fence images RTSG_TUNNEL_PORTAL, ///< Tunnel portal overlay RTSG_SIGNALS, ///< Signal images + RTSG_GROUND_COMPLETE, ///< Complete ground images RTSG_END, }; diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 3230d9bf22..aa4e7ab551 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -2107,12 +2107,25 @@ static void DrawTrackBitsOverlay(TileInfo *ti, TrackBits track, const RailtypeIn DrawGroundSprite(image, PAL_NONE); } + bool no_combine = ti->tileh == SLOPE_FLAT && HasBit(rti->flags, RTF_NO_SPRITE_COMBINE); SpriteID overlay = GetCustomRailSprite(rti, ti->tile, RTSG_OVERLAY); - SpriteID ground = GetCustomRailSprite(rti, ti->tile, RTSG_GROUND); + SpriteID ground = GetCustomRailSprite(rti, ti->tile, no_combine ? RTSG_GROUND_COMPLETE : RTSG_GROUND); TrackBits pbs = _settings_client.gui.show_track_reservation ? GetRailReservationTrackBits(ti->tile) : TRACK_BIT_NONE; if (track == TRACK_BIT_NONE) { /* Half-tile foundation, no track here? */ + } else if (no_combine) { + /* Use trackbits as direct index from ground sprite, subtract 1 + * because there is no sprite for no bits. */ + DrawGroundSprite(ground + track - 1, PAL_NONE); + + /* Draw reserved track bits */ + if (pbs & TRACK_BIT_X) DrawGroundSprite(overlay + RTO_X, PALETTE_CRASH); + if (pbs & TRACK_BIT_Y) DrawGroundSprite(overlay + RTO_Y, PALETTE_CRASH); + if (pbs & TRACK_BIT_UPPER) DrawTrackSprite(overlay + RTO_N, PALETTE_CRASH, ti, SLOPE_N); + if (pbs & TRACK_BIT_LOWER) DrawTrackSprite(overlay + RTO_S, PALETTE_CRASH, ti, SLOPE_S); + if (pbs & TRACK_BIT_RIGHT) DrawTrackSprite(overlay + RTO_E, PALETTE_CRASH, ti, SLOPE_E); + if (pbs & TRACK_BIT_LEFT) DrawTrackSprite(overlay + RTO_W, PALETTE_CRASH, ti, SLOPE_W); } else if (ti->tileh == SLOPE_NW && track == TRACK_BIT_Y) { DrawGroundSprite(ground + RTO_SLOPE_NW, PAL_NONE); if (pbs != TRACK_BIT_NONE) DrawGroundSprite(overlay + RTO_SLOPE_NW, PALETTE_CRASH); From 46aca9377b01a6626a972151e6fc4c62eec76ba7 Mon Sep 17 00:00:00 2001 From: Andy Date: Fri, 8 Mar 2019 15:46:32 +0000 Subject: [PATCH 456/622] Add: windowshade for rail station construction window --- src/rail_gui.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 234edbf22f..0bc29977cb 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1029,6 +1029,7 @@ public: this->DrawWidgets(); + if (this->IsShaded()) return; /* 'Accepts' and 'Supplies' texts. */ NWidgetBase *cov = this->GetWidget(WID_BRAS_COVERAGE_TEXTS); int top = cov->pos_y + WD_PAR_VSEP_NORMAL; @@ -1378,6 +1379,7 @@ static const NWidgetPart _nested_station_builder_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_DARK_GREEN), NWidget(WWT_CAPTION, COLOUR_DARK_GREEN), SetDataTip(STR_STATION_BUILD_RAIL_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_SHADEBOX, COLOUR_DARK_GREEN), NWidget(NWID_SELECTION, INVALID_COLOUR, WID_BRAS_SHOW_NEWST_DEFSIZE), NWidget(WWT_DEFSIZEBOX, COLOUR_DARK_GREEN), EndContainer(), From ed6084523d546641d4ec9ff5f560387d7c40670f Mon Sep 17 00:00:00 2001 From: peter1138 Date: Sun, 24 Feb 2019 18:52:15 +0000 Subject: [PATCH 457/622] Codechange: Convert StationList from SmallVector to std::set. --- src/industry_cmd.cpp | 4 ++-- src/newgrf_house.cpp | 3 +-- src/script/api/script_industry.cpp | 2 +- src/station.cpp | 5 +++++ src/station_cmd.cpp | 6 ++---- src/station_type.h | 8 ++++++-- 6 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index ad12e54508..cc05893fbe 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -2432,7 +2432,7 @@ static int WhoCanServiceIndustry(Industry *ind) StationList stations; FindStationsAroundTiles(ind->location, &stations); - if (stations.Length() == 0) return 0; // No stations found at all => nobody services + if (stations.size() == 0) return 0; // No stations found at all => nobody services const Vehicle *v; int result = 0; @@ -2468,7 +2468,7 @@ static int WhoCanServiceIndustry(Industry *ind) /* Same cargo produced by industry is dropped here => not serviced by vehicle v */ if ((o->GetUnloadType() & OUFB_UNLOAD) && !c_accepts) break; - if (stations.Contains(st)) { + if (stations.find(st) != stations.end()) { if (v->owner == _local_company) return 2; // Company services industry result = 1; // Competitor services industry } diff --git a/src/newgrf_house.cpp b/src/newgrf_house.cpp index 314f02b3dc..e6abf09626 100644 --- a/src/newgrf_house.cpp +++ b/src/newgrf_house.cpp @@ -350,8 +350,7 @@ static uint32 GetDistanceFromNearbyHouse(uint8 parameter, TileIndex tile, HouseI /* Collect acceptance stats. */ uint32 res = 0; - for (Station * const * st_iter = sl->Begin(); st_iter != sl->End(); st_iter++) { - const Station *st = *st_iter; + for (Station *st : *sl) { if (HasBit(st->goods[cid].status, GoodsEntry::GES_EVER_ACCEPTED)) SetBit(res, 0); if (HasBit(st->goods[cid].status, GoodsEntry::GES_LAST_MONTH)) SetBit(res, 1); if (HasBit(st->goods[cid].status, GoodsEntry::GES_CURRENT_MONTH)) SetBit(res, 2); diff --git a/src/script/api/script_industry.cpp b/src/script/api/script_industry.cpp index c536ec5590..b9025307bb 100644 --- a/src/script/api/script_industry.cpp +++ b/src/script/api/script_industry.cpp @@ -134,7 +134,7 @@ Industry *ind = ::Industry::Get(industry_id); StationList stations; ::FindStationsAroundTiles(ind->location, &stations); - return (int32)stations.Length(); + return (int32)stations.size(); } /* static */ int32 ScriptIndustry::GetDistanceManhattanToTile(IndustryID industry_id, TileIndex tile) diff --git a/src/station.cpp b/src/station.cpp index dc50b4f10d..04c5a66bd1 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -571,3 +571,8 @@ Money AirportMaintenanceCost(Owner owner) /* 3 bits fraction for the maintenance cost factor. */ return total_cost >> 3; } + +bool StationCompare::operator() (const Station *lhs, const Station *rhs) const +{ + return lhs->index < rhs->index; +} diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index a9460e562e..5218a75e9d 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -3839,7 +3839,7 @@ void FindStationsAroundTiles(const TileArea &location, StationList *stations) /* Insert the station in the set. This will fail if it has * already been added. */ - stations->Include(st); + stations->insert(st); } } } @@ -3867,9 +3867,7 @@ uint MoveGoodsToStation(CargoID type, uint amount, SourceType source_type, Sourc uint best_rating1 = 0; // rating of st1 uint best_rating2 = 0; // rating of st2 - for (Station * const *st_iter = all_stations->Begin(); st_iter != all_stations->End(); ++st_iter) { - Station *st = *st_iter; - + for (Station *st : *all_stations) { /* Is the station reserved exclusively for somebody else? */ if (st->owner != OWNER_NONE && st->town->exclusive_counter > 0 && st->town->exclusivity != st->owner) continue; diff --git a/src/station_type.h b/src/station_type.h index 495e95a082..42d64fcf89 100644 --- a/src/station_type.h +++ b/src/station_type.h @@ -12,9 +12,9 @@ #ifndef STATION_TYPE_H #define STATION_TYPE_H -#include "core/smallvec_type.hpp" #include "core/smallstack_type.hpp" #include "tilearea_type.h" +#include typedef uint16 StationID; typedef uint16 RoadStopID; @@ -90,8 +90,12 @@ enum CatchmentArea { static const uint MAX_LENGTH_STATION_NAME_CHARS = 32; ///< The maximum length of a station name in characters including '\0' +struct StationCompare { + bool operator() (const Station *lhs, const Station *rhs) const; +}; + /** List of stations */ -typedef SmallVector StationList; +typedef std::set StationList; /** * Structure contains cached list of stations nearby. The list From 94b40fd530f8ef348434d14a1c85fde66e25c98a Mon Sep 17 00:00:00 2001 From: peter1138 Date: Sun, 24 Feb 2019 19:16:24 +0000 Subject: [PATCH 458/622] Codechange: Convert IndustryVector to a std::set. --- src/cargomonitor.cpp | 6 +++--- src/economy.cpp | 5 +++-- src/industry_cmd.cpp | 9 +++++++-- src/station.cpp | 12 ++++++------ src/station_base.h | 11 ++++++++--- src/subsidy.cpp | 6 +++--- 6 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/cargomonitor.cpp b/src/cargomonitor.cpp index 40a029ac53..82f8d8e4cb 100644 --- a/src/cargomonitor.cpp +++ b/src/cargomonitor.cpp @@ -151,9 +151,9 @@ void AddCargoDelivery(CargoID cargo_type, CompanyID company, uint32 amount, Sour if (iter != _cargo_deliveries.end()) iter->second += amount; /* Industry delivery. */ - for (const Industry * const *ip = st->industries_near.Begin(); ip != st->industries_near.End(); ip++) { - if ((*ip)->index != dest) continue; - CargoMonitorID num = EncodeCargoIndustryMonitor(company, cargo_type, (*ip)->index); + for (Industry *ind : st->industries_near) { + if (ind->index != dest) continue; + CargoMonitorID num = EncodeCargoIndustryMonitor(company, cargo_type, ind->index); CargoMonitorMap::iterator iter = _cargo_deliveries.find(num); if (iter != _cargo_deliveries.end()) iter->second += amount; } diff --git a/src/economy.cpp b/src/economy.cpp index 2050640966..b02d4bd76b 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1044,8 +1044,9 @@ static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint n uint accepted = 0; - for (uint i = 0; i < st->industries_near.Length() && num_pieces != 0; i++) { - Industry *ind = st->industries_near[i]; + for (Industry *ind : st->industries_near) { + if (num_pieces == 0) break; + if (ind->index == source) continue; if (!_settings_game.station.serve_neutral_industries) { diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index cc05893fbe..b1e48f76b1 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -521,7 +521,7 @@ static bool TransportIndustryGoods(TileIndex tile) if (i->neutral_station != NULL && !_settings_game.station.serve_neutral_industries) { /* Industry has a neutral station. Use it and ignore any other nearby stations. */ - *neutral.Append() = i->neutral_station; + neutral.insert(i->neutral_station); } for (uint j = 0; j < lengthof(i->produced_cargo_waiting); j++) { @@ -534,7 +534,7 @@ static bool TransportIndustryGoods(TileIndex tile) i->this_month_production[j] += cw; - uint am = MoveGoodsToStation(i->produced_cargo[j], cw, ST_INDUSTRY, i->index, neutral.Length() != 0 ? &neutral : stations.GetStations()); + uint am = MoveGoodsToStation(i->produced_cargo[j], cw, ST_INDUSTRY, i->index, neutral.size() != 0 ? &neutral : stations.GetStations()); i->this_month_transported[j] += am; moved_cargo |= (am != 0); @@ -2907,3 +2907,8 @@ extern const TileTypeProcs _tile_type_industry_procs = { GetFoundation_Industry, // get_foundation_proc TerraformTile_Industry, // terraform_tile_proc }; + +bool IndustryCompare::operator() (const Industry *lhs, const Industry *rhs) const +{ + return lhs->index < rhs->index; +} diff --git a/src/station.cpp b/src/station.cpp index 04c5a66bd1..2fc1bdb455 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -307,8 +307,8 @@ Rect Station::GetCatchmentRect() const /** Rect and pointer to IndustryVector */ struct RectAndIndustryVector { - Rect rect; ///< The rectangle to search the industries in. - IndustryVector *industries_near; ///< The nearby industries. + Rect rect; ///< The rectangle to search the industries in. + IndustryList *industries_near; ///< The nearby industries. }; /** @@ -328,7 +328,7 @@ static bool FindIndustryToDeliver(TileIndex ind_tile, void *user_data) Industry *ind = Industry::GetByTile(ind_tile); /* Don't check further if this industry is already in the list */ - if (riv->industries_near->Contains(ind)) return false; + if (riv->industries_near->find(ind) != riv->industries_near->end()) return false; /* Only process tiles in the station acceptance rectangle */ int x = TileX(ind_tile); @@ -342,7 +342,7 @@ static bool FindIndustryToDeliver(TileIndex ind_tile, void *user_data) } if (cargo_index >= lengthof(ind->accepts_cargo)) return false; - *riv->industries_near->Append() = ind; + riv->industries_near->insert(ind); return false; } @@ -353,12 +353,12 @@ static bool FindIndustryToDeliver(TileIndex ind_tile, void *user_data) */ void Station::RecomputeIndustriesNear() { - this->industries_near.Clear(); + this->industries_near.clear(); if (this->rect.IsEmpty()) return; if (!_settings_game.station.serve_neutral_industries && this->industry != NULL) { /* Station is associated with an industry, so we only need to deliver to that industry. */ - *this->industries_near.Append() = this->industry; + this->industries_near.insert(this->industry); return; } diff --git a/src/station_base.h b/src/station_base.h index 0ea960bb10..d1e62f6146 100644 --- a/src/station_base.h +++ b/src/station_base.h @@ -20,6 +20,7 @@ #include "linkgraph/linkgraph_type.h" #include "newgrf_storage.h" #include +#include typedef Pool StationPool; extern StationPool _station_pool; @@ -440,7 +441,11 @@ private: } }; -typedef SmallVector IndustryVector; +struct IndustryCompare { + bool operator() (const Industry *lhs, const Industry *rhs) const; +}; + +typedef std::set IndustryList; /** Station data structure */ struct Station FINAL : SpecializedStation { @@ -472,8 +477,8 @@ public: GoodsEntry goods[NUM_CARGO]; ///< Goods at this station CargoTypes always_accepted; ///< Bitmask of always accepted cargo types (by houses, HQs, industry tiles when industry doesn't accept cargo) - IndustryVector industries_near; ///< Cached list of industries near the station that can accept cargo, @see DeliverGoodsToIndustry() - Industry *industry; ///< NOSAVE: Associated industry for neutral stations. (Rebuilt on load from Industry->st) + IndustryList industries_near; ///< Cached list of industries near the station that can accept cargo, @see DeliverGoodsToIndustry() + Industry *industry; ///< NOSAVE: Associated industry for neutral stations. (Rebuilt on load from Industry->st) Station(TileIndex tile = INVALID_TILE); ~Station(); diff --git a/src/subsidy.cpp b/src/subsidy.cpp index d1fda0f0ac..1b375d2150 100644 --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -596,9 +596,9 @@ bool CheckSubsidised(CargoID cargo_type, CompanyID company, SourceType src_type, if (s->cargo_type == cargo_type && s->src_type == src_type && s->src == src && (!s->IsAwarded() || s->awarded == company)) { switch (s->dst_type) { case ST_INDUSTRY: - for (const Industry * const *ip = st->industries_near.Begin(); ip != st->industries_near.End(); ip++) { - if (s->dst == (*ip)->index) { - assert((*ip)->part_of_subsidy & POS_DST); + for (Industry *ind : st->industries_near) { + if (s->dst == ind->index) { + assert(ind->part_of_subsidy & POS_DST); subsidised = true; if (!s->IsAwarded()) s->AwardTo(company); } From 3542ed53d4b79df3018a3291db8d8e97e20db273 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 18 Feb 2019 22:17:09 +0000 Subject: [PATCH 459/622] Add: BitmapTileArea and Iterator to handle sparse tile areas. --- projects/openttd_vs140.vcxproj | 1 + projects/openttd_vs140.vcxproj.filters | 3 + projects/openttd_vs141.vcxproj | 1 + projects/openttd_vs141.vcxproj.filters | 3 + projects/openttd_vs142.vcxproj | 1 + projects/openttd_vs142.vcxproj.filters | 3 + source.list | 1 + src/bitmap_type.h | 120 +++++++++++++++++++++++++ 8 files changed, 133 insertions(+) create mode 100644 src/bitmap_type.h diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index c5137a61d4..ded9b92678 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -448,6 +448,7 @@ + diff --git a/projects/openttd_vs140.vcxproj.filters b/projects/openttd_vs140.vcxproj.filters index 751e54887c..cfc4199cc6 100644 --- a/projects/openttd_vs140.vcxproj.filters +++ b/projects/openttd_vs140.vcxproj.filters @@ -432,6 +432,9 @@ Header Files + + Header Files + Header Files diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj index 66974da28f..d550186c12 100644 --- a/projects/openttd_vs141.vcxproj +++ b/projects/openttd_vs141.vcxproj @@ -448,6 +448,7 @@ + diff --git a/projects/openttd_vs141.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters index 751e54887c..cfc4199cc6 100644 --- a/projects/openttd_vs141.vcxproj.filters +++ b/projects/openttd_vs141.vcxproj.filters @@ -432,6 +432,9 @@ Header Files + + Header Files + Header Files diff --git a/projects/openttd_vs142.vcxproj b/projects/openttd_vs142.vcxproj index f0a75ff827..92327ad252 100644 --- a/projects/openttd_vs142.vcxproj +++ b/projects/openttd_vs142.vcxproj @@ -448,6 +448,7 @@ + diff --git a/projects/openttd_vs142.vcxproj.filters b/projects/openttd_vs142.vcxproj.filters index 751e54887c..cfc4199cc6 100644 --- a/projects/openttd_vs142.vcxproj.filters +++ b/projects/openttd_vs142.vcxproj.filters @@ -432,6 +432,9 @@ Header Files + + Header Files + Header Files diff --git a/source.list b/source.list index 5bc395a840..c96b99bb97 100644 --- a/source.list +++ b/source.list @@ -135,6 +135,7 @@ autoslope.h base_media_base.h base_media_func.h base_station_base.h +bitmap_type.h bmp.h bridge.h cargo_type.h diff --git a/src/bitmap_type.h b/src/bitmap_type.h new file mode 100644 index 0000000000..11a4190938 --- /dev/null +++ b/src/bitmap_type.h @@ -0,0 +1,120 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file bitmap_type.hpp Bitmap functions. */ + +#ifndef BITMAP_TYPE_HPP +#define BITMAP_TYPE_HPP + +#include + +/** Represents a tile area containing containing individually set tiles. + * Each tile must be contained within the preallocated area. + * A std::vector is used to mark which tiles are contained. + */ +class BitmapTileArea : public TileArea { +protected: + std::vector data; + + inline uint Index(uint x, uint y) const { return y * this->w + x; } + + inline uint Index(TileIndex tile) const { return Index(TileX(tile) - TileX(this->tile), TileY(tile) - TileY(this->tile)); } + +public: + BitmapTileArea() + { + this->tile = INVALID_TILE; + this->w = 0; + this->h = 0; + } + + /** + * Reset and clear the BitmapTileArea. + */ + void Reset() + { + this->tile = INVALID_TILE; + this->w = 0; + this->h = 0; + this->data.clear(); + } + + /** + * Initialize the BitmapTileArea with the specified Rect. + * @param rect Rect to use. + */ + void Initialize(Rect r) + { + this->tile = TileXY(r.left, r.top); + this->w = r.right - r.left + 1; + this->h = r.bottom - r.top + 1; + this->data.clear(); + this->data.resize(Index(w, h)); + } + + /** + * Add a tile as part of the tile area. + * @param tile Tile to add. + */ + inline void SetTile(TileIndex tile) + { + assert(this->Contains(tile)); + this->data[Index(tile)] = true; + } + + /** + * Clear a tile from the tile area. + * @param tile Tile to clear + */ + inline void ClrTile(TileIndex tile) + { + assert(this->Contains(tile)); + this->data[Index(tile)] = false; + } + + /** + * Test if a tile is part of the tile area. + * @param tile Tile to check + */ + inline bool HasTile(TileIndex tile) const + { + return this->Contains(tile) && this->data[Index(tile)]; + } +}; + +/** Iterator to iterate over all tiles belonging to a bitmaptilearea. */ +class BitmapTileIterator : public OrthogonalTileIterator { +protected: + const BitmapTileArea *bitmap; +public: + /** + * Construct the iterator. + * @param bitmap BitmapTileArea to iterate. + */ + BitmapTileIterator(const BitmapTileArea &bitmap) : OrthogonalTileIterator(bitmap), bitmap(&bitmap) + { + if (!this->bitmap->HasTile(TileIndex(this->tile))) ++(*this); + } + + inline TileIterator& operator ++() + { + (*this).OrthogonalTileIterator::operator++(); + while (this->tile != INVALID_TILE && !this->bitmap->HasTile(TileIndex(this->tile))) { + (*this).OrthogonalTileIterator::operator++(); + } + return *this; + } + + virtual TileIterator *Clone() const + { + return new BitmapTileIterator(*this); + } +}; + +#endif /* BITMAP_TYPE_HPP */ From 8b1b3fd0f91fd30d09d3acaa65bd9a7d23d966cc Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 14 Feb 2019 21:07:15 +0000 Subject: [PATCH 460/622] Feature: Non-rectangular sparse station catchment area. --- src/economy.cpp | 5 - src/industry.h | 1 + src/industry_cmd.cpp | 56 +++++++--- src/saveload/afterload.cpp | 4 +- src/script/api/script_industry.cpp | 4 +- src/settings.cpp | 2 +- src/station.cpp | 169 +++++++++++++++++++++-------- src/station_base.h | 14 ++- src/station_cmd.cpp | 133 ++++++++++++----------- src/station_func.h | 4 +- src/subsidy.cpp | 14 +-- src/town.h | 1 + src/town_cmd.cpp | 25 ++++- 13 files changed, 285 insertions(+), 147 deletions(-) diff --git a/src/economy.cpp b/src/economy.cpp index b02d4bd76b..197298d9b2 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1049,11 +1049,6 @@ static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint n if (ind->index == source) continue; - if (!_settings_game.station.serve_neutral_industries) { - /* If this industry is only served by its neutral station, check it's us. */ - if (ind->neutral_station != NULL && ind->neutral_station != st) continue; - } - uint cargo_index; for (cargo_index = 0; cargo_index < lengthof(ind->accepts_cargo); cargo_index++) { if (cargo_type == ind->accepts_cargo[cargo_index]) break; diff --git a/src/industry.h b/src/industry.h index b7a954d404..4822976f24 100644 --- a/src/industry.h +++ b/src/industry.h @@ -63,6 +63,7 @@ struct Industry : IndustryPool::PoolItem<&_industry_pool> { byte was_cargo_delivered; ///< flag that indicate this has been the closest industry chosen for cargo delivery by a station. see DeliverGoodsToIndustry PartOfSubsidyByte part_of_subsidy; ///< NOSAVE: is this industry a source/destination of a subsidy? + StationList stations_near; ///< NOSAVE: List of nearby stations. OwnerByte founder; ///< Founder of the industry Date construction_date; ///< Date of the construction of the industry diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index b1e48f76b1..a4863ab126 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -182,6 +182,10 @@ Industry::~Industry() DeleteSubsidyWith(ST_INDUSTRY, this->index); CargoPacket::InvalidateAllFrom(ST_INDUSTRY, this->index); + + for (Station *st : this->stations_near) { + st->industries_near.erase(this); + } } /** @@ -191,7 +195,6 @@ Industry::~Industry() void Industry::PostDestructor(size_t index) { InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, 0); - Station::RecomputeIndustriesNearForAll(); } @@ -516,14 +519,6 @@ static bool TransportIndustryGoods(TileIndex tile) const IndustrySpec *indspec = GetIndustrySpec(i->type); bool moved_cargo = false; - StationFinder stations(i->location); - StationList neutral; - - if (i->neutral_station != NULL && !_settings_game.station.serve_neutral_industries) { - /* Industry has a neutral station. Use it and ignore any other nearby stations. */ - neutral.insert(i->neutral_station); - } - for (uint j = 0; j < lengthof(i->produced_cargo_waiting); j++) { uint cw = min(i->produced_cargo_waiting[j], 255); if (cw > indspec->minimal_cargo && i->produced_cargo[j] != CT_INVALID) { @@ -534,7 +529,7 @@ static bool TransportIndustryGoods(TileIndex tile) i->this_month_production[j] += cw; - uint am = MoveGoodsToStation(i->produced_cargo[j], cw, ST_INDUSTRY, i->index, neutral.size() != 0 ? &neutral : stations.GetStations()); + uint am = MoveGoodsToStation(i->produced_cargo[j], cw, ST_INDUSTRY, i->index, &i->stations_near); i->this_month_transported[j] += am; moved_cargo |= (am != 0); @@ -1650,6 +1645,37 @@ static void AdvertiseIndustryOpening(const Industry *ind) Game::NewEvent(new ScriptEventIndustryOpen(ind->index)); } +/** + * Populate an industry's list of nearby stations, and if it accepts any cargo, also + * add the industry to each station's nearby industry list. + * @param ind Industry + */ +static void PopulateStationsNearby(Industry *ind) +{ + if (ind->neutral_station != NULL && !_settings_game.station.serve_neutral_industries) { + /* Industry has a neutral station. Use it and ignore any other nearby stations. */ + ind->stations_near.insert(ind->neutral_station); + ind->neutral_station->industries_near.clear(); + ind->neutral_station->industries_near.insert(ind); + return; + } + + /* Get our list of nearby stations. */ + FindStationsAroundTiles(ind->location, &ind->stations_near, false); + + /* Test if industry can accept cargo */ + uint cargo_index; + for (cargo_index = 0; cargo_index < lengthof(ind->accepts_cargo); cargo_index++) { + if (ind->accepts_cargo[cargo_index] != CT_INVALID) break; + } + if (cargo_index >= lengthof(ind->accepts_cargo)) return; + + /* Cargo is accepted, add industry to nearby stations nearby industry list. */ + for (Station *st : ind->stations_near) { + st->industries_near.insert(ind); + } +} + /** * Put an industry on the map. * @param i Just allocated poolitem, mostly empty. @@ -1823,7 +1849,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, } InvalidateWindowData(WC_INDUSTRY_DIRECTORY, 0, 0); - Station::RecomputeIndustriesNearForAll(); + if (!_generating_world) PopulateStationsNearby(i); } /** @@ -2428,11 +2454,7 @@ static void CanCargoServiceIndustry(CargoID cargo, Industry *ind, bool *c_accept */ static int WhoCanServiceIndustry(Industry *ind) { - /* Find all stations within reach of the industry */ - StationList stations; - FindStationsAroundTiles(ind->location, &stations); - - if (stations.size() == 0) return 0; // No stations found at all => nobody services + if (ind->stations_near.size() == 0) return 0; // No stations found at all => nobody services const Vehicle *v; int result = 0; @@ -2468,7 +2490,7 @@ static int WhoCanServiceIndustry(Industry *ind) /* Same cargo produced by industry is dropped here => not serviced by vehicle v */ if ((o->GetUnloadType() & OUFB_UNLOAD) && !c_accepts) break; - if (stations.find(st) != stations.end()) { + if (ind->stations_near.find(st) != ind->stations_near.end()) { if (v->owner == _local_company) return 2; // Company services industry result = 1; // Competitor services industry } diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index a29635eab2..87e870056f 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -285,7 +285,6 @@ static void InitializeWindowsAndCaches() GroupStatistics::UpdateAfterLoad(); - Station::RecomputeIndustriesNearForAll(); RebuildSubsidisedSourceAndDestinationCache(); /* Towns have a noise controlled number of airports system @@ -3104,6 +3103,9 @@ bool AfterLoadGame() FOR_ALL_INDUSTRIES(ind) if (ind->neutral_station != NULL) ind->neutral_station->industry = ind; } + /* Compute station catchment areas. This is needed here in case UpdateStationAcceptance is called below. */ + Station::RecomputeCatchmentForAll(); + /* Station acceptance is some kind of cache */ if (IsSavegameVersionBefore(SLV_127)) { Station *st; diff --git a/src/script/api/script_industry.cpp b/src/script/api/script_industry.cpp index b9025307bb..68bb9003dd 100644 --- a/src/script/api/script_industry.cpp +++ b/src/script/api/script_industry.cpp @@ -132,9 +132,7 @@ if (!IsValidIndustry(industry_id)) return -1; Industry *ind = ::Industry::Get(industry_id); - StationList stations; - ::FindStationsAroundTiles(ind->location, &stations); - return (int32)stations.size(); + return (int32)ind->stations_near.size(); } /* static */ int32 ScriptIndustry::GetDistanceManhattanToTile(IndustryID industry_id, TileIndex tile) diff --git a/src/settings.cpp b/src/settings.cpp index b93f4d7066..d324ffc298 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1302,7 +1302,7 @@ static bool ChangeMaxHeightLevel(int32 p1) static bool StationCatchmentChanged(int32 p1) { - Station::RecomputeIndustriesNearForAll(); + Station::RecomputeCatchmentForAll(); return true; } diff --git a/src/station.cpp b/src/station.cpp index 2fc1bdb455..27063dcd7a 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -23,6 +23,7 @@ #include "station_base.h" #include "roadstop_base.h" #include "industry.h" +#include "town.h" #include "core/random_func.hpp" #include "linkgraph/linkgraph.h" #include "linkgraph/linkgraphschedule.h" @@ -119,6 +120,9 @@ Station::~Station() } } + /* Remove station from industries and towns that reference it. */ + this->RemoveFromAllNearbyLists(); + /* Clear the persistent storage. */ delete this->airport.psa; @@ -261,6 +265,39 @@ void Station::MarkTilesDirty(bool cargo_change) const return length; } +/** + * Get the catchment size of an individual station tile. + * @param tile Station tile to get catchment size of. + * @param st Associated station of station tile. + * @pre IsTileType(tile, MP_STATION) + * @return The catchment size of the station tile. + */ +static uint GetTileCatchmentRadius(TileIndex tile, const Station *st) +{ + assert(IsTileType(tile, MP_STATION)); + + if (_settings_game.station.modified_catchment) { + switch (GetStationType(tile)) { + case STATION_RAIL: return CA_TRAIN; + case STATION_OILRIG: return CA_UNMODIFIED; + case STATION_AIRPORT: return st->airport.GetSpec()->catchment; + case STATION_TRUCK: return CA_TRUCK; + case STATION_BUS: return CA_BUS; + case STATION_DOCK: return CA_DOCK; + + default: NOT_REACHED(); + case STATION_BUOY: + case STATION_WAYPOINT: return CA_NONE; + } + } else { + switch (GetStationType(tile)) { + default: return CA_UNMODIFIED; + case STATION_BUOY: + case STATION_WAYPOINT: return CA_NONE; + } + } +} + /** * Determines the catchment radius of the station * @return The radius @@ -305,85 +342,127 @@ Rect Station::GetCatchmentRect() const return ret; } -/** Rect and pointer to IndustryVector */ -struct RectAndIndustryVector { - Rect rect; ///< The rectangle to search the industries in. - IndustryList *industries_near; ///< The nearby industries. -}; - /** - * Callback function for Station::RecomputeIndustriesNear() - * Tests whether tile is an industry and possibly adds - * the industry to station's industries_near list. - * @param ind_tile tile to check - * @param user_data pointer to RectAndIndustryVector - * @return always false, we want to search all tiles + * Add nearby industry to station's industries_near list if it accepts cargo. + * @param ind Industry + * @param st Station */ -static bool FindIndustryToDeliver(TileIndex ind_tile, void *user_data) +static void AddIndustryToDeliver(Industry *ind, Station *st) { - /* Only process industry tiles */ - if (!IsTileType(ind_tile, MP_INDUSTRY)) return false; - - RectAndIndustryVector *riv = (RectAndIndustryVector *)user_data; - Industry *ind = Industry::GetByTile(ind_tile); - /* Don't check further if this industry is already in the list */ - if (riv->industries_near->find(ind) != riv->industries_near->end()) return false; - - /* Only process tiles in the station acceptance rectangle */ - int x = TileX(ind_tile); - int y = TileY(ind_tile); - if (x < riv->rect.left || x > riv->rect.right || y < riv->rect.top || y > riv->rect.bottom) return false; + if (st->industries_near.find(ind) != st->industries_near.end()) return; /* Include only industries that can accept cargo */ uint cargo_index; for (cargo_index = 0; cargo_index < lengthof(ind->accepts_cargo); cargo_index++) { if (ind->accepts_cargo[cargo_index] != CT_INVALID) break; } - if (cargo_index >= lengthof(ind->accepts_cargo)) return false; + if (cargo_index >= lengthof(ind->accepts_cargo)) return; - riv->industries_near->insert(ind); + st->industries_near.insert(ind); +} +/** + * Remove this station from the nearby stations lists of all towns and industries. + */ +void Station::RemoveFromAllNearbyLists() +{ + Town *t; + FOR_ALL_TOWNS(t) { t->stations_near.erase(this); } + Industry *i; + FOR_ALL_INDUSTRIES(i) { i->stations_near.erase(this); } +} + +/** + * Test if the given town ID is covered by our catchment area. + * This is used when removing a house tile to determine if it was the last house tile + * within our catchment. + * @param t TownID to test. + * @return true if at least one house tile of TownID is covered. + */ +bool Station::CatchmentCoversTown(TownID t) const +{ + BitmapTileIterator it(this->catchment_tiles); + for (TileIndex tile = it; tile != INVALID_TILE; tile = ++it) { + if (IsTileType(tile, MP_HOUSE) && GetTownIndex(tile) == t) return true; + } return false; } /** - * Recomputes Station::industries_near, list of industries possibly - * accepting cargo in station's catchment radius + * Recompute tiles covered in our catchment area. + * This will additionally recompute nearby towns and industries. */ -void Station::RecomputeIndustriesNear() +void Station::RecomputeCatchment() { this->industries_near.clear(); - if (this->rect.IsEmpty()) return; + this->RemoveFromAllNearbyLists(); + + if (this->rect.IsEmpty()) { + this->catchment_tiles.Reset(); + return; + } + this->catchment_tiles.Initialize(GetCatchmentRect()); if (!_settings_game.station.serve_neutral_industries && this->industry != NULL) { /* Station is associated with an industry, so we only need to deliver to that industry. */ + TILE_AREA_LOOP(tile, this->industry->location) { + if (IsTileType(tile, MP_INDUSTRY) && GetIndustryIndex(tile) == this->industry->index) { + this->catchment_tiles.SetTile(tile); + } + } + /* The industry's stations_near may have been computed before its neutral station was built so clear and re-add here. */ + for (Station *st : this->industry->stations_near) { + st->industries_near.erase(this->industry); + } + this->industry->stations_near.clear(); + this->industry->stations_near.insert(this); this->industries_near.insert(this->industry); return; } - RectAndIndustryVector riv = { - this->GetCatchmentRect(), - &this->industries_near - }; + /* Loop finding all station tiles */ + TileArea ta(TileXY(this->rect.left, this->rect.top), TileXY(this->rect.right, this->rect.bottom)); + TILE_AREA_LOOP(tile, ta) { + if (!IsTileType(tile, MP_STATION) || GetStationIndex(tile) != this->index) continue; - /* Compute maximum extent of acceptance rectangle wrt. station sign */ - TileIndex start_tile = this->xy; - uint max_radius = max( - max(DistanceManhattan(start_tile, TileXY(riv.rect.left, riv.rect.top)), DistanceManhattan(start_tile, TileXY(riv.rect.left, riv.rect.bottom))), - max(DistanceManhattan(start_tile, TileXY(riv.rect.right, riv.rect.top)), DistanceManhattan(start_tile, TileXY(riv.rect.right, riv.rect.bottom))) - ); + uint r = GetTileCatchmentRadius(tile, this); + if (r == CA_NONE) continue; - CircularTileSearch(&start_tile, 2 * max_radius + 1, &FindIndustryToDeliver, &riv); + /* This tile sub-loop doesn't need to test any tiles, they are simply added to the catchment set. */ + TileArea ta2(TileXY(max(TileX(tile) - r, 0), max(TileY(tile) - r, 0)), TileXY(min(TileX(tile) + r, MapMaxX()), min(TileY(tile) + r, MapMaxY()))); + TILE_AREA_LOOP(tile2, ta2) this->catchment_tiles.SetTile(tile2); + } + + /* Search catchment tiles for towns and industries */ + BitmapTileIterator it(this->catchment_tiles); + for (TileIndex tile = it; tile != INVALID_TILE; tile = ++it) { + if (IsTileType(tile, MP_HOUSE)) { + Town *t = Town::GetByTile(tile); + t->stations_near.insert(this); + } + if (IsTileType(tile, MP_INDUSTRY)) { + Industry *i = Industry::GetByTile(tile); + + /* Ignore industry if it has a neutral station. It already can't be this station. */ + if (!_settings_game.station.serve_neutral_industries && i->neutral_station != NULL) continue; + + i->stations_near.insert(this); + + /* Add if we can deliver to this industry as well */ + AddIndustryToDeliver(i, this); + } + } } /** - * Recomputes Station::industries_near for all stations + * Recomputes catchment of all stations. + * This will additionally recompute nearby stations for all towns and industries. */ -/* static */ void Station::RecomputeIndustriesNearForAll() +/* static */ void Station::RecomputeCatchmentForAll() { Station *st; - FOR_ALL_STATIONS(st) st->RecomputeIndustriesNear(); + FOR_ALL_STATIONS(st) { st->RecomputeCatchment(); } } /************************************************************************/ diff --git a/src/station_base.h b/src/station_base.h index d1e62f6146..a48daa653c 100644 --- a/src/station_base.h +++ b/src/station_base.h @@ -19,6 +19,7 @@ #include "industry_type.h" #include "linkgraph/linkgraph_type.h" #include "newgrf_storage.h" +#include "bitmap_type.h" #include #include @@ -467,6 +468,8 @@ public: IndustryType indtype; ///< Industry type to get the name from + BitmapTileArea catchment_tiles; ///< NOSAVE: Set of individual tiles covered by catchment area + StationHadVehicleOfTypeByte had_vehicle_of_type; byte time_since_load; @@ -493,11 +496,18 @@ public: /* virtual */ uint GetPlatformLength(TileIndex tile, DiagDirection dir) const; /* virtual */ uint GetPlatformLength(TileIndex tile) const; - void RecomputeIndustriesNear(); - static void RecomputeIndustriesNearForAll(); + void RecomputeCatchment(); + static void RecomputeCatchmentForAll(); uint GetCatchmentRadius() const; Rect GetCatchmentRect() const; + bool CatchmentCoversTown(TownID t) const; + void RemoveFromAllNearbyLists(); + + inline bool TileIsInCatchment(TileIndex tile) const + { + return this->catchment_tiles.HasTile(tile); + } /* virtual */ inline bool TileBelongsToRailStation(TileIndex tile) const { diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 5218a75e9d..2006243cb7 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -527,7 +527,7 @@ CargoArray GetProductionAroundTiles(TileIndex tile, int w, int h, int rad) * @param always_accepted bitmask of cargo accepted by houses and headquarters; can be NULL * @param ind Industry associated with neutral station (e.g. oil rig) or NULL */ -CargoArray GetAcceptanceAroundTiles(TileIndex tile, int w, int h, int rad, CargoTypes *always_accepted, const Industry *ind) +CargoArray GetAcceptanceAroundTiles(TileIndex tile, int w, int h, int rad, CargoTypes *always_accepted) { CargoArray acceptance; if (always_accepted != NULL) *always_accepted = 0; @@ -551,14 +551,9 @@ CargoArray GetAcceptanceAroundTiles(TileIndex tile, int w, int h, int rad, Cargo for (int xc = x1; xc != x2; xc++) { TileIndex tile = TileXY(xc, yc); - if (!_settings_game.station.serve_neutral_industries) { - if (ind != NULL) { - if (!IsTileType(tile, MP_INDUSTRY)) continue; - if (Industry::GetByTile(tile) != ind) continue; - } else { - if (IsTileType(tile, MP_INDUSTRY) && Industry::GetByTile(tile)->neutral_station != NULL) continue; - } - } + /* Ignore industry if it has a neutral station. */ + if (!_settings_game.station.serve_neutral_industries && IsTileType(tile, MP_INDUSTRY) && Industry::GetByTile(tile)->neutral_station != NULL) continue; + AddAcceptedCargo(tile, acceptance, always_accepted); } } @@ -566,6 +561,24 @@ CargoArray GetAcceptanceAroundTiles(TileIndex tile, int w, int h, int rad, Cargo return acceptance; } +/** + * Get the acceptance of cargoes around the station in. + * @param st Station to get acceptance of. + * @param always_accepted bitmask of cargo accepted by houses and headquarters; can be NULL + */ +static CargoArray GetAcceptanceAroundStation(const Station *st, CargoTypes *always_accepted) +{ + CargoArray acceptance; + if (always_accepted != NULL) *always_accepted = 0; + + BitmapTileIterator it(st->catchment_tiles); + for (TileIndex tile = it; tile != INVALID_TILE; tile = ++it) { + AddAcceptedCargo(tile, acceptance, always_accepted); + } + + return acceptance; +} + /** * Update the acceptance for a station. * @param st Station to update @@ -579,14 +592,7 @@ void UpdateStationAcceptance(Station *st, bool show_msg) /* And retrieve the acceptance. */ CargoArray acceptance; if (!st->rect.IsEmpty()) { - acceptance = GetAcceptanceAroundTiles( - TileXY(st->rect.left, st->rect.top), - st->rect.right - st->rect.left + 1, - st->rect.bottom - st->rect.top + 1, - st->GetCatchmentRadius(), - &st->always_accepted, - _settings_game.station.serve_neutral_industries ? NULL : st->industry - ); + acceptance = GetAcceptanceAroundStation(st, &st->always_accepted); } /* Adjust in case our station only accepts fewer kinds of goods */ @@ -736,7 +742,7 @@ static void DeleteStationIfEmpty(BaseStation *st) void Station::AfterStationTileSetChange(bool adding, StationType type) { this->UpdateVirtCoord(); - this->RecomputeIndustriesNear(); + this->RecomputeCatchment(); DirtyCompanyInfrastructureWindows(this->owner); if (adding) InvalidateWindowData(WC_STATION_LIST, this->owner, 0); @@ -1643,7 +1649,7 @@ CommandCost CmdRemoveFromRailStation(TileIndex start, DoCommandFlag flags, uint3 if (st->train_station.tile == INVALID_TILE) SetWindowWidgetDirty(WC_STATION_VIEW, st->index, WID_SV_TRAINS); st->MarkTilesDirty(false); - st->RecomputeIndustriesNear(); + st->RecomputeCatchment(); } /* Now apply the rail cost to the number that we deleted */ @@ -1726,7 +1732,7 @@ static CommandCost RemoveRailStation(TileIndex tile, DoCommandFlag flags) Station *st = Station::GetByTile(tile); CommandCost cost = RemoveRailStation(st, flags, _price[PR_CLEAR_STATION_RAIL]); - if (flags & DC_EXEC) st->RecomputeIndustriesNear(); + if (flags & DC_EXEC) st->RecomputeCatchment(); return cost; } @@ -3215,9 +3221,8 @@ void TriggerWatchedCargoCallbacks(Station *st) if (cargoes == 0) return; /* Loop over all houses in the catchment. */ - Rect r = st->GetCatchmentRect(); - TileArea ta(TileXY(r.left, r.top), TileXY(r.right, r.bottom)); - TILE_AREA_LOOP(tile, ta) { + BitmapTileIterator it(st->catchment_tiles); + for (TileIndex tile = it; tile != INVALID_TILE; tile = ++it) { if (IsTileType(tile, MP_HOUSE)) { WatchedCargoCallback(tile, cargoes); } @@ -3623,7 +3628,7 @@ void IncreaseStats(Station *st, const Vehicle *front, StationID next_station_id) * As usage is not such an important figure anyway we just * ignore the additional cargo then.*/ IncreaseStats(st, v->cargo_type, next_station_id, v->refit_cap, - min(v->refit_cap, v->cargo.StoredCount()), EUM_INCREASE); + min(v->refit_cap, v->cargo.StoredCount()), EUM_INCREASE); } } } @@ -3789,57 +3794,63 @@ CommandCost CmdRenameStation(TileIndex tile, DoCommandFlag flags, uint32 p1, uin return CommandCost(); } +static void AddNearbyStationsByCatchment(TileIndex tile, StationList *stations, StationList &nearby) +{ + for (Station *st : nearby) { + if (st->TileIsInCatchment(tile)) stations->insert(st); + } +} + /** * Find all stations around a rectangular producer (industry, house, headquarter, ...) * * @param location The location/area of the producer * @param stations The list to store the stations in + * @param use_nearby Use nearby station list of industry/town associated with location.tile */ -void FindStationsAroundTiles(const TileArea &location, StationList *stations) +void FindStationsAroundTiles(const TileArea &location, StationList *stations, bool use_nearby) { - /* area to search = producer plus station catchment radius */ - uint max_rad = (_settings_game.station.modified_catchment ? MAX_CATCHMENT : CA_UNMODIFIED); + if (use_nearby) { + /* Industries and towns maintain a list of nearby stations */ + if (IsTileType(location.tile, MP_INDUSTRY)) { + /* Industry nearby stations are already filtered by catchment. */ + stations = &Industry::GetByTile(location.tile)->stations_near; + return; + } else if (IsTileType(location.tile, MP_HOUSE)) { + /* Town nearby stations need to be filtered per tile. */ + assert(location.w == 1 && location.h == 1); + AddNearbyStationsByCatchment(location.tile, stations, Town::GetByTile(location.tile)->stations_near); + return; + } + } + /* Not using, or don't have a nearby stations list, so we need to scan. */ uint x = TileX(location.tile); uint y = TileY(location.tile); - uint min_x = (x > max_rad) ? x - max_rad : 0; - uint max_x = x + location.w + max_rad; - uint min_y = (y > max_rad) ? y - max_rad : 0; - uint max_y = y + location.h + max_rad; + std::set seen_stations; - IndustryID ind = IsTileType(location.tile, MP_INDUSTRY) ? GetIndustryIndex(location.tile) : INVALID_INDUSTRY; + /* Scan an area around the building covering the maximum possible station + * to find the possible nearby stations. */ + uint max_c = _settings_game.station.modified_catchment ? MAX_CATCHMENT : CA_UNMODIFIED; + TileArea ta(TileXY(max(0, x - max_c), max(0, y - max_c)), TileXY(min(MapMaxX(), x + location.w + max_c), min(MapMaxY(), y + location.h + max_c))); + TILE_AREA_LOOP(tile, ta) { + if (IsTileType(tile, MP_STATION)) seen_stations.insert(GetStationIndex(tile)); + } - if (min_x == 0 && _settings_game.construction.freeform_edges) min_x = 1; - if (min_y == 0 && _settings_game.construction.freeform_edges) min_y = 1; - if (max_x >= MapSizeX()) max_x = MapSizeX() - 1; - if (max_y >= MapSizeY()) max_y = MapSizeY() - 1; + for (StationID stationid : seen_stations) { + Station *st = Station::GetIfValid(stationid); + if (st == NULL) continue; /* Waypoint */ - for (uint cy = min_y; cy < max_y; cy++) { - for (uint cx = min_x; cx < max_x; cx++) { - TileIndex cur_tile = TileXY(cx, cy); - if (!IsTileType(cur_tile, MP_STATION)) continue; + /* Check if station is attached to an industry */ + if (!_settings_game.station.serve_neutral_industries && st->industry != NULL) continue; - Station *st = Station::GetByTile(cur_tile); - /* st can be NULL in case of waypoints */ - if (st == NULL) continue; - - /* Check if neutral station is attached to us */ - if (!_settings_game.station.serve_neutral_industries && st->industry != NULL && st->industry->index != ind) continue; - - if (_settings_game.station.modified_catchment) { - int rad = st->GetCatchmentRadius(); - int rad_x = cx - x; - int rad_y = cy - y; - - if (rad_x < -rad || rad_x >= rad + location.w) continue; - if (rad_y < -rad || rad_y >= rad + location.h) continue; + /* Test if the tile is within the station's catchment */ + TILE_AREA_LOOP(tile, location) { + if (st->TileIsInCatchment(tile)) { + stations->insert(st); + break; } - - /* Insert the station in the set. This will fail if it has - * already been added. - */ - stations->insert(st); } } } @@ -3950,8 +3961,8 @@ void BuildOilRig(TileIndex tile) st->rect.BeforeAddTile(tile, StationRect::ADD_FORCE); st->UpdateVirtCoord(); + st->RecomputeCatchment(); UpdateStationAcceptance(st, false); - st->RecomputeIndustriesNear(); } void DeleteOilRig(TileIndex tile) @@ -3968,7 +3979,7 @@ void DeleteOilRig(TileIndex tile) st->rect.AfterRemoveTile(st, tile); st->UpdateVirtCoord(); - st->RecomputeIndustriesNear(); + st->RecomputeCatchment(); if (!st->IsInUse()) delete st; } diff --git a/src/station_func.h b/src/station_func.h index ca3885e8bc..34e996d23e 100644 --- a/src/station_func.h +++ b/src/station_func.h @@ -23,13 +23,13 @@ void ModifyStationRatingAround(TileIndex tile, Owner owner, int amount, uint radius); -void FindStationsAroundTiles(const TileArea &location, StationList *stations); +void FindStationsAroundTiles(const TileArea &location, StationList *stations, bool use_nearby = true); void ShowStationViewWindow(StationID station); void UpdateAllStationVirtCoords(); CargoArray GetProductionAroundTiles(TileIndex tile, int w, int h, int rad); -CargoArray GetAcceptanceAroundTiles(TileIndex tile, int w, int h, int rad, CargoTypes *always_accepted = NULL, const Industry *ind = NULL); +CargoArray GetAcceptanceAroundTiles(TileIndex tile, int w, int h, int rad, CargoTypes *always_accepted = NULL); void UpdateStationAcceptance(Station *st, bool show_msg); diff --git a/src/subsidy.cpp b/src/subsidy.cpp index 1b375d2150..eac81e3624 100644 --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -573,15 +573,11 @@ bool CheckSubsidised(CargoID cargo_type, CompanyID company, SourceType src_type, if (s->cargo_type != cargo_type || s->src_type != src_type || s->src != src) continue; if (s->IsAwarded() && s->awarded != company) continue; - Rect rect = st->GetCatchmentRect(); - - for (int y = rect.top; y <= rect.bottom; y++) { - for (int x = rect.left; x <= rect.right; x++) { - TileIndex tile = TileXY(x, y); - if (!IsTileType(tile, MP_HOUSE)) continue; - const Town *t = Town::GetByTile(tile); - if (t->cache.part_of_subsidy & POS_DST) towns_near.Include(t); - } + BitmapTileIterator it(st->catchment_tiles); + for (TileIndex tile = it; tile != INVALID_TILE; tile = ++it) { + if (!IsTileType(tile, MP_HOUSE)) continue; + const Town *t = Town::GetByTile(tile); + if (t->cache.part_of_subsidy & POS_DST) towns_near.Include(t); } break; } diff --git a/src/town.h b/src/town.h index a905ea837b..6cff5f7617 100644 --- a/src/town.h +++ b/src/town.h @@ -88,6 +88,7 @@ struct Town : TownPool::PoolItem<&_town_pool> { CargoTypes cargo_produced; ///< Bitmap of all cargoes produced by houses in this town. AcceptanceMatrix cargo_accepted; ///< Bitmap of cargoes accepted by houses for each 4*4 map square of the town. CargoTypes cargo_accepted_total; ///< NOSAVE: Bitmap of all cargoes accepted by houses in this town. + StationList stations_near; ///< NOSAVE: List of nearby stations. uint16 time_until_rebuild; ///< time until we rebuild a house diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index d7cb45bb9a..4aad76f448 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -446,6 +446,22 @@ uint32 GetWorldPopulation() return pop; } +/** + * Remove stations from nearby station list if a town is no longer in the catchment area of each. + * @param t Town to work on + */ +static void RemoveNearbyStations(Town *t) +{ + for (StationList::iterator it = t->stations_near.begin(); it != t->stations_near.end(); /* incremented inside loop */) { + const Station *st = *it; + if (!st->CatchmentCoversTown(t->index)) { + it = t->stations_near.erase(it); + } else { + ++it; + } + } +} + /** * Helper function for house completion stages progression * @param tile TileIndex of the house (or parts of it) to "grow" @@ -599,7 +615,11 @@ static void TileLoop_Town(TileIndex tile) ClearTownHouse(t, tile); /* Rebuild with another house? */ - if (GB(r, 24, 8) >= 12) BuildTownHouse(t, tile); + if (GB(r, 24, 8) < 12 || !BuildTownHouse(t, tile)) + { + /* House wasn't replaced, so remove it */ + if (!_generating_world) RemoveNearbyStations(t); + } } cur_company.Restore(); @@ -628,6 +648,7 @@ static CommandCost ClearTile_Town(TileIndex tile, DoCommandFlag flags) ChangeTownRating(t, -rating, RATING_HOUSE_MINIMUM, flags); if (flags & DC_EXEC) { ClearTownHouse(t, tile); + RemoveNearbyStations(t); } return cost; @@ -2151,6 +2172,8 @@ static void MakeTownHouse(TileIndex t, Town *town, byte counter, byte stage, Hou if (size & BUILDING_2_TILES_Y) ClearMakeHouseTile(t + TileDiffXY(0, 1), town, counter, stage, ++type, random_bits); if (size & BUILDING_2_TILES_X) ClearMakeHouseTile(t + TileDiffXY(1, 0), town, counter, stage, ++type, random_bits); if (size & BUILDING_HAS_4_TILES) ClearMakeHouseTile(t + TileDiffXY(1, 1), town, counter, stage, ++type, random_bits); + + if (!_generating_world) FindStationsAroundTiles(TileArea(t, (size & BUILDING_2_TILES_X) ? 2 : 1, (size & BUILDING_2_TILES_Y) ? 2 : 1), &town->stations_near, false); } From 943c58e468d70a2cf77c11d346c8229030083d15 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 16 Feb 2019 00:15:21 +0000 Subject: [PATCH 461/622] Fix: Show industry name in Land Area Information window for oil-rig type stations instead of just 'Oil Rig' --- src/station_cmd.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 2006243cb7..cb588ef804 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -3054,7 +3054,14 @@ static void GetTileDesc_Station(TileIndex tile, TileDesc *td) break; case STATION_TRUCK: str = STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA; break; case STATION_BUS: str = STR_LAI_STATION_DESCRIPTION_BUS_STATION; break; - case STATION_OILRIG: str = STR_INDUSTRY_NAME_OIL_RIG; break; + case STATION_OILRIG: { + const Industry *i = Station::GetByTile(tile)->industry; + const IndustrySpec *is = GetIndustrySpec(i->type); + td->owner[0] = i->owner; + str = is->name; + if (is->grf_prop.grffile != NULL) td->grf = GetGRFConfig(is->grf_prop.grffile->grfid)->GetName(); + break; + } case STATION_DOCK: str = STR_LAI_STATION_DESCRIPTION_SHIP_DOCK; break; case STATION_BUOY: str = STR_LAI_STATION_DESCRIPTION_BUOY; break; case STATION_WAYPOINT: str = STR_LAI_STATION_DESCRIPTION_WAYPOINT; break; From 3a54c7104122e8c092949fbcedda7a35ea8a84e3 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 9 Mar 2019 19:45:44 +0100 Subject: [PATCH 462/622] Update: Translations from eints finnish: 46 changes by hpiirai danish: 10 changes by nielsmh hungarian: 2 changes by Brumi --- src/lang/danish.txt | 14 +++++-- src/lang/finnish.txt | 92 +++++++++++++++++++++--------------------- src/lang/hungarian.txt | 2 + 3 files changed, 58 insertions(+), 50 deletions(-) diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 8739dc5136..162962e3d8 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1184,6 +1184,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Tillad landskab STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Tillad landskabsformning under bygninger og spor uden at fjerne dem STR_CONFIG_SETTING_CATCHMENT :Tillad mere realistisk størrelse på stationernes opland: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Har forskellige størrelser oplande til forskellige typer af stationer og lufthavne +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Selskabers stationer kan betjene industrier med tilknyttede neutrale stationer: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Når aktiveret kan industries med tilknyttede stationer (så som Boreplatforme) også betjenes af andre selskabers stationer i nærheden. Når deaktiveret, kan disse industrier kun betjenes af deres egen tilknyttede station. Andre stationer i nærheden kan ikke betjene dem, og industriens tilknyttede station vil heller ikke betjene andet end industrien. STR_CONFIG_SETTING_EXTRADYNAMITE :Tillad nedriving af flere by-ejede veje, broer og tunneler: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Gør det nemmere at fjerne by-ejede infrastruktur og bygninger STR_CONFIG_SETTING_TRAIN_LENGTH :Den maksimale længde af tog: {STRING} @@ -1200,8 +1202,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Stejlhed af skr STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Skrånings stejlhed for vejkøretøjer: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Stejlhed af skrå felter for vej køretøjer. Højere værdier gør det vanskeligere at bestige en bakke -STR_CONFIG_SETTING_FORBID_90_DEG :Forbyd skibe og tog at dreje 90 grader: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 graders drejninger forekommer når et horisontalt spor er direkte efterfulgt af et lodret spor stykke på det tilstødende felt, hvorved toget drejer 90 grader ved kørsel på feltets kant stedet for de sædvanlige 45 grader for andre spor kombinationer. Dette gælder også for drejeradius af skibe +STR_CONFIG_SETTING_FORBID_90_DEG :Forbyd tog at dreje 90 grader: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 graders drejninger forekommer når et vandret sporstykke er direkte efterfulgt af et lodret sporstykke på det tilstødende felt. Således drejer toget 90 grader når det passerer feltets kant, i stedet for de sædvanlige 45 grader for andre sporkombinationer. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Tillad sammenkædning af stationer der ikke ligger direkte op ad hinanden: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Tillad at tilføje dele til en station uden direkte at berøre eksisterende dele. Ctrl+Klik for at sætte nye dele STR_CONFIG_SETTING_INFLATION :Inflation: {STRING} @@ -1257,8 +1259,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Fly hastigheds- STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Indstil den relative hastighed af fly i forhold til andre køretøjstyper, for at reducere mængden af indkomst for transport med fly STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Antal flystyrt: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Angiv chancen for et flystyrt sker -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ingen +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Angiv sandsynligheden for at fly styrter ned.{}* Store fly har altid en risiko for at styrte når de lander på små lufthavne. +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ingen* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :reduceret STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Tillad gennemkørsels-stop på veje ejet af en by: {STRING} @@ -1583,6 +1585,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Hvis denne inds STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Forbudt STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Tilladt STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Tilladt, tilpasset by-layout +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Godsgenerering i byer: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Hvor meget gods der bliver produceret af byers bygninger, i forhold til byens samlede indbyggertal.{}Kvadratisk vækst: En by med dobbelt indbyggertal genererer fire gange så mange passagerer.{}Lineær vækst: En by med dobbelt indbyggertal genererer dobbelt så mange passagerer. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kvadratisk (original) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineær STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Placering af træer i spillet: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Kontroller den tilfældige fremkomst af træer i løbet af spillet. Dette vil påvirke industrier der afhænger træers vækst, f.eks. savværker diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 0f6cb2aa4e..96f7541976 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -629,7 +629,7 @@ STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Yhteens ############ End of order list STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP :{BLACK}Liikennevälineiden määrä. Tähän kuuluvat ajoneuvot, junat, laivat ja lentokoneet STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Asemien osien määrä. Kaikki osat asemista (esim. rautatieasema, bussipysäkki, lentokenttä) lasketaan, vaikka ne olisivat yhdistettynä yhdeksi asemaksi. -STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP :{BLACK}Vähätuottoisimman ajoneuvon tulo (kaikkien yli 2 vuotta vanhojen ajoneuvojen) +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP :{BLACK}Vähätuottoisimman kulkuneuvon tulo (kaikkien yli 2 vuotta vanhojen kulkuneuvojen) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Viimeisen 12 neljänneksen vähätuottoisimman kuun käteistuoton määrä STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Viimeisen 12 neljänneksen korkeatuottoisimman kuun käteistuoton määrä STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Viimeisen neljän neljänneksen kuljetetun rahdin määrä @@ -848,7 +848,7 @@ STR_NEWS_AIRCRAFT_IS_WAITING :{WHITE}{VEHICLE # Order review system / warnings STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}Kulkuneuvolla {VEHICLE} on liian vähän käskyjä STR_NEWS_VEHICLE_HAS_VOID_ORDER :{WHITE}Kulkuneuvolla {VEHICLE} on virheellinen käsky -STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}Ajoneuvolla {VEHICLE} on toistuvia käskyjä +STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}Kulkuneuvolla {VEHICLE} on toistuvia käskyjä STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}Kulkuneuvon {VEHICLE} käskyissä on virheellinen asema STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}Kulkuneuvon {VEHICLE} käskyissä on lentokenttä, jonka kiitorata on liian lyhyt @@ -860,8 +860,8 @@ STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE STR_NEWS_VEHICLE_IS_UNPROFITABLE :{WHITE}Kulkuneuvon {VEHICLE} tulos viime vuonna oli {CURRENCY_LONG} STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} ei pääse seuraavaan määränpäähän koska se on toimintasäteen ulkopuolella -STR_NEWS_ORDER_REFIT_FAILED :{WHITE}Korvauksen epäonnistuminen pysäytti ajoneuvon {VEHICLE} -STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Automaattinen korvaus epäonnistui ajoneuvolle {VEHICLE}{}{STRING} +STR_NEWS_ORDER_REFIT_FAILED :{WHITE}Korvauksen epäonnistuminen pysäytti kulkuneuvon {VEHICLE} +STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Automaattinen korvaus epäonnistui kulkuneuvolle {VEHICLE}{}{STRING} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}Uusi {STRING} on nyt saatavilla! STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} @@ -1162,7 +1162,7 @@ STR_CONFIG_SETTING_RUNNING_COSTS :Käyttökustann STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Määritä kulkuneuvojen sekä infrastruktuurin ylläpito- ja käyttökustannusten taso STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Rakennusnopeus: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Rajoita tekoälyn rakennustoimien määrää -STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Ajoneuvojen hajoaminen: {STRING} +STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Kulkuneuvojen hajoaminen: {STRING} STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Määritä, kuinka usein puutteellisesti huolletut ajoneuvot voivat hajota STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Tukikerroin: {STRING} STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Määritä kuinka paljon tuetuista yhteyksistä maksetaan @@ -1190,7 +1190,7 @@ STR_CONFIG_SETTING_TRAIN_LENGTH :Junien maksimip STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Määrittää junien suurimman sallitun pituuden STR_CONFIG_SETTING_TILE_LENGTH :{COMMA} ruutu{P 0 "" a} STR_CONFIG_SETTING_SMOKE_AMOUNT :Kulkuneuvon savun/kipinöiden määrä: {STRING} -STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Määrittää kuinka paljon savua tai kipinöitä ajoneuvot saavat aikaan +STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Määrittää kuinka paljon savua tai kipinöitä kulkuneuvot saavat aikaan STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Junien kiihdytysmalli: {STRING} STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Valitsee junien käyttämän fysiikkamallin. "Alkuperäinen" malli hidastaa junia mäissä tasapuolisesti. "Realistinen" malli hidastaa junia mäissä ja mutkissa junan ominaisuuksista riippuen STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Ajoneuvojen kiihdytysmalli: {STRING} @@ -1229,7 +1229,7 @@ STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :Oikealla puolel STR_CONFIG_SETTING_SHOWFINANCES :Näytä rahoitusikkuna vuoden lopussa: {STRING} STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Mikäli käytössä, rahoitusikkuna näytetään jokaisen vuoden lopussa yhtiön taloudellisen tilanteen seurannan helpottamiseksi STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Uudet käskyt ovat oletusarvoisesti nonstop-tyyppisiä: {STRING} -STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normaalisti kulkuneuvo pysähtyy jokaisella läpikulkemallaan asemalla. Mikäli tämä asetus on käytössä kulkuneuvot eivät pysähdy ajaessaan asemien läpi. Huomioi, että tämä asetus määrittää oletusarvoisen toiminnon uusille kulkuneuvoille. Asetusta voidaan muuttaa erikseen kunkin ajoneuvon kohdalla +STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normaalisti kulkuneuvo pysähtyy jokaisella läpikulkemallaan asemalla. Mikäli tämä asetus on käytössä kulkuneuvot eivät pysähdy ajaessaan asemien läpi. Huomioi, että tämä asetus määrittää oletusarvoisen toiminnon uusille kulkuneuvoille. Asetusta voidaan muuttaa erikseen kunkin kulkuneuvon kohdalla STR_CONFIG_SETTING_STOP_LOCATION :Uudet junien käskyt pysäyttävät junan aseman {STRING} STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Paikka, johon juna pysähtyy oletuksena asemalla. 'Alkuun' tarkoittaa että junan viimeinen vaunu pysähtyy laiturin alkuun, 'keskelle' tarkoittaa junan pysähtyvän keskelle laituria, ja 'loppuun' tarkoittaa että veturi pysähtyy laiturin päähän. Huomaa, että tämä asetus määrittää oletusarvon uusille määräyksille. Yksittäisten määräysten kohdalla käyttäytymistä voi muuttaa tästä asetuksesta huolimatta STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :alkuun @@ -1277,22 +1277,22 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Mikäli käytö STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Varoita, jos kulkuneuvo on eksynyt: {STRING} STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT :Lähetä viesti, jos kulkuneuvo ei löydä reittiä määränpäähänsä -STR_CONFIG_SETTING_ORDER_REVIEW :Tarkista ajoneuvojen pysähdykset: {STRING} +STR_CONFIG_SETTING_ORDER_REVIEW :Tarkista kulkuneuvojen pysähdykset: {STRING} STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :Mikäli käytössä, kulkuneuvojen määräykset tarkistetaan väliajoin ja havaituista ongelmista ilmoitetaan uutisviestillä STR_CONFIG_SETTING_ORDER_REVIEW_OFF :Ei STR_CONFIG_SETTING_ORDER_REVIEW_EXDEPOT :Kyllä, mutta ei pysäytetyille -STR_CONFIG_SETTING_ORDER_REVIEW_ON :Kaikille ajoneuvoille +STR_CONFIG_SETTING_ORDER_REVIEW_ON :Kaikille kulkuneuvoille STR_CONFIG_SETTING_WARN_INCOME_LESS :Varoita, jos kulkuneuvon tulos on negatiivinen: {STRING} STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Mikäli käytössä, uutisviesti lähetetään, jos kulkuneuvo ei ole tuottanut rahaa viimeisen kalenterivuoden aikana -STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Ajoneuvot eivät vanhene: {STRING} +STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Kulkuneuvot eivät vanhene: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Mikäli käytössä, kaikki kulkuneuvot ovat saatavilla ikuisesti niiden julkistamisen jälkeen -STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Uudista ajoneuvo automaattisesti, kun se vanhenee: {STRING} +STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Uudista kulkuneuvo automaattisesti, kun se vanhenee: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Mikäli käytössä, lähellä käyttöikänsä loppua oleva kulkuneuvo korvataan automaattisesti STR_CONFIG_SETTING_AUTORENEW_MONTHS :Uudista automaattisesti {STRING} STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Suhteellinen ikä, jonka jälkeen kulkuneuvo voidaan uudistaa automaattisesti STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} kuukau{P 0 tta tta} ennen kulkuneuvon käyttöiän loppua STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} kuukau{P 0 si tta} jälkeen kulkuneuvon käyttöiän lopun -STR_CONFIG_SETTING_AUTORENEW_MONEY :Vähimmäisrahamäärä ajoneuvon automaattiseen uudistukseen: {STRING} +STR_CONFIG_SETTING_AUTORENEW_MONEY :Vähimmäisrahamäärä kulkuneuvon automaattiseen uudistukseen: {STRING} STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Pienin rahamäärä, joka on oltava pankissa ennen kulkuneuvojen automaattista uudistamista STR_CONFIG_SETTING_ERRMSG_DURATION :Virheilmoitusten näyttöaika: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Aika virheilmoitusten näyttämiseen punaisessa ikkunassa. Huomaa, että jotkut (kriittiset) virheilmoitukset eivät sulkeudu automaattisesti tämän ajan jälkeen, vaan ne on suljettava käsin @@ -1446,8 +1446,8 @@ STR_CONFIG_SETTING_SOUND_CLICK :Painikkeiden na STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT :Piippaa painikkeita napsauttaessa STR_CONFIG_SETTING_SOUND_DISASTER :Vahingot/onnettomuudet: {STRING} STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT :Toista vahinkojen ja onnettomuuksien äänet -STR_CONFIG_SETTING_SOUND_VEHICLE :Ajoneuvot: {STRING} -STR_CONFIG_SETTING_SOUND_VEHICLE_HELPTEXT :Toista ajoneuvojen äänet +STR_CONFIG_SETTING_SOUND_VEHICLE :Kulkuneuvot: {STRING} +STR_CONFIG_SETTING_SOUND_VEHICLE_HELPTEXT :Toista kulkuneuvojen äänet STR_CONFIG_SETTING_SOUND_AMBIENT :Ympäristö: {STRING} STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Toista ympäristön, kuten maaston, teollisuuden ja kaupunkien äänet @@ -1494,17 +1494,17 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Lentokoneiden o STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Määritä oletushuoltoväli uusille lentokoneille, mikäli kulkuneuvolle ei ole määritelty erillistä huoltoväliä STR_CONFIG_SETTING_SERVINT_SHIPS :Laivojen oletushuoltoväli: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Määritä oletushuoltoväli uusille laivoille, mikäli kulkuneuvolle ei ole määritelty erillistä huoltoväliä -STR_CONFIG_SETTING_NOSERVICE :Poista huollot käytöstä kun ajoneuvojen rikkoutuminen on poistettu käytöstä: {STRING} +STR_CONFIG_SETTING_NOSERVICE :Poista huollot käytöstä kun kulkuneuvojen rikkoutuminen on poistettu käytöstä: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Mikäli käytössä, kulkuneuvoja ei huolleta, jos ne eivät voi rikkoutua STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ota käyttöön vaunujen nopeusrajoitukset: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Mikäli käytössä, vaunujen nopeusrajoitusta käytetään junan maksiminopeuden määrittämisessä STR_CONFIG_SETTING_DISABLE_ELRAILS :Poista sähköradat käytöstä: {STRING} STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Mikäli käytössä, sähköveturit toimivat ei-sähköistetyillä radoilla -STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Ensimmäinen ajoneuvo saapuu pelaajan asemalle.: {STRING} -STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Näytä sanomalehti ensimmäisen ajoneuvon saapuessa pelaajan uudelle asemalle -STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Ensimmäinen ajoneuvo saapuu kilpailijan asemalle.: {STRING} -STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Näytä sanomalehti ensimmäisen ajoneuvon saapuessa kilpailijan uudelle asemalle +STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Ensimmäinen kulkuneuvo saapuu pelaajan asemalle: {STRING} +STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Näytä sanomalehti ensimmäisen kulkuneuvon saapuessa pelaajan uudelle asemalle +STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Ensimmäinen kulkuneuvo saapuu kilpailijan asemalle.: {STRING} +STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Näytä sanomalehti ensimmäisen kulkuneuvon saapuessa kilpailijan uudelle asemalle STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Vahingot/onnettomuudet: {STRING} STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Näytä sanomalehti vahingon tai onnettomuuden sattuessa STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Yhtiön tiedot: {STRING} @@ -1522,9 +1522,9 @@ STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER_HELPTEXT :Näytä sanomal STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :Muita muutoksia tuotannossa: {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :Näytä sanomalehti tuotannon muuttuessa teollisuudessa, jota oma tai kilpaileva yhtiö ei palvele STR_CONFIG_SETTING_NEWS_ADVICE :Neuvoja / tietoa yhtiön kulkuneuvoista: {STRING} -STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Näytä viesti ajoneuvon vaatiessa huomiota -STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Uudet ajoneuvot: {STRING} -STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Näytä sanomalehti kun saatavilla on uusi ajoneuvotyyppi +STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Näytä viesti kulkuneuvon vaatiessa huomiota +STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Uudet kulkuneuvot: {STRING} +STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Näytä sanomalehti kun saatavilla on uusi kulkuneuvotyyppi STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Rahdin vastaanottamisen muutokset: {STRING} STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Näytä viesti kun asemat muuttavat hyväksymäänsä rahtia STR_CONFIG_SETTING_NEWS_SUBSIDIES :Tuet: {STRING} @@ -1700,7 +1700,7 @@ STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}Rakenta STR_CONFIG_SETTING_ADVISORS :{ORANGE}Uutiset / Neuvonantajat STR_CONFIG_SETTING_COMPANY :{ORANGE}Yhtiö STR_CONFIG_SETTING_ACCOUNTING :{ORANGE}Talous -STR_CONFIG_SETTING_VEHICLES :{ORANGE}Ajoneuvot +STR_CONFIG_SETTING_VEHICLES :{ORANGE}Kulkuneuvot STR_CONFIG_SETTING_VEHICLES_PHYSICS :{ORANGE}Fysiikka STR_CONFIG_SETTING_VEHICLES_ROUTING :{ORANGE}Reititys STR_CONFIG_SETTING_LIMITATIONS :{ORANGE}Rajoitukset @@ -3275,7 +3275,7 @@ STR_FINANCES_CAPTION :{WHITE}Talous, STR_FINANCES_EXPENDITURE_INCOME_TITLE :{WHITE}Menot/tulot STR_FINANCES_YEAR :{WHITE}{NUM} STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}Rakentaminen -STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}Uudet ajoneuvot +STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}Uudet kulkuneuvot STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Junien käyttökustannukset STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Ajoneuvojen käyttökustannukset STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Lentokoneiden käyttökustannukset @@ -3334,7 +3334,7 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Näytä STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Uudet kasvot STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Valitse uudet kasvot pääjohtajalle. STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Väriteema -STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Muuta yhtiön ajoneuvojen väritystä +STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Muuta yhtiön kulkuneuvojen väritystä STR_COMPANY_VIEW_COMPANY_NAME_BUTTON :{BLACK}Yhtiön nimi STR_COMPANY_VIEW_COMPANY_NAME_TOOLTIP :{BLACK}Muuta yhtiön nimeä. STR_COMPANY_VIEW_PRESIDENT_NAME_BUTTON :{BLACK}Pääjohtajan nimi @@ -3408,10 +3408,10 @@ STR_VEHICLE_LIST_AVAILABLE_TRAINS :Käytettäviss STR_VEHICLE_LIST_AVAILABLE_ROAD_VEHICLES :Käytettävissä olevat ajoneuvot STR_VEHICLE_LIST_AVAILABLE_SHIPS :Käytettävissä olevat laivat STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Käytettävissä olevat ilma-alukset -STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Näytä lista saatavilla olevista moottorityypeistä tälle ajoneuvotyypille +STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Näytä lista saatavilla olevista moottorityypeistä tälle kulkuneuvotyypille STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Muokkaa listaa -STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Ohjaa kaikkia listan ajoneuvoja +STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Ohjaa kaikkia listan kulkuneuvoja STR_VEHICLE_LIST_REPLACE_VEHICLES :Korvaa liikennevälineitä STR_VEHICLE_LIST_SEND_FOR_SERVICING :Lähetä huoltoon @@ -3423,7 +3423,7 @@ STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Lähetä variko STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Pysäytä kaikki listalla olevat kulkuneuvot napsauttamalla STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Käynnistä kaikki listalla olevat ajoneuvot napsauttamalla -STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}{COMMA} ajoneuvon jaetut käskyt +STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}{COMMA} kulkuneuvon jaetut käskyt # Group window STR_GROUP_ALL_TRAINS :Kaikki junat @@ -3446,8 +3446,8 @@ STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Poista r STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Poista ryhmä STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Haluatko varmasti poistaa tämän ryhmän ja sen alaryhmät? -STR_GROUP_ADD_SHARED_VEHICLE :Lisää jaettuja ajoneuvoja -STR_GROUP_REMOVE_ALL_VEHICLES :Poista kaikki ajoneuvot +STR_GROUP_ADD_SHARED_VEHICLE :Lisää jaettuja kulkuneuvoja +STR_GROUP_REMOVE_ALL_VEHICLES :Poista kaikki kulkuneuvot STR_GROUP_RENAME_CAPTION :{BLACK}Nimeä ryhmä @@ -3608,10 +3608,10 @@ STR_DEPOT_MASS_START_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Käynnis STR_DEPOT_MASS_START_DEPOT_SHIP_TOOLTIP :{BLACK}Käynnistä kaikki telakalla olevat laivat napsauttamalla STR_DEPOT_MASS_START_HANGAR_TOOLTIP :{BLACK}Käynnistä kaikki hallissa olevat ilma-alukset napsauttamalla -STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Olet myymässä kaikki varikon ajoneuvot. Oletko varma? +STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Olet myymässä kaikki varikon kulkuneuvot. Oletko varma? # Engine preview window -STR_ENGINE_PREVIEW_CAPTION :{WHITE}Viesti ajoneuvovalmistajalta +STR_ENGINE_PREVIEW_CAPTION :{WHITE}Viesti kulkuneuvovalmistajalta STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Olemme juuri suunnitelleet uuden {STRING} - oletteko kiinnostunut vuoden yksinoikeutetusta kokeilusta, jotta näemme miten tuote suoriutuu ennen kuin julkistamme sen yleiseen käyttöön? STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :veturin STR_ENGINE_PREVIEW_ROAD_VEHICLE :ajoneuvon @@ -3643,14 +3643,14 @@ STR_REPLACE_VEHICLE_AVAILABLE_VEHICLES_TOOLTIP :{BLACK}Sarake k STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}Valitse korvattava veturityyppi. STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Valitse vasemmalla näkyvän veturityypinn korvaava uusi veturityyppi. -STR_REPLACE_VEHICLES_START :{BLACK}Aloita ajoneuvojen korvaaminen +STR_REPLACE_VEHICLES_START :{BLACK}Aloita kulkuneuvojen korvaaminen STR_REPLACE_VEHICLES_NOW :Korvaa kaikki liikennevälineet nyt STR_REPLACE_VEHICLES_WHEN_OLD :Korvaa vain vanhat liikennevälineet STR_REPLACE_HELP_START_BUTTON :{BLACK}Napsauta aloittaaksesi vasemmalta valitun veturityypin korvauksen oikealta valitulla veturityypillä. STR_REPLACE_NOT_REPLACING :{BLACK}Ei korvata STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Ei liikennevälinettä valittuna STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} kun vanha -STR_REPLACE_VEHICLES_STOP :{BLACK}Lopeta ajoneuvojen korv. +STR_REPLACE_VEHICLES_STOP :{BLACK}Lopeta kulkuneuvojen korvaaminen STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Napsauta pysäyttääksesi vasemmalta valitun veturityypin korvauksen. STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Vaihda toiseen korvausikkunaan @@ -3797,7 +3797,7 @@ STR_VEHICLE_DETAILS_TRAIN_CARGO_TOOLTIP :{BLACK}Näytä STR_VEHICLE_DETAIL_TAB_INFORMATION :{BLACK}Tietoa STR_VEHICLE_DETAILS_TRAIN_INFORMATION_TOOLTIP :{BLACK}Näytä yksikön tiedot. STR_VEHICLE_DETAIL_TAB_CAPACITIES :{BLACK}Kapasiteetit -STR_VEHICLE_DETAILS_TRAIN_CAPACITIES_TOOLTIP :{BLACK}Näytä kunkin ajoneuvon kapasiteetti. +STR_VEHICLE_DETAILS_TRAIN_CAPACITIES_TOOLTIP :{BLACK}Näytä kunkin kulkuneuvon kapasiteetti STR_VEHICLE_DETAIL_TAB_TOTAL_CARGO :{BLACK}Rahtia yhteensä STR_VEHICLE_DETAILS_TRAIN_TOTAL_CARGO_TOOLTIP :{BLACK}Näytä junan kokonaiskapasiteetti, eritelty rahtityypin mukaan. @@ -3915,7 +3915,7 @@ STR_ORDER_CONDITIONAL :Ehdollinen hypp STR_ORDER_SHARE :Jaa käskyt STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Lisää uusi käsky ennen valittua, tai lisää listan viimeiseksi. Ctrl tekee asemakäskyistä 'lastaa täyteen kaikki rahti', reittipistekäskyistä 'non-stop' ja veturitallikäskyistä 'huolto'. 'Jaa käskyt' jakaa käskyt valitun kulkuneuvon kanssa. Kulkuneuvon napsauttaminen kopioi käskyt kyseisestä kulkuneuvosta. Varikkokäsky poistaa käytöstä automaattisen huollon -STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Näytä kaikki ajoneuvot, jotka jakavat nämä käskyt +STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Näytä kaikki kulkuneuvot, jotka jakavat nämä käskyt # String parts to build the order string STR_ORDER_GO_TO_WAYPOINT :Kierrä reittipisteen {WAYPOINT} kautta @@ -4008,14 +4008,14 @@ STR_TIMETABLE_TICKS :{COMMA}{NBSP}as STR_TIMETABLE_TOTAL_TIME :{BLACK}Aikataulun kesto on {STRING} STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Aikataulun kesto on vähintään {STRING} -STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Ajoneuvo on aikataulussa -STR_TIMETABLE_STATUS_LATE :{BLACK}Ajoneuvo on {STRING} myöhässä -STR_TIMETABLE_STATUS_EARLY :{BLACK}Ajoneuvo on {STRING} etuajassa +STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Kulkuneuvo on aikataulussa +STR_TIMETABLE_STATUS_LATE :{BLACK}Kulkuneuvo on {STRING} myöhässä +STR_TIMETABLE_STATUS_EARLY :{BLACK}Kulkuneuvo on {STRING} etuajassa STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Tämä aikataulu ei ole vielä alkanut STR_TIMETABLE_STATUS_START_AT :{BLACK}Tämä aikataulu alkaa {STRING} STR_TIMETABLE_STARTING_DATE :{BLACK}Aloituspäivä -STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Valitse päivämäärä aikataulun aloituspäiväksi. Ctrl+Klik määrittää aikataulun aloituspäivän ja jakaa aikataulun tasaisesti kaikkien sitä käyttävien ajoneuvojen kesken niiden järjestyksen mukaan. +STR_TIMETABLE_STARTING_DATE_TOOLTIP :{BLACK}Valitse päivämäärä aikataulun aloituspäiväksi. Ctrl+Klik määrittää aikataulun aloituspäivän ja jakaa aikataulun tasaisesti kaikkien sitä käyttävien kulkuneuvojen kesken niiden järjestyksen mukaan. STR_TIMETABLE_CHANGE_TIME :{BLACK}Muuta aikaa STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Aseta kuinka kauan käskyn tulisi kestää @@ -4459,9 +4459,9 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Ei voi l STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Ryhmää ei voi poistaa. STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Ryhmää ei voi nimetä. STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Pääryhmää ei voi määrittää... -STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Ryhmän kaikkia ajoneuvoja ei voi poistaa. -STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Ei voi lisätä ajoneuvoa ryhmään. -STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Ei voi lisätä jaettuja ajoneuvoja ryhmään. +STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Ryhmän kaikkia kulkuneuvoja ei voi poistaa. +STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Ei voi lisätä kulkuneuvoa ryhmään. +STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Ei voi lisätä jaettuja kulkuneuvoja ryhmään. # Generic vehicle errors STR_ERROR_TRAIN_IN_THE_WAY :{WHITE}Juna on tiellä. @@ -4509,12 +4509,12 @@ STR_ERROR_ROAD_VEHICLE_NOT_AVAILABLE :{WHITE}Ajoneuvo STR_ERROR_SHIP_NOT_AVAILABLE :{WHITE}Laiva ei ole saatavilla STR_ERROR_AIRCRAFT_NOT_AVAILABLE :{WHITE}Lentokone ei ole saatavilla -STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Liian monta ajoneuvoa pelissä. +STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Liian monta kulkuneuvoa pelissä. STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}Huoltoväliä ei voi muuttaa. STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... kulkuneuvo on tuhoutunut -STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Yhtään ajoneuvoa ei ole saatavilla +STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Yhtään kulkuneuvoa ei ole saatavilla STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Muuta NewGRF-asetuksiasi STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Kulkuneuvoja ei ole vielä saatavilla STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Aloita peli {DATE_SHORT} jälkeen tai käytä NewGRF:ää joka tarjoaa aikaisempia kulkuneuvoja @@ -4550,7 +4550,7 @@ STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... lent # Timetable related errors STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Ei voi asettaa aikataulua. STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Kulkuneuvo voi odottaa vain asemalla -STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Tämä ajoneuvo ei pysähdy tällä asemalla +STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Tämä kulkuneuvo ei pysähdy tällä asemalla # Sign related errors STR_ERROR_TOO_MANY_SIGNS :{WHITE}... liian monta kylttiä. diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 828f19584c..40ab899660 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1248,6 +1248,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Épületek, vá STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Tájrendezés engedélyezése épületek és utak alatt azok eltávolítása nélkül STR_CONFIG_SETTING_CATCHMENT :Élethűbben méretezett állomási vonzáskörzetek bekapcsolása: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :A különböző állomások és repterek más vonzáskörzettel rendelkeznek +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :A vállalatok állomásai elláthatnak beépített semleges állomással rendelkező gazdasági épületeket: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Ha be van kapcsolva, akkor az olyan gazdasági épületeket, amelyekhez beépített állomás tartozik (pl. olajfúró tornyok), el lehet látni a vállalatok által épített közeli állomásokkal is. Ha ki van kapcsolva, akkor csak a beépített állomásukkal lehet ellátni ezeket a gazdasági épületeket. A vállalatok közeli állomásai nem tudják őket ellátni, és a beépített állomások sem látnak el mást, csak az adott gazdasági épületet. STR_CONFIG_SETTING_EXTRADYNAMITE :Települési tulajdonú utak/hidak/alagutak rombolásának engedélyezése: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Városi tulajdonú infrastruktúra és épületek könnyebb eltávolíthatósága STR_CONFIG_SETTING_TRAIN_LENGTH :Vonatok maximális hossza: {STRING} From d7522e5e8ffa8a922668e8f6f99e1fecbab11dbe Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Mon, 18 Feb 2019 14:16:03 +0100 Subject: [PATCH 463/622] Codechange: Add a k-d tree generic data structure --- projects/openttd_vs140.vcxproj | 1 + projects/openttd_vs140.vcxproj.filters | 3 + projects/openttd_vs141.vcxproj | 1 + projects/openttd_vs141.vcxproj.filters | 3 + projects/openttd_vs142.vcxproj | 1 + projects/openttd_vs142.vcxproj.filters | 3 + source.list | 1 + src/core/kdtree.hpp | 473 +++++++++++++++++++++++++ 8 files changed, 486 insertions(+) create mode 100644 src/core/kdtree.hpp diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index ded9b92678..7643a693ef 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -724,6 +724,7 @@ + diff --git a/projects/openttd_vs140.vcxproj.filters b/projects/openttd_vs140.vcxproj.filters index cfc4199cc6..c33036fcc7 100644 --- a/projects/openttd_vs140.vcxproj.filters +++ b/projects/openttd_vs140.vcxproj.filters @@ -1260,6 +1260,9 @@ Core Source Code + + Core Source Code + Core Source Code diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj index d550186c12..f7dcc166af 100644 --- a/projects/openttd_vs141.vcxproj +++ b/projects/openttd_vs141.vcxproj @@ -724,6 +724,7 @@ + diff --git a/projects/openttd_vs141.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters index cfc4199cc6..c33036fcc7 100644 --- a/projects/openttd_vs141.vcxproj.filters +++ b/projects/openttd_vs141.vcxproj.filters @@ -1260,6 +1260,9 @@ Core Source Code + + Core Source Code + Core Source Code diff --git a/projects/openttd_vs142.vcxproj b/projects/openttd_vs142.vcxproj index 92327ad252..dc132eeb0a 100644 --- a/projects/openttd_vs142.vcxproj +++ b/projects/openttd_vs142.vcxproj @@ -724,6 +724,7 @@ + diff --git a/projects/openttd_vs142.vcxproj.filters b/projects/openttd_vs142.vcxproj.filters index cfc4199cc6..c33036fcc7 100644 --- a/projects/openttd_vs142.vcxproj.filters +++ b/projects/openttd_vs142.vcxproj.filters @@ -1260,6 +1260,9 @@ Core Source Code + + Core Source Code + Core Source Code diff --git a/source.list b/source.list index c96b99bb97..d241e7e857 100644 --- a/source.list +++ b/source.list @@ -429,6 +429,7 @@ core/enum_type.hpp core/geometry_func.cpp core/geometry_func.hpp core/geometry_type.hpp +core/kdtree.hpp core/math_func.cpp core/math_func.hpp core/mem_func.hpp diff --git a/src/core/kdtree.hpp b/src/core/kdtree.hpp new file mode 100644 index 0000000000..154f27fc5b --- /dev/null +++ b/src/core/kdtree.hpp @@ -0,0 +1,473 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file kdtree.hpp K-d tree template specialised for 2-dimensional Manhattan geometry */ + +#ifndef KDTREE_HPP +#define KDTREE_HPP + +#include "../stdafx.h" +#include +#include +#include + +/** + * K-dimensional tree, specialised for 2-dimensional space. + * This is not intended as a primary storage of data, but as an index into existing data. + * Usually the type stored by this tree should be an index into an existing array. + * + * This implementation assumes Manhattan distances are used. + * + * Be careful when using this in game code, depending on usage pattern, the tree shape may + * end up different for different clients in multiplayer, causing iteration order to differ + * and possibly having elements returned in different order. The using code should be designed + * to produce the same result regardless of iteration order. + * + * The element type T must be less-than comparable for FindNearest to work. + * + * @tparam T Type stored in the tree, should be cheap to copy. + * @tparam TxyFunc Functor type to extract coordinate from a T value and dimension index (0 or 1). + * @tparam CoordT Type of coordinate values extracted via TxyFunc. + * @tparam DistT Type to use for representing distance values. + */ +template +class Kdtree { + /** Type of a node in the tree */ + struct node { + T element; ///< Element stored at node + size_t left; ///< Index of node to the left, INVALID_NODE if none + size_t right; ///< Index of node to the right, INVALID_NODE if none + + node(T element) : element(element), left(INVALID_NODE), right(INVALID_NODE) { } + }; + + static const size_t INVALID_NODE = SIZE_MAX; ///< Index value indicating no-such-node + + std::vector nodes; ///< Pool of all nodes in the tree + std::vector free_list; ///< List of dead indices in the nodes vector + size_t root; ///< Index of root node + TxyFunc xyfunc; ///< Functor to extract a coordinate from an element + size_t unbalanced; ///< Number approximating how unbalanced the tree might be + + /** Create one new node in the tree, return its index in the pool */ + size_t AddNode(const T &element) + { + if (this->free_list.size() == 0) { + this->nodes.emplace_back(element); + return this->nodes.size() - 1; + } else { + size_t newidx = this->free_list.back(); + this->free_list.pop_back(); + this->nodes[newidx] = node{ element }; + return newidx; + } + } + + /** Find a coordinate value to split a range of elements at */ + template + CoordT SelectSplitCoord(It begin, It end, int level) + { + It mid = begin + (end - begin) / 2; + std::nth_element(begin, mid, end, [&](T a, T b) { return this->xyfunc(a, level % 2) < this->xyfunc(b, level % 2); }); + return this->xyfunc(*mid, level % 2); + } + + /** Construct a subtree from elements between begin and end iterators, return index of root */ + template + size_t BuildSubtree(It begin, It end, int level) + { + ptrdiff_t count = end - begin; + + if (count == 0) { + return INVALID_NODE; + } else if (count == 1) { + return this->AddNode(*begin); + } else if (count > 1) { + CoordT split_coord = SelectSplitCoord(begin, end, level); + It split = std::partition(begin, end, [&](T v) { return this->xyfunc(v, level % 2) < split_coord; }); + size_t newidx = this->AddNode(*split); + this->nodes[newidx].left = this->BuildSubtree(begin, split, level + 1); + this->nodes[newidx].right = this->BuildSubtree(split + 1, end, level + 1); + return newidx; + } else { + NOT_REACHED(); + } + } + + /** Rebuild the tree with all existing elements, optionally adding or removing one more */ + bool Rebuild(const T *include_element, const T *exclude_element) + { + size_t initial_count = this->Count(); + if (initial_count < 8) return false; // arbitrary value for "not worth rebalancing" + + T root_element = this->nodes[this->root].element; + std::vector elements = this->FreeSubtree(this->root); + elements.push_back(root_element); + + if (include_element != NULL) { + elements.push_back(*include_element); + initial_count++; + } + if (exclude_element != NULL) { + typename std::vector::iterator removed = std::remove(elements.begin(), elements.end(), *exclude_element); + elements.erase(removed, elements.end()); + initial_count--; + } + + this->Build(elements.begin(), elements.end()); + assert(initial_count == this->Count()); + return true; + } + + /** Insert one element in the tree somewhere below node_idx */ + void InsertRecursive(const T &element, size_t node_idx, int level) + { + /* Dimension index of current level */ + int dim = level % 2; + /* Node reference */ + node &n = this->nodes[node_idx]; + + /* Coordinate of element splitting at this node */ + CoordT nc = this->xyfunc(n.element, dim); + /* Coordinate of the new element */ + CoordT ec = this->xyfunc(element, dim); + /* Which side to insert on */ + size_t &next = (ec < nc) ? n.left : n.right; + + if (next == INVALID_NODE) { + /* New leaf */ + size_t newidx = this->AddNode(element); + /* Vector may have been reallocated at this point, n and next are invalid */ + node &nn = this->nodes[node_idx]; + if (ec < nc) nn.left = newidx; else nn.right = newidx; + } else { + this->InsertRecursive(element, next, level + 1); + } + } + + /** + * Free all children of the given node + * @return Collection of elements that were removed from tree. + */ + std::vector FreeSubtree(size_t node_idx) + { + std::vector subtree_elements; + node &n = this->nodes[node_idx]; + + /* We'll be appending items to the free_list, get index of our first item */ + size_t first_free = this->free_list.size(); + /* Prepare the descent with our children */ + if (n.left != INVALID_NODE) this->free_list.push_back(n.left); + if (n.right != INVALID_NODE) this->free_list.push_back(n.right); + n.left = n.right = INVALID_NODE; + + /* Recursively free the nodes being collected */ + for (size_t i = first_free; i < this->free_list.size(); i++) { + node &fn = this->nodes[this->free_list[i]]; + subtree_elements.push_back(fn.element); + if (fn.left != INVALID_NODE) this->free_list.push_back(fn.left); + if (fn.right != INVALID_NODE) this->free_list.push_back(fn.right); + fn.left = fn.right = INVALID_NODE; + } + + return subtree_elements; + } + + /** + * Find and remove one element from the tree. + * @param element The element to search for + * @param node_idx Sub-tree to search in + * @param level Current depth in the tree + * @return New root node index of the sub-tree processed + */ + size_t RemoveRecursive(const T &element, size_t node_idx, int level) + { + /* Node reference */ + node &n = this->nodes[node_idx]; + + if (n.element == element) { + /* Remove this one */ + this->free_list.push_back(node_idx); + if (n.left == INVALID_NODE && n.right == INVALID_NODE) { + /* Simple case, leaf, new child node for parent is "none" */ + return INVALID_NODE; + } else { + /* Complex case, rebuild the sub-tree */ + std::vector subtree_elements = this->FreeSubtree(node_idx); + return this->BuildSubtree(subtree_elements.begin(), subtree_elements.end(), level);; + } + } else { + /* Search in a sub-tree */ + /* Dimension index of current level */ + int dim = level % 2; + /* Coordinate of element splitting at this node */ + CoordT nc = this->xyfunc(n.element, dim); + /* Coordinate of the element being removed */ + CoordT ec = this->xyfunc(element, dim); + /* Which side to remove from */ + size_t next = (ec < nc) ? n.left : n.right; + assert(next != INVALID_NODE); // node must exist somewhere and must be found before a leaf is reached + /* Descend */ + size_t new_branch = this->RemoveRecursive(element, next, level + 1); + if (new_branch != next) { + /* Vector may have been reallocated at this point, n and next are invalid */ + node &nn = this->nodes[node_idx]; + if (ec < nc) nn.left = new_branch; else nn.right = new_branch; + } + return node_idx; + } + } + + + DistT ManhattanDistance(const T &element, CoordT x, CoordT y) const + { + return abs((DistT)this->xyfunc(element, 0) - (DistT)x) + abs((DistT)this->xyfunc(element, 1) - (DistT)y); + } + + /** A data element and its distance to a searched-for point */ + using node_distance = std::pair; + /** Ordering function for node_distance objects, elements with equal distance are ordered by less-than comparison */ + static node_distance SelectNearestNodeDistance(const node_distance &a, const node_distance &b) + { + if (a.second < b.second) return a; + if (b.second < a.second) return b; + if (a.first < b.first) return a; + if (b.first < a.first) return b; + NOT_REACHED(); // a.first == b.first: same element must not be inserted twice + } + /** Search a sub-tree for the element nearest to a given point */ + node_distance FindNearestRecursive(CoordT xy[2], size_t node_idx, int level) const + { + /* Dimension index of current level */ + int dim = level % 2; + /* Node reference */ + const node &n = this->nodes[node_idx]; + + /* Coordinate of element splitting at this node */ + CoordT c = this->xyfunc(n.element, dim); + /* This node's distance to target */ + DistT thisdist = ManhattanDistance(n.element, xy[0], xy[1]); + /* Assume this node is the best choice for now */ + node_distance best = std::make_pair(n.element, thisdist); + + /* Next node to visit */ + size_t next = (xy[dim] < c) ? n.left : n.right; + if (next != INVALID_NODE) { + /* Check if there is a better node down the tree */ + best = SelectNearestNodeDistance(best, this->FindNearestRecursive(xy, next, level + 1)); + } + + /* Check if the distance from current best is worse than distance from target to splitting line, + * if it is we also need to check the other side of the split. */ + size_t opposite = (xy[dim] >= c) ? n.left : n.right; // reverse of above + if (opposite != INVALID_NODE && best.second >= abs((int)xy[dim] - (int)c)) { + node_distance other_candidate = this->FindNearestRecursive(xy, opposite, level + 1); + best = SelectNearestNodeDistance(best, other_candidate); + } + + return best; + } + + template + void FindContainedRecursive(CoordT p1[2], CoordT p2[2], size_t node_idx, int level, Outputter outputter) const + { + /* Dimension index of current level */ + int dim = level % 2; + /* Node reference */ + const node &n = this->nodes[node_idx]; + + /* Coordinate of element splitting at this node */ + CoordT ec = this->xyfunc(n.element, dim); + /* Opposite coordinate of element */ + CoordT oc = this->xyfunc(n.element, 1 - dim); + + /* Test if this element is within rectangle */ + if (ec >= p1[dim] && ec < p2[dim] && oc >= p1[1 - dim] && oc < p2[1 - dim]) outputter(n.element); + + /* Recurse left if part of rectangle is left of split */ + if (p1[dim] < ec && n.left != INVALID_NODE) this->FindContainedRecursive(p1, p2, n.left, level + 1, outputter); + + /* Recurse right if part of rectangle is right of split */ + if (p2[dim] > ec && n.right != INVALID_NODE) this->FindContainedRecursive(p1, p2, n.right, level + 1, outputter); + } + + /** Debugging function, counts number of occurrences of an element regardless of its correct position in the tree */ + size_t CountValue(const T &element, size_t node_idx) const + { + if (node_idx == INVALID_NODE) return 0; + const node &n = this->nodes[node_idx]; + return CountValue(element, n.left) + CountValue(element, n.right) + ((n.element == element) ? 1 : 0); + } + + void IncrementUnbalanced(size_t amount = 1) + { + this->unbalanced += amount; + } + + /** Check if the entire tree is in need of rebuilding */ + bool IsUnbalanced() + { + size_t count = this->Count(); + if (count < 8) return false; + return this->unbalanced > this->Count() / 4; + } + + /** Verify that the invariant is true for a sub-tree, assert if not */ + void CheckInvariant(size_t node_idx, int level, CoordT min_x, CoordT max_x, CoordT min_y, CoordT max_y) + { + if (node_idx == INVALID_NODE) return; + + const node &n = this->nodes[node_idx]; + CoordT cx = this->xyfunc(n.element, 0); + CoordT cy = this->xyfunc(n.element, 1); + + assert(cx >= min_x); + assert(cx < max_x); + assert(cy >= min_y); + assert(cy < max_y); + + if (level % 2 == 0) { + // split in dimension 0 = x + CheckInvariant(n.left, level + 1, min_x, cx, min_y, max_y); + CheckInvariant(n.right, level + 1, cx, max_x, min_y, max_y); + } else { + // split in dimension 1 = y + CheckInvariant(n.left, level + 1, min_x, max_x, min_y, cy); + CheckInvariant(n.right, level + 1, min_x, max_x, cy, max_y); + } + } + + /** Verify the invariant for the entire tree, does nothing unless KDTREE_DEBUG is defined */ + void CheckInvariant() + { +#ifdef KDTREE_DEBUG + CheckInvariant(this->root, 0, std::numeric_limits::min(), std::numeric_limits::max(), std::numeric_limits::min(), std::numeric_limits::max()); +#endif + } + +public: + /** Construct a new Kdtree with the given xyfunc */ + Kdtree(TxyFunc xyfunc) : root(INVALID_NODE), xyfunc(xyfunc), unbalanced(0) { } + + /** + * Clear and rebuild the tree from a new sequence of elements, + * @tparam It Iterator type for element sequence. + * @param begin First element in sequence. + * @param end One past last element in sequence. + */ + template + void Build(It begin, It end) + { + this->nodes.clear(); + this->free_list.clear(); + this->unbalanced = 0; + if (begin == end) return; + this->nodes.reserve(end - begin); + + this->root = this->BuildSubtree(begin, end, 0); + CheckInvariant(); + } + + /** + * Reconstruct the tree with the same elements, letting it be fully balanced. + */ + void Rebuild() + { + this->Rebuild(NULL, NULL); + } + + /** + * Insert a single element in the tree. + * Repeatedly inserting single elements may cause the tree to become unbalanced. + * Undefined behaviour if the element already exists in the tree. + */ + void Insert(const T &element) + { + if (this->Count() == 0) { + this->root = this->AddNode(element); + } else { + if (!this->IsUnbalanced() || !this->Rebuild(&element, NULL)) { + this->InsertRecursive(element, this->root, 0); + this->IncrementUnbalanced(); + } + CheckInvariant(); + } + } + + /** + * Remove a single element from the tree, if it exists. + * Since elements are stored in interior nodes as well as leaf nodes, removing one may + * require a larger sub-tree to be re-built. Because of this, worst case run time is + * as bad as a full tree rebuild. + */ + void Remove(const T &element) + { + size_t count = this->Count(); + if (count == 0) return; + if (!this->IsUnbalanced() || !this->Rebuild(NULL, &element)) { + /* If the removed element is the root node, this modifies this->root */ + this->root = this->RemoveRecursive(element, this->root, 0); + this->IncrementUnbalanced(); + } + CheckInvariant(); + } + + /** Get number of elements stored in tree */ + size_t Count() const + { + assert(this->free_list.size() <= this->nodes.size()); + return this->nodes.size() - this->free_list.size(); + } + + /** + * Find the element closest to given coordinate, in Manhattan distance. + * For multiple elements with the same distance, the one comparing smaller with + * a less-than comparison is chosen. + */ + T FindNearest(CoordT x, CoordT y) const + { + assert(this->Count() > 0); + + CoordT xy[2] = { x, y }; + return this->FindNearestRecursive(xy, this->root, 0).first; + } + + /** + * Find all items contained within the given rectangle. + * @note Start coordinates are inclusive, end coordinates are exclusive. x1 + void FindContained(CoordT x1, CoordT y1, CoordT x2, CoordT y2, Outputter outputter) const + { + assert(x1 < x2); + assert(y1 < y2); + + if (this->Count() == 0) return; + + CoordT p1[2] = { x1, y1 }; + CoordT p2[2] = { x2, y2 }; + this->FindContainedRecursive(p1, p2, this->root, 0, outputter); + } + + /** + * Find all items contained within the given rectangle. + * @note End coordinates are exclusive, x1 FindContained(CoordT x1, CoordT y1, CoordT x2, CoordT y2) const + { + std::vector result; + this->FindContained(x1, y1, x2, y2, [&result](T e) {result.push_back(e); }); + return result; + } +}; + +#endif From 7b56be0f3ac0a0257c10dc7ebe32c1fe95ea6253 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Mon, 18 Feb 2019 17:32:53 +0100 Subject: [PATCH 464/622] Codechange: Make a k-d tree index of towns --- projects/openttd_vs140.vcxproj | 1 + projects/openttd_vs140.vcxproj.filters | 3 ++ projects/openttd_vs141.vcxproj | 1 + projects/openttd_vs141.vcxproj.filters | 3 ++ projects/openttd_vs142.vcxproj | 1 + projects/openttd_vs142.vcxproj.filters | 3 ++ source.list | 1 + src/misc.cpp | 3 ++ src/saveload/afterload.cpp | 2 + src/saveload/town_sl.cpp | 1 + src/town.h | 3 ++ src/town_cmd.cpp | 69 ++++++++++++-------------- src/town_kdtree.h | 20 ++++++++ 13 files changed, 74 insertions(+), 37 deletions(-) create mode 100644 src/town_kdtree.h diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index 7643a693ef..1d53652168 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -680,6 +680,7 @@ + diff --git a/projects/openttd_vs140.vcxproj.filters b/projects/openttd_vs140.vcxproj.filters index c33036fcc7..b06f9576da 100644 --- a/projects/openttd_vs140.vcxproj.filters +++ b/projects/openttd_vs140.vcxproj.filters @@ -1128,6 +1128,9 @@ Header Files + + Header Files + Header Files diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj index f7dcc166af..8d2a9dfc9b 100644 --- a/projects/openttd_vs141.vcxproj +++ b/projects/openttd_vs141.vcxproj @@ -680,6 +680,7 @@ + diff --git a/projects/openttd_vs141.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters index c33036fcc7..b06f9576da 100644 --- a/projects/openttd_vs141.vcxproj.filters +++ b/projects/openttd_vs141.vcxproj.filters @@ -1128,6 +1128,9 @@ Header Files + + Header Files + Header Files diff --git a/projects/openttd_vs142.vcxproj b/projects/openttd_vs142.vcxproj index dc132eeb0a..56455c2f81 100644 --- a/projects/openttd_vs142.vcxproj +++ b/projects/openttd_vs142.vcxproj @@ -680,6 +680,7 @@ + diff --git a/projects/openttd_vs142.vcxproj.filters b/projects/openttd_vs142.vcxproj.filters index c33036fcc7..b06f9576da 100644 --- a/projects/openttd_vs142.vcxproj.filters +++ b/projects/openttd_vs142.vcxproj.filters @@ -1128,6 +1128,9 @@ Header Files + + Header Files + Header Files diff --git a/source.list b/source.list index d241e7e857..969d90b9cb 100644 --- a/source.list +++ b/source.list @@ -367,6 +367,7 @@ timetable.h toolbar_gui.h town.h town_type.h +town_kdtree.h townname_func.h townname_type.h track_func.h diff --git a/src/misc.cpp b/src/misc.cpp index 8151f2dd32..c3130d85bd 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -28,6 +28,7 @@ #include "core/pool_type.hpp" #include "game/game.hpp" #include "linkgraph/linkgraphschedule.h" +#include "town_kdtree.h" #include "safeguards.h" @@ -75,6 +76,8 @@ void InitializeGame(uint size_x, uint size_y, bool reset_date, bool reset_settin LinkGraphSchedule::Clear(); PoolBase::Clean(PT_NORMAL); + RebuildTownKdtree(); + ResetPersistentNewGRFData(); InitializeSound(); diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 87e870056f..07de260389 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -536,6 +536,8 @@ bool AfterLoadGame() GamelogTestRevision(); GamelogTestMode(); + RebuildTownKdtree(); + if (IsSavegameVersionBefore(SLV_98)) GamelogGRFAddList(_grfconfig); if (IsSavegameVersionBefore(SLV_119)) { diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp index a31c886ec2..bc2ed8be6b 100644 --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -28,6 +28,7 @@ void RebuildTownCaches() { Town *town; InitializeBuildingCounts(); + RebuildTownKdtree(); /* Reset town population and num_houses */ FOR_ALL_TOWNS(town) { diff --git a/src/town.h b/src/town.h index 6cff5f7617..76c3b770d4 100644 --- a/src/town.h +++ b/src/town.h @@ -145,6 +145,9 @@ void UpdateAllTownVirtCoords(); void ShowTownViewWindow(TownID town); void ExpandTown(Town *t); +void RebuildTownKdtree(); + + /** * Action types that a company must ask permission for to a town authority. * @see CheckforTownRating diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 4aad76f448..e56cfd4174 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -38,6 +38,7 @@ #include "subsidy_func.h" #include "core/pool_func.hpp" #include "town.h" +#include "town_kdtree.h" #include "townname_func.h" #include "core/random_func.hpp" #include "core/backup_type.hpp" @@ -59,6 +60,20 @@ CargoTypes _town_cargoes_accepted; ///< Bitmap of all cargoes accepted by houses TownPool _town_pool("Town"); INSTANTIATE_POOL_METHODS(Town) + +TownKdtree _town_kdtree(&Kdtree_TownXYFunc); + +void RebuildTownKdtree() +{ + std::vector townids; + Town *town; + FOR_ALL_TOWNS(town) { + townids.push_back(town->index); + } + _town_kdtree.Build(townids.begin(), townids.end()); +} + + /** * Check if a town 'owns' a bridge. * Bridges to not directly have an owner, so we check the tiles adjacent to the bridge ends. @@ -366,30 +381,9 @@ static void AnimateTile_Town(TileIndex tile) */ static bool IsCloseToTown(TileIndex tile, uint dist) { - /* On a large map with many towns, it may be faster to check the surroundings of the tile. - * An iteration in TILE_AREA_LOOP() is generally 2 times faster than one in FOR_ALL_TOWNS(). */ - if (Town::GetNumItems() > (size_t) (dist * dist * 2)) { - const int tx = TileX(tile); - const int ty = TileY(tile); - TileArea tile_area = TileArea( - TileXY(max(0, tx - (int) dist), max(0, ty - (int) dist)), - TileXY(min(MapMaxX(), tx + (int) dist), min(MapMaxY(), ty + (int) dist)) - ); - TILE_AREA_LOOP(atile, tile_area) { - if (GetTileType(atile) == MP_HOUSE) { - Town *t = Town::GetByTile(atile); - if (DistanceManhattan(tile, t->xy) < dist) return true; - } - } - return false; - } - - const Town *t; - - FOR_ALL_TOWNS(t) { - if (DistanceManhattan(tile, t->xy) < dist) return true; - } - return false; + if (_town_kdtree.Count() == 0) return false; + Town *t = Town::Get(_town_kdtree.FindNearest(TileX(tile), TileY(tile))); + return DistanceManhattan(tile, t->xy) < dist; } /** @@ -1682,6 +1676,8 @@ static void DoCreateTown(Town *t, TileIndex tile, uint32 townnameparts, TownSize t->grow_counter = t->index % TOWN_GROWTH_TICKS; t->growth_rate = TownTicksToGameTicks(250); + _town_kdtree.Insert(t->index); + /* Set the default cargo requirement for town growth */ switch (_settings_game.game_creation.landscape) { case LT_ARCTIC: @@ -2092,6 +2088,9 @@ bool GenerateTowns(TownLayout layout) town_names.clear(); + /* Build the town k-d tree again to make sure it's well balanced */ + RebuildTownKdtree(); + if (current_number != 0) return true; /* If current_number is still zero at this point, it means that not a single town has been created. @@ -2867,7 +2866,10 @@ CommandCost CmdDeleteTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 } /* The town destructor will delete the other things related to the town. */ - if (flags & DC_EXEC) delete t; + if (flags & DC_EXEC) { + _town_kdtree.Remove(t->index); + delete t; + } return CommandCost(); } @@ -3392,19 +3394,12 @@ CommandCost CheckIfAuthorityAllowsNewStation(TileIndex tile, DoCommandFlag flags */ Town *CalcClosestTownFromTile(TileIndex tile, uint threshold) { - Town *t; - uint best = threshold; - Town *best_town = NULL; + if (Town::GetNumItems() == 0) return NULL; - FOR_ALL_TOWNS(t) { - uint dist = DistanceManhattan(tile, t->xy); - if (dist < best) { - best = dist; - best_town = t; - } - } - - return best_town; + TownID tid = _town_kdtree.FindNearest(TileX(tile), TileY(tile)); + Town *town = Town::Get(tid); + if (DistanceManhattan(tile, town->xy) < threshold) return town; + return NULL; } /** diff --git a/src/town_kdtree.h b/src/town_kdtree.h new file mode 100644 index 0000000000..ae6b9e4eac --- /dev/null +++ b/src/town_kdtree.h @@ -0,0 +1,20 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file town_kdtree.h Declarations for accessing the k-d tree of towns */ + +#ifndef TOWN_KDTREE_H +#define TOWN_KDTREE_H + +#include "core/kdtree.hpp" +#include "town.h" + +inline uint16 Kdtree_TownXYFunc(TownID tid, int dim) { return (dim == 0) ? TileX(Town::Get(tid)->xy) : TileY(Town::Get(tid)->xy); } +typedef Kdtree TownKdtree; +extern TownKdtree _town_kdtree; + +#endif From d84b67e54d663a62a0a90ddf3fcc7c3f728826af Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Mon, 18 Feb 2019 21:14:52 +0100 Subject: [PATCH 465/622] Codechange: Make a k-d tree index of stations --- projects/openttd_vs140.vcxproj | 1 + projects/openttd_vs140.vcxproj.filters | 3 ++ projects/openttd_vs141.vcxproj | 1 + projects/openttd_vs141.vcxproj.filters | 3 ++ projects/openttd_vs142.vcxproj | 1 + projects/openttd_vs142.vcxproj.filters | 3 ++ source.list | 1 + src/misc.cpp | 2 + src/saveload/afterload.cpp | 1 + src/station.cpp | 17 +++++++++ src/station_base.h | 2 + src/station_cmd.cpp | 31 +++++++++------ src/station_kdtree.h | 42 +++++++++++++++++++++ src/town_cmd.cpp | 52 +++++++++++++++----------- 14 files changed, 127 insertions(+), 33 deletions(-) create mode 100644 src/station_kdtree.h diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index 1d53652168..c1a23497a9 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -646,6 +646,7 @@ + diff --git a/projects/openttd_vs140.vcxproj.filters b/projects/openttd_vs140.vcxproj.filters index b06f9576da..9bd33721ab 100644 --- a/projects/openttd_vs140.vcxproj.filters +++ b/projects/openttd_vs140.vcxproj.filters @@ -1026,6 +1026,9 @@ Header Files + + Header Files + Header Files diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj index 8d2a9dfc9b..2b6c5c1781 100644 --- a/projects/openttd_vs141.vcxproj +++ b/projects/openttd_vs141.vcxproj @@ -646,6 +646,7 @@ + diff --git a/projects/openttd_vs141.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters index b06f9576da..9bd33721ab 100644 --- a/projects/openttd_vs141.vcxproj.filters +++ b/projects/openttd_vs141.vcxproj.filters @@ -1026,6 +1026,9 @@ Header Files + + Header Files + Header Files diff --git a/projects/openttd_vs142.vcxproj b/projects/openttd_vs142.vcxproj index 56455c2f81..66b07576ad 100644 --- a/projects/openttd_vs142.vcxproj +++ b/projects/openttd_vs142.vcxproj @@ -646,6 +646,7 @@ + diff --git a/projects/openttd_vs142.vcxproj.filters b/projects/openttd_vs142.vcxproj.filters index b06f9576da..9bd33721ab 100644 --- a/projects/openttd_vs142.vcxproj.filters +++ b/projects/openttd_vs142.vcxproj.filters @@ -1026,6 +1026,9 @@ Header Files + + Header Files + Header Files diff --git a/source.list b/source.list index 969d90b9cb..74068d48db 100644 --- a/source.list +++ b/source.list @@ -333,6 +333,7 @@ spritecache.h station_base.h station_func.h station_gui.h +station_kdtree.h station_type.h statusbar_gui.h stdafx.h diff --git a/src/misc.cpp b/src/misc.cpp index c3130d85bd..b1d480d829 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -28,6 +28,7 @@ #include "core/pool_type.hpp" #include "game/game.hpp" #include "linkgraph/linkgraphschedule.h" +#include "station_kdtree.h" #include "town_kdtree.h" #include "safeguards.h" @@ -76,6 +77,7 @@ void InitializeGame(uint size_x, uint size_y, bool reset_date, bool reset_settin LinkGraphSchedule::Clear(); PoolBase::Clean(PT_NORMAL); + RebuildStationKdtree(); RebuildTownKdtree(); ResetPersistentNewGRFData(); diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 07de260389..a80114f917 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -537,6 +537,7 @@ bool AfterLoadGame() GamelogTestMode(); RebuildTownKdtree(); + RebuildStationKdtree(); if (IsSavegameVersionBefore(SLV_98)) GamelogGRFAddList(_grfconfig); diff --git a/src/station.cpp b/src/station.cpp index 27063dcd7a..5722fcdcfc 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -21,6 +21,7 @@ #include "vehiclelist.h" #include "core/pool_func.hpp" #include "station_base.h" +#include "station_kdtree.h" #include "roadstop_base.h" #include "industry.h" #include "town.h" @@ -36,6 +37,20 @@ StationPool _station_pool("Station"); INSTANTIATE_POOL_METHODS(Station) + +StationKdtree _station_kdtree(Kdtree_StationXYFunc); + +void RebuildStationKdtree() +{ + std::vector stids; + BaseStation *st; + FOR_ALL_STATIONS(st) { + stids.push_back(st->index); + } + _station_kdtree.Build(stids.begin(), stids.end()); +} + + BaseStation::~BaseStation() { free(this->name); @@ -146,6 +161,8 @@ Station::~Station() } CargoPacket::InvalidateAllFrom(this->index); + + _station_kdtree.Remove(this->index); } diff --git a/src/station_base.h b/src/station_base.h index a48daa653c..b3a4a76c71 100644 --- a/src/station_base.h +++ b/src/station_base.h @@ -556,4 +556,6 @@ public: } }; +void RebuildStationKdtree(); + #endif /* STATION_BASE_H */ diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index cb588ef804..67ea4daf50 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -37,6 +37,7 @@ #include "animated_tile_func.h" #include "elrail_func.h" #include "station_base.h" +#include "station_kdtree.h" #include "roadstop_base.h" #include "newgrf_railtype.h" #include "waypoint_base.h" @@ -359,19 +360,21 @@ static StringID GenerateStationName(Station *st, TileIndex tile, StationNaming n static Station *GetClosestDeletedStation(TileIndex tile) { uint threshold = 8; - Station *best_station = NULL; - Station *st; - FOR_ALL_STATIONS(st) { + Station *best_station = NULL; + ForAllStationsRadius(tile, threshold, [&](Station *st) { if (!st->IsInUse() && st->owner == _current_company) { uint cur_dist = DistanceManhattan(tile, st->xy); if (cur_dist < threshold) { threshold = cur_dist; best_station = st; + } else if (cur_dist == threshold && best_station != NULL) { + /* In case of a tie, lowest station ID wins */ + if (st->index < best_station->index) best_station = st; } } - } + }); return best_station; } @@ -667,8 +670,13 @@ static void UpdateStationSignCoord(BaseStation *st) if (r->IsEmpty()) return; // no tiles belong to this station /* clamp sign coord to be inside the station rect */ - st->xy = TileXY(ClampU(TileX(st->xy), r->left, r->right), ClampU(TileY(st->xy), r->top, r->bottom)); - st->UpdateVirtCoord(); + TileIndex new_xy = TileXY(ClampU(TileX(st->xy), r->left, r->right), ClampU(TileY(st->xy), r->top, r->bottom)); + if (new_xy != st->xy) { + _station_kdtree.Remove(st->index); + st->xy = new_xy; + _station_kdtree.Insert(st->index); + st->UpdateVirtCoord(); + } if (!Station::IsExpected(st)) return; Station *full_station = Station::From(st); @@ -706,6 +714,7 @@ static CommandCost BuildStationPart(Station **st, DoCommandFlag flags, bool reus if (flags & DC_EXEC) { *st = new Station(area.tile); + _station_kdtree.Insert((*st)->index); (*st)->town = ClosestTownFromTile(area.tile, UINT_MAX); (*st)->string_id = GenerateStationName(*st, area.tile, name_class); @@ -3694,11 +3703,8 @@ void StationMonthlyLoop() void ModifyStationRatingAround(TileIndex tile, Owner owner, int amount, uint radius) { - Station *st; - - FOR_ALL_STATIONS(st) { - if (st->owner == owner && - DistanceManhattan(tile, st->xy) <= radius) { + ForAllStationsRadius(tile, radius, [&](Station *st) { + if (st->owner == owner) { for (CargoID i = 0; i < NUM_CARGO; i++) { GoodsEntry *ge = &st->goods[i]; @@ -3707,7 +3713,7 @@ void ModifyStationRatingAround(TileIndex tile, Owner owner, int amount, uint rad } } } - } + }); } static uint UpdateStationWaiting(Station *st, CargoID type, uint amount, SourceType source_type, SourceID source_id) @@ -3947,6 +3953,7 @@ void BuildOilRig(TileIndex tile) } Station *st = new Station(tile); + _station_kdtree.Insert(st->index); st->town = ClosestTownFromTile(tile, UINT_MAX); st->string_id = GenerateStationName(st, tile, STATIONNAMING_OILRIG); diff --git a/src/station_kdtree.h b/src/station_kdtree.h new file mode 100644 index 0000000000..321bbacc6f --- /dev/null +++ b/src/station_kdtree.h @@ -0,0 +1,42 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file station_kdtree.h Declarations for accessing the k-d tree of stations */ + +#ifndef STATION_KDTREE_H +#define STATION_KDTREE_H + +#include "core/kdtree.hpp" +#include "core/math_func.hpp" +#include "station_base.h" +#include "map_func.h" + +inline uint16 Kdtree_StationXYFunc(StationID stid, int dim) { return (dim == 0) ? TileX(BaseStation::Get(stid)->xy) : TileY(BaseStation::Get(stid)->xy); } +typedef Kdtree StationKdtree; +extern StationKdtree _station_kdtree; + +/** + * Call a function on all stations whose sign is within a radius of a center tile. + * @param center Central tile to search around. + * @param radius Distance in both X and Y to search within. + * @param func The function to call, must take a single parameter which is Station*. + */ +template +void ForAllStationsRadius(TileIndex center, uint radius, Func func) +{ + uint16 x1, y1, x2, y2; + x1 = (uint16)max(0, TileX(center) - radius); + x2 = (uint16)min(TileX(center) + radius + 1, MapSizeX()); + y1 = (uint16)max(0, TileY(center) - radius); + y2 = (uint16)min(TileY(center) + radius + 1, MapSizeY()); + + _station_kdtree.FindContained(x1, y1, x2, y2, [&](StationID id) { + func(Station::Get(id)); + }); +} + +#endif diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index e56cfd4174..0f1ccbba35 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -18,6 +18,7 @@ #include "command_func.h" #include "industry.h" #include "station_base.h" +#include "station_kdtree.h" #include "company_base.h" #include "news_func.h" #include "error.h" @@ -3197,6 +3198,21 @@ CommandCost CmdDoTownAction(TileIndex tile, DoCommandFlag flags, uint32 p1, uint return cost; } +template +static void ForAllStationsNearTown(Town *t, Func func) +{ + /* Ideally the search radius should be close to the actual town zone 0 radius. + * The true radius is not stored or calculated anywhere, only the squared radius. */ + /* The efficiency of this search might be improved for large towns and many stations on the map, + * by using an integer square root approximation giving a value not less than the true square root. */ + uint search_radius = t->cache.squared_town_zone_radius[0] / 2; + ForAllStationsRadius(t->xy, search_radius, [&](const Station * st) { + if (DistanceSquare(st->xy, t->xy) <= t->cache.squared_town_zone_radius[0]) { + func(st); + } + }); +} + static void UpdateTownRating(Town *t) { /* Increase company ratings if they're low */ @@ -3207,22 +3223,19 @@ static void UpdateTownRating(Town *t) } } - const Station *st; - FOR_ALL_STATIONS(st) { - if (DistanceSquare(st->xy, t->xy) <= t->cache.squared_town_zone_radius[0]) { - if (st->time_since_load <= 20 || st->time_since_unload <= 20) { - if (Company::IsValidID(st->owner)) { - int new_rating = t->ratings[st->owner] + RATING_STATION_UP_STEP; - t->ratings[st->owner] = min(new_rating, INT16_MAX); // do not let it overflow - } - } else { - if (Company::IsValidID(st->owner)) { - int new_rating = t->ratings[st->owner] + RATING_STATION_DOWN_STEP; - t->ratings[st->owner] = max(new_rating, INT16_MIN); - } + ForAllStationsNearTown(t, [&](const Station *st) { + if (st->time_since_load <= 20 || st->time_since_unload <= 20) { + if (Company::IsValidID(st->owner)) { + int new_rating = t->ratings[st->owner] + RATING_STATION_UP_STEP; + t->ratings[st->owner] = min(new_rating, INT16_MAX); // do not let it overflow + } + } else { + if (Company::IsValidID(st->owner)) { + int new_rating = t->ratings[st->owner] + RATING_STATION_DOWN_STEP; + t->ratings[st->owner] = max(new_rating, INT16_MIN); } } - } + }); /* clamp all ratings to valid values */ for (uint i = 0; i < MAX_COMPANIES; i++) { @@ -3257,14 +3270,11 @@ static void UpdateTownGrowCounter(Town *t, uint16 prev_growth_rate) static int CountActiveStations(Town *t) { int n = 0; - const Station *st; - FOR_ALL_STATIONS(st) { - if (DistanceSquare(st->xy, t->xy) <= t->cache.squared_town_zone_radius[0]) { - if (st->time_since_load <= 20 || st->time_since_unload <= 20) { - n++; - } + ForAllStationsNearTown(t, [&](const Station * st) { + if (st->time_since_load <= 20 || st->time_since_unload <= 20) { + n++; } - } + }); return n; } From e8d397e4ee71fa9aa952a16fc2f8431dfff57f7c Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Fri, 22 Feb 2019 17:57:28 +0100 Subject: [PATCH 466/622] Codechange: Make a merged k-d tree index of all viewport signs --- projects/openttd_vs140.vcxproj | 1 + projects/openttd_vs140.vcxproj.filters | 3 + projects/openttd_vs141.vcxproj | 1 + projects/openttd_vs141.vcxproj.filters | 3 + projects/openttd_vs142.vcxproj | 1 + projects/openttd_vs142.vcxproj.filters | 3 + source.list | 1 + src/misc.cpp | 2 + src/saveload/afterload.cpp | 5 + src/signs_cmd.cpp | 5 +- src/station.cpp | 2 + src/station_cmd.cpp | 5 + src/town_cmd.cpp | 3 + src/viewport.cpp | 383 ++++++++++++++++++------- src/viewport_kdtree.h | 83 ++++++ src/waypoint.cpp | 2 + src/waypoint_cmd.cpp | 8 + 17 files changed, 409 insertions(+), 102 deletions(-) create mode 100644 src/viewport_kdtree.h diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index c1a23497a9..63aa57f561 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -698,6 +698,7 @@ + diff --git a/projects/openttd_vs140.vcxproj.filters b/projects/openttd_vs140.vcxproj.filters index 9bd33721ab..3c4fc43d98 100644 --- a/projects/openttd_vs140.vcxproj.filters +++ b/projects/openttd_vs140.vcxproj.filters @@ -1182,6 +1182,9 @@ Header Files + + Header Files + Header Files diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj index 2b6c5c1781..c65269eab4 100644 --- a/projects/openttd_vs141.vcxproj +++ b/projects/openttd_vs141.vcxproj @@ -698,6 +698,7 @@ + diff --git a/projects/openttd_vs141.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters index 9bd33721ab..3c4fc43d98 100644 --- a/projects/openttd_vs141.vcxproj.filters +++ b/projects/openttd_vs141.vcxproj.filters @@ -1182,6 +1182,9 @@ Header Files + + Header Files + Header Files diff --git a/projects/openttd_vs142.vcxproj b/projects/openttd_vs142.vcxproj index 66b07576ad..0ffaf9f388 100644 --- a/projects/openttd_vs142.vcxproj +++ b/projects/openttd_vs142.vcxproj @@ -698,6 +698,7 @@ + diff --git a/projects/openttd_vs142.vcxproj.filters b/projects/openttd_vs142.vcxproj.filters index 9bd33721ab..3c4fc43d98 100644 --- a/projects/openttd_vs142.vcxproj.filters +++ b/projects/openttd_vs142.vcxproj.filters @@ -1182,6 +1182,9 @@ Header Files + + Header Files + Header Files diff --git a/source.list b/source.list index 74068d48db..d744101ea3 100644 --- a/source.list +++ b/source.list @@ -385,6 +385,7 @@ vehicle_gui_base.h vehicle_type.h vehiclelist.h viewport_func.h +viewport_kdtree.h viewport_sprite_sorter.h viewport_type.h water.h diff --git a/src/misc.cpp b/src/misc.cpp index b1d480d829..4e3086fcea 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -30,6 +30,7 @@ #include "linkgraph/linkgraphschedule.h" #include "station_kdtree.h" #include "town_kdtree.h" +#include "viewport_kdtree.h" #include "safeguards.h" @@ -79,6 +80,7 @@ void InitializeGame(uint size_x, uint size_y, bool reset_date, bool reset_settin RebuildStationKdtree(); RebuildTownKdtree(); + RebuildViewportKdtree(); ResetPersistentNewGRFData(); diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index a80114f917..ea7882e895 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -19,6 +19,7 @@ #include "../network/network_func.h" #include "../gfxinit.h" #include "../viewport_func.h" +#include "../viewport_kdtree.h" #include "../industry.h" #include "../clear_map.h" #include "../vehicle_func.h" @@ -221,6 +222,7 @@ void UpdateAllVirtCoords() UpdateAllStationVirtCoords(); UpdateAllSignVirtCoords(); UpdateAllTownVirtCoords(); + RebuildViewportKdtree(); } /** @@ -538,6 +540,9 @@ bool AfterLoadGame() RebuildTownKdtree(); RebuildStationKdtree(); + /* This needs to be done even before conversion, because some conversions will destroy objects + * that otherwise won't exist in the tree. */ + RebuildViewportKdtree(); if (IsSavegameVersionBefore(SLV_98)) GamelogGRFAddList(_grfconfig); diff --git a/src/signs_cmd.cpp b/src/signs_cmd.cpp index 4badd36050..69fde2559f 100644 --- a/src/signs_cmd.cpp +++ b/src/signs_cmd.cpp @@ -16,6 +16,7 @@ #include "signs_func.h" #include "command_func.h" #include "tilehighlight_func.h" +#include "viewport_kdtree.h" #include "window_func.h" #include "string_func.h" @@ -57,7 +58,7 @@ CommandCost CmdPlaceSign(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 if (!StrEmpty(text)) { si->name = stredup(text); } - si->UpdateVirtCoord(); + _viewport_sign_kdtree.Insert(ViewportSignKdtreeItem::MakeSign(si->index)); InvalidateWindowData(WC_SIGN_LIST, 0, 0); _new_sign_id = si->index; } @@ -98,7 +99,7 @@ CommandCost CmdRenameSign(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 } } else { // Delete sign if (flags & DC_EXEC) { - si->sign.MarkDirty(); + _viewport_sign_kdtree.Remove(ViewportSignKdtreeItem::MakeSign(si->index)); delete si; InvalidateWindowData(WC_SIGN_LIST, 0, 0); diff --git a/src/station.cpp b/src/station.cpp index 5722fcdcfc..3c50ef94f4 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -14,6 +14,7 @@ #include "company_base.h" #include "roadveh.h" #include "viewport_func.h" +#include "viewport_kdtree.h" #include "date_func.h" #include "command_func.h" #include "news_func.h" @@ -163,6 +164,7 @@ Station::~Station() CargoPacket::InvalidateAllFrom(this->index); _station_kdtree.Remove(this->index); + _viewport_sign_kdtree.Remove(ViewportSignKdtreeItem::MakeStation(this->index)); } diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 67ea4daf50..f7eb353a09 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -14,6 +14,7 @@ #include "bridge_map.h" #include "cmd_helper.h" #include "viewport_func.h" +#include "viewport_kdtree.h" #include "command_func.h" #include "town.h" #include "news_func.h" @@ -672,9 +673,11 @@ static void UpdateStationSignCoord(BaseStation *st) /* clamp sign coord to be inside the station rect */ TileIndex new_xy = TileXY(ClampU(TileX(st->xy), r->left, r->right), ClampU(TileY(st->xy), r->top, r->bottom)); if (new_xy != st->xy) { + _viewport_sign_kdtree.Remove(ViewportSignKdtreeItem::MakeStation(st->index)); _station_kdtree.Remove(st->index); st->xy = new_xy; _station_kdtree.Insert(st->index); + _viewport_sign_kdtree.Insert(ViewportSignKdtreeItem::MakeStation(st->index)); st->UpdateVirtCoord(); } @@ -715,6 +718,7 @@ static CommandCost BuildStationPart(Station **st, DoCommandFlag flags, bool reus if (flags & DC_EXEC) { *st = new Station(area.tile); _station_kdtree.Insert((*st)->index); + _viewport_sign_kdtree.Insert(ViewportSignKdtreeItem::MakeStation((*st)->index)); (*st)->town = ClosestTownFromTile(area.tile, UINT_MAX); (*st)->string_id = GenerateStationName(*st, area.tile, name_class); @@ -3975,6 +3979,7 @@ void BuildOilRig(TileIndex tile) st->rect.BeforeAddTile(tile, StationRect::ADD_FORCE); st->UpdateVirtCoord(); + _viewport_sign_kdtree.Insert(ViewportSignKdtreeItem::MakeStation(st->index)); st->RecomputeCatchment(); UpdateStationAcceptance(st, false); } diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 0f1ccbba35..ee2f49d930 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -14,6 +14,7 @@ #include "road_cmd.h" #include "landscape.h" #include "viewport_func.h" +#include "viewport_kdtree.h" #include "cmd_helper.h" #include "command_func.h" #include "industry.h" @@ -1713,6 +1714,7 @@ static void DoCreateTown(Town *t, TileIndex tile, uint32 townnameparts, TownSize t->townnameparts = townnameparts; t->UpdateVirtCoord(); + _viewport_sign_kdtree.Insert(ViewportSignKdtreeItem::MakeTown(t->index)); InvalidateWindowData(WC_TOWN_DIRECTORY, 0, 0); t->InitializeLayout(layout); @@ -2869,6 +2871,7 @@ CommandCost CmdDeleteTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 /* The town destructor will delete the other things related to the town. */ if (flags & DC_EXEC) { _town_kdtree.Remove(t->index); + _viewport_sign_kdtree.Insert(ViewportSignKdtreeItem::MakeTown(t->index)); delete t; } diff --git a/src/viewport.cpp b/src/viewport.cpp index 8945951191..5e82971435 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -82,6 +82,7 @@ #include "tilehighlight_func.h" #include "window_gui.h" #include "linkgraph/linkgraph_gui.h" +#include "viewport_kdtree.h" #include "viewport_sprite_sorter.h" #include "bridge_map.h" #include "company_base.h" @@ -99,6 +100,10 @@ Point _tile_fract_coords; +ViewportSignKdtree _viewport_sign_kdtree(&Kdtree_ViewportSignXYFunc); +static int _viewport_sign_maxwidth = 0; + + static const int MAX_TILE_EXTENT_LEFT = ZOOM_LVL_BASE * TILE_PIXELS; ///< Maximum left extent of tile relative to north corner. static const int MAX_TILE_EXTENT_RIGHT = ZOOM_LVL_BASE * TILE_PIXELS; ///< Maximum right extent of tile relative to north corner. static const int MAX_TILE_EXTENT_TOP = ZOOM_LVL_BASE * MAX_BUILDING_PIXELS; ///< Maximum top extent of tile relative to north corner (not considering bridges). @@ -1214,62 +1219,117 @@ void ViewportAddString(const DrawPixelInfo *dpi, ZoomLevel small_from, const Vie } } -static void ViewportAddTownNames(DrawPixelInfo *dpi) +static Rect ExpandRectWithViewportSignMargins(Rect r, ZoomLevel zoom) { - if (!HasBit(_display_opt, DO_SHOW_TOWN_NAMES) || _game_mode == GM_MENU) return; + /* Pessimistically always use normal font, but also assume small font is never larger in either dimension */ + const int fh = FONT_HEIGHT_NORMAL; + const int max_tw = _viewport_sign_maxwidth / 2 + 1; + const int expand_y = ScaleByZoom(VPSM_TOP + fh + VPSM_BOTTOM, zoom); + const int expand_x = ScaleByZoom(VPSM_LEFT + max_tw + VPSM_RIGHT, zoom); - const Town *t; - FOR_ALL_TOWNS(t) { - ViewportAddString(dpi, ZOOM_LVL_OUT_16X, &t->cache.sign, - _settings_client.gui.population_in_label ? STR_VIEWPORT_TOWN_POP : STR_VIEWPORT_TOWN, - STR_VIEWPORT_TOWN_TINY_WHITE, STR_VIEWPORT_TOWN_TINY_BLACK, - t->index, t->cache.population); - } + r.left -= expand_x; + r.right += expand_x; + r.top -= expand_y; + r.bottom += expand_y; + + return r; } - -static void ViewportAddStationNames(DrawPixelInfo *dpi) +static void ViewportAddKdtreeSigns(DrawPixelInfo *dpi) { - if (!(HasBit(_display_opt, DO_SHOW_STATION_NAMES) || HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES)) || _game_mode == GM_MENU) return; + Rect search_rect{ dpi->left, dpi->top, dpi->left + dpi->width, dpi->top + dpi->height }; + search_rect = ExpandRectWithViewportSignMargins(search_rect, dpi->zoom); + + bool show_stations = HasBit(_display_opt, DO_SHOW_STATION_NAMES) && _game_mode != GM_MENU; + bool show_waypoints = HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES) && _game_mode != GM_MENU; + bool show_towns = HasBit(_display_opt, DO_SHOW_TOWN_NAMES) && _game_mode != GM_MENU; + bool show_signs = HasBit(_display_opt, DO_SHOW_SIGNS) && !IsInvisibilitySet(TO_SIGNS); + bool show_competitors = HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS); const BaseStation *st; - FOR_ALL_BASE_STATIONS(st) { - /* Check whether the base station is a station or a waypoint */ - bool is_station = Station::IsExpected(st); - - /* Don't draw if the display options are disabled */ - if (!HasBit(_display_opt, is_station ? DO_SHOW_STATION_NAMES : DO_SHOW_WAYPOINT_NAMES)) continue; - - /* Don't draw if station is owned by another company and competitor station names are hidden. Stations owned by none are never ignored. */ - if (!HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS) && _local_company != st->owner && st->owner != OWNER_NONE) continue; - - ViewportAddString(dpi, ZOOM_LVL_OUT_16X, &st->sign, - is_station ? STR_VIEWPORT_STATION : STR_VIEWPORT_WAYPOINT, - (is_station ? STR_VIEWPORT_STATION : STR_VIEWPORT_WAYPOINT) + 1, STR_NULL, - st->index, st->facilities, (st->owner == OWNER_NONE || !st->IsInUse()) ? COLOUR_GREY : _company_colours[st->owner]); - } -} - - -static void ViewportAddSigns(DrawPixelInfo *dpi) -{ - /* Signs are turned off or are invisible */ - if (!HasBit(_display_opt, DO_SHOW_SIGNS) || IsInvisibilitySet(TO_SIGNS)) return; - const Sign *si; - FOR_ALL_SIGNS(si) { - /* Don't draw if sign is owned by another company and competitor signs should be hidden. - * Note: It is intentional that also signs owned by OWNER_NONE are hidden. Bankrupt - * companies can leave OWNER_NONE signs after them. */ - if (!HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS) && _local_company != si->owner && si->owner != OWNER_DEITY) continue; + /* Collect all the items first and draw afterwards, to ensure layering */ + std::vector stations; + std::vector towns; + std::vector signs; + + _viewport_sign_kdtree.FindContained(search_rect.left, search_rect.top, search_rect.right, search_rect.bottom, [&](const ViewportSignKdtreeItem & item) { + switch (item.type) { + case ViewportSignKdtreeItem::VKI_STATION: + if (!show_stations) break; + st = BaseStation::Get(item.id.station); + + /* Don't draw if station is owned by another company and competitor station names are hidden. Stations owned by none are never ignored. */ + if (!show_competitors && _local_company != st->owner && st->owner != OWNER_NONE) break; + + stations.push_back(st); + break; + + case ViewportSignKdtreeItem::VKI_WAYPOINT: + if (!show_waypoints) break; + st = BaseStation::Get(item.id.station); + + /* Don't draw if station is owned by another company and competitor station names are hidden. Stations owned by none are never ignored. */ + if (!show_competitors && _local_company != st->owner && st->owner != OWNER_NONE) break; + + stations.push_back(st); + break; + + case ViewportSignKdtreeItem::VKI_TOWN: + if (!show_towns) break; + towns.push_back(Town::Get(item.id.town)); + break; + + case ViewportSignKdtreeItem::VKI_SIGN: + if (!show_signs) break; + si = Sign::Get(item.id.sign); + + /* Don't draw if sign is owned by another company and competitor signs should be hidden. + * Note: It is intentional that also signs owned by OWNER_NONE are hidden. Bankrupt + * companies can leave OWNER_NONE signs after them. */ + if (!show_competitors && _local_company != si->owner && si->owner != OWNER_DEITY) break; + + signs.push_back(si); + break; + + default: + NOT_REACHED(); + } + }); + + /* Layering order (bottom to top): Town names, signs, stations */ + + for (const auto *t : towns) { + ViewportAddString(dpi, ZOOM_LVL_OUT_16X, &t->cache.sign, + _settings_client.gui.population_in_label ? STR_VIEWPORT_TOWN_POP : STR_VIEWPORT_TOWN, + STR_VIEWPORT_TOWN_TINY_WHITE, STR_VIEWPORT_TOWN_TINY_BLACK, + t->index, t->cache.population); + } + + for (const auto *si : signs) { ViewportAddString(dpi, ZOOM_LVL_OUT_16X, &si->sign, - STR_WHITE_SIGN, - (IsTransparencySet(TO_SIGNS) || si->owner == OWNER_DEITY) ? STR_VIEWPORT_SIGN_SMALL_WHITE : STR_VIEWPORT_SIGN_SMALL_BLACK, STR_NULL, - si->index, 0, (si->owner == OWNER_NONE) ? COLOUR_GREY : (si->owner == OWNER_DEITY ? INVALID_COLOUR : _company_colours[si->owner])); + STR_WHITE_SIGN, + (IsTransparencySet(TO_SIGNS) || si->owner == OWNER_DEITY) ? STR_VIEWPORT_SIGN_SMALL_WHITE : STR_VIEWPORT_SIGN_SMALL_BLACK, STR_NULL, + si->index, 0, (si->owner == OWNER_NONE) ? COLOUR_GREY : (si->owner == OWNER_DEITY ? INVALID_COLOUR : _company_colours[si->owner])); + } + + for (const auto *st : stations) { + if (Station::IsExpected(st)) { + /* Station */ + ViewportAddString(dpi, ZOOM_LVL_OUT_16X, &st->sign, + STR_VIEWPORT_STATION, STR_VIEWPORT_STATION + 1, STR_NULL, + st->index, st->facilities, (st->owner == OWNER_NONE || !st->IsInUse()) ? COLOUR_GREY : _company_colours[st->owner]); + } else { + /* Waypoint */ + ViewportAddString(dpi, ZOOM_LVL_OUT_16X, &st->sign, + STR_VIEWPORT_WAYPOINT, STR_VIEWPORT_WAYPOINT + 1, STR_NULL, + st->index, st->facilities, (st->owner == OWNER_NONE || !st->IsInUse()) ? COLOUR_GREY : _company_colours[st->owner]); + } } } + /** * Update the position of the viewport sign. * @param center the (preferred) center of the viewport sign @@ -1520,9 +1580,7 @@ void ViewportDoDraw(const ViewPort *vp, int left, int top, int right, int bottom ViewportAddLandscape(); ViewportAddVehicles(&_vd.dpi); - ViewportAddTownNames(&_vd.dpi); - ViewportAddStationNames(&_vd.dpi); - ViewportAddSigns(&_vd.dpi); + ViewportAddKdtreeSigns(&_vd.dpi); DrawTextEffects(&_vd.dpi); @@ -1930,75 +1988,202 @@ static bool CheckClickOnViewportSign(const ViewPort *vp, int x, int y, const Vie int sign_half_width = ScaleByZoom((small ? sign->width_small : sign->width_normal) / 2, vp->zoom); int sign_height = ScaleByZoom(VPSM_TOP + (small ? FONT_HEIGHT_SMALL : FONT_HEIGHT_NORMAL) + VPSM_BOTTOM, vp->zoom); - x = ScaleByZoom(x - vp->left, vp->zoom) + vp->virtual_left; - y = ScaleByZoom(y - vp->top, vp->zoom) + vp->virtual_top; - return y >= sign->top && y < sign->top + sign_height && x >= sign->center - sign_half_width && x < sign->center + sign_half_width; } -static bool CheckClickOnTown(const ViewPort *vp, int x, int y) + +/** + * Check whether any viewport sign was clicked, and dispatch the click. + * @param vp the clicked viewport + * @param x X position of click + * @param y Y position of click + * @return true if the sign was hit + */ +static bool CheckClickOnViewportSign(const ViewPort *vp, int x, int y) { - if (!HasBit(_display_opt, DO_SHOW_TOWN_NAMES)) return false; + x = ScaleByZoom(x - vp->left, vp->zoom) + vp->virtual_left; + y = ScaleByZoom(y - vp->top, vp->zoom) + vp->virtual_top; - const Town *t; - FOR_ALL_TOWNS(t) { - if (CheckClickOnViewportSign(vp, x, y, &t->cache.sign)) { - ShowTownViewWindow(t->index); - return true; + Rect search_rect{ x - 1, y - 1, x + 1, y + 1 }; + search_rect = ExpandRectWithViewportSignMargins(search_rect, vp->zoom); + + bool show_stations = HasBit(_display_opt, DO_SHOW_STATION_NAMES) && _game_mode != GM_MENU; + bool show_waypoints = HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES) && _game_mode != GM_MENU; + bool show_towns = HasBit(_display_opt, DO_SHOW_TOWN_NAMES) && _game_mode != GM_MENU; + bool show_signs = HasBit(_display_opt, DO_SHOW_SIGNS) && !IsInvisibilitySet(TO_SIGNS); + bool show_competitors = HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS); + + /* Topmost of each type that was hit */ + BaseStation *st = NULL, *last_st = NULL; + Town *t = NULL, *last_t = NULL; + Sign *si = NULL, *last_si = NULL; + + /* See ViewportAddKdtreeSigns() for details on the search logic */ + _viewport_sign_kdtree.FindContained(search_rect.left, search_rect.top, search_rect.right, search_rect.bottom, [&](const ViewportSignKdtreeItem & item) { + switch (item.type) { + case ViewportSignKdtreeItem::VKI_STATION: + if (!show_stations) break; + st = BaseStation::Get(item.id.station); + if (!show_competitors && _local_company != st->owner && st->owner != OWNER_NONE) break; + if (CheckClickOnViewportSign(vp, x, y, &st->sign)) last_st = st; + break; + + case ViewportSignKdtreeItem::VKI_WAYPOINT: + if (!show_waypoints) break; + st = BaseStation::Get(item.id.station); + if (!show_competitors && _local_company != st->owner && st->owner != OWNER_NONE) break; + if (CheckClickOnViewportSign(vp, x, y, &st->sign)) last_st = st; + break; + + case ViewportSignKdtreeItem::VKI_TOWN: + if (!show_towns) break; + t = Town::Get(item.id.town); + if (CheckClickOnViewportSign(vp, x, y, &t->cache.sign)) last_t = t; + break; + + case ViewportSignKdtreeItem::VKI_SIGN: + if (!show_signs) break; + si = Sign::Get(item.id.sign); + if (!show_competitors && _local_company != si->owner && si->owner != OWNER_DEITY) break; + if (CheckClickOnViewportSign(vp, x, y, &si->sign)) last_si = si; + break; + + default: + NOT_REACHED(); } - } + }); - return false; -} - -static bool CheckClickOnStation(const ViewPort *vp, int x, int y) -{ - if (!(HasBit(_display_opt, DO_SHOW_STATION_NAMES) || HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES)) || IsInvisibilitySet(TO_SIGNS)) return false; - - const BaseStation *st; - FOR_ALL_BASE_STATIONS(st) { - /* Check whether the base station is a station or a waypoint */ - bool is_station = Station::IsExpected(st); - - /* Don't check if the display options are disabled */ - if (!HasBit(_display_opt, is_station ? DO_SHOW_STATION_NAMES : DO_SHOW_WAYPOINT_NAMES)) continue; - - /* Don't check if competitor signs are not shown and the sign isn't owned by the local company */ - if (!HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS) && _local_company != st->owner && st->owner != OWNER_NONE) continue; - - if (CheckClickOnViewportSign(vp, x, y, &st->sign)) { - if (is_station) { - ShowStationViewWindow(st->index); - } else { - ShowWaypointWindow(Waypoint::From(st)); - } - return true; + /* Select which hit to handle based on priority */ + if (last_st != NULL) { + if (Station::IsExpected(last_st)) { + ShowStationViewWindow(last_st->index); + } else { + ShowWaypointWindow(Waypoint::From(last_st)); } + return true; + } else if (last_t != NULL) { + ShowTownViewWindow(last_t->index); + return true; + } else if (last_si != NULL) { + HandleClickOnSign(last_si); + return true; + } else { + return false; } - - return false; } -static bool CheckClickOnSign(const ViewPort *vp, int x, int y) +ViewportSignKdtreeItem ViewportSignKdtreeItem::MakeStation(StationID id) { - /* Signs are turned off, or they are transparent and invisibility is ON, or company is a spectator */ - if (!HasBit(_display_opt, DO_SHOW_SIGNS) || IsInvisibilitySet(TO_SIGNS) || _local_company == COMPANY_SPECTATOR) return false; + ViewportSignKdtreeItem item; + item.type = VKI_STATION; + item.id.station = id; - const Sign *si; - FOR_ALL_SIGNS(si) { - /* If competitor signs are hidden, don't check signs that aren't owned by local company */ - if (!HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS) && _local_company != si->owner && si->owner != OWNER_DEITY) continue; - if (si->owner == OWNER_DEITY && _game_mode != GM_EDITOR) continue; + const Station *st = Station::Get(id); + Point pt = RemapCoords2(TileX(st->xy) * TILE_SIZE, TileY(st->xy) * TILE_SIZE); - if (CheckClickOnViewportSign(vp, x, y, &si->sign)) { - HandleClickOnSign(si); - return true; - } + pt.y -= 32 * ZOOM_LVL_BASE; + if ((st->facilities & FACIL_AIRPORT) && st->airport.type == AT_OILRIG) pt.y -= 16 * ZOOM_LVL_BASE; + + item.center = pt.x; + item.top = pt.y; + + /* Assume the sign can be a candidate for drawing, so measure its width */ + _viewport_sign_maxwidth = max(_viewport_sign_maxwidth, st->sign.width_normal); + + return item; +} + +ViewportSignKdtreeItem ViewportSignKdtreeItem::MakeWaypoint(StationID id) +{ + ViewportSignKdtreeItem item; + item.type = VKI_WAYPOINT; + item.id.station = id; + + const Waypoint *st = Waypoint::Get(id); + Point pt = RemapCoords2(TileX(st->xy) * TILE_SIZE, TileY(st->xy) * TILE_SIZE); + + pt.y -= 32 * ZOOM_LVL_BASE; + + item.center = pt.x; + item.top = pt.y; + + /* Assume the sign can be a candidate for drawing, so measure its width */ + _viewport_sign_maxwidth = max(_viewport_sign_maxwidth, st->sign.width_normal); + + return item; +} + +ViewportSignKdtreeItem ViewportSignKdtreeItem::MakeTown(TownID id) +{ + ViewportSignKdtreeItem item; + item.type = VKI_TOWN; + item.id.town = id; + + const Town *town = Town::Get(id); + Point pt = RemapCoords2(TileX(town->xy) * TILE_SIZE, TileY(town->xy) * TILE_SIZE); + + pt.y -= 24 * ZOOM_LVL_BASE; + + item.center = pt.x; + item.top = pt.y; + + /* Assume the sign can be a candidate for drawing, so measure its width */ + _viewport_sign_maxwidth = max(_viewport_sign_maxwidth, town->cache.sign.width_normal); + + return item; +} + +ViewportSignKdtreeItem ViewportSignKdtreeItem::MakeSign(SignID id) +{ + ViewportSignKdtreeItem item; + item.type = VKI_SIGN; + item.id.sign = id; + + const Sign *sign = Sign::Get(id); + Point pt = RemapCoords(sign->x, sign->y, sign->z); + + pt.y -= 6 * ZOOM_LVL_BASE; + + item.center = pt.x; + item.top = pt.y; + + /* Assume the sign can be a candidate for drawing, so measure its width */ + _viewport_sign_maxwidth = max(_viewport_sign_maxwidth, sign->sign.width_normal); + + return item; +} + +void RebuildViewportKdtree() +{ + /* Reset biggest size sign seen */ + _viewport_sign_maxwidth = 0; + + std::vector items; + items.reserve(BaseStation::GetNumItems() + Town::GetNumItems() + Sign::GetNumItems()); + + const Station *st; + FOR_ALL_STATIONS(st) { + items.push_back(ViewportSignKdtreeItem::MakeStation(st->index)); } - return false; + const Waypoint *wp; + FOR_ALL_WAYPOINTS(wp) { + items.push_back(ViewportSignKdtreeItem::MakeWaypoint(wp->index)); + } + + const Town *town; + FOR_ALL_TOWNS(town) { + items.push_back(ViewportSignKdtreeItem::MakeTown(town->index)); + } + + const Sign *sign; + FOR_ALL_SIGNS(sign) { + items.push_back(ViewportSignKdtreeItem::MakeSign(sign->index)); + } + + _viewport_sign_kdtree.Build(items.begin(), items.end()); } @@ -2045,9 +2230,7 @@ bool HandleViewportClicked(const ViewPort *vp, int x, int y) return true; } - if (CheckClickOnTown(vp, x, y)) return true; - if (CheckClickOnStation(vp, x, y)) return true; - if (CheckClickOnSign(vp, x, y)) return true; + if (CheckClickOnViewportSign(vp, x, y)) return true; bool result = CheckClickOnLandscape(vp, x, y); if (v != NULL) { diff --git a/src/viewport_kdtree.h b/src/viewport_kdtree.h new file mode 100644 index 0000000000..93344a5e63 --- /dev/null +++ b/src/viewport_kdtree.h @@ -0,0 +1,83 @@ +/* +* This file is part of OpenTTD. +* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. +* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . +*/ + +/** @file town_kdtree.h Declarations for accessing the k-d tree of towns */ + +#ifndef VIEWPORT_KDTREE_H +#define VIEWPORT_KDTREE_H + +#include "core/kdtree.hpp" +#include "viewport_type.h" +#include "station_base.h" +#include "town_type.h" +#include "signs_base.h" + +struct ViewportSignKdtreeItem { + enum ItemType : uint16 { + VKI_STATION, + VKI_WAYPOINT, + VKI_TOWN, + VKI_SIGN, + }; + ItemType type; + union { + StationID station; + TownID town; + SignID sign; + } id; + int32 center; + int32 top; + + bool operator== (const ViewportSignKdtreeItem &other) const + { + if (this->type != other.type) return false; + switch (this->type) { + case VKI_STATION: + case VKI_WAYPOINT: + return this->id.station == other.id.station; + case VKI_TOWN: + return this->id.town == other.id.town; + case VKI_SIGN: + return this->id.sign == other.id.sign; + default: + NOT_REACHED(); + } + } + + bool operator< (const ViewportSignKdtreeItem &other) const + { + if (this->type != other.type) return this->type < other.type; + switch (this->type) { + case VKI_STATION: + case VKI_WAYPOINT: + return this->id.station < other.id.station; + case VKI_TOWN: + return this->id.town < other.id.town; + case VKI_SIGN: + return this->id.sign < other.id.sign; + default: + NOT_REACHED(); + } + } + + static ViewportSignKdtreeItem MakeStation(StationID id); + static ViewportSignKdtreeItem MakeWaypoint(StationID id); + static ViewportSignKdtreeItem MakeTown(TownID id); + static ViewportSignKdtreeItem MakeSign(SignID id); +}; + +inline int32 Kdtree_ViewportSignXYFunc(const ViewportSignKdtreeItem &item, int dim) +{ + return (dim == 0) ? item.center : item.top; +} + +typedef Kdtree ViewportSignKdtree; +extern ViewportSignKdtree _viewport_sign_kdtree; + +void RebuildViewportKdtree(); + +#endif diff --git a/src/waypoint.cpp b/src/waypoint.cpp index 857f8ba874..8452ff6186 100644 --- a/src/waypoint.cpp +++ b/src/waypoint.cpp @@ -15,6 +15,7 @@ #include "window_func.h" #include "newgrf_station.h" #include "waypoint_base.h" +#include "viewport_kdtree.h" #include "safeguards.h" @@ -54,4 +55,5 @@ Waypoint::~Waypoint() if (CleaningPool()) return; DeleteWindowById(WC_WAYPOINT_VIEW, this->index); RemoveOrderFromAllVehicles(OT_GOTO_WAYPOINT, this->index); + _viewport_sign_kdtree.Remove(ViewportSignKdtreeItem::MakeWaypoint(this->index)); } diff --git a/src/waypoint_cmd.cpp b/src/waypoint_cmd.cpp index 639dce13bc..0fd5942c04 100644 --- a/src/waypoint_cmd.cpp +++ b/src/waypoint_cmd.cpp @@ -20,6 +20,7 @@ #include "pathfinder/yapf/yapf_cache.h" #include "strings_func.h" #include "viewport_func.h" +#include "viewport_kdtree.h" #include "window_func.h" #include "date_func.h" #include "vehicle_func.h" @@ -225,11 +226,15 @@ CommandCost CmdBuildRailWaypoint(TileIndex start_tile, DoCommandFlag flags, uint } if (flags & DC_EXEC) { + bool need_sign_update = false; if (wp == NULL) { wp = new Waypoint(start_tile); + need_sign_update = true; } else if (!wp->IsInUse()) { /* Move existing (recently deleted) waypoint to the new location */ + _viewport_sign_kdtree.Remove(ViewportSignKdtreeItem::MakeWaypoint(wp->index)); wp->xy = start_tile; + need_sign_update = true; } wp->owner = GetTileOwner(start_tile); @@ -244,6 +249,7 @@ CommandCost CmdBuildRailWaypoint(TileIndex start_tile, DoCommandFlag flags, uint if (wp->town == NULL) MakeDefaultName(wp); wp->UpdateVirtCoord(); + if (need_sign_update) _viewport_sign_kdtree.Insert(ViewportSignKdtreeItem::MakeWaypoint(wp->index)); const StationSpec *spec = StationClass::Get(spec_class)->GetSpec(spec_index); byte *layout_ptr = AllocaM(byte, count); @@ -310,6 +316,7 @@ CommandCost CmdBuildBuoy(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 wp = new Waypoint(tile); } else { /* Move existing (recently deleted) buoy to the new location */ + _viewport_sign_kdtree.Remove(ViewportSignKdtreeItem::MakeWaypoint(wp->index)); wp->xy = tile; InvalidateWindowData(WC_WAYPOINT_VIEW, wp->index); } @@ -328,6 +335,7 @@ CommandCost CmdBuildBuoy(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 MarkTileDirtyByTile(tile); wp->UpdateVirtCoord(); + _viewport_sign_kdtree.Insert(ViewportSignKdtreeItem::MakeWaypoint(wp->index)); InvalidateWindowData(WC_WAYPOINT_VIEW, wp->index); } From e4cc06f67ecec6ba074955650696237cb28fe956 Mon Sep 17 00:00:00 2001 From: glx Date: Sat, 9 Mar 2019 22:31:47 +0100 Subject: [PATCH 467/622] Fix: [AzurePipelines] don't assume master as target branch when rebasing PRs --- azure-pipelines/templates/ci-git-rebase.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/azure-pipelines/templates/ci-git-rebase.yml b/azure-pipelines/templates/ci-git-rebase.yml index 924302fee3..19deb2f6d3 100644 --- a/azure-pipelines/templates/ci-git-rebase.yml +++ b/azure-pipelines/templates/ci-git-rebase.yml @@ -1,9 +1,9 @@ steps: -# Rebase to origin/master for every PR. This means users don't have to -# rebase every time master changes. As long as the PR applies cleanly, we +# Rebase to target branch for every PR. This means users don't have to +# rebase every time target branch changes. As long as the PR applies cleanly, we # will validate it. -- script: | +- bash: | git config user.email 'info@openttd.org' git config user.name 'OpenTTD CI' - git rebase origin/master - displayName: 'Rebase to master' + git rebase origin/$SYSTEM_PULLREQUEST_TARGETBRANCH + displayName: 'Rebase to $(System.PullRequest.TargetBranch)' From 26b0615c476039c43b4a845c6b01d590d1fb20dd Mon Sep 17 00:00:00 2001 From: glx Date: Sun, 10 Mar 2019 00:44:21 +0100 Subject: [PATCH 468/622] Fix e4cc06f67: [AzurePipelines] rebase only for PRs --- azure-pipelines/templates/ci-git-rebase.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/azure-pipelines/templates/ci-git-rebase.yml b/azure-pipelines/templates/ci-git-rebase.yml index 19deb2f6d3..514c66744f 100644 --- a/azure-pipelines/templates/ci-git-rebase.yml +++ b/azure-pipelines/templates/ci-git-rebase.yml @@ -5,5 +5,6 @@ steps: - bash: | git config user.email 'info@openttd.org' git config user.name 'OpenTTD CI' - git rebase origin/$SYSTEM_PULLREQUEST_TARGETBRANCH + git rebase origin/${SYSTEM_PULLREQUEST_TARGETBRANCH} displayName: 'Rebase to $(System.PullRequest.TargetBranch)' + condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest')) From cc5f17561571b45b52e7406fb66051446f8cceb4 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 10 Mar 2019 09:12:47 +0100 Subject: [PATCH 469/622] Feature: Railtype flags to allow/disallow 90 degree curves. (#7352) --- src/pathfinder/follow_track.hpp | 2 +- src/pathfinder/npf/npf.cpp | 13 ++++++++----- src/pbs.cpp | 4 ++-- src/rail.h | 25 +++++++++++++++++++++++++ src/train_cmd.cpp | 14 +++++++------- 5 files changed, 43 insertions(+), 15 deletions(-) diff --git a/src/pathfinder/follow_track.hpp b/src/pathfinder/follow_track.hpp index acdff68a73..2bbad8d70b 100644 --- a/src/pathfinder/follow_track.hpp +++ b/src/pathfinder/follow_track.hpp @@ -157,7 +157,7 @@ struct CFollowTrackT return false; } - if (!Allow90degTurns()) { + if ((!IsRailTT() && !Allow90degTurns()) || (IsRailTT() && Rail90DegTurnDisallowed(GetTileRailType(m_old_tile), GetTileRailType(m_new_tile), !Allow90degTurns()))) { m_new_td_bits &= (TrackdirBits)~(int)TrackdirCrossesTrackdirs(m_old_td); if (m_new_td_bits == TRACKDIR_BIT_NONE) { m_err = EC_90DEG; diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp index d7722ae671..32c6e982d6 100644 --- a/src/pathfinder/npf/npf.cpp +++ b/src/pathfinder/npf/npf.cpp @@ -803,12 +803,13 @@ static bool CanEnterTile(TileIndex tile, DiagDirection dir, AyStarUserData *user * One-way-roads are taken into account. Signals are not tested. * * @param dst_tile The tile of interest. + * @param src_tile The originating tile. * @param src_trackdir The direction the vehicle is currently moving. * @param type The transporttype of the vehicle. * @param subtype For TRANSPORT_ROAD the compatible RoadTypes of the vehicle. * @return The Trackdirs the vehicle can continue moving on. */ -static TrackdirBits GetDriveableTrackdirBits(TileIndex dst_tile, Trackdir src_trackdir, TransportType type, uint subtype) +static TrackdirBits GetDriveableTrackdirBits(TileIndex dst_tile, TileIndex src_tile, Trackdir src_trackdir, TransportType type, uint subtype) { TrackdirBits trackdirbits = TrackStatusToTrackdirBits(GetTileTrackStatus(dst_tile, type, subtype)); @@ -836,7 +837,9 @@ static TrackdirBits GetDriveableTrackdirBits(TileIndex dst_tile, Trackdir src_tr trackdirbits &= TrackdirReachesTrackdirs(src_trackdir); /* Filter out trackdirs that would make 90 deg turns for trains */ - if (_settings_game.pf.forbid_90_deg && type == TRANSPORT_RAIL) trackdirbits &= ~TrackdirCrossesTrackdirs(src_trackdir); + if (type == TRANSPORT_RAIL && Rail90DegTurnDisallowed(GetTileRailType(src_tile), GetTileRailType(dst_tile))) { + trackdirbits &= ~TrackdirCrossesTrackdirs(src_trackdir); + } DEBUG(npf, 6, "After filtering: (%d, %d), possible trackdirs: 0x%X", TileX(dst_tile), TileY(dst_tile), trackdirbits); @@ -877,7 +880,7 @@ static void NPFFollowTrack(AyStar *aystar, OpenListNode *current) if (CheckIgnoreFirstTile(¤t->path)) { /* Do not perform any checks that involve src_tile */ dst_tile = src_tile + TileOffsByDiagDir(src_exitdir); - trackdirbits = GetDriveableTrackdirBits(dst_tile, src_trackdir, type, subtype); + trackdirbits = GetDriveableTrackdirBits(dst_tile, src_tile, src_trackdir, type, subtype); } else if (IsTileType(src_tile, MP_TUNNELBRIDGE) && GetTunnelBridgeDirection(src_tile) == src_exitdir) { /* We drive through the wormhole and arrive on the other side */ dst_tile = GetOtherTunnelBridgeEnd(src_tile); @@ -901,7 +904,7 @@ static void NPFFollowTrack(AyStar *aystar, OpenListNode *current) src_trackdir = ReverseTrackdir(src_trackdir); } - trackdirbits = GetDriveableTrackdirBits(dst_tile, src_trackdir, type, subtype); + trackdirbits = GetDriveableTrackdirBits(dst_tile, src_tile, src_trackdir, type, subtype); if (trackdirbits == TRACKDIR_BIT_NONE) { /* We cannot enter the next tile. Road vehicles can reverse, others reach dead end */ @@ -910,7 +913,7 @@ static void NPFFollowTrack(AyStar *aystar, OpenListNode *current) dst_tile = src_tile; src_trackdir = ReverseTrackdir(src_trackdir); - trackdirbits = GetDriveableTrackdirBits(dst_tile, src_trackdir, type, subtype); + trackdirbits = GetDriveableTrackdirBits(dst_tile, src_tile, src_trackdir, type, subtype); } } diff --git a/src/pbs.cpp b/src/pbs.cpp index 6bb35a6964..44b5b069be 100644 --- a/src/pbs.cpp +++ b/src/pbs.cpp @@ -400,7 +400,7 @@ bool IsSafeWaitingPosition(const Train *v, TileIndex tile, Trackdir trackdir, bo /* Check for reachable tracks. */ ft.m_new_td_bits &= DiagdirReachesTrackdirs(ft.m_exitdir); - if (forbid_90deg) ft.m_new_td_bits &= ~TrackdirCrossesTrackdirs(trackdir); + if (Rail90DegTurnDisallowed(GetTileRailType(ft.m_old_tile), GetTileRailType(ft.m_new_tile), forbid_90deg)) ft.m_new_td_bits &= ~TrackdirCrossesTrackdirs(trackdir); if (ft.m_new_td_bits == TRACKDIR_BIT_NONE) return include_line_end; if (ft.m_new_td_bits != TRACKDIR_BIT_NONE && KillFirstBit(ft.m_new_td_bits) == TRACKDIR_BIT_NONE) { @@ -445,7 +445,7 @@ bool IsWaitingPositionFree(const Train *v, TileIndex tile, Trackdir trackdir, bo /* Check for reachable tracks. */ ft.m_new_td_bits &= DiagdirReachesTrackdirs(ft.m_exitdir); - if (forbid_90deg) ft.m_new_td_bits &= ~TrackdirCrossesTrackdirs(trackdir); + if (Rail90DegTurnDisallowed(GetTileRailType(ft.m_old_tile), GetTileRailType(ft.m_new_tile), forbid_90deg)) ft.m_new_td_bits &= ~TrackdirCrossesTrackdirs(trackdir); return !HasReservedTracks(ft.m_new_tile, TrackdirBitsToTrackBits(ft.m_new_td_bits)); } diff --git a/src/rail.h b/src/rail.h index eec87bfb38..ac5805d098 100644 --- a/src/rail.h +++ b/src/rail.h @@ -21,6 +21,7 @@ #include "strings_type.h" #include "date_type.h" #include "signal_type.h" +#include "settings_type.h" /** Railtype flags. */ enum RailTypeFlags { @@ -28,12 +29,16 @@ enum RailTypeFlags { RTF_NO_LEVEL_CROSSING = 1, ///< Bit number for disallowing level crossings. RTF_HIDDEN = 2, ///< Bit number for hiding from selection. RTF_NO_SPRITE_COMBINE = 3, ///< Bit number for using non-combined junctions. + RTF_ALLOW_90DEG = 4, ///< Bit number for always allowed 90 degree turns, regardless of setting. + RTF_DISALLOW_90DEG = 5, ///< Bit number for never allowed 90 degree turns, regardless of setting. RTFB_NONE = 0, ///< All flags cleared. RTFB_CATENARY = 1 << RTF_CATENARY, ///< Value for drawing a catenary. RTFB_NO_LEVEL_CROSSING = 1 << RTF_NO_LEVEL_CROSSING, ///< Value for disallowing level crossings. RTFB_HIDDEN = 1 << RTF_HIDDEN, ///< Value for hiding from selection. RTFB_NO_SPRITE_COMBINE = 1 << RTF_NO_SPRITE_COMBINE, ///< Value for using non-combined junctions. + RTFB_ALLOW_90DEG = 1 << RTF_ALLOW_90DEG, ///< Value for always allowed 90 degree turns, regardless of setting. + RTFB_DISALLOW_90DEG = 1 << RTF_DISALLOW_90DEG, ///< Value for never allowed 90 degree turns, regardless of setting. }; DECLARE_ENUM_AS_BIT_SET(RailTypeFlags) @@ -341,6 +346,26 @@ static inline bool RailNoLevelCrossings(RailType rt) return HasBit(GetRailTypeInfo(rt)->flags, RTF_NO_LEVEL_CROSSING); } +/** + * Test if 90 degree turns are disallowed between two railtypes. + * @param rt1 First railtype to test for. + * @param rt2 Second railtype to test for. + * @param def Default value to use if the rail type doesn't specify anything. + * @return True if 90 degree turns are disallowed between the two rail types. + */ +static inline bool Rail90DegTurnDisallowed(RailType rt1, RailType rt2, bool def = _settings_game.pf.forbid_90_deg) +{ + if (rt1 == INVALID_RAILTYPE || rt2 == INVALID_RAILTYPE) return def; + + const RailtypeInfo *rti1 = GetRailTypeInfo(rt1); + const RailtypeInfo *rti2 = GetRailTypeInfo(rt2); + + bool rt1_90deg = HasBit(rti1->flags, RTF_DISALLOW_90DEG) || (!HasBit(rti1->flags, RTF_ALLOW_90DEG) && def); + bool rt2_90deg = HasBit(rti2->flags, RTF_DISALLOW_90DEG) || (!HasBit(rti2->flags, RTF_ALLOW_90DEG) && def); + + return rt1_90deg || rt2_90deg; +} + /** * Returns the cost of building the specified railtype. * @param railtype The railtype being built. diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 29b2e543e0..9f17bd898c 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -2100,7 +2100,7 @@ static void CheckNextTrainTile(Train *v) if (HasPbsSignalOnTrackdir(ft.m_new_tile, FindFirstTrackdir(ft.m_new_td_bits))) { /* If the next tile is a PBS signal, try to make a reservation. */ TrackBits tracks = TrackdirBitsToTrackBits(ft.m_new_td_bits); - if (_settings_game.pf.forbid_90_deg) { + if (Rail90DegTurnDisallowed(GetTileRailType(ft.m_old_tile), GetTileRailType(ft.m_new_tile))) { tracks &= ~TrackCrossesTracks(TrackdirToTrack(ft.m_old_td)); } ChooseTrainTrack(v, ft.m_new_tile, ft.m_exitdir, tracks, false, NULL, false); @@ -2339,7 +2339,7 @@ static PBSTileInfo ExtendTrainReservation(const Train *v, TrackBits *new_tracks, if (HasOnewaySignalBlockingTrackdir(ft.m_new_tile, FindFirstTrackdir(ft.m_new_td_bits))) break; } - if (_settings_game.pf.forbid_90_deg) { + if (Rail90DegTurnDisallowed(GetTileRailType(ft.m_old_tile), GetTileRailType(ft.m_new_tile))) { ft.m_new_td_bits &= ~TrackdirCrossesTrackdirs(ft.m_old_td); if (ft.m_new_td_bits == TRACKDIR_BIT_NONE) break; } @@ -2391,7 +2391,7 @@ static PBSTileInfo ExtendTrainReservation(const Train *v, TrackBits *new_tracks, while (tile != stopped || cur_td != stopped_td) { if (!ft.Follow(tile, cur_td)) break; - if (_settings_game.pf.forbid_90_deg) { + if (Rail90DegTurnDisallowed(GetTileRailType(ft.m_old_tile), GetTileRailType(ft.m_new_tile))) { ft.m_new_td_bits &= ~TrackdirCrossesTrackdirs(ft.m_old_td); assert(ft.m_new_td_bits != TRACKDIR_BIT_NONE); } @@ -2626,7 +2626,7 @@ static Track ChooseTrainTrack(Train *v, TileIndex tile, DiagDirection enterdir, DiagDirection exitdir = TrackdirToExitdir(res_dest.trackdir); TileIndex next_tile = TileAddByDiagDir(res_dest.tile, exitdir); TrackBits reachable = TrackdirBitsToTrackBits((TrackdirBits)(GetTileTrackStatus(next_tile, TRANSPORT_RAIL, 0))) & DiagdirReachesTracks(exitdir); - if (_settings_game.pf.forbid_90_deg) { + if (Rail90DegTurnDisallowed(GetTileRailType(res_dest.tile), GetTileRailType(next_tile))) { reachable &= ~TrackCrossesTracks(TrackdirToTrack(res_dest.trackdir)); } @@ -2718,7 +2718,7 @@ bool TryPathReserve(Train *v, bool mark_as_stuck, bool first_tile_okay) TileIndex new_tile = TileAddByDiagDir(origin.tile, exitdir); TrackBits reachable = TrackdirBitsToTrackBits(TrackStatusToTrackdirBits(GetTileTrackStatus(new_tile, TRANSPORT_RAIL, 0)) & DiagdirReachesTrackdirs(exitdir)); - if (_settings_game.pf.forbid_90_deg) reachable &= ~TrackCrossesTracks(TrackdirToTrack(origin.trackdir)); + if (Rail90DegTurnDisallowed(GetTileRailType(origin.tile), GetTileRailType(new_tile))) reachable &= ~TrackCrossesTracks(TrackdirToTrack(origin.trackdir)); bool res_made = false; ChooseTrainTrack(v, new_tile, exitdir, reachable, true, &res_made, mark_as_stuck); @@ -3139,7 +3139,7 @@ bool TrainController(Train *v, Vehicle *nomove, bool reverse) TrackBits red_signals = TrackdirBitsToTrackBits(TrackStatusToRedSignals(ts) & reachable_trackdirs); TrackBits bits = TrackdirBitsToTrackBits(trackdirbits); - if (_settings_game.pf.forbid_90_deg && prev == NULL) { + if (Rail90DegTurnDisallowed(GetTileRailType(gp.old_tile), GetTileRailType(gp.new_tile)) && prev == NULL) { /* We allow wagons to make 90 deg turns, because forbid_90_deg * can be switched on halfway a turn */ bits &= ~TrackCrossesTracks(FindFirstTrack(v->track)); @@ -3711,7 +3711,7 @@ static bool TrainCheckIfLineEnds(Train *v, bool reverse) /* mask unreachable track bits if we are forbidden to do 90deg turns */ TrackBits bits = TrackdirBitsToTrackBits(trackdirbits); - if (_settings_game.pf.forbid_90_deg) { + if (Rail90DegTurnDisallowed(GetTileRailType(v->tile), GetTileRailType(tile))) { bits &= ~TrackCrossesTracks(FindFirstTrack(v->track)); } From 811bf2262019b855c9005793e5efc725ac77a7b3 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Sat, 9 Mar 2019 18:20:03 +0000 Subject: [PATCH 470/622] Codechange: Use Colours type instead of byte. --- src/company_gui.cpp | 2 +- src/newgrf_gui.cpp | 2 +- src/toolbar_gui.cpp | 4 ++-- src/widgets/dropdown.cpp | 4 ++-- src/widgets/dropdown_type.h | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/company_gui.cpp b/src/company_gui.cpp index a3885ec960..4d5e45d509 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -536,7 +536,7 @@ public: return true; } - void Draw(int left, int right, int top, int bottom, bool sel, int bg_colour) const + void Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const { bool rtl = _current_text_dir == TD_RTL; int height = bottom - top; diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 5f32b5bad5..23c037d109 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -578,7 +578,7 @@ public: return true; } - void Draw(int left, int right, int top, int bottom, bool sel, int bg_colour) const + void Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const { DrawString(left + 2, right + 2, top, _grf_preset_list[this->result], sel ? TC_WHITE : TC_BLACK); } diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 5567c55800..e0f7b02446 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -104,7 +104,7 @@ public: return DropDownListStringItem::Width() + this->checkmark_width; } - void Draw(int left, int right, int top, int bottom, bool sel, int bg_colour) const + void Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const { bool rtl = _current_text_dir == TD_RTL; if (this->checked) { @@ -149,7 +149,7 @@ public: return max(max(this->icon_size.height, this->lock_size.height) + 2U, (uint)FONT_HEIGHT_NORMAL); } - void Draw(int left, int right, int top, int bottom, bool sel, int bg_colour) const + void Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const { CompanyID company = (CompanyID)this->result; bool rtl = _current_text_dir == TD_RTL; diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp index 61656c020e..fb235a6eb5 100644 --- a/src/widgets/dropdown.cpp +++ b/src/widgets/dropdown.cpp @@ -22,7 +22,7 @@ #include "../safeguards.h" -void DropDownListItem::Draw(int left, int right, int top, int bottom, bool sel, int bg_colour) const +void DropDownListItem::Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const { int c1 = _colour_gradient[bg_colour][3]; int c2 = _colour_gradient[bg_colour][7]; @@ -39,7 +39,7 @@ uint DropDownListStringItem::Width() const return GetStringBoundingBox(buffer).width; } -void DropDownListStringItem::Draw(int left, int right, int top, int bottom, bool sel, int bg_colour) const +void DropDownListStringItem::Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const { DrawString(left + WD_FRAMERECT_LEFT, right - WD_FRAMERECT_RIGHT, top, this->String(), sel ? TC_WHITE : TC_BLACK); } diff --git a/src/widgets/dropdown_type.h b/src/widgets/dropdown_type.h index b65d4557bd..bc225dadf1 100644 --- a/src/widgets/dropdown_type.h +++ b/src/widgets/dropdown_type.h @@ -32,7 +32,7 @@ public: virtual bool Selectable() const { return false; } virtual uint Height(uint width) const { return FONT_HEIGHT_NORMAL; } virtual uint Width() const { return 0; } - virtual void Draw(int left, int right, int top, int bottom, bool sel, int bg_colour) const; + virtual void Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const; }; /** @@ -47,7 +47,7 @@ public: virtual bool Selectable() const { return true; } virtual uint Width() const; - virtual void Draw(int left, int right, int top, int bottom, bool sel, int bg_colour) const; + virtual void Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const; virtual StringID String() const { return this->string; } static int CDECL NatSortFunc(const DropDownListItem * const *first, const DropDownListItem * const *second); From 303cfd86a301bcd66a6fec48dec944afd2174231 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Sun, 10 Mar 2019 00:05:37 +0000 Subject: [PATCH 471/622] Remove: Unnecessary specialization of NewGRF preset list item. --- src/newgrf_gui.cpp | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 23c037d109..4e66d2e52a 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -567,24 +567,6 @@ void ShowNewGRFTextfileWindow(TextfileType file_type, const GRFConfig *c) static GRFPresetList _grf_preset_list; ///< List of known NewGRF presets. @see GetGRFPresetList -class DropDownListPresetItem : public DropDownListItem { -public: - DropDownListPresetItem(int result) : DropDownListItem(result, false) {} - - virtual ~DropDownListPresetItem() {} - - bool Selectable() const - { - return true; - } - - void Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const - { - DrawString(left + 2, right + 2, top, _grf_preset_list[this->result], sel ? TC_WHITE : TC_BLACK); - } -}; - - typedef std::map GrfIdMap; ///< Map of grfid to the grf config. /** @@ -949,7 +931,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { for (uint i = 0; i < _grf_preset_list.Length(); i++) { if (_grf_preset_list[i] != NULL) { - *list->Append() = new DropDownListPresetItem(i); + *list->Append() = new DropDownListCharStringItem(_grf_preset_list[i], i, false); } } From fb35cb5ed2735ad22d8a2bee9df2a174994ed319 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Sun, 10 Mar 2019 00:12:45 +0000 Subject: [PATCH 472/622] Remove: Unnecessary virtual destructors on drop down list items. --- src/company_gui.cpp | 2 -- src/toolbar_gui.cpp | 4 ---- src/widgets/dropdown_type.h | 3 --- 3 files changed, 9 deletions(-) diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 4d5e45d509..74e1cab57b 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -519,8 +519,6 @@ class DropDownListColourItem : public DropDownListItem { public: DropDownListColourItem(int result, bool masked) : DropDownListItem(result, masked) {} - virtual ~DropDownListColourItem() {} - StringID String() const { return this->result >= COLOUR_END ? STR_COLOUR_DEFAULT : _colour_dropdown[this->result]; diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index e0f7b02446..69cad42ff4 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -97,8 +97,6 @@ public: this->checkmark_width = GetStringBoundingBox(STR_JUST_CHECKMARK).width + 3; } - virtual ~DropDownListCheckedItem() {} - uint Width() const { return DropDownListStringItem::Width() + this->checkmark_width; @@ -129,8 +127,6 @@ public: this->lock_size = GetSpriteSize(SPR_LOCK); } - virtual ~DropDownListCompanyItem() {} - bool Selectable() const { return true; diff --git a/src/widgets/dropdown_type.h b/src/widgets/dropdown_type.h index bc225dadf1..a5fe27f640 100644 --- a/src/widgets/dropdown_type.h +++ b/src/widgets/dropdown_type.h @@ -43,7 +43,6 @@ public: StringID string; ///< String ID of item DropDownListStringItem(StringID string, int result, bool masked) : DropDownListItem(result, masked), string(string) {} - virtual ~DropDownListStringItem() {} virtual bool Selectable() const { return true; } virtual uint Width() const; @@ -61,7 +60,6 @@ public: uint64 decode_params[10]; ///< Parameters of the string DropDownListParamStringItem(StringID string, int result, bool masked) : DropDownListStringItem(string, result, masked) {} - virtual ~DropDownListParamStringItem() {} virtual StringID String() const; virtual void SetParam(uint index, uint64 value) { decode_params[index] = value; } @@ -75,7 +73,6 @@ public: const char *raw_string; DropDownListCharStringItem(const char *raw_string, int result, bool masked) : DropDownListStringItem(STR_JUST_RAW_STRING, result, masked), raw_string(raw_string) {} - virtual ~DropDownListCharStringItem() {} virtual StringID String() const; }; From b56ea5ca27440fd8023bfecf8299422c93eb05c3 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Sun, 10 Mar 2019 02:10:40 +0000 Subject: [PATCH 473/622] Add: Generic drop down list string item with icon. --- src/widgets/dropdown.cpp | 34 ++++++++++++++++++++++++++++++++++ src/widgets/dropdown_type.h | 18 ++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp index fb235a6eb5..f789b47b7c 100644 --- a/src/widgets/dropdown.cpp +++ b/src/widgets/dropdown.cpp @@ -71,6 +71,40 @@ StringID DropDownListCharStringItem::String() const return this->string; } +DropDownListIconItem::DropDownListIconItem(SpriteID sprite, PaletteID pal, StringID string, int result, bool masked) : DropDownListParamStringItem(string, result, masked), sprite(sprite), pal(pal) +{ + this->dim = GetSpriteSize(sprite); + if (this->dim.height < (uint)FONT_HEIGHT_NORMAL) { + this->sprite_y = (FONT_HEIGHT_NORMAL - dim.height) / 2; + this->text_y = 0; + } else { + this->sprite_y = 0; + this->text_y = (dim.height - FONT_HEIGHT_NORMAL) / 2; + } +} + +uint DropDownListIconItem::Height(uint width) const +{ + return max(this->dim.height, (uint)FONT_HEIGHT_NORMAL); +} + +uint DropDownListIconItem::Width() const +{ + return DropDownListStringItem::Width() + this->dim.width + WD_FRAMERECT_LEFT; +} + +void DropDownListIconItem::Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const +{ + bool rtl = _current_text_dir == TD_RTL; + DrawSprite(this->sprite, this->pal, rtl ? right - this->dim.width - WD_FRAMERECT_RIGHT : left + WD_FRAMERECT_LEFT, top + this->sprite_y); + DrawString(left + WD_FRAMERECT_LEFT + (rtl ? 0 : (this->dim.width + WD_FRAMERECT_LEFT)), right - WD_FRAMERECT_RIGHT - (rtl ? (this->dim.width + WD_FRAMERECT_RIGHT) : 0), top + this->text_y, this->String(), sel ? TC_WHITE : TC_BLACK); +} + +void DropDownListIconItem::SetDimension(Dimension d) +{ + this->dim = d; +} + static const NWidgetPart _nested_dropdown_menu_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_PANEL, COLOUR_END, WID_DM_ITEMS), SetMinimalSize(1, 1), SetScrollbar(WID_DM_SCROLL), EndContainer(), diff --git a/src/widgets/dropdown_type.h b/src/widgets/dropdown_type.h index a5fe27f640..8300dd26d7 100644 --- a/src/widgets/dropdown_type.h +++ b/src/widgets/dropdown_type.h @@ -77,6 +77,24 @@ public: virtual StringID String() const; }; +/** + * List item with icon and string. + */ +class DropDownListIconItem : public DropDownListParamStringItem { + SpriteID sprite; + PaletteID pal; + Dimension dim; + uint sprite_y; + uint text_y; +public: + DropDownListIconItem(SpriteID sprite, PaletteID pal, StringID string, int result, bool masked); + + /* virtual */ uint Height(uint width) const; + /* virtual */ uint Width() const; + /* virtual */ void Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const; + void SetDimension(Dimension d); +}; + /** * A drop down list is a collection of drop down list items. */ From 9c8b7b5efc9ff3dd065d5f02577de39161e2bee2 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Sun, 10 Mar 2019 02:26:19 +0000 Subject: [PATCH 474/622] Feature: Add rail icon to rail construction drop down list. --- src/rail_gui.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 0bc29977cb..d0789f337c 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -2010,7 +2010,17 @@ DropDownList *GetRailTypeDropDownList(bool for_replacement, bool all_option) *list->Append() = item; } + Dimension d = { 0, 0 }; RailType rt; + /* Get largest icon size, to ensure text is aligned on each menu item. */ + if (!for_replacement) { + FOR_ALL_SORTED_RAILTYPES(rt) { + if (!HasBit(used_railtypes, rt)) continue; + const RailtypeInfo *rti = GetRailTypeInfo(rt); + d = maxdim(d, GetSpriteSize(rti->gui_sprites.build_x_rail)); + } + } + FOR_ALL_SORTED_RAILTYPES(rt) { /* If it's not used ever, don't show it to the user. */ if (!HasBit(used_railtypes, rt)) continue; @@ -2018,7 +2028,14 @@ DropDownList *GetRailTypeDropDownList(bool for_replacement, bool all_option) const RailtypeInfo *rti = GetRailTypeInfo(rt); StringID str = for_replacement ? rti->strings.replace_text : (rti->max_speed > 0 ? STR_TOOLBAR_RAILTYPE_VELOCITY : STR_JUST_STRING); - DropDownListParamStringItem *item = new DropDownListParamStringItem(str, rt, !HasBit(c->avail_railtypes, rt)); + DropDownListParamStringItem *item; + if (for_replacement) { + item = new DropDownListParamStringItem(str, rt, !HasBit(c->avail_railtypes, rt)); + } else { + DropDownListIconItem *iconitem = new DropDownListIconItem(rti->gui_sprites.build_x_rail, PAL_NONE, str, rt, !HasBit(c->avail_railtypes, rt)); + iconitem->SetDimension(d); + item = iconitem; + } item->SetParam(0, rti->strings.menu_text); item->SetParam(1, rti->max_speed); *list->Append() = item; From 9cb84a1bad7f9e126e19d7702e76b999be155054 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Sun, 10 Mar 2019 02:38:23 +0000 Subject: [PATCH 475/622] Feature: Add road icon to road construction drop down list. --- src/toolbar_gui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 69cad42ff4..cff86c3b3e 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -903,7 +903,7 @@ static CallBackFunction ToolbarBuildRoadClick(Window *w) DropDownList *list = new DropDownList(); /* Road is always visible and available. */ - *list->Append() = new DropDownListStringItem(STR_ROAD_MENU_ROAD_CONSTRUCTION, ROADTYPE_ROAD, false); + *list->Append() = new DropDownListIconItem(SPR_IMG_ROAD_X_DIR, PAL_NONE, STR_ROAD_MENU_ROAD_CONSTRUCTION, ROADTYPE_ROAD, false); /* Tram is only visible when there will be a tram, and available when that has been introduced. */ Engine *e; @@ -911,7 +911,7 @@ static CallBackFunction ToolbarBuildRoadClick(Window *w) if (!HasBit(e->info.climates, _settings_game.game_creation.landscape)) continue; if (!HasBit(e->info.misc_flags, EF_ROAD_TRAM)) continue; - *list->Append() = new DropDownListStringItem(STR_ROAD_MENU_TRAM_CONSTRUCTION, ROADTYPE_TRAM, !HasBit(c->avail_roadtypes, ROADTYPE_TRAM)); + *list->Append() = new DropDownListIconItem(SPR_IMG_TRAMWAY_X_DIR, PAL_NONE, STR_ROAD_MENU_TRAM_CONSTRUCTION, ROADTYPE_TRAM, !HasBit(c->avail_roadtypes, ROADTYPE_TRAM)); break; } ShowDropDownList(w, list, _last_built_roadtype, WID_TN_ROADS, 140, true, true); From a1d028ea607f1b2018202581ca8db093064c19e8 Mon Sep 17 00:00:00 2001 From: glx22 Date: Sun, 10 Mar 2019 11:42:53 +0100 Subject: [PATCH 476/622] Fix: [AzurePipelines] Run commit checker only for PRs and pass it the target branch (#7356) --- azure-pipelines/templates/ci-git-rebase.yml | 2 +- azure-pipelines/templates/linux-build.yml | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/azure-pipelines/templates/ci-git-rebase.yml b/azure-pipelines/templates/ci-git-rebase.yml index 514c66744f..96a23a5401 100644 --- a/azure-pipelines/templates/ci-git-rebase.yml +++ b/azure-pipelines/templates/ci-git-rebase.yml @@ -6,5 +6,5 @@ steps: git config user.email 'info@openttd.org' git config user.name 'OpenTTD CI' git rebase origin/${SYSTEM_PULLREQUEST_TARGETBRANCH} - displayName: 'Rebase to $(System.PullRequest.TargetBranch)' + displayName: 'Rebase to target branch' condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest')) diff --git a/azure-pipelines/templates/linux-build.yml b/azure-pipelines/templates/linux-build.yml index 0e4fffefb0..98fbfecdbe 100644 --- a/azure-pipelines/templates/linux-build.yml +++ b/azure-pipelines/templates/linux-build.yml @@ -4,11 +4,27 @@ parameters: ContainerCommand: '' steps: +# 'envVars' in the 'Docker@1' task is a bit funky. When you want to use a +# variable, you have to quote it. But the quote is also sent directly to +# Docker and ends up in the variable, which you don't want. To work around +# this, we set the correct variable first (which becomes an env-variable), and +# pass that env-variable through to Docker. We cannot use the normal +# 'variables' entry, as we are a template. So that results in this bit of +# Bash code. Not because it is pretty, but it is the only way we found that +# works. +- bash: | + echo "##vso[task.setvariable variable=TARGET_BRANCH]${SYSTEM_PULLREQUEST_TARGETBRANCH}" + echo "Target branch is ${SYSTEM_PULLREQUEST_TARGETBRANCH}" + displayName: "Set target branch" + condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest')) + - task: Docker@1 ${{ if eq(parameters.Image, 'compile-farm') }}: displayName: 'Build' ${{ if eq(parameters.Image, 'compile-farm-ci') }}: displayName: 'Build and test' + ${{ if eq(parameters.Tag, 'commit-checker') }}: + condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest')) inputs: command: 'Run an image' imageName: openttd/${{ parameters.Image }}:${{ parameters.Tag }} @@ -16,3 +32,5 @@ steps: workingDirectory: '$(Build.SourcesDirectory)' containerCommand: ${{ parameters.ContainerCommand }} runInBackground: false + envVars: | + TARGET_BRANCH From bfbe9ccc455c5805a5f3f973c26537771eea0e91 Mon Sep 17 00:00:00 2001 From: glx Date: Sun, 10 Mar 2019 15:09:57 +0100 Subject: [PATCH 477/622] Fix: [AzurePipelines] run commit checker only for PRs --- azure-pipelines/templates/linux-build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines/templates/linux-build.yml b/azure-pipelines/templates/linux-build.yml index 98fbfecdbe..7f442904c4 100644 --- a/azure-pipelines/templates/linux-build.yml +++ b/azure-pipelines/templates/linux-build.yml @@ -23,8 +23,8 @@ steps: displayName: 'Build' ${{ if eq(parameters.Image, 'compile-farm-ci') }}: displayName: 'Build and test' - ${{ if eq(parameters.Tag, 'commit-checker') }}: - condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest')) + # Run the commit-checker only if it is a Pull Request + condition: and(succeeded(), or(ne(variables['Agent.JobName'], 'commit-checker'), eq(variables['Build.Reason'], 'PullRequest'))) inputs: command: 'Run an image' imageName: openttd/${{ parameters.Image }}:${{ parameters.Tag }} From c09c94378c4403492f43792fe61477a3eb31dc23 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 10 Mar 2019 19:45:53 +0100 Subject: [PATCH 478/622] Update: Translations from eints finnish: 214 changes by hpiirai norwegian (bokmal): 10 changes by Leifbk russian: 2 changes by Lone_Wolf croatian: 6 changes by VoyagerOne --- src/lang/croatian.txt | 6 + src/lang/finnish.txt | 426 +++++++++++++++++----------------- src/lang/norwegian_bokmal.txt | 14 +- src/lang/russian.txt | 2 + 4 files changed, 232 insertions(+), 216 deletions(-) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 9202b68b02..9a98f3b731 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1280,6 +1280,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Dopusti uređiv STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Dopusti uređivanje krajolika ispod građevina i pruga bez njihovog uklanjanja STR_CONFIG_SETTING_CATCHMENT :Dopusti realističnije veličine područja zahvaćanja: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Različiti dohvati za različite vrste stanica i zračnih luka +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Stanice kompanije mogu opsluživati industrije sa priključenim neutralnim stanicama: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Kada je uključeno, industrije sa priključenim stanicama (kao naftne platforme) mogu biti opsluživane od strane kompanija koje imaju stanice izgrađene u blizini. Kada je isključeno, ove industrije mogu biti opsluživane samo putem svojih priključenih stanica. Bilo koja stanica u blizini u vlasništvu neke kompanije neće moći opsluživati ove industrije niti će stanice priključene industriji moći opsluživati bilo što osim te industrije. STR_CONFIG_SETTING_EXTRADYNAMITE :Dopusti rušenje više cesta, mostova i tunela u vlasništvu grada: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Jednostavnije uklanjanje infrastrukture i građevina u vlasništvu grada STR_CONFIG_SETTING_TRAIN_LENGTH :Najveća dužina vlakova: {STRING} @@ -1679,6 +1681,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Uklučivanje ov STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Zabranjeno STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Dopušteno STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Dopušteno, proizvoljan raspored grada +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Proizvodnja tereta u gradu: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Koliko tereta proizvode kuće u gradu u odnosu na ukupno stanovništvo grada.{}Kvadratni rast: Grad dvostruke veličine proizvodi četverostruku količinu putnika.{}Linearni rast: Grad dvostruke veličine proizvodi dvostruku količinu putnika. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kvadratno (originalno) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linearno STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Smještaj drveća u igri: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Kontroliraj nasumično pojavljivanje stabala tijekom igre. Ovo može utjecati na industrije koje ovise o rastu stabala, npr. pilane diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 96f7541976..7a32492d39 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -244,10 +244,10 @@ STR_TOOLTIP_SHADE :{BLACK}Pienenn STR_TOOLTIP_DEBUG :{BLACK}Näytä NewGRF-vianmääritystiedot STR_TOOLTIP_DEFSIZE :{BLACK}Palauta ikkunan oletuskoko. Ctrl+Klik tallentaa nykyisen koon oletukseksi STR_TOOLTIP_STICKY :{BLACK}Aseta ikkuna säilymään "Sulje kaikki ikkunat" -napista huolimatta. Ctrl+Klik tallentaa tilan oletukseksi -STR_TOOLTIP_RESIZE :{BLACK}Napsauta ja vedä muuttaaksesi tämän ikkunan kokoa. +STR_TOOLTIP_RESIZE :{BLACK}Napsauta ja vedä muuttaaksesi tämän ikkunan kokoa STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Suurenna/pienennä ikkuna STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Vierityspalkki - luettelon vieritys ylös/alas -STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Vierityspalkki - luettelon vieritys vasemmalle/oikealle. +STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Vierityspalkki – luettelon vieritys vasemmalle/oikealle STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Tuhoa rakennuksia jne. ruudulta. Ctrl valitsee alueen vinottain. Shift vaihtaa tuhoamistilan ja kustannusarvion välillä # Show engines button @@ -320,7 +320,7 @@ STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Nopeuta STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Asetukset STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Tallenna peli, hylkää peli, sulje STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Näytä kartta, lisänäkymä ja kylttilista -STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Näytä kaupunkihakemisto +STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Näytä kuntahakemisto STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Näytä tukitarjoukset STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Näytä luettelo yhtiön asemista STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Näytä yhtiön taloustiedot @@ -353,9 +353,9 @@ STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Skenaar STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Siirrä aloituspäivää vuodella taaksepäin STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Siirrä aloituspäivää vuodella eteenpäin STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Aseta aloitusvuosi napsauttamalla -STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Näytä kartta, kaupunkihakemisto +STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Näytä kartta, kuntahakemisto STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Maaston luonti -STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Kaupunkien luonti +STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Kuntien luonti STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Teollisuuden luonti STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Tienrakennus STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Istuta puita. Shift vaihtaa istutustilan ja kustannusarvion välillä @@ -378,7 +378,7 @@ STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Asetukset STR_SETTINGS_MENU_SCRIPT_SETTINGS :Tekoälyn/Peliskriptin asetukset STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF-asetukset STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Läpinäkyvyysasetukset -STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Kaupunkien nimet näkyvissä +STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Kuntien nimet näkyvissä STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Asemien nimet näkyvissä STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Reittipisteitten nimet näkyvissä STR_SETTINGS_MENU_SIGNS_DISPLAYED :Kyltit näkyvissä @@ -404,8 +404,8 @@ STR_MAP_MENU_LINGRAPH_LEGEND :Rahtivirran sel STR_MAP_MENU_SIGN_LIST :Kylttilista ############ range for town menu starts -STR_TOWN_MENU_TOWN_DIRECTORY :Kaupunkihakemisto -STR_TOWN_MENU_FOUND_TOWN :Perusta kaupunki +STR_TOWN_MENU_TOWN_DIRECTORY :Kuntahakemisto +STR_TOWN_MENU_FOUND_TOWN :Perusta kunta ############ range ends here ############ range for subsidies menu starts @@ -593,7 +593,7 @@ STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Näytä # Graph key window STR_GRAPH_KEY_CAPTION :{WHITE}Selite yhtiön kuvaajiin -STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Napsauta tätä vaihtaaksesi yhtiön merkinnän kuvaajassa päälle/pois. +STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Napsauta tätä vaihtaaksesi yhtiön merkinnän kuvaajassa päälle/pois # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Yhtiökilpataulukko @@ -628,7 +628,7 @@ STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Laina: STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Yhteensä: ############ End of order list STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP :{BLACK}Liikennevälineiden määrä. Tähän kuuluvat ajoneuvot, junat, laivat ja lentokoneet -STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Asemien osien määrä. Kaikki osat asemista (esim. rautatieasema, bussipysäkki, lentokenttä) lasketaan, vaikka ne olisivat yhdistettynä yhdeksi asemaksi. +STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Asemien osien määrä. Kaikki osat asemista (esim. rautatieasema, bussipysäkki, lentokenttä) lasketaan, vaikka ne olisivat yhdistettynä yhdeksi asemaksi STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP :{BLACK}Vähätuottoisimman kulkuneuvon tulo (kaikkien yli 2 vuotta vanhojen kulkuneuvojen) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Viimeisen 12 neljänneksen vähätuottoisimman kuun käteistuoton määrä STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Viimeisen 12 neljänneksen korkeatuottoisimman kuun käteistuoton määrä @@ -636,7 +636,7 @@ STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Viimeise STR_PERFORMANCE_DETAIL_CARGO_TOOLTIP :{BLACK}Viimeisen neljänneksen kuljetetun rahdin tyyppi STR_PERFORMANCE_DETAIL_MONEY_TOOLTIP :{BLACK}Käteisvarat STR_PERFORMANCE_DETAIL_LOAN_TOOLTIP :{BLACK}Tämän yhtiön ottaman lainan määrä -STR_PERFORMANCE_DETAIL_TOTAL_TOOLTIP :{BLACK}Summa kaikista mahdollisista pisteistä. +STR_PERFORMANCE_DETAIL_TOTAL_TOOLTIP :{BLACK}Summa kaikista mahdollisista pisteistä # Music window STR_MUSIC_JAZZ_JUKEBOX_CAPTION :{WHITE}Jazz-jukeboksi @@ -660,17 +660,17 @@ STR_MUSIC_TRACK :{TINY_FONT}{BLA STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Nimi STR_MUSIC_SHUFFLE :{TINY_FONT}{BLACK}Sekoita STR_MUSIC_PROGRAM :{TINY_FONT}{BLACK}Soittolista -STR_MUSIC_TOOLTIP_SKIP_TO_PREVIOUS_TRACK :{BLACK}Hyppää edelliseen raitaan. -STR_MUSIC_TOOLTIP_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Hyppää seuraavaan raitaan. -STR_MUSIC_TOOLTIP_STOP_PLAYING_MUSIC :{BLACK}Pysäytä musiikki. -STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC :{BLACK}Aloita musiikki. -STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Aseta liukusäätimillä sopiva äänenvoimakkuus musiikille ja tehosteille. -STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Valitse 'kaikki raidat' -STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Valitse 'vanhan tyylin musiikki' -STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Valitse 'uuden tyylin musiikki' -STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Valitse 'Ezy Street'. -STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Valitse 'oma 1' (käyttäjän määritettävissä) -STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Valitse 'oma 2' (käyttäjän määritettävissä) +STR_MUSIC_TOOLTIP_SKIP_TO_PREVIOUS_TRACK :{BLACK}Hyppää edelliseen raitaan +STR_MUSIC_TOOLTIP_SKIP_TO_NEXT_TRACK_IN_SELECTION :{BLACK}Hyppää seuraavaan raitaan +STR_MUSIC_TOOLTIP_STOP_PLAYING_MUSIC :{BLACK}Pysäytä musiikki +STR_MUSIC_TOOLTIP_START_PLAYING_MUSIC :{BLACK}Aloita musiikki +STR_MUSIC_TOOLTIP_DRAG_SLIDERS_TO_SET_MUSIC :{BLACK}Aseta liukusäätimillä sopiva äänenvoimakkuus musiikille ja tehosteille +STR_MUSIC_TOOLTIP_SELECT_ALL_TRACKS_PROGRAM :{BLACK}Valitse ”kaikki raidat” +STR_MUSIC_TOOLTIP_SELECT_OLD_STYLE_MUSIC :{BLACK}Valitse ”vanhan tyylin musiikki” +STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Valitse ”uuden tyylin musiikki” +STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Valitse ”Ezy Street” -tyylin musiikki +STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Valitse ”oma 1” (käyttäjän määritettävissä) +STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Valitse ”oma 2” (käyttäjän määritettävissä) STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Sekoittaminen päälle/pois STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Näytä musiikkiraitojen valintaikkuna @@ -712,13 +712,13 @@ STR_SMALLMAP_TYPE_ROUTEMAP :Rahtivirta STR_SMALLMAP_TYPE_ROUTES :Reitit STR_SMALLMAP_TYPE_VEGETATION :Kasvillisuus STR_SMALLMAP_TYPE_OWNERS :Omistajat -STR_SMALLMAP_TOOLTIP_SHOW_LAND_CONTOURS_ON_MAP :{BLACK}Näytä korkeuserot kartalla. -STR_SMALLMAP_TOOLTIP_SHOW_VEHICLES_ON_MAP :{BLACK}Näytä liikennevälineet kartalla. -STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRIES_ON_MAP :{BLACK}Näytä teollisuuus kartalla. +STR_SMALLMAP_TOOLTIP_SHOW_LAND_CONTOURS_ON_MAP :{BLACK}Näytä korkeuserot kartalla +STR_SMALLMAP_TOOLTIP_SHOW_VEHICLES_ON_MAP :{BLACK}Näytä liikennevälineet kartalla +STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRIES_ON_MAP :{BLACK}Näytä teollisuuslaitokset kartalla STR_SMALLMAP_TOOLTIP_SHOW_LINK_STATS_ON_MAP :{BLACK}Näytä rahtivirta kartalla -STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Näytä kuljetusreitit kartalla. -STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Näytä kasvillisuus kartalla. -STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Näytä maanomistajat kartalla. +STR_SMALLMAP_TOOLTIP_SHOW_TRANSPORT_ROUTES_ON :{BLACK}Näytä kuljetusreitit kartalla +STR_SMALLMAP_TOOLTIP_SHOW_VEGETATION_ON_MAP :{BLACK}Näytä kasvillisuus kartalla +STR_SMALLMAP_TOOLTIP_SHOW_LAND_OWNERS_ON_MAP :{BLACK}Näytä maanomistajat kartalla STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Napsauta teollisuustyyppiä näyttääksesi sen. Ctrl+Klik näyttää valitun tyypin. Ctrl+Klik uudestaan näyttää kaikki teollisuustyypit STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Napsauta yhtiötä näyttääksesi sen omaisuuden. Ctrl+Klik näyttää ainoastaan valitun yhtiön. Ctrl+Klik uudestaan näyttää kaikki yhtiöt STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Napsauta rahtia näyttääksesi tai piilottaaksesi sen. Ctrl+Klik piilottaa kaikki paitsi valitun rahdin. Ctrl+Klik uudelleen palauttaa kaikki rahdit näkyviin @@ -747,12 +747,12 @@ STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Kiviä STR_SMALLMAP_LEGENDA_WATER :{TINY_FONT}{BLACK}Vettä STR_SMALLMAP_LEGENDA_NO_OWNER :{TINY_FONT}{BLACK}Ei omistajaa -STR_SMALLMAP_LEGENDA_TOWNS :{TINY_FONT}{BLACK}Kaupunkeja +STR_SMALLMAP_LEGENDA_TOWNS :{TINY_FONT}{BLACK}Taajamia STR_SMALLMAP_LEGENDA_INDUSTRIES :{TINY_FONT}{BLACK}Teollisuutta STR_SMALLMAP_LEGENDA_DESERT :{TINY_FONT}{BLACK}Autiomaata STR_SMALLMAP_LEGENDA_SNOW :{TINY_FONT}{BLACK}Lunta -STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Kaupunkien nimet kartalla. +STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Näytä kuntien nimet kartalla STR_SMALLMAP_CENTER :{BLACK}Keskitä pieni kartta tähän paikkaan STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STRING} ({NUM}) STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} @@ -778,13 +778,13 @@ STR_STATUSBAR_SAVING_GAME :{RED}* * TALL # News message history STR_MESSAGE_HISTORY :{WHITE}Viestihistoria -STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Lista viimeisimmistä uutisviesteistä. -STR_MESSAGE_NEWS_FORMAT :{STRING} - {STRING} +STR_MESSAGE_HISTORY_TOOLTIP :{BLACK}Lista viimeisimmistä uutisviesteistä +STR_MESSAGE_NEWS_FORMAT :{STRING} – {STRING} STR_NEWS_MESSAGE_CAPTION :{WHITE}Viesti STR_NEWS_CUSTOM_ITEM :{BIG_FONT}{BLACK}{STRING} -STR_NEWS_FIRST_TRAIN_ARRIVAL :{BIG_FONT}{BLACK}Kaupunkilaiset juhlivat . . .{}Ensimmäinen juna saapuu asemalle {STATION}! +STR_NEWS_FIRST_TRAIN_ARRIVAL :{BIG_FONT}{BLACK}Asukkaat juhlivat . . .{}Ensimmäinen juna saapuu asemalle {STATION}! STR_NEWS_FIRST_BUS_ARRIVAL :{BIG_FONT}{BLACK}Kaupunkilaiset juhlivat . . .{}{STATION} vastaanottaa ensimmäisen linja-auton! STR_NEWS_FIRST_TRUCK_ARRIVAL :{BIG_FONT}{BLACK}Kaupunkilaiset juhlivat . . .{}{STATION} vastaanottaa ensimmäisen kuorma-auton! STR_NEWS_FIRST_PASSENGER_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Kaupunkilaiset juhlivat . . .{}{STATION} vastaanottaa ensimmäisen raitiovaunun! @@ -813,15 +813,15 @@ STR_NEWS_COMPANY_MERGER_DESCRIPTION :{BIG_FONT}{BLAC STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLACK}Konkurssi! STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} on suljettu velkojien toimesta ja kaikki omaisuus on myyty pois! STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Uusi kuljetusyhtiö perustettu! -STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} aloittaa rakentamisen kaupungin {TOWN} lähistölle! +STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} aloittaa rakentamisen kunnassa {TOWN}! STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{1:STRING} on ottanut haltuunsa yhtiön {0:STRING}! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(pääjohtaja) -STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} rahoitti uuden kaupungin, {TOWN}, rakentamista! -STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Uusi kaupunki {TOWN} rakennettu! +STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} rahoitti uuden kunnan, {TOWN}, rakentamista! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Uusi kunta {TOWN} perustettu! -STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Uusi {STRING} rakennetaan kaupungin {TOWN} lähistölle! -STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Uusi {STRING} istutetaan kaupungin {TOWN} lähistölle! +STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Uusi {STRING} rakennetaan paikkakunnalle {TOWN}! +STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Uusi {STRING} istutetaan paikkakunnalle {TOWN}! STR_NEWS_INDUSTRY_CLOSURE_GENERAL :{BIG_FONT}{BLACK}{STRING}: alasajo aloitetaan välittömästi! STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS :{BIG_FONT}{BLACK}{STRING}: toimitusongelmista johtuen sulkeminen uhkaavan lähellä! @@ -894,7 +894,7 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Siirrä # Game options window STR_GAME_OPTIONS_CAPTION :{WHITE}Pelin valinnat STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Rahayksikkö -STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Rahayksikön valinta. +STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Rahayksikön valinta ############ start of currency region STR_GAME_OPTIONS_CURRENCY_GBP :Englannin punta (GBP) @@ -936,12 +936,12 @@ STR_GAME_OPTIONS_CURRENCY_MXN :Meksikon peso ( ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Kulkuneuvot -STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Valitse kummalla puolella tietä ajetaan. +STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Valitse kummalla puolella tietä ajetaan STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Vasemmanpuolinen liikenne STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Oikeanpuolinen liikenne -STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Kaupunkien nimet -STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Valitse kaupunkien nimien tyyli. +STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Kuntien nimet +STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Valitse kuntien nimien tyyli ############ start of townname region STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH :Englantilainen @@ -968,7 +968,7 @@ STR_GAME_OPTIONS_TOWN_NAME_CATALAN :Katalonialainen ############ end of townname region STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Automaattitallennus -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Valitse aikaväli automaattisille pelitallennuksille. +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Valitse aikaväli automaattisille pelitallennuksille ############ start of autosave dropdown STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Pois @@ -979,10 +979,10 @@ STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_12_MONTHS :Kerran vuodessa ############ end of autosave dropdown STR_GAME_OPTIONS_LANGUAGE :{BLACK}Kieli -STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Valitse käyttöliittymän kieli. +STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Valitse käyttöliittymän kieli STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Koko näyttö -STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Valitse tämä pelataksesi kokoruututilassa. +STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Valitse tämä pelataksesi kokoruututilassa STR_GAME_OPTIONS_RESOLUTION :{BLACK}Näytön tarkkuus STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Valitse käytettävä näytön tarkkuus @@ -1174,7 +1174,7 @@ STR_CONFIG_SETTING_TRAIN_REVERSING :Estä junien k STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Mikäli käytössä, junat eivät käänny läpiajettavilla asemilla vaikka kääntymisen jälkeen saatavilla olisi lyhempi reitti STR_CONFIG_SETTING_DISASTERS :Onnettomuudet: {STRING} STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Ottaa käyttöön onnettomuudet jotka saattavat ajoittain estää tai tuhota liikennettä tai infrastruktuuria -STR_CONFIG_SETTING_CITY_APPROVAL :Kaupunginvaltuuston asenne alueiden uudelleenjärjestelyyn: {STRING} +STR_CONFIG_SETTING_CITY_APPROVAL :Valtuuston asenne alueiden uudelleenjärjestelyyn: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Valitse, kuinka paljon yhtiöiden aiheuttama melu ja ympäristövahingot vaikuttavat niiden arvioihin sekä tuleviin rakennustoimiin alueella STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Kartan suurin sallittu korkeus: {STRING} @@ -1184,8 +1184,10 @@ STR_CONFIG_SETTING_AUTOSLOPE :Salli maaston m STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Sallii maaston muokkaamisen rakennusten ja ratojen alta tuhoamatta niitä STR_CONFIG_SETTING_CATCHMENT :Realistisemman kokoiset vaikutusalueet: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Erityyppisillä asemilla ja lentokentillä on eri kokoiset vaikutusalueet -STR_CONFIG_SETTING_EXTRADYNAMITE :Kaupungin omistamien teiden, siltojen ja tunneleiden raivaaminen sallittu: {STRING} -STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Tekee kaupunkien omistaman infrastruktuurin ja rakennusten tuhoamisesta helpompaa +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Yhtiöiden asemat voivat palvella laitoksia, joilla on omat asemat: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Mikäli käytössä, asemilla valmiiksi varustettuja teollisuuslaitoksia (kuten öljylauttoja) voivat palvella myös yhtiöiden lähistölle rakentamat asemat. Mikäli pois käytöstä, tällaisia laitoksia voivat palvella vain niiden omat asemat. Lähistöllä olevat yhtiöiden asemat eivät tällöin voi palvella näitä laitoksia, eivätkä laitosten asemat palvele muita kuin näitä laitoksia +STR_CONFIG_SETTING_EXTRADYNAMITE :Kunnan omistamien teiden, siltojen ja tunneleiden raivaaminen sallittu: {STRING} +STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Tekee kuntien omistaman infrastruktuurin ja rakennusten tuhoamisesta helpompaa STR_CONFIG_SETTING_TRAIN_LENGTH :Junien maksimipituus: {STRING} STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Määrittää junien suurimman sallitun pituuden STR_CONFIG_SETTING_TILE_LENGTH :{COMMA} ruutu{P 0 "" a} @@ -1213,14 +1215,14 @@ STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Suurin sallittu STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :Suurin sallittu tunnelin pituus: {STRING} STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Suurin sallittu pituus tunneleita rakennettaessa STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :Manuaalinen raakateollisuuden rakentamistapa: {STRING} -STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Ensisijaisten teollisuuslaitosten rahoitustapa. 'ei mitään' tarkoittaa, että rahoitus ei ole mahdollista, 'koekaivaus' tarkoittaa, että rahoitus on mahdollista mutta teollisuuslaitos rakennetaan sattumanvaraiselle paikalle kartalla tai rakennus epäonnistuu, 'kuten muut tehtaat' tarkoittaa, että rakentaminen onnistuu kuten kaikkien muidenkin teollisuuslaitosten kohdalla +STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Ensisijaisten teollisuuslaitosten rahoitustapa. ”Ei mitään” tarkoittaa, että rahoitus ei ole mahdollista; ”koekaivaus” tarkoittaa, että rahoitus on mahdollista, mutta teollisuuslaitos rakennetaan sattumanvaraiselle paikalle kartalla tai rakennus epäonnistuu; ”kuten muut tehtaat” tarkoittaa, että rakentaminen onnistuu kuten kaikkien muidenkin teollisuuslaitosten kohdalla STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :Ei mikään STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :Kuten muut tehtaat STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :Koekaivaus STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Teollisuutta ympäröivä tasainen maasto: {STRING} STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Teollisuuslaitosten ympärillä oleva tasainen maasto. Tämä varmistaa että teollisuuslaitosten ympärillä on tyhjää tilaa esimerkiksi ratojen ja asemien rakantamiseen -STR_CONFIG_SETTING_MULTIPINDTOWN :Kaupungissa voi olla useita samanlaisia teollisuustyyppejä: {STRING} -STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normaalisti kaupunki ei halua enempää kuin yhden kutakin teollisuuslaitostyyppiä. Tämän asetuksen ollessa käytössä kaupungit sallivat useampien samaa tyyppiä olevien teollisuuslaitosten rakentamisen +STR_CONFIG_SETTING_MULTIPINDTOWN :Kunnassa voi olla useita samanlaisia teollisuustyyppejä: {STRING} +STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normaalisti kunta ei halua enempää kuin yhden kutakin teollisuuslaitostyyppiä. Tämän asetuksen ollessa käytössä kunnat sallivat useampien samaa tyyppiä olevien teollisuuslaitosten rakentamisen STR_CONFIG_SETTING_SIGNALSIDE :Näytä opastimet: {STRING} STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Valitse kummalle puolelle rataa opastimet rakennetaan STR_CONFIG_SETTING_SIGNALSIDE_LEFT :Vasemmalla puolella @@ -1228,10 +1230,10 @@ STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :Ajokaistan puol STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :Oikealla puolella STR_CONFIG_SETTING_SHOWFINANCES :Näytä rahoitusikkuna vuoden lopussa: {STRING} STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Mikäli käytössä, rahoitusikkuna näytetään jokaisen vuoden lopussa yhtiön taloudellisen tilanteen seurannan helpottamiseksi -STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Uudet käskyt ovat oletusarvoisesti nonstop-tyyppisiä: {STRING} +STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Uudet käskyt ovat oletusarvoisesti ilman välipysähdyksiä: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normaalisti kulkuneuvo pysähtyy jokaisella läpikulkemallaan asemalla. Mikäli tämä asetus on käytössä kulkuneuvot eivät pysähdy ajaessaan asemien läpi. Huomioi, että tämä asetus määrittää oletusarvoisen toiminnon uusille kulkuneuvoille. Asetusta voidaan muuttaa erikseen kunkin kulkuneuvon kohdalla STR_CONFIG_SETTING_STOP_LOCATION :Uudet junien käskyt pysäyttävät junan aseman {STRING} -STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Paikka, johon juna pysähtyy oletuksena asemalla. 'Alkuun' tarkoittaa että junan viimeinen vaunu pysähtyy laiturin alkuun, 'keskelle' tarkoittaa junan pysähtyvän keskelle laituria, ja 'loppuun' tarkoittaa että veturi pysähtyy laiturin päähän. Huomaa, että tämä asetus määrittää oletusarvon uusille määräyksille. Yksittäisten määräysten kohdalla käyttäytymistä voi muuttaa tästä asetuksesta huolimatta +STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Paikka, johon juna pysähtyy oletuksena asemalla. ”Alkuun” tarkoittaa, että junan viimeinen vaunu pysähtyy laiturin alkuun; ”keskelle” tarkoittaa junan pysähtymistä keskelle laituria; ja ”loppuun” tarkoittaa, että veturi pysähtyy laiturin päähän. Huomaa, että tämä asetus määrittää vain oletusarvon uusille määräyksille. Yksittäisten määräysten kohdalla käyttäytymistä voi muuttaa tästä asetuksesta huolimatta STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :alkuun STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :keskelle STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :loppuun @@ -1242,13 +1244,13 @@ STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Päänäkymäss STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Päänäkymässä STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Kaikissa näkymissä STR_CONFIG_SETTING_BRIBE :Salli viranomaisten lahjominen: {STRING} -STR_CONFIG_SETTING_BRIBE_HELPTEXT :Salli yhtiöiden yrittää paikallisviranomaisten lahjontaa. Jos lahjontayritys paljastuu, yhtiö ei voi toimia kaupungissa kuuteen kuukauteen +STR_CONFIG_SETTING_BRIBE_HELPTEXT :Salli yhtiöiden yrittää paikallisviranomaisten lahjontaa. Jos lahjontayritys paljastuu, yhtiö ei voi toimia kunnassa kuuteen kuukauteen STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Salli kuljetusyksinoikeuksien ostaminen: {STRING} -STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Jos yhtiö ostaa kuljetusyksinoikeudet kaupunkiin, vastustajien asemat (matkustaja ja rahti) eivät vastaanota rahtia vuoden ajan +STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Jos yhtiö ostaa kuljetusyksinoikeudet kuntaan, vastustajien matkustaja- ja rahtiasemat eivät vastaanota rahtia vuoden ajan STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Salli rakennusten rahoittaminen: {STRING} -STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Sallii yhtiöiden rahoittaa uusien talojen rakentamista kaupungeissa +STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Sallii yhtiöiden rahoittaa uusien talojen rakentamista kunnissa STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Salli paikallisen tieverkon uudelleenrakentamisen rahoitus: {STRING} -STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Sallii yhtiöiden rahoittaa tieverkon uudelleenrakentamista kaupungeissa tieliikenteen häiritsemiseksi +STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Sallii yhtiöiden rahoittaa kuntien tieverkon uudelleenrakentamista tieliikenteen häiritsemiseksi STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Salli rahan lähettäminen muille yhtiöille: {STRING} STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Sallii rahan siirtämisen yhtiöiden välillä moninpelitilassa STR_CONFIG_SETTING_FREIGHT_TRAINS :Rahdin painokerroin raskaiden junien simulointia varten: {STRING} @@ -1261,8 +1263,8 @@ STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Määrittää l STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ei yhtään¹ STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Vähennetty STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Tavallinen -STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Läpiajettavat pysäkit kaupungin teille: {STRING} -STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Sallii pysäkkien rakentamisen kaupunkien omistamille teille +STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Läpiajettavat pysäkit kuntien omistamille teille: {STRING} +STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Sallii pysäkkien rakentamisen kuntien omistamille teille STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Salli läpiajettavat pysäkit kilpailijoiden omistamilla teillä: {STRING} STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Salli pysäkkien rakentaminen toisten yhtiöiden omistamille teille STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Tätä asetusta ei voi muuttaa, kun kulkuneuvoja on olemassa @@ -1301,13 +1303,13 @@ STR_CONFIG_SETTING_HOVER_DELAY :Näytä työkal STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Viive ennen työkaluvihjeen näyttämistä, kun hiiren kursoria pidetään käyttöliittymäelementin päällä. Vaihtoehtoisesti työkaluvihjeen saa myös näkymiin painamalla hiiren oikeata painiketta, kun arvoksi on määritetty 0. STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Pidä hiirtä päällä {COMMA} millisekunti{P 0 "" a} STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Hiiren oikea painike -STR_CONFIG_SETTING_POPULATION_IN_LABEL :Näytä kaupungin asukasluku kaupungin nimessä: {STRING} -STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Näytä kaupunkien asukasluku kartalla +STR_CONFIG_SETTING_POPULATION_IN_LABEL :Näytä kunnan asukasluku kunnan nimen yhteydessä: {STRING} +STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Näytä kuntien asukasluvut kartalla STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Viivojen paksuus kuvaajissa: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Viivan leveys kuvaajissa. Ohut viiva on tarkasti luettavissa kun taas paksumpi viiva on helpompi nähdä ja sen värit ovat helpommin havaittavissa STR_CONFIG_SETTING_LANDSCAPE :Maasto: {STRING} -STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Maasto vaikuttaa useisiin pelin peruselementteihin, kuten rahtiin ja kaupunkien kasvuvaatimuksiin. NewGRF:t ja Peliskriptit voivat kuitenkin vaikuttaa tarkemmin pelin kulkuun +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Maasto vaikuttaa useisiin pelin peruselementteihin, kuten rahtiin ja kuntien kasvuedellytyksiin. NewGRF:t ja peliskriptit voivat kuitenkin vaikuttaa tarkemmin pelin kulkuun STR_CONFIG_SETTING_LAND_GENERATOR :Maastogeneraattori: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Alkuperäinen maastonluoja riippuu perusgrafiikkapaketista ja luo ennalta määritettyjä maastonmuotoja. TerraGenesis luo maastoa Perlin-kohinan perusteella ja mahdollistaa asetusten tarkemman määrittelyn STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Alkuperäinen @@ -1319,7 +1321,7 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Määritä, kui STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Suurin sallittu etäisyys kartan reunoilta öljynjalostamoille: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Öljynjalostamoja rakennetaan ainoastaan kartan reunoille eli rannikoille saarikartoilla STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Lumirajan korkeus: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Määritä, millä korkeudella lumiraja on pohjoisessa maastotyypissä. Lumi vaikuttaa teollisuuksien luontiin sekä kaupunkien kasvuvaatimuksiin +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Määritä, millä korkeudella lumiraja on pohjoisessa maastotyypissä. Lumi vaikuttaa teollisuuslaitosten luontiin sekä kuntien kasvuedellytyksiin STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Maaston epätasaisuus: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Vain TerraGenesis) Määritä mäkien tiheys: Tasaisessa maastossa mäet ovat laajempia ja niitä on vähemmän. Epätasaisessa maastossa on enemmän mäkiä, mikä voi saada maaston näyttämään itseään toistavalta STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Erittäin tasainen @@ -1331,7 +1333,7 @@ STR_CONFIG_SETTING_VARIETY_HELPTEXT :(Vain TerraGene STR_CONFIG_SETTING_RIVER_AMOUNT :Jokien määrä: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Valitse, kuinka paljon jokia luodaan STR_CONFIG_SETTING_TREE_PLACER :Puiden sijoittelualgoritmi: {STRING} -STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Määritä puiden jakautuminen kartalla: 'Alkuperäinen' istuttaa puita tasaisesti ympäri karttaa, 'Parannettu' istuttaa niitä ryhmiin +STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Määritä puiden jakautuminen kartalla: ”Alkuperäinen” istuttaa puita tasaisesti ympäri karttaa, ”parannettu” istuttaa niitä ryhmiin STR_CONFIG_SETTING_TREE_PLACER_NONE :Ei mitään STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Alkuperäinen STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Parannettu @@ -1421,9 +1423,9 @@ STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Näytä aikatau STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Näytä saapuminen ja lähtö aikatauluissa: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Näytä odotetut saapumis- ja lähtemisajat aikatauluissa STR_CONFIG_SETTING_QUICKGOTO :Nopea kulkuneuvon käskyjen luominen: {STRING} -STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Valitse 'mene'-kursori kun määräysikkuna avataan +STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Valitse ”mene”-kursori kun määräysikkuna avataan STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Oletusraidetyyppi: {STRING} -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Ratatyyppi, joka valitaan pelin aloittamisen jälkeen. 'ensimmäinen saatavilla oleva' valitsee vanhimman ratatyypin, 'viimeisin saatavilla oleva' valitsee uusimman ratatyypin ja 'eniten käytetty' valitsee eniten käytetyn ratatyypin +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Ratatyyppi, joka valitaan pelin aloittamisen jälkeen: ”ensimmäinen saatavilla oleva” valitsee vanhimman ratatyypin, ”viimeisin saatavilla oleva” valitsee uusimman ratatyypin, ja ”eniten käytetty” valitsee eniten käytetyn ratatyypin STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :Ensimmäinen STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Viimeinen STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :Yleisin @@ -1449,7 +1451,7 @@ STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT :Toista vahinkoj STR_CONFIG_SETTING_SOUND_VEHICLE :Kulkuneuvot: {STRING} STR_CONFIG_SETTING_SOUND_VEHICLE_HELPTEXT :Toista kulkuneuvojen äänet STR_CONFIG_SETTING_SOUND_AMBIENT :Ympäristö: {STRING} -STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Toista ympäristön, kuten maaston, teollisuuden ja kaupunkien äänet +STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Toista ympäristön, kuten maaston, teollisuuden ja taajamien äänet STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING :Poista käytöstä infrastruktuurin rakennus kun sopivia kulkuneuvoja ei ole saatavilla: {STRING} STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING_HELPTEXT :Mikäli käytössä, infrastruktuuri on saatavilla vain jos sille on saatavilla kulkuneuvoja, välttäen ajan ja rahan tuhlaamisen infrastruktuuriin, jota ei voida käyttää @@ -1565,25 +1567,25 @@ STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :Vain suojastuso STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Vain reittiopastimet STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Kaikki -STR_CONFIG_SETTING_TOWN_LAYOUT :Uusissa kaupungeissa käytettävä tiekaava: {STRING} -STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT :Kaupunkien käyttämä tieverkon kaava +STR_CONFIG_SETTING_TOWN_LAYOUT :Uusissa kunnissa käytettävä tiekaava: {STRING} +STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT :Kuntien käyttämä tieverkon kaava STR_CONFIG_SETTING_TOWN_LAYOUT_DEFAULT :Alkuperäinen STR_CONFIG_SETTING_TOWN_LAYOUT_BETTER_ROADS :Parempia teitä STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :2×2-ruudukko STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :3×3-ruudukko STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Satunnainen -STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Kaupungit saavat rakentaa teitä: {STRING} -STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Salli kaupunkien rakentaa teitä kasvaessaan. Mikäli pois käytöstä, kaupungit eivät voi rakentaa teitä itse -STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Kaupungit saavat rakentaa tasoristeyksiä: {STRING} -STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Mikäli käytössä, kaupungit voivat rakentaa tasoristeyksiä -STR_CONFIG_SETTING_NOISE_LEVEL :Käytä kaupunkien hallitsemaa melutasoa lentokentille: {STRING} -STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Mikäli pois käytöstä, kaupungissa voi olla kaksi lentokentää. Mikäli käytössä, lentokenttien määrä kaupungissa rajoittuu kaupungin melurajan mukaan. Meluraja riippuu asukasluvusta ja lentokentän koosta sekä etäisyydestä -STR_CONFIG_SETTING_TOWN_FOUNDING :Kaupunkien perustaminen pelissä: {STRING} -STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Mikäli käytössä, pelaajat voivat perustaa uusia kaupunkeja +STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Kunnat saavat rakentaa teitä: {STRING} +STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Salli kuntien rakentaa teitä kasvaessaan. Mikäli pois käytöstä, kunnat eivät voi rakentaa teitä itse +STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Kunnat saavat rakentaa tasoristeyksiä: {STRING} +STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Mikäli käytössä, kunnat voivat rakentaa tasoristeyksiä +STR_CONFIG_SETTING_NOISE_LEVEL :Käytä kuntien hallitsemaa melutasoa lentokentille: {STRING} +STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Mikäli pois käytöstä, kunnassa voi olla kaksi lentokentää. Mikäli käytössä, lentokenttien määrä kunnassa rajoittuu kunnan melurajan mukaan. Meluraja riippuu asukasluvusta ja lentokentän koosta sekä etäisyydestä +STR_CONFIG_SETTING_TOWN_FOUNDING :Kuntien perustaminen pelissä: {STRING} +STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Mikäli käytössä, pelaajat voivat perustaa uusia kuntia STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Kielletty STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Sallittu -STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Sallittu, oma kaupungin kaava -STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Kaupunkirahdin luonti: {STRING} +STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Sallittu, oma tiekaava +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Taajamarahdin luonti: {STRING} STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Talojen tuottaman rahdin määrä suhteessa kunnan asukaslukuun.{}Neliöllinen kasvu: Kaksinkertainen asukasmäärä tuottaa matkustajia nelinkertaisesti.{}Lineaarinen kasvu: Kaksinkertainen asukasmäärä tuottaa matkustajia kaksinkertaisesti. STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Neliöllinen (alkuperäinen) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineaarinen @@ -1616,19 +1618,19 @@ STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :Tavallinen STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x -STR_CONFIG_SETTING_TOWN_GROWTH :Kaupunkien kasvunopeus: {STRING} -STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Kaupungin kasvunopeus +STR_CONFIG_SETTING_TOWN_GROWTH :Kuntien kasvunopeus: {STRING} +STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Kunnan kasvunopeus STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Ei kasvua STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :Hidas STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :Tavallinen STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Nopea STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Erittäin nopea -STR_CONFIG_SETTING_LARGER_TOWNS :Suurkaupunkien osuus: {STRING} +STR_CONFIG_SETTING_LARGER_TOWNS :Kaupunkien osuus: {STRING} STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Suurkaupungiksi muuttuvien kaupunkien määrä, eli suurempana aloittavat ja nopeammin kasvavat kaupungit STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 / {COMMA} STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Ei yhtään STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Kasvukerroin alussa: {STRING} -STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Suurkaupunkien keskimääräinen koko suhteessa normaaleihin kaupunkeihin pelin alussa +STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Kaupunkien keskimääräinen koko suhteessa muihin kuntiin pelin alussa STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Päivitä rahdin jakautuminen {STRING}{NBSP}päivän välein STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Yhteyskuvaajan uudelleenlaskujen välinen aika. Kukin uudelleenlasku laskee yhden kuvaajan komponentin. Tämä tarkoittaa sitä, että koko kuvaajaa ei lasketa uudelleen määrittämäsi ajan välein, vaan ainoastaan yksi komponentti. Mitä lyhyemmäksi määrität asetuksen, sitä enemmän prosessoriaikaa komponentin laskemiseen vaaditaan. Mitä pidemmäksi määrität sen, sitä pidempi aika kuluu, kunnes rahdin jakaminen alkaa uusilla reiteillä. @@ -1708,7 +1710,7 @@ STR_CONFIG_SETTING_ACCIDENTS :{ORANGE}Onnetto STR_CONFIG_SETTING_GENWORLD :{ORANGE}Maailman luominen STR_CONFIG_SETTING_ENVIRONMENT :{ORANGE}Ympäristö STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :{ORANGE}Viranomaiset -STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Kaupungit +STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Kunnat STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Laitokset STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Rahdin jakautuminen STR_CONFIG_SETTING_AI :{ORANGE}Kilpailijat @@ -1768,24 +1770,24 @@ STR_INTRO_SCRIPT_SETTINGS :{BLACK}Tekoäly STR_INTRO_QUIT :{BLACK}Sulje STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Aloita uusi peli. Ctrl+Klik ohittaa kartan asetukset -STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Lataa tallennettu peli. +STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Lataa tallennettu peli STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Aloita uusi peli, käyttäen korkeuskarttaa maastona -STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Aloita uusi peli käyttäen omaa skenaariota. -STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Luo oma pelimaailma/skenaario. +STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Aloita uusi peli käyttäen omaa skenaariota +STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Luo oma pelimaailma/skenaario STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Aloita moninpeli -STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Valitse lauhkea maastotyyppi. -STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Valitse pohjoinen maastotyyppi. -STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Valitse subtrooppinen maastotyyppi. -STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Valitse lelumaan maastotyyppi. +STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Valitse lauhkea maastotyyppi +STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Valitse pohjoinen maastotyyppi +STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Valitse subtrooppinen maastotyyppi +STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Valitse lelumaan maastotyyppi STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Näytä pelin valinnat STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Näytä pistetaulukko -STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Näyttöasetukset +STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Näytä asetukset STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Näytä NewGRF-asetukset STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Tarkista uutta ja päivitettyä sisältöä ladattavaksi STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Näytä tekoäly/peliskriptiasetukset -STR_INTRO_TOOLTIP_QUIT :{BLACK}Sulje OpenTTD. +STR_INTRO_TOOLTIP_QUIT :{BLACK}Lopeta OpenTTD STR_INTRO_BASESET :{BLACK}Valitusta perusgrafiikkapaketista puuttuu {NUM} sprite{P "" ä}. Tarkista, onko sille päivityksiä. STR_INTRO_TRANSLATION :{BLACK}Tästä käännöksestä puuttuu {NUM} merkkijono{P "" a}. Auta tekemään OpenTTD:stä parempi ryhtymällä kääntäjäksi. Lisätietoja readme.txt:ssä. @@ -1812,7 +1814,7 @@ STR_ABANDON_SCENARIO_QUERY :{YELLOW}Lopetet # Cheat window STR_CHEATS :{WHITE}Huijaukset -STR_CHEATS_TOOLTIP :{BLACK}Valintaruudut osoittavat, oletko käyttänyt huijausta aiemmin. +STR_CHEATS_TOOLTIP :{BLACK}Valintaruudut osoittavat, oletko käyttänyt huijausta aiemmin STR_CHEATS_WARNING :{BLACK}Varoitus! Olet juuri pettämässä kanssakilpailijoitasi. Pidä mielessä, että tällainen häväistys pidetään mielessä ikuisuuden ajan STR_CHEAT_MONEY :{LTBLUE}Anna lisää rahaa: {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Hallinnassa oleva yhtiö: {ORANGE}{COMMA} @@ -1833,7 +1835,7 @@ STR_CHEAT_SETUP_PROD :{LTBLUE}Salli t STR_LIVERY_CAPTION :{WHITE}{COMPANY}: Väriteema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Näytä yleiset väriteemat -STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Näytä junan väriteemat +STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Näytä junien väriteemat STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Näytä tieajoneuvojen väriteemat STR_LIVERY_SHIP_TOOLTIP :{BLACK}Näytä laivojen väriteemat STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Näytä lentokoneiden väriteemat @@ -1867,16 +1869,16 @@ STR_LIVERY_FREIGHT_TRAM :Raitiotavaravau # Face selection window STR_FACE_CAPTION :{WHITE}Kasvojen valinta -STR_FACE_CANCEL_TOOLTIP :{BLACK}Peruuta uusien kasvojen valinta. -STR_FACE_OK_TOOLTIP :{BLACK}Hyväksy uusien kasvojen valinta. +STR_FACE_CANCEL_TOOLTIP :{BLACK}Peruuta uusien kasvojen valinta +STR_FACE_OK_TOOLTIP :{BLACK}Hyväksy uusien kasvojen valinta STR_FACE_RANDOM :{BLACK}Satunnainen STR_FACE_MALE_BUTTON :{BLACK}Mies -STR_FACE_MALE_TOOLTIP :{BLACK}Valitse miehen kasvot. +STR_FACE_MALE_TOOLTIP :{BLACK}Valitse miehen kasvot STR_FACE_FEMALE_BUTTON :{BLACK}Nainen -STR_FACE_FEMALE_TOOLTIP :{BLACK}Valitse naisen kasvot. +STR_FACE_FEMALE_TOOLTIP :{BLACK}Valitse naisen kasvot STR_FACE_NEW_FACE_BUTTON :{BLACK}Uudet kasvot -STR_FACE_NEW_FACE_TOOLTIP :{BLACK}Luo satunnaiset kasvot. +STR_FACE_NEW_FACE_TOOLTIP :{BLACK}Luo satunnaiset kasvot STR_FACE_ADVANCED :{BLACK}Monipuolinen STR_FACE_ADVANCED_TOOLTIP :{BLACK}Monipuolisempi kasvojenvalitsin STR_FACE_SIMPLE :{BLACK}Yksinkertainen @@ -1930,10 +1932,10 @@ STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Valitse STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Ei STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Kyllä STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Pelaajan nimi -STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Pelaajat tunnistetaan ja erotetaan toisistaan nimien avulla. +STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Pelaajat tunnistetaan ja erotetaan toisistaan nimien avulla STR_NETWORK_SERVER_LIST_GAME_NAME :{BLACK}Nimi -STR_NETWORK_SERVER_LIST_GAME_NAME_TOOLTIP :{BLACK}Pelin nimi. +STR_NETWORK_SERVER_LIST_GAME_NAME_TOOLTIP :{BLACK}Pelin nimi STR_NETWORK_SERVER_LIST_GENERAL_ONLINE :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA} STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION :{BLACK}Pelaajia STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION_TOOLTIP :{BLACK}Pelaajia online / pelaajia maks.{}Yhtiöitä online / yhtiöitä maks. @@ -1967,14 +1969,14 @@ STR_NETWORK_SERVER_LIST_GRF_MISMATCH :{SILVER}NEWGRF- STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Liity peliin STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Päivitä -STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Päivitä palvelintiedot. +STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Päivitä palvelintiedot STR_NETWORK_SERVER_LIST_FIND_SERVER :{BLACK}Etsi palvelin -STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Etsi palvelin verkosta. +STR_NETWORK_SERVER_LIST_FIND_SERVER_TOOLTIP :{BLACK}Etsi palvelin verkosta STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Lisää palvelin STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Lisää palvelin listaan, joka käydään läpi aina uusia pelejä haettaessa STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Käynnistä palvelin -STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Käynnistä oma palvelin. +STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Käynnistä oma palvelin STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Kirjoita nimesi STR_NETWORK_SERVER_LIST_ENTER_IP :{BLACK}Syötä palvelimen IP-osoite @@ -1983,15 +1985,15 @@ STR_NETWORK_SERVER_LIST_ENTER_IP :{BLACK}Syötä STR_NETWORK_START_SERVER_CAPTION :{WHITE}Aloita uusi peli STR_NETWORK_START_SERVER_NEW_GAME_NAME :{BLACK}Pelin nimi: -STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Nimi näytetään muille pelaajille moninpelivalikossa. +STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Nimi näytetään muille pelaajille moninpelivalikossa STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Aseta salasana -STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Jos peliin ei halua ulkopuolisia, voi sen suojata salasanalla. +STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Jos peliin ei halua ulkopuolisia, voi sen suojata salasanalla STR_NETWORK_START_SERVER_UNADVERTISED :Ei STR_NETWORK_START_SERVER_ADVERTISED :Kyllä STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} asiakas{P "" ta} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Pelaajien enimmäismäärä: -STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Pelaajien enimmäismäärä. Pelissä voi olla myös vähemmän pelaajia. +STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Pelaajien enimmäismäärä. Pelissä voi olla myös vähemmän pelaajia STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} yhtiö{P "" tä} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Yhtiöiden enimmäismäärä: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Rajoita yhtiöiden määrää palvelimella @@ -1999,7 +2001,7 @@ STR_NETWORK_START_SERVER_SPECTATORS_SELECT :{BLACK}{NUM} ka STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS :{BLACK}Katsojien enimmäismäärä: STR_NETWORK_START_SERVER_NUMBER_OF_SPECTATORS_TOOLTIP :{BLACK}Rajoita katsojien määrää palvelimella STR_NETWORK_START_SERVER_LANGUAGE_SPOKEN :{BLACK}Puhuttu kieli: -STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Toiset pelaajat tietävät tästä, mitä kieltä palvelimella puhutaan. +STR_NETWORK_START_SERVER_LANGUAGE_TOOLTIP :{BLACK}Toiset pelaajat tietävät tästä, mitä kieltä palvelimella puhutaan STR_NETWORK_START_SERVER_NEW_GAME_NAME_OSKTITLE :{BLACK}Syötä nimi verkkopelille @@ -2047,7 +2049,7 @@ STR_NETWORK_LANG_LATVIAN :latvia STR_NETWORK_GAME_LOBBY_CAPTION :{WHITE}Moninpeliaula STR_NETWORK_GAME_LOBBY_PREPARE_TO_JOIN :{BLACK}Valmistautuu yhdistämään: {ORANGE}{STRING} -STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Lista pelissä olevista yhtiöistä. Voit joko liittyä yhteen tai perustaa omasi. +STR_NETWORK_GAME_LOBBY_COMPANY_LIST_TOOLTIP :{BLACK}Lista pelissä olevista yhtiöistä. Voit joko liittyä yhteen tai perustaa omasi STR_NETWORK_GAME_LOBBY_COMPANY_INFO :{SILVER}YHTIÖN TIEDOT STR_NETWORK_GAME_LOBBY_COMPANY_NAME :{SILVER}Yhtiön nimi: {WHITE}{STRING} @@ -2062,11 +2064,11 @@ STR_NETWORK_GAME_LOBBY_STATIONS :{SILVER}Asemat: STR_NETWORK_GAME_LOBBY_PLAYERS :{SILVER}Pelaajat: {WHITE}{STRING} STR_NETWORK_GAME_LOBBY_NEW_COMPANY :{BLACK}Uusi yhtiö -STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Perusta uusi yhtiö. +STR_NETWORK_GAME_LOBBY_NEW_COMPANY_TOOLTIP :{BLACK}Perusta uusi yhtiö STR_NETWORK_GAME_LOBBY_SPECTATE_GAME :{BLACK}Seuraa peliä -STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Seuraa pelin kulkua. +STR_NETWORK_GAME_LOBBY_SPECTATE_GAME_TOOLTIP :{BLACK}Seuraa pelin kulkua STR_NETWORK_GAME_LOBBY_JOIN_COMPANY :{BLACK}Liity yhtiöön -STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Auta tämän yhtiön hallinnassa. +STR_NETWORK_GAME_LOBBY_JOIN_COMPANY_TOOLTIP :{BLACK}Auta tämän yhtiön hallinnassa # Network connecting window STR_NETWORK_CONNECTING_CAPTION :{WHITE}Yhdistetään... @@ -2317,8 +2319,8 @@ STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLA STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Vaikutusalueen korostus STR_STATION_BUILD_COVERAGE_OFF :{BLACK}pois STR_STATION_BUILD_COVERAGE_ON :{BLACK}päällä -STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Älä korosta ehdotetun tontin vaikutusaluetta. -STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Korosta ehdotetun tontin vaikutusalue. +STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Älä korosta ehdotetun tontin vaikutusaluetta +STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Korosta ehdotetun tontin vaikutusalue STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Vastaanottaa: {GOLD}{CARGO_LIST} STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Tuottaa: {GOLD}{CARGO_LIST} @@ -2343,7 +2345,7 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Rakenna STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Rakenna opastimia. Ctrl vaihtaa joko siipiopastimet tai valo-opastimet{}Vetäminen rakentaa opastimia suoralle rautatielle. Ctrl rakentaa opastimia seuraavaan risteykseen saakka{}Ctrl+Click avaa opastimenvalintaikkunan. Shift vaihtaa rakennustilan ja kustannusarvion välillä STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Rakenna rautatiesilta. Shift vaihtaa rakennustilan ja kustannusarvion välillä STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Rakenna rautatietunneli. Shift vaihtaa rakennustilan ja kustannusarvion välillä -STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Rautatien, opastimien, reittipisteiden ja asemien rakentaminen/poisto päälle/pois. Pidä pohjassa Ctrl-näppäintä poistaaksesi myös aseman tai reittipisteen alla olevat raiteet. +STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Rautatien, opastimien, reittipisteiden ja asemien rakentaminen/poisto päälle/pois. Pidä pohjassa Ctrl-näppäintä poistaaksesi myös aseman tai reittipisteen alla olevat raiteet STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Muunna/päivitä raidetyyppi. Shift vaihtaa muuntotilan ja kustannusarvion välillä STR_RAIL_NAME_RAILROAD :Rautatie @@ -2353,7 +2355,7 @@ STR_RAIL_NAME_MAGLEV :Maglev-rata # Rail depot construction window STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Veturitallin suunta -STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Valitse veturitallin suunta. +STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Valitse veturitallin suunta # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Reittipiste @@ -2362,13 +2364,13 @@ STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Valitse # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Rautatieaseman valinta STR_STATION_BUILD_ORIENTATION :{BLACK}Suunta -STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP :{BLACK}Valitse rautatieaseman suunta. +STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP :{BLACK}Valitse rautatieaseman suunta STR_STATION_BUILD_NUMBER_OF_TRACKS :{BLACK}Raiteiden lukumäärä -STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Valitse asemalaiturien määrä rautatieasemalle. +STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Valitse asemalaiturien määrä rautatieasemalle STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}Asemalaiturin pituus -STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Valitse rautatieaseman pituus. +STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Valitse rautatieaseman pituus STR_STATION_BUILD_DRAG_DROP :{BLACK}Vedä ja pudota -STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Rakenna asema vetämällä ja pudottamalla. +STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Rakenna asema vetämällä ja pudottamalla STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Valitse asemaluokka STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Valitse asematyyppi @@ -2398,7 +2400,7 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Suurenna # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Valitse rautatiesilta STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Valitse maantiesilta -STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Sillan valinta - napsauta valittua siltaa rakentaaksesi sen. +STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Sillan valinta – napsauta valittua siltaa rakentaaksesi sen STR_SELECT_BRIDGE_INFO :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_SELECT_BRIDGE_SCENEDIT_INFO :{GOLD}{STRING},{} {VELOCITY} STR_BRIDGE_NAME_SUSPENSION_STEEL :Riippusilta, terästä @@ -2434,15 +2436,15 @@ STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Vaihda r # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Autovarikon suunta -STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP :{BLACK}Valitse autovarikon suunta. +STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP :{BLACK}Valitse autovarikon suunta STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}Raitiotievarikon suunta STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Valitse raitiotievarikon suunta # Road vehicle station construction window STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Linja-autoaseman suunta -STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Valitse linja-autoaseman suunta. +STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Valitse linja-autoaseman suunta STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Lastauslaiturin suunta -STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Valitse lastauslaiturin suunta. +STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Valitse lastauslaiturin suunta STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Aseman suunta STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Valitse aseman suunta STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Rahtiaseman suunta @@ -2473,7 +2475,7 @@ STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Rakenna # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Lentokentän valinta -STR_STATION_BUILD_AIRPORT_TOOLTIP :{BLACK}Valitse lentokentän koko ja tyyppi. +STR_STATION_BUILD_AIRPORT_TOOLTIP :{BLACK}Valitse lentokentän koko ja tyyppi STR_STATION_BUILD_AIRPORT_CLASS_LABEL :{BLACK}Lentokentän luokka STR_STATION_BUILD_AIRPORT_LAYOUT_NAME :{BLACK}Kaava {NUM} @@ -2534,31 +2536,31 @@ STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Nollaa m STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Haluatko varmasti poistaa kaikki yhtiön omistamat tontit? # Town generation window (SE) -STR_FOUND_TOWN_CAPTION :{WHITE}Luo kaupunkeja -STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Uusi kaupunki +STR_FOUND_TOWN_CAPTION :{WHITE}Luo kuntia +STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Uusi kunta STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Perusta uusi kaupunki. Shift+Klik näyttää vain kustannusarvion -STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Satunnainen kaupunki -STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Perusta kaupunki satunnaiseen paikkaan -STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Monta satunnaista kaupunkia -STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Peitä kartta satunnaisesti sijoitetuilla kaupungeilla. +STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Satunnainen kunta +STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Perusta kunta satunnaiseen paikkaan +STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Monta satunnaista kuntaa +STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Täytä kartta satunnaisesti sijoitetuilla kunnilla -STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Kaupungin nimi: -STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Syötä kaupungin nimi +STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Kunnan nimi: +STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Syötä kunnan nimi STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Syötä kaupungin nimi napsauttamalla STR_FOUND_TOWN_NAME_RANDOM_BUTTON :{BLACK}Satunnainen nimi STR_FOUND_TOWN_NAME_RANDOM_TOOLTIP :{BLACK}Arvo uusi satunnainen nimi -STR_FOUND_TOWN_INITIAL_SIZE_TITLE :{YELLOW}Kaupungin koko: +STR_FOUND_TOWN_INITIAL_SIZE_TITLE :{YELLOW}Kunnan koko: STR_FOUND_TOWN_INITIAL_SIZE_SMALL_BUTTON :{BLACK}Pieni STR_FOUND_TOWN_INITIAL_SIZE_MEDIUM_BUTTON :{BLACK}Keskisuuri STR_FOUND_TOWN_INITIAL_SIZE_LARGE_BUTTON :{BLACK}Suuri STR_FOUND_TOWN_SIZE_RANDOM :{BLACK}Sattumanvarainen -STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Valitse kaupungin koko. +STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Valitse kunnan koko STR_FOUND_TOWN_CITY :{BLACK}Kaupunki -STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Suurkaupungit kasvavat nopeammin kuin tavalliset kaupungit{}Asetuksista riippuen, ne ovat suurempia perustettaessa +STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Kaupungit kasvavat nopeammin kuin tavalliset kunnat{}Asetuksista riippuen, ne ovat suurempia perustettaessa -STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Kaupungin tiekaava: -STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Valitse tiekaava tälle kaupungille +STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Kunnan tiekaava: +STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Valitse tiekaava tälle kunnalle STR_FOUND_TOWN_SELECT_LAYOUT_ORIGINAL :{BLACK}Alkuperäinen STR_FOUND_TOWN_SELECT_LAYOUT_BETTER_ROADS :{BLACK}Parempia teitä STR_FOUND_TOWN_SELECT_LAYOUT_2X2_GRID :{BLACK}2×2-ruudukko @@ -2719,11 +2721,11 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_CAPTION :{WHITE}Kuvataajuus STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}×) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulaationopeus: {STRING} -STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Simuloitujen peliaskelten määrä sekunnissa. +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Simuloitujen peliaskelten määrä sekunnissa STR_FRAMERATE_RATE_BLITTER :{BLACK}Grafiikan kuvataajuus: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Piirrettyjen kuvien määrä sekunnissa. +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Piirrettyjen kuvien määrä sekunnissa STR_FRAMERATE_SPEED_FACTOR :{BLACK}Pelin nykyinen nopeuskerroin: {DECIMAL}× -STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Pelin tämänhetkinen nopeus verrattuna normaalilla simulaationopeudella odotettavissa olevaan. +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Pelin tämänhetkinen nopeus verrattuna normaalilla simulaationopeudella odotettavissa olevaan STR_FRAMERATE_CURRENT :{WHITE}Nykyinen STR_FRAMERATE_AVERAGE :{WHITE}Keskiarvo STR_FRAMERATE_DATA_POINTS :{BLACK}Data perustuu {COMMA} mittaukseen @@ -2780,12 +2782,12 @@ STR_SAVELOAD_LOAD_HEIGHTMAP :{WHITE}Lataa ko STR_SAVELOAD_SAVE_HEIGHTMAP :{WHITE}Tallenna korkeuskartta STR_SAVELOAD_HOME_BUTTON :{BLACK}Siirry tallennusten oletuskansioon napsauttamalla tätä STR_SAVELOAD_BYTES_FREE :{BLACK}{BYTES} vapaana -STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Lista asemista, hakemistoista ja tallennetuista peleistä. -STR_SAVELOAD_EDITBOX_TOOLTIP :{BLACK}Valittu nimi pelitallenteelle. +STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Lista asemista, hakemistoista ja tallennetuista peleistä +STR_SAVELOAD_EDITBOX_TOOLTIP :{BLACK}Valittu nimi pelitallenteelle STR_SAVELOAD_DELETE_BUTTON :{BLACK}Poista -STR_SAVELOAD_DELETE_TOOLTIP :{BLACK}Poista valittu pelitallenne. +STR_SAVELOAD_DELETE_TOOLTIP :{BLACK}Poista valittu pelitallenne STR_SAVELOAD_SAVE_BUTTON :{BLACK}Tallenna -STR_SAVELOAD_SAVE_TOOLTIP :{BLACK}Tallenna nykyinen peli käyttäen valittua nimeä. +STR_SAVELOAD_SAVE_TOOLTIP :{BLACK}Tallenna nykyinen peli käyttäen valittua nimeä STR_SAVELOAD_LOAD_BUTTON :{BLACK}Lataa STR_SAVELOAD_LOAD_TOOLTIP :{BLACK}Lataa valittu peli STR_SAVELOAD_LOAD_HEIGHTMAP_TOOLTIP :{BLACK}Lataa valittu korkeuskartta @@ -2901,7 +2903,7 @@ STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Lista as STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Aseta parametrit STR_NEWGRF_SETTINGS_SHOW_PARAMETERS :{BLACK}Näytä parametrit STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Käytä eri palettia -STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Käytä valitun NewGRF:n kanssa eri palettia.{}Tee näin, jos tämän NewGRF:n grafiikat näkyvät pelissä vaaleanpunaisina. +STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Käytä valitun NewGRF:n kanssa eri palettia.{}Tee näin, jos tämän NewGRF:n grafiikat näkyvät pelissä vaaleanpunaisina STR_NEWGRF_SETTINGS_APPLY_CHANGES :{BLACK}Ota käyttöön STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Etsi puuttuvaa sisältöä online-palvelusta @@ -3062,46 +3064,46 @@ STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Siirry e STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Syötä kyltin nimi # Town directory window -STR_TOWN_DIRECTORY_CAPTION :{WHITE}Kaupungit +STR_TOWN_DIRECTORY_CAPTION :{WHITE}Kunnat STR_TOWN_DIRECTORY_NONE :{ORANGE}- Ei mitään - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) -STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (suurkaup.){BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (kaupunki){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Kaupunkien nimet - keskitä päänäkymä kaupunkiin napsauttamalla nimeä. Ctrl+Klik avaa uuden näkymäikkunan kaupungin sijaintiin STR_TOWN_POPULATION :{BLACK}Maailman asukasluku: {COMMA} # Town view window STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} -STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (City) +STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (kaupunki) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Asukasluku: {ORANGE}{COMMA}{BLACK} Taloja: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} viime kuussa: {ORANGE}{COMMA}{BLACK} enimmillään: {ORANGE}{COMMA} -STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Kaupungin kasvuun tarvittava rahti: +STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Kunnan kasvuun tarvittava rahti: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} vaadittu STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} vaaditaan talvella STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} kuljetettu STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (tarvitaan lisää) STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (kuljetettu) -STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Kaupunki kasvaa {ORANGE}{COMMA}{BLACK}{NBSP}päivän{P "" ""} välein -STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Kaupunki kasvaa {ORANGE}{COMMA}{BLACK}{NBSP}päivän{P "" ""} välein (rahoitettu) -STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Kaupunki {RED}ei{BLACK} kasva -STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Meluraja kaupungissa: {ORANGE}{COMMA}{BLACK} maks.: {ORANGE}{COMMA} -STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Keskitä näkymä kaupungin sijaintiin. Ctrl+Klik avaa uuden näkymäikkunan kaupungin sijaintiin +STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Kunta kasvaa {ORANGE}{COMMA}{BLACK}{NBSP}päivän{P "" ""} välein +STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Kunta kasvaa {ORANGE}{COMMA}{BLACK}{NBSP}päivän{P "" ""} välein (rahoitettu) +STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Kunta {RED}ei{BLACK} kasva +STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Meluraja kunnassa: {ORANGE}{COMMA}{BLACK} maks.: {ORANGE}{COMMA} +STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Keskitä näkymä kunnan sijaintiin. Ctrl+Klik avaa uuden näkymäikkunan kunnan sijaintiin STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Viranomaiset STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Näytä tietoja paikallisviranomaisista. -STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Vaihda kaupungin nimeä. +STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Vaihda kunnan nimeä. STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}Laajenna -STR_TOWN_VIEW_EXPAND_TOOLTIP :{BLACK}Suurenna kaupunkia +STR_TOWN_VIEW_EXPAND_TOOLTIP :{BLACK}Laajenna kuntaa STR_TOWN_VIEW_DELETE_BUTTON :{BLACK}Poista -STR_TOWN_VIEW_DELETE_TOOLTIP :{BLACK}Poista tämä kaupunki kokonaan. +STR_TOWN_VIEW_DELETE_TOOLTIP :{BLACK}Poista tämä kunta kokonaan. -STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Nimeä kaupunki +STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Nimeä kunta # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN}: viranomaiset STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Kuljetusyhtiön arvioinnit: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Toiminnot: -STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Luettelo kaupungissa tehtävistä asioista - napsauta kohdetta saadaksesi lisätietoja. +STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Luettelo kunnassa tehtävistä asioista – napsauta kohdetta saadaksesi lisätietoja STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Sijoita STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Suorita valittu toiminto. @@ -3117,10 +3119,10 @@ STR_LOCAL_AUTHORITY_ACTION_BRIBE :Lahjo viranomai STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW}Käynnistä pieni mainoskampanja hoikutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{}Kustannus: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Käynnistä keskikokoinen mainoskampanja houkutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{}Kustannus: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Käynnistä suuri mainoskampanja hoikutellaksesi lisää matkustajia ja rahtia kuljetuspalveluihisi.{}Kustannus: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Rahoita kaupungin tieverkon rakentamista. Aiheuttaa huomattavaa häiriötä tieliikenteessä kuuden kuukauden ajan.{}Kustannus: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Rahoita tieverkon uudelleenrakentamista. Aiheuttaa huomattavaa häiriötä tieliikenteessä jopa kuuden kuukauden ajan.{}Kustannus: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Rakenna patsas yhtiösi kunniaksi.{}Kustannus: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Rahoita uusien kaupparakennusten rakentamista kaupungissa.{}Kustannus: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Osta vuoden yksinoikeudet kaupungin liikennöintiin. Paikallisviranomaiset eivät salli muiden yhtiöiden kuljettaa matkustajia ja rahtia.{}Kustannus: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Rahoita uusien liikerakennusten rakentamista kunnassa.{}Kustannus: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Osta vuoden yksinoikeudet kunnan liikennöintiin. Paikallisviranomaiset eivät salli muiden yhtiöiden kuljettaa matkustajia ja rahtia.{}Kustannus: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Lahjo viranomaisia lisätäksesi arviotasi; rangaistus voi olla kuitenkin suuri, jos jäät kiinni.{}Kustannus: {CURRENCY_LONG} # Goal window @@ -3170,7 +3172,7 @@ STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING STR_SUBSIDIES_NONE :{ORANGE}- Ei mitään - STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Käytetyt tuet: STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} välille {STRING}-{STRING}{YELLOW} ({COMPANY}{YELLOW}, {DATE_SHORT} asti) -STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Napsauta palvelua keskittääksesi päänäkymän teollisuuteen/kaupunkiin. Ctrl+Klik avaa uuden näkymäikkunan teollisuuden/kaupungin sijaintiin +STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Napsauta palvelua keskittääksesi päänäkymän teollisuuteen/kuntaan. Ctrl+Klik avaa uuden näkymäikkunan teollisuuden/kunnan sijaintiin # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY}: historia @@ -3186,7 +3188,7 @@ STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}Siirry s STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Virheellinen viittaus tavoitteeseen # Station list window -STR_STATION_LIST_TOOLTIP :{BLACK}Asemien nimet - napsauta nimeä keskittääksesi päänäkymän asemaan. Ctrl+Klik avaa uuden näkymäikkunan aseman sijaintiin +STR_STATION_LIST_TOOLTIP :{BLACK}Asemien nimet – napsauta nimeä keskittääksesi päänäkymän asemaan. Ctrl+Klik avaa uuden näkymäikkunan aseman sijaintiin STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Pidä Ctrl-näppäin painettuna valitaksesi useamman kuin yhden vaihtoehdon STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} asema{P "" a} STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} @@ -3206,8 +3208,8 @@ STR_STATION_VIEW_ACCEPTS_BUTTON :{BLACK}Ottaa va STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}Näytä luettelo vastaanotettavasta rahdista. STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}Vastaanottaa: {WHITE}{CARGO_LIST} -STR_STATION_VIEW_EXCLUSIVE_RIGHTS_SELF :{BLACK}Tällä asemalla on kuljetusyksinoikeus tässä kaupungissa. -STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPANY}{BLACK} osti tämän kaupungin kuljetusyksinoikeuden. +STR_STATION_VIEW_EXCLUSIVE_RIGHTS_SELF :{BLACK}Tällä asemalla on kuljetusyksinoikeus tässä kunnassa. +STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPANY}{BLACK} osti tämän kunnan kuljetusyksinoikeuden. STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Arviot STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Näytä aseman arviot. @@ -3332,13 +3334,13 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Yksityis STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Näytä tarkka infrastruktuurin määrä STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Uudet kasvot -STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Valitse uudet kasvot pääjohtajalle. +STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Valitse uudet kasvot pääjohtajalle STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Väriteema STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Muuta yhtiön kulkuneuvojen väritystä STR_COMPANY_VIEW_COMPANY_NAME_BUTTON :{BLACK}Yhtiön nimi -STR_COMPANY_VIEW_COMPANY_NAME_TOOLTIP :{BLACK}Muuta yhtiön nimeä. +STR_COMPANY_VIEW_COMPANY_NAME_TOOLTIP :{BLACK}Muuta yhtiön nimeä STR_COMPANY_VIEW_PRESIDENT_NAME_BUTTON :{BLACK}Pääjohtajan nimi -STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Muuta pääjohtajan nimeä. +STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Muuta pääjohtajan nimeä STR_COMPANY_VIEW_BUY_SHARE_BUTTON :{BLACK}Osta 25{NBSP}%:n osuus yhtiöstä STR_COMPANY_VIEW_SELL_SHARE_BUTTON :{BLACK}Myy 25{NBSP}%:n osuus yhtiöstä @@ -3510,10 +3512,10 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Nimeä STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Nimeä STR_BUY_VEHICLE_AIRCRAFT_RENAME_BUTTON :{BLACK}Nimeä -STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP :{BLACK}Nimeä yksikön tyyppi uudelleen. +STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP :{BLACK}Nimeä yksikön tyyppi uudelleen STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}Nimeä ajoneuvon tyyppi uudelleen -STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}Nimeä laivatyyppi uudelleen. -STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Nimeä lentokonetyyppi uudelleen. +STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}Nimeä laivatyyppi uudelleen +STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Nimeä lentokonetyyppi uudelleen STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON :{BLACK}Piilota STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_TOGGLE_BUTTON :{BLACK}Piilota @@ -3551,12 +3553,12 @@ STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Ajoneuvo STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Laivat - napsauta laivaa oikealla hiiren painikkeella saadaksesi tietoja. STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lentokoneet - napsauta lentokonetta oikealla hiiren painikkeella saadaksesi tietoja. -STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Vedä yksikkö tähän myydäksesi sen. -STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Vedä ajoneuvo tähän myydäksesi sen. -STR_DEPOT_SHIP_SELL_TOOLTIP :{BLACK}Vedä laiva tähän myydäksesi sen. -STR_DEPOT_AIRCRAFT_SELL_TOOLTIP :{BLACK}Vedä lentokone tähän myydäksesi sen. +STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Vedä yksikkö tähän myydäksesi sen +STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Vedä ajoneuvo tähän myydäksesi sen +STR_DEPOT_SHIP_SELL_TOOLTIP :{BLACK}Vedä laiva tähän myydäksesi sen +STR_DEPOT_AIRCRAFT_SELL_TOOLTIP :{BLACK}Vedä lentokone tähän myydäksesi sen -STR_DEPOT_DRAG_WHOLE_TRAIN_TO_SELL_TOOLTIP :{BLACK}Vedä junan veturi tähän myydäksesi koko junan. +STR_DEPOT_DRAG_WHOLE_TRAIN_TO_SELL_TOOLTIP :{BLACK}Vedä junan veturi tähän myydäksesi koko junan STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TOOLTIP :{BLACK}Myy kaikki veturitallilla olevat junat STR_DEPOT_SELL_ALL_BUTTON_ROAD_VEHICLE_TOOLTIP :{BLACK}Myy kaikki varikolla olevat ajoneuvot @@ -3573,8 +3575,8 @@ STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_BUTTON :{BLACK}Uusia aj STR_DEPOT_SHIP_NEW_VEHICLES_BUTTON :{BLACK}Uusia laivoja STR_DEPOT_AIRCRAFT_NEW_VEHICLES_BUTTON :{BLACK}Uusia lentokoneita -STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP :{BLACK}Osta uusi yksikkö. -STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_TOOLTIP :{BLACK}Osta uusi ajoneuvo. +STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP :{BLACK}Osta uusi yksikkö +STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_TOOLTIP :{BLACK}Osta uusi ajoneuvo STR_DEPOT_SHIP_NEW_VEHICLES_TOOLTIP :{BLACK}Osta uusi laiva STR_DEPOT_AIRCRAFT_NEW_VEHICLES_TOOLTIP :{BLACK}Osta uusi lentokone @@ -3630,10 +3632,10 @@ STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Hinta: { # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Korvaa {STRING} - {STRING} -STR_REPLACE_VEHICLE_TRAIN :Juna -STR_REPLACE_VEHICLE_ROAD_VEHICLE :Ajoneuvo -STR_REPLACE_VEHICLE_SHIP :Laiva -STR_REPLACE_VEHICLE_AIRCRAFT :Lentokone +STR_REPLACE_VEHICLE_TRAIN :junia +STR_REPLACE_VEHICLE_ROAD_VEHICLE :ajoneuvoja +STR_REPLACE_VEHICLE_SHIP :laivoja +STR_REPLACE_VEHICLE_AIRCRAFT :lentokoneita STR_REPLACE_VEHICLE_VEHICLES_IN_USE :{YELLOW}Käytössä olevat kulkuneuvot STR_REPLACE_VEHICLE_VEHICLES_IN_USE_TOOLTIP :{BLACK}Sarake kulkuneuvoille, jotka omistat @@ -3752,7 +3754,7 @@ STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Huippuno STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Maks. nopeus: {LTBLUE}{VELOCITY} {BLACK}Lentokonetyyppi: {LTBLUE}{STRING} STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Maks. nopeus: {LTBLUE}{VELOCITY} {BLACK}Lentokonetyyppi: {LTBLUE}{STRING} {BLACK}Toimintamatka: {LTBLUE}{COMMA} ruutua STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Paino: {LTBLUE}{WEIGHT_SHORT} {BLACK}Teho: {LTBLUE}{POWER}{BLACK} Maks. nopeus: {LTBLUE}{VELOCITY} -STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Paino: {LTBLUE}{WEIGHT_SHORT} {BLACK}Teho: {LTBLUE}{POWER}{BLACK} Maks. nopeus: {LTBLUE}{VELOCITY} {BLACK}Maks. T.E.: {LTBLUE}{FORCE} +STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Paino: {LTBLUE}{WEIGHT_SHORT} {BLACK}Teho: {LTBLUE}{POWER}{BLACK} Maks. nopeus: {LTBLUE}{VELOCITY} {BLACK}Maks. vetovoima: {LTBLUE}{FORCE} STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Tuotto tänä vuonna: {LTBLUE}{CURRENCY_LONG} (viime vuonna: {CURRENCY_LONG}) STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Luotettavuus: {LTBLUE}{COMMA}% {BLACK}Hajoamiset viime huollon jälkeen: {LTBLUE}{COMMA} @@ -3814,18 +3816,18 @@ STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Valitse STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Valitse junan rahtityyppi STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Valitse ajoneuvolla ajettava rahti -STR_REFIT_SHIP_LIST_TOOLTIP :{BLACK}Valitse laivan kuljettama rahtityyppi. -STR_REFIT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Valitse kuljetettavan rahdin tyyppi. +STR_REFIT_SHIP_LIST_TOOLTIP :{BLACK}Valitse laivan kuljettama rahtityyppi +STR_REFIT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Valitse kuljetettavan rahdin tyyppi STR_REFIT_TRAIN_REFIT_BUTTON :{BLACK}Sovita juna STR_REFIT_ROAD_VEHICLE_REFIT_BUTTON :{BLACK}Korjaa ajoneuvo. STR_REFIT_SHIP_REFIT_BUTTON :{BLACK}Sovita laiva STR_REFIT_AIRCRAFT_REFIT_BUTTON :{BLACK}Sovita lentokone -STR_REFIT_TRAIN_REFIT_TOOLTIP :{BLACK}Sovita juna kuljettamaan valittua rahtityyppiä. +STR_REFIT_TRAIN_REFIT_TOOLTIP :{BLACK}Sovita juna kuljettamaan valittua rahtityyppiä STR_REFIT_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Muuta ajoneuvo rahtaamaan korostettua rahtityyppiä. -STR_REFIT_SHIP_REFIT_TOOLTIP :{BLACK}Sovita laiva korostetulle rahtityypille. -STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Sovita lentokone kuljettamaan valittua rahtityyppiä. +STR_REFIT_SHIP_REFIT_TOOLTIP :{BLACK}Sovita laiva valitulle rahtityypille +STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Sovita lentokone kuljettamaan valittua rahtityyppiä # Order view STR_ORDERS_CAPTION :{WHITE}{VEHICLE} (Käskyt) @@ -3864,7 +3866,7 @@ STR_ORDER_TOOLTIP_UNLOAD :{BLACK}Muuta ko STR_ORDER_REFIT :{BLACK}Sovita STR_ORDER_REFIT_TOOLTIP :{BLACK}Valitse mihin rahtityyppiin tämä käsky sovittaa. Ctrl+Klik poistaa sovituskäskyn STR_ORDER_REFIT_AUTO :{BLACK}Uudelleensovitus asemalla -STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Valitse tällä määräyksellä sovitettava rahtityyppi. Ctrl+Klik poistaaksesi sovitusmääräyksen. Sovitus suoritetaan vain, jos kulkuneuvo sallii sen. +STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Valitse tällä määräyksellä sovitettava rahtityyppi. Ctrl+Klik poistaaksesi sovitusmääräyksen. Sovitus suoritetaan vain, jos kulkuneuvo sallii sen STR_ORDER_DROP_REFIT_AUTO :Määrätty rahti STR_ORDER_DROP_REFIT_AUTO_ANY :Saatavilla oleva rahti @@ -3872,7 +3874,7 @@ STR_ORDER_SERVICE :{BLACK}Huolto STR_ORDER_DROP_GO_ALWAYS_DEPOT :Mene aina STR_ORDER_DROP_SERVICE_DEPOT :Huolto, jos tarpeen STR_ORDER_DROP_HALT_DEPOT :Pysähdy -STR_ORDER_SERVICE_TOOLTIP :{BLACK}Ohita tämä käsky, ellei palvelua tarvita. +STR_ORDER_SERVICE_TOOLTIP :{BLACK}Ohita tämä käsky, ellei huoltoa tarvita STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Kulkuneuvon tiedot, joiden perusteella hypätään @@ -4177,8 +4179,8 @@ STR_GAME_SAVELOAD_NOT_AVAILABLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Peli tallennettiin versiossa, joka ei tue raitiovaunuja. Kaikki raitiovaunut on poistettu # Map generation messages -STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Kartan generointi peruutettu...{}... ei kelvollisia kaupunkien sijainteja -STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... tässä skenaariossa ei ole kaupunkeja. +STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Kartan generointi peruutettu...{}... ei kelvollisia kuntien sijainteja +STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... tässä skenaariossa ei ole yhtään kuntaa STR_ERROR_PNGMAP :{WHITE}Maastoa ei voida ladata PNG-tiedostosta... STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... tiedostoa ei löydy @@ -4229,7 +4231,7 @@ STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Ei salli # Local authority errors STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}{TOWN}: paikallisviranomaiset kieltäytyvät. -STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}{TOWN} paikallisviranomaiset eivät salli toisen lentokentän rakentamista tähän kaupunkiin. +STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}{TOWN} paikallisviranomaiset eivät salli toisen lentokentän rakentamista tähän kuntaan STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}{TOWN} paikallisviranomaiset kieltävät lentokentän rakennuksen äänekkyyden takia STR_ERROR_BRIBE_FAILED :{WHITE}Paikallisviranomaiset ovat huomanneet lahjontayrityksesi @@ -4260,18 +4262,18 @@ STR_ERROR_CAN_T_SELL_25_SHARE_IN :{WHITE}Tästä STR_ERROR_PROTECTED :{WHITE}Tällä yhtiöllä ei ole vielä osakkeita... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Kaupunkeja ei voi rakentaa -STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Kaupungin nimeä ei voi vaihtaa. -STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Kaupunkia ei voi rakentaa tähän... -STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Kaupunkia ei voi laajentaa... +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Kuntia ei voi luoda +STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Kunnan nimeä ei voi vaihtaa... +STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Kuntaa ei voi perustaa tähän... +STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Kuntaa ei voi laajentaa... STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... liian lähellä kartan reunaa. -STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... liian lähellä toista kaupunkia. -STR_ERROR_TOO_MANY_TOWNS :{WHITE}... liian monta kaupunkia. +STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... liian lähellä toista kuntaa +STR_ERROR_TOO_MANY_TOWNS :{WHITE}... liian monta kuntaa STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... kartalla ei ole enää tilaa -STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Kaupunki ei rakenna teitä. Voit sallia teiden rakentamisen valikosta Asetukset->Ympäristö->Kaupungit +STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Kunta ei rakenna teitä. Voit sallia teiden rakentamisen valikosta Asetukset->Ympäristö->Kunnat STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Tietyöt ovat käynnissä. -STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kaupunkia ei voida poistaa...{}Asema tai varikko viittaa kaupunkiin tai kaupungin omistamaa ruutua ei voida poistaa -STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... kaupungin keskustassa ei ole sopivaa paikkaa patsaalle +STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kuntaa ei voida poistaa...{}Asema tai varikko viittaa kuntaan tai kunnan omistamaa ruutua ei voida poistaa +STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... tämän kunnan keskustassa ei ole sopivaa paikkaa patsaalle # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... liian paljon teollisuutta @@ -4279,13 +4281,13 @@ STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Teollisu STR_ERROR_CAN_T_BUILD_HERE :{WHITE}{STRING}: tähän ei voi rakentaa... STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Teollisuustyyppiä ei voi rakentaa tähän... STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... liian lähellä toista teollisuutta. -STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... kaupunki pitää rakentaa ensin. -STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... vain yksi on sallittu kaupunkia kohden. -STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... voidaan rakentaa vain kaupunkeihin, joissa on yli 1200 asukasta. +STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... kunta pitää perustaa ensin +STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... vain yksi on sallittu kuntaa kohden +STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... voidaan rakentaa vain kuntiin, joissa on vähintään 1200 asukasta STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... voidaan rakentaa vain sademetsäalueisiin STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... voidaan rakentaa vain aavikkoalueisiin -STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... voidaan rakentaa vain kaupunkeihin (korvaamaan taloja) -STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... voidaan rakentaa vain lähelle kaupungin keskustaa +STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... voidaan rakentaa vain taajamiin (korvaamaan taloja) +STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... voidaan rakentaa vain lähelle kunnan keskustaa STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... voidaan rakentaa vain matalille alueille STR_ERROR_CAN_ONLY_BE_POSITIONED :{WHITE}... voidaan asettaa vain kartan reunoille STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... metsää voi istuttaa vain lumirajan yläpuolelle @@ -4313,7 +4315,7 @@ STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Liian mo STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Liian lähellä toista satamaa. STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Liian lähellä toista lentokenttää. STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Asemaa ei voi nimetä uudelleen. -STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... kaupunki omistaa tien +STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... kunta omistaa tien STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... tie on väärin päin STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... läpiajettavissa pysäkeissä ei voi olla mutkia STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... läpiajettavissa pysäkeissä ei voi olla risteyksiä @@ -4580,7 +4582,7 @@ STR_TOWN_BUILDING_NAME_OFFICE_BLOCK_1 :Tomistorakennus STR_TOWN_BUILDING_NAME_SMALL_BLOCK_OF_FLATS_1 :Pieni kerrostalo STR_TOWN_BUILDING_NAME_CHURCH_1 :Kirkko STR_TOWN_BUILDING_NAME_LARGE_OFFICE_BLOCK_1 :Suuri toimistorakennus -STR_TOWN_BUILDING_NAME_TOWN_HOUSES_1 :Kaupunkitalot +STR_TOWN_BUILDING_NAME_TOWN_HOUSES_1 :Asuintaloja STR_TOWN_BUILDING_NAME_HOTEL_1 :Hotelli STR_TOWN_BUILDING_NAME_STATUE_1 :Patsas STR_TOWN_BUILDING_NAME_FOUNTAIN_1 :Suihkulähde diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index e0efd9fb00..7c1609c7c8 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1186,6 +1186,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Tillat endring STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Tillat endring av landskapet under bygninger og spor uten å fjerne dem STR_CONFIG_SETTING_CATCHMENT :Mer realistisk størrelse på oppfangingsområder: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Ha oppsamlingsområder i forskjellige størrelser for forskjellige typer stasjoner og lufthavner +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Firmaets stasjoner kan betjene industrier med tilknyttede nøytrale stasjoner: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Hvis aktivert, vil industrier med egne stasjoner (slik som oljerigger) også kunne betjenes av firma-stasjoner bygget i nærheten. Hvis deaktivert, vil disse industriene bare kunne betjenes av sine egne stasjoner. Nærliggende firma-stasjoner vil ikke kunne betjene dem, heller ikke vil den egne stasjonen betjene noe annet enn den tilhørende industrien. STR_CONFIG_SETTING_EXTRADYNAMITE :Tillat fjerning av flere veier, broer osv. eid av byene: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Gjør det enklere å fjerne infrastruktur og bygninger som tilhører byer STR_CONFIG_SETTING_TRAIN_LENGTH :Maksimal toglengde: {STRING} @@ -1202,8 +1204,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Brattheten av e STR_CONFIG_SETTING_PERCENTAGE :{COMMA} % STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Skråningens bratthet for veikjøretøy: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Brattheten av et skrått kartelement for et veikjøretøy. Høyere verdier gjør det vanskeligere å kjøre opp bakken -STR_CONFIG_SETTING_FORBID_90_DEG :Forby tog og skip å gjøre 90° svinger: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90-graders svinger oppstår når et horisontalt spor etterfølges av et vertikalt spor på tilstøtende kartelement, som dermed fører til at toget må snu 90 grader når det krysser kartelementet, istedenfor de vanlige 45 grader for andre spor-kombinasjoner. Dette gjelder også for båters svingradius +STR_CONFIG_SETTING_FORBID_90_DEG :Forby tog å gjøre 90° svinger: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90-graders svinger oppstår når et horisontalt spor etterfølges av et vertikalt spor på tilstøtende kartelement, som medfører at toget må svinge 90 grader når det krysser kartelementet, i stedet for de vanlige 45 grader for andre spor-kombinasjoner. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Tillat sammenslåing av stasjoner som ikke ligger inntil hverandre: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Gjør det mulig å legge til deler til en stasjon uten at de er direkte ved siden av hverandre. Bruk Ctrl+klikk for å bygge slike stasjoner. STR_CONFIG_SETTING_INFLATION :Inflasjon: {STRING} @@ -1260,8 +1262,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Flyfart faktor: STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Still den relative hastigheten til fly sammenlignet med andre kjøretøy, for å redusere inntekter ved luftfrakt STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Antall flystyrter: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Bestem sjansen for en flykatastrofe -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ingen +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Bestem sannsynligheten for flykrasj.{}* Store fly vil alltid kunne krasje når de lander på små flyplasser. +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ingen* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Redusert STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normalt STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Tillat stoppesteder med gjennomkjøring på by-eide veier: {STRING} @@ -1586,6 +1588,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Ved å aktivere STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Forbudt STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Tillatt STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Tillatt, egendefinert oppsett av by +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :varegenerering byer: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Hvor mye varer som genereres av hus i byer, i forhold til byens folketall.{}Kvadratisk vekst: En by av dobbel størrelse genererer fire ganger så mange passasjerer.{}Lineær vekst: En by av dobbel størrelse genererer dobbelt så mange passasjerer. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kvadratisk (original) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineær STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Plassering av trær i spillet: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Kontroll tilfeldige utseender til tre under spillet. Dette kan påvirke industrier som avhenger av trevekst, for eksempel trelast diff --git a/src/lang/russian.txt b/src/lang/russian.txt index d8f4d61f63..0dea4ef89b 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1336,6 +1336,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Разреши STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Разрешить изменение ландшафта под домами и дорогами, не требуя их сноса STR_CONFIG_SETTING_CATCHMENT :Зона покрытия зависит от типа станции: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Установить различный размер зоны покрытия для различных типов станций и аэропортов +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Предприятия с собственными станциями используют станции игроков: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :При включении - предприятия, имеющие собственные станции погрузки (например, нефтяные платформы), смогут обслуживаться также и станциями игроков, построенными поблизости.{}При отключении - предприятия будут производить погрузку только через свои внутренние станции, и эти станции будут обслуживать только своё предприятие. STR_CONFIG_SETTING_EXTRADYNAMITE :Разрешить снос (почти) всех городских объектов: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Упростить снос городских зданий и инфраструктуры STR_CONFIG_SETTING_TRAIN_LENGTH :Максимальная длина состава: {STRING} From 634d1f16b22a18b6bbc0c83ac36003efeee2671f Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 10 Mar 2019 16:32:30 +0100 Subject: [PATCH 479/622] Codechange: fix indentation of source.list --- source.list | 162 ++++++++++++++++++++++++++-------------------------- 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/source.list b/source.list index d744101ea3..a0c63db7ba 100644 --- a/source.list +++ b/source.list @@ -111,7 +111,7 @@ vehicle.cpp vehiclelist.cpp viewport.cpp #if SSE -viewport_sprite_sorter_sse4.cpp + viewport_sprite_sorter_sse4.cpp #end waypoint.cpp widget.cpp @@ -404,19 +404,19 @@ zoom_func.h zoom_type.h #if WIN32 #else -music/bemidi.h -music/cocoa_m.h -music/extmidi.h -music/fluidsynth.h -music/os2_m.h -music/qtmidi.h -os/macosx/macos.h -os/macosx/osx_stdafx.h -os/macosx/splash.h -os/macosx/string_osx.h -sound/cocoa_s.h -video/cocoa/cocoa_keys.h -video/cocoa/cocoa_v.h + music/bemidi.h + music/cocoa_m.h + music/extmidi.h + music/fluidsynth.h + music/os2_m.h + music/qtmidi.h + os/macosx/macos.h + os/macosx/osx_stdafx.h + os/macosx/splash.h + os/macosx/string_osx.h + sound/cocoa_s.h + video/cocoa/cocoa_keys.h + video/cocoa/cocoa_v.h #end # Core Source Code @@ -917,36 +917,36 @@ script/api/script_window.cpp # Blitters #if DEDICATED #else -blitter/32bpp_anim.cpp -blitter/32bpp_anim.hpp -#if SSE -blitter/32bpp_anim_sse2.cpp -blitter/32bpp_anim_sse2.hpp -blitter/32bpp_anim_sse4.cpp -blitter/32bpp_anim_sse4.hpp -#end -blitter/32bpp_base.cpp -blitter/32bpp_base.hpp -blitter/32bpp_optimized.cpp -blitter/32bpp_optimized.hpp -blitter/32bpp_simple.cpp -blitter/32bpp_simple.hpp -#if SSE -blitter/32bpp_sse_func.hpp -blitter/32bpp_sse_type.h -blitter/32bpp_sse2.cpp -blitter/32bpp_sse2.hpp -blitter/32bpp_sse4.cpp -blitter/32bpp_sse4.hpp -blitter/32bpp_ssse3.cpp -blitter/32bpp_ssse3.hpp -#end -blitter/8bpp_base.cpp -blitter/8bpp_base.hpp -blitter/8bpp_optimized.cpp -blitter/8bpp_optimized.hpp -blitter/8bpp_simple.cpp -blitter/8bpp_simple.hpp + blitter/32bpp_anim.cpp + blitter/32bpp_anim.hpp + #if SSE + blitter/32bpp_anim_sse2.cpp + blitter/32bpp_anim_sse2.hpp + blitter/32bpp_anim_sse4.cpp + blitter/32bpp_anim_sse4.hpp + #end + blitter/32bpp_base.cpp + blitter/32bpp_base.hpp + blitter/32bpp_optimized.cpp + blitter/32bpp_optimized.hpp + blitter/32bpp_simple.cpp + blitter/32bpp_simple.hpp + #if SSE + blitter/32bpp_sse_func.hpp + blitter/32bpp_sse_type.h + blitter/32bpp_sse2.cpp + blitter/32bpp_sse2.hpp + blitter/32bpp_sse4.cpp + blitter/32bpp_sse4.hpp + blitter/32bpp_ssse3.cpp + blitter/32bpp_ssse3.hpp + #end + blitter/8bpp_base.cpp + blitter/8bpp_base.hpp + blitter/8bpp_optimized.cpp + blitter/8bpp_optimized.hpp + blitter/8bpp_simple.cpp + blitter/8bpp_simple.hpp #end blitter/base.hpp blitter/common.hpp @@ -1088,61 +1088,61 @@ video/dedicated_v.cpp video/null_v.cpp #if DEDICATED #else -#if ALLEGRO - video/allegro_v.cpp -#end -#if SDL - video/sdl_v.cpp -#end -#if WIN32 - video/win32_v.cpp -#end + #if ALLEGRO + video/allegro_v.cpp + #end + #if SDL + video/sdl_v.cpp + #end + #if WIN32 + video/win32_v.cpp + #end #end # Music #if DEDICATED #else -#if ALLEGRO - music/allegro_m.cpp -#end -#if DIRECTMUSIC - music/dmusic.cpp -#end + #if ALLEGRO + music/allegro_m.cpp + #end + #if DIRECTMUSIC + music/dmusic.cpp + #end #end music/null_m.cpp music/midifile.cpp #if DEDICATED #else -#if WIN32 - music/win32_m.cpp -#else - #if DOS + #if WIN32 + music/win32_m.cpp #else - music/extmidi.cpp + #if DOS + #else + music/extmidi.cpp + #end + #end + #if HAIKU + music/bemidi.cpp + #end + #if FLUIDSYNTH + music/fluidsynth.cpp #end -#end -#if HAIKU - music/bemidi.cpp -#end -#if FLUIDSYNTH - music/fluidsynth.cpp -#end #end # Sound sound/null_s.cpp #if DEDICATED #else -#if ALLEGRO - sound/allegro_s.cpp -#end -#if SDL - sound/sdl_s.cpp -#end -#if WIN32 - sound/win32_s.cpp - sound/xaudio2_s.cpp -#end + #if ALLEGRO + sound/allegro_s.cpp + #end + #if SDL + sound/sdl_s.cpp + #end + #if WIN32 + sound/win32_s.cpp + sound/xaudio2_s.cpp + #end #end #if OSX From 75a86d8460c62064bc7ecc362f54d042999c0e4e Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 10 Mar 2019 16:33:43 +0100 Subject: [PATCH 480/622] Codechange: the flag is not if you have threads, but if you want to use them --- configure | 2 +- projects/generate | 2 +- projects/generate.vbs | 2 +- source.list | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/configure b/configure index 2163dbe5d7..4817a6dad6 100755 --- a/configure +++ b/configure @@ -123,7 +123,7 @@ AWKCOMMAND=' if ($0 == "MSVC" && "'$os'" != "MSVC") { next; } if ($0 == "DIRECTMUSIC" && "'$with_direct_music'" == "0") { next; } if ($0 == "FLUIDSYNTH" && "'$fluidsynth'" == "" ) { next; } - if ($0 == "HAVE_THREAD" && "'$with_threads'" == "0") { next; } + if ($0 == "USE_THREADS" && "'$with_threads'" == "0") { next; } if ($0 == "SSE" && "'$with_sse'" != "1") { next; } skip += 1; diff --git a/projects/generate b/projects/generate index 38a9e8e1f1..4524c545e5 100755 --- a/projects/generate +++ b/projects/generate @@ -138,7 +138,7 @@ load_main_data() { if ($0 == "MSVC" && "'$os'" != "MSVC") { next; } if ($0 == "DIRECTMUSIC" && "'$enable_directmusic'" != "1") { next; } if ($0 == "FLUIDSYNTH" && "'$enable_fluidsynth'" != "1") { next; } - if ($0 == "HAVE_THREAD" && "'$with_threads'" == "0") { next; } + if ($0 == "USE_THREADS" && "'$with_threads'" == "0") { next; } skip += 1; diff --git a/projects/generate.vbs b/projects/generate.vbs index aa91bd3164..e95d1bf82f 100644 --- a/projects/generate.vbs +++ b/projects/generate.vbs @@ -180,7 +180,7 @@ Sub load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files) line = "DIRECTMUSIC" Or _ line = "AI" Or _ line = "SSE" Or _ - line = "HAVE_THREAD" _ + line = "USE_THREADS" _ ) Then skip = skip + 1 deep = deep + 1 Case "#" diff --git a/source.list b/source.list index a0c63db7ba..21b7dcab6d 100644 --- a/source.list +++ b/source.list @@ -1177,7 +1177,7 @@ sound/null_s.cpp # Threading thread/thread.h -#if HAVE_THREAD +#if USE_THREADS #if WIN32 thread/thread_win32.cpp #else From dcc5183dd0b1eba4163211a3c28f5acc4579e8fd Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 10 Mar 2019 16:36:19 +0100 Subject: [PATCH 481/622] Codechange: make clear that SSE is a flag you can switch --- configure | 2 +- projects/generate.vbs | 2 +- source.list | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/configure b/configure index 4817a6dad6..0f6ac2503e 100755 --- a/configure +++ b/configure @@ -124,7 +124,7 @@ AWKCOMMAND=' if ($0 == "DIRECTMUSIC" && "'$with_direct_music'" == "0") { next; } if ($0 == "FLUIDSYNTH" && "'$fluidsynth'" == "" ) { next; } if ($0 == "USE_THREADS" && "'$with_threads'" == "0") { next; } - if ($0 == "SSE" && "'$with_sse'" != "1") { next; } + if ($0 == "USE_SSE" && "'$with_sse'" != "1") { next; } skip += 1; diff --git a/projects/generate.vbs b/projects/generate.vbs index e95d1bf82f..3b4adf4bdd 100644 --- a/projects/generate.vbs +++ b/projects/generate.vbs @@ -179,7 +179,7 @@ Sub load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files) line = "MSVC" Or _ line = "DIRECTMUSIC" Or _ line = "AI" Or _ - line = "SSE" Or _ + line = "USE_SSE" Or _ line = "USE_THREADS" _ ) Then skip = skip + 1 deep = deep + 1 diff --git a/source.list b/source.list index 21b7dcab6d..5e9c52b73a 100644 --- a/source.list +++ b/source.list @@ -110,7 +110,7 @@ townname.cpp vehicle.cpp vehiclelist.cpp viewport.cpp -#if SSE +#if USE_SSE viewport_sprite_sorter_sse4.cpp #end waypoint.cpp @@ -919,7 +919,7 @@ script/api/script_window.cpp #else blitter/32bpp_anim.cpp blitter/32bpp_anim.hpp - #if SSE + #if USE_SSE blitter/32bpp_anim_sse2.cpp blitter/32bpp_anim_sse2.hpp blitter/32bpp_anim_sse4.cpp @@ -931,7 +931,7 @@ script/api/script_window.cpp blitter/32bpp_optimized.hpp blitter/32bpp_simple.cpp blitter/32bpp_simple.hpp - #if SSE + #if USE_SSE blitter/32bpp_sse_func.hpp blitter/32bpp_sse_type.h blitter/32bpp_sse2.cpp From 7adae09897c6f17a60de9468e9e11d166ff52278 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 10 Mar 2019 16:41:01 +0100 Subject: [PATCH 482/622] Codechange: liblzma is called liblzma, how ever strange that might be It is the only library we use that calls itself with 'lib' in the name. This might be confusing, but with the arrival of cmake a lot of these things are automated. And detection will find 'liblzma', not 'lzma', like with 'lzo', 'zlib', .. --- Doxyfile | 2 +- README.md | 2 +- config.lib | 2 +- projects/openttd_vs140.vcxproj | 8 ++++---- projects/openttd_vs140.vcxproj.in | 8 ++++---- projects/openttd_vs141.vcxproj | 8 ++++---- projects/openttd_vs141.vcxproj.in | 8 ++++---- projects/openttd_vs142.vcxproj | 8 ++++---- projects/openttd_vs142.vcxproj.in | 8 ++++---- src/crashlog.cpp | 4 ++-- src/saveload/saveload.cpp | 6 +++--- src/textfile_gui.cpp | 10 +++++----- 12 files changed, 37 insertions(+), 37 deletions(-) diff --git a/Doxyfile b/Doxyfile index 251b36be15..54e4197c65 100644 --- a/Doxyfile +++ b/Doxyfile @@ -292,7 +292,7 @@ INCLUDE_FILE_PATTERNS = PREDEFINED = ENABLE_NETWORK \ WITH_ZLIB \ WITH_LZO \ - WITH_LZMA \ + WITH_LIBLZMA \ WITH_SDL \ WITH_PNG \ WITH_FONTCONFIG \ diff --git a/README.md b/README.md index 05655852d7..2d681d0d16 100644 --- a/README.md +++ b/README.md @@ -521,7 +521,7 @@ and it should build automatically. In case you want to build with SDL support you need to add WITH_SDL to the project settings. PNG (WITH_PNG), ZLIB (WITH_ZLIB), LZO (WITH_LZO), Freetype (WITH_FREETYPE) and -LZMA (WITH_LZMA) support is enabled by default. For these to work you need their +libLZMA (WITH_LIBLZMA) support is enabled by default. For these to work you need their development files. To get them just use vcpkg from https://github.com/Microsoft/vcpkg using x86-windows-static and x64-windows-static triplets. For more help with VS see docs/Readme_Windows_MSVC.md. diff --git a/config.lib b/config.lib index fa27a8ec57..cb006f47db 100644 --- a/config.lib +++ b/config.lib @@ -1694,7 +1694,7 @@ make_cflags_and_ldflags() { fi if [ -n "$lzma_config" ]; then - CFLAGS="$CFLAGS -DWITH_LZMA" + CFLAGS="$CFLAGS -DWITH_LIBLZMA" CFLAGS="$CFLAGS `$lzma_config --cflags | tr '\n\r' ' '`" if [ "$enable_static" != "0" ]; then diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index 63aa57f561..26267f6a03 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -107,7 +107,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -172,7 +172,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug @@ -230,7 +230,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -293,7 +293,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug diff --git a/projects/openttd_vs140.vcxproj.in b/projects/openttd_vs140.vcxproj.in index 951f8b6048..17b4356cc2 100644 --- a/projects/openttd_vs140.vcxproj.in +++ b/projects/openttd_vs140.vcxproj.in @@ -107,7 +107,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -172,7 +172,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug @@ -230,7 +230,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -293,7 +293,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj index c65269eab4..0cd3fe7488 100644 --- a/projects/openttd_vs141.vcxproj +++ b/projects/openttd_vs141.vcxproj @@ -107,7 +107,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -172,7 +172,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug @@ -230,7 +230,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -293,7 +293,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug diff --git a/projects/openttd_vs141.vcxproj.in b/projects/openttd_vs141.vcxproj.in index d28f500f1c..0b04ebacce 100644 --- a/projects/openttd_vs141.vcxproj.in +++ b/projects/openttd_vs141.vcxproj.in @@ -107,7 +107,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -172,7 +172,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug @@ -230,7 +230,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -293,7 +293,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug diff --git a/projects/openttd_vs142.vcxproj b/projects/openttd_vs142.vcxproj index 0ffaf9f388..20c3d1b210 100644 --- a/projects/openttd_vs142.vcxproj +++ b/projects/openttd_vs142.vcxproj @@ -107,7 +107,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -172,7 +172,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug @@ -230,7 +230,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -293,7 +293,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug diff --git a/projects/openttd_vs142.vcxproj.in b/projects/openttd_vs142.vcxproj.in index 91689e8bde..37f0d6cf92 100644 --- a/projects/openttd_vs142.vcxproj.in +++ b/projects/openttd_vs142.vcxproj.in @@ -107,7 +107,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -172,7 +172,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug @@ -230,7 +230,7 @@ Size true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;WITH_ASSERT;%(PreprocessorDefinitions) true Sync MultiThreaded @@ -293,7 +293,7 @@ Disabled true ..\objs\langs;..\objs\settings;..\src\3rdparty\squirrel\include;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_XAUDIO2;WITH_SSE;WITH_ZLIB;WITH_LZO;WITH_LIBLZMA;WITH_PNG;WITH_FREETYPE;WITH_UNISCRIBE;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR="OpenTTD";_SQ64;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug diff --git a/src/crashlog.cpp b/src/crashlog.cpp index 5aa707eb5d..8fbc4d3ce5 100644 --- a/src/crashlog.cpp +++ b/src/crashlog.cpp @@ -55,7 +55,7 @@ #if defined(WITH_ICU_LAYOUT) || defined(WITH_ICU_SORT) # include #endif /* WITH_ICU_SORT || WITH_ICU_LAYOUT */ -#ifdef WITH_LZMA +#ifdef WITH_LIBLZMA # include #endif #ifdef WITH_LZO @@ -254,7 +254,7 @@ char *CrashLog::LogLibraries(char *buffer, const char *last) const #endif #endif /* WITH_ICU_SORT || WITH_ICU_LAYOUT */ -#ifdef WITH_LZMA +#ifdef WITH_LIBLZMA buffer += seprintf(buffer, last, " LZMA: %s\n", lzma_version_string()); #endif diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index bff85dfc61..cd30ed8592 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -2153,7 +2153,7 @@ struct ZlibSaveFilter : SaveFilter { ********** START OF LZMA CODE ************** ********************************************/ -#if defined(WITH_LZMA) +#if defined(WITH_LIBLZMA) #include /** @@ -2266,7 +2266,7 @@ struct LZMASaveFilter : SaveFilter { } }; -#endif /* WITH_LZMA */ +#endif /* WITH_LIBLZMA */ /******************************************* ************* END OF CODE ***************** @@ -2303,7 +2303,7 @@ static const SaveLoadFormat _saveload_formats[] = { #else {"zlib", TO_BE32X('OTTZ'), NULL, NULL, 0, 0, 0}, #endif -#if defined(WITH_LZMA) +#if defined(WITH_LIBLZMA) /* Level 2 compression is speed wise as fast as zlib level 6 compression (old default), but results in ~10% smaller saves. * Higher compression levels are possible, and might improve savegame size by up to 25%, but are also up to 10 times slower. * The next significant reduction in file size is at level 4, but that is already 4 times slower. Level 3 is primarily 50% diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index ff5226c2b5..3480a2aef2 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -25,7 +25,7 @@ #include #endif -#if defined(WITH_LZMA) +#if defined(WITH_LIBLZMA) #include #endif @@ -257,7 +257,7 @@ static void Gunzip(byte **bufp, size_t *sizep) } #endif -#if defined(WITH_LZMA) +#if defined(WITH_LIBLZMA) /** * Do an in-memory xunzip operation. This works on a .xz or (legacy) @@ -332,7 +332,7 @@ static void Xunzip(byte **bufp, size_t *sizep) if (read != filesize) return; -#if defined(WITH_ZLIB) || defined(WITH_LZMA) +#if defined(WITH_ZLIB) || defined(WITH_LIBLZMA) const char *suffix = strrchr(textfile, '.'); if (suffix == NULL) return; #endif @@ -342,7 +342,7 @@ static void Xunzip(byte **bufp, size_t *sizep) if (strcmp(suffix, ".gz") == 0) Gunzip((byte**)&this->text, &filesize); #endif -#if defined(WITH_LZMA) +#if defined(WITH_LIBLZMA) /* In-place xunzip */ if (strcmp(suffix, ".xz") == 0) Xunzip((byte**)&this->text, &filesize); #endif @@ -407,7 +407,7 @@ const char *GetTextfile(TextfileType type, Subdirectory dir, const char *filenam #if defined(WITH_ZLIB) "txt.gz", #endif -#if defined(WITH_LZMA) +#if defined(WITH_LIBLZMA) "txt.xz", #endif }; From 52d7e7d45e0a2a6033942602ed9fdec821a7d2af Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 10 Mar 2019 16:43:59 +0100 Subject: [PATCH 483/622] Codechange: ICU_LAYOUT is in reality ICU_LX (according to their CMake files) By naming it in a different way, things get a bit confusing. Especially if we are switching to CMake, which autodetects these things, we need to use the name the authors of ICU gave it; not our interpertation of that name. --- Doxyfile | 2 +- config.lib | 2 +- src/crashlog.cpp | 10 +++++----- src/gfx_layout.cpp | 12 ++++++------ src/gfx_layout.h | 10 +++++----- src/strings.cpp | 4 ++-- 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/Doxyfile b/Doxyfile index 54e4197c65..93d1e968f6 100644 --- a/Doxyfile +++ b/Doxyfile @@ -298,7 +298,7 @@ PREDEFINED = ENABLE_NETWORK \ WITH_FONTCONFIG \ WITH_FREETYPE \ WITH_ICU_SORT \ - WITH_ICU_LAYOUT \ + WITH_ICU_LX \ UNICODE \ _UNICODE \ _GNU_SOURCE \ diff --git a/config.lib b/config.lib index cb006f47db..5eb32477f4 100644 --- a/config.lib +++ b/config.lib @@ -1765,7 +1765,7 @@ make_cflags_and_ldflags() { fi if [ -n "$icu_layout_config" ]; then - CFLAGS="$CFLAGS -DWITH_ICU_LAYOUT" + CFLAGS="$CFLAGS -DWITH_ICU_LX" CFLAGS="$CFLAGS `$icu_layout_config --cflags | tr '\n\r' ' '`" if [ "$static_icu" != "0" ]; then diff --git a/src/crashlog.cpp b/src/crashlog.cpp index 8fbc4d3ce5..bf522d96c7 100644 --- a/src/crashlog.cpp +++ b/src/crashlog.cpp @@ -52,9 +52,9 @@ # include # include FT_FREETYPE_H #endif /* WITH_FREETYPE */ -#if defined(WITH_ICU_LAYOUT) || defined(WITH_ICU_SORT) +#if defined(WITH_ICU_LX) || defined(WITH_ICU_SORT) # include -#endif /* WITH_ICU_SORT || WITH_ICU_LAYOUT */ +#endif /* WITH_ICU_LX || WITH_ICU_SORT */ #ifdef WITH_LIBLZMA # include #endif @@ -240,7 +240,7 @@ char *CrashLog::LogLibraries(char *buffer, const char *last) const buffer += seprintf(buffer, last, " FreeType: %d.%d.%d\n", major, minor, patch); #endif /* WITH_FREETYPE */ -#if defined(WITH_ICU_LAYOUT) || defined(WITH_ICU_SORT) +#if defined(WITH_ICU_LX) || defined(WITH_ICU_SORT) /* 4 times 0-255, separated by dots (.) and a trailing '\0' */ char buf[4 * 3 + 3 + 1]; UVersionInfo ver; @@ -249,10 +249,10 @@ char *CrashLog::LogLibraries(char *buffer, const char *last) const #ifdef WITH_ICU_SORT buffer += seprintf(buffer, last, " ICU i18n: %s\n", buf); #endif -#ifdef WITH_ICU_LAYOUT +#ifdef WITH_ICU_LX buffer += seprintf(buffer, last, " ICU lx: %s\n", buf); #endif -#endif /* WITH_ICU_SORT || WITH_ICU_LAYOUT */ +#endif /* WITH_ICU_LX || WITH_ICU_SORT */ #ifdef WITH_LIBLZMA buffer += seprintf(buffer, last, " LZMA: %s\n", lzma_version_string()); diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index c65ead90e1..3bf490da67 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -17,9 +17,9 @@ #include "table/control_codes.h" -#ifdef WITH_ICU_LAYOUT +#ifdef WITH_ICU_LX #include -#endif /* WITH_ICU_LAYOUT */ +#endif /* WITH_ICU_LX */ #ifdef WITH_UNISCRIBE #include "os/windows/string_uniscribe.h" @@ -50,7 +50,7 @@ Font::Font(FontSize size, TextColour colour) : assert(size < FS_END); } -#ifdef WITH_ICU_LAYOUT +#ifdef WITH_ICU_LX /* Implementation details of LEFontInstance */ le_int32 Font::getUnitsPerEM() const @@ -226,7 +226,7 @@ public: return length; } }; -#endif /* WITH_ICU_LAYOUT */ +#endif /* WITH_ICU_LX */ /*** Paragraph layout ***/ /** @@ -674,11 +674,11 @@ Layouter::Layouter(const char *str, int maxw, TextColour colour, FontSize fontsi } else { /* Line is new, layout it */ FontState old_state = state; -#if defined(WITH_ICU_LAYOUT) || defined(WITH_UNISCRIBE) || defined(WITH_COCOA) +#if defined(WITH_ICU_LX) || defined(WITH_UNISCRIBE) || defined(WITH_COCOA) const char *old_str = str; #endif -#ifdef WITH_ICU_LAYOUT +#ifdef WITH_ICU_LX GetLayouter(line, str, state); if (line.layout == NULL) { static bool warned = false; diff --git a/src/gfx_layout.h b/src/gfx_layout.h index 94cbac073a..6f611d6e66 100644 --- a/src/gfx_layout.h +++ b/src/gfx_layout.h @@ -21,12 +21,12 @@ #include #include -#ifdef WITH_ICU_LAYOUT +#ifdef WITH_ICU_LX #include "layout/ParagraphLayout.h" #define ICU_FONTINSTANCE : public icu::LEFontInstance -#else /* WITH_ICU_LAYOUT */ +#else /* WITH_ICU_LX */ #define ICU_FONTINSTANCE -#endif /* WITH_ICU_LAYOUT */ +#endif /* WITH_ICU_LX */ /** * Text drawing parameters, which can change while drawing a line, but are kept between multiple parts @@ -89,7 +89,7 @@ public: Font(FontSize size, TextColour colour); -#ifdef WITH_ICU_LAYOUT +#ifdef WITH_ICU_LX /* Implementation details of LEFontInstance */ le_int32 getUnitsPerEM() const; @@ -105,7 +105,7 @@ public: LEGlyphID mapCharToGlyph(LEUnicode32 ch) const; void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const; le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const; -#endif /* WITH_ICU_LAYOUT */ +#endif /* WITH_ICU_LX */ }; /** Mapping from index to font. */ diff --git a/src/strings.cpp b/src/strings.cpp index a3ece9830e..849a540f2c 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -2138,7 +2138,7 @@ void CheckForMissingGlyphs(bool base_font, MissingGlyphSearcher *searcher) /* Update the font with cache */ LoadStringWidthTable(searcher->Monospace()); -#if !defined(WITH_ICU_LAYOUT) && !defined(WITH_UNISCRIBE) && !defined(WITH_COCOA) +#if !defined(WITH_ICU_LX) && !defined(WITH_UNISCRIBE) && !defined(WITH_COCOA) /* * For right-to-left languages we need the ICU library. If * we do not have support for that library we warn the user @@ -2158,5 +2158,5 @@ void CheckForMissingGlyphs(bool base_font, MissingGlyphSearcher *searcher) SetDParamStr(0, err_str); ShowErrorMessage(STR_JUST_RAW_STRING, INVALID_STRING_ID, WL_ERROR); } -#endif /* !WITH_ICU_LAYOUT */ +#endif /* !WITH_ICU_LX */ } From 36105841b9d09a3c1cd1a8f7a5bd7b84af135d9f Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 10 Mar 2019 16:46:19 +0100 Subject: [PATCH 484/622] Codechange: ICU_SORT is in reality ICU_I18N (according to their CMake files) By naming it in a different way, things get a bit confusing. Especially if we are switching to CMake, which autodetects these things, we need to use the name the authors of ICU gave it; not our interpertation of that name. --- Doxyfile | 2 +- config.lib | 2 +- src/crashlog.cpp | 10 +++++----- src/language.h | 8 ++++---- src/string.cpp | 10 +++++----- src/strings.cpp | 8 ++++---- 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/Doxyfile b/Doxyfile index 93d1e968f6..b6b46257a7 100644 --- a/Doxyfile +++ b/Doxyfile @@ -297,7 +297,7 @@ PREDEFINED = ENABLE_NETWORK \ WITH_PNG \ WITH_FONTCONFIG \ WITH_FREETYPE \ - WITH_ICU_SORT \ + WITH_ICU_I18N \ WITH_ICU_LX \ UNICODE \ _UNICODE \ diff --git a/config.lib b/config.lib index 5eb32477f4..bab1ca4ea4 100644 --- a/config.lib +++ b/config.lib @@ -1776,7 +1776,7 @@ make_cflags_and_ldflags() { fi if [ -n "$icu_sort_config" ]; then - CFLAGS="$CFLAGS -DWITH_ICU_SORT" + CFLAGS="$CFLAGS -DWITH_ICU_I18N" CFLAGS="$CFLAGS `$icu_sort_config --cflags | tr '\n\r' ' '`" if [ "$static_icu" != "0" ]; then diff --git a/src/crashlog.cpp b/src/crashlog.cpp index bf522d96c7..ddb0c09cc6 100644 --- a/src/crashlog.cpp +++ b/src/crashlog.cpp @@ -52,9 +52,9 @@ # include # include FT_FREETYPE_H #endif /* WITH_FREETYPE */ -#if defined(WITH_ICU_LX) || defined(WITH_ICU_SORT) +#if defined(WITH_ICU_LX) || defined(WITH_ICU_I18N) # include -#endif /* WITH_ICU_LX || WITH_ICU_SORT */ +#endif /* WITH_ICU_LX || WITH_ICU_I18N */ #ifdef WITH_LIBLZMA # include #endif @@ -240,19 +240,19 @@ char *CrashLog::LogLibraries(char *buffer, const char *last) const buffer += seprintf(buffer, last, " FreeType: %d.%d.%d\n", major, minor, patch); #endif /* WITH_FREETYPE */ -#if defined(WITH_ICU_LX) || defined(WITH_ICU_SORT) +#if defined(WITH_ICU_LX) || defined(WITH_ICU_I18N) /* 4 times 0-255, separated by dots (.) and a trailing '\0' */ char buf[4 * 3 + 3 + 1]; UVersionInfo ver; u_getVersion(ver); u_versionToString(ver, buf); -#ifdef WITH_ICU_SORT +#ifdef WITH_ICU_I18N buffer += seprintf(buffer, last, " ICU i18n: %s\n", buf); #endif #ifdef WITH_ICU_LX buffer += seprintf(buffer, last, " ICU lx: %s\n", buf); #endif -#endif /* WITH_ICU_LX || WITH_ICU_SORT */ +#endif /* WITH_ICU_LX || WITH_ICU_I18N */ #ifdef WITH_LIBLZMA buffer += seprintf(buffer, last, " LZMA: %s\n", lzma_version_string()); diff --git a/src/language.h b/src/language.h index ec241dbd8c..8df59f74ff 100644 --- a/src/language.h +++ b/src/language.h @@ -13,9 +13,9 @@ #define LANGUAGE_H #include "core/smallvec_type.hpp" -#ifdef WITH_ICU_SORT +#ifdef WITH_ICU_I18N #include -#endif /* WITH_ICU_SORT */ +#endif /* WITH_ICU_I18N */ #include "strings_type.h" static const uint8 CASE_GENDER_LEN = 16; ///< The (maximum) length of a case/gender string. @@ -104,9 +104,9 @@ extern LanguageList _languages; /** The currently loaded language. */ extern const LanguageMetadata *_current_language; -#ifdef WITH_ICU_SORT +#ifdef WITH_ICU_I18N extern icu::Collator *_current_collator; -#endif /* WITH_ICU_SORT */ +#endif /* WITH_ICU_I18N */ bool ReadLanguagePack(const LanguageMetadata *lang); const LanguageMetadata *GetLanguage(byte newgrflangid); diff --git a/src/string.cpp b/src/string.cpp index ae1b556aff..18ed863d0e 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -37,12 +37,12 @@ #include "os/macosx/string_osx.h" #endif -#ifdef WITH_ICU_SORT +#ifdef WITH_ICU_I18N /* Required by strnatcmp. */ #include #include "language.h" #include "gfx_func.h" -#endif /* WITH_ICU_SORT */ +#endif /* WITH_ICU_I18N */ /* The function vsnprintf is used internally to perform the required formatting * tasks. As such this one must be allowed, and makes sure it's terminated. */ @@ -584,13 +584,13 @@ int strnatcmp(const char *s1, const char *s2, bool ignore_garbage_at_front) s2 = SkipGarbage(s2); } -#ifdef WITH_ICU_SORT +#ifdef WITH_ICU_I18N if (_current_collator != NULL) { UErrorCode status = U_ZERO_ERROR; int result = _current_collator->compareUTF8(s1, s2, status); if (U_SUCCESS(status)) return result; } -#endif /* WITH_ICU_SORT */ +#endif /* WITH_ICU_I18N */ #if defined(_WIN32) && !defined(STRGEN) && !defined(SETTINGSGEN) int res = OTTDStringCompare(s1, s2); @@ -613,7 +613,7 @@ int strnatcmp(const char *s1, const char *s2, bool ignore_garbage_at_front) return new UniscribeStringIterator(); } -#elif defined(WITH_ICU_SORT) +#elif defined(WITH_ICU_I18N) #include #include diff --git a/src/strings.cpp b/src/strings.cpp index 849a540f2c..b5fb36d4d9 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -51,9 +51,9 @@ const LanguageMetadata *_current_language = NULL; ///< The currently loaded lang TextDirection _current_text_dir; ///< Text direction of the currently selected language. -#ifdef WITH_ICU_SORT +#ifdef WITH_ICU_I18N icu::Collator *_current_collator = NULL; ///< Collator for the language currently in use. -#endif /* WITH_ICU_SORT */ +#endif /* WITH_ICU_I18N */ static uint64 _global_string_params_data[20]; ///< Global array of string parameters. To access, use #SetDParam. static WChar _global_string_params_type[20]; ///< Type of parameters stored in #_global_string_params @@ -1796,7 +1796,7 @@ bool ReadLanguagePack(const LanguageMetadata *lang) MacOSSetCurrentLocaleName(_current_language->isocode); #endif -#ifdef WITH_ICU_SORT +#ifdef WITH_ICU_I18N /* Delete previous collator. */ if (_current_collator != NULL) { delete _current_collator; @@ -1813,7 +1813,7 @@ bool ReadLanguagePack(const LanguageMetadata *lang) delete _current_collator; _current_collator = NULL; } -#endif /* WITH_ICU_SORT */ +#endif /* WITH_ICU_I18N */ /* Some lists need to be sorted again after a language change. */ ReconsiderGameScriptLanguage(); From 1f57150d805059e8985a02725e0a23c37f22098f Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 10 Mar 2019 16:46:57 +0100 Subject: [PATCH 485/622] Codechange: "basedir.h" is a system include, not a local --- src/fileio.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index c93d3b3dff..6b8173ccec 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -29,7 +29,7 @@ #include #ifdef WITH_XDG_BASEDIR -#include "basedir.h" +#include #endif #include "safeguards.h" From 45fbaa64c231d6cd2e0831f872dc9df41955eb12 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 10 Mar 2019 16:47:34 +0100 Subject: [PATCH 486/622] Codechange: check if a define is set directly, instead of indirectly config.lib happens to set GLOBAL_DATA_DIR in case it is not DOS and not OS2, but this kind of deduction is annoying to maintain. It is better to just check if the define you want to use is set, and leave it to config.lib to set it or not depending on the OS. --- src/fileio.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index 6b8173ccec..9f0db9e652 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -1121,7 +1121,7 @@ void DetermineBasePaths(const char *exe) } } -#if defined(DOS) || defined(OS2) +#if !defined(GLOBAL_DATA_DIR) _searchpaths[SP_INSTALLATION_DIR] = NULL; #else seprintf(tmp, lastof(tmp), "%s", GLOBAL_DATA_DIR); From aea1726f45735a6768884a3f49f8f5ffcf2337e2 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 10 Mar 2019 16:52:13 +0100 Subject: [PATCH 487/622] Fix: MingW and MSVC compiled strgen had different path separator behaviour If it was compiled with MingW, both / and \ were accepted as path separator. On MSVC, only \ was. This is an unexpected difference between binaries for the same platform. Remove this discrepancy by accepting both / and \ on all platforms. --- src/strgen/strgen.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp index 80fe49a488..11e6b8dbde 100644 --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -392,11 +392,13 @@ static inline char *mkpath(char *buf, const char *last, const char *path, const return buf; } -#if defined(__MINGW32__) +#if defined(_WIN32) /** * On MingW, it is common that both / as \ are accepted in the * params. To go with those flow, we rewrite all incoming / - * simply to \, so internally we can safely assume \. + * simply to \, so internally we can safely assume \, and do + * this for all Windows machines to keep identical behaviour, + * no matter what your compiler was. */ static inline char *replace_pathsep(char *s) { From 6a897a2a9bd02df0533e9dbc0083a90c41ba816f Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 10 Mar 2019 16:57:42 +0100 Subject: [PATCH 488/622] Fix: don't include xaudio2 if you are not going to compile it This is more in trend with other files, where if the driver is not selected, we don't even attempt to compile it. --- configure | 1 + projects/generate | 1 + projects/generate.vbs | 1 + source.list | 4 +++- 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/configure b/configure index 0f6ac2503e..f6c6a2eec9 100755 --- a/configure +++ b/configure @@ -123,6 +123,7 @@ AWKCOMMAND=' if ($0 == "MSVC" && "'$os'" != "MSVC") { next; } if ($0 == "DIRECTMUSIC" && "'$with_direct_music'" == "0") { next; } if ($0 == "FLUIDSYNTH" && "'$fluidsynth'" == "" ) { next; } + if ($0 == "USE_XAUDIO2" && "'$with_xaudio2'" == "0") { next; } if ($0 == "USE_THREADS" && "'$with_threads'" == "0") { next; } if ($0 == "USE_SSE" && "'$with_sse'" != "1") { next; } diff --git a/projects/generate b/projects/generate index 4524c545e5..2ab89e8f1b 100755 --- a/projects/generate +++ b/projects/generate @@ -138,6 +138,7 @@ load_main_data() { if ($0 == "MSVC" && "'$os'" != "MSVC") { next; } if ($0 == "DIRECTMUSIC" && "'$enable_directmusic'" != "1") { next; } if ($0 == "FLUIDSYNTH" && "'$enable_fluidsynth'" != "1") { next; } + if ($0 == "USE_XAUDIO2" && "'$with_xaudio2'" == "0") { next; } if ($0 == "USE_THREADS" && "'$with_threads'" == "0") { next; } skip += 1; diff --git a/projects/generate.vbs b/projects/generate.vbs index 3b4adf4bdd..06e037c4cd 100644 --- a/projects/generate.vbs +++ b/projects/generate.vbs @@ -180,6 +180,7 @@ Sub load_main_data(filename, ByRef vcxproj, ByRef filters, ByRef files) line = "DIRECTMUSIC" Or _ line = "AI" Or _ line = "USE_SSE" Or _ + line = "USE_XAUDIO2" Or _ line = "USE_THREADS" _ ) Then skip = skip + 1 deep = deep + 1 diff --git a/source.list b/source.list index 5e9c52b73a..b567a0026d 100644 --- a/source.list +++ b/source.list @@ -1141,7 +1141,9 @@ sound/null_s.cpp #end #if WIN32 sound/win32_s.cpp - sound/xaudio2_s.cpp + #if USE_XAUDIO2 + sound/xaudio2_s.cpp + #end #end #end From 1a115e1cc8e6725fc3725e031767843a7d7f3ccb Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 21 Mar 2016 20:19:29 +0000 Subject: [PATCH 489/622] Change: Include _current_company in crashlog AI config line _current_company is not currently logged anywhere in the crashlog. _local_company is logged, despite being much less useful than _current_company. This change logs _current_company alongside _local_company. --- src/crashlog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/crashlog.cpp b/src/crashlog.cpp index ddb0c09cc6..add5c52040 100644 --- a/src/crashlog.cpp +++ b/src/crashlog.cpp @@ -194,7 +194,7 @@ char *CrashLog::LogConfiguration(char *buffer, const char *last) const FontCache::Get(FS_MONO)->GetFontName() ); - buffer += seprintf(buffer, last, "AI Configuration (local: %i):\n", (int)_local_company); + buffer += seprintf(buffer, last, "AI Configuration (local: %i) (current: %i):\n", (int)_local_company, (int)_current_company); const Company *c; FOR_ALL_COMPANIES(c) { if (c->ai_info == NULL) { From 776fbda3244ab0d1cdc047adb3e3b9de53a7b8f6 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 11 Mar 2019 19:45:41 +0100 Subject: [PATCH 490/622] Update: Translations from eints finnish: 110 changes by hpiirai ukrainian: 149 changes by nsergiy --- src/lang/finnish.txt | 220 ++++++++++++++++++++--------------------- src/lang/ukrainian.txt | 180 +++++++++++++++++++++++++++------ 2 files changed, 259 insertions(+), 141 deletions(-) diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 7a32492d39..5fad7b4dbf 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -239,14 +239,14 @@ STR_BUTTON_LOCATION :{BLACK}Sijainti STR_BUTTON_RENAME :{BLACK}Nimeä uudelleen STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Sulje ikkuna -STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Ikkunan otsake - siirrä ikkunaa vetämällä tästä -STR_TOOLTIP_SHADE :{BLACK}Pienennä ikkuna - näytä vain otsikko +STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Ikkunan otsake – siirrä ikkunaa vetämällä tästä +STR_TOOLTIP_SHADE :{BLACK}Pienennä ikkuna – näytä vain otsikko STR_TOOLTIP_DEBUG :{BLACK}Näytä NewGRF-vianmääritystiedot STR_TOOLTIP_DEFSIZE :{BLACK}Palauta ikkunan oletuskoko. Ctrl+Klik tallentaa nykyisen koon oletukseksi STR_TOOLTIP_STICKY :{BLACK}Aseta ikkuna säilymään "Sulje kaikki ikkunat" -napista huolimatta. Ctrl+Klik tallentaa tilan oletukseksi STR_TOOLTIP_RESIZE :{BLACK}Napsauta ja vedä muuttaaksesi tämän ikkunan kokoa STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Suurenna/pienennä ikkuna -STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Vierityspalkki - luettelon vieritys ylös/alas +STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Vierityspalkki – luettelon vieritys ylös/alas STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Vierityspalkki – luettelon vieritys vasemmalle/oikealle STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Tuhoa rakennuksia jne. ruudulta. Ctrl valitsee alueen vinottain. Shift vaihtaa tuhoamistilan ja kustannusarvion välillä @@ -375,7 +375,7 @@ STR_SCENEDIT_FILE_MENU_QUIT :Lopeta ############ range for settings menu starts STR_SETTINGS_MENU_GAME_OPTIONS :Pelin valinnat STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Asetukset -STR_SETTINGS_MENU_SCRIPT_SETTINGS :Tekoälyn/Peliskriptin asetukset +STR_SETTINGS_MENU_SCRIPT_SETTINGS :Tekoälyn/peliskriptin asetukset STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF-asetukset STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Läpinäkyvyysasetukset STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Kuntien nimet näkyvissä @@ -473,7 +473,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Poista kaikki v STR_ABOUT_MENU_LAND_BLOCK_INFO :Maa-alueen tiedot STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Konsoli -STR_ABOUT_MENU_AI_DEBUG :Tekoälyn/Peliskriptin virheenjäljitys +STR_ABOUT_MENU_AI_DEBUG :Tekoälyn/peliskriptin virheenjäljitys STR_ABOUT_MENU_SCREENSHOT :Kuvakaappaus STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Täysin lähennetty kuvakaappaus STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Kuvakaappaus oletuslähennystasolla @@ -597,7 +597,7 @@ STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Napsauta # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Yhtiökilpataulukko -STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}' +STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} ”{STRING}” STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Veturinkuljettaja STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Liikennepäällikkö STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Kuljetusjohtaja @@ -675,10 +675,10 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Sekoitta STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Näytä musiikkiraitojen valintaikkuna # Playlist window -STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Soittolista - '{STRING}' +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Soittolista – ”{STRING}” STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Raita -STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Soittolista - '{STRING}' +STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Soittolista – ”{STRING}” STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Tyhjennä STR_PLAYLIST_CHANGE_SET :{BLACK}Vaihda kokoelma STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Tyhjennä nykyinen soittolista (vain Oma1 tai Oma2) @@ -698,12 +698,12 @@ STR_HIGHSCORE_PERFORMANCE_TITLE_MAGNATE :Magnaatti STR_HIGHSCORE_PERFORMANCE_TITLE_MOGUL :Moguli STR_HIGHSCORE_PERFORMANCE_TITLE_TYCOON_OF_THE_CENTURY :Vuosisadan pohatta STR_HIGHSCORE_NAME :{PRESIDENT_NAME}, {COMPANY} -STR_HIGHSCORE_STATS :{BIG_FONT}'{STRING}' ({COMMA}) -STR_HIGHSCORE_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{BLACK}{COMPANY} saavuttaa arvon '{STRING}'! -STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{WHITE}{PRESIDENT_NAME} yhtiöstä {COMPANY} saavuttaa arvon '{STRING}'! +STR_HIGHSCORE_STATS :{BIG_FONT}”{STRING}” ({COMMA}) +STR_HIGHSCORE_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{BLACK}{COMPANY} saavuttaa arvon ”{STRING}”! +STR_HIGHSCORE_PRESIDENT_OF_COMPANY_ACHIEVES_STATUS :{BIG_FONT}{WHITE}{PRESIDENT_NAME} yhtiöstä {COMPANY} saavuttaa arvon ”{STRING}”! # Smallmap window -STR_SMALLMAP_CAPTION :{WHITE}Kartta - {STRING} +STR_SMALLMAP_CAPTION :{WHITE}Kartta – {STRING} STR_SMALLMAP_TYPE_CONTOURS :Korkeuserot STR_SMALLMAP_TYPE_VEHICLES :Liikennevälineet @@ -770,7 +770,7 @@ STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Älä n STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Näytä kaikki rahdit kartalla # Status bar messages -STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Näytä viimeisin viesti tai uutisraportti. +STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Näytä viimeisin viesti tai uutisraportti STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * TAUKO * * STR_STATUSBAR_AUTOSAVE :{RED}AUTOMAATTITALLENNUS @@ -802,7 +802,7 @@ STR_NEWS_DISASTER_ZEPPELIN :{BIG_FONT}{BLAC STR_NEWS_DISASTER_SMALL_UFO :{BIG_FONT}{BLACK}Ajoneuvo tuhoutui törmäyksessä UFO:n kanssa! STR_NEWS_DISASTER_AIRPLANE_OIL_REFINERY :{BIG_FONT}{BLACK}{TOWN}: Öljynjalostamon räjähdys! STR_NEWS_DISASTER_HELICOPTER_FACTORY :{BIG_FONT}{BLACK}{TOWN}: Tehdas tuhoutunut epäilyttävissä olosuhteissa! -STR_NEWS_DISASTER_BIG_UFO :{BIG_FONT}{BLACK}{TOWN}: 'UFO' laskeutuu! +STR_NEWS_DISASTER_BIG_UFO :{BIG_FONT}{BLACK}{TOWN}: ”UFO” laskeutuu! STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLACK}{TOWN}: Hiilikaivoksen sortuma aiheuttaa tuhoa! STR_NEWS_DISASTER_FLOOD_VEHICLE :{BIG_FONT}{BLACK}Tulvia!{}Ainakin {COMMA} kadoksissa tai oletettavasti menehtynyt tappavassa tulvassa! @@ -865,7 +865,7 @@ STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Automaat STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}Uusi {STRING} on nyt saatavilla! STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} -STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Uusi {STRING} on nyt saatavilla! - {ENGINE} +STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Uusi {STRING} on nyt saatavilla! – {ENGINE} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} ei ota enää vastaan {STRING}. STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} ei ota enää vastaan {STRING} tai {STRING}. @@ -1101,7 +1101,7 @@ STR_CITY_APPROVAL_PERMISSIVE :Salliva STR_CITY_APPROVAL_TOLERANT :Suvaitseva STR_CITY_APPROVAL_HOSTILE :Vihamielinen -STR_WARNING_NO_SUITABLE_AI :{WHITE}Ei soveltuvia tekoälyjä saatavilla...{}Voit ladata tekoälyjä 'Online-Sisältö'-palvelulla +STR_WARNING_NO_SUITABLE_AI :{WHITE}Ei soveltuvia tekoälyjä saatavilla...{}Voit ladata tekoälyjä ”online-sisältö” -palvelulla # Settings tree window STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Asetukset @@ -1733,21 +1733,21 @@ STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Muuta as # Config errors STR_CONFIG_ERROR :{WHITE}Virhe asetustiedostossa... -STR_CONFIG_ERROR_ARRAY :{WHITE}... virhe taulukossa '{STRING}' -STR_CONFIG_ERROR_INVALID_VALUE :{WHITE}... epäkelpo arvo '{STRING}' asetuksella '{STRING}' -STR_CONFIG_ERROR_TRAILING_CHARACTERS :{WHITE}... merkkejä asetuksen '{STRING}' perässä -STR_CONFIG_ERROR_DUPLICATE_GRFID :{WHITE}... jätetään huomiotta NewGRF '{STRING}': sama GRF ID kuin '{STRING}' -STR_CONFIG_ERROR_INVALID_GRF :{WHITE}... jätetään huomiotta epäkelpo NewGRF '{STRING}': {STRING} +STR_CONFIG_ERROR_ARRAY :{WHITE}... virhe taulukossa ”{STRING}” +STR_CONFIG_ERROR_INVALID_VALUE :{WHITE}... epäkelpo arvo ”{STRING}” asetuksella ”{STRING}” +STR_CONFIG_ERROR_TRAILING_CHARACTERS :{WHITE}... ylimääräisiä merkkejä asetuksen ”{STRING}” perässä +STR_CONFIG_ERROR_DUPLICATE_GRFID :{WHITE}... jätetään huomiotta NewGRF ”{STRING}”: sama GRF ID kuin NewGRF:ssä ”{STRING}” +STR_CONFIG_ERROR_INVALID_GRF :{WHITE}... jätetään huomiotta epäkelpo NewGRF ”{STRING}”: {STRING} STR_CONFIG_ERROR_INVALID_GRF_NOT_FOUND :ei löydetty STR_CONFIG_ERROR_INVALID_GRF_UNSAFE :ei turvallinen staattiseen käyttöön STR_CONFIG_ERROR_INVALID_GRF_SYSTEM :järjestelmä-NewGRF STR_CONFIG_ERROR_INVALID_GRF_INCOMPATIBLE :epäyhteensopiva tämän OpenTTD-version kanssa STR_CONFIG_ERROR_INVALID_GRF_UNKNOWN :tuntematon -STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_LEVEL :{WHITE}... pakkaustaso '{STRING}' on kelvoton -STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_ALGORITHM :{WHITE}... pelitallennemuoto '{STRING}' ei ole saatavilla. Palataan muotoon '{STRING}' -STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... ohitetaan perusgrafiikkapaketti '{STRING}': ei löydetty -STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... ohitetaan äänipaketti '{STRING}': ei löydetty -STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ohitetaan musiikkipaketti '{STRING}': ei löydetty +STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_LEVEL :{WHITE}... pakkaustaso ”{STRING}” on kelvoton +STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_ALGORITHM :{WHITE}... pelitallennemuoto ”{STRING}” ei ole saatavilla. Palataan muotoon ”{STRING}” +STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... ohitetaan perusgrafiikkapaketti ”{STRING}”: ei löydetty +STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... ohitetaan äänipaketti ”{STRING}”: ei löydetty +STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ohitetaan musiikkipaketti ”{STRING}”: ei löydetty STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Muisti lopussa STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}{BYTES} sprite-välimuistin varaaminen epäonnistui. Sprite-välimuistin kooksi valittiin {BYTES}. Tämä heikentää OpenTTD:n suorituskykyä. Vähentääksesi muistivaatimuksia voit kokeilla poistaa käytöstä 32bpp-grafiikat ja/tai lähennystasoja @@ -1765,8 +1765,8 @@ STR_INTRO_GAME_OPTIONS :{BLACK}Pelin va STR_INTRO_HIGHSCORE :{BLACK}Pistetaulukko STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Asetukset STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF-asetukset -STR_INTRO_ONLINE_CONTENT :{BLACK}Tarkista Online-sisältö -STR_INTRO_SCRIPT_SETTINGS :{BLACK}Tekoälyn/Peliskriptin asetukset +STR_INTRO_ONLINE_CONTENT :{BLACK}Tarkista online-sisältö +STR_INTRO_SCRIPT_SETTINGS :{BLACK}Tekoälyn/peliskriptin asetukset STR_INTRO_QUIT :{BLACK}Sulje STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Aloita uusi peli. Ctrl+Klik ohittaa kartan asetukset @@ -1890,7 +1890,7 @@ STR_FACE_FACECODE :{BLACK}Pelaajan STR_FACE_FACECODE_TOOLTIP :{BLACK}Tarkastele ja/tai aseta johtajan kasvojen numero STR_FACE_FACECODE_CAPTION :{WHITE}Tarkastele ja/tai aseta johtajan kasvojen numero STR_FACE_FACECODE_SET :{WHITE}Uusi kasvojen numerokoodi on asetettu -STR_FACE_FACECODE_ERR :{WHITE}Johtajan kasvojen numeroa ei voitu asettaa - arvon on oltaa numeerinen arvo väliltä 0-4,294,967,295! +STR_FACE_FACECODE_ERR :{WHITE}Johtajan kasvojen numeroa ei voitu asettaa – arvon on oltava numeerinen arvo väliltä 0–4 294 967 295! STR_FACE_SAVE :{BLACK}Tallenna STR_FACE_SAVE_TOOLTIP :{BLACK}Tallenna suosikkikasvot STR_FACE_SAVE_DONE :{WHITE}Nämä kasvot tallennetaan suosikkikasvoiksesi OpenTTD:n kokoonpanotiedostoon. @@ -1936,7 +1936,7 @@ STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Pelaajat STR_NETWORK_SERVER_LIST_GAME_NAME :{BLACK}Nimi STR_NETWORK_SERVER_LIST_GAME_NAME_TOOLTIP :{BLACK}Pelin nimi -STR_NETWORK_SERVER_LIST_GENERAL_ONLINE :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA} +STR_NETWORK_SERVER_LIST_GENERAL_ONLINE :{BLACK}{COMMA}/{COMMA} – {COMMA}/{COMMA} STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION :{BLACK}Pelaajia STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION_TOOLTIP :{BLACK}Pelaajia online / pelaajia maks.{}Yhtiöitä online / yhtiöitä maks. STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x{COMMA} @@ -1953,7 +1953,7 @@ STR_NETWORK_SERVER_LIST_LAST_JOINED_SERVER :{BLACK}Edelline STR_NETWORK_SERVER_LIST_CLICK_TO_SELECT_LAST :{BLACK}Valitse edellinen palvelin, jolla pelasit STR_NETWORK_SERVER_LIST_GAME_INFO :{SILVER}PELITIEDOT -STR_NETWORK_SERVER_LIST_CLIENTS :{SILVER}Pelaajat: {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA} +STR_NETWORK_SERVER_LIST_CLIENTS :{SILVER}Pelaajat: {WHITE}{COMMA} / {COMMA} – {COMMA} / {COMMA} STR_NETWORK_SERVER_LIST_LANGUAGE :{SILVER}Kieli: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_LANDSCAPE :{SILVER}Maasto: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}Kartan koko: {WHITE}{COMMA}x{COMMA} @@ -2459,7 +2459,7 @@ STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Rakenna STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Rakenna satama. Ctrl liittää asemat. Shift vaihtaa rakennustilan ja kustannusarvion välillä STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Sijoita poiju, jota voi käyttää reittipisteenä. Shift vaihtaa rakennustilan ja kustannusarvion välillä STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Rakenna akvedukti. Shift vaihtaa rakennustilan ja kustannusarvion välillä -STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Määrittele vesialue.{}Tee kanava, paitsi jos Ctrl on painettuna merenpinnalla. Tällöin meri laajenee ympäristöön. +STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Määrittele vesialue.{}Tee kanava, paitsi jos Ctrl on painettuna merenpinnalla. Tällöin meri laajenee ympäristöön STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Sijoita jokia # Ship depot construction window @@ -2523,10 +2523,10 @@ STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Istuta p # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Maanrakennus -STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Sijoita kallioisia alueita maastoon. +STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Sijoita kallioisia alueita maastoon STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Määrittele aavikon alue.{}Pidä Ctrl-nappia pohjassa poistaaksesi sitä -STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Suurenna madallettavan/korotettavan maa-alueen kokoa. -STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Pienennä madallettavan/korotettavan maa-alueen kokoa. +STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Suurenna madallettavan/korotettavan maa-alueen kokoa +STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Pienennä madallettavan/korotettavan maa-alueen kokoa STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Luo satunnainen maasto STR_TERRAFORM_SE_NEW_WORLD :{BLACK}Luo uusi skenaario STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Nollaa maasto @@ -2947,7 +2947,7 @@ STR_NEWGRF_PARAMETERS_SETTING :{STRING}: {ORAN STR_NEWGRF_PARAMETERS_NUM_PARAM :{LTBLUE}Parametrien määrä: {ORANGE}{NUM} # NewGRF inspect window -STR_NEWGRF_INSPECT_CAPTION :{WHITE}Tutki - {STRING} +STR_NEWGRF_INSPECT_CAPTION :{WHITE}Tutki – {STRING} STR_NEWGRF_INSPECT_PARENT_BUTTON :{BLACK}Vanhempi STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Tutki vanhemman kohdetta @@ -3024,15 +3024,15 @@ STR_NEWGRF_LIST_COMPATIBLE :{YELLOW}Löydet STR_NEWGRF_LIST_MISSING :{RED}Puuttuvia tiedostoja # NewGRF 'it's broken' warnings -STR_NEWGRF_BROKEN :{WHITE}NewGRF:n '{0:STRING}' käytös aiheuttaa todennäköisesti nykimistä ja/tai kaatumisia. -STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Se muutti vetävän vaunun '{1:ENGINE}' tilaa tallin ulkopuolella -STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Se muutti kulkuneuvon '{1:ENGINE}' pituutta varikon ulkopuolella -STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Se muutti kulkuneuvon '{1:ENGINE}' kapasiteettia, vaikka kulkuneuvo ei ollut varikolla tai uudelleensovitettavana -STR_BROKEN_VEHICLE_LENGTH :{WHITE}Yhtiölle '{1:COMPANY}' kuuluvan junan '{0:VEHICLE}' pituus on virheellinen. Tämä johtuu luultavasti NewGRF:ien ongelmista. Peli saattaa nykiä tai kaatua +STR_NEWGRF_BROKEN :{WHITE}NewGRF:n ”{0:STRING}” käytös aiheuttaa todennäköisesti nykimistä ja/tai kaatumisia +STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Se muutti yksikön ”{1:ENGINE}” vetävän vaunun tilaa tallin ulkopuolella +STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Se muutti kulkuneuvon ”{1:ENGINE}” pituutta varikon ulkopuolella +STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Se muutti kulkuneuvon ”{1:ENGINE}” kapasiteettia, vaikka kulkuneuvo ei ollut varikolla tai uudelleensovitettavana +STR_BROKEN_VEHICLE_LENGTH :{WHITE}Yhtiölle ”{1:COMPANY}” kuuluvan junan ”{0:VEHICLE}” pituus on virheellinen. Tämä johtuu luultavasti NewGRF:ien ongelmista. Peli saattaa nykiä tai kaatua -STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' antaa väärää tietoa -STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Rahti/uudelleensovitustiedot kulkuneuvolle '{1:ENGINE}' ovat eri kuin ostolistassa rakentamisen jälkeen. Tämä voi aiheuttaa, että kulkuneuvon korvaus ei uudelleensovita oikein -STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' aiheutti ikuisen silmukan tuotannon callback-funktiossa +STR_NEWGRF_BUGGY :{WHITE}NewGRF ”{0:STRING}” antaa väärää tietoa +STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Kulkuneuvon ”{1:ENGINE}” rahti-/uudelleensovitustiedot ovat toiset kuin ostolistassa rakentamisen jälkeen. Tämä voi johtaa uudelleensovituksen epäonnistumiseen, kun kulkuneuvo uudistetaan tai korvataan automaattisesti +STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}”{1:STRING}” aiheutti ikuisen silmukan tuotannon takaisinkutsussa STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback-funktio {1:HEX} palautti tuntemattoman/kelvottoman tuloksen {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs @@ -3052,7 +3052,7 @@ STR_NEWGRF_SCAN_STATUS :{BLACK}{NUM} Ne STR_NEWGRF_SCAN_ARCHIVES :Skannataan arkistoja # Sign list window -STR_SIGN_LIST_CAPTION :{WHITE}Kylttilista - {COMMA} kylttiä +STR_SIGN_LIST_CAPTION :{WHITE}Kylttilista – {COMMA} kyltti{P "" ä} STR_SIGN_LIST_MATCH_CASE :{BLACK}Kirjainkoon täsmäys STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Kytke kirjainkoon täsmäys kun verrataan kylttien nimiä suodatintekstiin @@ -3068,7 +3068,7 @@ STR_TOWN_DIRECTORY_CAPTION :{WHITE}Kunnat STR_TOWN_DIRECTORY_NONE :{ORANGE}- Ei mitään - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (kaupunki){BLACK} ({COMMA}) -STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Kaupunkien nimet - keskitä päänäkymä kaupunkiin napsauttamalla nimeä. Ctrl+Klik avaa uuden näkymäikkunan kaupungin sijaintiin +STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Kaupunkien nimet – keskitä päänäkymä kaupunkiin napsauttamalla nimeä. Ctrl+Klik avaa uuden näkymäikkunan kaupungin sijaintiin STR_TOWN_POPULATION :{BLACK}Maailman asukasluku: {COMMA} # Town view window @@ -3088,7 +3088,7 @@ STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Kunta {R STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Meluraja kunnassa: {ORANGE}{COMMA}{BLACK} maks.: {ORANGE}{COMMA} STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Keskitä näkymä kunnan sijaintiin. Ctrl+Klik avaa uuden näkymäikkunan kunnan sijaintiin STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Viranomaiset -STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Näytä tietoja paikallisviranomaisista. +STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Näytä tietoja paikallisviranomaisista STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Vaihda kunnan nimeä. STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}Laajenna @@ -3190,7 +3190,7 @@ STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Virheellin # Station list window STR_STATION_LIST_TOOLTIP :{BLACK}Asemien nimet – napsauta nimeä keskittääksesi päänäkymän asemaan. Ctrl+Klik avaa uuden näkymäikkunan aseman sijaintiin STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Pidä Ctrl-näppäin painettuna valitaksesi useamman kuin yhden vaihtoehdon -STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} asema{P "" a} +STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} – {COMMA} asema{P "" a} STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} STR_STATION_LIST_NONE :{YELLOW}- Ei mitään - @@ -3205,14 +3205,14 @@ STR_STATION_VIEW_EN_ROUTE_FROM :{YELLOW}({CARGO STR_STATION_VIEW_RESERVED :{YELLOW}({CARGO_SHORT} varattu ladattavaksi) STR_STATION_VIEW_ACCEPTS_BUTTON :{BLACK}Ottaa vastaan -STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}Näytä luettelo vastaanotettavasta rahdista. +STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}Näytä luettelo vastaanotettavasta rahdista STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}Vastaanottaa: {WHITE}{CARGO_LIST} STR_STATION_VIEW_EXCLUSIVE_RIGHTS_SELF :{BLACK}Tällä asemalla on kuljetusyksinoikeus tässä kunnassa. STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPANY}{BLACK} osti tämän kunnan kuljetusyksinoikeuden. STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Arviot -STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Näytä aseman arviot. +STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Näytä aseman arviot STR_STATION_VIEW_SUPPLY_RATINGS_TITLE :{BLACK}Kuukausittainen tarjonta ja paikallinen arvio: STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%) @@ -3251,12 +3251,12 @@ STR_CARGO_RATING_OUTSTANDING :Loistava ############ range for rating ends STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Keskitä näkymä aseman sijaintiin. Ctrl+Klik avaa uuden näkymäikkunan aseman sijaintiin -STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Muuta aseman nimi. +STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Muuta aseman nimi -STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Näytä kaikki junat, joilla on tämä asema käskyissään. +STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Näytä kaikki junat, joilla on tämä asema käskyissään STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Näytä kaikki ajoneuvot, joilla on tämä asema käskyissään. -STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Näytä kaikki lentokoneet, joilla on tämä asema käskyissään. -STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Näytä kaikki laivat, joilla on tämä asema käskyissään. +STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Näytä kaikki lentokoneet, joilla on tämä asema käskyissään +STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Näytä kaikki laivat, joilla on tämä asema käskyissään STR_STATION_VIEW_RENAME_STATION_CAPTION :Nimeä asema/lastausalue @@ -3399,10 +3399,10 @@ STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} laiva{P "" a} STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} lentokone{P "" tta} -STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Junat - napsauta junaa saadaksesi tietoja. -STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Ajoneuvot - napsauta ajoneuvoa saadaksesi tietoja. -STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Laivat - napsauta laivaa saadaksesi tietoja. -STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Lentokoneet - napsauta lentokonetta saadaksesi tietoja. +STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Junat – napsauta junaa saadaksesi tietoja +STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Ajoneuvot – napsauta ajoneuvoa saadaksesi tietoja +STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Laivat – napsauta laivaa saadaksesi tietoja +STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Lentokoneet – napsauta lentokonetta saadaksesi tietoja STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Tuotto tänä vuonna: {CURRENCY_LONG} (viime vuonna: {CURRENCY_LONG}) @@ -3438,7 +3438,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Muut ajoneuvot STR_GROUP_DEFAULT_SHIPS :Muut laivat STR_GROUP_DEFAULT_AIRCRAFTS :Muut lentokoneet -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Ryhmät - napsauta ryhmää nähdäksesi kaikki kulkuneuvot tässä ryhmässä. Järjestä ryhmiä vetämällä ja pudottamalla. +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Ryhmät – napsauta ryhmää nähdäksesi kaikki kulkuneuvot tässä ryhmässä. Järjestä ryhmiä vetämällä ja pudottamalla. STR_GROUP_CREATE_TOOLTIP :{BLACK}Luo ryhmä STR_GROUP_DELETE_TOOLTIP :{BLACK}Poista valittu ryhmä STR_GROUP_RENAME_TOOLTIP :{BLACK}Nimeä valittu ryhmä @@ -3549,9 +3549,9 @@ STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} ku STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Junat - vedä kulkuneuvoa vasemmalla hiiren painikkella lisätäksesi/poistaaksesi junasta, oikealla painikkeella lisätietoja. Pidä pohjassa Ctrl-näppäintä toteuttaaksesi molemmat toiminnot seuraavaan ketjuun -STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Ajoneuvot - napsauta ajoneuvoa oikealla hiiren painikkeella saadaksesi tietoja. -STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Laivat - napsauta laivaa oikealla hiiren painikkeella saadaksesi tietoja. -STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lentokoneet - napsauta lentokonetta oikealla hiiren painikkeella saadaksesi tietoja. +STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Ajoneuvot – napsauta ajoneuvoa oikealla hiiren painikkeella saadaksesi tietoja +STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Laivat – napsauta laivaa oikealla hiiren painikkeella saadaksesi tietoja. +STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lentokoneet – napsauta lentokonetta oikealla hiiren painikkeella saadaksesi tietoja STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Vedä yksikkö tähän myydäksesi sen STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Vedä ajoneuvo tähän myydäksesi sen @@ -3614,7 +3614,7 @@ STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Olet my # Engine preview window STR_ENGINE_PREVIEW_CAPTION :{WHITE}Viesti kulkuneuvovalmistajalta -STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Olemme juuri suunnitelleet uuden {STRING} - oletteko kiinnostunut vuoden yksinoikeutetusta kokeilusta, jotta näemme miten tuote suoriutuu ennen kuin julkistamme sen yleiseen käyttöön? +STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Olemme juuri suunnitelleet uuden {STRING} – oletteko kiinnostunut vuoden yksinoikeutetusta kokeilusta, jotta näemme miten tuote suoriutuu ennen kuin julkistamme sen yleiseen käyttöön? STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :veturin STR_ENGINE_PREVIEW_ROAD_VEHICLE :ajoneuvon STR_ENGINE_PREVIEW_AIRCRAFT :lentokoneen @@ -3631,7 +3631,7 @@ STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Hinta: { STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Hinta: {CURRENCY_LONG} Maks. nopeus: {VELOCITY}{}Lentokonetyyppi: {STRING} Toimintamatka: {COMMA} ruutua{}Kapasiteetti: {CARGO_LONG}{}Käyttökustannukset: {CURRENCY_LONG}/v # Autoreplace window -STR_REPLACE_VEHICLES_WHITE :{WHITE}Korvaa {STRING} - {STRING} +STR_REPLACE_VEHICLES_WHITE :{WHITE}Korvaa {STRING} – {STRING} STR_REPLACE_VEHICLE_TRAIN :junia STR_REPLACE_VEHICLE_ROAD_VEHICLE :ajoneuvoja STR_REPLACE_VEHICLE_SHIP :laivoja @@ -3688,30 +3688,30 @@ STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Tämä o STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Tämä ostaa kopion laivasta. Ctrl+Klik jakaa komennot. Shift+Klik näyttää kustannusarvion ostamatta kopiota STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Tämä ostaa kopion lentokoneesta. Ctrl+Klik jakaa komennot. Shift+Klik näyttää kustannusarvion ostamatta kopiota -STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Anna junalle lupa ohittaa punainen opastin. +STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Anna junalle lupa ohittaa punainen opastin -STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Sovita juna kuljettamaan erityyppistä rahtia. -STR_VEHICLE_VIEW_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Muuta ajoneuvo rahtaamaan muuta rahtityyppiä. -STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Sovita rahtilaiva eri rahtityypille. +STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Sovita juna kuljettamaan muuta rahtityyppiä +STR_VEHICLE_VIEW_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Muuta ajoneuvo kuljettamaan muuta rahtityyppiä +STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Sovita laiva eri rahtityypille STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Sovita lentokone eri rahtityypille. -STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Käännä junan suunta. -STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Pakota ajoneuvo kääntymään ympäri. +STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Käännä junan suunta +STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Pakota ajoneuvo kääntymään ympäri STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Näytä junan käskyt. Ctrl+Klik näyttää junan aikataulun STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Näytä ajoneuvon käskyt. Ctrl+Klik näyttää ajoneuvon aikataulun STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Näytä laivan käskyt. Ctrl+Click näyttää laivan aikataulun STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Näytä lentokoneen käskyt. Ctrl+Klik näyttää lentokoneen aikataulun -STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Näytä junan tiedot. -STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Näytä ajoneuvon tiedot. -STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Näytä laivan tiedot. +STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Näytä junan tiedot +STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Näytä ajoneuvon tiedot +STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Näytä laivan tiedot STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Näytä lentokoneen tiedot. -STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Valitun junan toiminnot - napsauta pysäyttääksesi/käynnistääksesi junan. Ctrl+Klik vierittääksesi kohteeseen -STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Nykyisen ajoneuvon toiminnot - napsauta pysäyttääksesi/käynnistääksesi ajoneuvon. Ctrl+Klik vierittääksesi kohteeseen -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Nykyisen laivat toiminnot - napsauta pysäyttääksesi/käynnistääksesi laivan. Ctrl+Klik vierittääksesi kohteeseen -STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Nykyisen lentokoneen toiminnot - napsauta pysäyttääksesi/käynnistääksesi lentokoneen. Ctrl+Klik vierittääksesi kohteeseen +STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Valitun junan toiminnot – napsauta pysäyttääksesi/käynnistääksesi junan. Ctrl+Klik vierittääksesi kohteeseen +STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Nykyisen ajoneuvon toiminnot – napsauta pysäyttääksesi/käynnistääksesi ajoneuvon. Ctrl+Klik vierittääksesi kohteeseen +STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Nykyisen laivat toiminnot – napsauta pysäyttääksesi/käynnistääksesi laivan. Ctrl+Klik vierittääksesi kohteeseen +STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Nykyisen lentokoneen toiminnot – napsauta pysäyttääksesi/käynnistääksesi lentokoneen. Ctrl+Klik vierittääksesi kohteeseen # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Lastataan/puretaan @@ -3795,13 +3795,13 @@ STR_VEHICLE_DETAILS_CARGO_FROM :{LTBLUE}{CARGO_ STR_VEHICLE_DETAILS_CARGO_FROM_MULT :{LTBLUE}{CARGO_LONG} asemalta {STATION} (x{NUM}) STR_VEHICLE_DETAIL_TAB_CARGO :{BLACK}Rahti -STR_VEHICLE_DETAILS_TRAIN_CARGO_TOOLTIP :{BLACK}Näytä kuljetettavan rahdin tiedot. +STR_VEHICLE_DETAILS_TRAIN_CARGO_TOOLTIP :{BLACK}Näytä kuljetettavan rahdin tiedot STR_VEHICLE_DETAIL_TAB_INFORMATION :{BLACK}Tietoa -STR_VEHICLE_DETAILS_TRAIN_INFORMATION_TOOLTIP :{BLACK}Näytä yksikön tiedot. +STR_VEHICLE_DETAILS_TRAIN_INFORMATION_TOOLTIP :{BLACK}Näytä yksikön tiedot STR_VEHICLE_DETAIL_TAB_CAPACITIES :{BLACK}Kapasiteetit STR_VEHICLE_DETAILS_TRAIN_CAPACITIES_TOOLTIP :{BLACK}Näytä kunkin kulkuneuvon kapasiteetti STR_VEHICLE_DETAIL_TAB_TOTAL_CARGO :{BLACK}Rahtia yhteensä -STR_VEHICLE_DETAILS_TRAIN_TOTAL_CARGO_TOOLTIP :{BLACK}Näytä junan kokonaiskapasiteetti, eritelty rahtityypin mukaan. +STR_VEHICLE_DETAILS_TRAIN_TOTAL_CARGO_TOOLTIP :{BLACK}Näytä junan kokonaiskapasiteetti, eritelty rahtityypin mukaan STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}Kapasiteetti: {LTBLUE} @@ -3834,7 +3834,7 @@ STR_ORDERS_CAPTION :{WHITE}{VEHICLE STR_ORDERS_TIMETABLE_VIEW :{BLACK}Aikataulu STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Näytä aikataulu -STR_ORDERS_LIST_TOOLTIP :{BLACK}Käskyt - napsauta käskyä korostaaksesi sen. Ctrl+Klik siirtää näkymän kohteeseen +STR_ORDERS_LIST_TOOLTIP :{BLACK}Käskyt – napsauta käskyä korostaaksesi sen. Ctrl+Klik siirtää näkymän kohteeseen STR_ORDER_INDEX :{COMMA}:{NBSP} STR_ORDER_TEXT :{STRING} {STRING} {STRING} @@ -3915,7 +3915,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :Mene lähimmäl STR_ORDER_GO_TO_NEAREST_HANGAR :Mene lähimmälle varikolle STR_ORDER_CONDITIONAL :Ehdollinen hyppykäsky STR_ORDER_SHARE :Jaa käskyt -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Lisää uusi käsky ennen valittua, tai lisää listan viimeiseksi. Ctrl tekee asemakäskyistä 'lastaa täyteen kaikki rahti', reittipistekäskyistä 'non-stop' ja veturitallikäskyistä 'huolto'. 'Jaa käskyt' jakaa käskyt valitun kulkuneuvon kanssa. Kulkuneuvon napsauttaminen kopioi käskyt kyseisestä kulkuneuvosta. Varikkokäsky poistaa käytöstä automaattisen huollon +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Lisää uuden käskyn ennen valittua, tai lisää listan viimeiseksi. Ctrl:n painalluksella asemakäskyistä tulee ”lastaa täyteen mikä tahansa rahti”, reittipistekäskyistä ”pysähtymättä” ja veturitallikäskyistä ”huolto”. ”Jaa käskyt” tai Ctrl jakaa käskyt valitun kulkuneuvon kanssa. Kulkuneuvon napsauttaminen kopioi käskyt kyseisestä kulkuneuvosta. Varikkokäsky estää kulkuneuvon automaattiset huollot STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Näytä kaikki kulkuneuvot, jotka jakavat nämä käskyt @@ -4055,7 +4055,7 @@ STR_DATE_YEAR_TOOLTIP :{BLACK}Valitse # AI debug window -STR_AI_DEBUG :{WHITE}Tekoälyn/Peliskriptin virheenjäljitys +STR_AI_DEBUG :{WHITE}Tekoälyn/peliskriptin virheenjäljitys STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} (v{NUM}) STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Skriptin nimi STR_AI_DEBUG_SETTINGS :{BLACK}Asetukset @@ -4074,12 +4074,12 @@ STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Näytä STR_AI_GAME_SCRIPT :{BLACK}Peliskripti STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Tarkista peliskriptin loki -STR_ERROR_AI_NO_AI_FOUND :Sopivaa tekoälyä ei löydetty.{}Tämä tekoäly ei tee mitään.{}Voit ladata tekoälyjä 'Online-sisältö'-järjestelmän kautta -STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Yksi käynnissä olevista skripteistä kaatui. Ilmoita tästä skriptin kehittäjälle littäen mukaan kuvankaappaus Tekoälyn/Peliskriptin virheenjäljitys -ikkunasta -STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Tekoälyn/Peliskriptin virheenjäljitysikkuna on vain palvelimen käytettävissä +STR_ERROR_AI_NO_AI_FOUND :Sopivaa tekoälyä ei löydetty.{}Tämä tekoäly ei tee mitään.{}Voit ladata useita tekoälyjä ”online-sisältö” -järjestelmän kautta +STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Yksi käynnissä olevista skripteistä kaatui. Ilmoita tästä skriptin kehittäjälle liittäen mukaan kuvankaappaus Tekoälyn/peliskriptin virheenjäljitys -ikkunasta +STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}Tekoälyn/peliskriptin virheenjäljitysikkuna on vain palvelimen käytettävissä # AI configuration window -STR_AI_CONFIG_CAPTION :{WHITE}Tekoälyn/Peliskriptin määritteet +STR_AI_CONFIG_CAPTION :{WHITE}Tekoälyn/peliskriptin määritteet STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Seuraavassa pelissä ladattava peliskripti STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Seuraavassa pelissä ladattavat tekoälyt STR_AI_CONFIG_HUMAN_PLAYER :Ihmispelaaja @@ -4170,7 +4170,7 @@ STR_ERROR_GAME_SAVE_FAILED :{WHITE}Tallennu STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Tiedostoa ei voi poistaa. STR_ERROR_GAME_LOAD_FAILED :{WHITE}Lataus epäonnistui.{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Sisäinen virhe: {STRING} -STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Viallinen tallennus - {STRING} +STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Viallinen tallennus – {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Tallennus on tehty uudemalla versiolla STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Tiedostoa ei voi lukea STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Tiedostoa ei voi kirjoittaa @@ -4196,13 +4196,13 @@ STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}Mittakaa STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Lähdekartan koon liiallinen muuttaminen ei ole suositeltavaa. Haluatko jatkaa? # Soundset messages -STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Vain tilapäinen äänipaketti löydetty. Jos haluat ääniä, asenna äänipaketti Online-sisältö -palvelulla +STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Vain tilapäinen äänipaketti löydetty. Jos haluat ääniä, asenna äänipaketti online-sisältö -palvelulla # Screenshot related messages STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Suuri kuvankaappaus STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}Kuvankaappauksen tarkkuus tulee olemaan {COMMA} x {COMMA} pikseliä. Kuvankaappauksen ottaminen voi kestää jonkin aikaa. Haluatko jatkaa? -STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Kuvakaappaus tallennettu nimellä '{STRING}'. +STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Kuvakaappaus tallennettu nimellä ”{STRING}”. STR_ERROR_SCREENSHOT_FAILED :{WHITE}Kuvakaappaus epäonnistui! # Error message titles @@ -4212,7 +4212,7 @@ STR_ERROR_MESSAGE_CAPTION_OTHER_COMPANY :{YELLOW}Viesti: # Generic construction errors STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}Kartan reunan ulkopuolella. STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Liian lähellä kartan reunaa. -STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Käteinen ei riitä - tarvitaan {CURRENCY_LONG}. +STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Käteinen ei riitä – tarvitaan {CURRENCY_LONG} STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Tarvitaan tasaista maata. STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Maa viettää väärään suuntaan. STR_ERROR_CAN_T_DO_THIS :{WHITE}Ei onnistu... @@ -4294,7 +4294,7 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... mets STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... voidaan rakentaa vain lumirajan yläpuolelle STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... voidaan rakentaa vain lumirajan alapuolelle -STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Teollisuudelle '{STRING}' ei löytynyt sopivaa paikkaa +STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Teollisuudelle ”{STRING}” ei löytynyt sopivaa paikkaa STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Muuta kartan parametreja saadaksesi paremman kartan # Station construction related errors @@ -4701,25 +4701,25 @@ STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MIGHTYMOVER_CHOO_CHOO :MightyMover Cho STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_DIESEL :Ploddyphut Diesel STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_DIESEL :Powernaut Diesel STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_WILLS_2_8_0_STEAM :Wills 2-8-0 (höyry) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CHANEY_JUBILEE_STEAM :Chaney 'Jubilee' (höyry) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_GINZU_A4_STEAM :Ginzu 'A4' (höyry) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_8P_STEAM :SH '8P' (höyry) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CHANEY_JUBILEE_STEAM :Chaney ”Jubilee” (höyry) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_GINZU_A4_STEAM :Ginzu ”A4” (höyry) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_8P_STEAM :SH ”8P” (höyry) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MANLEY_MOREL_DMU_DIESEL :Manley-Morel DMU (diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_DASH_DIESEL :'Dash' (diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_HENDRY_25_DIESEL :SH/Hendry '25' (diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_UU_37_DIESEL :UU '37' (diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_FLOSS_47_DIESEL :Floss '47' (diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_DASH_DIESEL :”Dash” (diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_HENDRY_25_DIESEL :SH/Hendry ”25” (diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_UU_37_DIESEL :UU ”37” (diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_FLOSS_47_DIESEL :Floss ”47” (diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CS_4000_DIESEL :CS 4000 (diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CS_2400_DIESEL :CS 2400 (diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CENTENNIAL_DIESEL :Centennial (diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KELLING_3100_DIESEL :Kelling 3100 (diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_TURNER_TURBO_DIESEL :Turner Turbo (diesel) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_1000_DIESEL :MJS 1000 (diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_125_DIESEL :SH '125' (diesel) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_30_ELECTRIC :SH '30' (sähkö) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_40_ELECTRIC :SH '40' (sähkö) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_T_I_M_ELECTRIC :'T.I.M.' (sähkö) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_ASIASTAR_ELECTRIC :'AsiaStar' (sähkö) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_125_DIESEL :SH ”125” (diesel) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_30_ELECTRIC :SH ”30” (sähkö) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_40_ELECTRIC :SH ”40” (sähkö) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_T_I_M_ELECTRIC :”T.I.M.” (sähkö) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_ASIASTAR_ELECTRIC :”AsiaStar” (sähkö) STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PASSENGER_CAR :Matkustajavaunu STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_MAIL_VAN :Postivaunu STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COAL_CAR :Hiilivaunu @@ -4747,8 +4747,8 @@ STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOY_VAN :Leluvaunu STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BATTERY_TRUCK :Paristovaunu STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FIZZY_DRINK_TRUCK :Sihijuomavaunu STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PLASTIC_TRUCK :Muovivaunu -STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :'X2001' (sähkö) -STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_MILLENNIUM_Z1_ELECTRIC :'Millennium Z1' (sähkö) +STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :”X2001” (sähkö) +STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_MILLENNIUM_Z1_ELECTRIC :”Millennium Z1” (sähkö) STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_WIZZOWOW_Z99 :Wizzowow Z99 STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PASSENGER_CAR :Matkustajavaunu STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_MAIL_VAN :Postivaunu @@ -4777,10 +4777,10 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOY_VAN :Leluvaunu STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BATTERY_TRUCK :Paristovaunu STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FIZZY_DRINK_TRUCK :Sihijuomavaunu STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PLASTIC_TRUCK :Muovivaunu -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 'Leviathan' (sähkö) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV2_CYCLOPS_ELECTRIC :Lev2 'Cyclops' (sähkö) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV3_PEGASUS_ELECTRIC :Lev3 'Pegasus' (sähkö) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV4_CHIMAERA_ELECTRIC :Lev4 'Chimaera' (sähkö) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 ”Leviathan” (sähkö) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV2_CYCLOPS_ELECTRIC :Lev2 ”Cyclops” (sähkö) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV3_PEGASUS_ELECTRIC :Lev3 ”Pegasus” (sähkö) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV4_CHIMAERA_ELECTRIC :Lev4 ”Chimaera” (sähkö) STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_WIZZOWOW_ROCKETEER :Wizzowow Rocketeer STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PASSENGER_CAR :Matkustajavaunu STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_MAIL_VAN :Postivaunu diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 2e0a9b78f0..e0e8124234 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -314,6 +314,8 @@ STR_COLOUR_ORANGE :Помаран STR_COLOUR_BROWN :Коричневий STR_COLOUR_GREY :Сірий STR_COLOUR_WHITE :Білий +STR_COLOUR_RANDOM :Випадково +STR_COLOUR_DEFAULT :Звичайний # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}миль/год @@ -589,6 +591,7 @@ STR_TOOLBAR_SOUND_MUSIC :Звук/Муз ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Останнє повідомлення STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Історія повідомлень +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Видалити всі повідомлення ############ range ends here ############ range for about menu starts @@ -600,6 +603,7 @@ STR_ABOUT_MENU_SCREENSHOT :Знімок е STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Знімок екрану з максимальним збільшенням STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Знімок екрану зі стандартним збільшенням STR_ABOUT_MENU_GIANT_SCREENSHOT :Знімок всієї карти +STR_ABOUT_MENU_SHOW_FRAMERATE :Швидкість генерації гри STR_ABOUT_MENU_ABOUT_OPENTTD :Про гру 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Вирівнювання спрайтів STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Вкл./відкл. обмежуючі рамки @@ -778,6 +782,7 @@ STR_MUSIC_RULER_MARKER :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Немає доступної музики STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Доріжка STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Заголовок @@ -798,11 +803,14 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Вкл./ STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Показує вікно вибору музичної програми # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Музична програма - '{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Назва доріжки STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Програма - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Очистити +STR_PLAYLIST_CHANGE_SET :{BLACK}Змінити набір STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Очистити програму (тільки для Набору 1 або Набору 2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Виберіть інший набір музичного оформлення STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Виберіть доріжку, щоб додати до програми (тільки для Набору 1 або Набору 2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Клацніть мишою на мелодії для її видалення зі списку (лише Набір1 та Набір2) @@ -938,6 +946,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Керівник) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} субсидував спорудження нового міста {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Нове місто {TOWN} побудовано! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Будується {STRING} біля {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Насаджено {STRING} біля {TOWN}! @@ -1005,9 +1014,9 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC # Extra view window STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Вікно {COMMA} -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Копіювати до вікна +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Змінити вікно STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Копіювати місцеположення з основного екрану до цього вікна -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Вставити з вікна +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Вставити в головне вікно STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Перейти на основному екрані до цього місця # Game options window @@ -1051,6 +1060,7 @@ 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_MXN :Мексиканське песо (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Сторона руху транспорту @@ -1113,7 +1123,12 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Нормаль STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Подвійний розмір STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Почетверний розмір +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Розмір шрифту +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Виберть розмір шрифту інтерфейсу +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Нормальний +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Подвійний розмір +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Почетверний розмір STR_GAME_OPTIONS_BASE_GRF :{BLACK}Базовий набір графіки STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Оберіть, яку основну графіку використовувати @@ -1297,6 +1312,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Дозволи STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Можливість змінювати ландшафт під будівлями та дорогами без необхідності їх зносу STR_CONFIG_SETTING_CATCHMENT :Більш реалістічні зони покриття станцій: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :При включенні розмір зони покриття станції залежить від її типу та розміру +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Підприємства з власними станціями обслуговують станції гравців: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Якщо увімкнено - підприємства, що мають власні станції завантаження (наприклад, нафтові платформ), зможуть обслуговуватися також і збудованими поруч станціями гравців.{}При відключенні - підприємства будуть виконувати завантаження тільки через свої внутрішні станції, а ці станції будуть обслуговувати лише своє підприємство. STR_CONFIG_SETTING_EXTRADYNAMITE :Дозволити видаляти більше міських будівель: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :При включенні видалення міських будівель та інфраструктури стає біль простішим STR_CONFIG_SETTING_TRAIN_LENGTH :Максимальна довжина потягів: {STRING} @@ -1313,7 +1330,7 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Налашту STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Крутизна схилів для дорожнього транспорту: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Налаштування крутизни схилів для дорожнього транспорту. Чим вище значення, тим складніше підйом на схилах. -STR_CONFIG_SETTING_FORBID_90_DEG :Заборонити поїздам і кораблям повертати на 90°: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG :Заборонити поїздам повертати на 90°: {STRING} STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :При включенні прямокутні перетини шляхів не будуть вважатися поворотами. Для повороту необходно прокладати шляхи під кутом 45°. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Станції можуть складатися з не суміжних частин: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Дозволяє об'єднання в одну станцію частин, що не примикають одна до одної. Щоб приєднати нову станцію до існуючої необхідно використовувати Ctrl+Click при будівництві. @@ -1370,7 +1387,7 @@ STR_CONFIG_SETTING_PLANE_SPEED :Множник STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Налаштування співвідношення швідкості повітряного транспорту та швидкості інших видів транспорту з метою зменьшення високих прибутків від авіації. STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Частота повітряних катастроф: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Налаштування частоти повітряних катастроф +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Налаштування частоти повітряних катастроф.{}* Великі літаки мають більший ризик катастрофив малих аеропортах STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Немає STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Низька STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Нормальна @@ -1382,6 +1399,8 @@ 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 :Колір компанії: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Виберіть початковий колір для компанії STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Аеропорти не застарівають: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :При включенні кожен аеропорт буде доступним для будівництва безстроково після його впровадження. @@ -1466,6 +1485,12 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Колір по STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :зелений STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :темнозелений STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :фіолетовий +STR_CONFIG_SETTING_SCROLLMODE :Переміщення вікна обзору: {STRING} +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Спосіб пересування ігрового поля +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Переміщувати ПКМ, зафіксувавши курсор +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Переміщувати карту ПКМ, зафіксувавши курсор +STR_CONFIG_SETTING_SCROLLMODE_RMB :Переміщувати карту ПКМ +STR_CONFIG_SETTING_SCROLLMODE_LMB :Переміщувати ЛКМ STR_CONFIG_SETTING_SMOOTH_SCROLLING :Плавна прокрутка у вікні: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Налаштування способу прокрутки основного екрану при клацанні мишою по зменшенній карті, або інших діях, що призводять до переміщення по карті (кнопки "Оглянути", тощо). При включенні опції переміщення карти відбувається плавно. При виключенні - відбувається моментальне переміщення в необхідну точку STR_CONFIG_SETTING_MEASURE_TOOLTIP :Показувати підказки про розміри під час будівництва: {STRING} @@ -1497,6 +1522,8 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Команда+ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+клац мишою 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 :Оберіть проміжок між автоматичними збереженнями гри @@ -1686,6 +1713,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Дозволя 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 :Кількість вантажів та пасажирів у містах: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Скільки вантажів генерується будинками в містах відносно населення.{}Квадратична залежність: Вдвічі більше місто генерує вчетверо більше вантажів.{}Лінійна: Вдвічі більше місто генерує вдвічі більше вантажів. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Квадратична(оригінальна) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :лінійна залежність STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Поява дерев під час гри: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Налаштування випадкової появи дерев на карті в процесі гри. Ця настройка також впливає на відповідні підприємства, такі як лісопилки. @@ -1886,6 +1917,7 @@ STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Пере STR_INTRO_TOOLTIP_SCRIPT_SETTINGS :{BLACK}Показати налаштування AI / Ігрового Скрипта STR_INTRO_TOOLTIP_QUIT :{BLACK}Вийти з OpenTTD +STR_INTRO_BASESET :{BLACK}В обраному наборі базової графіки немає {NUM} спрайт{P а ів ів}. Будь ласка, оновіть набір графіки. STR_INTRO_TRANSLATION :{BLACK}Переклад має {NUM} неперекладених рядків. Зареєструйтесь як перекладач вашої мови та покращіть OpenTTD. Детальніше читайте в readme.txt. # Quit window @@ -1928,6 +1960,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Змін STR_CHEAT_SETUP_PROD :{LTBLUE}Дозволити зміну рівня виробництва: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}Кольори компанії «{COMPANY}» STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Показати загальне фарбування STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Показати фарбування поїздів @@ -2187,6 +2220,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Роз' STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Сервер захищено паролем. Введіть пароль STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Компанія захищена паролем. Введіть пароль +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Список клієнтів # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Список клієнтів @@ -2402,6 +2436,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}не використовується @@ -2489,9 +2524,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Комб STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Розширений сигнал (електричний){}Розширений сигнал дозволяє більше ніж одному поїзду одночасно заходити до блоку сигналів, якщо поїзд може зарезервувати шлях до безпечної точки зупинки. Розширені сигнали дозволяють проїжджати їх з обох сторін STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Односторонній розширений сигнал (електричний){}Розширений сигнал дозволяє більше ніж одному поїзду одночасно заходити до блоку сигналів, якщо поїзд може зарезервувати шлях до безпечної точки зупинки. Односторонні розширені сигнали не дозволяють вїжджати з іншої сторони STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Заміна сигналів{}Коли обрано, натискання на існуючому сигналі замінить його на обраний тип і варіант сигналу, CTRL+натискання замінить існуючий варіант. Утримуйте Shift для показу витрат на заміну -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Частота сигналів при перетаскуванні -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Зменшити частоту сигналів -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Збільшити частоту сигналів +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Відстань між сигналами при перетаскуванні +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Зменшити відстань між сигналами +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Збільшити відстань між сигналами # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Виберіть міст @@ -2712,6 +2747,7 @@ 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_RAIL_SPEED_LIMIT :{BLACK}Ліміт швидкості залізниці: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Ліміт швидкості авто: {LTBLUE}{VELOCITY} @@ -2724,29 +2760,29 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Поле STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Засніжена земля STR_LAI_CLEAR_DESCRIPTION_DESERT :Пустеля -STR_LAI_RAIL_DESCRIPTION_TRACK :Звичайна колія -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Звичайна колія з блок-сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Звичайна колія з пресигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Звичайна колія з вихідними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Звичайна колія з комбосигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Звичайна колія з маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Звичайна колія з односторонніми маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Звичайна колія з блок-сигналами і пресигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Звичайна колія з блок-сигналами і вихідними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Звичайна колія з блок-сигналами і комбосигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Звичайна колія з блок-сигналами та маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Звичайна колія з блок-сигналами та одност. маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Звичайна колія з пресигналами і вихідними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Звичайна колія з пресигналами і комбосигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Звичайна колія з пресигналами і маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Звичайна колія з пресигналами і одност. маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Звичайна колія з вихідними сигналами та комбосигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Звичайна колія з вихідними та маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Звичайна колія з вихідними та одност. маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Звичайна колія з комбосигналами і маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Звичайна колія з комбосигналами та одност. маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Звичайна колія з маршрутними та одност. маршрутними сигналами -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Звичайна колія залізничне депо +STR_LAI_RAIL_DESCRIPTION_TRACK :Залізнична колія +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Залізнична колія з блок-сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Залізнична колія з пресигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Залізнична колія з вихідними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Залізнична колія з комбосигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Залізнична колія з маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Залізнична колія з односторонніми маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Залізнична колія з блок-сигналами і пресигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Залізнична колія з блок-сигналами і вихідними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Залізнична колія з блок-сигналами і комбосигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Залізнична колія з блок-сигналами та маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Залізнична колія з блок-сигналами та одност. маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Залізнична колія з пресигналами і вихідними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Залізнична колія з пресигналами і комбосигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Залізнична колія з пресигналами і маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Залізнична колія з пресигналами і одност. маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Залізнична колія з вихідними сигналами та комбосигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Залізнична колія з вихідними та маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Залізнична колія з вихідними та одност. маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Залізнична колія з комбосигналами і маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Залізнична колія з комбосигналами та одност. маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Залізнична колія з маршрутними та одност. маршрутними сигналами +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Залізничне депо STR_LAI_ROAD_DESCRIPTION_ROAD :Дорога STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Дорога з вуличними ліхтарями @@ -2813,13 +2849,58 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 команда 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_GAMELOOP_TOOLTIP :{BLACK}Кількість ігрових циклів в секунду. +STR_FRAMERATE_RATE_BLITTER :{BLACK}Виведення на екран: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Кількість кадрів побудованих за секунду +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Наявна швидкість гри: {DECIMAL}x +STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK} Як швидко гра біжить в даний час, в порівнянні з очікуваною швидкістю при звичайній швидкості моделювання. +STR_FRAMERATE_CURRENT :{WHITE}Зараз +STR_FRAMERATE_AVERAGE :{WHITE}Середнє STR_FRAMERATE_DATA_POINTS :{BLACK}Дані отримано з {COMMA} вимірюван {P "ня" "нь" "нь" } -STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} мс STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} мс +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} кадрів/сек STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} кадр{P "" "и" "ів"}/сек +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} кадрів/сек +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} мс +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} с ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{BLACK}Швидкість прорахунку гри: +STR_FRAMERATE_GL_ECONOMY :{BLACK} Розрахунок вантажів: +STR_FRAMERATE_GL_TRAINS :{BLACK} Рух поїздів: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Рух автомобілів: +STR_FRAMERATE_GL_SHIPS :{BLACK} Рух кораблів: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Рух літаків: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Зміни на карті: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Затримка графу розподілу: +STR_FRAMERATE_DRAWING :{BLACK}Побудова зображень: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Додаткові вікна: +STR_FRAMERATE_VIDEO :{BLACK}Виведення на екран: +STR_FRAMERATE_SOUND :{BLACK}Обробка звуків: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} Виконання скриптів: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Ігровий Скрипт: +STR_FRAMERATE_AI :{BLACK} ШІ {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Прорахунок ігрового циклу +STR_FRAMETIME_CAPTION_GL_ECONOMY :Розрахунок обсягу вантажів +STR_FRAMETIME_CAPTION_GL_TRAINS :Прорахунок поїздів +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Рух автомобілів +STR_FRAMETIME_CAPTION_GL_SHIPS :Рух кораблів +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Прорахунок літаків +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Розрахунок змін на карті +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Затримка графу розподілу +STR_FRAMETIME_CAPTION_DRAWING :Відображення графіки +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Додаткові вікна перегляду +STR_FRAMETIME_CAPTION_VIDEO :Виведення на екран +STR_FRAMETIME_CAPTION_SOUND :Обробка звуку +STR_FRAMETIME_CAPTION_ALLSCRIPTS :Час виконання скриптів +STR_FRAMETIME_CAPTION_GAMESCRIPT :Час виконання ігрового скрипту +STR_FRAMETIME_CAPTION_AI :ШІ {NUM} {STRING} ############ End of leave-in-this-order @@ -2845,6 +2926,9 @@ 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_OSKTITLE :{BLACK}Введіть назву файла збереженої гри @@ -2962,7 +3046,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Верс STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Мінімальна підтримувана версія: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5сума: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Палітра: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Звичайна (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Стандартна (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Застаріла +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Застаріла (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Параметри: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :нема STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Немає доступної інформації STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Таких файлів не знайдено @@ -3043,6 +3132,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Вихід за STR_NEWGRF_ERROR_GRM_FAILED :Недоступні необхідні ресурси GRF (спрайт {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} був вимкнений {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Некоректний або невідомий формат розміщення спрайтів (спрайт {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Дуже багато елементів у списку значень (спрайт {3:NUM}, властивість {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Невірна обробка продукції підприємства (спрайт {3:NUM}, "{1:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Обережно! @@ -3107,6 +3198,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Введ STR_TOWN_DIRECTORY_CAPTION :{WHITE}Міста STR_TOWN_DIRECTORY_NONE :{ORANGE}- немає - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Мегаполіс){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Назви міст - натисніть на назву, щоб показати місто у центрі екрану. Ctrl+клац мишою відкриває нове вікно з видом на місто STR_TOWN_POPULATION :{BLACK}Населення світу: {COMMA} @@ -3114,6 +3206,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 :{ORANGE}{STRING}{RED} потрібно STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} потрібно взимку @@ -3166,6 +3259,7 @@ 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_TITLE :{BLACK}Глобальні цілі: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- нема - @@ -3214,6 +3308,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Нати # Story book window STR_STORY_BOOK_CAPTION :{WHITE}Історія {COMPANY} STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Світова історія +STR_STORY_BOOK_SPECTATOR :Всесвітня історія STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Стор. {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Перейти до сторінки, вибраної в цьому списку. @@ -3418,7 +3513,13 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Пока STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Обсяг виробництва: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Підприємство оголосило про близьке закриття! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Потребує: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_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_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} очікує{STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}Змінити виробництво (кратне 8, до 2040) STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Змінити обсяг виробництва (до 800%) @@ -3472,6 +3573,7 @@ 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_LIVERY_TOOLTIP :{BLACK}Змінити колір вибраної групи STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Клацніть мишою, щоб захистити групу від глобальної автозаміни STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Видалити групу @@ -3482,6 +3584,10 @@ 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 STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Новий неелектрифікований поїзд @@ -3511,9 +3617,11 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Міст 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} клітинок +STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Тип літака: {GOLD}{STRING} STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Список поїздів. Клацніть на поїзд для інформації. Ctrl+клац мишою вимикає показ типу транспорту STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Список автомобілів. Клацніть на авто для отримання інформації. Ctrl+клац мишою вимикає показ типу транспорту @@ -3648,6 +3756,10 @@ STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :магнітн 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_CAP_RUNCOST :{BLACK}Вартість: {CURRENCY_LONG} Макс. швидкість: {VELOCITY}{}Тип: {STRING}{}Місткість: {CARGO_LONG}, {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} клітин{P ка ки ок}Місткість: {CARGO_LONG}, {CARGO_LONG}{}Експлуатація: {CURRENCY_LONG}/рік +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Вартість: {CURRENCY_LONG} Макс. швидкість: {VELOCITY}{}Тип: {STRING} Дальність: {COMMA} клітин{P ка ки ок}Місткість: {CARGO_LONG}{}Експлуатація: {CURRENCY_LONG}/рік # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Оновити {STRING} - {STRING} @@ -3677,6 +3789,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_HELP_RAILTYPE :{BLACK}Виберіть тип колії, для якого ви збираєтесь оновити потяги STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Показує, яким потягом буде замінено потяг, вибраний ліворуч @@ -3769,6 +3882,8 @@ STR_VEHICLE_INFO_AGE :{COMMA} р{P і STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} р{P ік оки оків} ({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} клітин{P ка ки ок } 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} @@ -3902,6 +4017,7 @@ STR_ORDER_CONDITIONAL_AGE :Вік (рок STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Потребує техогляду STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Завжди STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Залишок строку служби (років) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Максимальна надійність STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Як порівнювати дані транспорту з заданим значенням STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :дорівнює @@ -4334,6 +4450,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... ця STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... дорога не в тому напрямку STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... проїзні зупинки не можуть мати поворотів STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... проїзні зупинки не можуть мати перехресть +STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... дорога одностороння або заблокована # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Не можна зруйнувати частину станції... @@ -4586,6 +4703,7 @@ STR_BASESOUNDS_WIN_DESCRIPTION :Оригіна STR_BASESOUNDS_NONE_DESCRIPTION :Порожній набір звуків. STR_BASEMUSIC_WIN_DESCRIPTION :Оригінальна музика з Transport Tycoon Deluxe Windows edition. STR_BASEMUSIC_DOS_DESCRIPTION :Оригінальна музика Transport Tycoon Deluxe(DOS) +STR_BASEMUSIC_TTO_DESCRIPTION :Оригінальна музика Transport Tycoon Deluxe(DOS) STR_BASEMUSIC_NONE_DESCRIPTION :Порожній набір музики. ##id 0x2000 From dea7f078f453fd80a8c399cde9ad998f59d5ace8 Mon Sep 17 00:00:00 2001 From: Gabda Date: Tue, 12 Mar 2019 20:12:34 +0100 Subject: [PATCH 491/622] Codechange: Update town sign on population change only when population is shown (#7368) --- src/town_cmd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index ee2f49d930..0ae79367cc 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -423,7 +423,7 @@ static void ChangePopulation(Town *t, int mod) { t->cache.population += mod; InvalidateWindowData(WC_TOWN_VIEW, t->index); // Cargo requirements may appear/vanish for small populations - t->UpdateVirtCoord(); + if (_settings_client.gui.population_in_label) t->UpdateVirtCoord(); InvalidateWindowData(WC_TOWN_DIRECTORY, 0, 1); } From ba3d7122dfcbbee750dad6559b8c354bec873505 Mon Sep 17 00:00:00 2001 From: "Johannes E. Krause" Date: Tue, 12 Mar 2019 13:09:33 +0100 Subject: [PATCH 492/622] Cleanup: Remove questionable syntax in station rating calculation --- src/station_cmd.cpp | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index f7eb353a09..ec4f6739e8 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -3375,27 +3375,25 @@ static void UpdateStationRating(Station *st) byte waittime = ge->time_since_pickup; if (st->last_vehicle_type == VEH_SHIP) waittime >>= 2; - (waittime > 21) || - (rating += 25, waittime > 12) || - (rating += 25, waittime > 6) || - (rating += 45, waittime > 3) || - (rating += 35, true); + if (waittime <= 21) rating += 25; + if (waittime <= 12) rating += 25; + if (waittime <= 6) rating += 45; + if (waittime <= 3) rating += 35; - (rating -= 90, ge->max_waiting_cargo > 1500) || - (rating += 55, ge->max_waiting_cargo > 1000) || - (rating += 35, ge->max_waiting_cargo > 600) || - (rating += 10, ge->max_waiting_cargo > 300) || - (rating += 20, ge->max_waiting_cargo > 100) || - (rating += 10, true); + rating -= 90; + if (ge->max_waiting_cargo <= 1500) rating += 55; + if (ge->max_waiting_cargo <= 1000) rating += 35; + if (ge->max_waiting_cargo <= 600) rating += 10; + if (ge->max_waiting_cargo <= 300) rating += 20; + if (ge->max_waiting_cargo <= 100) rating += 10; } if (Company::IsValidID(st->owner) && HasBit(st->town->statues, st->owner)) rating += 26; byte age = ge->last_age; - (age >= 3) || - (rating += 10, age >= 2) || - (rating += 10, age >= 1) || - (rating += 13, true); + if (age < 3) rating += 10; + if (age < 2) rating += 10; + if (age < 1) rating += 13; { int or_ = ge->rating; // old rating From 234f1007f7a6e81f38ddd1de06c6e1727cb9da76 Mon Sep 17 00:00:00 2001 From: "Johannes E. Krause" Date: Tue, 12 Mar 2019 14:55:56 +0100 Subject: [PATCH 493/622] Cleanup: Remove questionable syntax in HQ size calculation --- src/object_cmd.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp index 9f03813dfb..0b18dd4b14 100644 --- a/src/object_cmd.cpp +++ b/src/object_cmd.cpp @@ -158,12 +158,11 @@ void UpdateCompanyHQ(TileIndex tile, uint score) { if (tile == INVALID_TILE) return; - byte val; - (val = 0, score < 170) || - (val++, score < 350) || - (val++, score < 520) || - (val++, score < 720) || - (val++, true); + byte val = 0; + if (score >= 170) val++; + if (score >= 350) val++; + if (score >= 520) val++; + if (score >= 720) val++; while (GetCompanyHQSize(tile) < val) { IncreaseCompanyHQSize(tile); From 21ec3e55314505153c363ed52857306d595f55d3 Mon Sep 17 00:00:00 2001 From: "Johannes E. Krause" Date: Tue, 12 Mar 2019 15:05:00 +0100 Subject: [PATCH 494/622] Cleanup: Remove questionable syntax in GetOrderCmdFromTile --- src/order_gui.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 81350deb74..e50247e275 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -395,11 +395,13 @@ static Order GetOrderCmdFromTile(const Vehicle *v, TileIndex tile) if (st->owner == _local_company || st->owner == OWNER_NONE) { byte facil; - (facil = FACIL_DOCK, v->type == VEH_SHIP) || - (facil = FACIL_TRAIN, v->type == VEH_TRAIN) || - (facil = FACIL_AIRPORT, v->type == VEH_AIRCRAFT) || - (facil = FACIL_BUS_STOP, v->type == VEH_ROAD && RoadVehicle::From(v)->IsBus()) || - (facil = FACIL_TRUCK_STOP, 1); + switch (v->type) { + case VEH_SHIP: facil = FACIL_DOCK; break; + case VEH_TRAIN: facil = FACIL_TRAIN; break; + case VEH_AIRCRAFT: facil = FACIL_AIRPORT; break; + case VEH_ROAD: facil = RoadVehicle::From(v)->IsBus() ? FACIL_BUS_STOP : FACIL_TRUCK_STOP; break; + default: NOT_REACHED(); + } if (st->facilities & facil) { order.MakeGoToStation(st_index); if (_ctrl_pressed) order.SetLoadType(OLF_FULL_LOAD_ANY); From e6798ffdca7d374ad23e35f56017a6777cf527ce Mon Sep 17 00:00:00 2001 From: "Johannes E. Krause" Date: Tue, 12 Mar 2019 18:08:13 +0100 Subject: [PATCH 495/622] Cleanup: Remove questionable syntax in town rating display --- src/town_gui.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 17449854d6..bc322b08f2 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -154,15 +154,14 @@ public: SetDParam(1, c->index); int r = this->town->ratings[c->index]; - StringID str; - (str = STR_CARGO_RATING_APPALLING, r <= RATING_APPALLING) || // Apalling - (str++, r <= RATING_VERYPOOR) || // Very Poor - (str++, r <= RATING_POOR) || // Poor - (str++, r <= RATING_MEDIOCRE) || // Mediocore - (str++, r <= RATING_GOOD) || // Good - (str++, r <= RATING_VERYGOOD) || // Very Good - (str++, r <= RATING_EXCELLENT) || // Excellent - (str++, true); // Outstanding + StringID str = STR_CARGO_RATING_APPALLING; + if (r > RATING_APPALLING) str++; + if (r > RATING_VERYPOOR) str++; + if (r > RATING_POOR) str++; + if (r > RATING_MEDIOCRE) str++; + if (r > RATING_GOOD) str++; + if (r > RATING_VERYGOOD) str++; + if (r > RATING_EXCELLENT) str++; SetDParam(2, str); if (this->town->exclusivity == c->index) { From 43ced57794ca5546e5f5a18eb82990d20845967c Mon Sep 17 00:00:00 2001 From: "Johannes E. Krause" Date: Tue, 12 Mar 2019 20:41:37 +0100 Subject: [PATCH 496/622] Cleanup: Remove questionable syntax in track drawing --- src/rail_cmd.cpp | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index aa4e7ab551..1c07932cd3 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -2285,23 +2285,30 @@ static void DrawTrackBits(TileInfo *ti, TrackBits track) image = _track_sloped_sprites[ti->tileh - 1] + rti->base_sprites.track_y; } else { /* track on flat ground */ - (image = rti->base_sprites.track_y, track == TRACK_BIT_Y) || - (image++, track == TRACK_BIT_X) || - (image++, track == TRACK_BIT_UPPER) || - (image++, track == TRACK_BIT_LOWER) || - (image++, track == TRACK_BIT_RIGHT) || - (image++, track == TRACK_BIT_LEFT) || - (image++, track == TRACK_BIT_CROSS) || + switch (track) { + /* single track, select combined track + ground sprite*/ + case TRACK_BIT_Y: image = rti->base_sprites.track_y; break; + case TRACK_BIT_X: image = rti->base_sprites.track_y + 1; break; + case TRACK_BIT_UPPER: image = rti->base_sprites.track_y + 2; break; + case TRACK_BIT_LOWER: image = rti->base_sprites.track_y + 3; break; + case TRACK_BIT_RIGHT: image = rti->base_sprites.track_y + 4; break; + case TRACK_BIT_LEFT: image = rti->base_sprites.track_y + 5; break; + case TRACK_BIT_CROSS: image = rti->base_sprites.track_y + 6; break; - (image = rti->base_sprites.track_ns, track == TRACK_BIT_HORZ) || - (image++, track == TRACK_BIT_VERT) || + /* double diagonal track, select combined track + ground sprite*/ + case TRACK_BIT_HORZ: image = rti->base_sprites.track_ns; break; + case TRACK_BIT_VERT: image = rti->base_sprites.track_ns + 1; break; - (junction = true, false) || - (image = rti->base_sprites.ground, (track & TRACK_BIT_3WAY_NE) == 0) || - (image++, (track & TRACK_BIT_3WAY_SW) == 0) || - (image++, (track & TRACK_BIT_3WAY_NW) == 0) || - (image++, (track & TRACK_BIT_3WAY_SE) == 0) || - (image++, true); + /* junction, select only ground sprite, handle track sprite later */ + default: + junction = true; + if ((track & TRACK_BIT_3WAY_NE) == 0) { image = rti->base_sprites.ground; break; } + if ((track & TRACK_BIT_3WAY_SW) == 0) { image = rti->base_sprites.ground + 1; break; } + if ((track & TRACK_BIT_3WAY_NW) == 0) { image = rti->base_sprites.ground + 2; break; } + if ((track & TRACK_BIT_3WAY_SE) == 0) { image = rti->base_sprites.ground + 3; break; } + image = rti->base_sprites.ground + 4; + break; + } } switch (rgt) { From 6b92b83128d92e5b064649922780eadeee9c31ba Mon Sep 17 00:00:00 2001 From: peter1138 Date: Wed, 13 Mar 2019 07:29:11 +0000 Subject: [PATCH 497/622] Fix #7372: FindStationsAroundTiles() with caching returns no result for industry tiles. Currently this can only be triggered by NewGRF house tiles querying for cargo acceptance history of nearby stations (var 0x64) with a tile offset, and providing an offset that happens to point to an industry tile. This serves no useful purpose. --- src/station_cmd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index ec4f6739e8..df71da127c 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -3829,7 +3829,7 @@ void FindStationsAroundTiles(const TileArea &location, StationList *stations, bo /* Industries and towns maintain a list of nearby stations */ if (IsTileType(location.tile, MP_INDUSTRY)) { /* Industry nearby stations are already filtered by catchment. */ - stations = &Industry::GetByTile(location.tile)->stations_near; + *stations = Industry::GetByTile(location.tile)->stations_near; return; } else if (IsTileType(location.tile, MP_HOUSE)) { /* Town nearby stations need to be filtered per tile. */ From b00a861467b9c7ea62bae2df140975f0838e0ea7 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Wed, 13 Mar 2019 08:14:15 +0000 Subject: [PATCH 498/622] Codechange: Make FindStationsAroundTile() out-parameter stations const to prevent incorrect modification. --- src/station_cmd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index df71da127c..72c70456f7 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -3820,10 +3820,10 @@ static void AddNearbyStationsByCatchment(TileIndex tile, StationList *stations, * Find all stations around a rectangular producer (industry, house, headquarter, ...) * * @param location The location/area of the producer - * @param stations The list to store the stations in + * @param[out] stations The list to store the stations in * @param use_nearby Use nearby station list of industry/town associated with location.tile */ -void FindStationsAroundTiles(const TileArea &location, StationList *stations, bool use_nearby) +void FindStationsAroundTiles(const TileArea &location, StationList * const stations, bool use_nearby) { if (use_nearby) { /* Industries and towns maintain a list of nearby stations */ From fc5f67123acfd977cd74d5e5a8d2d13a049b357a Mon Sep 17 00:00:00 2001 From: peter1138 Date: Sun, 10 Mar 2019 17:45:15 +0000 Subject: [PATCH 499/622] Fix e66cec8f86: Permit loading of industry production callback with invalid cargo type. It is only an error if the invalid result is actually used. This will be silently ignored at the moment. It is still an error if a duplicate cargo type is returned. --- src/lang/english.txt | 3 ++- src/newgrf.cpp | 12 ++++++++++-- src/newgrf_industries.cpp | 11 +++++++++++ src/newgrf_spritegroup.h | 2 +- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 8bcfd95885..b6146718f2 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -3002,7 +3002,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Requested GRF r STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:RAW_STRING} was disabled by {2:RAW_STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Invalid/unknown sprite layout format (sprite {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Too many elements in property value list (sprite {3:NUM}, property {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :Invalid industry production callback (sprite {3:NUM}, "{1:RAW_STRING}") +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Invalid industry production callback (sprite {3:NUM}, "{2:RAW_STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Caution! @@ -3034,6 +3034,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF ' STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Cargo/refit information for '{1:ENGINE}' differs from purchase list after construction. This might cause autorenew/-replace to fail refitting correctly STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' caused an endless loop in the production callback STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback {1:HEX} returned unknown/invalid result {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' returned invalid cargo type in the production callback at {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : diff --git a/src/newgrf.cpp b/src/newgrf.cpp index ff10287981..13d1377d07 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -5005,7 +5005,12 @@ static void NewSpriteGroup(ByteReader *buf) for (uint i = 0; i < group->num_input; i++) { byte rawcargo = buf->ReadByte(); CargoID cargo = GetCargoTranslation(rawcargo, _cur.grffile); - if (std::find(group->cargo_input, group->cargo_input + i, cargo) != group->cargo_input + i) { + if (cargo == CT_INVALID) { + /* The mapped cargo is invalid. This is permitted at this point, + * as long as the result is not used. Mark it invalid so this + * can be tested later. */ + group->version = 0xFF; + } else if (std::find(group->cargo_input, group->cargo_input + i, cargo) != group->cargo_input + i) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_INDPROD_CALLBACK); error->data = stredup("duplicate input cargo"); return; @@ -5022,7 +5027,10 @@ static void NewSpriteGroup(ByteReader *buf) for (uint i = 0; i < group->num_output; i++) { byte rawcargo = buf->ReadByte(); CargoID cargo = GetCargoTranslation(rawcargo, _cur.grffile); - if (std::find(group->cargo_output, group->cargo_output + i, cargo) != group->cargo_output + i) { + if (cargo == CT_INVALID) { + /* Mark this result as invalid to use */ + group->version = 0xFF; + } else if (std::find(group->cargo_output, group->cargo_output + i, cargo) != group->cargo_output + i) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_INDPROD_CALLBACK); error->data = stredup("duplicate output cargo"); return; diff --git a/src/newgrf_industries.cpp b/src/newgrf_industries.cpp index de388c0234..980059cabb 100644 --- a/src/newgrf_industries.cpp +++ b/src/newgrf_industries.cpp @@ -605,6 +605,17 @@ void IndustryProductionCallback(Industry *ind, int reason) if (tgroup == NULL || tgroup->type != SGT_INDUSTRY_PRODUCTION) break; const IndustryProductionSpriteGroup *group = (const IndustryProductionSpriteGroup *)tgroup; + if (group->version == 0xFF) { + /* Result was marked invalid on load, display error message */ + SetDParamStr(0, spec->grf_prop.grffile->filename); + SetDParam(1, spec->name); + SetDParam(2, ind->location.tile); + ShowErrorMessage(STR_NEWGRF_BUGGY, STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK, WL_WARNING); + + /* abort the function early, this error isn't critical and will allow the game to continue to run */ + break; + } + bool deref = (group->version >= 1); if (group->version < 2) { diff --git a/src/newgrf_spritegroup.h b/src/newgrf_spritegroup.h index 6f038fd138..2db78f6bad 100644 --- a/src/newgrf_spritegroup.h +++ b/src/newgrf_spritegroup.h @@ -277,7 +277,7 @@ struct TileLayoutSpriteGroup : SpriteGroup { struct IndustryProductionSpriteGroup : SpriteGroup { IndustryProductionSpriteGroup() : SpriteGroup(SGT_INDUSTRY_PRODUCTION) {} - uint8 version; + uint8 version; ///< Production callback version used, or 0xFF if marked invalid uint8 num_input; ///< How many subtract_input values are valid int16 subtract_input[INDUSTRY_NUM_INPUTS]; ///< Take this much of the input cargo (can be negative, is indirect in cb version 1+) CargoID cargo_input[INDUSTRY_NUM_INPUTS]; ///< Which input cargoes to take from (only cb version 2) From 35967effd3cef008dd18d38214ebd7def68613d5 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Sun, 10 Mar 2019 18:02:22 +0000 Subject: [PATCH 500/622] Cleanup: Update changed string in language files. --- src/lang/catalan.txt | 2 +- src/lang/croatian.txt | 2 +- src/lang/danish.txt | 2 +- src/lang/dutch.txt | 2 +- src/lang/english_US.txt | 2 +- src/lang/finnish.txt | 2 +- src/lang/french.txt | 2 +- src/lang/german.txt | 2 +- src/lang/hungarian.txt | 2 +- src/lang/italian.txt | 2 +- src/lang/korean.txt | 2 +- src/lang/norwegian_bokmal.txt | 2 +- src/lang/portuguese.txt | 2 +- src/lang/russian.txt | 2 +- src/lang/spanish_MX.txt | 2 +- src/lang/swedish.txt | 2 +- src/lang/turkish.txt | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 29752bb058..85692edc37 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -3001,7 +3001,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Els recursos GR STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} ha estat desactivat per {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Format de disposició de sprite no vàlid o desconegut (sprite {3:NUM}). STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Hi ha massa elements a la llista de valors de propietats (sprite {3:NUM}, propietat {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :«Callback» de producció d'indústria no vàlid (sprite {3:NUM}, «{1:STRING}»). +STR_NEWGRF_ERROR_INDPROD_CALLBACK :«Callback» de producció d'indústria no vàlid (sprite {3:NUM}, «{2:STRING}»). # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Alerta! diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 9a98f3b731..3b659bbf1c 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -3098,7 +3098,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Zatraženi GRF STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} je isključen od strane {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Pogrešan/nepoznat format raspored sprite-a (sprite {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Previše elemenata na listi postavki varijabli (sprite {3:NUM}, postavka {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :Pogrešna callback funkcija za industrijsku proizvodnju (sprite {3:NUM}, "{1:STRING}") +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Pogrešna callback funkcija za industrijsku proizvodnju (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Oprez! diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 162962e3d8..9301a698b0 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -3002,7 +3002,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :De ønskede GRF STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} blev deaktiveret af {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ugyldigt/ukendt sprite layoutformat (sprite {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :For mange elementer i værdiliste for egenskab (sprite {3:NUM}, egenskab {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ugyldig produktion-callback for industri (sprite {3:NUM}, "{1:STRING}") +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ugyldig produktion-callback for industri (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Advarsel! diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 797fd9f7c5..df7024f7f7 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -3000,7 +3000,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Gevraagde GRF-m STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} is uitgeschakeld door {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ongeldige/onbekende indeling voor spritelay-out (sprite {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Te veel elementen in eigenschappenwaardelijst (affbeelding {3:NUM}, eigenschap {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ongeldige terugroep voor industriële productie (sprite {3:NUM}, "{1:STRING}") +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ongeldige terugroep voor industriële productie (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Waarschuwing! diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 28137bd521..aaedcbb656 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -3000,7 +3000,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Requested GRF r STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} was disabled by {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Invalid/unknown sprite layout format (sprite {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Too many elements in property value list (sprite {3:NUM}, property {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :Invalid industry production callback (sprite {3:NUM}, "{1:STRING}") +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Invalid industry production callback (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Caution! diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 5fad7b4dbf..543e091f1d 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -3002,7 +3002,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Pyydetyt GRF-re STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{2:STRING} poisti käytöstä NewGRF:n {1:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Virheellinen/tuntematon spriten asettelumuoto (sprite {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Liian monta elementtiä ominaisuusarvolistassa (sprite {3:NUM}, ominaisuus {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :Virhe teollisuuden tuotannon takaisinkutsussa (sprite {3:NUM}, "{1:STRING}") +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Virhe teollisuuden tuotannon takaisinkutsussa (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Varoitus! diff --git a/src/lang/french.txt b/src/lang/french.txt index 2a8cf8dab3..15d9149f07 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -2997,7 +2997,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Indisponibilit STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} a été désactivé par {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Format de sprite invalide ou inconnu (sprite {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Trop d'éléments dans la liste des valeurs de la propriété (sprite {3:NUM}, propriété {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :Fonction de rappel de production d'industrie invalide (sprite {3:NUM}, "{1:STRING}") +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Fonction de rappel de production d'industrie invalide (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Attention{NBSP}! diff --git a/src/lang/german.txt b/src/lang/german.txt index a2cf57371f..3020bee3f6 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -2984,7 +2984,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Die angefordert STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} wurde von {STRING} deaktiviert STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ungültiges oder unbekanntes Format für Spritelayout (Sprite {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Zu viele Elemente in Eigenschaftswert-Liste (Sprite {3:NUM}, Eigenschaft {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ungültige Produktions-Rückruffunktion (Sprite {3:NUM}, "{1:STRING}") +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ungültige Produktions-Rückruffunktion (Sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Achtung! diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 40ab899660..e76394be51 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -3066,7 +3066,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Kért GRF forr STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} kikapcsolva {STRING} által STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Érvénytelen/ismeretlen sprite szerkezet formátum (sprite {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Túl sok érték a tulajdonságlistában (sprite {3:NUM}, property {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :Érvénytelen termelési callback gazdasági épületben (sprite {3:NUM}, "{1:STRING}") +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Érvénytelen termelési callback gazdasági épületben (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Figyelem! diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 2d931b6bbe..fe63ab589c 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -3026,7 +3026,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Risorsa GRF ric STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} è stato disabilitato da {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formato di layout dello sprite sconosciuto o non valido (sprite {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Troppi elementi nella lista valori di una proprietà (sprite {3:NUM}, proprietà {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :Callback di produzione industria non valido (sprite {3:NUM}, "{1:STRING}") +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Callback di produzione industria non valido (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Attenzione! diff --git a/src/lang/korean.txt b/src/lang/korean.txt index ffbbbad2b3..b74219005f 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -2997,7 +2997,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :요청한 GRF STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING}(은)는 {STRING} 때문에 사용할 수 없습니다 STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :유효하지 않은/알 수 없는 스프라이트 구조 유형 (스프라이트 {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :속성값 목록에 너무 많은 요소가 있음 (스프라이트 {3:NUM}, 속성 {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :유효하지 않은 산업 생산 콜백 (스프라이트 {3:NUM}, "{1:STRING}") +STR_NEWGRF_ERROR_INDPROD_CALLBACK :유효하지 않은 산업 생산 콜백 (스프라이트 {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}경고! diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 7c1609c7c8..3999aee6c2 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -3006,7 +3006,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Etterspurte GRF STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} ble deaktivert av {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Ugyldig/ukjent sprite layout-format (figur {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :For mange elementer i fortegnelse over eiendomsverdier (sprite {3:NUM}, property {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ugyldig industriprodukjson callback (sprite {3:NUM}, "{1:STRING}") +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ugyldig industriprodukjson callback (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Advarsel! diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 794df12be8..329af3ca48 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -2997,7 +2997,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Recursos GRF pe STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} foi desactivado por {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formato de Gráfico Inválido ou desconhecido (sprite {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Demasiados elementos na lista de valores de propriedade (sprite {3:NUM}, propriedade {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :Revogação da produção industrial inválida (sprite {3:NUM}, "{1:STRING}") +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Revogação da produção industrial inválida (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Alerta! diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 0dea4ef89b..c78b2cdc0b 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -3182,7 +3182,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Запроше STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} был отключён из-за {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Недопустимый/неизвестный формат расположения спрайтов (спрайт {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Слишком много элементов в списке значений (спрайт {3:NUM}, свойство {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :Неверная обработка продукции предприятия (спрайт {3:NUM}, "{1:STRING}") +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Неверная обработка продукции предприятия (спрайт {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Осторожно! diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 09d44e7166..c440f95bb5 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -2997,7 +2997,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Recursos GRF so STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} fue desactivado por {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Formato de colocación de sprites no válido o desconocido (sprite {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Demasiados elementos en la lista de valores de propiedad (sprite {3:NUM}, property {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :Llamada de producción de industria no válida (sprite {3:NUM}, "{1:STRING}") +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Llamada de producción de industria no válida (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}¡Precaución! diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 63c4b75a16..3aa154a2e7 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -2983,7 +2983,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Efterfrågade G STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} har inaktiverats av {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Felaktigt/okänt layout-format av spriteobjekt (spriteobjekt {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :För många poster i listan med egenskapsvärden (spriteobjekt {3:NUM}, egenskap {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ogiltig industriproduktions-callback (spriteobjekt {3:NUM}, "{1:STRING}") +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ogiltig industriproduktions-callback (spriteobjekt {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Varning! diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index a5d60f7f2e..b801e5c26c 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -2990,7 +2990,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :İstenen GRF ka STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} {STRING} tarafından deaktive edildi STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Geçersiz/bilinmeyen nesne yerleşim biçimi (nesne {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Özellik değeri listesinde çok fazla öğe (sprite {3:NUM}, özellik {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :Geçersiz endüstri üretim geri çağrımı (sprite {3:NUM}, "{1:STRING}") +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Geçersiz endüstri üretim geri çağrımı (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Uyarı! From 1100418063c90783f2bdd6aedcf91229f5882a50 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 15 Mar 2019 19:45:44 +0100 Subject: [PATCH 501/622] Update: Translations from eints romanian: 8 changes by alexmerlin1985 dutch: 2 changes by JanWillem --- src/lang/dutch.txt | 2 ++ src/lang/romanian.txt | 8 ++++++++ src/lang/ukrainian.txt | 1 - 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index df7024f7f7..d20fcafede 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1184,6 +1184,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Omgeving aanpas STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Staat het aanpassen van funderingen onder gebouwen en sporen toe zonder deze te verwijderen STR_CONFIG_SETTING_CATCHMENT :Meer realistische verzorgingsgebieden toestaan: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Verzorgingsgebieden met verschillende groottes voor verschillende typen stations en luchthavens +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Stations van het bedrijf kunnen leveren aan industrieën met bijbehorend neutraal station: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Wanneer dit is ingeschakeld, kunnen industrieën met bijbehorende stations (zoals olievelden) ook worden voorzien door stations van het bedrijf die in de buurt zijn gebouwd. Wanneer dit is uitgeschakeld, kunnen deze industrieën alleen worden voorzien door het bijbehorende station. Eventuele stations van het bedrijif in de buurt kunnen niet aan ze leveren; ook levert het bijbehorende station alleen aan de industrie zelf. STR_CONFIG_SETTING_EXTRADYNAMITE :Verwijderen van meer stedelijke wegen, bruggen en tunnels toestaan: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Maakt het gemakkelijker om door de stad beheerde infrastructuur en gebouwen te verwijderen. STR_CONFIG_SETTING_TRAIN_LENGTH :Maximale lengte van treinen: {STRING} diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index cb24055ff8..074c65fce9 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -1105,6 +1105,7 @@ STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Setări compani STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Setări companie (stocate în fişierul de salvare; afectează doar compania curentă) STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categorie: +STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tip: STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Arată în lista de mai jos doar setările modificate STR_CONFIG_SETTING_RESTRICT_BASIC :Setări de bază (afişează numai setări importante) STR_CONFIG_SETTING_RESTRICT_ADVANCED :Setări avansate (afişează majoritatea setărilor) @@ -1312,6 +1313,7 @@ STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Alegeți distri STR_CONFIG_SETTING_TREE_PLACER_NONE :Niciunul STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Original STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Îmbunătăţit +STR_CONFIG_SETTING_ROAD_SIDE :Autovehicule: {STRING} STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Alege banda pentru condus STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotaţie hartă înălţimi: {STRING} STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Spre stânga @@ -1364,6 +1366,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Control+Click STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Oprit +STR_CONFIG_SETTING_AUTOSAVE :Autosalvare: {STRING} STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Foloseşte formatul datei {STRING} pentru numele salvărilor STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Formatul datei in numele salvărilor @@ -1643,6 +1646,7 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :Metric (m) STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (m) STR_CONFIG_SETTING_LOCALISATION :{ORANGE}Localizare +STR_CONFIG_SETTING_GRAPHICS :{ORANGE}Grafică STR_CONFIG_SETTING_SOUND :{ORANGE}Efecte sonore STR_CONFIG_SETTING_INTERFACE :{ORANGE}Interfaţă STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE}General @@ -2662,6 +2666,7 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Număr de evenimente de joc simulate per secundă. STR_FRAMERATE_AVERAGE :{WHITE}Medie STR_FRAMERATE_DATA_POINTS :{BLACK}Date bazate pe măsurători {COMMA} +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms ############ Leave those lines in this order!! STR_FRAMERATE_VIDEO :{BLACK}Ieșire video: @@ -2818,6 +2823,7 @@ STR_NEWGRF_SETTINGS_DISABLED :{RED}Dezactivat STR_NEWGRF_SETTINGS_INCOMPATIBLE :{RED}Incompatibil cu această versiune de OpenTTD # NewGRF save preset window +STR_SAVE_PRESET_TITLE :{BLACK}Adaugă denumire presetare STR_SAVE_PRESET_CANCEL :{BLACK}Anulează STR_SAVE_PRESET_CANCEL_TOOLTIP :{BLACK}Nu schimba setarea implicită STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Salvează setarea pe numele selectat @@ -3326,6 +3332,7 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Elimină toate STR_GROUP_RENAME_CAPTION :{BLACK}Redenumeşte un grup STR_GROUP_OCCUPANCY :Utilizare curentă: +STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Noi vehicule feroviare @@ -3492,6 +3499,7 @@ STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :locomotivă per STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Cost: {CURRENCY_LONG} Greutate: {WEIGHT_SHORT}{}Vitezã: {VELOCITY} Putere: {POWER}{}Cost de rulare: {CURRENCY_LONG}/an{}Capacitate: {CARGO_LONG} STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Cost: {CURRENCY_LONG} Greutate: {WEIGHT_SHORT}{}Viteză: {VELOCITY} Putere: {POWER} Ef. T. Max.: {6:FORCE}{}Cost rulaj: {4:CURRENCY_LONG}/an{}Capacitate: {5:CARGO_LONG} STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST :{BLACK}Cost: {CURRENCY_LONG} Viteză max.: {VELOCITY}{}Capacitate: {CARGO_LONG}{}Mentenanţă: {CURRENCY_LONG}/an +STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_CAP_RUNCOST :{BLACK}Cost: {CURRENCY_LONG} Viteza maximă: {VELOCITY}{}Tip avion: {STRING} Rază: {COMMA} pătrățele{}Capacitate: {CARGO_LONG}, {CARGO_LONG}{}Cost întreținere: {CURRENCY_LONG}/an # Autoreplace window STR_REPLACE_VEHICLES_WHITE :{WHITE}Înlocuieşte {STRING} - {STRING} diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index e0e8124234..ba2f2c4ee2 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -3133,7 +3133,6 @@ STR_NEWGRF_ERROR_GRM_FAILED :Недосту STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} був вимкнений {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Некоректний або невідомий формат розміщення спрайтів (спрайт {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Дуже багато елементів у списку значень (спрайт {3:NUM}, властивість {4:HEX}) -STR_NEWGRF_ERROR_INDPROD_CALLBACK :Невірна обробка продукції підприємства (спрайт {3:NUM}, "{1:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Обережно! From 7bd43f7413aed2dc544f0f9ec269c5693ef2c69f Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 16 Mar 2019 10:00:58 +0100 Subject: [PATCH 502/622] Fix: [AzurePipelines] vcpkg is now preinstalled on Windows images So instead of integrating our own, we only copy our precompiled binaries into the right folder. --- azure-pipelines/templates/windows-dependencies.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/azure-pipelines/templates/windows-dependencies.yml b/azure-pipelines/templates/windows-dependencies.yml index c6fc6e407c..72368b9d71 100644 --- a/azure-pipelines/templates/windows-dependencies.yml +++ b/azure-pipelines/templates/windows-dependencies.yml @@ -1,10 +1,14 @@ steps: - bash: | set -ex + curl -L https://github.com/OpenTTD/CompileFarm/releases/download/latest/windows-dependencies.zip > windows-dependencies.zip unzip windows-dependencies.zip rm -f windows-dependencies.zip - displayName: 'Download dependencies' - workingDirectory: $(Build.ArtifactStagingDirectory) -- script: $(Build.ArtifactStagingDirectory)\windows-dependencies\vcpkg.exe integrate install + + mv windows-dependencies/installed /c/vcpkg/ + rm -rf windows-dependencies displayName: 'Install dependencies' + workingDirectory: $(Build.ArtifactStagingDirectory) +- script: c:\vcpkg\vcpkg.exe integrate install + displayName: 'Integrate vcpkg' From bcfc9620b0b94e05d732ddc0cede71141d590efc Mon Sep 17 00:00:00 2001 From: PeterN Date: Sat, 16 Mar 2019 16:52:07 +0000 Subject: [PATCH 503/622] Change: Use default value for invalid multi-string settings instead of clamping to min or max value. (#7361) --- src/settings.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/settings.cpp b/src/settings.cpp index d324ffc298..1fc2682cd0 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -448,13 +448,30 @@ static void Write_ValidateSetting(void *ptr, const SettingDesc *sd, int32 val) case SLE_VAR_U16: case SLE_VAR_I32: { /* Override the minimum value. No value below sdb->min, except special value 0 */ - if (!(sdb->flags & SGF_0ISDISABLED) || val != 0) val = Clamp(val, sdb->min, sdb->max); + if (!(sdb->flags & SGF_0ISDISABLED) || val != 0) { + if (!(sdb->flags & SGF_MULTISTRING)) { + /* Clamp value-type setting to its valid range */ + val = Clamp(val, sdb->min, sdb->max); + } else if (val < sdb->min || val > (int32)sdb->max) { + /* Reset invalid discrete setting (where different values change gameplay) to its default value */ + val = (int32)(size_t)sdb->def; + } + } break; } case SLE_VAR_U32: { /* Override the minimum value. No value below sdb->min, except special value 0 */ - uint min = ((sdb->flags & SGF_0ISDISABLED) && (uint)val <= (uint)sdb->min) ? 0 : sdb->min; - WriteValue(ptr, SLE_VAR_U32, (int64)ClampU(val, min, sdb->max)); + uint32 uval = (uint32)val; + if (!(sdb->flags & SGF_0ISDISABLED) || uval != 0) { + if (!(sdb->flags & SGF_MULTISTRING)) { + /* Clamp value-type setting to its valid range */ + uval = ClampU(uval, sdb->min, sdb->max); + } else if (uval < (uint)sdb->min || uval > sdb->max) { + /* Reset invalid discrete setting to its default value */ + uval = (uint32)(size_t)sdb->def; + } + } + WriteValue(ptr, SLE_VAR_U32, (int64)uval); return; } case SLE_VAR_I64: From c7b5f34138cf08016239c6f5732e5ae8c0262230 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 16 Mar 2019 19:45:41 +0100 Subject: [PATCH 504/622] Update: Translations from eints norwegian (bokmal): 1 change by Leifbk --- src/lang/norwegian_bokmal.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 3999aee6c2..78e72ea0ab 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -3038,6 +3038,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF ' STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Vare-/ombyggingsinformasjon for '{1:ENGINE}' er forskjellig fra kjøpelisten etter konstruksjonen. Dette kan resultere i at autofornying ikke fungerer på riktig måte. STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' forårsaket en uendelig løkke i produksjonstilbakekallet. STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Tilbakekall {1:HEX} rapporterte ukjent/ugyldig resultat {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' ugyldig varetype i produksjonscallback at {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : From fe448a26166dbde1933be797951f0c6329523911 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Mon, 18 Feb 2019 23:55:45 +0000 Subject: [PATCH 505/622] Remove: OPF --- projects/openttd_vs140.vcxproj | 2 - projects/openttd_vs140.vcxproj.filters | 6 - projects/openttd_vs141.vcxproj | 2 - projects/openttd_vs141.vcxproj.filters | 6 - projects/openttd_vs142.vcxproj | 2 - projects/openttd_vs142.vcxproj.filters | 6 - source.list | 2 - src/openttd.cpp | 1 - src/pathfinder/opf/opf_ship.cpp | 222 ------------------------- src/pathfinder/opf/opf_ship.h | 31 ---- src/saveload/afterload.cpp | 2 +- src/saveload/saveload.h | 1 + src/settings.cpp | 12 -- src/settings_func.h | 1 - src/settings_type.h | 7 - src/ship_cmd.cpp | 8 +- src/table/settings.ini | 25 +-- src/vehicle_type.h | 2 +- 18 files changed, 10 insertions(+), 328 deletions(-) delete mode 100644 src/pathfinder/opf/opf_ship.cpp delete mode 100644 src/pathfinder/opf/opf_ship.h diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index 26267f6a03..473dfcda40 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -1291,8 +1291,6 @@ - - diff --git a/projects/openttd_vs140.vcxproj.filters b/projects/openttd_vs140.vcxproj.filters index 3c4fc43d98..9a468836b0 100644 --- a/projects/openttd_vs140.vcxproj.filters +++ b/projects/openttd_vs140.vcxproj.filters @@ -2961,12 +2961,6 @@ Pathfinder - - Pathfinder - - - Pathfinder - Pathfinder diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj index 0cd3fe7488..2a963bfa20 100644 --- a/projects/openttd_vs141.vcxproj +++ b/projects/openttd_vs141.vcxproj @@ -1291,8 +1291,6 @@ - - diff --git a/projects/openttd_vs141.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters index 3c4fc43d98..9a468836b0 100644 --- a/projects/openttd_vs141.vcxproj.filters +++ b/projects/openttd_vs141.vcxproj.filters @@ -2961,12 +2961,6 @@ Pathfinder - - Pathfinder - - - Pathfinder - Pathfinder diff --git a/projects/openttd_vs142.vcxproj b/projects/openttd_vs142.vcxproj index 20c3d1b210..f4c76e0978 100644 --- a/projects/openttd_vs142.vcxproj +++ b/projects/openttd_vs142.vcxproj @@ -1291,8 +1291,6 @@ - - diff --git a/projects/openttd_vs142.vcxproj.filters b/projects/openttd_vs142.vcxproj.filters index 3c4fc43d98..9a468836b0 100644 --- a/projects/openttd_vs142.vcxproj.filters +++ b/projects/openttd_vs142.vcxproj.filters @@ -2961,12 +2961,6 @@ Pathfinder - - Pathfinder - - - Pathfinder - Pathfinder diff --git a/source.list b/source.list index b567a0026d..7a6e6661ab 100644 --- a/source.list +++ b/source.list @@ -1049,8 +1049,6 @@ network/core/udp.h # Pathfinder pathfinder/follow_track.hpp -pathfinder/opf/opf_ship.cpp -pathfinder/opf/opf_ship.h pathfinder/pathfinder_func.h pathfinder/pathfinder_type.h pathfinder/pf_performance_timer.hpp diff --git a/src/openttd.cpp b/src/openttd.cpp index c2e7455667..c833583609 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -434,7 +434,6 @@ struct AfterNewGRFScan : NewGRFScanCallback { Game::Uninitialize(true); AI::Uninitialize(true); - CheckConfig(); LoadFromHighScore(); LoadHotkeysFromConfig(); WindowDesc::LoadFromConfig(); diff --git a/src/pathfinder/opf/opf_ship.cpp b/src/pathfinder/opf/opf_ship.cpp deleted file mode 100644 index c993f82033..0000000000 --- a/src/pathfinder/opf/opf_ship.cpp +++ /dev/null @@ -1,222 +0,0 @@ -/* $Id$ */ - -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/** @file opf_ship.cpp Implementation of the oldest supported ship pathfinder. */ - -#include "../../stdafx.h" -#include "../../tunnelbridge_map.h" -#include "../../tunnelbridge.h" -#include "../../ship.h" -#include "../../core/random_func.hpp" - -#include "../../safeguards.h" - -struct RememberData { - uint16 cur_length; - byte depth; - Track last_choosen_track; -}; - -struct TrackPathFinder { - TileIndex skiptile; - TileIndex dest_coords; - uint best_bird_dist; - uint best_length; - RememberData rd; - TrackdirByte the_dir; -}; - -static bool ShipTrackFollower(TileIndex tile, TrackPathFinder *pfs, uint length) -{ - /* Found dest? */ - if (tile == pfs->dest_coords) { - pfs->best_bird_dist = 0; - - pfs->best_length = minu(pfs->best_length, length); - return true; - } - - /* Skip this tile in the calculation */ - if (tile != pfs->skiptile) { - pfs->best_bird_dist = minu(pfs->best_bird_dist, DistanceMaxPlusManhattan(pfs->dest_coords, tile)); - } - - return false; -} - -static void TPFModeShip(TrackPathFinder *tpf, TileIndex tile, DiagDirection direction) -{ - if (IsTileType(tile, MP_TUNNELBRIDGE)) { - /* wrong track type */ - if (GetTunnelBridgeTransportType(tile) != TRANSPORT_WATER) return; - - DiagDirection dir = GetTunnelBridgeDirection(tile); - /* entering tunnel / bridge? */ - if (dir == direction) { - TileIndex endtile = GetOtherTunnelBridgeEnd(tile); - - tpf->rd.cur_length += GetTunnelBridgeLength(tile, endtile) + 1; - - tile = endtile; - } else { - /* leaving tunnel / bridge? */ - if (ReverseDiagDir(dir) != direction) return; - } - } - - /* This addition will sometimes overflow by a single tile. - * The use of TILE_MASK here makes sure that we still point at a valid - * tile, and then this tile will be in the sentinel row/col, so GetTileTrackStatus will fail. */ - tile = TILE_MASK(tile + TileOffsByDiagDir(direction)); - - if (++tpf->rd.cur_length > 50) return; - - TrackBits bits = TrackStatusToTrackBits(GetTileTrackStatus(tile, TRANSPORT_WATER, 0)) & DiagdirReachesTracks(direction); - if (bits == TRACK_BIT_NONE) return; - - assert(TileX(tile) != MapMaxX() && TileY(tile) != MapMaxY()); - - bool only_one_track = true; - do { - Track track = RemoveFirstTrack(&bits); - if (bits != TRACK_BIT_NONE) only_one_track = false; - RememberData rd = tpf->rd; - - /* Change direction 4 times only */ - if (!only_one_track && track != tpf->rd.last_choosen_track) { - if (++tpf->rd.depth > 4) { - tpf->rd = rd; - return; - } - tpf->rd.last_choosen_track = track; - } - - tpf->the_dir = TrackEnterdirToTrackdir(track, direction); - - if (!ShipTrackFollower(tile, tpf, tpf->rd.cur_length)) { - TPFModeShip(tpf, tile, TrackdirToExitdir(tpf->the_dir)); - } - - tpf->rd = rd; - } while (bits != TRACK_BIT_NONE); -} - -static void OPFShipFollowTrack(TileIndex tile, DiagDirection direction, TrackPathFinder *tpf) -{ - assert(IsValidDiagDirection(direction)); - - /* initialize path finder variables */ - tpf->rd.cur_length = 0; - tpf->rd.depth = 0; - tpf->rd.last_choosen_track = INVALID_TRACK; - - ShipTrackFollower(tile, tpf, 0); - TPFModeShip(tpf, tile, direction); -} - -/** Directions to search towards given track bits and the ship's enter direction. */ -static const DiagDirection _ship_search_directions[6][4] = { - { DIAGDIR_NE, INVALID_DIAGDIR, DIAGDIR_SW, INVALID_DIAGDIR }, - { INVALID_DIAGDIR, DIAGDIR_SE, INVALID_DIAGDIR, DIAGDIR_NW }, - { INVALID_DIAGDIR, DIAGDIR_NE, DIAGDIR_NW, INVALID_DIAGDIR }, - { DIAGDIR_SE, INVALID_DIAGDIR, INVALID_DIAGDIR, DIAGDIR_SW }, - { DIAGDIR_NW, DIAGDIR_SW, INVALID_DIAGDIR, INVALID_DIAGDIR }, - { INVALID_DIAGDIR, INVALID_DIAGDIR, DIAGDIR_SE, DIAGDIR_NE }, -}; - -/** Track to "direction (& 3)" mapping. */ -static const byte _pick_shiptrack_table[6] = {DIR_NE, DIR_SE, DIR_E, DIR_E, DIR_N, DIR_N}; - -static uint FindShipTrack(const Ship *v, TileIndex tile, DiagDirection dir, TrackBits bits, TileIndex skiptile, Track *track) -{ - TrackPathFinder pfs; - uint best_bird_dist = 0; - uint best_length = 0; - byte ship_dir = v->direction & 3; - - pfs.dest_coords = v->dest_tile; - pfs.skiptile = skiptile; - - Track best_track = INVALID_TRACK; - - assert(bits != TRACK_BIT_NONE); - do { - Track i = RemoveFirstTrack(&bits); - - pfs.best_bird_dist = UINT_MAX; - pfs.best_length = UINT_MAX; - - OPFShipFollowTrack(tile, _ship_search_directions[i][dir], &pfs); - - if (best_track != INVALID_TRACK) { - if (pfs.best_bird_dist != 0) { - /* neither reached the destination, pick the one with the smallest bird dist */ - if (pfs.best_bird_dist > best_bird_dist) goto bad; - if (pfs.best_bird_dist < best_bird_dist) goto good; - } else { - if (pfs.best_length > best_length) goto bad; - if (pfs.best_length < best_length) goto good; - } - - /* if we reach this position, there's two paths of equal value so far. - * pick one randomly. */ - uint r = GB(Random(), 0, 8); - if (_pick_shiptrack_table[i] == ship_dir) r += 80; - if (_pick_shiptrack_table[best_track] == ship_dir) r -= 80; - if (r <= 127) goto bad; - } -good:; - best_track = i; - best_bird_dist = pfs.best_bird_dist; - best_length = pfs.best_length; -bad:; - - } while (bits != TRACK_BIT_NONE); - - *track = best_track; - return best_bird_dist; -} - -/** - * Finds the best track to choose on the next tile and - * returns INVALID_TRACK when it is better to reverse. - * @param v The ship. - * @param tile The tile we are about to enter. - * @param enterdir The direction entering the tile. - * @param tracks The tracks available on new tile. - * @param[out] path_found Whether a path has been found. - * @return Best track on next tile or INVALID_TRACK when better to reverse. - */ -Track OPFShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found) -{ - assert(IsValidDiagDirection(enterdir)); - - TileIndex tile2 = TILE_ADD(tile, -TileOffsByDiagDir(enterdir)); - Track track; - - /* Let's find out how far it would be if we would reverse first */ - uint rev_dist = UINT_MAX; // distance if we reverse - Track cur_track = TrackdirToTrack(v->GetVehicleTrackdir()); // track on the current tile - DiagDirection rev_enterdir = ReverseDiagDir(enterdir); - TrackBits rev_tracks = TrackStatusToTrackBits(GetTileTrackStatus(tile2, TRANSPORT_WATER, 0)) & - DiagdirReachesTracks(rev_enterdir); - - if (HasTrack(rev_tracks, cur_track)) { - rev_dist = FindShipTrack(v, tile2, rev_enterdir, TrackToTrackBits(cur_track), tile, &track); - if (rev_dist != UINT_MAX) rev_dist++; // penalty for reversing - } - - /* And if we would not reverse? */ - uint dist = FindShipTrack(v, tile, enterdir, tracks, 0, &track); - - /* Due to the way this pathfinder works we cannot determine whether we're lost or not. */ - path_found = true; - if (dist <= rev_dist) return track; - return INVALID_TRACK; // We could better reverse -} diff --git a/src/pathfinder/opf/opf_ship.h b/src/pathfinder/opf/opf_ship.h deleted file mode 100644 index 62668b206a..0000000000 --- a/src/pathfinder/opf/opf_ship.h +++ /dev/null @@ -1,31 +0,0 @@ -/* $Id$ */ - -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/** @file opf_ship.h Original pathfinder for ships; very simple. */ - -#ifndef OPF_SHIP_H -#define OPF_SHIP_H - -#include "../../direction_type.h" -#include "../../tile_type.h" -#include "../../track_type.h" -#include "../../vehicle_type.h" - -/** - * Finds the best path for given ship using OPF. - * @param v the ship that needs to find a path - * @param tile the tile to find the path from (should be next tile the ship is about to enter) - * @param enterdir diagonal direction which the ship will enter this new tile from - * @param tracks available tracks on the new tile (to choose from) - * @param path_found [out] Whether a path has been found (true) or has been guessed (false) - * @return the best trackdir for next turn or INVALID_TRACK if the path could not be found - */ -Track OPFShipChooseTrack(const Ship *v, TileIndex tile, DiagDirection enterdir, TrackBits tracks, bool &path_found); - -#endif /* OPF_SHIP_H */ diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index ea7882e895..6f32c5506f 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -1875,7 +1875,7 @@ bool AfterLoadGame() if (_settings_game.pf.yapf.ship_use_yapf) { _settings_game.pf.pathfinder_for_ships = VPF_YAPF; } else { - _settings_game.pf.pathfinder_for_ships = (_settings_game.pf.new_pathfinding_all ? VPF_NPF : VPF_OPF); + _settings_game.pf.pathfinder_for_ships = VPF_NPF; } } diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 77cce4c4a4..61d5273401 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -296,6 +296,7 @@ enum SaveLoadVersion : uint16 { SLV_SERVE_NEUTRAL_INDUSTRIES, ///< 210 PR#7234 Company stations can serve industries with attached neutral stations. SLV_ROADVEH_PATH_CACHE, ///< 211 PR#7261 Add path cache for road vehicles. + SLV_REMOVE_OPF, ///< 212 PR#7245 Remove OPF. SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/settings.cpp b/src/settings.cpp index 1fc2682cd0..6ea5c081a3 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -2275,18 +2275,6 @@ static void Save_PATS() SaveSettings(_settings, &_settings_game); } -void CheckConfig() -{ - /* - * Increase old default values for pf_maxdepth and pf_maxlength - * to support big networks. - */ - if (_settings_newgame.pf.opf.pf_maxdepth == 16 && _settings_newgame.pf.opf.pf_maxlength == 512) { - _settings_newgame.pf.opf.pf_maxdepth = 48; - _settings_newgame.pf.opf.pf_maxlength = 4096; - } -} - extern const ChunkHandler _setting_chunk_handlers[] = { { 'OPTS', NULL, Load_OPTS, NULL, NULL, CH_RIFF}, { 'PATS', Save_PATS, Load_PATS, NULL, Check_PATS, CH_RIFF | CH_LAST}, diff --git a/src/settings_func.h b/src/settings_func.h index 3b3387b5fd..c258cb6404 100644 --- a/src/settings_func.h +++ b/src/settings_func.h @@ -24,7 +24,6 @@ void IConsoleListSettings(const char *prefilter); void LoadFromConfig(bool minimal = false); void SaveToConfig(); -void CheckConfig(); void IniLoadWindowSettings(IniFile *ini, const char *grpname, void *desc); void IniSaveWindowSettings(IniFile *ini, const char *grpname, void *desc); diff --git a/src/settings_type.h b/src/settings_type.h index 503342545f..42f8b45170 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -346,12 +346,6 @@ struct ScriptSettings { uint32 script_max_opcode_till_suspend; ///< max opcode calls till scripts will suspend }; -/** Settings related to the old pathfinder. */ -struct OPFSettings { - uint16 pf_maxlength; ///< maximum length when searching for a train route for new pathfinder - byte pf_maxdepth; ///< maximum recursion depth when searching for a train route for new pathfinder -}; - /** Settings related to the new pathfinder. */ struct NPFSettings { /** @@ -440,7 +434,6 @@ struct PathfinderSettings { byte wait_for_pbs_path; ///< how long to wait for a path reservation. byte path_backoff_interval; ///< ticks between checks for a free path. - OPFSettings opf; ///< pathfinder settings for the old pathfinder NPFSettings npf; ///< pathfinder settings for the new pathfinder YAPFSettings yapf; ///< pathfinder settings for the yet another pathfinder }; diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 6d6f8415c8..c04d3e1e2f 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -29,7 +29,6 @@ #include "sound_func.h" #include "ai/ai.hpp" #include "game/game.hpp" -#include "pathfinder/opf/opf_ship.h" #include "engine_base.h" #include "company_base.h" #include "tunnelbridge_map.h" @@ -178,7 +177,6 @@ static void CheckIfShipNeedsService(Vehicle *v) uint max_distance; switch (_settings_game.pf.pathfinder_for_ships) { - case VPF_OPF: max_distance = 12; break; case VPF_NPF: max_distance = _settings_game.pf.npf.maximum_go_to_depot_penalty / NPF_TILE_LENGTH; break; case VPF_YAPF: max_distance = _settings_game.pf.yapf.maximum_go_to_depot_penalty / YAPF_TILE_LENGTH; break; default: NOT_REACHED(); @@ -369,9 +367,7 @@ static bool CheckShipLeaveDepot(Ship *v) if (north_tracks && south_tracks) { /* Ask pathfinder for best direction */ bool reverse = false; - bool path_found; switch (_settings_game.pf.pathfinder_for_ships) { - case VPF_OPF: reverse = OPFShipChooseTrack(v, north_neighbour, north_dir, north_tracks, path_found) == INVALID_TRACK; break; // OPF always allows reversing case VPF_NPF: reverse = NPFShipCheckReverse(v); break; case VPF_YAPF: reverse = YapfShipCheckReverse(v); break; default: NOT_REACHED(); @@ -492,7 +488,6 @@ static Track ChooseShipTrack(Ship *v, TileIndex tile, DiagDirection enterdir, Tr } switch (_settings_game.pf.pathfinder_for_ships) { - case VPF_OPF: track = OPFShipChooseTrack(v, tile, enterdir, tracks, path_found); break; case VPF_NPF: track = NPFShipChooseTrack(v, path_found); break; case VPF_YAPF: track = YapfShipChooseTrack(v, tile, enterdir, tracks, path_found, v->path); break; default: NOT_REACHED(); @@ -514,8 +509,7 @@ static inline TrackBits GetAvailShipTracks(TileIndex tile, DiagDirection dir, Tr { TrackBits tracks = GetTileShipTrackStatus(tile) & DiagdirReachesTracks(dir); - /* Do not remove 90 degree turns for OPF, as it isn't able to find paths taking it into account. */ - if (_settings_game.pf.forbid_90_deg && _settings_game.pf.pathfinder_for_ships != VPF_OPF) tracks &= ~TrackCrossesTracks(TrackdirToTrack(trackdir)); + if (_settings_game.pf.forbid_90_deg) tracks &= ~TrackCrossesTracks(TrackdirToTrack(trackdir)); return tracks; } diff --git a/src/table/settings.ini b/src/table/settings.ini index 13d8483627..7ab00d5a34 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -953,12 +953,12 @@ type = SLE_UINT8 from = SLV_87 guiflags = SGF_MULTISTRING def = 2 -min = 0 +min = 1 max = 2 interval = 1 str = STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS strhelp = STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT -strval = STR_CONFIG_SETTING_PATHFINDER_OPF +strval = STR_CONFIG_SETTING_PATHFINDER_NPF proc = InvalidateShipPathCache cat = SC_EXPERT @@ -1670,23 +1670,10 @@ max = 255 cat = SC_EXPERT ## -[SDT_VAR] -base = GameSettings -var = pf.opf.pf_maxlength -type = SLE_UINT16 -def = 4096 -min = 64 -max = 65535 -cat = SC_EXPERT - -[SDT_VAR] -base = GameSettings -var = pf.opf.pf_maxdepth -type = SLE_UINT8 -def = 48 -min = 4 -max = 255 -cat = SC_EXPERT +; Used to be pf.opf.pf_maxlength & pf.opf.pf_maxdepth +[SDT_NULL] +length = 3 +to = SLV_REMOVE_OPF ## [SDT_VAR] diff --git a/src/vehicle_type.h b/src/vehicle_type.h index f3e7d535fd..1bc5bcef41 100644 --- a/src/vehicle_type.h +++ b/src/vehicle_type.h @@ -60,7 +60,7 @@ static const VehicleID INVALID_VEHICLE = 0xFFFFF; ///< Constant representing a n /** Pathfinding option states */ enum VehiclePathFinders { - VPF_OPF = 0, ///< The Original PathFinder (only for ships) + // Original PathFinder (OPF) used to be 0 VPF_NPF = 1, ///< New PathFinder VPF_YAPF = 2, ///< Yet Another PathFinder }; From 592f591a4b7bbc2b2142015a463d8cae1d396f35 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Mon, 18 Feb 2019 23:56:04 +0000 Subject: [PATCH 506/622] Cleanup: Unused lang strings --- src/lang/afrikaans.txt | 1 - src/lang/arabic_egypt.txt | 1 - src/lang/basque.txt | 1 - src/lang/belarusian.txt | 1 - src/lang/brazilian_portuguese.txt | 1 - src/lang/bulgarian.txt | 1 - src/lang/catalan.txt | 1 - src/lang/croatian.txt | 1 - src/lang/czech.txt | 1 - src/lang/danish.txt | 1 - src/lang/dutch.txt | 1 - src/lang/english.txt | 1 - src/lang/english_AU.txt | 1 - src/lang/english_US.txt | 1 - src/lang/esperanto.txt | 1 - src/lang/estonian.txt | 1 - src/lang/faroese.txt | 1 - src/lang/finnish.txt | 1 - src/lang/french.txt | 1 - src/lang/gaelic.txt | 1 - src/lang/galician.txt | 1 - src/lang/german.txt | 1 - src/lang/greek.txt | 1 - src/lang/hebrew.txt | 1 - src/lang/hungarian.txt | 1 - src/lang/icelandic.txt | 1 - src/lang/indonesian.txt | 1 - src/lang/irish.txt | 1 - src/lang/italian.txt | 1 - src/lang/japanese.txt | 1 - src/lang/korean.txt | 1 - src/lang/latin.txt | 1 - src/lang/latvian.txt | 1 - src/lang/lithuanian.txt | 1 - src/lang/luxembourgish.txt | 1 - src/lang/malay.txt | 1 - src/lang/norwegian_bokmal.txt | 1 - src/lang/norwegian_nynorsk.txt | 1 - src/lang/polish.txt | 1 - src/lang/portuguese.txt | 1 - src/lang/romanian.txt | 1 - src/lang/russian.txt | 1 - src/lang/serbian.txt | 1 - src/lang/simplified_chinese.txt | 1 - src/lang/slovak.txt | 1 - src/lang/slovenian.txt | 1 - src/lang/spanish.txt | 1 - src/lang/spanish_MX.txt | 1 - src/lang/swedish.txt | 1 - src/lang/tamil.txt | 1 - src/lang/thai.txt | 1 - src/lang/traditional_chinese.txt | 1 - src/lang/turkish.txt | 1 - src/lang/ukrainian.txt | 1 - src/lang/unfinished/frisian.txt | 1 - src/lang/unfinished/persian.txt | 1 - src/lang/unfinished/urdu.txt | 1 - src/lang/vietnamese.txt | 1 - src/lang/welsh.txt | 1 - 59 files changed, 59 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 9ac3830e6a..488332081c 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1685,7 +1685,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Vragver STR_CONFIG_SETTING_AI :{ORANGE}Mededingers STR_CONFIG_SETTING_AI_NPC :{ORANGE}Rekenaar spelers -STR_CONFIG_SETTING_PATHFINDER_OPF :Oorspronklik STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Aanbevole) diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 7fe2ac1da0..3da270ad32 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1369,7 +1369,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :توزيع ال STR_CONFIG_SETTING_AI :{ORANGE}المتنافسين STR_CONFIG_SETTING_AI_NPC :{ORANGE} لاعبين الحاسوب -STR_CONFIG_SETTING_PATHFINDER_OPF :اصلي STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(مفضل) diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 1c3b038844..046e0f7816 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1598,7 +1598,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Zama ba STR_CONFIG_SETTING_AI :{ORANGE}Lehiakideak STR_CONFIG_SETTING_AI_NPC :{ORANGE}Ordenagailu jokalariak -STR_CONFIG_SETTING_PATHFINDER_OPF :Jatorrizkoa STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Gomendatua) diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 64bf4ce1da..3baf40f69f 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -2009,7 +2009,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Раз STR_CONFIG_SETTING_AI :{ORANGE}Канкурэнты STR_CONFIG_SETTING_AI_NPC :{ORANGE}Кампутарныя гульцы -STR_CONFIG_SETTING_PATHFINDER_OPF :арыґінальны STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(рэкамэндуецца) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 0bf7addacc..fb9cce3057 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1700,7 +1700,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distrib STR_CONFIG_SETTING_AI :{ORANGE}Oponentes STR_CONFIG_SETTING_AI_NPC :{ORANGE}Computadores -STR_CONFIG_SETTING_PATHFINDER_OPF :Original STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Recomendado) diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 3ae4974b48..0ed560da1b 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1634,7 +1634,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Инд STR_CONFIG_SETTING_AI :{ORANGE}Съперници STR_CONFIG_SETTING_AI_NPC :{ORANGE}Компютърни играчи -STR_CONFIG_SETTING_PATHFINDER_OPF :Оригинален STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(препоръчва се) diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 85692edc37..4d889fd3b4 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1715,7 +1715,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distrib STR_CONFIG_SETTING_AI :{ORANGE}Competidors STR_CONFIG_SETTING_AI_NPC :{ORANGE}Jugadors IA -STR_CONFIG_SETTING_PATHFINDER_OPF :Original STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Recomanat) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 3b659bbf1c..701bd7fb98 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1812,7 +1812,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distrib STR_CONFIG_SETTING_AI :{ORANGE}Suparnici STR_CONFIG_SETTING_AI_NPC :{ORANGE}Računalni igrači -STR_CONFIG_SETTING_PATHFINDER_OPF :Original STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Preporučljivo) diff --git a/src/lang/czech.txt b/src/lang/czech.txt index e8b8c2a292..5a22128758 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1778,7 +1778,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distrib STR_CONFIG_SETTING_AI :{ORANGE}Konkurenti STR_CONFIG_SETTING_AI_NPC :{ORANGE}Umělá inteligence -STR_CONFIG_SETTING_PATHFINDER_OPF :Původní STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(doporučený) diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 9301a698b0..5a30026efe 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1716,7 +1716,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Fragtdi STR_CONFIG_SETTING_AI :{ORANGE}Modstandere STR_CONFIG_SETTING_AI_NPC :{ORANGE}Computerstyrede spillere -STR_CONFIG_SETTING_PATHFINDER_OPF :Original STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Anbefalet) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index d20fcafede..e2ee98fdad 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1716,7 +1716,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Vrachtd STR_CONFIG_SETTING_AI :{ORANGE}Tegenstanders STR_CONFIG_SETTING_AI_NPC :{ORANGE}Computerspelers -STR_CONFIG_SETTING_PATHFINDER_OPF :Origineel STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Aanbevolen) diff --git a/src/lang/english.txt b/src/lang/english.txt index b6146718f2..209c452e2d 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1716,7 +1716,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Cargo d STR_CONFIG_SETTING_AI :{ORANGE}Competitors STR_CONFIG_SETTING_AI_NPC :{ORANGE}Computer players -STR_CONFIG_SETTING_PATHFINDER_OPF :Original STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Recommended) diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 5deb9abd49..10bed1fb42 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1663,7 +1663,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Cargo d STR_CONFIG_SETTING_AI :{ORANGE}Competitors STR_CONFIG_SETTING_AI_NPC :{ORANGE}Computer players -STR_CONFIG_SETTING_PATHFINDER_OPF :Original STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Recommended) diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index aaedcbb656..6fccdf640e 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1714,7 +1714,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Cargo d STR_CONFIG_SETTING_AI :{ORANGE}Competitors STR_CONFIG_SETTING_AI_NPC :{ORANGE}Computer players -STR_CONFIG_SETTING_PATHFINDER_OPF :Original STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Recommended) diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 910be6be85..964f1f44d8 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1368,7 +1368,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Industr STR_CONFIG_SETTING_AI :{ORANGE}Konkurantoj STR_CONFIG_SETTING_AI_NPC :{ORANGE}Komputil-ludantoj -STR_CONFIG_SETTING_PATHFINDER_OPF :Originale STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Rekomendite) diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index f031b77def..f8210e6596 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1745,7 +1745,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Kaubaja STR_CONFIG_SETTING_AI :{ORANGE}Konkurendid STR_CONFIG_SETTING_AI_NPC :{ORANGE}Arvuti -STR_CONFIG_SETTING_PATHFINDER_OPF :Algne STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(soovitatud) diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index a9f862e87c..d85ad04ccf 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1523,7 +1523,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Ídnað STR_CONFIG_SETTING_AI :{ORANGE}Kappingarneytar STR_CONFIG_SETTING_AI_NPC :{ORANGE}Teldu spælarir -STR_CONFIG_SETTING_PATHFINDER_OPF :Upprunaligur STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Viðmældur) diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 543e091f1d..829ac56867 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1716,7 +1716,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Rahdin STR_CONFIG_SETTING_AI :{ORANGE}Kilpailijat STR_CONFIG_SETTING_AI_NPC :{ORANGE}Tietokonepelaajat -STR_CONFIG_SETTING_PATHFINDER_OPF :Alkuperäinen STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Suositeltu) diff --git a/src/lang/french.txt b/src/lang/french.txt index 15d9149f07..97d2f9110d 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1711,7 +1711,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distrib STR_CONFIG_SETTING_AI :{ORANGE}Compétiteurs STR_CONFIG_SETTING_AI_NPC :{ORANGE}Intelligence artificielle -STR_CONFIG_SETTING_PATHFINDER_OPF :Original STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(recommandé) diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 958a185c10..36df72dcee 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -1894,7 +1894,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Sgaoile STR_CONFIG_SETTING_AI :{ORANGE}Co-farpaisichean STR_CONFIG_SETTING_AI_NPC :{ORANGE}Cluicheadairean coimpiutair -STR_CONFIG_SETTING_PATHFINDER_OPF :Tùsail STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(molta) diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 5741587d7a..7f4e97f733 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1687,7 +1687,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distrib STR_CONFIG_SETTING_AI :{ORANGE}Competidores STR_CONFIG_SETTING_AI_NPC :{ORANGE}Xogadores da computadora -STR_CONFIG_SETTING_PATHFINDER_OPF :Orixinal STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Recomendado) diff --git a/src/lang/german.txt b/src/lang/german.txt index 3020bee3f6..0a0501e614 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1705,7 +1705,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Warenve STR_CONFIG_SETTING_AI :{ORANGE}Mitbewerber STR_CONFIG_SETTING_AI_NPC :{ORANGE}Computerspieler -STR_CONFIG_SETTING_PATHFINDER_OPF :Original STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(empfohlen) diff --git a/src/lang/greek.txt b/src/lang/greek.txt index b185997c4e..4ac355e6d8 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1807,7 +1807,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Κατ STR_CONFIG_SETTING_AI :{ORANGE}Ανταγωνιστές STR_CONFIG_SETTING_AI_NPC :{ORANGE}Παίκτες υπολογιστή -STR_CONFIG_SETTING_PATHFINDER_OPF :Αρχικό STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Συνίσταται) diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 3f7f1457eb..e730e0c3ea 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1709,7 +1709,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}התפ STR_CONFIG_SETTING_AI :{ORANGE}מתחרים STR_CONFIG_SETTING_AI_NPC :{ORANGE}שחקני מחשב -STR_CONFIG_SETTING_PATHFINDER_OPF :מקורי STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(מומלץ) diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index e76394be51..914b2a2a4d 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1780,7 +1780,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Rakomá STR_CONFIG_SETTING_AI :{ORANGE}Ellenfelek STR_CONFIG_SETTING_AI_NPC :{ORANGE}Számítógép által vezérelt ellenfelek -STR_CONFIG_SETTING_PATHFINDER_OPF :Eredeti STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Ajánlott) diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 466616e062..5ef33b5b28 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1551,7 +1551,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Iðnað STR_CONFIG_SETTING_AI :{ORANGE}Mótherji STR_CONFIG_SETTING_AI_NPC :{ORANGE}Gervigreind -STR_CONFIG_SETTING_PATHFINDER_OPF :Upprunalegt STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Ráðlegt) diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 3937bcd763..f2f52e7a7e 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -1694,7 +1694,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distrib STR_CONFIG_SETTING_AI :{ORANGE}Pesaing STR_CONFIG_SETTING_AI_NPC :{ORANGE}Pemain Komputer -STR_CONFIG_SETTING_PATHFINDER_OPF :Asli STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Recommended) diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 3581552a4c..61fb68954d 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1684,7 +1684,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Dáilea STR_CONFIG_SETTING_AI :{ORANGE}Iomaitheoirí STR_CONFIG_SETTING_AI_NPC :{ORANGE}Ríomh-imreoirí -STR_CONFIG_SETTING_PATHFINDER_OPF :Bunaidh STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Molta) diff --git a/src/lang/italian.txt b/src/lang/italian.txt index fe63ab589c..7a7f799d69 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1734,7 +1734,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distrib STR_CONFIG_SETTING_AI :{ORANGE}Avversari STR_CONFIG_SETTING_AI_NPC :{ORANGE}Giocatori controllati dal computer -STR_CONFIG_SETTING_PATHFINDER_OPF :Originale STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(raccomandato) diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index eac47fcef2..6977a8a5be 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -1684,7 +1684,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}貨物 STR_CONFIG_SETTING_AI :{ORANGE}競争会社 STR_CONFIG_SETTING_AI_NPC :{ORANGE}コンピュータプレイヤー -STR_CONFIG_SETTING_PATHFINDER_OPF :オリジナル STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF{BLUE}(おすすめ) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index b74219005f..fb0cc1052c 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1711,7 +1711,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}화물 STR_CONFIG_SETTING_AI :{ORANGE}경쟁자 STR_CONFIG_SETTING_AI_NPC :{ORANGE}컴퓨터 플레이어 -STR_CONFIG_SETTING_PATHFINDER_OPF :오리지널 STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(권장) diff --git a/src/lang/latin.txt b/src/lang/latin.txt index ad37801bcc..63ebbcbc12 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -1884,7 +1884,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Partiti STR_CONFIG_SETTING_AI :{ORANGE}Competitores STR_CONFIG_SETTING_AI_NPC :{ORANGE}Lusores computatrales -STR_CONFIG_SETTING_PATHFINDER_OPF :Originale STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Commendatum) diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index c96d7a433d..05ff2588b4 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1632,7 +1632,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Kravu s STR_CONFIG_SETTING_AI :{ORANGE}Sāncenši STR_CONFIG_SETTING_AI_NPC :{ORANGE}Nespēlētāju tēli (datora vadīti) -STR_CONFIG_SETTING_PATHFINDER_OPF :Sākotnējais STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(ieteicamais) diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 5edd5cb95c..742e192eea 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1903,7 +1903,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Krovini STR_CONFIG_SETTING_AI :{ORANGE}Konkurentai STR_CONFIG_SETTING_AI_NPC :{ORANGE}Kompiuterio žaidėjai -STR_CONFIG_SETTING_PATHFINDER_OPF :Originalus STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Rekomenduojama) diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index ac29b6e65a..916b263e9a 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1686,7 +1686,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Wuereve STR_CONFIG_SETTING_AI :{ORANGE}Géigner STR_CONFIG_SETTING_AI_NPC :{ORANGE}Computerspiller -STR_CONFIG_SETTING_PATHFINDER_OPF :Original STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(recommandéiert) diff --git a/src/lang/malay.txt b/src/lang/malay.txt index a7b69866ba..a5553ad6ad 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1450,7 +1450,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Industr STR_CONFIG_SETTING_AI :{ORANGE}Pesaing STR_CONFIG_SETTING_AI_NPC :{ORANGE}Pemain komputer -STR_CONFIG_SETTING_PATHFINDER_OPF :Asal STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Disyorkan) diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 78e72ea0ab..3fae530b8f 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1719,7 +1719,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Gods-di STR_CONFIG_SETTING_AI :{ORANGE}Motstandere STR_CONFIG_SETTING_AI_NPC :{ORANGE}Datamaskinstyrte spillere -STR_CONFIG_SETTING_PATHFINDER_OPF :Original STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Anbefalt) diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 2a71571c22..e998101d34 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1607,7 +1607,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Varefor STR_CONFIG_SETTING_AI :{ORANGE}Motstandarar STR_CONFIG_SETTING_AI_NPC :{ORANGE}Datamaskinspelarar -STR_CONFIG_SETTING_PATHFINDER_OPF :Original STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Anbefalt) diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 6ff0d135d3..2b7ee1b4a8 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2084,7 +2084,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Dystryb STR_CONFIG_SETTING_AI :{ORANGE}Rywale STR_CONFIG_SETTING_AI_NPC :{ORANGE}Gracze komputerowi -STR_CONFIG_SETTING_PATHFINDER_OPF :Oryginalne STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Zalecane) diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 329af3ca48..e2ba14b44b 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1711,7 +1711,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distrib STR_CONFIG_SETTING_AI :{ORANGE}Oponentes STR_CONFIG_SETTING_AI_NPC :{ORANGE}Jogadores Computador -STR_CONFIG_SETTING_PATHFINDER_OPF :Original STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Recomendado) diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 074c65fce9..e1deb9971f 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -1665,7 +1665,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distrib STR_CONFIG_SETTING_AI :{ORANGE}Concurenţi STR_CONFIG_SETTING_AI_NPC :{ORANGE}Jucători virtuali -STR_CONFIG_SETTING_PATHFINDER_OPF :Original STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Recomandat) diff --git a/src/lang/russian.txt b/src/lang/russian.txt index c78b2cdc0b..400cc1b8db 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1868,7 +1868,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Рас STR_CONFIG_SETTING_AI :{ORANGE}Конкуренты STR_CONFIG_SETTING_AI_NPC :{ORANGE}Искусственный интеллект -STR_CONFIG_SETTING_PATHFINDER_OPF :оригинальный STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Рекомендуется) diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 9704d5c92d..fd8da75b77 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -1891,7 +1891,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distrib STR_CONFIG_SETTING_AI :{ORANGE}Suparnici STR_CONFIG_SETTING_AI_NPC :{ORANGE}Računar -STR_CONFIG_SETTING_PATHFINDER_OPF :Originalno STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Preporučuje se) diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index f79922a6fd..78e0623429 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1694,7 +1694,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}货物 STR_CONFIG_SETTING_AI :{ORANGE}竞争 STR_CONFIG_SETTING_AI_NPC :{ORANGE}电脑玩家 -STR_CONFIG_SETTING_PATHFINDER_OPF :原始的 STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(推荐) diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index ae47703491..6aec809897 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1752,7 +1752,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distrib STR_CONFIG_SETTING_AI :{ORANGE}Konkurenti STR_CONFIG_SETTING_AI_NPC :{ORANGE}Počítačový hráči -STR_CONFIG_SETTING_PATHFINDER_OPF :Pôvodný STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(odporučený) diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index b9f22e74dc..2adfe3343a 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1838,7 +1838,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Razpore STR_CONFIG_SETTING_AI :{ORANGE}Tekmeci STR_CONFIG_SETTING_AI_NPC :{ORANGE}Računalniški igralci -STR_CONFIG_SETTING_PATHFINDER_OPF :Original STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Priporočeno) diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 938fcbc7b3..158998666c 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1696,7 +1696,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distrib STR_CONFIG_SETTING_AI :{ORANGE}Competidores STR_CONFIG_SETTING_AI_NPC :{ORANGE}Jugadores de la CPU (IA) -STR_CONFIG_SETTING_PATHFINDER_OPF :Original STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Recomendado) diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index c440f95bb5..b57aea35b3 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1711,7 +1711,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distrib STR_CONFIG_SETTING_AI :{ORANGE}Competidores STR_CONFIG_SETTING_AI_NPC :{ORANGE}Jugadores no humanos -STR_CONFIG_SETTING_PATHFINDER_OPF :Original STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(recomendado) diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 3aa154a2e7..e4016174dc 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1704,7 +1704,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Godsdis STR_CONFIG_SETTING_AI :{ORANGE}Motståndare STR_CONFIG_SETTING_AI_NPC :{ORANGE}Datorspelare -STR_CONFIG_SETTING_PATHFINDER_OPF :Standard STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Rekommenderad) diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index ae273e4a19..c67f9ab064 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1468,7 +1468,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}சர STR_CONFIG_SETTING_AI :{ORANGE}போட்டியாளர்கள் STR_CONFIG_SETTING_AI_NPC :{ORANGE}கணினி வீரர்கள் -STR_CONFIG_SETTING_PATHFINDER_OPF :அசல் STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(பரிந்துரைக்கப்பட்டது) diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 4a33e7d6b5..99a011be6d 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1635,7 +1635,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}กา STR_CONFIG_SETTING_AI :{ORANGE}คู่แข่ง STR_CONFIG_SETTING_AI_NPC :{ORANGE}ผู้เล่นคอมพิวเตอร์ -STR_CONFIG_SETTING_PATHFINDER_OPF :ดั้งเดิม STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(แนะนำ) diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 0148767bee..18e146e1ff 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1684,7 +1684,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}貨物 STR_CONFIG_SETTING_AI :{ORANGE}競爭對手 STR_CONFIG_SETTING_AI_NPC :{ORANGE}電腦玩家 -STR_CONFIG_SETTING_PATHFINDER_OPF :預設 STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(建議) diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index b801e5c26c..16e8ccfa34 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -1709,7 +1709,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Kargo d STR_CONFIG_SETTING_AI :{ORANGE}Rakipler STR_CONFIG_SETTING_AI_NPC :{ORANGE}Bilgisayar oyuncuları -STR_CONFIG_SETTING_PATHFINDER_OPF :Özgün STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Önerilen) diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index ba2f2c4ee2..a04f8b6e7b 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1844,7 +1844,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Роз STR_CONFIG_SETTING_AI :{ORANGE}Конкуренти STR_CONFIG_SETTING_AI_NPC :{ORANGE}Віртуальні гравці -STR_CONFIG_SETTING_PATHFINDER_OPF :стандартний STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(рекомендовано) diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index 2c399a5208..9e6b3d470d 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -1635,7 +1635,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Frachtd STR_CONFIG_SETTING_AI :{ORANGE}Tsjinstânners STR_CONFIG_SETTING_AI_NPC :{ORANGE}Computer spilers -STR_CONFIG_SETTING_PATHFINDER_OPF :Orizjiniel STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Recommended) diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index 7818d765bf..5fd8737539 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -1414,7 +1414,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}توز STR_CONFIG_SETTING_AI :{ORANGE}رقیبان STR_CONFIG_SETTING_AI_NPC :{ORANGE}بازیگران رایانه -STR_CONFIG_SETTING_PATHFINDER_OPF :اصلی STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(توصیه می گردد) diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index 988a6c7862..af1a108c1d 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -1311,7 +1311,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}صنع STR_CONFIG_SETTING_AI :{ORANGE}مد مقابل STR_CONFIG_SETTING_AI_NPC :{ORANGE}کمپیوٹر کے کھلاڑی -STR_CONFIG_SETTING_PATHFINDER_OPF :اصلی STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Recommended) diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 1de743a340..0e72993f8e 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1699,7 +1699,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Phân b STR_CONFIG_SETTING_AI :{ORANGE}Đối Thủ STR_CONFIG_SETTING_AI_NPC :{ORANGE}Nhân vật máy -STR_CONFIG_SETTING_PATHFINDER_OPF :Nguyên bản STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Nên dùng) diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index d991c3db33..131c05d6c2 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1686,7 +1686,6 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Dosrani STR_CONFIG_SETTING_AI :{ORANGE}Cystadleuwyr STR_CONFIG_SETTING_AI_NPC :{ORANGE}Chwaraewyr Cyfrifiadurol -STR_CONFIG_SETTING_PATHFINDER_OPF :Gwreiddiol STR_CONFIG_SETTING_PATHFINDER_NPF :NPF STR_CONFIG_SETTING_PATHFINDER_YAPF_RECOMMENDED :YAPF {BLUE}(Argymellir) From c66b9c657a90a988076abedc43e66c39a7b41763 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 17 Mar 2019 19:45:44 +0100 Subject: [PATCH 507/622] Update: Translations from eints dutch: 1 change by JanWillem russian: 1 change by Lone_Wolf --- src/lang/dutch.txt | 1 + src/lang/russian.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index e2ee98fdad..ced8ca5b03 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -3033,6 +3033,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF ' STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Vracht- of ombouwinformatie voor '{1:ENGINE}' wijkt af van aanschaflijst na het bouwen. Dit kan resulteren in problemen bij ombouwen door automatisch vernieuwen/vervangen STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' heeft een eindeloze loop veroorzaakt in de productiecallback STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback {1:HEX} gaf onbekend/ongeldig resultaat {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' retourneerde een ongeldig vrachttype in de productie-terugroep op {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 400cc1b8db..af60eb745b 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -3213,6 +3213,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Информация о вместимости/переоборудовании для локомотива «{1:ENGINE}» после постройки отличается от сведений в списке покупки, что может помешать функции автообновления/автозамены корректно произвести переоборудование. STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}Модуль «{1:STRING}» вызвал бесконечный цикл STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Функция обратного вызова {1:HEX} вернула непонятный/неверный результат {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}«{1:STRING}» вернул неверный тип груза по адресу {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO :<неизвестный груз> From 43caef2968bccdab63896e816ee86f9d70f3c769 Mon Sep 17 00:00:00 2001 From: stormcone <48624099+stormcone@users.noreply.github.com> Date: Sun, 17 Mar 2019 21:28:37 +0100 Subject: [PATCH 508/622] Fix f58fa80e: Wrong company performance rating when money exceeds INT_MAX. (#7382) Company performance rating calculation does not take into account the companies' money when those exceeds INT_MAX. --- src/economy.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/economy.cpp b/src/economy.cpp index 197298d9b2..19b36e7c9e 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -260,7 +260,7 @@ int UpdateCompanyRatingAndValue(Company *c, bool update) /* Skip the total */ if (i == SCORE_TOTAL) continue; /* Check the score */ - s = Clamp(_score_part[owner][i], 0, _score_info[i].needed) * _score_info[i].score / _score_info[i].needed; + s = Clamp(_score_part[owner][i], 0, _score_info[i].needed) * _score_info[i].score / _score_info[i].needed; score += s; total_score += _score_info[i].score; } From fe13fadcfb2b00738faeae532ed4308875e3fcb5 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 17 Mar 2019 21:50:32 +0100 Subject: [PATCH 509/622] Codechange: fix Intel C++ Compiler linking issues. GetAircraftFlightLevel is only used in static functions inside aircraft_cmd.cpp. With GCC, Clang and MSVC this is not an issue, but on ICC fails linking, because it doesn't find this version of this template. Possibly these two pieces of information are linked. Explicit defining the function fixes the issue. --- src/aircraft_cmd.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index b08cb188d3..99c86d6e17 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -783,6 +783,7 @@ int GetAircraftFlightLevel(T *v, bool takeoff) } template int GetAircraftFlightLevel(DisasterVehicle *v, bool takeoff); +template int GetAircraftFlightLevel(Aircraft *v, bool takeoff); /** * Find the entry point to an airport depending on direction which From 559d4e833560bfd0a62ea65f5556920122a4930d Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 19 Mar 2019 19:45:46 +0100 Subject: [PATCH 510/622] Update: Translations from eints korean: 7 changes by telk5093 --- src/lang/korean.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index fb0cc1052c..803ec85b07 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1185,6 +1185,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :건물, 트랙 STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :건물이나 도로/선로 등을 제거하지 않고도 하부의 지형을 편집할 수 있게 허용합니다. STR_CONFIG_SETTING_CATCHMENT :더 현실적인 역세권 지정: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :역과 공항의 종류에 따라 다른 크기의 역세권을 가지도록 만듭니다. +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :역이 붙어 있는 산업 시설의 화물을 회사의 역이 취급 가능: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :이 설정을 켜면, (유전과 같이) 역이 붙어 있는 산업시설이 근처에 지은 회사 소유의 역에서도 화물을 취급할 수 있습니다. 이 설정을 끄면, 반드시 산업시설에 붙어 있는 역에서만 화물을 취급할 수 있습니다. 인근에 있는 모든 회사 소유의 역은 화물을 취급할 수 없게 되며, 산업시설에 붙어 있는 역도 그 산업시설 이외의 화물을 취급할 수 없게 됩니다. STR_CONFIG_SETTING_EXTRADYNAMITE :도시 소유의 도로, 다리 등의 제거 허용: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :도시 소유의 기반시설이나 건물을 제거할 수 있게 합니다. STR_CONFIG_SETTING_TRAIN_LENGTH :열차의 최대 길이: {STRING} @@ -1584,6 +1586,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :플레이어가 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 :도시 화물 생성: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :도시의 전반적인 인구에 따라, 도시가 얼마나 많은 화물을 생산하는 지를 설정합니다.{}제곱 성장: 도시의 규모가 2배 커지면 승객을 4배 더 생산합니다.{}선형 성장: 도시의 규모가 2배 커지면 승객을 2배 더 생산합니다. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :제곱 (기본) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :선형 STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :게임 진행 중에 나무가 자동적으로 번식: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :게임 중에 나무가 자동적으로 번식하는지 여부를 조절합니다. 이 설정을 조정하면, 아열대 기후의 벌목소처럼 나무의 성장에 의존하는 산업시설에 영향을 끼칠 수 있습니다. @@ -3028,6 +3034,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF ' STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}{1:ENGINE}(을)를 만들기 이전과 이후의 화물/개조 정보가 현재의 구매 목록과 다릅니다. 이 경우 자동 교체시 열차 개조에 실패할 수도 있습니다. STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' 때문에 결과물 콜백 과정에서 무한 루프가 발생하고 있습니다. STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}콜백 함수({1:HEX})가 알 수 없거나 잘못된 결과 값({2:HEX})을 반환했습니다. +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' - 생산 콜백 함수의 {2:HEX}에서 잘못된 화물 종류를 반환했습니다. # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO :<알 수 없는 화물> From 72c5f2b3eed77120d86ecf636e07c71eb23b4bd5 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Tue, 19 Mar 2019 22:23:09 +0100 Subject: [PATCH 511/622] Remove: DOS support In 10 years there was no active development on DOS. Although it turned out to still work, the FPS was very bad. There is little interest in the current community to look into this. Further more, we like to switch to c++11 functions for threads, which are not implemented by DJGPP, the only current compiler for DOS. Additionally, DOS is the only platform which does not support networking. It is the reason we have tons of #ifdefs to support disabling networking. By removing DOS support, we can both use c++11 functions for threads, and remove all the code related to disabling network. Sadly, this means we have to see DOS go. Of course, if you feel up for the task, simply revert this commit, and implement stub c++11 functions for threads and stub functions for networking. We are more than happy to accept such Pull Request. --- Makefile.bundle.in | 6 - Makefile.src.in | 4 - README.md | 22 -- config.lib | 36 +- configure | 3 +- os/dos/cwsdpmi/README.licensing | 3 - os/dos/cwsdpmi/cwsdpmi.exe | Bin 20125 -> 0 bytes os/dos/cwsdpmi/cwsdpmi.txt | 173 --------- os/dos/cwsdpmi/cwsdstub.exe | Bin 21504 -> 0 bytes os/dos/exe2coff/README.licensing | 3 - os/dos/exe2coff/copying | 339 ----------------- os/dos/exe2coff/copying.dj | 48 --- os/dos/exe2coff/copying.lib | 481 ------------------------ os/dos/exe2coff/exe2coff.c | 94 ----- os/dos/make_dos_binary_selfcontained.sh | 11 - source.list | 5 +- src/core/endian_type.hpp | 2 +- src/cpu.cpp | 2 +- src/fileio.cpp | 6 +- src/intro_gui.cpp | 2 - src/lang/afrikaans.txt | 1 - src/lang/arabic_egypt.txt | 1 - src/lang/basque.txt | 1 - src/lang/belarusian.txt | 1 - src/lang/brazilian_portuguese.txt | 1 - src/lang/bulgarian.txt | 1 - src/lang/catalan.txt | 1 - src/lang/croatian.txt | 1 - src/lang/czech.txt | 1 - src/lang/danish.txt | 1 - src/lang/dutch.txt | 1 - src/lang/english.txt | 1 - src/lang/english_AU.txt | 1 - src/lang/english_US.txt | 1 - src/lang/esperanto.txt | 1 - src/lang/estonian.txt | 1 - src/lang/faroese.txt | 1 - src/lang/finnish.txt | 1 - src/lang/french.txt | 1 - src/lang/gaelic.txt | 1 - src/lang/galician.txt | 1 - src/lang/german.txt | 1 - src/lang/greek.txt | 1 - src/lang/hebrew.txt | 1 - src/lang/hungarian.txt | 1 - src/lang/icelandic.txt | 1 - src/lang/indonesian.txt | 1 - src/lang/irish.txt | 1 - src/lang/italian.txt | 1 - src/lang/japanese.txt | 1 - src/lang/korean.txt | 1 - src/lang/latin.txt | 1 - src/lang/latvian.txt | 1 - src/lang/lithuanian.txt | 1 - src/lang/luxembourgish.txt | 1 - src/lang/malay.txt | 1 - src/lang/norwegian_bokmal.txt | 1 - src/lang/norwegian_nynorsk.txt | 1 - src/lang/polish.txt | 1 - src/lang/portuguese.txt | 1 - src/lang/romanian.txt | 1 - src/lang/russian.txt | 1 - src/lang/serbian.txt | 1 - src/lang/simplified_chinese.txt | 1 - src/lang/slovak.txt | 1 - src/lang/slovenian.txt | 1 - src/lang/spanish.txt | 1 - src/lang/spanish_MX.txt | 1 - src/lang/swedish.txt | 1 - src/lang/tamil.txt | 1 - src/lang/thai.txt | 1 - src/lang/traditional_chinese.txt | 1 - src/lang/turkish.txt | 1 - src/lang/ukrainian.txt | 1 - src/lang/unfinished/chuvash.txt | 1 - src/lang/unfinished/frisian.txt | 1 - src/lang/unfinished/persian.txt | 1 - src/lang/unfinished/urdu.txt | 1 - src/lang/vietnamese.txt | 1 - src/lang/welsh.txt | 1 - src/stdafx.h | 14 +- src/video/allegro_v.cpp | 12 +- 82 files changed, 21 insertions(+), 1305 deletions(-) delete mode 100644 os/dos/cwsdpmi/README.licensing delete mode 100644 os/dos/cwsdpmi/cwsdpmi.exe delete mode 100644 os/dos/cwsdpmi/cwsdpmi.txt delete mode 100644 os/dos/cwsdpmi/cwsdstub.exe delete mode 100644 os/dos/exe2coff/README.licensing delete mode 100644 os/dos/exe2coff/copying delete mode 100644 os/dos/exe2coff/copying.dj delete mode 100644 os/dos/exe2coff/copying.lib delete mode 100644 os/dos/exe2coff/exe2coff.c delete mode 100755 os/dos/make_dos_binary_selfcontained.sh diff --git a/Makefile.bundle.in b/Makefile.bundle.in index eaf7134dde..3b0dc6798f 100644 --- a/Makefile.bundle.in +++ b/Makefile.bundle.in @@ -89,12 +89,6 @@ ifdef MENU_DIR endif ifeq ($(TTD), openttd.exe) $(Q)unix2dos "$(BUNDLE_DIR)/docs/"* "$(BUNDLE_DIR)/README.md" "$(BUNDLE_DIR)/COPYING" "$(BUNDLE_DIR)/changelog.txt" "$(BUNDLE_DIR)/known-bugs.txt" -ifeq ($(OS), DOS) - $(Q)cp "$(ROOT_DIR)/os/dos/cwsdpmi/cwsdpmi.txt" "$(BUNDLE_DIR)/docs/" -ifndef STRIP - $(Q)cp "$(ROOT_DIR)/os/dos/cwsdpmi/cwsdpmi.exe" "$(TTD_DIR)/" -endif -endif endif ### Packing the current bundle into several compressed file formats ### diff --git a/Makefile.src.in b/Makefile.src.in index 6b235be9d3..a64a5d5dff 100644 --- a/Makefile.src.in +++ b/Makefile.src.in @@ -270,10 +270,6 @@ $(TTD): $(OBJS) $(CONFIG_CACHE_LINKER) ifdef STRIP $(Q)$(STRIP) $@ endif -ifeq ($(OS), DOS) - $(E) '$(STAGE) Adding CWSDPMI stub to $@' - $(Q)$(ROOT_DIR)/os/dos/make_dos_binary_selfcontained.sh $(SRC_OBJS_DIR)/$@ -endif # Revision files diff --git a/README.md b/README.md index 2d681d0d16..1bfc8716cc 100644 --- a/README.md +++ b/README.md @@ -152,7 +152,6 @@ OpenTTD has been ported to several platforms and operating systems. It should not be very difficult to port it to a new platform. The currently working platforms are: -- DOS (Allegro) - FreeBSD (SDL) - Haiku (SDL) - Linux (SDL or Allegro) @@ -555,17 +554,6 @@ Use '`make`', but do a '`./configure`' before the first build. A comprehensive GNU build environment is required to build the OS/2 version. See the docs/Readme_OS2.txt file for more information. -### DOS: - -A build environment with DJGPP is needed as well as libraries such as -Allegro, zlib and libpng, which all can be downloaded from the DJGPP -website. Compilation is straight forward: use '`make`', but do a '`./configure`' -before the first build. The build binary will need cwsdpmi.exe to be in -the same directory as the openttd executable. cwsdpmi.exe can be found in -the os/dos/cwsdpmi subdirectory. If you compile with stripping turned on a -binary will be generated that does not need cwsdpmi.exe by adding the -cswdstub.exe to the created OpenTTD binary. - ### 7.1) Required/optional libraries The following libraries are used by OpenTTD for: @@ -752,16 +740,6 @@ License 2.1, and partly under the (3-clause) BSD license. The exact licensing terms can be found in src/3rdparty/os2/getaddrinfo.c resp. src/3rdparty/os2/getnameinfo.c. -The exe2coff implementation in os/dos/exe2coff is available under the -GPL, with a number of additional terms. See os/dos/exe2coff/copying and -os/dos/exe2coff/copying.dj for the exact licensing terms. - -The CWSDPMI implementation in os/dos/cwsdpmi is distributed under a -custom binary-only license that prohibits modification. The exact -licensing terms can be found in os/dos/cwsdpmi/cwsdpmi.txt. The sources -for these files can be downloaded at its author site, at -http://homer.rice.edu/~sandmann/cwsdpmi/csdpmi5s.zip. - CONTRIBUTING.md is adapted from [Bootstrap](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md) under the [Creative Commons Attribution 3.0 Unported diff --git a/config.lib b/config.lib index bab1ca4ea4..18ea119c43 100644 --- a/config.lib +++ b/config.lib @@ -553,10 +553,10 @@ check_params() { # Check if all params have valid values - # OS only allows DETECT, UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HAIKU, SUNOS, CYGWIN, MINGW, OS2, and DOS - if [ -z "`echo $os | egrep '^(DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|HAIKU|SUNOS|CYGWIN|MINGW|OS2|DOS)$'`" ]; then + # OS only allows DETECT, UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HAIKU, SUNOS, CYGWIN, MINGW, and OS2 + if [ -z "`echo $os | egrep '^(DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|HAIKU|SUNOS|CYGWIN|MINGW|OS2)$'`" ]; then log 1 "configure: error: invalid option --os=$os" - log 1 " Available options are: --os=[DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|HAIKU|SUNOS|CYGWIN|MINGW|OS2|DOS]" + log 1 " Available options are: --os=[DETECT|UNIX|OSX|FREEBSD|DRAGONFLY|OPENBSD|NETBSD|HPUX|HAIKU|SUNOS|CYGWIN|MINGW|OS2]" exit 1 fi # cpu_type can be either 32 or 64 @@ -623,7 +623,7 @@ check_params() { detect_sse_capable_architecture if [ "$enable_static" = "1" ]; then - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "DOS" ]; then + if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then enable_static="2" else enable_static="0" @@ -633,8 +633,8 @@ check_params() { if [ "$enable_static" != "0" ]; then log 1 "checking static... yes" - if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "OSX" ] && [ "$os" != "DOS" ]; then - log 1 "WARNING: static is only known to work on Windows, DOS, and MacOSX" + if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "OSX" ]; then + log 1 "WARNING: static is only known to work on Windows, and MacOSX" log 1 "WARNING: use static at your own risk on this platform" sleep 5 @@ -644,7 +644,7 @@ check_params() { fi if [ "$enable_unicode" = "1" ]; then - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "DOS" ]; then + if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then enable_unicode="2" else enable_unicode="0" @@ -784,10 +784,7 @@ check_params() { log 1 "checking console application... enabled" fi - if [ "$enable_network" = "1" ] && [ "$os" = "DOS" ]; then - log 1 "checking network... DOS, skipping" - enable_network=0 - elif [ "$enable_network" != "0" ]; then + if [ "$enable_network" != "0" ]; then log 1 "checking network... found" else log 1 "checking network... disabled" @@ -1023,10 +1020,6 @@ check_params() { grfcodec="" fi - if [ "$os" = "DOS" ]; then - with_threads="0" - fi - if [ "$os" != "OSX" ] && [ "$with_application_bundle" != "0" ]; then if [ "$with_application_bundle" = "1" ]; then with_application_bundle="0" @@ -1129,7 +1122,7 @@ check_params() { fi if [ "$personal_dir" = "1" ]; then - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "DOS" ] || [ "$os" = "HAIKU" ]; then + if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "HAIKU" ]; then personal_dir="OpenTTD" elif [ "$os" = "OSX" ]; then personal_dir="Documents/OpenTTD" @@ -1603,11 +1596,11 @@ make_cflags_and_ldflags() { fi fi - if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "OSX" ] && [ "$os" != "DOS" ] && [ "$os" != "OS2" ]; then + if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "OSX" ] && [ "$os" != "OS2" ]; then LIBS="$LIBS -lpthread" fi - if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "MINGW" ] && [ "$os" != "DOS" ]; then + if [ "$os" != "CYGWIN" ] && [ "$os" != "HAIKU" ] && [ "$os" != "MINGW" ]; then LIBS="$LIBS -lc" fi @@ -2328,7 +2321,7 @@ detect_awk() { detect_os() { if [ "$os" = "DETECT" ]; then - # Detect UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, SUNOS, CYGWIN, MINGW, OS2, and DOS + # Detect UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, SUNOS, CYGWIN, MINGW, and OS2 # Try first via dumpmachine, then via uname os=`echo "$host" | tr '[A-Z]' '[a-z]' | $awk ' @@ -2345,7 +2338,6 @@ detect_os() { /cygwin/ { print "CYGWIN"; exit} /mingw/ { print "MINGW"; exit} /os2/ { print "OS2"; exit} - /dos/ { print "DOS"; exit} '` if [ -z "$os" ]; then @@ -2369,7 +2361,7 @@ detect_os() { if [ -z "$os" ]; then log 1 "detecting OS... none detected" log 1 "I couldn't detect your OS. Please use --os=OS to force one" - log 1 "Allowed values are: UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, HAIKU, SUNOS, CYGWIN, MINGW, OS2, and DOS" + log 1 "Allowed values are: UNIX, OSX, FREEBSD, DRAGONFLY, OPENBSD, NETBSD, HPUX, HAIKU, SUNOS, CYGWIN, MINGW, and OS2" exit 1 fi @@ -3453,7 +3445,7 @@ showhelp() { echo " --os=OS the OS we are compiling for [DETECT]" echo " DETECT/UNIX/OSX/FREEBSD/DRAGONFLY/OPENBSD/" echo " NETBSD/HPUX/SUNOS/CYGWIN/" - echo " MINGW/OS2/DOS/HAIKU" + echo " MINGW/OS2/HAIKU" echo "" echo "Paths:" echo " --prefix-dir=dir specifies the prefix for all installed" diff --git a/configure b/configure index f6c6a2eec9..7a13a96c88 100755 --- a/configure +++ b/configure @@ -75,7 +75,7 @@ save_params make_cflags_and_ldflags EXE="" -if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "OS2" ] || [ "$os" = "DOS" ]; then +if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "OS2" ]; then EXE=".exe" fi @@ -116,7 +116,6 @@ AWKCOMMAND=' if ($0 == "DEDICATED" && "'$enable_dedicated'" != "1") { next; } if ($0 == "AI" && "'$enable_ai'" == "0") { next; } if ($0 == "COCOA" && "'$with_cocoa'" == "0") { next; } - if ($0 == "DOS" && "'$os'" != "DOS") { next; } if ($0 == "HAIKU" && "'$os'" != "HAIKU") { next; } if ($0 == "WIN32" && "'$os'" != "MINGW" && "'$os'" != "CYGWIN" && "'$os'" != "MSVC") { next; } diff --git a/os/dos/cwsdpmi/README.licensing b/os/dos/cwsdpmi/README.licensing deleted file mode 100644 index 112b02a087..0000000000 --- a/os/dos/cwsdpmi/README.licensing +++ /dev/null @@ -1,3 +0,0 @@ -The files in this directory are not licensed under the same terms as the -rest of OpenTTD. Licensing details can be found in OpenTTD's readme.txt -and in this directory or subdirectories as well. diff --git a/os/dos/cwsdpmi/cwsdpmi.exe b/os/dos/cwsdpmi/cwsdpmi.exe deleted file mode 100644 index 17e3220023ca085fadf981932c9347247a9ac794..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20125 zcmeHve|%KcweOxeCub%aefH0_*Is+?wbx!}9)9d)GMn5+EaV0Lg@{LuUZVZw<4Z@bWmQ&(Bfj-3 z8nN>@LS_Ifjf5-!vH=wd{{S{d5n?wHvOJ!Uvw&*?A?NiC{OC+V27wQNcYqdP2XI?5 zAxrKc#F4V!SG=sy`S1gl>U%8rt>5s&>a`Uvw`KNyb1ZjfWo23JE4D0K zwQkMRtJbZv%&rNC3RYLGU7uOKc6E7X`5Moh%vccf|Np+m0huGgHz!D$deYIrH=k}2 zj3oWMls}2o_4V7{l zZ%aRs-5I+4T3gn!nSm(MC-mEhw;6TywCffho7uKN;j`awvpp(Zkc#+YGiwstRAo|I z0exO#l!^qYjK=D-J0I_9`<^1VlZDEsNNmej{@z0~mGKXGP2Pv@O`1Tec|SfMXVFEx zubcCp9hDFx8FqATilaF^yiS-vxKqjn@42mc-PL@0w=yxh)AOIw@44UAb$PkGKWv=Y zPQ3mp-0A2}cZBy3UcW)=N$N)n!bTO=HtIfF$c z8A8R<7QWFgpdXiCTgf7u?NN#hs*8$~n#=ejwSu%IN?H;Vy8OzFm1QgkQhr;@AK79I z$8{UY)lYj&uXbmDWP0^fk94~0n#uHfzv=bUJ&!oW$HWiLi;t8%M!Veh%T%sZ}V|@=}p`s9W!j5hc4IcF8fKA5_@|KOc@TTTKmxh>7wS>Jb%%Jm!W%n#zJ* zvazAi&}ffqD2!(|g+iEGR4%#*xkQTODAjjF=qp^DNNClCmUavA7cTb~I{k&l zo!bZTkn1nx`wE}fL{RuBmV%<ieetbqj5@`g3A z-`vt_4ZLRd-oi<}pvrF_R^lc5NQ99{!&2FZ_{zKFPp*S6a!cU|75cUZj?ILev_bM$mc37ht%!|};OpfM z@`7X)XPUgXsuH3a_aE#4t=ouYe$1^#Fk>(@jAIV>(5wfBX6tm#7ckj_36Q;pQ)wF zaf}BcefAMTShQrIe4b&;s*bbeZj5Rp5&f#)9#Ud#RUV@h0gj`r9rbMTe5BTn?6eO$ z*r!EP-i`Aqogv{J2@AtAi0@8I`KUZrJHJok_ zIfMBs>Wu0%?U<(CO!cSN(5G?UCG9hNw^qbg^Vyw{1Uxl5D%uFwDV>t)pCHm;^pM9i z9_@53($0!qhuVnubM%e6`;zl3PPn}5kn+y+;bPHr46rJ2-?R^+g_ zJUV$3au{hGA_{>5APdLj+kV~M(Pk-BlYx^Xdb z`#O0Jawb;lMxsqCFP&DYjfNL7NUA-A2d-=+wbwwhhk`$+ zY22Aq@AvLB?bu1|Qm=&PQ^*}-X|R9gO47^H^-}MauQqrLy#i!hS&N5F9)mA#IpLKR zc<^{45J`~?4?BNqhuMprbR1(+oB*~S;%XO(3Yb=(odTem6 zR9==xd`IHK>HCcGsjWKFZQ{u5Bp4kCzvWr$d!-{e+kIhs(c2nvRO5cRIzc z0bWG?s*3cvyxb5j|2%0r^^Np=UUso`&UJ~1mH4l^igxK6~m2v6|IYAfUAdEu0i zZ)?rY%TvRxUHZ1xmhke(SG2b}R}j6~pDfp;gt_q#%8h4v`E)qlkMx(U^0HgfxA1bu zP38CH$=SE0H}mpKEd4I|{BY^JSonHU{Rz(a)WDK>>Buhix0CN^tLRZ|4MoLG_E4X& z&-{{=Z55{N+pvV4#}YPo3#SOG{k-HhVl@~#yp<@rr9RcXB}V!iHUaNpYy$3!lKngu z_2^-`n?1pH0lFW^kAUTaE@Q7;#bP}*l+ zEe+1nx$@H~&p$*hJPm`tN5{fVDe`+`;Vr3hD+`y{T;TC5G)yTWJQcv!tKi>Z6J3(c z_!y4I$It|PT$xD3KH(K;#)Qbf)noCLpUN$jtIs6Wl`6V4bP%CF3IbztAMP}=`K1ZK0%Gqq1Bi5Eyq zw>3pam$H@w64+<;=kK>l_7K$!_L~E5SfM=xTCLfgfgx+)k`)trgkZV}pIL97kXV(v z2DpfQyi*=T{c+lJtbqhRvtrAnlMrPteyz;#Sef@|88G>fRev`jRLAm{4NCSws3d;- z#XkE5s<~W9l?>2SB>NQ=39%duCc{U#cscj-ni&VQ{Jm&QsCeTk9^G`wNt$7i_Fi(n_sLkT!%5!h1h4wCYX{__i2{JNih{0W)_x)o6IU zM+*-1r&{m;4QH%Sv+#zQ6AqXqy2ohc-_o5tJF8pMS?zq_kXb8`-6;mz&0?U<49>Tj zRs8w#4`EZDCnX&+d%s8A-=Uh?A+y|b88aoYS0CN^jEP3LUeU{c1eq-K&@PTrLGm<+rb3Q`xIW z+q9vg%cbx49Hk3$ORE|Bb4bC?51CD(x(zm@%t{@5{tMM0(BqI;AO?^#PiQwoN2c9T zg*LNPG>WwMdqnKUELWbef>i&;)u)$}hUmKS*_G1lli8h2HN@ti*7EYR;VOAl)@rUn zWvEw;YXh^G7OnMR8f8tR!8)U{zilo~0)zgt5&x25->B*lXpPGEq~5FRhS`2(dZ%ba zH2qsQ?FWXFo(Do=3rN)6L{+U(Y*|5Ql14PtRoZ{~$CnYs81};DQjo~b6az7$lQFOC z67(Y%F@tdSoP%cpjHbL=bGfu`%P28F6YKi3Ue5fI_IHT!m5xUq>K$eE+PXlH{OJ<6#vL0u%P>(3(cbY|M?h$-s9>qseKRyyZ#7EpI zv)J;nxmh@CZchEo+?*+!dv=dxHYI%+=W5_*>=FhbGPJaxmiE)qep=d3OZ#c*z{ln$ zlx{-lCX{YU7&K?Ld>9uvXYQ#a%8E*zQc|f`mRE9$vyxX9S4Jp{Dg~vm(x4Pn8Wme* zq>@`1rQ}pbD_NB>N=9X@GP^QPu~wQCOQl(vUKy_>R!&eRRZdjQm6Md1%E^kcGC|=h zrzk{TuKvIeF0kI#T_9X2!Qi`4aHzv7g$`QCGzVm+FVjnSsgp9x(^Htx=usgqHJGEO4SP^Q1LLY&mHa z181xX_*Nf6&(Bz;dJ>Oxw#a5-#&=l1z*(mc3wb&|vEH#IdQe*yP46UKG>cr17&wg* zmncbn!f|USN~m-9nKczawq@>uE-)H*2^iHU8Kf(RJFKiX^4w82=-(J{@!)L`6|qPx z7NyIV*HpYJt`y6}Wu`qzh;xd&#g{Zm5=+Fg8MIeo#p_~fh2L>U#q0FTl3L+&WD3Fz zQMzhCSytWUidVBg8W+UPuyYY2koolqp2WW-*21P@CzVY$>LK~v zA!uEOJ4GyJ=%$y5z6-qgs3=`X5*SCmFCL7b+>x$}zCJ#|AXfa=V-C^DCYDk@Rc6ni zj5f>=9~V!Em}9%?B+Kq>9%z>7RHKKX=He`=BB$ArAxi6QI62_})x2`{@5iYSm(g5( zjuMQ$V+A38$8!JDMgC$ZI+p9lxyirPLVG}GDNW6WR)(J06TDVOG-RA0`rSK2A&?ONX9ZXroF-_Q}@x zi+F16x!CHx*n0cLM*HZ+_j@{KhSNJNgl3q@GVm8$b>R$jRV;#%^kC!m2xvH61NuJu zD9C5$EfK1L7}%D4P)C$$K6{9#2QtZ_PnD+R3EPuBlkyU_C41r)_`Wi39?&XKBB5eM zZGN*Ih7xVfrDsB(Bc>g{!`X)Cbecx?)JH;J{U(@Ak=?ZUi<=@(YLOE*f6iZVFR zj(GE@!h#YbH|OkC_40E$d-a?*U)38uD`lIym*9b>PhhH>lc{%3xjF{|5e^?6EoGsb z`geF~K3YwrUGjeqozv4$lZl3WeH_R#R)4ApdsIEDM_JymSI41#d~@72s!}l4X?=r* zi1v+);AmRUv{b$Cux%o7{|MDQ6Umz9dKDA2&u8KokvJ_5tI|;=7EzvvgVSMGIGC)J zlXB7sXqH8j5M$*!Q7*l>TNeiI`oa(FX-ub@zSY2ELw#0A|jFH?L%J1*a@bl zYE|RYQjJ4eyqwyU@cqX1an6V@il$e(&HkcM41f0fN&-02vOQVCAgB5<>i#KI z2H0r-{hDR~YS(E7#iC*={>*+M4G%dMbEfV8Aaw1GFxAVXE}tH4OgqlNCWC?Z9mc?$ zw)e9P#2s;H+eC#s^kj1T<#@Kk`*~k4FZS`&NRAM#S(F@Aq82YXFp*de(>rvXU_r@Y z9S`N+NOmH~b^v#h=v$v_sk9`ywoPOe!j1v!hD_%8j>IUFw8`ttChboqYcx1=8Le37 z-4j>=ERrlng4ogsKN|0ISoK+i(5(bY3I}e4EuoqjCW5g?{?$}!j+OsB`gjku1T(wY zIJX9Uqjx_8lOFex`cpHfaPqIxs4<1ka^#U5v#9~ou6nnqi#-OIXyiJjRIX2BIu^}Q zw{`Zj37*J4$820tpmzDGG}c685$_!_R!{Pdm^PXkyZPb0&nD{y!Zr3QbLS=Kx$24Y z5;$&SY-9Hwu)y#}BrCUjN2XJI$+O93CEh!dtcBwh*lnIoRvWw9!h;Q~Ux%3}(;*|e z1$oD7;-u3Y1U7se{ZGV1EtI;s-uYfq`%yTsaWQh|!vy>(m)+^F-_Nt4zkZ(PxZ>^r=VS3P%!W5GrY84l0(kS7|pZFVLL?ldv$baeoV z^844rl)Y~Xa~dRLhi8TRzz0=jK|iY0Dzt}~7-*Jm&=uUpOra2SBMJIU@;$I1v(BwI zu>um6C{}5fRso|(3;y(V{%z8A))?Kb<;VywG|5-4OT(;!OcOJuNYKBe!Yn44)U?uA zn87Gu{LjE7w5lv071N;JB)44;6L2w(@pWsKg|H;c!DKADTK9MT ziZ=&;9m`m_GzSxrp3i+FW|QwHu|r+FY5T6&8`IddqfUGJe_TO=4{8mq%xPPMQ|7S0 zEW{*Y>+G6HIw2i7K}#%{HT7DUSyN+gW>yxaQIR|YHxE3<7qf^;CleSp+VqKvOz>O` ztrezqc@3?IN!d}Yzf?@SuFT@ndk6$ar_gH{v^`<=gh-t@{gcgCOOYf1O zO0w!SRr00;sFODmFwWTccukQ!n0TWCO_dDpCBCl`Jqg&sV_8PuVQ8Fg0jgkP^+kM` zd~zhEj12{?N%Z4H&9Z9iDh6va=S@rX0`k_L%w3aFx`e zO!HHV@>oW64l6BfNs|`ZQ;`*5)!3ovm|E^sO7g z$!DZxfL>qIENTc=W;7DcLOge3rn8e__DSg!P9!iFpJ%CGk9X(;7tHcw{~7L!rGwrw zi>ZO{<+q#jsaDMrs2=TD%+gW=_vO>LKF8v89M2uOVEjFo>3c8Qz_qOoRA5hJ(3k%99q9b01~js$O$=cG?d)-+o4})zYP+Gh%u|ZJNl@^ls?LG59`InUz4>poEO63?IY(kiXYZDGcW`+ z6%!W(*LT- z-aqdINChj>c^L1dq9Kj*m&8Y8ca+xZ4(1edNz@hczRkGysHOR(6-F`7P+ch%8vPN9 zL5hfA?kKnWwi=1&AO4L-2t4KQMeyPxcySTdMAnS`5<+T@{Ky0h3`-be($Kds=>~@i zXn!$@=yvHSpeomIxEo_<+7YD&cVnf7lMEewWI^L2^!}B1=LNTMVU~C@!pS)>`;XL# zBN$Wa#!x$gRn6d`2X6%$iBtX;bFfsWiN%rNHg=)<&5A36bH*z!2`6WSg%MnJutu)J z3&G@>a@CQAFHizl+Bb4jeDeIgX68{$KkppIHY6!{3gklzO`$p-nTUe-FTao z)6Stb9o$&z>~Omv<~po8nD(q^muT;ThuA5Yt@a5RUgC*hYd&qZ*D+fcbhDc1c7~Lt zR>Jy=6cT()*YZj-wn^p>6#Q4xXdlsc;#k&r^n;PBr>C7b1i=cL;#E|Gg)YIEo zG}3ui@9j1>{!aX0K#as?H_K)pp<;iCsBk{oGQyj-Rj9%JY=(mf)Cqzizl}>m9}HaW zpDFAC1tEQBn1ZV(XMzUAbPniwv)F-Q0%hU{XT_^0MVh3D8ZF_PT2LG{$uts&3T4qP zskgSHq|?M9M~>bduU)}E)oF+*$PJt^D!81WSKbQKR5a5IHG)!aT0P;2Kn%o4B1sg9 zCNU%y(K?+TNjkk=&*^zRJP$b?r{_41=OQ?PBfO3$5xNL{1Q#Jh7$S@jkr71D33`DO zctLOASarHceI$w2MeC!vXkFZeMBQzZZu{W2zujh;`oz@trjltZru}f*zfDV=zGeFH z>37~kVqLTBHi;_Pk`cHbHlJ!{mk-VTnGz}!vpY?*`o)%pWK(jd z*wTcrqhiZ*_(J3h_&OzGlugNlBBb4vJUk?9NHe>QCd)vK*)(f_S$;ifbZD`bO&77p zO)||og;qt36Y$9*9Rb;Xs(QC(WB$$RAFaLR(6~cD2RSWY39akIoYvVi^E35P82{2veHV$~t8T21x zp4Rouo9Nq$i@wN8VlcgZ3Q=SCq;;9H-b-BitW*_unX*3kozWkxEbGyj66MXGhI@lZ zId57|EBDzDqH&MrxpMA#>ve^E_Ix;-Np=wTc;0B_)!)dwd*s~nF?yO?o=M!d%lV}B zKR#O{f0wlW?XxH3EYhmtX%3NLPrLSV&$1+(tWPa!?#%v3GD!Vb`%~*3W*pr9Bh~LP z`=`wKK@Zeb@+mpDX1{)5sK=xmfD;MgcK^WpxoO$UyGx+G%qN5Hh29f`;YW9l^r7!u zsC9yT7m?1^q_j?!Q%TM3RBHBOuv;VCu?QEK_BI~DrR|2a6cg!LfIq3Lr${utJ&4=E z5>bM)*Smul#FyD)c8|CWK~rF`jG0&MxQ2g|m$N_Q>^!7DY;zUhQSoM?eD{Y~^_qoe zIZoKl!9hYQ*5i->LZj_QEhqdwi}=S;;7@2u3p66anLN+ zKT#gS(ebpH>Nmi=YSwN3n=(FVuCy zj4f>MzOH|*G#raTeO*7r}dF@;7+VE$lCBG}LikYgwnR8!_(Me>r9vlF)1qb zMn}isAw!M7Kj3=UttQMNMd7`|h0z(t(dc<97T7k*H1(iL=UHAS4l_+~SPn3mVSJ)D zsEnC!5y~gteWx_{CtRQK6K+c?(r#kfp#0z@f6)+p4XJztPQ}R?EOd^0LX4SQim&Z<=dbj z$Iz;MX}?5KoMTXjVx%#3CK5$khn$4(bXyv@0{Evt3y1R?;|`j1{CpknDaX*#L9HZ> zn8NJv?36!0jscc`emX42m~@mR34{nYRYLnSs`Ur+Zy<)vXNfKgn9z|1|J(*nt5ZqX zS*UxL@ISkHO}dnaXw!~r6&F~PLOMRh(%eS+7QqdvH0WRj$Zz6s>QP%7xm!|9+rNNz z*$B(z+x6cNhn6OmnR!o-_0hEB2)Svnu3%0GDBd-IW$ti76GCTWpd(Z1NWE$(FuFZ- z$SicoC_AYO)lIy=hJ$sCy!9{sqDy{w6o!Xu{b}&#rp766&S<=$UWYLf+QDi^-MSfb zw5;^;RCx3z-cq{HK&2lCU&xA5&?hu;DyQNTndTGTlSpGQJJ1iXhsFqf2=h&1bab6A#t{k5?`Be6 z%wqqQn%VtDa95<(gBWe46|~8wZ35`4dQEJff_*@Yw!^Jrh%V?j0mYyef^VLE)53H) z{3V86BZkLu*QilI*H*L;+^spxgN`VwJArbla^Hjbu>qphlxyN|Uu2L?3&*9=DgTF= zRpQBHlQ-?~Rpl<0o31xg!y&zU+D#=k{23*XLU%_hBx2n>&NMO|Hk3t(u)uGeXEu`}`JUgE(v>Ujh84qeIJ=WN0%-3E)rkTb zgk#7wofli6+fu2Abt~kQdbv)KnFB=50b4S?80$AuV~ScU$Pd#7VBN(OJ5n}`>4h<* z#XZ?6I*3xJT~DsAqt|e_Z`5yzz^f@bGGrgsyLsP|kP$FT_ED^&k#P2OV|7n4;4PzQ z)sskTXDxWKZesx)X2Ye-^rpiJ2=|ljNLs*W(kliQNV|?$ zvwNcU@Jrgx6Yx$N#$pB`7ATV$(f_Q^TMXzk-kFFpZ96kc`KAfGvH?``^8M7Cd|W2j zpwc~QY$WLlG=D&G**+GlaBO_D=gk~|Dt z0S18!fDD`i27r%&Q^1EnKkx_OC~ySm1l|MMfi|EOH~{PiUIF$1yMY&h7l7x0CZGY> z4tRmhz$U;AYyheN7qA9+0$2f*0LuX1SSDy zAOiZL31|Se172V=unBMj8-Oan1*`#{09F7cz;eI|ECv<< zg+Kvd19E{JAPdL8h0!#-Ifk}WFhyjcM4-g=PIWP=d0S18!fDD`i27r%&Q^1En zKkx_OC~ySm1l|MMfi|EOH~{PiUIF$1yMY&h7l7x0CZGY>4tRmhz$U;AYyheN7qA9+ z0$2f*0LuX1SSDyAOz z;9oW7Nei}U9@SCe&ir-BmDvU*T9me!o9&ZC-xrgpBV5?o*7VMo=rFu&=fcg__k{)C z#(fSW^_HUn`1a8V!&NvH*O%eF-Cf5gh<`ox@ih~V6fKbXHx95bFc7J1@W)QMx!CyvFOI2L>2Slo$YrV}?g z0i1q~v*v&Vbxx-z%{;0VcwztMn1BR6J6Apx0 z5Vpr5kO86dI~GClqY_*QPq7rE*`ito}_p4$oDX9m+WQ{e5s{5DQ?C#ZAVIQhEi4heh8oaTh=#OobN12iiENEEr11tr?;4l_PykC2#=a!%Pd{ zTKLtKMR*;?h8Jr3gabAmI)gx~jdqGDr1IZ814nGW{B9d@oAZQjn;UO=be1YY z%Mn|k+eTlvji|P?lM?(u!693_o_=@Q+I1!Gda1`aR{|IP@XPdC-bsj)k~(egFo$vk z583cq;t?CGKf)<*?$q2OamIuix=C$Y^scJHi72VVhEc&yF(>pQbBAr?nwDPM90ce& z)JS7$=q0~ULh!23FKjhYEI!a-Q_@(76CNWhm!ah`Ld&&u*kFK4??s_bn1y~}Lw!10 zADW_L6==8B#P$kDZA30msfPUkebBYE+b9Xr@YOz*xF@Eltg>dIT`LHOCpli-xkDwW zJh0Cec+JL2blC1BIvTa#7FN!25}@y|d-LC--swMt+sIVdg6FcqpkpAPkMJkFWy1)` zpGQP@yN$iVuQ^@t8ex)R+I|T>-@oRFtXvO%uEn`$$Y-w051ywtaUT-b+ng+PmCAds zV@e$V_tIb&a#64Sg<2CBaOP#TM+e`@2+%ta0S|06C)VY++UWh8X-Bh`rR9YP@Hot< zR-3Y^t>M_@E?JLKEE0vhn|?m@5rgZrm)*`h^-PiPO#VlDGs!0Bwock$F(%A)kcHfd~gG{ z^bY#IatZc@7IY;Yl1<+x`vv5<2<(lfzd^u}z~vt3#CA>tq-$;5bgEc3??f(3(XK5Dj}4m zV z{W{BAHi~x^XW6f7S+!yM4m>DAln7-y&RHS(AT@~N#h@tmG?~NGO|SX2+G_v8mLxV= z+;Q^p5&12Z(of{J&$K-ZSv|1^sZI)#L}U93xpWQX9Z3k=za$^V&YB6WH6Gw{fN|X zL7Kc0$+*J!#_NyZ3ohjL+O!of8^l7s(jl^W!fUqLWL5>(qT-32J#qUnc0KZDj6Bkz zaB}7a##naP&C#fEXN7M)WJo7|(Sc4YY8Bw+XJBvQ73}-;q$;%8YG%^Os7yl}^yZme zufP%v+cfOqo;Wq`HFP6xFBS(}*@WLckP`OTF!8jDnS@ttAph|m_yyf}>@J(v4Krv@ zyBT4B((i0d!XIeSp0)-RPf;IvU<2vL^fULg8EH)R$)2_dCALjaBHN-gFZ{=8d{0}f zGKl9kxIptP22)J`;~uGBd!-hU)FTKt5N>^&*Lx(A7NS|6?^%Q!W%}1%aSwiXkS8KcPScMlq%YloD34D)yOm&Y)2t}WCUuwJmSVfQg zuIk1C1UIhU3%Y5Y?6r$xL8>(#*}}K$5G_hQ>=MU7O*QR$#3&QnIr?R8=kc}uoSPG~ zPolpulvwl{T@q=JsQt4&0$F<6qwp#9gulDkU0E4*{eQeYnx<==!Dqh>KOKbCf$sA7 z%_rx=#Sf9y^H!|hShHrs(`z$pHf|Wt`cDI1>-GfQEL|QNvFi%g)~>BtyMCSJ$sbxCE3aNp3d^7LRFEYPKR^~%m#=zi!}_)B++=BO zd9_%zej{19-m`8^jpaU9`Rb?01M6y6RjplPS-N5M`ZeXm?tIkZS+}Zo)!M36Pga$a z!u1|}S?sGkRc@BJ9<@|^){U22zHAv;R$lRR`8u~{$$GcNSzTU(Fj?kawfd=WIY;@r z^6FJpNL%kNU+t!pY85(HRoq53LoBPS@1CEMm0Pum zSk|tyJo4~;3yEcw+fu%E!~B%0O?eivYE?ze{FF^mqY+vMgA*Z0X`hm*2m*)Usr$rFg+3k1SZSyfli0`B%Qi@-)WE zvJUKCwR&}VP0d=2Q6?HMuUTEac7uC;b&aKblWUcyhQ4_jMO3wTRrR{H>ni41R^#`@ zP;C8%@^zM)jjJ|T#I+dSl$t2AWW5$qvtiZh@|jU&8BJZYw&p2|=&7ng1R)K4;y3n$^g&Nv-)N73m>QwmKQ<38Y#e{91<A}vVqF5n@$$X(`cdk Qhm=$IKm2eB{<6q_0n{}T+5i9m diff --git a/os/dos/cwsdpmi/cwsdpmi.txt b/os/dos/cwsdpmi/cwsdpmi.txt deleted file mode 100644 index 14b09c4d76..0000000000 --- a/os/dos/cwsdpmi/cwsdpmi.txt +++ /dev/null @@ -1,173 +0,0 @@ -CWSDPMI is Copyright (C) 1995-2000 Charles W Sandmann (sandmann@clio.rice.edu) - 1206 Braelinn, Sugar Land, TX 77479 - -This is release 5. The files in this binary distribution may be redistributed -under the GPL (with source) or without the source code provided: - -* CWSDPMI.EXE or CWSDPR0.EXE are not modified in any way except via CWSPARAM. - -* CWSDSTUB.EXE internal contents are not modified in any way except via - CWSPARAM or STUBEDIT. It may have a COFF image plus data appended to it. - -* Notice to users that they have the right to receive the source code and/or - binary updates for CWSDPMI. Distributors should indicate a site for the - source in their documentation. - -------------------------------------------------------------------------------- - -CWSDPMI was written to provide DPMI services for V2 of DJGPP. It currently -does not support 16-bit DPMI applications, or DPMI applications requiring a -built in extender. It does support virtual memory and hardware interrupt -reflection from real mode to protected mode. DJGPP V1.1x and RSX applications -will also run using this server, which can be used to provide enhanced control -over hardware interrupts. Some DPMI 1.0 extensions (0x506, 0x507, 0x508) have -been implemented. - -CWSDPR0.EXE is an alternate version which runs at ring 0 with virtual memory -disabled. It may be used if access to ring-0 features are desired. It -currently does not switch stacks on HW interrupts, so some DJGPP features -such as SIGINT and SIGFPE are not supported and will generate a double fault -or stack fault error (to be fixed someday). - -CWSDSTUB.EXE is a stub loader image for DJGPP which includes CWSDPMI. This -allows single executable image distributions. You can use the EXE2COFF -program and COPY /B CWSDSTUB.EXE+yourimage yourimage.exe to create a -standalone executable image. - -Some of the internal tuning and configuration parameters may be modified -in the image using CWSPARAM.EXE (see CWSPARAM.DOC). - -If you want to use CWSDPMI with DJGPP, you expand the distribution into the -DJGPP directory tree. CWSDPMI.EXE will be put in the BIN directory with your -DJGPP images and it will automatically be loaded when they run. - -Directions for use (server can be used in either of two different ways): - -1) "cwsdpmi" alone with no parameters will terminate and stay resident - FOR A SINGLE DPMI PROCESS. This means it unloads itself when your - DPMI application exits. This mode is useful in software which needs - DPMI services, since CWSDPMI can be exec'ed and then will unload on exit. - -2) "cwsdpmi -p" will terminate and stay resident until you remove it. - It can be loaded into UMBs with LH. "cwsdpmi -u" will unload the TSR. - -3) The file used for virtual memory swapping, if desired, is controlled - by the "-sc:\cwsdpmi.swp" syntax on the command line. You must specify - either a file with full disk/directory syntax, or "-s-" which disables - virtual memory. - -4) The default swap file name is c:\cwsdpmi.swp, but this can be changed - with the CWSPARAM image, as can some other parameters. - -5) You can disable the DPMI 1.0 extensions by starting the image with the - "cwsdpmi -x" syntax. This feature allows you to run programs developed - under other DPMI providers which do not behave properly with these - extensions enabled (typically use of NULL pointers). - -I would like to give special thanks to DJ Delorie who wrote the original -GO32 code on which CWSDPMI is based. Morten Welinder also provided and -improved much of the code in this program. - -------------------------------------------------------------------------------- - -This section contains a list of the error messages you might see out of -CWSDPMI and some details on what they mean. - -Exceptions are only handled by CWSDPMI if the application does not establish -an exception handler, exceptions nest 5 deep, or the error is particularly bad: - -"Page fault" - - 1) an illegal page fault happens in a RMCB or HW interrupt, (lock all pages!) - 2) all available pages have been locked, - 3) the application is using non-committed pages for null pointer protection. -"Double Fault" - multiple exceptions occurred -"Invalid TSS" - typically due to RMCB or HW interrupt being called after the - selectors/memory have been deallocated (remember to reset the mouse) -"General Protection Fault" - bad parameter sent to a DPMI call - -"80386 required." - -Since 80286 and lesser processors don't have the hardware necessary to -run CWSDPMI. No workaround, upgrade. - -"DOS 3 required." - -A few interrupts are used which need DOS 3.0 or higher. I don't expect to -ever see this message, since 80386 machines were introduced after DOS 3.0 -and that check is made first. - -"CWSDPMI V0.90+ (r5) Copyright (C) 2000 CW Sandmann ABSOLUTELY NO WARRANTY" - -An informational message displayed if the program is not run in one-pass mode. - -"Protected mode not accessible." - -This message should only be displayed if running CWSDPMI in a protected -environment with no access to protected mode. In this case, DPMI should -already be available and CWSDPMI would not be needed. This might happen if -a 16-bit DPMI client is loaded and a DJGPP image attempts to load CWSDPMI -to provide 32-bit DPMI services under Windows. - -"Warning: cannot open swap file c:\cwsdpmi.swp" - -Maybe you are out of file handles, or the swap file name is incorrectly -specified in the image (change the name with cwsparam). - -"No swap space!" - -This message means you tried to use more paging file than CWSDPMI was -configured to handle. Since this is protected against in the memory -allocation code, you should never see this message. - -"Swap disk full!" - -This means the paging file could not be expanded when trying to page -memory out to disk. This would normally not be seen, unless you are -writing output to the same disk which holds the paging file. Decrease -the amount of memory your DPMI application is using or free up disk space. - -"Interrupt 0x??" - -Your application tried to call an interrupt from protected mode which -normally shouldn't be called (something like a data pointer). If the -request was allowed to continue it would likely hang your machine. If you -see this message and think the interrupt should be allowed to continue, let -me know. - -"Error: Using XMS switched CPU into V86 mode." - -This message might be seen if you have your memory manager in AUTO mode. The -only workaround in this case is to stop using AUTO mode. - -"Error: could not allocate page table memory" - -The page table memory (a minimum of 16Kb) is allocated from conventional -memory (either in the 640Kb region or UMBs). If CWSDPMI cannot allocate the -minimum necessary memory, you would see this message. Free up some -conventional memory. You may also see this message if a page directory needs -to be faulted in, and there are no available pages. This means too many pages -have been locked for the allocated page tables available. While CWSDPMI -tries to dynamically allocate these if needed, this effort failed. You need -to increase the number of page tables with CWSPARAM, or increase the amount -of free conventional memory if it is low. If the application which calls -CWSDPMI internally manages all the DOS memory, the page tables may need to -be pre-allocated at DPMI startup time (if this is needed, try using the -run option flag 2 in cwsparam). - -"16-bit DPMI unsupported." - -CWSDPMI is a 32-bit only DPMI server. Ideally, on the request to enter DPMI's -PM with a 16-bit request, we would just fail the call setting the carry bit -like the DPMI specification describes. Some buggy 16-bit compiler tools don't -check the return status and will hang the machine in this case. So, I issue -an error message and exit the image instead. - -"Descriptors exhausted." - -An attempt to nest a DPMI client failed in the setup phase due to insufficient -free selectors in the LDT. - -"CWSDPMI not removed" - -When the -u parameter is specified, if DPMI is not detected this message is -printed. Informational. diff --git a/os/dos/cwsdpmi/cwsdstub.exe b/os/dos/cwsdpmi/cwsdstub.exe deleted file mode 100644 index fabaf3bf4f158a72ca8cb9d77ef43bf64bbaccf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21504 zcmeHveRxwYo#SttVvabj9@{QkZ)X zQUXG{Yws@QT>s{~8!z&4yL#7ckY2({8uj+`3kQIaw8=xZBGAe5k z_`81tNVx!9<3UA7h#n}6C!{KlkflIA(5EM)6G)s$Nb)2?-T-nE37Num^6#e*(hdZG zUBC~4M}eS)5R;V<^BsgN1fB%w-}spOikBBSAAZ1Gd#CxnnvFlIttfZ7&8hdLnHOYa zWSH+OHZNaSz2T{K)z#+Ix@ahWeN{z`wYFk?nYC<#C(SxOW`(QFT<7*YVXmrKx1p@o zTv7KeV)O65J98dB?lc!XXf7zLs;R9gLpf(z?Nb$Xbrm($=JMKg)$XzlW_OL*Q&(md zYiiBws()nO=&9XUgXfL4HT4x6Xu1o;*N?Vzd`xZGQ|l_K>yV+WuB_UPLL1DU>ZfWp zREQO28(7;=pr*R&N9J`KH&#`Y)zK>4(FUip{M9vXb9LGJvbwr;wH3%nQ#ZM4s#vvX z*i#^*@aw<-EU(F2Kv|J)t~W2RW-Op%PY8x_^e=xj@PGa-|D10UR`KE1jNYU?u1?!M}0)EBRL2;fbU-313EhW&Sn9%Ut69ZMzbC?}%;pTpsLFxi9){`6$1b_h%RI zuk-JiN$g+Uiw8`@$v1=u@qX5S>a&{(#ZQ(#8|gU}YDSw|AM8!i zZ%^l}P4UTuMp&AKbOLgGWI_9-U;WB+?bmbKiw{O3mwt8i4_3cz4q1I4O4!?$F=()_cI3lbOd`{>Cp_qH<4L^zcgkPM=yz{F?7LH%>BL=3~#g zHQtMA?vy|AD({c~hHoQ_C6gVr4!#N!*BFW14v)}ayT&h3>31$si!C!WV!+9ZQv6k3 zY`I4xavfrz5W#XKxCBY2T?m^bjo7Bb>=$!S*KwkBT5RZwLQs_Z7gLb99UQ}K~FlbE!b?FUt)cYdulu!7HQ@13vT z{$Hv<5ie#-@zY70N|P;_Oi0&n?^gLuE77GAKHHx?m1O&EQ%IYZNTwCM6u**}5=;2r z`EBD!({bOYT*s%HA2b~QSI}$I5s)&G2M$Fdc%lW0ZY@ySaQw&L%}7*-iN1G!oneuV z=yztR+K7s_Vy-H%iuWh3<~u&){ie0xOg1nfBTp8~$4Sd7KJYvq zw__>p79{?j78j2xHLgYEbA`2hJ=e094?M%mKPO`5aVfr$w)F{KRK?>XjaHI5i1wNU z+Kpz@Y91|rMLR>}kmUJw*8%a+coK>`P=07C326?v4keRE4)5bbN%AgopyJSdBsB3r z<)KwH%aezyX_l%(USuIeoK?h#X5=m-Hsx=WJE?CY3Z!_6`%zr7q_WiZk1f zRPzUKBbR@%rnIE1jc|vPNak^IZUoW2^SivZN?ubtqm7jGChf1{+tl>?NwBQsuosI+ z8&~ohRc}()UM1fY=W@g}nx5nrM3AULunP0yv67#4(G^VQNbsL0NLDpD)X6uWX%e0% zbH9{q|3(^m`tNz2KlPO(_p924M~ET!E37lur9YqgqNMqx^o5f<<2StoNj~zj=3xIl zb5CTphcEvJUEu;RkRGA`9^!2Vt*$l|y4ZSeh|fIUn)j%5K`KJ!byHd+p@i0a`n*&p z6$ui=AgNBB+5UJ}>pdYEvp4h^5?gJdzjV<|tNDk#dhbJboA#1g4D(*{IEyageVv^5 z+=zr2NxQRsb3D!A;Z?$3!krFX@Sfk6+gZ!c?F>!C(En9>m-~G~hnLHJZ&Okm@%kro zXJWAodEfK;wNlsI&bv{}!^msYN)4@dHqu3;sq@FI!qyZMo_|*)^d`+<5hiW8SlY@r z+6DCE@_(#hkz?BR5BbalAJYP5je*;Y$Sx+SoWv}9QVR%1)HC6HnC z+4f<(c&g~qg8(UP-uc=AJ*uIG$gGamK=y0mh3~3r9&9izxWmrw_dtk zjNB#PyTEspPVx&4pGQb2M*5`VGp>8re1X^-M!aOpSCwmBW{atkM6&l0dDV#TXiTVB zeoNPS8#c@wgZy#+pzsM%yNxaVM57@c{klVhG+;M63I4As=Pz~^g8$=-+SLM75df(dXpe0baJm*eVh(k5gQ-D*UcT|u{1PxChI%C zx>EyZ_x+4zkVdxO7c?lJAX-T&iWIU+Q{eCdB#hB_VuX2rk_MgL+@ie2o!yo}oTyqrxjtwhro@!P|pxV$QlPSSwmC~F6u&7QN7`r&8o15P;w!oWxB zhn}@xamrKZgKuk?c+4QJBOxxbG<;Y`=B^GSGk4m1PliW8x@y}Ok$OZ8&9#S}L0beg zW7_pQr$ugV^=H@6r!n4{(v9A2#$km^cQ%gd2zs#35jvdJ0Qv?{WxB(kY6vS~$R(-P#$0rFhS)p8ng zPN`JMUxiDR8AZiR<<@iyFA!)d1I_K02HWL`_qr#hTgc!H-9mtP%h-%9U<6hY*DkF1uGcj3yWnqpG(9~=P99B4Gdp%m0)#9TW9$VQcT_MbM{ek?U=Z{A9HJ^Q7tYchZk)z@#h+-NWC@riVbOHW zq02+(HxRkMySVr*i5#Xr&VWV5P4;k)kZv?v*jlLHu^n^tOU%*i*SL@nv41JKbrAQ# zBil$wwagbWY>kutj8)Ei1go6;qGbOPt5)m~U9Q)%WsWX*@()pc45Z}2_)<({1n#AQ zAp~-0U=V>jXy8gLX5s>s>n*kHxkkk*f2cG#Q{{@kgYxY%sPHrl9(^$yHqMsMj)wVE z`2-86=DWbBE*hpSAv_hL6GPy^5j|aV4EPwDfR8~VKCVn8VvjHf$6Tl*zf)s%kdtys z%LE^5z-x{Pr(12SazU^}J`7HD)e}1~X#F#Wq8p6aBt=aV6KsqWv$XD@%XR zt_3*vVeKcXEnOfGH%4FzvHM00TfW+7!vs@CsIuHVsj&Zb^mCeY!71xOKVEqruO)#h3-$y$kx<6{ ztujNSWzJqj88ErPqFz75NS20LjU+JKD~I_Erzm9ylfgOE4+RF_zpEa%gw=#B!F2j>Qv zllmH$^4?Fi2UI8feOqaPSQ9gGC zGbPZcj%|NhPa|9>)$$c|mJjLWaf5-y3IR4hP7;5jOah-nKRu?#eEITg2$s**rzTrc zBH4?L^7*ezBiVgw`N)-0uvGr=YitaCYSc|D@?0rB-gS&Ft}WR{D2U+@wl>JDiEiH5 zRIHUM_WUQhMWV-HF<%TIXRcr~LJ6eZi3kggQqc&~j(3R>J;e4D{aZ!DqW;&Nv>zBws_=%z7Bo?HQ>*HAV$0`*CMk`E zK1Ta5zi|aojA6gIQi>)r9l1YFbTZ~WeHjXXix|*w_PiX=0vJts<-1bauyuqOo*wVg zaPq^0w7-+SrhKL2u@ZDg7~RLdhi=NZ=uV(?=`dO8z|aA1>`+e0uOxGg$1az@jJ2Px zpx^p?w5T|eoygIRL!L|YZ&=*Mc-Q;JNVW*n0vnCZrb^=pc@a%alVQZ7=WuvQ;pRq>}Au+VH zpO*I1(tcXnPfPo0>A(}lCX{YM=_ZtJN~||pTV6H>Dve#0B($nh6)LGzhgMW_A!j8Y zT2iSA6;=wNf=X>Dzfu>)6l|>HbMcAg zj;+x3%BrY;%j7nST$dPFixQh@lX`>|7Q2yPK}a_$8i1T<-2+u%Bz`lH&Y85*l_U8U z)*Cr{gbn(423&;M0JFPDEEc89mp7EZBCZivi_7)y6)}ywWlTKJ8R@0%6Z&z|>0h1<+5)}HD*&&G{4 zwXhn)KAUV3mkTpsQrqLm+T&QU$6@xbnYqWYMD#mSMgOvN(O;b5FVFF>St$Bz@5h+kjk@~9qFP}lZTT5 z4hYR_Qr{hGg}9vN>T#4{>>aBJ@jF)dmlgVpo#)iv~ ziJXkgoNRM#*$+JxwTvBd!c^;i%cMN6mJ9Y?j-PR;KCw0bu$mm4KrK9!m2|a%3BYT^ zS;1pIq$U?ysg99(^1y_Pcxvprc))w{!0i_s?IRbDcO6QKrXMmBnjwj0;4dCfMKjPv zu?RZSgN-{fq2P4%t9$GtXuds+GrI`QKn&oSKH3^fct_;m`tI?Pnoj-#iZF zQI^;4zk>sPe9z~uQH_GJPU#ygAhd5}ICC(#iz%sU-;vG);{G2X^Yl1YHP;=|L-~9< zo;8x|)(l0YW1;bg@@NiD$GQ37ETyEht35&bQ^#lO%#$!ez-9t-hFaRyd2^&g-MC{a z8!wp4d$4H1*olZKEN>6;Dm>IT)kYLPEmJt8RPLl5xVwj z^t)uzV527+{mxHdbHKp+j$q*RJNj4#;?}&Qn-t>Sk(1lHCb13P&-=Q0v4@|FNsADr zEJ}_lQHhrvm`E&#{w=yru%P5f9t-8%NOmH~b^y0Y^ws2;E6paCZW1Gib2?7%GD-6t zjSD3xlh>I^+T>)V4UQbvR;=^G6IlT)k}O7o*wP3;D(`V5t1}3pTM2X&4%~=Z`V=#R zhOtNf#Z+o;l>a#Lco(&FGP}?iw+4J83!cWgg*zL0(Z+>1`4_XPJ&4Y7gev`hj zlONh2m!cM|Tw`A-dtqV*S37ZG;(Tt?_{PpTus!fPB!_PI4o~-JyM?$ELui6`c$N~L z5Q4=bE+x{~*%}>eShWrrNN74_M0IcO`*rcs84dy)J&pbqF)@p!POf{Am(-t)1~x50 zZW~OTpMh2WT~>hw{kzhYzyY#*SEdr&y(>crbnjXq&fEE5=HaVO#&njti z?IUiTuSJTOwp>tWD>QB1#My&<$&o=EL@iy{&IjwR4%!@=LMeN1v> zp&_s`;#-bGj(0GS#q5CWJ+eR`o(H4hOoVML>^qV!L_7I1I3by zb_Mq^Qy;`!M}j`Rd?zfVtaCMbRzRW>#fWAo1Xzod;ES2Uo228MF1Az2kse&Em#o>@{P=wDJn29r!`S!patXDwj-Psb!oj<9@GOoM8@+Cbn?H3qm22G zrA6sGDU)CrEr6v|4$i`&t8{&3MMbWm%Yr^my(YHt2o-bNpZjuivp}{Eca> z-`Su%{a>yi!3UL!)@0EOTWQF@I?N^WHr0kf|Un-^@vQo0~#SA8waa?C}JH0yq zQ|pul(zc`qUx+J`AHP`svhHyBmJg0ZP22jv8=$qpuo^D6+Dz+Q)opx3i^xH zx5Q=8xXHnHW1|IOe8V8?^}g3*r8Ce7ZtSV)?3wMlp{?J}?ThASQ#IWm-H4$ZWGJQl z*sFu$XeCbh>JYl)wPEjaFWMKE^3s#-f^^z<1RAD$-q^FWtAuU;en;5T>=}#xuBagr!50@`?5?9^={? zv}=g9OTXiNRg_Z-zv*Bp+@#OAoEfH#l1?}7qUxS>jMDIJOP}khZaQ|iJ*?lURkb}f zabEGnt3gfi#9aHZe&^SO7J;Tq?@6FaGIEM4c~b(^$r}k6XKZ}DqDUT`a)W@PN(T26 z-#1e{iP*u%vy8qY&^X-!RKY2=7xAI@$?(TuYFY-%Ao_8lW+7!=#b9k!p1X0fzPZUa zwL*KN=S|DhV{K)cw8uR9Tojg0`(Nx#7<(S3&+Y74I=y?(R2&AN!04ad!**uIteKQD zH@3v5$I!w|8hSAL@UxmfuI;0IXOtv0DAWAZpgfupox@5?Yf_|z3Z2LbFfuq-`yn#H zpw1W3>UW&eF_k~JXH%?VRqoOI-q+pK2=D_^!x}~R9LP(QdoXAjl*(bm4*pc(rKJX zU@hLrQokMVPzP#_^2)zP`(kFdsG=pHU)K9jY2a%`8MV*C4ne!I!ZcS1*w!}mLt8HuzG z+K^F|p=25)IM}G67h>=b5OIeD+qRw>;^51GyR2smbkMWdE!l<282OJM(=EJRzhfEO ztiUUnZZr}2Uy3PYAQBO!;w-i>vzmuRr~Gg%Hb)%PbVai7<{jsH&Axd)-458@Ol zO1#L~hp7fn{Ty^q@!7!?t3HN+refkkf$%%>gXfhaE2>07asFsEPWdMjSQYvmhxp(T zKH3%5%Wvn!x*r_Clz`QoF6kdDviFZWfu@2Lb9vbArJ_NF^OwX&WOs~G>rUqMaYt73ln$kXF)Yn7hU8zHK_<`I~=}4gyd4dl9_22wq%-HIY?g zzl2aEOMb+Nfnf=wOd9+iCf(prKJ70i5#25w`BdflEq7z=^gClB!M#|i;RHfQA6ZcO zFug+M-MPW-aKmFP@uWwSvtacfZV-ntru3S=ei*Bo)1!mj~0v2$w{Y)1$%&t~yvHSM9?Qy=U@OM+Uwib`S;*qERU37Vz~{Od|1UZRo6ILjOSEmN)($^4cyepeg@#fGiJn9v6O_NQ67Mn@`L z;s5C_S?Sgp2r z+?E6fRji-iZStk>?Hb7Ywq>CkZ?baAIW$iNH;o4SAnjlSRvkmMj!U$6!FSjxn637S z7+&Jhur;4n+wDkI1>KAi-OiA*ESa$WB83E3s#@lxV4GzAF2R2$jrL)6JC0?I$4(7j zJu~g(;=xYNy_vP2j&eu80c|c$hqeZXBj~i))ZyLB=cLf=*!^)NOyO{e z>>E*gRQ70OA=IvvI1)PmI^B&$!|mtP-cCc~@5NL7;yB!OvuyTZD)#S?2%KxS4#QEj zJQ94B&2TgVG|^zlZ{yPNss5{dNrD9}2&>zpEx39z32i`3d%v1Dh=(vtXqkBGoOt!5 zNRvXM(v~Qt78D01nMUGJ5h}bT_11bqb7|tBBTMa`pxnSe*{;Q5zHQ|UrwD6W5M`B1Ui6i3?tx~Cxq*ANZoSIj|vyM}7YL4T0PQwWt;Z;1* zs5EK~rx7$-jZQO8Lj;we7C3_Q;k!PBeAMjbu1UFihq0hAEuw59=QG2w-4N& zVQMn}5`kC!t`mIyQFkI`JPs4#5mk-T- zRtd!5L#vW?r_8@k#PeB0E-Gp>?o^>3a=)aX5FgEf)!5|=u|62V<&A{U%L z^4OZyaHhqDfhWdmdjE4Vc4b5{e#8tF!(3Wc&rQRD*23@-|(usf3Qoh>W2>r;`Tn~{X)O|XM0Pa zy(}UF?#12{1JOr!mh^$|eE5J-zJo~T>QW9&k}ag}b}BXdG1vz*?(qoc>-RSv#ii|F zYKoq8-HSh|qpL{Nzd3;0!4m4-u0K40LHrqe%&RWe4UqR6C;S?V;IpqjYI=i%p9RY> zqv12;P<&e929#DvTo*K0?{PITmEO81rltifX;CkNJ#bV&RD4<>F3sd3X>tYiT<|9v z(*g!W2x)SO5|Nk|NJ#4urlf7g?d#Mu7isg;c?g$`>4-L`O@XghT$(&b$(@`Qn3<+n zY>RLc8-@*?kPzF{yvF%#ui+Z`3;8`o>+a~EqFj|E9^eAM;^g0c zE1KP)_!C>Xz#AOY{oANf6rKMS$DI}}J#e<8*EQ*B%twje@~JY5a zP(F%I6ZJ>BnJVHtrj`DS@^E#SJ0n{BT9{W2sx5yGO;o5OdW<;red4!#;nGrFBrN}c z`e4xNsbK~sp}bJf2?MsU{po2fuW14VOoYSWL}Ub4`LuvKt)*2H5D*PN!7#jB5gn5j z(6IrbO}u`cYW|=r2J&zxZcfEZ6pO@wb+#CIFeQ3BhI*hE4^f?-7kyiKvP~|mj|bWoKq3{^A`PNmKz*tDYFwHPOGi0Y%ccD^=V zQ4aY{O#K_DC|sYiD}rNq0jmgisLB9!--|9@12{4LLZ)mE`xw{7ZZ&b0SQOnWTT4+HRMN7l%pVK27eAA+HKqXN+|G%T;Z@&h4Q^&2-2pJE;fNO}xK`gLRzj{gc1wk{=F*(c#*72E4hca>|=e z6y8v$!#D}`V70?wDa=u_(#O-$(VKWn=^ibWejI!uE1~=z;Sd+$BKSn6MTGZEp)r^p z=m*$CV}u@rRU{Xj)bD(EBp1xn@9Y}Ei&J1Un+b3th2+KIn5V-r4_bMH7)J&gL>`h) z&t7qIo{Fy1#W*5ieKC;QVix<))XeTLg0~{I9>hgg9A&a8n*jP6xhA$v#y%j%+Tm6) zNEdXRfZ{-f;G1XPv@l%`e~w{S8iN;=>^h|dbS*;-!M%!~-E^f=+{_Gn(HhV6=sc&3 z9c~YA2n4Mf20uDc-Q#Ii_d|5h;F!hAv6Bod>vy=i9aTiWa1B#`8axDPjdRf_+V?@Z z3R`FlTZ-9g(c^H@ZH-c9ox9Nox;X3V;<1iA2#0B`BX|ujLf3J6QQ9Et$Uw*giaNQJ zCMz?DPE6Xs6lIbx9+O6=yxYKtc&u#l&OUNAbO*~#*PE%)klH=%rV>B=BT68JZoO1U z#D;2Jl)tQP^$p5)f?36kOQA*4jl=_sf*TI*@G`?V)5y8lY6=lyrasQhW>O?S`fe#* zx#DkFF+4{y+o>af@*YfsD3Ad-hD=j=u?4!#m18LR! zQZL94(+XhS#S}ZbdI-}CV@Qj8GE-C-&v2WXT&kx(Pr<8zL$MLh6iS`d;KjO)1#pNBS18FBQF*4*GAitiu@Se1M#Lh0 zlxu^ypLCC-1$=sSNXr7VuOrsro~S(hoYu1z-bq7P%pk-9Wio5@KkD;VE&6QFt&h=f z|73*nO%e9cMzoTb?}yj(4VhqrO82DEk))Gw=B-)aAWSFIp#2-3O@bTq58le7yZ9|4 zIy&vBd_z?0pTV)#B!@YZJOo?;27n8I44eo0fscUGzz0Ad@E&jsI101_Zv$;WD{ugK z4R{rJ8Q2Hx1zrMP0GgTtN@(A5}*($0P=x6 zAP2|-GJtd-6-Wlmz;s{=kN_BfI6w#R00F{k^dGna3;-7Z88{F010MmWfe(N_;630N za1>|<-Uix$R^R~e8t^LcGO!QW3%mrp06YgY0lR@6fEU;TYzExGMxY9C0ULm|z$%~w zSOGYJB|sri0OSLCKn{=vWB}AmXL!RI?kUebC*oNU{cvA{E1TYo>kx-4bUR}8zl|>|m+l?O z>-EIvl$U$PNhj3tR&MvQ^3ft@8i4NMcO=sQFD+X_oz8sSahV;ja_;dg((iE6Y}s&) z&7t-u70&w9b_9zN8tfv$B@sAb=fUAR2hP=5aHP(toB}6n6P&D*;bc7rPSzQ4vd)H+ zbsn6o7sJWA5Kh)h;bgr6PSz_!1O|XnPg<}=@u-dwpS4{{uFTYiVnu1Iq1m1w`o2n_ zj&MpB&4!z;?<+IBje8tA>MchD@a>}!+8#I+?^>-Er9CSWL_a*S_LL;} zm+E@#aq0}wztzwLy39vcJLB=k#1q~ybhO#m^3?i0N!Lc(#GIB7W|HO(@d)*#R-Bi^ z@LnD*8oV;RmpVchi$9?G{v^JmXyn1rh?_)bK+{{u14I;C>%X|L1GxK&VU%^i_*3N>X$4^YqCyYwB!dv%$VkxL=W9=cDW3rJ8@5tXPgRsDsTBCG`chL zPr5@NDz1iYUL!SbKvZj=m}uyxV=Y zV_d|Y7|A}y$@yBm3WM)C+R`2Y(eV4DnwWf5h+b9>iM}D?&W9d%2b2#!aE!z2Roc=q zBSbiQQ%Dc^fdw|SgIWa8+2{)=g?Nd@hSy+vgatPINC9=?&$dy4VS1#zv@`Ia&1WmL z5w{^%D73i^k?ca7ytuP8B(ywe3l!SCwik$|*34ez4;0wgtNa1G?WR}x;aMMj$6Lvp zfS394TL-qcm>)QT1-9NK5M%T;PWdk#iZ>&UhR_~2M_LOH;};;3{HA;xn29qgCoDnc zeA}iCElX@^2+-rBj>gp4FqFbM{LF=rY^#f5@qv6>Xf_LR!g<1SX|9eZQazV{6}iVc$UougN}iG zS>sR4v0;Sd0ZnYDTh}f0aH`-n!X!n%;}Tr8dpIJ8t_QzR;@mUjPp->9{*qpxeL!5l z=j58sQhEP%Nb+4rN`oE9MV;*zD^*~?nRC=W6_2;2(cXRy9H&v8*kH@H(Q7mP&SoV` z%L^LtILfGOTWE9Z?%qiqvKpmWBnq{u7kID4{eN4vNW}g$}guO8lG&{c3a-Fyb3M{epU{(;KycnC#WaZfc z0|bXk2xaN02tWd%lM1LCby;m8Gv2VmuVBcNs6i5In8Ec8CwI1&%3oi@U^V_{DP$%v z6XeYx?_@pkwNpbK=d2`nNu=Z*dXA$VM5{Q+UVb18Z`~}wt`W)3!h29??=1yp(*iwc z6`SO#Y?5~i-JD83{{=m$V0B~1;%~iG$Q-tn7Yofc7`%1b<9M-<1{>`W_HLna`W-Ec zk-hOs;%@tOmUs0C-ZY$Pzpi9ehG{+=A0PoRQcuV6C@deOc5J-Q6T_ZN9G-4^IWOB* z|0lL2vB~0&m){?j--yum6Z!h*%FYO7!3wPDV>@04?|H3<1OqPlr*;@*M1 z$|^r~&4-uZJo;NEXJ~=wQsWv>ewrE~*srZvZIO5k*lqG_7w8pf#50}_)#M}et+_w{ zXQ|XpxreE&bSo9wdvt9Mv$c7h7!gu!usJxD*Y?NWJZymwacMDn ztMPiAy#DPFCvUpI7|YJ6SxPJ18PUrM8PbU#8lcmP9_H~5B+Nv72-`J1U|KKCi7%ht0pwQRS1o1jiJ{( zMf~G5zN>Y7XaLWxaA8(rFxS*S?vnbHH)0VP@PhCY^4@rX_zCaT~C`wcgiT?#0hW;9|kTcgejG_b~d%$DVXw zYQ4X=yh}bDapM4i8&mHE)wFi@+C;G+)$5LK#c$pqT9mrjC5)DuTH4fz2~BL{=$E05 z$JdVYZcfZRiT=jX#-i8gl1O_*?U!vDWa(;)!Kc&}{qA6QU8||<{^M=2G<}r4WC?yD z&0JPnTT{ExOct8gudANzHrH${tHuNU9WwlsRWx+pGP@nW#O5kn|0Mf4wEBu#{4!cy z8mX=^7c5(DeyZ%Ln%WN5N)8hy?r3bDFP74G#eGkyZCjAf<2?p9Y;Rkq$;Q(HF{ z6D@ty51aMhgCE_2p@k|U_*FRP;w2A}^$S<6-&D6@<5LyZx=kC$I`Iz!UTjr}F!8WVw4C z_^p(4lvS72uB$>?jT`KvKU1e9IMbKRzO8_i+` zh9IRbhAgd7BI-7-TVIwGLzdIj4Hb0|Y)@4cA_(c^r+nv+=ydvxo5=3xUfTESfwm#n zW|DVX-fed+rk~2ctg%quZA+%ov|ImWjm2c$ru^G8bu>i3Z_WJ%(i*30sPxk}OmC5L zIxFxSZuE~BXVZSiuwh?lezXp~Hn;>O>Qc-(K$`|asR^)m*5Y_-2eag{}KoOH>2l{-2eap diff --git a/os/dos/exe2coff/README.licensing b/os/dos/exe2coff/README.licensing deleted file mode 100644 index 112b02a087..0000000000 --- a/os/dos/exe2coff/README.licensing +++ /dev/null @@ -1,3 +0,0 @@ -The files in this directory are not licensed under the same terms as the -rest of OpenTTD. Licensing details can be found in OpenTTD's readme.txt -and in this directory or subdirectories as well. diff --git a/os/dos/exe2coff/copying b/os/dos/exe2coff/copying deleted file mode 100644 index a43ea2126f..0000000000 --- a/os/dos/exe2coff/copying +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) 19yy - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19yy name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/os/dos/exe2coff/copying.dj b/os/dos/exe2coff/copying.dj deleted file mode 100644 index 8a55047845..0000000000 --- a/os/dos/exe2coff/copying.dj +++ /dev/null @@ -1,48 +0,0 @@ -This is the file "copying.dj". It does NOT apply to any sources or -binaries copyrighted by UCB Berkeley, the Free Software Foundation, or -any other agency besides DJ Delorie and others who have agreed to -allow their sources to be distributed under these terms. - - Copyright Information for sources and executables that are marked - Copyright (C) DJ Delorie - 7 Kim Lane - Rochester NH 03867-2954 - -This document is Copyright (C) DJ Delorie and may be distributed -verbatim, but changing it is not allowed. - -Source code copyright DJ Delorie is distributed under the terms of the -GNU General Public Licence, with the following exceptions: - -* Sources used to build crt0.o, gcrt0.o, libc.a, libdbg.a, and - libemu.a are distributed under the terms of the GNU Library General - Public License, rather than the GNU GPL. - -* Any existing copyright or authorship information in any given source - file must remain intact. If you modify a source file, a notice to that - effect must be added to the authorship information in the source file. - -* Runtime binaries, as provided by DJ in DJGPP, may be distributed - without sources ONLY if the recipient is given sufficient information - to obtain a copy of djgpp themselves. This primarily applies to - go32-v2.exe, emu387.dxe, and stubedit.exe. - -* Runtime objects and libraries, as provided by DJ in DJGPP, when - linked into an application, may be distributed without sources ONLY - if the recipient is given sufficient information to obtain a copy of - djgpp themselves. This primarily applies to crt0.o and libc.a. - ------ - -Changes to source code copyright BSD, FSF, or others, by DJ Delorie -fall under the terms of the original copyright. Such files usually -have multiple copyright notices in them. - -A copy of the files "COPYING" and "COPYING.LIB" are included with this -document. If you did not receive a copy of these files, you may -obtain one from whence this document was obtained, or by writing: - - Free Software Foundation - 59 Temple Place - Suite 330 - Boston, MA 02111-1307 - USA diff --git a/os/dos/exe2coff/copying.lib b/os/dos/exe2coff/copying.lib deleted file mode 100644 index bbe3fe1987..0000000000 --- a/os/dos/exe2coff/copying.lib +++ /dev/null @@ -1,481 +0,0 @@ - GNU LIBRARY GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Library General Public License, applies to some -specially designated Free Software Foundation software, and to any -other libraries whose authors decide to use it. You can use it for -your libraries, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if -you distribute copies of the library, or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link a program with the library, you must provide -complete object files to the recipients so that they can relink them -with the library, after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - Our method of protecting your rights has two steps: (1) copyright -the library, and (2) offer you this license which gives you legal -permission to copy, distribute and/or modify the library. - - Also, for each distributor's protection, we want to make certain -that everyone understands that there is no warranty for this free -library. If the library is modified by someone else and passed on, we -want its recipients to know that what they have is not the original -version, so that any problems introduced by others will not reflect on -the original authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that companies distributing free -software will individually obtain patent licenses, thus in effect -transforming the program into proprietary software. To prevent this, -we have made it clear that any patent must be licensed for everyone's -free use or not licensed at all. - - Most GNU software, including some libraries, is covered by the ordinary -GNU General Public License, which was designed for utility programs. This -license, the GNU Library General Public License, applies to certain -designated libraries. This license is quite different from the ordinary -one; be sure to read it in full, and don't assume that anything in it is -the same as in the ordinary license. - - The reason we have a separate public license for some libraries is that -they blur the distinction we usually make between modifying or adding to a -program and simply using it. Linking a program with a library, without -changing the library, is in some sense simply using the library, and is -analogous to running a utility program or application program. However, in -a textual and legal sense, the linked executable is a combined work, a -derivative of the original library, and the ordinary General Public License -treats it as such. - - Because of this blurred distinction, using the ordinary General -Public License for libraries did not effectively promote software -sharing, because most developers did not use the libraries. We -concluded that weaker conditions might promote sharing better. - - However, unrestricted linking of non-free programs would deprive the -users of those programs of all benefit from the free status of the -libraries themselves. This Library General Public License is intended to -permit developers of non-free programs to use free libraries, while -preserving your freedom as a user of such programs to change the free -libraries that are incorporated in them. (We have not seen how to achieve -this as regards changes in header files, but we have achieved it as regards -changes in the actual functions of the Library.) The hope is that this -will lead to faster development of free libraries. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, while the latter only -works together with the library. - - Note that it is possible for a library to be covered by the ordinary -General Public License rather than by this special one. - - GNU LIBRARY GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library which -contains a notice placed by the copyright holder or other authorized -party saying it may be distributed under the terms of this Library -General Public License (also called "this License"). Each licensee is -addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also compile or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - c) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - d) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the source code distributed need not include anything that is normally -distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Library General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/os/dos/exe2coff/exe2coff.c b/os/dos/exe2coff/exe2coff.c deleted file mode 100644 index aa072e8e41..0000000000 --- a/os/dos/exe2coff/exe2coff.c +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright (C) 1998 DJ Delorie, see COPYING.DJ for details */ -/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ -/* Updated 2008 to use fread/fopen and friends instead of read/open so it compiles with GCC on Unix (Rubidium) */ -#include -#include -#include -#include -#include -#include -#include - - -static void -exe2aout(char *fname) -{ - unsigned short header[3]; - FILE *ifile; - FILE *ofile; - char buf[4096]; - int rbytes; - char *dot = strrchr(fname, '.'); - if (!dot || strlen(dot) != 4 - || tolower(dot[1]) != 'e' - || tolower(dot[2]) != 'x' - || tolower(dot[3]) != 'e') - { - fprintf(stderr, "%s: Arguments MUST end with a .exe extension\n", fname); - return; - } - - ifile = fopen(fname, "rb"); - if (!ifile) - { - perror(fname); - return; - } - fread(header, sizeof(header), 1, ifile); - if (header[0] == 0x5a4d) - { - long header_offset = (long)header[2]*512L; - if (header[1]) - header_offset += (long)header[1] - 512L; - fseek(ifile, header_offset, SEEK_SET); - header[0] = 0; - fread(header, sizeof(header), 1, ifile); - if ((header[0] != 0x010b) && (header[0] != 0x014c)) - { - fprintf(stderr, "`%s' does not have a COFF/AOUT program appended to it\n", fname); - return; - } - fseek(ifile, header_offset, SEEK_SET); - } - else - { - fprintf(stderr, "`%s' is not an .EXE file\n", fname); - return; - } - - *dot = 0; - ofile = fopen(fname, "w+b"); - if (!ofile) - { - perror(fname); - return; - } - - while ((rbytes=fread(buf, 1, 4096, ifile)) > 0) - { - int wb = fwrite(buf, 1, rbytes, ofile); - if (wb < 0) - { - perror(fname); - break; - } - if (wb < rbytes) - { - fprintf(stderr, "`%s': disk full\n", fname); - exit(1); - } - } - fclose(ifile); - fclose(ofile); -} - -int -main(int argc, char **argv) -{ - int i; - if (argc == 1) printf("Usage: %s ", argv[0]); - for (i=1; i binary.exe || exit -mv binary.exe $1 -rm binary exe2coff/exe2coff diff --git a/source.list b/source.list index 7a6e6661ab..3055816876 100644 --- a/source.list +++ b/source.list @@ -1114,10 +1114,7 @@ music/midifile.cpp #if WIN32 music/win32_m.cpp #else - #if DOS - #else - music/extmidi.cpp - #end + music/extmidi.cpp #end #if HAIKU music/bemidi.cpp diff --git a/src/core/endian_type.hpp b/src/core/endian_type.hpp index 6e5defc647..1cacf6c0cb 100644 --- a/src/core/endian_type.hpp +++ b/src/core/endian_type.hpp @@ -26,7 +26,7 @@ #define TTD_BIG_ENDIAN 1 /* Windows has always LITTLE_ENDIAN */ -#if defined(_WIN32) || defined(__OS2__) || defined(__HAIKU__) || defined(__DJGPP__) +#if defined(_WIN32) || defined(__OS2__) || defined(__HAIKU__) # define TTD_ENDIAN TTD_LITTLE_ENDIAN #elif defined(OSX) # include diff --git a/src/cpu.cpp b/src/cpu.cpp index 9393ea0613..8d5eb5e5e7 100644 --- a/src/cpu.cpp +++ b/src/cpu.cpp @@ -35,7 +35,7 @@ unsigned __int64 ottd_rdtsc(); #endif /* rdtsc for all other *nix-en (hopefully). Use GCC syntax */ -#if (defined(__i386__) || defined(__x86_64__)) && !defined(__DJGPP__) && !defined(RDTSC_AVAILABLE) +#if (defined(__i386__) || defined(__x86_64__)) && !defined(RDTSC_AVAILABLE) uint64 ottd_rdtsc() { uint32 high, low; diff --git a/src/fileio.cpp b/src/fileio.cpp index 9f0db9e652..22adb76d52 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -1000,10 +1000,6 @@ static bool ChangeWorkingDirectoryToExecutable(const char *exe) char *s = strrchr(tmp, PATHSEPCHAR); if (s != NULL) { *s = '\0'; -#if defined(__DJGPP__) - /* If we want to go to the root, we can't use cd C:, but we must use '/' */ - if (s > tmp && *(s - 1) == ':') chdir("/"); -#endif if (chdir(tmp) != 0) { DEBUG(misc, 0, "Directory with the binary does not exist?"); } else { @@ -1056,7 +1052,7 @@ void DetermineBasePaths(const char *exe) AppendPathSeparator(tmp, lastof(tmp)); _searchpaths[SP_PERSONAL_DIR_XDG] = stredup(tmp); #endif -#if defined(DOS) || defined(OS2) || !defined(WITH_PERSONAL_DIR) +#if defined(OS2) || !defined(WITH_PERSONAL_DIR) _searchpaths[SP_PERSONAL_DIR] = NULL; #else #ifdef __HAIKU__ diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp index a7a444cc86..c0d78028bd 100644 --- a/src/intro_gui.cpp +++ b/src/intro_gui.cpp @@ -299,8 +299,6 @@ void AskExitGame() SetDParam(0, STR_OSNAME_OS2); #elif defined(SUNOS) SetDParam(0, STR_OSNAME_SUNOS); -#elif defined(DOS) - SetDParam(0, STR_OSNAME_DOS); #else SetDParam(0, STR_OSNAME_UNIX); #endif diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 488332081c..d8b05cac75 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1767,7 +1767,6 @@ STR_QUIT_NO :{BLACK}Nee # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 3da270ad32..ec0017d675 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1439,7 +1439,6 @@ STR_QUIT_NO :{BLACK}لا # Supported OSes STR_OSNAME_WINDOWS :ويندوز -STR_OSNAME_DOS :دوس STR_OSNAME_UNIX :يونكس STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :هايكو diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 046e0f7816..6cec7bfd29 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1679,7 +1679,6 @@ STR_QUIT_NO :{BLACK}Ez # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 3baf40f69f..917374e5d1 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -2092,7 +2092,6 @@ STR_QUIT_NO :{BLACK}Не # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index fb9cce3057..b0c8a58167 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1783,7 +1783,6 @@ STR_QUIT_NO :{BLACK}Não # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 0ed560da1b..ff4487443e 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1715,7 +1715,6 @@ STR_QUIT_NO :{BLACK}Не # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :ДОС STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 4d889fd3b4..012a5d3168 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1798,7 +1798,6 @@ STR_QUIT_NO :{BLACK}No # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 701bd7fb98..8bc45b1699 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1895,7 +1895,6 @@ STR_QUIT_NO :{BLACK}Ne # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 5a22128758..618527bd9d 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1861,7 +1861,6 @@ STR_QUIT_NO :{BLACK}Ne # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unixu STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 5a30026efe..5adbdff762 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1799,7 +1799,6 @@ STR_QUIT_NO :{BLACK}Nej # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index ced8ca5b03..546cb31aa6 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1799,7 +1799,6 @@ STR_QUIT_NO :{BLACK}Nee # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/english.txt b/src/lang/english.txt index 209c452e2d..45bbbc0bfa 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1799,7 +1799,6 @@ STR_QUIT_NO :{BLACK}No # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 10bed1fb42..1f3d9eef5d 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1743,7 +1743,6 @@ STR_QUIT_NO :{BLACK}No # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 6fccdf640e..f02b1a2cd5 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1797,7 +1797,6 @@ STR_QUIT_NO :{BLACK}No # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 964f1f44d8..12e550a16c 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1426,7 +1426,6 @@ STR_QUIT_NO :{BLACK}Ne # Supported OSes STR_OSNAME_WINDOWS :Vindozo -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unikso STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index f8210e6596..39e74edd39 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1827,7 +1827,6 @@ STR_QUIT_NO :{BLACK}Ei # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index d85ad04ccf..803c761caf 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1590,7 +1590,6 @@ STR_QUIT_NO :{BLACK}Nei # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 829ac56867..3cdf100dd9 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1799,7 +1799,6 @@ STR_QUIT_NO :{BLACK}Ei # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/french.txt b/src/lang/french.txt index 97d2f9110d..e8e14582c3 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1794,7 +1794,6 @@ STR_QUIT_NO :{BLACK}Non # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 36df72dcee..3ed107d8b8 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -1977,7 +1977,6 @@ STR_QUIT_NO :{BLACK}Chan eil # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 7f4e97f733..3fcc850c4c 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1770,7 +1770,6 @@ STR_QUIT_NO :{BLACK}Non # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/german.txt b/src/lang/german.txt index 0a0501e614..713257785e 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1788,7 +1788,6 @@ STR_QUIT_NO :{BLACK}Nein # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 4ac355e6d8..2591066016 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1890,7 +1890,6 @@ STR_QUIT_NO :{BLACK}Όχι # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index e730e0c3ea..18845ea441 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1792,7 +1792,6 @@ STR_QUIT_NO :{BLACK}לא # Supported OSes STR_OSNAME_WINDOWS :חלונות -STR_OSNAME_DOS :דוס STR_OSNAME_UNIX :יוניקס STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :הייקו diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 914b2a2a4d..3f2c2b40eb 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1863,7 +1863,6 @@ STR_QUIT_NO :{BLACK}Nem # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 5ef33b5b28..1fada9f414 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1631,7 +1631,6 @@ STR_QUIT_NO :{BLACK}Nei # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index f2f52e7a7e..ff220fc1d5 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -1776,7 +1776,6 @@ STR_QUIT_NO :{BLACK}Tidak # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 61fb68954d..c845d4c5f5 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1766,7 +1766,6 @@ STR_QUIT_NO :{BLACK}Níl # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 7a7f799d69..2b629806de 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1817,7 +1817,6 @@ STR_QUIT_NO :{BLACK}No # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 6977a8a5be..c3c5fe89f9 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -1766,7 +1766,6 @@ STR_QUIT_NO :{BLACK}いい # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 803ec85b07..a57e08bda5 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1800,7 +1800,6 @@ STR_QUIT_NO :{BLACK}아니 # Supported OSes STR_OSNAME_WINDOWS :{G=f}Windows -STR_OSNAME_DOS :{G=f}DOS STR_OSNAME_UNIX :{G=f}Unix STR_OSNAME_OSX :{G=f}OS{NBSP}X STR_OSNAME_HAIKU :{G=f}Haiku diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 63ebbcbc12..10a0ea29be 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -1967,7 +1967,6 @@ STR_QUIT_NO :{BLACK}Non # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 05ff2588b4..c457ac0019 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1713,7 +1713,6 @@ STR_QUIT_NO :{BLACK}Nē # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 742e192eea..cf5290f6d6 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1985,7 +1985,6 @@ STR_QUIT_NO :{BLACK}Ne # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 916b263e9a..bfebe82f87 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1769,7 +1769,6 @@ STR_QUIT_NO :{BLACK}Nee # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/malay.txt b/src/lang/malay.txt index a5553ad6ad..ddaf825a83 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1527,7 +1527,6 @@ STR_QUIT_NO :{BLACK}Tidak # Supported OSes STR_OSNAME_WINDOWS :Tetingkap -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 3fae530b8f..8c565bec81 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1802,7 +1802,6 @@ STR_QUIT_NO :{BLACK}Nei # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index e998101d34..8e6948d9ab 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1689,7 +1689,6 @@ STR_QUIT_NO :{BLACK}Nei # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 2b7ee1b4a8..f44de0b917 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2167,7 +2167,6 @@ STR_QUIT_NO :{BLACK}Nie # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index e2ba14b44b..503dcacf63 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1794,7 +1794,6 @@ STR_QUIT_NO :{BLACK}Não # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index e1deb9971f..b1c80d97dc 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -1747,7 +1747,6 @@ STR_QUIT_NO :{BLACK}Nu # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/russian.txt b/src/lang/russian.txt index af60eb745b..e6b7237b33 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1951,7 +1951,6 @@ STR_QUIT_NO :{BLACK}Нет # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index fd8da75b77..b1efd373e3 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -1973,7 +1973,6 @@ STR_QUIT_NO :{BLACK}Ne # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 78e0623429..61983f80a3 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1776,7 +1776,6 @@ STR_QUIT_NO :{BLACK}否 # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 6aec809897..8cb3a35042 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1834,7 +1834,6 @@ STR_QUIT_NO :{BLACK}Nie # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 2adfe3343a..63bbff4ef7 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1920,7 +1920,6 @@ STR_QUIT_NO :{BLACK}Ne # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 158998666c..b2ed3fc171 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1779,7 +1779,6 @@ STR_QUIT_NO :{BLACK}No # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index b57aea35b3..946c35f0c3 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1794,7 +1794,6 @@ STR_QUIT_NO :{BLACK}No # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index e4016174dc..e0351daa7a 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1787,7 +1787,6 @@ STR_QUIT_NO :{BLACK}Nej # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index c67f9ab064..34b413eea0 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1536,7 +1536,6 @@ STR_QUIT_NO :{BLACK}இல # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 99a011be6d..a315f95639 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1717,7 +1717,6 @@ STR_QUIT_NO :{BLACK}ไม # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :ระบบปฏิบัติการ Haiku diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 18e146e1ff..c9cbddb9ca 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1766,7 +1766,6 @@ STR_QUIT_NO :{BLACK}否 # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 16e8ccfa34..93a386398c 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -1792,7 +1792,6 @@ STR_QUIT_NO :{BLACK}Hayır # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index a04f8b6e7b..4e7b87d229 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1927,7 +1927,6 @@ STR_QUIT_NO :{BLACK}Ні # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/unfinished/chuvash.txt b/src/lang/unfinished/chuvash.txt index 8d93f19360..e858a0bbc8 100644 --- a/src/lang/unfinished/chuvash.txt +++ b/src/lang/unfinished/chuvash.txt @@ -662,7 +662,6 @@ STR_QUIT_NO :{BLACK}Ҫук # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index 9e6b3d470d..df1ffd3c04 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -1700,7 +1700,6 @@ STR_QUIT_NO :{BLACK}Nee # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index 5fd8737539..763f267c6f 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -1483,7 +1483,6 @@ STR_QUIT_NO :{BLACK}خیر # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :هایکو diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index af1a108c1d..73e794ca7c 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -1380,7 +1380,6 @@ STR_QUIT_NO :{BLACK}نہیں # Supported OSes STR_OSNAME_WINDOWS :ونڈوز -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :یونیکس STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 0e72993f8e..190541c7a1 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1782,7 +1782,6 @@ STR_QUIT_NO :{BLACK}Không # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 131c05d6c2..e5e451d8b9 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1769,7 +1769,6 @@ STR_QUIT_NO :{BLACK}Na # Supported OSes STR_OSNAME_WINDOWS :Windows -STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS{NBSP}X STR_OSNAME_HAIKU :Haiku diff --git a/src/stdafx.h b/src/stdafx.h index 98f5d13b91..a9ed460c26 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -242,15 +242,6 @@ #endif /* defined(_MSC_VER) */ -#if defined(DOS) - /* The DOS port does not have all signals/signal functions. */ - #define strsignal(sig) "" - /* Use 'no floating point' for bus errors; SIGBUS does not exist - * for DOS, SIGNOFP for other platforms. So it's fairly safe - * to interchange those. */ - #define SIGBUS SIGNOFP -#endif - /* NOTE: the string returned by these functions is only valid until the next * call to the same function and is not thread- or reentrancy-safe */ #if !defined(STRGEN) && !defined(SETTINGSGEN) @@ -436,10 +427,7 @@ void NORETURN CDECL error(const char *str, ...) WARN_FORMAT(1, 2); #define OTTD_ASSERT #endif -#if defined(__DJGPP__) - /* DJGPP doesn't have C++ conformant _stricmp... */ - #define _stricmp stricmp -#elif defined(OPENBSD) +#if defined(OPENBSD) /* OpenBSD uses strcasecmp(3) */ #define _stricmp strcasecmp #endif diff --git a/src/video/allegro_v.cpp b/src/video/allegro_v.cpp index 960d7fb7c8..53a42393ee 100644 --- a/src/video/allegro_v.cpp +++ b/src/video/allegro_v.cpp @@ -440,12 +440,6 @@ const char *VideoDriver_Allegro::Start(const char * const *parm) signal(SIGSEGV, NULL); #endif -#if defined(DOS) - /* Force DOS builds to ALWAYS use full screen as - * it can't do windowed. */ - _fullscreen = true; -#endif - GetVideoModes(); if (!CreateMainSurface(_cur_resolution.width, _cur_resolution.height)) { return "Failed to set up Allegro video"; @@ -461,7 +455,7 @@ void VideoDriver_Allegro::Stop() if (--_allegro_instance_count == 0) allegro_exit(); } -#if defined(UNIX) || defined(__OS2__) || defined(DOS) +#if defined(UNIX) || defined(__OS2__) # include /* gettimeofday */ static uint32 GetTime() @@ -548,9 +542,6 @@ bool VideoDriver_Allegro::ChangeResolution(int w, int h) bool VideoDriver_Allegro::ToggleFullscreen(bool fullscreen) { -#ifdef DOS - return false; -#else _fullscreen = fullscreen; GetVideoModes(); // get the list of available video modes if (_num_resolutions == 0 || !this->ChangeResolution(_cur_resolution.width, _cur_resolution.height)) { @@ -559,7 +550,6 @@ bool VideoDriver_Allegro::ToggleFullscreen(bool fullscreen) return false; } return true; -#endif } bool VideoDriver_Allegro::AfterBlitterChange() From e3c639a09f1d2251477f69496120d057dd8320a9 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Wed, 20 Mar 2019 17:01:13 +0100 Subject: [PATCH 512/622] Remove: ENABLE_NETWORK switch This switch has been a pain for years. Often disabling broke compilation, as no developer compiles OpenTTD without, neither do any of our official binaries. Additionaly, it has grown so hugely in our codebase, that it clearly shows that the current solution was a poor one. 350+ instances of "#ifdef ENABLE_NETWORK" were in the code, of which only ~30 in the networking code itself. The rest were all around the code to do the right thing, from GUI to NewGRF. A more proper solution would be to stub all the functions, and make sure the rest of the code can simply assume network is available. This was also partially done, and most variables were correct if networking was disabled. Despite that, often the #ifdefs were still used. With the recent removal of DOS, there is also no platform anymore which we support where networking isn't working out-of-the-box. All in all, it is time to remove the ENABLE_NETWORK switch. No replacement is planned, but if you feel we really need this option, we welcome any Pull Request which implements this in a way that doesn't crawl through the code like this diff shows we used to. --- Doxyfile | 3 +- config.lib | 31 +++---------------- src/ai/ai.hpp | 2 -- src/ai/ai_core.cpp | 4 --- src/ai/ai_gui.cpp | 2 -- src/base_media_func.h | 17 ---------- src/bootstrap_gui.cpp | 6 ++-- src/command.cpp | 6 ---- src/command_func.h | 2 -- src/company_cmd.cpp | 12 -------- src/company_gui.cpp | 8 ----- src/console.cpp | 6 ---- src/console_cmds.cpp | 24 ++------------- src/date.cpp | 8 ----- src/debug.cpp | 6 ---- src/dedicated.cpp | 9 ------ src/economy.cpp | 2 -- src/fileio.cpp | 9 ------ src/fios.cpp | 12 +++----- src/fios_gui.cpp | 4 --- src/game/game.hpp | 2 -- src/game/game_core.cpp | 4 --- src/gfx.cpp | 4 --- src/goal.cpp | 8 ----- src/intro_gui.cpp | 2 -- src/lang/english.txt | 2 +- src/main_gui.cpp | 28 ++++++----------- src/misc.cpp | 2 -- src/misc_cmd.cpp | 6 ---- src/network/core/address.cpp | 4 --- src/network/core/address.h | 3 -- src/network/core/core.cpp | 4 --- src/network/core/core.h | 4 --- src/network/core/game.h | 4 --- src/network/core/host.cpp | 4 --- src/network/core/os_abstraction.h | 4 --- src/network/core/packet.cpp | 4 --- src/network/core/packet.h | 4 --- src/network/core/tcp.cpp | 4 --- src/network/core/tcp.h | 4 --- src/network/core/tcp_admin.cpp | 4 --- src/network/core/tcp_admin.h | 4 --- src/network/core/tcp_connect.cpp | 4 --- src/network/core/tcp_content.cpp | 4 --- src/network/core/tcp_content.h | 4 --- src/network/core/tcp_game.cpp | 4 --- src/network/core/tcp_game.h | 4 --- src/network/core/tcp_http.cpp | 4 --- src/network/core/tcp_http.h | 4 --- src/network/core/tcp_listen.h | 4 --- src/network/core/udp.cpp | 4 --- src/network/core/udp.h | 4 --- src/network/network.cpp | 4 --- src/network/network.h | 18 ----------- src/network/network_admin.cpp | 4 --- src/network/network_admin.h | 3 -- src/network/network_base.h | 3 -- src/network/network_chat_gui.cpp | 4 --- src/network/network_client.cpp | 4 --- src/network/network_client.h | 4 --- src/network/network_command.cpp | 4 --- src/network/network_content.cpp | 4 --- src/network/network_content.h | 6 ---- src/network/network_content_gui.cpp | 3 -- src/network/network_func.h | 3 -- src/network/network_gamelist.cpp | 4 --- src/network/network_gui.cpp | 3 -- src/network/network_gui.h | 12 -------- src/network/network_internal.h | 3 -- src/network/network_server.cpp | 4 --- src/network/network_server.h | 10 ------ src/network/network_type.h | 3 -- src/network/network_udp.cpp | 4 --- src/network/network_udp.h | 4 --- src/newgrf_config.cpp | 7 ----- src/newgrf_config.h | 2 -- src/newgrf_gui.cpp | 4 --- src/openttd.cpp | 39 +---------------------- src/order_backup.cpp | 4 --- src/script/api/script_admin.cpp | 2 -- src/script/api/script_client.cpp | 18 ----------- src/script/api/script_clientlist.cpp | 4 --- src/script/api/script_game.cpp | 4 --- src/script/api/script_goal.cpp | 4 --- src/script/api/script_object.cpp | 2 -- src/script/script_scanner.cpp | 6 ---- src/settings.cpp | 10 ------ src/settings_func.h | 4 --- src/settings_type.h | 5 --- src/strings.cpp | 10 +----- src/table/gameopt_settings.ini | 2 -- src/table/settings.ini | 46 +--------------------------- src/toolbar_gui.cpp | 10 ------ src/video/dedicated_v.cpp | 4 --- src/viewport.cpp | 4 --- src/window.cpp | 5 +-- 96 files changed, 29 insertions(+), 600 deletions(-) diff --git a/Doxyfile b/Doxyfile index b6b46257a7..5677118c54 100644 --- a/Doxyfile +++ b/Doxyfile @@ -289,8 +289,7 @@ EXPAND_ONLY_PREDEF = YES SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = -PREDEFINED = ENABLE_NETWORK \ - WITH_ZLIB \ +PREDEFINED = WITH_ZLIB \ WITH_LZO \ WITH_LIBLZMA \ WITH_SDL \ diff --git a/config.lib b/config.lib index 18ea119c43..026f7bfb3c 100644 --- a/config.lib +++ b/config.lib @@ -52,7 +52,6 @@ set_default() { enable_profiling="0" enable_lto="0" enable_dedicated="0" - enable_network="1" enable_static="1" enable_translator="0" enable_unicode="1" @@ -130,7 +129,6 @@ set_default() { enable_profiling enable_lto enable_dedicated - enable_network enable_static enable_translator enable_unicode @@ -289,9 +287,6 @@ detect_params() { --enable-ipo=*) enable_lto="$optarg";; --enable-dedicated) enable_dedicated="1";; --enable-dedicated=*) enable_dedicated="$optarg";; - --enable-network) enable_network="2";; - --enable-network=*) enable_network="$optarg";; - --disable-network) enable_network="0";; --disable-static) enable_static="0";; --enable-static) enable_static="2";; --enable-static=*) enable_static="$optarg";; @@ -749,11 +744,6 @@ check_params() { if [ "$enable_dedicated" != "0" ]; then log 1 "checking GDI video driver... dedicated server, skipping" log 1 "checking dedicated... found" - - if [ "$enable_network" = "0" ]; then - log 1 "configure: error: building a dedicated server without network support is pointless" - exit 1 - fi else if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then log 1 "checking GDI video driver... found" @@ -784,12 +774,6 @@ check_params() { log 1 "checking console application... enabled" fi - if [ "$enable_network" != "0" ]; then - log 1 "checking network... found" - else - log 1 "checking network... disabled" - fi - log 1 "checking squirrel... found" SCRIPT_SRC_DIR="$ROOT_DIR/src/3rdparty/squirrel/include" @@ -1833,16 +1817,12 @@ make_cflags_and_ldflags() { CFLAGS="$CFLAGS -DUNICODE -D_UNICODE" fi - if [ "$enable_network" != "0" ]; then - CFLAGS="$CFLAGS -DENABLE_NETWORK" + if [ "$os" = "HAIKU" ]; then + LDFLAGS="$LDFLAGS -lnetwork" + fi - if [ "$os" = "HAIKU" ]; then - LDFLAGS="$LDFLAGS -lnetwork" - fi - - if [ "$os" = "SUNOS" ]; then - LDFLAGS="$LDFLAGS -lnsl -lsocket" - fi + if [ "$os" = "SUNOS" ]; then + LDFLAGS="$LDFLAGS -lnsl -lsocket" fi if [ "$enable_static" != "0" ]; then @@ -3499,7 +3479,6 @@ showhelp() { echo " --enable-console compile as a console application instead of as a GUI application." echo " If this setting is active, debug output will appear in the same" echo " console instead of opening a new window. (Win32 ONLY)" - echo " --disable-network disable network support" echo " --disable-assert disable asserts (continue on errors)" echo " --enable-strip enable any possible stripping" echo " --without-osx-sysroot disable the automatic adding of sysroot " diff --git a/src/ai/ai.hpp b/src/ai/ai.hpp index 1b5b6c07da..bd9544b9f3 100644 --- a/src/ai/ai.hpp +++ b/src/ai/ai.hpp @@ -164,11 +164,9 @@ public: /** Gets the ScriptScanner instance that is used to find AI Libraries */ static AIScannerLibrary *GetScannerLibrary(); -#if defined(ENABLE_NETWORK) /** Wrapper function for AIScanner::HasAI */ static bool HasAI(const struct ContentInfo *ci, bool md5sum); static bool HasAILibrary(const ContentInfo *ci, bool md5sum); -#endif private: static uint frame_counter; ///< Tick counter for the AI code static class AIScannerInfo *scanner_info; ///< ScriptScanner instance that is used to find AIs diff --git a/src/ai/ai_core.cpp b/src/ai/ai_core.cpp index 51522edaff..ff2fc286a0 100644 --- a/src/ai/ai_core.cpp +++ b/src/ai/ai_core.cpp @@ -362,8 +362,6 @@ InvalidateWindowClassesData(WC_AI_SETTINGS); } -#if defined(ENABLE_NETWORK) - /** * Check whether we have an AI (library) with the exact characteristics as ci. * @param ci the characteristics to search on (shortname and md5sum) @@ -380,8 +378,6 @@ return AI::scanner_library->HasScript(ci, md5sum); } -#endif /* defined(ENABLE_NETWORK) */ - /* static */ AIScannerInfo *AI::GetScannerInfo() { return AI::scanner_info; diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 73806da15e..8e7e12a63b 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -928,9 +928,7 @@ struct AIConfigWindow : public Window { if (!_network_available) { ShowErrorMessage(STR_NETWORK_ERROR_NOTAVAILABLE, INVALID_STRING_ID, WL_ERROR); } else { -#if defined(ENABLE_NETWORK) ShowNetworkContentListWindow(NULL, CONTENT_TYPE_AI, CONTENT_TYPE_GAME); -#endif } break; } diff --git a/src/base_media_func.h b/src/base_media_func.h index f7afca0edb..ed954360a0 100644 --- a/src/base_media_func.h +++ b/src/base_media_func.h @@ -277,7 +277,6 @@ template return p; } -#if defined(ENABLE_NETWORK) #include "network/network_content.h" template const char *TryGetBaseSetFile(const ContentInfo *ci, bool md5sum, const Tbase_set *s) @@ -307,22 +306,6 @@ template (TryGetBaseSetFile(ci, md5sum, BaseMedia::duplicate_sets) != NULL); } -#else - -template -const char *TryGetBaseSetFile(const ContentInfo *ci, bool md5sum, const Tbase_set *s) -{ - return NULL; -} - -template -/* static */ bool BaseMedia::HasSet(const ContentInfo *ci, bool md5sum) -{ - return false; -} - -#endif /* ENABLE_NETWORK */ - /** * Count the number of available graphics sets. * @return the number of sets diff --git a/src/bootstrap_gui.cpp b/src/bootstrap_gui.cpp index 3fb52a1f9e..01d83848b8 100644 --- a/src/bootstrap_gui.cpp +++ b/src/bootstrap_gui.cpp @@ -13,7 +13,7 @@ #include "base_media_base.h" #include "blitter/factory.hpp" -#if defined(ENABLE_NETWORK) && defined(WITH_FREETYPE) +#if defined(WITH_FREETYPE) #include "core/geometry_func.hpp" #include "fontcache.h" @@ -204,7 +204,7 @@ public: } }; -#endif /* defined(ENABLE_NETWORK) && defined(WITH_FREETYPE) */ +#endif /* defined(WITH_FREETYPE) */ /** * Handle all procedures for bootstrapping OpenTTD without a base graphics set. @@ -220,7 +220,7 @@ bool HandleBootstrap() if (BlitterFactory::GetCurrentBlitter()->GetScreenDepth() == 0) goto failure; /* If there is no network or no freetype, then there is nothing we can do. Go straight to failure. */ -#if defined(ENABLE_NETWORK) && defined(WITH_FREETYPE) && (defined(WITH_FONTCONFIG) || defined(_WIN32) || defined(__APPLE__)) +#if defined(WITH_FREETYPE) && (defined(WITH_FONTCONFIG) || defined(_WIN32) || defined(__APPLE__)) if (!_network_available) goto failure; /* First tell the game we're bootstrapping. */ diff --git a/src/command.cpp b/src/command.cpp index 72b3f4302e..7500a170bd 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -573,10 +573,8 @@ bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallbac return false; } -#ifdef ENABLE_NETWORK /* Only set p2 when the command does not come from the network. */ if (!(cmd & CMD_NETWORK_COMMAND) && GetCommandFlags(cmd) & CMD_CLIENT_ID && p2 == 0) p2 = CLIENT_ID_SERVER; -#endif CommandCost res = DoCommandPInternal(tile, p1, p2, cmd, callback, text, my_cmd, estimate_only); if (res.Failed()) { @@ -646,10 +644,8 @@ CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, /* Flags get send to the DoCommand */ DoCommandFlag flags = CommandFlagsToDCFlags(cmd_flags); -#ifdef ENABLE_NETWORK /* Make sure p2 is properly set to a ClientID. */ assert(!(cmd_flags & CMD_CLIENT_ID) || p2 != 0); -#endif /* Do not even think about executing out-of-bounds tile-commands */ if (tile != 0 && (tile >= MapSize() || (!IsValidTile(tile) && (cmd_flags & CMD_ALL_TILES) == 0))) return_dcpi(CMD_ERROR); @@ -696,7 +692,6 @@ CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, return_dcpi(res); } -#ifdef ENABLE_NETWORK /* * If we are in network, and the command is not from the network * send it to the command-queue and abort execution @@ -711,7 +706,6 @@ CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, * reset the storages as we've not executed the command. */ return_dcpi(CommandCost()); } -#endif /* ENABLE_NETWORK */ DEBUG(desync, 1, "cmd: %08x; %02x; %02x; %06x; %08x; %08x; %08x; \"%s\" (%s)", _date, _date_fract, (int)_current_company, tile, p1, p2, cmd & ~CMD_NETWORK_COMMAND, text, GetCommandName(cmd)); /* Actually try and execute the command. If no cost-type is given diff --git a/src/command_func.h b/src/command_func.h index 3369475675..ea42f25d35 100644 --- a/src/command_func.h +++ b/src/command_func.h @@ -42,9 +42,7 @@ bool DoCommandP(const CommandContainer *container, bool my_cmd = true); CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback, const char *text, bool my_cmd, bool estimate_only); -#ifdef ENABLE_NETWORK void NetworkSendCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback, const char *text, CompanyID company); -#endif /* ENABLE_NETWORK */ extern Money _additional_cash_required; diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 8cc876751c..4d8750851f 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -104,10 +104,8 @@ void SetLocalCompany(CompanyID new_company) /* company could also be COMPANY_SPECTATOR or OWNER_NONE */ assert(Company::IsValidID(new_company) || new_company == COMPANY_SPECTATOR || new_company == OWNER_NONE); -#ifdef ENABLE_NETWORK /* Delete the chat window, if you were team chatting. */ InvalidateWindowData(WC_SEND_NETWORK_MSG, DESTTYPE_TEAM, _local_company); -#endif assert(IsLocalCompany()); @@ -597,9 +595,7 @@ void StartupCompanies() /** Start a new competitor company if possible. */ static bool MaybeStartNewCompany() { -#ifdef ENABLE_NETWORK if (_networking && Company::GetNumItems() >= _settings_client.network.max_companies) return false; -#endif /* ENABLE_NETWORK */ Company *c; @@ -792,9 +788,7 @@ void CompanyNewsInformation::FillData(const Company *c, const Company *other) */ void CompanyAdminUpdate(const Company *company) { -#ifdef ENABLE_NETWORK if (_network_server) NetworkAdminCompanyUpdate(company); -#endif /* ENABLE_NETWORK */ } /** @@ -804,9 +798,7 @@ void CompanyAdminUpdate(const Company *company) */ void CompanyAdminRemove(CompanyID company_id, CompanyRemoveReason reason) { -#ifdef ENABLE_NETWORK if (_network_server) NetworkAdminCompanyRemove(company_id, (AdminCompanyRemoveReason)reason); -#endif /* ENABLE_NETWORK */ } /** @@ -832,7 +824,6 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 /* This command is only executed in a multiplayer game */ if (!_networking) return CMD_ERROR; -#ifdef ENABLE_NETWORK /* Has the network client a correct ClientIndex? */ if (!(flags & DC_EXEC)) return CommandCost(); @@ -876,7 +867,6 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 } NetworkServerNewCompany(c, ci); -#endif /* ENABLE_NETWORK */ break; } @@ -885,9 +875,7 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 if (company_id != INVALID_COMPANY && (company_id >= MAX_COMPANIES || Company::IsValidID(company_id))) return CMD_ERROR; Company *c = DoStartupNewCompany(true, company_id); -#ifdef ENABLE_NETWORK if (c != NULL) NetworkServerNewCompany(c, NULL); -#endif /* ENABLE_NETWORK */ break; } diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 74e1cab57b..de5498102d 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -2387,11 +2387,9 @@ struct CompanyWindow : Window break; } -#ifdef ENABLE_NETWORK case WID_C_HAS_PASSWORD: *size = maxdim(*size, GetSpriteSize(SPR_LOCK)); break; -#endif /* ENABLE_NETWORK */ } } @@ -2498,13 +2496,11 @@ struct CompanyWindow : Window break; } -#ifdef ENABLE_NETWORK case WID_C_HAS_PASSWORD: if (_networking && NetworkCompanyIsPassworded(c->index)) { DrawSprite(SPR_LOCK, PAL_NONE, r.left, r.top); } break; -#endif /* ENABLE_NETWORK */ } } @@ -2594,7 +2590,6 @@ struct CompanyWindow : Window DoCommandP(0, this->window_number, 0, CMD_SELL_SHARE_IN_COMPANY | CMD_MSG(STR_ERROR_CAN_T_SELL_25_SHARE_IN)); break; -#ifdef ENABLE_NETWORK case WID_C_COMPANY_PASSWORD: if (this->window_number == _local_company) ShowNetworkCompanyPasswordWindow(this); break; @@ -2614,7 +2609,6 @@ struct CompanyWindow : Window } break; } -#endif /* ENABLE_NETWORK */ } } @@ -2652,11 +2646,9 @@ struct CompanyWindow : Window DoCommandP(0, 0, 0, CMD_RENAME_COMPANY | CMD_MSG(STR_ERROR_CAN_T_CHANGE_COMPANY_NAME), NULL, str); break; -#ifdef ENABLE_NETWORK case WID_C_COMPANY_JOIN: NetworkClientRequestMove((CompanyID)this->window_number, str); break; -#endif /* ENABLE_NETWORK */ } } diff --git a/src/console.cpp b/src/console.cpp index 2cf9d96958..c7f24a9dc5 100644 --- a/src/console.cpp +++ b/src/console.cpp @@ -33,10 +33,8 @@ FILE *_iconsole_output_file; void IConsoleInit() { _iconsole_output_file = NULL; -#ifdef ENABLE_NETWORK /* Initialize network only variables */ _redirect_console_to_client = INVALID_CLIENT_ID; _redirect_console_to_admin = INVALID_ADMIN_ID; -#endif IConsoleGUIInit(); @@ -90,7 +88,6 @@ void IConsolePrint(TextColour colour_code, const char *string) assert(IsValidConsoleColour(colour_code)); char *str; -#ifdef ENABLE_NETWORK if (_redirect_console_to_client != INVALID_CLIENT_ID) { /* Redirect the string to the client */ NetworkServerSendRcon(_redirect_console_to_client, colour_code, string); @@ -101,7 +98,6 @@ void IConsolePrint(TextColour colour_code, const char *string) NetworkServerSendAdminRcon(_redirect_console_to_admin, colour_code, string); return; } -#endif /* Create a copy of the string, strip if of colours and invalid * characters and (when applicable) assign it to the console buffer */ @@ -110,9 +106,7 @@ void IConsolePrint(TextColour colour_code, const char *string) str_validate(str, str + strlen(str)); if (_network_dedicated) { -#ifdef ENABLE_NETWORK NetworkAdminConsole("console", str); -#endif /* ENABLE_NETWORK */ fprintf(stdout, "%s%s\n", GetLogPrefix(), str); fflush(stdout); IConsoleWriteToLogFile(str); diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 732ace6a2b..6c8e927c96 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -86,8 +86,6 @@ static ConsoleFileList _console_file_list; ///< File storage cache for the conso * command hooks ****************/ -#ifdef ENABLE_NETWORK - /** * Check network availability and inform in console about failure of detection. * @return Network availability. @@ -159,10 +157,6 @@ DEF_CONSOLE_HOOK(ConHookNoNetwork) return CHR_ALLOW; } -#else -# define ConHookNoNetwork NULL -#endif /* ENABLE_NETWORK */ - DEF_CONSOLE_HOOK(ConHookNewGRFDeveloperTool) { if (_settings_client.gui.newgrf_developer_tools) { @@ -170,11 +164,7 @@ DEF_CONSOLE_HOOK(ConHookNewGRFDeveloperTool) if (echo) IConsoleError("This command is only available in game and editor."); return CHR_DISALLOW; } -#ifdef ENABLE_NETWORK return ConHookNoNetwork(echo); -#else - return CHR_ALLOW; -#endif } return CHR_HIDE; } @@ -479,7 +469,6 @@ DEF_CONSOLE_CMD(ConClearBuffer) /********************************** * Network Core Console Commands **********************************/ -#ifdef ENABLE_NETWORK static bool ConKickOrBan(const char *argv, bool ban) { @@ -930,8 +919,6 @@ DEF_CONSOLE_CMD(ConNetworkConnect) return true; } -#endif /* ENABLE_NETWORK */ - /********************************* * script file console commands *********************************/ @@ -1547,12 +1534,9 @@ DEF_CONSOLE_CMD(ConCompanies) const char *password_state = ""; if (c->is_ai) { password_state = "AI"; - } -#ifdef ENABLE_NETWORK - else if (_network_server) { + } else if (_network_server) { password_state = StrEmpty(_network_company_states[c->index].password) ? "unprotected" : "protected"; } -#endif char colour[512]; GetString(colour, STR_COLOUR_DARK_BLUE + _company_colours[c->index], lastof(colour)); @@ -1569,8 +1553,6 @@ DEF_CONSOLE_CMD(ConCompanies) return true; } -#ifdef ENABLE_NETWORK - DEF_CONSOLE_CMD(ConSay) { if (argc == 0) { @@ -1812,7 +1794,6 @@ DEF_CONSOLE_CMD(ConContent) return false; } #endif /* defined(WITH_ZLIB) */ -#endif /* ENABLE_NETWORK */ DEF_CONSOLE_CMD(ConSetting) { @@ -1992,7 +1973,7 @@ void IConsoleStdLibRegister() IConsoleAliasRegister("players", "companies"); /* networking functions */ -#ifdef ENABLE_NETWORK + /* Content downloading is only available with ZLIB */ #if defined(WITH_ZLIB) IConsoleCmdRegister("content", ConContent); @@ -2050,7 +2031,6 @@ void IConsoleStdLibRegister() IConsoleAliasRegister("restart_game_year", "setting restart_game_year %+"); IConsoleAliasRegister("min_players", "setting min_active_clients %+"); IConsoleAliasRegister("reload_cfg", "setting reload_cfg %+"); -#endif /* ENABLE_NETWORK */ /* debugging stuff */ #ifdef _DEBUG diff --git a/src/date.cpp b/src/date.cpp index 9c25af40ee..8b8fab5b0a 100644 --- a/src/date.cpp +++ b/src/date.cpp @@ -195,9 +195,7 @@ static void OnNewYear() VehiclesYearlyLoop(); TownsYearlyLoop(); InvalidateWindowClassesData(WC_BUILD_STATION); -#ifdef ENABLE_NETWORK if (_network_server) NetworkServerYearlyLoop(); -#endif /* ENABLE_NETWORK */ if (_cur_year == _settings_client.gui.semaphore_build_before) ResetSignalVariant(); @@ -217,11 +215,9 @@ static void OnNewYear() LinkGraph *lg; FOR_ALL_LINK_GRAPHS(lg) lg->ShiftDates(-days_this_year); -#ifdef ENABLE_NETWORK /* Because the _date wraps here, and text-messages expire by game-days, we have to clean out * all of them if the date is set back, else those messages will hang for ever */ NetworkInitChatMessage(); -#endif /* ENABLE_NETWORK */ } if (_settings_client.gui.auto_euro) CheckSwitchToEuro(); @@ -244,9 +240,7 @@ static void OnNewMonth() IndustryMonthlyLoop(); SubsidyMonthlyLoop(); StationMonthlyLoop(); -#ifdef ENABLE_NETWORK if (_network_server) NetworkServerMonthlyLoop(); -#endif /* ENABLE_NETWORK */ } /** @@ -254,9 +248,7 @@ static void OnNewMonth() */ static void OnNewDay() { -#ifdef ENABLE_NETWORK if (_network_server) NetworkServerDailyLoop(); -#endif /* ENABLE_NETWORK */ DisasterDailyLoop(); IndustryDailyLoop(); diff --git a/src/debug.cpp b/src/debug.cpp index 13df98db34..422f730389 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -23,10 +23,8 @@ #include -#if defined(ENABLE_NETWORK) #include "network/network_admin.h" SOCKET _debug_socket = INVALID_SOCKET; -#endif /* ENABLE_NETWORK */ #include "safeguards.h" @@ -111,7 +109,6 @@ char *DumpDebugFacilityNames(char *buf, char *last) */ static void debug_print(const char *dbg, const char *buf) { -#if defined(ENABLE_NETWORK) if (_debug_socket != INVALID_SOCKET) { char buf2[1024 + 32]; @@ -121,7 +118,6 @@ static void debug_print(const char *dbg, const char *buf) send(_debug_socket, buf2, (int)strlen(buf2), 0); return; } -#endif /* ENABLE_NETWORK */ if (strcmp(dbg, "desync") == 0) { static FILE *f = FioFOpenFile("commands-out.log", "wb", AUTOSAVE_DIR); if (f == NULL) return; @@ -146,9 +142,7 @@ static void debug_print(const char *dbg, const char *buf) #else fputs(buffer, stderr); #endif -#ifdef ENABLE_NETWORK NetworkAdminConsole(dbg, buf); -#endif /* ENABLE_NETWORK */ IConsoleDebug(dbg, buf); } } diff --git a/src/dedicated.cpp b/src/dedicated.cpp index 574cbb0c34..141a917208 100644 --- a/src/dedicated.cpp +++ b/src/dedicated.cpp @@ -11,8 +11,6 @@ #include "stdafx.h" -#ifdef ENABLE_NETWORK - char *_log_file = NULL; ///< File to reroute output of a forked OpenTTD to FILE *_log_fd = NULL; ///< File to reroute output of a forked OpenTTD to @@ -67,10 +65,3 @@ void DedicatedFork() } } #endif - -#else - -/** Empty helper function call for NOT(UNIX) systems */ -void DedicatedFork() {} - -#endif /* ENABLE_NETWORK */ diff --git a/src/economy.cpp b/src/economy.cpp index 19b36e7c9e..bf520c3f6f 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -292,10 +292,8 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) * the client. This is needed as it needs to know whether "you" really * are the current local company. */ Backup cur_company(_current_company, old_owner, FILE_LINE); -#ifdef ENABLE_NETWORK /* In all cases, make spectators of clients connected to that company */ if (_networking) NetworkClientsToSpectators(old_owner); -#endif /* ENABLE_NETWORK */ 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. */ diff --git a/src/fileio.cpp b/src/fileio.cpp index 22adb76d52..caaa0fed53 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -1240,7 +1240,6 @@ void DeterminePaths(const char *exe) /* If we have network we make a directory for the autodownloading of content */ _searchpaths[SP_AUTODOWNLOAD_DIR] = str_fmt("%s%s", _personal_dir, "content_download" PATHSEP); -#ifdef ENABLE_NETWORK FioCreateDirectory(_searchpaths[SP_AUTODOWNLOAD_DIR]); /* Create the directory for each of the types of content */ @@ -1253,14 +1252,6 @@ void DeterminePaths(const char *exe) extern char *_log_file; _log_file = str_fmt("%sopenttd.log", _personal_dir); -#else /* ENABLE_NETWORK */ - /* If we don't have networking, we don't need to make the directory. But - * if it exists we keep it, otherwise remove it from the search paths. */ - if (!FileExists(_searchpaths[SP_AUTODOWNLOAD_DIR])) { - free(_searchpaths[SP_AUTODOWNLOAD_DIR]); - _searchpaths[SP_AUTODOWNLOAD_DIR] = NULL; - } -#endif /* ENABLE_NETWORK */ } /** diff --git a/src/fios.cpp b/src/fios.cpp index aef3a8407d..835c04ddb2 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -13,11 +13,13 @@ */ #include "stdafx.h" -#include "fios.h" +#include "3rdparty/md5/md5.h" #include "fileio_func.h" -#include "tar_type.h" +#include "fios.h" +#include "network/network_content.h" #include "screenshot.h" #include "string_func.h" +#include "tar_type.h" #include #ifndef _WIN32 @@ -632,10 +634,6 @@ const char *FiosGetScreenshotDir() return fios_screenshot_path; } -#if defined(ENABLE_NETWORK) -#include "network/network_content.h" -#include "3rdparty/md5/md5.h" - /** Basic data to distinguish a scenario. Used in the server list window */ struct ScenarioIdentifier { uint32 scenid; ///< ID for the scenario (generated by content). @@ -754,5 +752,3 @@ void ScanScenarios() { _scanner.Scan(true); } - -#endif /* ENABLE_NETWORK */ diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index 9911de2133..fd9e0c06a8 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -634,9 +634,7 @@ public: if (!_network_available) { ShowErrorMessage(STR_NETWORK_ERROR_NOTAVAILABLE, INVALID_STRING_ID, WL_ERROR); } else if (_load_check_data.HasNewGrfs()) { -#if defined(ENABLE_NETWORK) ShowMissingContentWindow(_load_check_data.grfconfig); -#endif } break; @@ -698,14 +696,12 @@ public: if (!_network_available) { ShowErrorMessage(STR_NETWORK_ERROR_NOTAVAILABLE, INVALID_STRING_ID, WL_ERROR); } else { -#if defined(ENABLE_NETWORK) assert(this->fop == SLO_LOAD); switch (this->abstract_filetype) { default: NOT_REACHED(); case FT_SCENARIO: ShowNetworkContentListWindow(NULL, CONTENT_TYPE_SCENARIO); break; case FT_HEIGHTMAP: ShowNetworkContentListWindow(NULL, CONTENT_TYPE_HEIGHTMAP); break; } -#endif } break; diff --git a/src/game/game.hpp b/src/game/game.hpp index 329ba5e500..95d9aa0a13 100644 --- a/src/game/game.hpp +++ b/src/game/game.hpp @@ -112,11 +112,9 @@ public: */ static class GameInstance *GetInstance() { return Game::instance; } -#if defined(ENABLE_NETWORK) /** Wrapper function for GameScanner::HasGame */ static bool HasGame(const struct ContentInfo *ci, bool md5sum); static bool HasGameLibrary(const ContentInfo *ci, bool md5sum); -#endif /** Gets the ScriptScanner instance that is used to find Game scripts */ static GameScannerInfo *GetScannerInfo(); /** Gets the ScriptScanner instance that is used to find Game Libraries */ diff --git a/src/game/game_core.cpp b/src/game/game_core.cpp index 10b079bee3..7b05abb40d 100644 --- a/src/game/game_core.cpp +++ b/src/game/game_core.cpp @@ -257,8 +257,6 @@ return Game::scanner_library->FindLibrary(library, version); } -#if defined(ENABLE_NETWORK) - /** * Check whether we have an Game (library) with the exact characteristics as ci. * @param ci the characteristics to search on (shortname and md5sum) @@ -275,8 +273,6 @@ return Game::scanner_library->HasScript(ci, md5sum); } -#endif /* defined(ENABLE_NETWORK) */ - /* static */ GameScannerInfo *Game::GetScannerInfo() { return Game::scanner_info; diff --git a/src/gfx.cpp b/src/gfx.cpp index 7a6b827b7a..aedd2c17e3 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -86,9 +86,7 @@ void GfxScroll(int left, int top, int width, int height, int xo, int yo) if (_cursor.visible) UndrawMouseCursor(); -#ifdef ENABLE_NETWORK if (_networking) NetworkUndrawChatMessage(); -#endif /* ENABLE_NETWORK */ blitter->ScrollBuffer(_screen.dst_ptr, left, top, width, height, xo, yo); /* This part of the screen is now dirty. */ @@ -1288,9 +1286,7 @@ void RedrawScreenRect(int left, int top, int right, int bottom) } } -#ifdef ENABLE_NETWORK if (_networking) NetworkUndrawChatMessage(); -#endif /* ENABLE_NETWORK */ DrawOverlappedWindowForAll(left, top, right, bottom); diff --git a/src/goal.cpp b/src/goal.cpp index f7aae350e5..eba72b7f40 100644 --- a/src/goal.cpp +++ b/src/goal.cpp @@ -247,20 +247,14 @@ CommandCost CmdGoalQuestion(TileIndex tile, DoCommandFlag flags, uint32 p1, uint { uint16 uniqueid = (GoalType)GB(p1, 0, 16); CompanyID company = (CompanyID)GB(p1, 16, 8); -#ifdef ENABLE_NETWORK ClientIndex client = (ClientIndex)GB(p1, 16, 8); -#endif byte type = GB(p1, 24, 2); bool is_client = HasBit(p1, 31); if (_current_company != OWNER_DEITY) return CMD_ERROR; if (StrEmpty(text)) return CMD_ERROR; if (is_client) { -#ifdef ENABLE_NETWORK if (!NetworkClientInfo::IsValidID(client)) return CMD_ERROR; -#else - return CMD_ERROR; -#endif } else { if (company != INVALID_COMPANY && !Company::IsValidID(company)) return CMD_ERROR; } @@ -270,9 +264,7 @@ CommandCost CmdGoalQuestion(TileIndex tile, DoCommandFlag flags, uint32 p1, uint if (flags & DC_EXEC) { if (is_client) { -#ifdef ENABLE_NETWORK if (NetworkClientInfo::Get(client)->client_id != _network_own_client_id) return CommandCost(); -#endif } else { if (company == INVALID_COMPANY && !Company::IsValidID(_local_company)) return CommandCost(); if (company != INVALID_COMPANY && company != _local_company) return CommandCost(); diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp index c0d78028bd..001afde1d4 100644 --- a/src/intro_gui.cpp +++ b/src/intro_gui.cpp @@ -113,11 +113,9 @@ struct SelectGameWindow : public Window { virtual void OnClick(Point pt, int widget, int click_count) { -#ifdef ENABLE_NETWORK /* Do not create a network server when you (just) have closed one of the game * creation/load windows for the network server. */ if (IsInsideMM(widget, WID_SGI_GENERATE_GAME, WID_SGI_EDIT_SCENARIO + 1)) _is_network_server = false; -#endif /* ENABLE_NETWORK */ switch (widget) { case WID_SGI_GENERATE_GAME: diff --git a/src/lang/english.txt b/src/lang/english.txt index 45bbbc0bfa..3661e74c30 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2139,7 +2139,7 @@ STR_NETWORK_CHAT_ALL :[All] {RAW_STRI STR_NETWORK_CHAT_OSKTITLE :{BLACK}Enter text for network chat # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}No network devices found or compiled without ENABLE_NETWORK +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}No network devices found STR_NETWORK_ERROR_NOSERVER :{WHITE}Could not find any network games STR_NETWORK_ERROR_NOCONNECTION :{WHITE}The server didn't answer the request STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Could not connect due to NewGRF mismatch diff --git a/src/main_gui.cpp b/src/main_gui.cpp index cdd3831576..7ab9bebb16 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -53,7 +53,6 @@ static int _rename_what = -1; void CcGiveMoney(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2) { -#ifdef ENABLE_NETWORK if (result.Failed() || !_settings_game.economy.give_money) return; /* Inform the company of the action of one of its clients (controllers). */ @@ -66,25 +65,22 @@ void CcGiveMoney(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2 } else { NetworkServerSendChat(NETWORK_ACTION_GIVE_MONEY, DESTTYPE_TEAM, p2, msg, CLIENT_ID_SERVER, p1); } -#endif /* ENABLE_NETWORK */ } void HandleOnEditText(const char *str) { switch (_rename_what) { -#ifdef ENABLE_NETWORK - case 3: { // Give money, you can only give money in excess of loan - const Company *c = Company::GetIfValid(_local_company); - if (c == NULL) break; - Money money = min(c->money - c->current_loan, (Money)(atoi(str) / _currency->rate)); + case 3: { // Give money, you can only give money in excess of loan + const Company *c = Company::GetIfValid(_local_company); + if (c == NULL) break; + Money money = min(c->money - c->current_loan, (Money)(atoi(str) / _currency->rate)); - uint32 money_c = Clamp(ClampToI32(money), 0, 20000000); // Clamp between 20 million and 0 + uint32 money_c = Clamp(ClampToI32(money), 0, 20000000); // Clamp between 20 million and 0 - /* Give 'id' the money, and subtract it from ourself */ - DoCommandP(0, money_c, _rename_id, CMD_GIVE_MONEY | CMD_MSG(STR_ERROR_INSUFFICIENT_FUNDS), CcGiveMoney, str); - break; - } -#endif /* ENABLE_NETWORK */ + /* Give 'id' the money, and subtract it from ourself */ + DoCommandP(0, money_c, _rename_id, CMD_GIVE_MONEY | CMD_MSG(STR_ERROR_INSUFFICIENT_FUNDS), CcGiveMoney, str); + break; + } default: NOT_REACHED(); } @@ -124,14 +120,12 @@ void CcPlaySound_EXPLOSION(const CommandCost &result, TileIndex tile, uint32 p1, if (result.Succeeded() && _settings_client.sound.confirm) SndPlayTileFx(SND_12_EXPLOSION, tile); } -#ifdef ENABLE_NETWORK void ShowNetworkGiveMoneyWindow(CompanyID company) { _rename_id = company; _rename_what = 3; ShowQueryString(STR_EMPTY, STR_NETWORK_GIVE_MONEY_CAPTION, 30, NULL, CS_NUMERAL, QSF_NONE); } -#endif /* ENABLE_NETWORK */ /** @@ -397,7 +391,6 @@ struct MainWindow : Window ResetRestoreAllTransparency(); break; -#ifdef ENABLE_NETWORK case GHK_CHAT: // smart chat; send to team if any, otherwise to all if (_networking) { const NetworkClientInfo *cio = NetworkClientInfo::GetByClientID(_network_own_client_id); @@ -425,7 +418,6 @@ struct MainWindow : Window ShowNetworkChatQueryWindow(DESTTYPE_CLIENT, CLIENT_ID_SERVER); } break; -#endif default: return ES_NOT_HANDLED; } @@ -516,12 +508,10 @@ static Hotkey global_hotkeys[] = { Hotkey('8' | WKC_CTRL | WKC_SHIFT, "invisibility_catenary", GHK_TOGGLE_INVISIBILITY + 7), Hotkey('X' | WKC_CTRL, "transparency_toolbar", GHK_TRANSPARENCY_TOOLBAR), Hotkey('X', "toggle_transparency", GHK_TRANSPARANCY), -#ifdef ENABLE_NETWORK Hotkey(_ghk_chat_keys, "chat", GHK_CHAT), Hotkey(_ghk_chat_all_keys, "chat_all", GHK_CHAT_ALL), Hotkey(_ghk_chat_company_keys, "chat_company", GHK_CHAT_COMPANY), Hotkey(_ghk_chat_server_keys, "chat_server", GHK_CHAT_SERVER), -#endif HOTKEY_LIST_END }; HotkeyList MainWindow::hotkeys("global", global_hotkeys); diff --git a/src/misc.cpp b/src/misc.cpp index 4e3086fcea..3d09f26f26 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -111,9 +111,7 @@ void InitializeGame(uint size_x, uint size_y, bool reset_date, bool reset_settin InitializeCheats(); InitTextEffects(); -#ifdef ENABLE_NETWORK NetworkInitChatMessage(); -#endif /* ENABLE_NETWORK */ InitializeAnimatedTiles(); InitializeEconomy(); diff --git a/src/misc_cmd.cpp b/src/misc_cmd.cpp index e7da13c7aa..09fbc78c6b 100644 --- a/src/misc_cmd.cpp +++ b/src/misc_cmd.cpp @@ -154,12 +154,10 @@ CommandCost CmdPause(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, case PM_PAUSED_GAME_SCRIPT: break; -#ifdef ENABLE_NETWORK case PM_PAUSED_JOIN: case PM_PAUSED_ACTIVE_CLIENTS: if (!_networking) return CMD_ERROR; break; -#endif /* ENABLE_NETWORK */ default: return CMD_ERROR; } @@ -172,9 +170,7 @@ CommandCost CmdPause(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, AskUnsafeUnpauseCallback ); } else { -#ifdef ENABLE_NETWORK PauseMode prev_mode = _pause_mode; -#endif /* ENABLE_NETWORK */ if (p2 == 0) { _pause_mode = _pause_mode & ~p1; @@ -182,9 +178,7 @@ CommandCost CmdPause(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, _pause_mode = _pause_mode | p1; } -#ifdef ENABLE_NETWORK NetworkHandlePauseChange(prev_mode, (PauseMode)p1); -#endif /* ENABLE_NETWORK */ } SetWindowDirty(WC_STATUS_BAR, 0); diff --git a/src/network/core/address.cpp b/src/network/core/address.cpp index 62af3a40bf..9522297768 100644 --- a/src/network/core/address.cpp +++ b/src/network/core/address.cpp @@ -11,8 +11,6 @@ #include "../../stdafx.h" -#ifdef ENABLE_NETWORK - #include "address.h" #include "../../debug.h" @@ -433,5 +431,3 @@ void NetworkAddress::Listen(int socktype, SocketList *sockets) default: return "unsupported"; } } - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/core/address.h b/src/network/core/address.h index 9fd40eaeef..b5c78c79b7 100644 --- a/src/network/core/address.h +++ b/src/network/core/address.h @@ -17,8 +17,6 @@ #include "../../string_func.h" #include "../../core/smallmap_type.hpp" -#ifdef ENABLE_NETWORK - class NetworkAddress; typedef SmallVector NetworkAddressList; ///< Type for a list of addresses. typedef SmallMap SocketList; ///< Type for a mapping between address and socket. @@ -192,5 +190,4 @@ public: static const char *AddressFamilyAsString(int family); }; -#endif /* ENABLE_NETWORK */ #endif /* NETWORK_CORE_ADDRESS_H */ diff --git a/src/network/core/core.cpp b/src/network/core/core.cpp index e5f1df7214..1726e4176e 100644 --- a/src/network/core/core.cpp +++ b/src/network/core/core.cpp @@ -11,8 +11,6 @@ * @file core.cpp Functions used to initialize/shut down the core network */ -#ifdef ENABLE_NETWORK - #include "../../stdafx.h" #include "../../debug.h" #include "os_abstraction.h" @@ -80,5 +78,3 @@ void NetworkSocketHandler::ReceiveGRFIdentifier(Packet *p, GRFIdentifier *grf) grf->md5sum[j] = p->Recv_uint8(); } } - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/core/core.h b/src/network/core/core.h index a250dbb081..1536c08a7a 100644 --- a/src/network/core/core.h +++ b/src/network/core/core.h @@ -17,8 +17,6 @@ #include "../../newgrf_config.h" #include "config.h" -#ifdef ENABLE_NETWORK - bool NetworkCoreInitialize(); void NetworkCoreShutdown(); @@ -80,6 +78,4 @@ public: void SendCompanyInformation(Packet *p, const struct Company *c, const struct NetworkCompanyStats *stats, uint max_len = NETWORK_COMPANY_NAME_LENGTH); }; -#endif /* ENABLE_NETWORK */ - #endif /* NETWORK_CORE_CORE_H */ diff --git a/src/network/core/game.h b/src/network/core/game.h index a9da29118e..57eba5812f 100644 --- a/src/network/core/game.h +++ b/src/network/core/game.h @@ -19,8 +19,6 @@ #include "../../newgrf_config.h" #include "../../date_type.h" -#ifdef ENABLE_NETWORK - /** * The game information that is not generated on-the-fly and has to * be sent to the clients. @@ -58,6 +56,4 @@ struct NetworkGameInfo : NetworkServerGameInfo { const char * GetNetworkRevisionString(); -#endif /* ENABLE_NETWORK */ - #endif /* NETWORK_CORE_GAME_H */ diff --git a/src/network/core/host.cpp b/src/network/core/host.cpp index c2faf4c8b5..05ad84153b 100644 --- a/src/network/core/host.cpp +++ b/src/network/core/host.cpp @@ -9,8 +9,6 @@ /** @file host.cpp Functions related to getting host specific data (IPs). */ -#ifdef ENABLE_NETWORK - #include "../../stdafx.h" #include "../../debug.h" #include "address.h" @@ -207,5 +205,3 @@ void NetworkFindBroadcastIPs(NetworkAddressList *broadcast) DEBUG(net, 3, "%d) %s", i++, addr->GetHostname()); } } - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/core/os_abstraction.h b/src/network/core/os_abstraction.h index 16c85d5660..ef5c0f2ab4 100644 --- a/src/network/core/os_abstraction.h +++ b/src/network/core/os_abstraction.h @@ -18,8 +18,6 @@ /* Include standard stuff per OS */ -#ifdef ENABLE_NETWORK - /* Windows stuff */ #if defined(_WIN32) #include @@ -172,6 +170,4 @@ static inline bool SetNoDelay(SOCKET d) assert_compile(sizeof(in_addr) == 4); ///< IPv4 addresses should be 4 bytes. assert_compile(sizeof(in6_addr) == 16); ///< IPv6 addresses should be 16 bytes. -#endif /* ENABLE_NETWORK */ - #endif /* NETWORK_CORE_OS_ABSTRACTION_H */ diff --git a/src/network/core/packet.cpp b/src/network/core/packet.cpp index 7548132e0b..8cecd9bd2f 100644 --- a/src/network/core/packet.cpp +++ b/src/network/core/packet.cpp @@ -11,8 +11,6 @@ * @file packet.cpp Basic functions to create, fill and read packets. */ -#ifdef ENABLE_NETWORK - #include "../../stdafx.h" #include "../../string_func.h" @@ -310,5 +308,3 @@ void Packet::Recv_string(char *buffer, size_t size, StringValidationSettings set str_validate(bufp, last, settings); } - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/core/packet.h b/src/network/core/packet.h index 7f344d0179..7b4bf26f37 100644 --- a/src/network/core/packet.h +++ b/src/network/core/packet.h @@ -18,8 +18,6 @@ #include "core.h" #include "../../string_type.h" -#ifdef ENABLE_NETWORK - typedef uint16 PacketSize; ///< Size of the whole packet. typedef uint8 PacketType; ///< Identifier for the packet @@ -87,6 +85,4 @@ public: void Recv_string(char *buffer, size_t size, StringValidationSettings settings = SVS_REPLACE_WITH_QUESTION_MARK); }; -#endif /* ENABLE_NETWORK */ - #endif /* NETWORK_CORE_PACKET_H */ diff --git a/src/network/core/tcp.cpp b/src/network/core/tcp.cpp index a2f789c096..33b61688d0 100644 --- a/src/network/core/tcp.cpp +++ b/src/network/core/tcp.cpp @@ -11,8 +11,6 @@ * @file tcp.cpp Basic functions to receive and send TCP packets. */ -#ifdef ENABLE_NETWORK - #include "../../stdafx.h" #include "../../debug.h" @@ -243,5 +241,3 @@ bool NetworkTCPSocketHandler::CanSendReceive() this->writable = !!FD_ISSET(this->sock, &write_fd); return FD_ISSET(this->sock, &read_fd) != 0; } - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/core/tcp.h b/src/network/core/tcp.h index b736189b4e..00642c2dd3 100644 --- a/src/network/core/tcp.h +++ b/src/network/core/tcp.h @@ -17,8 +17,6 @@ #include "address.h" #include "packet.h" -#ifdef ENABLE_NETWORK - /** The states of sending the packets. */ enum SendPacketsState { SPS_CLOSED, ///< The connection got closed. @@ -99,6 +97,4 @@ public: static void KillAll(); }; -#endif /* ENABLE_NETWORK */ - #endif /* NETWORK_CORE_TCP_H */ diff --git a/src/network/core/tcp_admin.cpp b/src/network/core/tcp_admin.cpp index 284ceda9b1..226bae0245 100644 --- a/src/network/core/tcp_admin.cpp +++ b/src/network/core/tcp_admin.cpp @@ -11,8 +11,6 @@ * @file tcp_admin.cpp Basic functions to receive and send TCP packets to and from the admin network. */ -#ifdef ENABLE_NETWORK - #include "../../stdafx.h" #include "../network_internal.h" @@ -172,5 +170,3 @@ NetworkRecvStatus NetworkAdminSocketHandler::Receive_SERVER_CMD_NAMES(Packet *p) NetworkRecvStatus NetworkAdminSocketHandler::Receive_SERVER_CMD_LOGGING(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_SERVER_CMD_LOGGING); } NetworkRecvStatus NetworkAdminSocketHandler::Receive_SERVER_RCON_END(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_SERVER_RCON_END); } NetworkRecvStatus NetworkAdminSocketHandler::Receive_SERVER_PONG(Packet *p) { return this->ReceiveInvalidPacket(ADMIN_PACKET_SERVER_PONG); } - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/core/tcp_admin.h b/src/network/core/tcp_admin.h index e141a191a8..497c24b48a 100644 --- a/src/network/core/tcp_admin.h +++ b/src/network/core/tcp_admin.h @@ -19,8 +19,6 @@ #include "../network_type.h" #include "../../core/pool_type.hpp" -#ifdef ENABLE_NETWORK - /** * Enum with types of TCP packets specific to the admin network. * This protocol may only be extended to ensure stability. @@ -500,6 +498,4 @@ public: } }; -#endif /* ENABLE_NETWORK */ - #endif /* NETWORK_CORE_TCP_ADMIN_H */ diff --git a/src/network/core/tcp_connect.cpp b/src/network/core/tcp_connect.cpp index 2dc7898824..95f9662cd6 100644 --- a/src/network/core/tcp_connect.cpp +++ b/src/network/core/tcp_connect.cpp @@ -11,8 +11,6 @@ * @file tcp_connect.cpp Basic functions to create connections without blocking. */ -#ifdef ENABLE_NETWORK - #include "../../stdafx.h" #include "../../thread/thread.h" @@ -97,5 +95,3 @@ void TCPConnecter::Connect() { for (TCPConnecter **iter = _tcp_connecters.Begin(); iter != _tcp_connecters.End(); iter++) (*iter)->killed = true; } - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/core/tcp_content.cpp b/src/network/core/tcp_content.cpp index fc22c4491f..8257a72526 100644 --- a/src/network/core/tcp_content.cpp +++ b/src/network/core/tcp_content.cpp @@ -11,8 +11,6 @@ * @file tcp_content.cpp Basic functions to receive and send Content packets. */ -#ifdef ENABLE_NETWORK - #include "../../stdafx.h" #ifndef OPENTTD_MSU #include "../../textfile_gui.h" @@ -266,5 +264,3 @@ Subdirectory GetContentInfoSubDir(ContentType type) } } #endif /* OPENTTD_MSU */ - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/core/tcp_content.h b/src/network/core/tcp_content.h index a506439da9..c359fb6679 100644 --- a/src/network/core/tcp_content.h +++ b/src/network/core/tcp_content.h @@ -19,8 +19,6 @@ #include "packet.h" #include "../../debug.h" -#ifdef ENABLE_NETWORK - /** The values in the enum are important; they are used as database 'keys' */ enum ContentType { CONTENT_TYPE_BEGIN = 1, ///< Helper to mark the begin of the types @@ -213,6 +211,4 @@ public: Subdirectory GetContentInfoSubDir(ContentType type); #endif /* OPENTTD_MSU */ -#endif /* ENABLE_NETWORK */ - #endif /* NETWORK_CORE_TCP_CONTENT_H */ diff --git a/src/network/core/tcp_game.cpp b/src/network/core/tcp_game.cpp index caa378fc4c..2d8a74a118 100644 --- a/src/network/core/tcp_game.cpp +++ b/src/network/core/tcp_game.cpp @@ -11,8 +11,6 @@ * @file tcp_game.cpp Basic functions to receive and send TCP packets for game purposes. */ -#ifdef ENABLE_NETWORK - #include "../../stdafx.h" #include "../network.h" @@ -199,5 +197,3 @@ NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_MOVE(Packet *p) { ret NetworkRecvStatus NetworkGameSocketHandler::Receive_CLIENT_MOVE(Packet *p) { return this->ReceiveInvalidPacket(PACKET_CLIENT_MOVE); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_COMPANY_UPDATE(Packet *p) { return this->ReceiveInvalidPacket(PACKET_SERVER_COMPANY_UPDATE); } NetworkRecvStatus NetworkGameSocketHandler::Receive_SERVER_CONFIG_UPDATE(Packet *p) { return this->ReceiveInvalidPacket(PACKET_SERVER_CONFIG_UPDATE); } - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/core/tcp_game.h b/src/network/core/tcp_game.h index 5c6cb5c34d..c41ad4dc16 100644 --- a/src/network/core/tcp_game.h +++ b/src/network/core/tcp_game.h @@ -19,8 +19,6 @@ #include "../network_type.h" #include "../../core/pool_type.hpp" -#ifdef ENABLE_NETWORK - /** * Enum with all types of TCP packets. * For the exact meaning, look at #NetworkGameSocketHandler. @@ -558,6 +556,4 @@ public: void SendCommand(Packet *p, const CommandPacket *cp); }; -#endif /* ENABLE_NETWORK */ - #endif /* NETWORK_CORE_TCP_GAME_H */ diff --git a/src/network/core/tcp_http.cpp b/src/network/core/tcp_http.cpp index 4cd92e5fe2..3a40e3eec2 100644 --- a/src/network/core/tcp_http.cpp +++ b/src/network/core/tcp_http.cpp @@ -11,8 +11,6 @@ * @file tcp_http.cpp Basic functions to receive and send HTTP TCP packets. */ -#ifdef ENABLE_NETWORK - #include "../../stdafx.h" #include "../../debug.h" #include "../../rev.h" @@ -331,5 +329,3 @@ int NetworkHTTPSocketHandler::Receive() iter++; } } - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/core/tcp_http.h b/src/network/core/tcp_http.h index 36520f1364..ec969264b1 100644 --- a/src/network/core/tcp_http.h +++ b/src/network/core/tcp_http.h @@ -16,8 +16,6 @@ #include "tcp.h" -#ifdef ENABLE_NETWORK - /** Callback for when the HTTP handler has something to tell us. */ struct HTTPCallback { /** @@ -122,6 +120,4 @@ public: } }; -#endif /* ENABLE_NETWORK */ - #endif /* NETWORK_CORE_TCP_HTTP_H */ diff --git a/src/network/core/tcp_listen.h b/src/network/core/tcp_listen.h index 8cd8257b25..21bcaea3c0 100644 --- a/src/network/core/tcp_listen.h +++ b/src/network/core/tcp_listen.h @@ -20,8 +20,6 @@ #include "../../debug.h" #include "table/strings.h" -#ifdef ENABLE_NETWORK - /** * Template for TCP listeners. * @param Tsocket The class we create sockets for. @@ -173,6 +171,4 @@ public: template SocketList TCPListenHandler::sockets; -#endif /* ENABLE_NETWORK */ - #endif /* NETWORK_CORE_TCP_LISTEN_H */ diff --git a/src/network/core/udp.cpp b/src/network/core/udp.cpp index 1f34d15b0c..4a2f773682 100644 --- a/src/network/core/udp.cpp +++ b/src/network/core/udp.cpp @@ -11,8 +11,6 @@ * @file core/udp.cpp Basic functions to receive and send UDP packets. */ -#ifdef ENABLE_NETWORK - #include "../../stdafx.h" #include "../../date_func.h" #include "../../debug.h" @@ -347,5 +345,3 @@ void NetworkUDPSocketHandler::Receive_SERVER_UNREGISTER(Packet *p, NetworkAddres void NetworkUDPSocketHandler::Receive_CLIENT_GET_NEWGRFS(Packet *p, NetworkAddress *client_addr) { this->ReceiveInvalidPacket(PACKET_UDP_CLIENT_GET_NEWGRFS, client_addr); } void NetworkUDPSocketHandler::Receive_SERVER_NEWGRFS(Packet *p, NetworkAddress *client_addr) { this->ReceiveInvalidPacket(PACKET_UDP_SERVER_NEWGRFS, client_addr); } void NetworkUDPSocketHandler::Receive_MASTER_SESSION_KEY(Packet *p, NetworkAddress *client_addr) { this->ReceiveInvalidPacket(PACKET_UDP_MASTER_SESSION_KEY, client_addr); } - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/core/udp.h b/src/network/core/udp.h index 9aa0c9dc49..2f77a94df2 100644 --- a/src/network/core/udp.h +++ b/src/network/core/udp.h @@ -18,8 +18,6 @@ #include "game.h" #include "packet.h" -#ifdef ENABLE_NETWORK - /** Enum with all types of UDP packets. The order MUST not be changed **/ enum PacketUDPType { PACKET_UDP_CLIENT_FIND_SERVER, ///< Queries a game server for game information @@ -246,6 +244,4 @@ public: void ReceiveNetworkGameInfo(Packet *p, NetworkGameInfo *info); }; -#endif /* ENABLE_NETWORK */ - #endif /* NETWORK_CORE_UDP_H */ diff --git a/src/network/network.cpp b/src/network/network.cpp index 4727e33443..ea770e5001 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -11,8 +11,6 @@ #include "../stdafx.h" -#ifdef ENABLE_NETWORK - #include "../strings_func.h" #include "../command_func.h" #include "../date_func.h" @@ -1172,5 +1170,3 @@ bool IsNetworkCompatibleVersion(const char *other) const char *hash2 = ExtractNetworkRevisionHash(other); return hash1 && hash2 && (strncmp(hash1, hash2, GITHASH_SUFFIX_LEN) == 0); } - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/network.h b/src/network/network.h index 26f94482ec..9f8e3b790b 100644 --- a/src/network/network.h +++ b/src/network/network.h @@ -12,9 +12,6 @@ #ifndef NETWORK_H #define NETWORK_H - -#ifdef ENABLE_NETWORK - void NetworkStartUp(); void NetworkShutDown(); void NetworkDrawChatMessage(); @@ -26,19 +23,4 @@ extern bool _network_available; ///< is network mode available? extern bool _network_dedicated; ///< are we a dedicated server? extern bool _is_network_server; ///< Does this client wants to be a network-server? -#else /* ENABLE_NETWORK */ -/* Network function stubs when networking is disabled */ - -static inline void NetworkStartUp() {} -static inline void NetworkShutDown() {} -static inline void NetworkDrawChatMessage() {} -static inline bool HasClients() { return false; } - -#define _networking 0 -#define _network_server 0 -#define _network_available 0 -#define _network_dedicated 0 -#define _is_network_server 0 - -#endif /* ENABLE_NETWORK */ #endif /* NETWORK_H */ diff --git a/src/network/network_admin.cpp b/src/network/network_admin.cpp index f70f3d1a51..73ad0e192a 100644 --- a/src/network/network_admin.cpp +++ b/src/network/network_admin.cpp @@ -9,8 +9,6 @@ /** @file network_admin.cpp Server part of the admin network protocol. */ -#ifdef ENABLE_NETWORK - #include "../stdafx.h" #include "../strings_func.h" #include "../date_func.h" @@ -1045,5 +1043,3 @@ void NetworkAdminUpdate(AdminUpdateFrequency freq) } } } - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/network_admin.h b/src/network/network_admin.h index cb478fc7e7..6d06d5b9ff 100644 --- a/src/network/network_admin.h +++ b/src/network/network_admin.h @@ -12,8 +12,6 @@ #ifndef NETWORK_ADMIN_H #define NETWORK_ADMIN_H -#ifdef ENABLE_NETWORK - #include "network_internal.h" #include "core/tcp_listen.h" #include "core/tcp_admin.h" @@ -124,5 +122,4 @@ void NetworkAdminConsole(const char *origin, const char *string); void NetworkAdminGameScript(const char *json); void NetworkAdminCmdLogging(const NetworkClientSocket *owner, const CommandPacket *cp); -#endif /* ENABLE_NETWORK */ #endif /* NETWORK_ADMIN_H */ diff --git a/src/network/network_base.h b/src/network/network_base.h index 1644b3558a..817d0e4c89 100644 --- a/src/network/network_base.h +++ b/src/network/network_base.h @@ -12,8 +12,6 @@ #ifndef NETWORK_BASE_H #define NETWORK_BASE_H -#ifdef ENABLE_NETWORK - #include "network_type.h" #include "core/address.h" #include "../core/pool_type.hpp" @@ -54,5 +52,4 @@ struct NetworkClientInfo : NetworkClientInfoPool::PoolItem<&_networkclientinfo_p */ #define FOR_ALL_CLIENT_INFOS(var) FOR_ALL_CLIENT_INFOS_FROM(var, 0) -#endif /* ENABLE_NETWORK */ #endif /* NETWORK_BASE_H */ diff --git a/src/network/network_chat_gui.cpp b/src/network/network_chat_gui.cpp index 68e1489874..94e2898852 100644 --- a/src/network/network_chat_gui.cpp +++ b/src/network/network_chat_gui.cpp @@ -11,8 +11,6 @@ #include /* va_list */ -#ifdef ENABLE_NETWORK - #include "../stdafx.h" #include "../strings_func.h" #include "../blitter/factory.hpp" @@ -562,5 +560,3 @@ void ShowNetworkChatQueryWindow(DestType type, int dest) DeleteWindowByClass(WC_SEND_NETWORK_MSG); new NetworkChatWindow(&_chat_window_desc, type, dest); } - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 62db6a5552..0bb42c86ff 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -9,8 +9,6 @@ /** @file network_client.cpp Client part of the network protocol. */ -#ifdef ENABLE_NETWORK - #include "../stdafx.h" #include "network_gui.h" #include "../saveload/saveload.h" @@ -1320,5 +1318,3 @@ bool NetworkMaxSpectatorsReached() { return NetworkSpectatorCount() >= (_network_server ? _settings_client.network.max_spectators : _network_server_max_spectators); } - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/network_client.h b/src/network/network_client.h index 23878b5067..5e9988d9aa 100644 --- a/src/network/network_client.h +++ b/src/network/network_client.h @@ -12,8 +12,6 @@ #ifndef NETWORK_CLIENT_H #define NETWORK_CLIENT_H -#ifdef ENABLE_NETWORK - #include "network_internal.h" /** Class for handling the client side of the game connection. */ @@ -118,6 +116,4 @@ extern CompanyID _network_join_as; extern const char *_network_join_server_password; extern const char *_network_join_company_password; -#endif /* ENABLE_NETWORK */ - #endif /* NETWORK_CLIENT_H */ diff --git a/src/network/network_command.cpp b/src/network/network_command.cpp index bc08bc5f14..51317288e7 100644 --- a/src/network/network_command.cpp +++ b/src/network/network_command.cpp @@ -9,8 +9,6 @@ /** @file network_command.cpp Command handling over network connections. */ -#ifdef ENABLE_NETWORK - #include "../stdafx.h" #include "network_admin.h" #include "network_client.h" @@ -344,5 +342,3 @@ void NetworkGameSocketHandler::SendCommand(Packet *p, const CommandPacket *cp) } p->Send_uint8 (callback); } - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 551abb4420..1a80c5d99d 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -9,8 +9,6 @@ /** @file network_content.cpp Content sending/receiving part of the network protocol. */ -#if defined(ENABLE_NETWORK) - #include "../stdafx.h" #include "../rev.h" #include "../ai/ai.hpp" @@ -1090,5 +1088,3 @@ void ClientNetworkContentSocketHandler::OnDownloadComplete(ContentID cid) if (iter != this->callbacks.End() && *iter == cb) iter++; } } - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/network_content.h b/src/network/network_content.h index 25788065fd..b1e9dd66b6 100644 --- a/src/network/network_content.h +++ b/src/network/network_content.h @@ -15,8 +15,6 @@ #include "core/tcp_content.h" #include "core/tcp_http.h" -#if defined(ENABLE_NETWORK) - /** Vector with content info */ typedef SmallVector ContentVector; /** Vector with constant content info */ @@ -153,8 +151,4 @@ void ShowNetworkContentListWindow(ContentVector *cv = NULL, ContentType type1 = void ShowMissingContentWindow(const struct GRFConfig *list); -#else -static inline void ShowNetworkContentListWindow() {} -#endif /* ENABLE_NETWORK */ - #endif /* NETWORK_CONTENT_H */ diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 877dea9786..230a62134f 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -9,7 +9,6 @@ /** @file network_content_gui.cpp Implementation of the Network Content related GUIs. */ -#if defined(ENABLE_NETWORK) #include "../stdafx.h" #include "../strings_func.h" #include "../gfx_func.h" @@ -1168,5 +1167,3 @@ void ShowNetworkContentListWindow(ContentVector *cv, ContentType type1, ContentT } #endif /* WITH_ZLIB */ } - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/network_func.h b/src/network/network_func.h index 4f1525b5a4..9adbb6e60f 100644 --- a/src/network/network_func.h +++ b/src/network/network_func.h @@ -26,8 +26,6 @@ #include "../openttd.h" #include "../company_type.h" -#ifdef ENABLE_NETWORK - extern NetworkServerGameInfo _network_game_info; extern NetworkCompanyState *_network_company_states; @@ -90,5 +88,4 @@ void NetworkChatMessageLoop(); void NetworkAfterNewGRFScan(); -#endif /* ENABLE_NETWORK */ #endif /* NETWORK_FUNC_H */ diff --git a/src/network/network_gamelist.cpp b/src/network/network_gamelist.cpp index e5d80630e1..6c65c52c98 100644 --- a/src/network/network_gamelist.cpp +++ b/src/network/network_gamelist.cpp @@ -12,8 +12,6 @@ * Also, it handles the request to a server for data about the server */ -#ifdef ENABLE_NETWORK - #include "../stdafx.h" #include "../debug.h" #include "../window_func.h" @@ -206,5 +204,3 @@ void NetworkAfterNewGRFScan() InvalidateWindowClassesData(WC_NETWORK_WINDOW); } - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 93cd3d9733..cb64261423 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -9,7 +9,6 @@ /** @file network_gui.cpp Implementation of the Network related GUIs. */ -#ifdef ENABLE_NETWORK #include "../stdafx.h" #include "../strings_func.h" #include "../date_func.h" @@ -2241,5 +2240,3 @@ void ShowNetworkCompanyPasswordWindow(Window *parent) new NetworkCompanyPasswordWindow(&_network_company_password_window_desc, parent); } - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/network_gui.h b/src/network/network_gui.h index a196c75e9f..d9dfb57dd6 100644 --- a/src/network/network_gui.h +++ b/src/network/network_gui.h @@ -17,8 +17,6 @@ #include "../window_type.h" #include "network_type.h" -#ifdef ENABLE_NETWORK - void ShowNetworkNeedPassword(NetworkPasswordType npt); void ShowNetworkGiveMoneyWindow(CompanyID company); void ShowNetworkChatQueryWindow(DestType type, int dest); @@ -42,14 +40,4 @@ struct NetworkCompanyInfo : NetworkCompanyStats { NetworkCompanyInfo *GetLobbyCompanyInfo(CompanyID company); -#else /* ENABLE_NETWORK */ -/* Network function stubs when networking is disabled */ - -static inline void ShowNetworkChatQueryWindow(byte desttype, int dest) {} -static inline void ShowClientList() {} -static inline void ShowNetworkGameWindow() {} -static inline void ShowNetworkCompanyPasswordWindow(Window *parent) {} - -#endif /* ENABLE_NETWORK */ - #endif /* NETWORK_GUI_H */ diff --git a/src/network/network_internal.h b/src/network/network_internal.h index ed9a8de6f6..2498d50d4f 100644 --- a/src/network/network_internal.h +++ b/src/network/network_internal.h @@ -17,8 +17,6 @@ #include "../command_type.h" -#ifdef ENABLE_NETWORK - #ifdef RANDOM_DEBUG /** * If this line is enable, every frame will have a sync test @@ -171,5 +169,4 @@ StringID GetNetworkErrorMsg(NetworkErrorCode err); bool NetworkFindName(char *new_name, const char *last); const char *GenerateCompanyPasswordHash(const char *password, const char *password_server_id, uint32 password_game_seed); -#endif /* ENABLE_NETWORK */ #endif /* NETWORK_INTERNAL_H */ diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 05fb27fc87..bd78acf92d 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -9,8 +9,6 @@ /** @file network_server.cpp Server part of the network protocol. */ -#ifdef ENABLE_NETWORK - #include "../stdafx.h" #include "../strings_func.h" #include "../date_func.h" @@ -2206,5 +2204,3 @@ void NetworkServerNewCompany(const Company *c, NetworkClientInfo *ci) NetworkServerSendChat(NETWORK_ACTION_COMPANY_NEW, DESTTYPE_BROADCAST, 0, "", ci->client_id, c->index + 1); } } - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/network_server.h b/src/network/network_server.h index a52b2c9366..1cd8feb677 100644 --- a/src/network/network_server.h +++ b/src/network/network_server.h @@ -12,8 +12,6 @@ #ifndef NETWORK_SERVER_H #define NETWORK_SERVER_H -#ifdef ENABLE_NETWORK - #include "network_internal.h" #include "core/tcp_listen.h" #include "../thread/thread.h" @@ -138,12 +136,4 @@ void NetworkServerUpdateCompanyPassworded(CompanyID company_id, bool passworded) */ #define FOR_ALL_CLIENT_SOCKETS(var) FOR_ALL_CLIENT_SOCKETS_FROM(var, 0) -#else /* ENABLE_NETWORK */ -/* Network function stubs when networking is disabled */ - -static inline void NetworkServerMonthlyLoop() {} -static inline void NetworkServerYearlyLoop() {} - -#endif /* ENABLE_NETWORK */ - #endif /* NETWORK_SERVER_H */ diff --git a/src/network/network_type.h b/src/network/network_type.h index 3c390c29be..9b598716f1 100644 --- a/src/network/network_type.h +++ b/src/network/network_type.h @@ -14,8 +14,6 @@ #include "core/game.h" -#ifdef ENABLE_NETWORK - /** How many clients can we have */ static const uint MAX_CLIENTS = 255; @@ -130,5 +128,4 @@ enum NetworkErrorCode { NETWORK_ERROR_END, }; -#endif /* ENABLE_NETWORK */ #endif /* NETWORK_TYPE_H */ diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp index 3fd0dd4853..289b07520a 100644 --- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -14,8 +14,6 @@ * communication before the game is being joined. */ -#ifdef ENABLE_NETWORK - #include "../stdafx.h" #include "../date_func.h" #include "../map_func.h" @@ -714,5 +712,3 @@ void NetworkBackgroundUDPLoop() _network_udp_mutex->EndCritical(); } - -#endif /* ENABLE_NETWORK */ diff --git a/src/network/network_udp.h b/src/network/network_udp.h index 3dfd076720..12de30bca3 100644 --- a/src/network/network_udp.h +++ b/src/network/network_udp.h @@ -12,8 +12,6 @@ #ifndef NETWORK_UDP_H #define NETWORK_UDP_H -#ifdef ENABLE_NETWORK - #include "core/address.h" void NetworkUDPInitialize(); @@ -25,6 +23,4 @@ void NetworkUDPRemoveAdvertise(bool blocking); void NetworkUDPClose(); void NetworkBackgroundUDPLoop(); -#endif /* ENABLE_NETWORK */ - #endif /* NETWORK_UDP_H */ diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index 593851e288..f19c79c9a8 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -757,9 +757,7 @@ void DoScanNewGRFFiles(void *callback) free(to_sort); -#ifdef ENABLE_NETWORK NetworkAfterNewGRFScan(); -#endif } _modal_progress_work_mutex->EndCritical(); @@ -826,8 +824,6 @@ const GRFConfig *FindGRFConfig(uint32 grfid, FindGRFConfigMode mode, const uint8 return best; } -#ifdef ENABLE_NETWORK - /** Structure for UnknownGRFs; this is a lightweight variant of GRFConfig */ struct UnknownGRF : public GRFIdentifier { UnknownGRF *next; ///< The next unknown GRF. @@ -877,9 +873,6 @@ GRFTextWrapper *FindUnknownGRFName(uint32 grfid, uint8 *md5sum, bool create) return grf->name; } -#endif /* ENABLE_NETWORK */ - - /** * Retrieve a NewGRF from the current config by its grfid. * @param grfid grf to look for. diff --git a/src/newgrf_config.h b/src/newgrf_config.h index dc3b884dd3..4266dd1fdf 100644 --- a/src/newgrf_config.h +++ b/src/newgrf_config.h @@ -229,11 +229,9 @@ char *GRFBuildParamList(char *dst, const GRFConfig *c, const char *last); /* In newgrf_gui.cpp */ void ShowNewGRFSettings(bool editable, bool show_params, bool exec_changes, GRFConfig **config); -#ifdef ENABLE_NETWORK /** For communication about GRFs over the network */ #define UNKNOWN_GRF_NAME_PLACEHOLDER "" GRFTextWrapper *FindUnknownGRFName(uint32 grfid, uint8 *md5sum, bool create); -#endif /* ENABLE_NETWORK */ void UpdateNewGRFScanStatus(uint num, const char *name); bool UpdateNewGRFConfigPalette(int32 p1 = 0); diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 4e66d2e52a..1af2c72461 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -1126,11 +1126,9 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { if (!_network_available) { ShowErrorMessage(STR_NETWORK_ERROR_NOTAVAILABLE, INVALID_STRING_ID, WL_ERROR); } else { -#if defined(ENABLE_NETWORK) this->DeleteChildWindows(WC_QUERY_STRING); // Remove the parameter query window ShowMissingContentWindow(this->actives); -#endif } break; @@ -1543,7 +1541,6 @@ private: } }; -#if defined(ENABLE_NETWORK) /** * Show the content list window with all missing grfs from the given list. * @param list The list of grfs to check for missing / not exactly matching ones. @@ -1565,7 +1562,6 @@ void ShowMissingContentWindow(const GRFConfig *list) } ShowNetworkContentListWindow(cv.Length() == 0 ? NULL : &cv, CONTENT_TYPE_NEWGRF); } -#endif Listing NewGRFWindow::last_sorting = {false, 0}; Filtering NewGRFWindow::last_filtering = {false, 0}; diff --git a/src/openttd.cpp b/src/openttd.cpp index c833583609..b78084145d 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -164,7 +164,6 @@ static void ShowHelp() " -e = Start Editor\n" " -g [savegame] = Start new/save game immediately\n" " -G seed = Set random seed\n" -#if defined(ENABLE_NETWORK) " -n [ip:port#company]= Join network game\n" " -p password = Password to join server\n" " -P password = Password to join company\n" @@ -173,7 +172,6 @@ static void ShowHelp() #if !defined(_WIN32) " -f = Fork into the background (dedicated only)\n" #endif -#endif /* ENABLE_NETWORK */ " -I graphics_set = Force the graphics set (see below)\n" " -S sounds_set = Force the sounds set (see below)\n" " -M music_set = Force the music set (see below)\n" @@ -300,9 +298,7 @@ static void ShutdownGame() /* Uninitialize variables that are allocated dynamically */ GamelogReset(); -#ifdef ENABLE_NETWORK free(_config_file); -#endif LinkGraphSchedule::Clear(); PoolBase::Clean(PT_ALL); @@ -447,13 +443,11 @@ struct AfterNewGRFScan : NewGRFScanCallback { if (startyear != INVALID_YEAR) _settings_newgame.game_creation.starting_year = startyear; if (generation_seed != GENERATE_NEW_SEED) _settings_newgame.game_creation.generation_seed = generation_seed; -#if defined(ENABLE_NETWORK) if (dedicated_host != NULL) { _network_bind_list.Clear(); *_network_bind_list.Append() = stredup(dedicated_host); } if (dedicated_port != 0) _settings_client.network.server_port = dedicated_port; -#endif /* ENABLE_NETWORK */ /* initialize the ingame console */ IConsoleInit(); @@ -463,7 +457,6 @@ struct AfterNewGRFScan : NewGRFScanCallback { /* Make sure _settings is filled with _settings_newgame if we switch to a game directly */ if (_switch_mode != SM_NONE) MakeNewgameSettingsLive(); -#ifdef ENABLE_NETWORK if (_network_available && network_conn != NULL) { const char *port = NULL; const char *company = NULL; @@ -489,7 +482,6 @@ struct AfterNewGRFScan : NewGRFScanCallback { _switch_mode = SM_NONE; NetworkClientConnectGame(NetworkAddress(network_conn, rport), join_as, join_server_password, join_company_password); } -#endif /* ENABLE_NETWORK */ /* After the scan we're not used anymore. */ delete this; @@ -509,7 +501,6 @@ static const OptionData _options[] = { GETOPT_SHORT_VALUE('s'), GETOPT_SHORT_VALUE('v'), GETOPT_SHORT_VALUE('b'), -#if defined(ENABLE_NETWORK) GETOPT_SHORT_OPTVAL('D'), GETOPT_SHORT_OPTVAL('n'), GETOPT_SHORT_VALUE('l'), @@ -518,7 +509,6 @@ static const OptionData _options[] = { #if !defined(_WIN32) GETOPT_SHORT_NOVAL('f'), #endif -#endif /* ENABLE_NETWORK */ GETOPT_SHORT_VALUE('r'), GETOPT_SHORT_VALUE('t'), GETOPT_SHORT_OPTVAL('d'), @@ -551,13 +541,11 @@ int openttd_main(int argc, char *argv[]) /* AfterNewGRFScan sets save_config to true after scanning completed. */ bool save_config = false; AfterNewGRFScan *scanner = new AfterNewGRFScan(&save_config); -#if defined(ENABLE_NETWORK) bool dedicated = false; char *debuglog_conn = NULL; extern bool _dedicated_forks; _dedicated_forks = false; -#endif /* ENABLE_NETWORK */ _game_mode = GM_MENU; _switch_mode = SM_MENU; @@ -576,7 +564,6 @@ int openttd_main(int argc, char *argv[]) case 's': free(sounddriver); sounddriver = stredup(mgo.opt); break; case 'v': free(videodriver); videodriver = stredup(mgo.opt); break; case 'b': free(blitter); blitter = stredup(mgo.opt); break; -#if defined(ENABLE_NETWORK) case 'D': free(musicdriver); free(sounddriver); @@ -611,7 +598,6 @@ int openttd_main(int argc, char *argv[]) case 'P': scanner->join_company_password = mgo.opt; break; -#endif /* ENABLE_NETWORK */ case 'r': ParseResolution(&resolution, mgo.opt); break; case 't': scanner->startyear = atoi(mgo.opt); break; case 'd': { @@ -702,14 +688,12 @@ int openttd_main(int argc, char *argv[]) DeterminePaths(argv[0]); TarScanner::DoScan(TarScanner::BASESET); -#if defined(ENABLE_NETWORK) if (dedicated) DEBUG(net, 0, "Starting dedicated version %s", _openttd_revision); if (_dedicated_forks && !dedicated) _dedicated_forks = false; #if defined(UNIX) /* We must fork here, or we'll end up without some resources we need (like sockets) */ if (_dedicated_forks) DedicatedFork(); -#endif #endif LoadFromConfig(true); @@ -787,7 +771,6 @@ int openttd_main(int argc, char *argv[]) NetworkStartUp(); // initialize network-core -#if defined(ENABLE_NETWORK) if (debuglog_conn != NULL && _network_available) { const char *not_used = NULL; const char *port = NULL; @@ -800,7 +783,6 @@ int openttd_main(int argc, char *argv[]) NetworkStartDebugLog(NetworkAddress(debuglog_conn, rport)); } -#endif /* ENABLE_NETWORK */ if (!HandleBootstrap()) { ShutdownGame(); @@ -903,12 +885,10 @@ exit_normal: delete scanner; -#ifdef ENABLE_NETWORK extern FILE *_log_fd; if (_log_fd != NULL) { fclose(_log_fd); } -#endif /* ENABLE_NETWORK */ return ret; } @@ -957,13 +937,11 @@ static void MakeNewGameDone() InitializeRailGUI(); -#ifdef ENABLE_NETWORK /* We are the server, we start a new company (not dedicated), * so set the default password *if* needed. */ if (_network_server && !StrEmpty(_settings_client.network.default_company_pass)) { NetworkChangeCompanyPassword(_local_company, _settings_client.network.default_company_pass); } -#endif /* ENABLE_NETWORK */ if (_settings_client.gui.pause_on_newgame) DoCommandP(0, PM_PAUSED_NORMAL, 1, CMD_PAUSE); @@ -1019,7 +997,6 @@ bool SafeLoad(const char *filename, SaveLoadOperation fop, DetailedFileType dft, case SL_OK: return true; case SL_REINIT: -#ifdef ENABLE_NETWORK if (_network_dedicated) { /* * We need to reinit a network map... @@ -1035,7 +1012,6 @@ bool SafeLoad(const char *filename, SaveLoadOperation fop, DetailedFileType dft, /* We can't load the intro game as server, so disconnect first. */ NetworkDisconnect(); } -#endif /* ENABLE_NETWORK */ switch (ogm) { default: @@ -1052,7 +1028,6 @@ bool SafeLoad(const char *filename, SaveLoadOperation fop, DetailedFileType dft, void SwitchToMode(SwitchMode new_mode) { -#ifdef ENABLE_NETWORK /* If we are saving something, the network stays in his current state */ if (new_mode != SM_SAVE_GAME) { /* If the network is active, make it not-active */ @@ -1081,7 +1056,7 @@ void SwitchToMode(SwitchMode new_mode) } } } -#endif /* ENABLE_NETWORK */ + /* Make sure all AI controllers are gone at quitting game */ if (new_mode != SM_SAVE_GAME) AI::KillAll(); @@ -1092,11 +1067,9 @@ void SwitchToMode(SwitchMode new_mode) case SM_RESTARTGAME: // Restart --> 'Random game' with current settings case SM_NEWGAME: // New Game --> 'Random game' -#ifdef ENABLE_NETWORK if (_network_server) { seprintf(_network_game_info.map_name, lastof(_network_game_info.map_name), "Random Map"); } -#endif /* ENABLE_NETWORK */ MakeNewGame(false, new_mode == SM_NEWGAME); break; @@ -1119,21 +1092,17 @@ void SwitchToMode(SwitchMode new_mode) IConsoleCmdExec("exec scripts/game_start.scr 0"); /* Decrease pause counter (was increased from opening load dialog) */ DoCommandP(0, PM_PAUSED_SAVELOAD, 0, CMD_PAUSE); -#ifdef ENABLE_NETWORK if (_network_server) { seprintf(_network_game_info.map_name, lastof(_network_game_info.map_name), "%s (Loaded game)", _file_to_saveload.title); } -#endif /* ENABLE_NETWORK */ } break; } case SM_START_HEIGHTMAP: // Load a heightmap and start a new game from it -#ifdef ENABLE_NETWORK if (_network_server) { seprintf(_network_game_info.map_name, lastof(_network_game_info.map_name), "%s (Heightmap)", _file_to_saveload.title); } -#endif /* ENABLE_NETWORK */ MakeNewGame(true, true); break; @@ -1451,10 +1420,8 @@ static void DoAutosave() void GameLoop() { if (_game_mode == GM_BOOTSTRAP) { -#ifdef ENABLE_NETWORK /* Check for UDP stuff */ if (_network_available) NetworkBackgroundLoop(); -#endif InputLoop(); return; } @@ -1477,7 +1444,6 @@ void GameLoop() IncreaseSpriteLRU(); InteractiveRandom(); -#ifdef ENABLE_NETWORK /* Check for UDP stuff */ if (_network_available) NetworkBackgroundLoop(); @@ -1493,9 +1459,6 @@ void GameLoop() /* Singleplayer */ StateGameLoop(); } -#else - StateGameLoop(); -#endif /* ENABLE_NETWORK */ if (!_pause_mode && HasBit(_display_opt, DO_FULL_ANIMATION)) DoPaletteAnimations(); diff --git a/src/order_backup.cpp b/src/order_backup.cpp index 181e3e59da..1d490e7264 100644 --- a/src/order_backup.cpp +++ b/src/order_backup.cpp @@ -193,11 +193,7 @@ CommandCost CmdClearOrderBackup(TileIndex tile, DoCommandFlag flags, uint32 p1, * but compiled it. A network client has its own variable for the unique * client/user identifier. Finally if networking isn't compiled in the * default is just plain and simple: 0. */ -#ifdef ENABLE_NETWORK uint32 user = _networking && !_network_server ? _network_own_client_id : CLIENT_ID_SERVER; -#else - uint32 user = 0; -#endif OrderBackup *ob; FOR_ALL_ORDER_BACKUPS(ob) { diff --git a/src/script/api/script_admin.cpp b/src/script/api/script_admin.cpp index f66d9fc8a8..7a0fe627a3 100644 --- a/src/script/api/script_admin.cpp +++ b/src/script/api/script_admin.cpp @@ -135,7 +135,6 @@ std::string json; ScriptAdmin::MakeJSON(vm, -1, SQUIRREL_MAX_DEPTH, json); -#ifdef ENABLE_NETWORK if (json.length() > NETWORK_GAMESCRIPT_JSON_LENGTH) { ScriptLog::Error("You are trying to send a table that is too large to the AdminPort. No data sent."); sq_pushinteger(vm, 0); @@ -143,7 +142,6 @@ } NetworkAdminGameScript(json.c_str()); -#endif /* ENABLE_NETWORK */ sq_pushinteger(vm, 1); return 1; diff --git a/src/script/api/script_client.cpp b/src/script/api/script_client.cpp index 771a0ae4ec..855ad86a0b 100644 --- a/src/script/api/script_client.cpp +++ b/src/script/api/script_client.cpp @@ -16,7 +16,6 @@ #include "../../safeguards.h" -#ifdef ENABLE_NETWORK /** * Finds NetworkClientInfo given client-identifier, * is used by other methods to resolve client-identifier. @@ -29,46 +28,29 @@ static NetworkClientInfo *FindClientInfo(ScriptClient::ClientID client) if (!_networking) return NULL; return NetworkClientInfo::GetByClientID((::ClientID)client); } -#endif /* static */ ScriptClient::ClientID ScriptClient::ResolveClientID(ScriptClient::ClientID client) { -#ifdef ENABLE_NETWORK return (FindClientInfo(client) == NULL ? ScriptClient::CLIENT_INVALID : client); -#else - return CLIENT_INVALID; -#endif } /* static */ char *ScriptClient::GetName(ScriptClient::ClientID client) { -#ifdef ENABLE_NETWORK NetworkClientInfo *ci = FindClientInfo(client); if (ci == NULL) return NULL; return stredup(ci->client_name); -#else - return NULL; -#endif } /* static */ ScriptCompany::CompanyID ScriptClient::GetCompany(ScriptClient::ClientID client) { -#ifdef ENABLE_NETWORK NetworkClientInfo *ci = FindClientInfo(client); if (ci == NULL) return ScriptCompany::COMPANY_INVALID; return (ScriptCompany::CompanyID)ci->client_playas; -#else - return ScriptCompany::COMPANY_INVALID; -#endif } /* static */ ScriptDate::Date ScriptClient::GetJoinDate(ScriptClient::ClientID client) { -#ifdef ENABLE_NETWORK NetworkClientInfo *ci = FindClientInfo(client); if (ci == NULL) return ScriptDate::DATE_INVALID; return (ScriptDate::Date)ci->join_date; -#else - return ScriptDate::DATE_INVALID; -#endif } diff --git a/src/script/api/script_clientlist.cpp b/src/script/api/script_clientlist.cpp index 2f7a19a9ff..dbbbce0ec4 100644 --- a/src/script/api/script_clientlist.cpp +++ b/src/script/api/script_clientlist.cpp @@ -19,18 +19,15 @@ ScriptClientList::ScriptClientList() { -#ifdef ENABLE_NETWORK if (!_networking) return; NetworkClientInfo *ci; FOR_ALL_CLIENT_INFOS(ci) { this->AddItem(ci->client_id); } -#endif } ScriptClientList_Company::ScriptClientList_Company(ScriptCompany::CompanyID company) { -#ifdef ENABLE_NETWORK if (!_networking) return; CompanyID c; if (company == ScriptCompany::COMPANY_SPECTATOR) { @@ -45,5 +42,4 @@ ScriptClientList_Company::ScriptClientList_Company(ScriptCompany::CompanyID comp FOR_ALL_CLIENT_INFOS(ci) { if (ci->client_playas == c) this->AddItem(ci->client_id); } -#endif } diff --git a/src/script/api/script_game.cpp b/src/script/api/script_game.cpp index c24757a3cc..3e26174885 100644 --- a/src/script/api/script_game.cpp +++ b/src/script/api/script_game.cpp @@ -39,9 +39,5 @@ /* static */ bool ScriptGame::IsMultiplayer() { -#ifdef ENABLE_NETWORK return _network_server; -#else - return false; -#endif } diff --git a/src/script/api/script_goal.cpp b/src/script/api/script_goal.cpp index c183b75834..54312cd9d4 100644 --- a/src/script/api/script_goal.cpp +++ b/src/script/api/script_goal.cpp @@ -137,12 +137,8 @@ { EnforcePrecondition(false, ScriptGame::IsMultiplayer()); EnforcePrecondition(false, ScriptClient::ResolveClientID(client) != ScriptClient::CLIENT_INVALID); -#ifdef ENABLE_NETWORK ClientIndex c = NetworkClientInfo::GetByClientID((::ClientID)client)->index; return DoQuestion(uniqueid, c, true, question, type, buttons); -#else - return false; -#endif } /* static */ bool ScriptGoal::CloseQuestion(uint16 uniqueid) diff --git a/src/script/api/script_object.cpp b/src/script/api/script_object.cpp index 49dba6bb73..7a22e3ab7e 100644 --- a/src/script/api/script_object.cpp +++ b/src/script/api/script_object.cpp @@ -301,10 +301,8 @@ ScriptObject::ActiveInstance::~ActiveInstance() /* Are we only interested in the estimate costs? */ bool estimate_only = GetDoCommandMode() != NULL && !GetDoCommandMode()(); -#ifdef ENABLE_NETWORK /* Only set p2 when the command does not come from the network. */ if (GetCommandFlags(cmd) & CMD_CLIENT_ID && p2 == 0) p2 = UINT32_MAX; -#endif /* Try to perform the command. */ CommandCost res = ::DoCommandPInternal(tile, p1, p2, cmd, (_networking && !_generating_world) ? ScriptObject::GetActiveInstance()->GetDoCommandCallback() : NULL, text, false, estimate_only); diff --git a/src/script/script_scanner.cpp b/src/script/script_scanner.cpp index fe6d41cf92..168a852a51 100644 --- a/src/script/script_scanner.cpp +++ b/src/script/script_scanner.cpp @@ -18,11 +18,9 @@ #include "script_scanner.hpp" #include "script_info.hpp" -#if defined(ENABLE_NETWORK) #include "../network/network_content.h" #include "../3rdparty/md5/md5.h" #include "../tar_type.h" -#endif /* ENABLE_NETWORK */ #include "../safeguards.h" @@ -180,8 +178,6 @@ char *ScriptScanner::GetConsoleList(char *p, const char *last, bool newest_only) return p; } -#if defined(ENABLE_NETWORK) - /** Helper for creating a MD5sum of all files within of a script. */ struct ScriptFileChecksumCreator : FileScanner { byte md5sum[16]; ///< The final md5sum. @@ -287,5 +283,3 @@ const char *ScriptScanner::FindMainScript(const ContentInfo *ci, bool md5sum) } return NULL; } - -#endif /* ENABLE_NETWORK */ diff --git a/src/settings.cpp b/src/settings.cpp index 6ea5c081a3..8f57b6bda7 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1339,9 +1339,6 @@ static bool InvalidateShipPathCache(int32 p1) return true; } - -#ifdef ENABLE_NETWORK - static bool UpdateClientName(int32 p1) { NetworkUpdateClientName(); @@ -1373,9 +1370,6 @@ static bool UpdateClientConfigValues(int32 p1) return true; } -#endif /* ENABLE_NETWORK */ - - /* End - Callback Functions */ /** @@ -1705,11 +1699,9 @@ static void HandleSettingDescs(IniFile *ini, SettingDescProc *proc, SettingDescP proc(ini, _currency_settings,"currency", &_custom_currency); proc(ini, _company_settings, "company", &_settings_client.company); -#ifdef ENABLE_NETWORK proc_list(ini, "server_bind_addresses", &_network_bind_list); proc_list(ini, "servers", &_network_host_list); proc_list(ini, "bans", &_network_ban_list); -#endif /* ENABLE_NETWORK */ } } @@ -2009,7 +2001,6 @@ void SetDefaultCompanySettings(CompanyID cid) } } -#if defined(ENABLE_NETWORK) /** * Sync all company settings in a multiplayer game. */ @@ -2025,7 +2016,6 @@ void SyncCompanySettings() if (old_value != new_value) NetworkSendCommand(0, i, new_value, CMD_CHANGE_COMPANY_SETTING, NULL, NULL, _local_company); } } -#endif /* ENABLE_NETWORK */ /** * Get the index in the _company_settings array of a setting diff --git a/src/settings_func.h b/src/settings_func.h index c258cb6404..ee63e2bf4c 100644 --- a/src/settings_func.h +++ b/src/settings_func.h @@ -40,10 +40,6 @@ void DeleteGRFPresetFromConfig(const char *config_name); uint GetCompanySettingIndex(const char *name); void SetDefaultCompanySettings(CompanyID cid); -#if defined(ENABLE_NETWORK) void SyncCompanySettings(); -#else /* ENABLE_NETWORK */ -static inline void SyncCompanySettings() {} -#endif /* ENABLE_NETWORK */ #endif /* SETTINGS_FUNC_H */ diff --git a/src/settings_type.h b/src/settings_type.h index 42f8b45170..2459058979 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -154,11 +154,9 @@ struct GUISettings { uint8 station_gui_group_order; ///< the order of grouping cargo entries in the station gui uint8 station_gui_sort_by; ///< sort cargo entries in the station gui by station name or amount uint8 station_gui_sort_order; ///< the sort order of entries in the station gui - ascending or descending -#ifdef ENABLE_NETWORK uint16 network_chat_box_width_pct; ///< width of the chat box in percent uint8 network_chat_box_height; ///< height of the chat box in lines uint16 network_chat_timeout; ///< timeout of chat messages in seconds -#endif uint8 developer; ///< print non-fatal warnings in console (>= 1), copy debug output to console (== 2) bool show_date_in_logs; ///< whether to show dates in console logs @@ -237,7 +235,6 @@ struct NewsSettings { /** All settings related to the network. */ struct NetworkSettings { -#ifdef ENABLE_NETWORK uint16 sync_freq; ///< how often do we check whether we are still in-sync uint8 frame_freq; ///< how often do we send commands to the clients uint16 commands_per_frame; ///< how many commands may be sent each frame_freq frames? @@ -277,8 +274,6 @@ struct NetworkSettings { char last_host[NETWORK_HOSTNAME_LENGTH]; ///< IP address of the last joined server uint16 last_port; ///< port of the last joined server bool no_http_content_downloads; ///< do not do content downloads over HTTP -#else /* ENABLE_NETWORK */ -#endif }; /** Settings related to the creation of games. */ diff --git a/src/strings.cpp b/src/strings.cpp index b5fb36d4d9..c4ae5218a3 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -35,9 +35,7 @@ #include "window_func.h" #include "debug.h" #include "game/game_text.hpp" -#ifdef ENABLE_NETWORK -# include "network/network_content_gui.h" -#endif /* ENABLE_NETWORK */ +#include "network/network_content_gui.h" #include #include "table/strings.h" @@ -1681,11 +1679,7 @@ static char *GetSpecialNameString(char *buff, int ind, StringParameters *args, c NOT_REACHED(); } -#ifdef ENABLE_NETWORK extern void SortNetworkLanguages(); -#else /* ENABLE_NETWORK */ -static inline void SortNetworkLanguages() {} -#endif /* ENABLE_NETWORK */ /** * Check whether the header is a valid header for OpenTTD. @@ -1821,9 +1815,7 @@ bool ReadLanguagePack(const LanguageMetadata *lang) SortIndustryTypes(); BuildIndustriesLegend(); SortNetworkLanguages(); -#ifdef ENABLE_NETWORK BuildContentTypeStringList(); -#endif /* ENABLE_NETWORK */ InvalidateWindowClassesData(WC_BUILD_VEHICLE); // Build vehicle window. InvalidateWindowClassesData(WC_TRAINS_LIST); // Train group window. InvalidateWindowClassesData(WC_ROADVEH_LIST); // Road vehicle group window. diff --git a/src/table/gameopt_settings.ini b/src/table/gameopt_settings.ini index 624d475c31..29d6a31779 100644 --- a/src/table/gameopt_settings.ini +++ b/src/table/gameopt_settings.ini @@ -21,9 +21,7 @@ static const char *_climates = "temperate|arctic|tropic|toyland"; static const char *_autosave_interval = "off|monthly|quarterly|half year|yearly"; static const char *_roadsides = "left|right"; static const char *_savegame_date = "long|short|iso"; -#ifdef ENABLE_NETWORK static const char *_server_langs = "ANY|ENGLISH|GERMAN|FRENCH|BRAZILIAN|BULGARIAN|CHINESE|CZECH|DANISH|DUTCH|ESPERANTO|FINNISH|HUNGARIAN|ICELANDIC|ITALIAN|JAPANESE|KOREAN|LITHUANIAN|NORWEGIAN|POLISH|PORTUGUESE|ROMANIAN|RUSSIAN|SLOVAK|SLOVENIAN|SPANISH|SWEDISH|TURKISH|UKRAINIAN|AFRIKAANS|CROATIAN|CATALAN|ESTONIAN|GALICIAN|GREEK|LATVIAN"; -#endif /* ENABLE_NETWORK */ static const char *_osk_activation = "disabled|double|single|immediately"; static const char *_settings_profiles = "easy|medium|hard"; static const char *_news_display = "off|summarized|full"; diff --git a/src/table/settings.ini b/src/table/settings.ini index 7ab00d5a34..e7b625e4b0 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -44,12 +44,11 @@ static bool ZoomMinMaxChanged(int32 p1); static bool MaxVehiclesChanged(int32 p1); static bool InvalidateShipPathCache(int32 p1); -#ifdef ENABLE_NETWORK static bool UpdateClientName(int32 p1); static bool UpdateServerPassword(int32 p1); static bool UpdateRconPassword(int32 p1); static bool UpdateClientConfigValues(int32 p1); -#endif /* ENABLE_NETWORK */ + /* End - Callback Functions for the various settings */ /* Some settings do not need to be synchronised when playing in multiplayer. @@ -3565,7 +3564,6 @@ strhelp = STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION_HELPTEXT strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF [SDTC_VAR] -ifdef = ENABLE_NETWORK var = gui.network_chat_box_width_pct type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3575,7 +3573,6 @@ max = 100 cat = SC_EXPERT [SDTC_VAR] -ifdef = ENABLE_NETWORK var = gui.network_chat_box_height type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3585,7 +3582,6 @@ max = 255 cat = SC_EXPERT [SDTC_VAR] -ifdef = ENABLE_NETWORK var = gui.network_chat_timeout type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3595,7 +3591,6 @@ max = 65535 cat = SC_EXPERT [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.sync_freq type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NOT_IN_CONFIG | SLF_NO_NETWORK_SYNC @@ -3606,7 +3601,6 @@ max = 100 cat = SC_EXPERT [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.frame_freq type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NOT_IN_CONFIG | SLF_NO_NETWORK_SYNC @@ -3617,7 +3611,6 @@ max = 100 cat = SC_EXPERT [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.commands_per_frame type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3628,7 +3621,6 @@ max = 65535 cat = SC_EXPERT [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.max_commands_in_queue type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3639,7 +3631,6 @@ max = 65535 cat = SC_EXPERT [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.bytes_per_frame type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3650,7 +3641,6 @@ max = 65535 cat = SC_EXPERT [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.bytes_per_frame_burst type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3661,7 +3651,6 @@ max = 65535 cat = SC_EXPERT [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.max_init_time type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3672,7 +3661,6 @@ max = 32000 cat = SC_EXPERT [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.max_join_time type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3682,7 +3670,6 @@ min = 0 max = 32000 [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.max_download_time type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3692,7 +3679,6 @@ min = 0 max = 32000 [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.max_password_time type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3702,7 +3688,6 @@ min = 0 max = 32000 [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.max_lag_time type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3712,14 +3697,12 @@ min = 0 max = 32000 [SDTC_BOOL] -ifdef = ENABLE_NETWORK var = network.pause_on_join flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC guiflags = SGF_NETWORK_ONLY def = true [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.server_port type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3730,7 +3713,6 @@ max = 65535 cat = SC_EXPERT [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.server_admin_port type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3741,7 +3723,6 @@ max = 65535 cat = SC_EXPERT [SDTC_BOOL] -ifdef = ENABLE_NETWORK var = network.server_admin_chat flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC guiflags = SGF_NETWORK_ONLY @@ -3749,14 +3730,12 @@ def = true cat = SC_EXPERT [SDTC_BOOL] -ifdef = ENABLE_NETWORK var = network.server_advertise flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC guiflags = SGF_NETWORK_ONLY def = false [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.lan_internet type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3766,7 +3745,6 @@ min = 0 max = 1 [SDTC_STR] -ifdef = ENABLE_NETWORK var = network.client_name type = SLE_STRB flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3774,8 +3752,6 @@ def = NULL proc = UpdateClientName cat = SC_BASIC -[SDTC_STR] -ifdef = ENABLE_NETWORK var = network.server_password type = SLE_STRB flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3785,7 +3761,6 @@ proc = UpdateServerPassword cat = SC_BASIC [SDTC_STR] -ifdef = ENABLE_NETWORK var = network.rcon_password type = SLE_STRB flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3795,7 +3770,6 @@ proc = UpdateRconPassword cat = SC_BASIC [SDTC_STR] -ifdef = ENABLE_NETWORK var = network.admin_password type = SLE_STRB flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3804,14 +3778,12 @@ def = NULL cat = SC_BASIC [SDTC_STR] -ifdef = ENABLE_NETWORK var = network.default_company_pass type = SLE_STRB flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC def = NULL [SDTC_STR] -ifdef = ENABLE_NETWORK var = network.server_name type = SLE_STRB flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3820,14 +3792,12 @@ def = NULL cat = SC_BASIC [SDTC_STR] -ifdef = ENABLE_NETWORK var = network.connect_to_ip type = SLE_STRB flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC def = NULL [SDTC_STR] -ifdef = ENABLE_NETWORK var = network.network_id type = SLE_STRB flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3835,14 +3805,12 @@ guiflags = SGF_NETWORK_ONLY def = NULL [SDTC_BOOL] -ifdef = ENABLE_NETWORK var = network.autoclean_companies flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC guiflags = SGF_NETWORK_ONLY def = false [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.autoclean_unprotected type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3852,7 +3820,6 @@ min = 0 max = 240 [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.autoclean_protected type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3862,7 +3829,6 @@ min = 0 max = 240 [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.autoclean_novehicles type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3872,7 +3838,6 @@ min = 0 max = 240 [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.max_companies type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3884,7 +3849,6 @@ proc = UpdateClientConfigValues cat = SC_BASIC [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.max_clients type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3895,7 +3859,6 @@ max = MAX_CLIENTS cat = SC_BASIC [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.max_spectators type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3907,7 +3870,6 @@ proc = UpdateClientConfigValues cat = SC_BASIC [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.restart_game_year type = SLE_INT32 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3918,7 +3880,6 @@ max = MAX_YEAR interval = 1 [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.min_active_clients type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3928,7 +3889,6 @@ min = 0 max = MAX_CLIENTS [SDTC_OMANY] -ifdef = ENABLE_NETWORK var = network.server_lang type = SLE_UINT8 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3939,7 +3899,6 @@ full = _server_langs cat = SC_BASIC [SDTC_BOOL] -ifdef = ENABLE_NETWORK var = network.reload_cfg flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC guiflags = SGF_NETWORK_ONLY @@ -3947,7 +3906,6 @@ def = false cat = SC_EXPERT [SDTC_STR] -ifdef = ENABLE_NETWORK var = network.last_host type = SLE_STRB flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3955,7 +3913,6 @@ def = """" cat = SC_EXPERT [SDTC_VAR] -ifdef = ENABLE_NETWORK var = network.last_port type = SLE_UINT16 flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC @@ -3965,7 +3922,6 @@ max = UINT16_MAX cat = SC_EXPERT [SDTC_BOOL] -ifdef = ENABLE_NETWORK var = network.no_http_content_downloads flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC def = false diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index cff86c3b3e..2277a5cf6f 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -158,11 +158,9 @@ public: int lock_offset = (bottom - top - lock_size.height) / 2; DrawCompanyIcon(company, rtl ? right - this->icon_size.width - WD_FRAMERECT_RIGHT : left + WD_FRAMERECT_LEFT, top + icon_offset); -#ifdef ENABLE_NETWORK if (NetworkCompanyIsPassworded(company)) { DrawSprite(SPR_LOCK, PAL_NONE, rtl ? left + WD_FRAMERECT_LEFT : right - this->lock_size.width - WD_FRAMERECT_RIGHT, top + lock_offset); } -#endif SetDParam(0, company); SetDParam(1, company); @@ -223,7 +221,6 @@ static void PopupMainCompanyToolbMenu(Window *w, int widget, int grey = 0) switch (widget) { case WID_TN_COMPANIES: -#ifdef ENABLE_NETWORK if (!_networking) break; /* Add the client list button for the companies menu */ @@ -234,7 +231,6 @@ static void PopupMainCompanyToolbMenu(Window *w, int widget, int grey = 0) } else { *list->Append() = new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_SPECTATE, CTMN_SPECTATE, NetworkMaxSpectatorsReached()); } -#endif /* ENABLE_NETWORK */ break; case WID_TN_STORY: @@ -610,7 +606,6 @@ static CallBackFunction ToolbarCompaniesClick(Window *w) */ static CallBackFunction MenuClickCompany(int index) { -#ifdef ENABLE_NETWORK if (_networking) { switch (index) { case CTMN_CLIENT_LIST: @@ -635,7 +630,6 @@ static CallBackFunction MenuClickCompany(int index) return CBF_NONE; } } -#endif /* ENABLE_NETWORK */ ShowCompany((CompanyID)index); return CBF_NONE; } @@ -2076,9 +2070,7 @@ struct MainToolbarWindow : Window { case MTHK_CHEATS: if (!_networking) ShowCheatWindow(); break; case MTHK_TERRAFORM: ShowTerraformToolbar(); break; case MTHK_EXTRA_VIEWPORT: ShowExtraViewPortWindowForTileUnderCursor(); break; -#ifdef ENABLE_NETWORK case MTHK_CLIENT_LIST: if (_networking) ShowClientList(); break; -#endif case MTHK_SIGN_LIST: ShowSignList(); break; default: return ES_NOT_HANDLED; } @@ -2189,9 +2181,7 @@ static Hotkey maintoolbar_hotkeys[] = { Hotkey(WKC_CTRL | WKC_ALT | 'C', "cheats", MTHK_CHEATS), Hotkey('L', "terraform", MTHK_TERRAFORM), Hotkey('V', "extra_viewport", MTHK_EXTRA_VIEWPORT), -#ifdef ENABLE_NETWORK Hotkey((uint16)0, "client_list", MTHK_CLIENT_LIST), -#endif Hotkey((uint16)0, "sign_list", MTHK_SIGN_LIST), HOTKEY_LIST_END }; diff --git a/src/video/dedicated_v.cpp b/src/video/dedicated_v.cpp index 3b053c7d64..58d7d04e0b 100644 --- a/src/video/dedicated_v.cpp +++ b/src/video/dedicated_v.cpp @@ -11,8 +11,6 @@ #include "../stdafx.h" -#ifdef ENABLE_NETWORK - #include "../gfx_func.h" #include "../network/network.h" #include "../network/network_internal.h" @@ -316,5 +314,3 @@ void VideoDriver_Dedicated::MainLoop() } } } - -#endif /* ENABLE_NETWORK */ diff --git a/src/viewport.cpp b/src/viewport.cpp index 5e82971435..8d9f4513e5 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -3318,12 +3318,8 @@ CommandCost CmdScrollViewport(TileIndex tile, DoCommandFlag flags, uint32 p1, ui if (_local_company != (CompanyID)p2) return CommandCost(); break; case VST_CLIENT: -#ifdef ENABLE_NETWORK if (_network_own_client_id != (ClientID)p2) return CommandCost(); break; -#else - return CommandCost(); -#endif default: return CMD_ERROR; } diff --git a/src/window.cpp b/src/window.cpp index 857029622f..f0cc5025f3 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -3120,13 +3120,11 @@ void UpdateWindows() CallWindowRealtimeTickEvent(delta_ms); -#ifdef ENABLE_NETWORK static GUITimer network_message_timer = GUITimer(1); if (network_message_timer.Elapsed(delta_ms)) { network_message_timer.SetInterval(1000); NetworkChatMessageLoop(); } -#endif Window *w; @@ -3443,10 +3441,9 @@ void ReInitAllWindows() FOR_ALL_WINDOWS_FROM_BACK(w) { w->ReInit(); } -#ifdef ENABLE_NETWORK + void NetworkReInitChatBoxSize(); NetworkReInitChatBoxSize(); -#endif /* Make sure essential parts of all windows are visible */ RelocateAllWindows(_cur_resolution.width, _cur_resolution.height); From 4da83d2f661691b40eb53591d2a998596f5d16a0 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Wed, 20 Mar 2019 01:21:10 +0000 Subject: [PATCH 513/622] Fix #7386: Measurement tooltip for tunnels, aqueducts & docks did not display or flickered. Measurement tooltip was auto-closed as the hover/right-click test for tooltips was not satisfied in this case. This is fixed by keeping the tooltip visible and instead explicitly closing the tooltip when the PlaceObject is cancelled/completed. --- src/misc_gui.cpp | 2 +- src/viewport.cpp | 18 +++++++++++++++--- src/window_gui.h | 2 +- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 149ebe7177..061070a2b5 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -724,8 +724,8 @@ struct TooltipsWindow : public Window * we are dragging the tool. Normal tooltips work with hover or rmb. */ switch (this->close_cond) { case TCC_RIGHT_CLICK: if (!_right_button_down) delete this; break; - case TCC_LEFT_CLICK: if (!_left_button_down) delete this; break; case TCC_HOVER: if (!_mouse_hovering) delete this; break; + case TCC_NONE: break; } } }; diff --git a/src/viewport.cpp b/src/viewport.cpp index 8d9f4513e5..729dfca7b3 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -2508,12 +2508,17 @@ void UpdateTileSelection() * @param params (optional) up to 5 pieces of additional information that may be added to a tooltip * @param close_cond Condition for closing this tooltip. */ -static inline void ShowMeasurementTooltips(StringID str, uint paramcount, const uint64 params[], TooltipCloseCondition close_cond = TCC_LEFT_CLICK) +static inline void ShowMeasurementTooltips(StringID str, uint paramcount, const uint64 params[], TooltipCloseCondition close_cond = TCC_NONE) { if (!_settings_client.gui.measure_tooltip) return; GuiShowTooltips(_thd.GetCallbackWnd(), str, paramcount, params, close_cond); } +void HideMeasurementTooltips() +{ + DeleteWindowById(WC_TOOLTIPS, 0); +} + /** highlighting tiles while only going over them with the mouse */ void VpStartPlaceSizing(TileIndex tile, ViewportPlaceMethod method, ViewportDragDropSelectionProcess process) { @@ -2569,7 +2574,11 @@ void VpSetPresizeRange(TileIndex from, TileIndex to) _thd.next_drawstyle = HT_RECT; /* show measurement only if there is any length to speak of */ - if (distance > 1) ShowMeasurementTooltips(STR_MEASURE_LENGTH, 1, &distance, TCC_HOVER); + if (distance > 1) { + ShowMeasurementTooltips(STR_MEASURE_LENGTH, 1, &distance); + } else { + HideMeasurementTooltips(); + } } static void VpStartPreSizing() @@ -3221,7 +3230,10 @@ void SetObjectToPlace(CursorID icon, PaletteID pal, HighLightStyle mode, WindowC * this function might in some cases reset the newly set object to * place or not properly reset the original selection. */ _thd.window_class = WC_INVALID; - if (w != NULL) w->OnPlaceObjectAbort(); + if (w != NULL) { + w->OnPlaceObjectAbort(); + HideMeasurementTooltips(); + } } /* Mark the old selection dirty, in case the selection shape or colour changes */ diff --git a/src/window_gui.h b/src/window_gui.h index 0abf79cca2..05a2b3c5a2 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -873,8 +873,8 @@ void RelocateAllWindows(int neww, int newh); /* misc_gui.cpp */ enum TooltipCloseCondition { TCC_RIGHT_CLICK, - TCC_LEFT_CLICK, TCC_HOVER, + TCC_NONE, }; void GuiShowTooltips(Window *parent, StringID str, uint paramcount = 0, const uint64 params[] = NULL, TooltipCloseCondition close_tooltip = TCC_HOVER); From f5f33da126a072ddacfdb8e5887054f4225d4d86 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Wed, 20 Mar 2019 02:13:36 +0000 Subject: [PATCH 514/622] Codechange: Implement OnTooltip event for custom window tooltips. This avoids windows from needing to know or care about tooltip delay settings. --- src/linkgraph/linkgraph_gui.cpp | 15 +-------------- src/linkgraph/linkgraph_gui.h | 4 +--- src/window.cpp | 10 ++++++---- src/window_gui.h | 24 ++++++++++++++++-------- 4 files changed, 24 insertions(+), 29 deletions(-) diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index 4db9f95b35..6844092c2e 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -559,7 +559,7 @@ void LinkGraphLegendWindow::DrawWidget(const Rect &r, int widget) const } } -bool LinkGraphLegendWindow::OnHoverCommon(Point pt, int widget, TooltipCloseCondition close_cond) +bool LinkGraphLegendWindow::OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond) { if (IsInsideMM(widget, WID_LGL_COMPANY_FIRST, WID_LGL_COMPANY_LAST + 1)) { if (this->IsWidgetDisabled(widget)) { @@ -584,19 +584,6 @@ bool LinkGraphLegendWindow::OnHoverCommon(Point pt, int widget, TooltipCloseCond return false; } -void LinkGraphLegendWindow::OnHover(Point pt, int widget) -{ - this->OnHoverCommon(pt, widget, TCC_HOVER); -} - -bool LinkGraphLegendWindow::OnRightClick(Point pt, int widget) -{ - if (_settings_client.gui.hover_delay_ms == 0) { - return this->OnHoverCommon(pt, widget, TCC_RIGHT_CLICK); - } - return false; -} - /** * Update the overlay with the new company selection. */ diff --git a/src/linkgraph/linkgraph_gui.h b/src/linkgraph/linkgraph_gui.h index 93ec666299..17fcd28b28 100644 --- a/src/linkgraph/linkgraph_gui.h +++ b/src/linkgraph/linkgraph_gui.h @@ -106,8 +106,7 @@ public: virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize); virtual void DrawWidget(const Rect &r, int widget) const; - virtual void OnHover(Point pt, int widget); - virtual bool OnRightClick(Point pt, int widget); + virtual bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond); virtual void OnClick(Point pt, int widget, int click_count); virtual void OnInvalidateData(int data = 0, bool gui_scope = true); @@ -116,7 +115,6 @@ private: void UpdateOverlayCompanies(); void UpdateOverlayCargoes(); - bool OnHoverCommon(Point pt, int widget, TooltipCloseCondition close_cond); }; #endif /* LINKGRAPH_GUI_H */ diff --git a/src/window.cpp b/src/window.cpp index f0cc5025f3..243114e206 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -770,16 +770,17 @@ static void DispatchRightClickEvent(Window *w, int x, int y) NWidgetCore *wid = w->nested_root->GetWidgetFromPos(x, y); if (wid == NULL) return; + Point pt = { x, y }; + /* No widget to handle, or the window is not interested in it. */ if (wid->index >= 0) { - Point pt = { x, y }; if (w->OnRightClick(pt, wid->index)) return; } /* Right-click close is enabled and there is a closebox */ if (_settings_client.gui.right_mouse_wnd_close && w->nested_root->GetWidgetOfType(WWT_CLOSEBOX)) { delete w; - } else if (_settings_client.gui.hover_delay_ms == 0 && wid->tool_tip != 0) { + } else if (_settings_client.gui.hover_delay_ms == 0 && !w->OnTooltip(pt, wid->index, TCC_RIGHT_CLICK) && wid->tool_tip != 0) { GuiShowTooltips(w, wid->tool_tip, 0, NULL, TCC_RIGHT_CLICK); } } @@ -797,8 +798,10 @@ static void DispatchHoverEvent(Window *w, int x, int y) /* No widget to handle */ if (wid == NULL) return; + Point pt = { x, y }; + /* Show the tooltip if there is any */ - if (wid->tool_tip != 0) { + if (!w->OnTooltip(pt, wid->index, TCC_HOVER) && wid->tool_tip != 0) { GuiShowTooltips(w, wid->tool_tip); return; } @@ -806,7 +809,6 @@ static void DispatchHoverEvent(Window *w, int x, int y) /* Widget has no index, so the window is not interested in it. */ if (wid->index < 0) return; - Point pt = { x, y }; w->OnHover(pt, wid->index); } diff --git a/src/window_gui.h b/src/window_gui.h index 05a2b3c5a2..b2bba675b2 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -265,6 +265,13 @@ struct ViewportData : ViewPort { struct QueryString; +/* misc_gui.cpp */ +enum TooltipCloseCondition { + TCC_RIGHT_CLICK, + TCC_HOVER, + TCC_NONE, +}; + /** * Data structure for an opened window */ @@ -629,12 +636,20 @@ public: virtual bool OnRightClick(Point pt, int widget) { return false; } /** - * The mouse is hovering over a widget in the window, perform an action for it, like opening a custom tooltip. + * The mouse is hovering over a widget in the window, perform an action for it. * @param pt The point where the mouse is hovering. * @param widget The widget where the mouse is hovering. */ virtual void OnHover(Point pt, int widget) {} + /** + * Event to display a custom tooltip. + * @param pt The point where the mouse is located. + * @param widget The widget where the mouse is located. + * @return True if the event is handled, false if it is ignored. + */ + virtual bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond) { return false; } + /** * An 'object' is being dragged at the provided position, highlight the target if possible. * @param pt The point inside the window that the mouse hovers over. @@ -870,13 +885,6 @@ Wcls *AllocateWindowDescFront(WindowDesc *desc, int window_number, bool return_e void RelocateAllWindows(int neww, int newh); -/* misc_gui.cpp */ -enum TooltipCloseCondition { - TCC_RIGHT_CLICK, - TCC_HOVER, - TCC_NONE, -}; - void GuiShowTooltips(Window *parent, StringID str, uint paramcount = 0, const uint64 params[] = NULL, TooltipCloseCondition close_tooltip = TCC_HOVER); /* widget.cpp */ From b3ef06fdf35c4ddadb6396a61aa7f9d1adee2da3 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Wed, 20 Mar 2019 02:16:05 +0000 Subject: [PATCH 515/622] Fix #7384: Industry Chain tooltips did not display on right-click. This is fixed by handling the new Window::OnTooltip() event instead of OnHover() --- src/industry_gui.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index a1030122e5..78bf3f4a01 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -2753,12 +2753,12 @@ struct IndustryCargoesWindow : public Window { } } - virtual void OnHover(Point pt, int widget) + bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond) { - if (widget != WID_IC_PANEL) return; + if (widget != WID_IC_PANEL) return false; Point fieldxy, xy; - if (!CalculatePositionInWidget(pt, &fieldxy, &xy)) return; + if (!CalculatePositionInWidget(pt, &fieldxy, &xy)) return false; const CargoesField *fld = this->fields[fieldxy.y].columns + fieldxy.x; CargoID cid = INVALID_CARGO; @@ -2777,9 +2777,9 @@ struct IndustryCargoesWindow : public Window { case CFT_INDUSTRY: if (fld->u.industry.ind_type < NUM_INDUSTRYTYPES && (this->ind_cargo >= NUM_INDUSTRYTYPES || fieldxy.x != 2)) { - GuiShowTooltips(this, STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP, 0, NULL, TCC_HOVER); + GuiShowTooltips(this, STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP, 0, NULL, close_cond); } - return; + return true; default: break; @@ -2788,8 +2788,11 @@ struct IndustryCargoesWindow : public Window { const CargoSpec *csp = CargoSpec::Get(cid); uint64 params[5]; params[0] = csp->name; - GuiShowTooltips(this, STR_INDUSTRY_CARGOES_CARGO_TOOLTIP, 1, params, TCC_HOVER); + GuiShowTooltips(this, STR_INDUSTRY_CARGOES_CARGO_TOOLTIP, 1, params, close_cond); + return true; } + + return false; } virtual void OnResize() From c34f07d5fd529043a58f85778fcbfdc30485ff18 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Wed, 20 Mar 2019 23:26:58 +0000 Subject: [PATCH 516/622] Fix #7390: Extra line removed by mistake caused server_password to disappear from settings. --- src/table/settings.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/src/table/settings.ini b/src/table/settings.ini index e7b625e4b0..78ed234ce2 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -3752,6 +3752,7 @@ def = NULL proc = UpdateClientName cat = SC_BASIC +[SDTC_STR] var = network.server_password type = SLE_STRB flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC From 0837a1a398b4c9bd192b0575e9ace6c069ec93a8 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 21 Mar 2019 19:45:42 +0100 Subject: [PATCH 517/622] Update: Translations from eints dutch: 28 changes by JanWillem russian: 1 change by Lone_Wolf --- src/lang/dutch.txt | 56 ++++++++++++++++++++++---------------------- src/lang/russian.txt | 2 +- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 546cb31aa6..221caab94c 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1124,7 +1124,7 @@ STR_CONFIG_SETTING_RESTRICT_BASIC :Basis (alleen b STR_CONFIG_SETTING_RESTRICT_ADVANCED :Geavanceerd (meeste instellingen weergeven) STR_CONFIG_SETTING_RESTRICT_ALL :Expert (alle instellingen weergeven, inclusief vreemde) STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Instellingen met een andere waarde dan de standaard -STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Instellingen met een andere waarde dan je 'nieuw spel' instellingen +STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Instellingen met een andere waarde dan je instellingen voor 'Nieuw spel' STR_CONFIG_SETTING_TYPE_DROPDOWN_HELPTEXT :{BLACK}Filter de lijst hieronder op bepaalde instellingstypen STR_CONFIG_SETTING_TYPE_DROPDOWN_ALL :Alle instellingen @@ -1169,7 +1169,7 @@ STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Instellen hoeve STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Bouwkosten: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Het niveau van bouw- en aankoopkosten instellen STR_CONFIG_SETTING_RECESSIONS :Recessies: {STRING} -STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Wanneer ingeschakeld kunnen recessies om de paar jaar optreden. Tijdens een recessie is alle productie aanzienlijk lager (deze keert terug naar het vorige niveau als de recessie voorbij is) +STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Wanneer dit is ingeschakeld, kunnen om de paar jaar recessies optreden. Tijdens een recessie is alle productie aanzienlijk lager (deze keert terug naar het vorige niveau als de recessie voorbij is). STR_CONFIG_SETTING_TRAIN_REVERSING :Niet toestaan dat treinen keren in stations: {STRING} STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Indien ingeschakeld zullen treinen niet omkeren in niet-eind stations, zelfs als er een kortere weg naar hun volgende bestemming is bij omkeren STR_CONFIG_SETTING_DISASTERS :Rampen: {STRING} @@ -1192,7 +1192,7 @@ STR_CONFIG_SETTING_TRAIN_LENGTH :Maximale lengte STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Stel de maximale lengte van treinen in STR_CONFIG_SETTING_TILE_LENGTH :{COMMA} tegel{P 0 "" s} STR_CONFIG_SETTING_SMOKE_AMOUNT :Hoeveelheid rook/vonken: {STRING} -STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Bepaal hoeveel rook of hoeveel vonken door de voertuigen worden uitgestoten. +STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Bepaal hoeveel rook en vonken voertuigen uitstoten STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Treinacceleratiemodel: {STRING} STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Natuurkundig model selecteren voor treinacceleratie. In het 'originele' model hebben hellingen dezelfde invloed op alle voertuigen. In het 'realistische' model hebben hellingen en bochten een verschillende invloed, afhankelijk van verschillende eigenschappen van de samenstelling, zoals lengte en trekkracht. STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Acceleratiemodel voor wegvoertuigen: {STRING} @@ -1222,16 +1222,16 @@ STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :Onderzoeken STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Vlak gebied rond industrieën: {STRING} STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Hoeveelheid ruimte rond een industrie. Dit zorgt ervoor dat lege ruimte rond een industrie beschikbaar blijft voor sporen, stations, wegen enz. STR_CONFIG_SETTING_MULTIPINDTOWN :Meerdere vergelijkbare industrieën per stad toestaan: {STRING} -STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normaal zal een stad niet meer dan één industrie van ieder type toestaan. Door deze optie in te schakelen zullen steden meerdere industrieën van één soort accepteren. +STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normaal staat een stad niet meer dan één industrie van ieder type toe. Wanneer je deze optie inschakelt, accepteren steden meerdere industrieën van één soort. STR_CONFIG_SETTING_SIGNALSIDE :Seinen weergeven: {STRING} STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Kiest aan welke kant van het spoor seinen worden geplaatst STR_CONFIG_SETTING_SIGNALSIDE_LEFT :Links STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :Aan de rij zijde STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :Rechts STR_CONFIG_SETTING_SHOWFINANCES :Financieel overzicht aan het einde van het jaar weergeven: {STRING} -STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Indien ingeschakeld verschijnt het financiën venster aan het eind van elk jaar voor een gemakkelijke controle van de financiële status van het bedrijf +STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Indien dit is ingeschakeld, verschijnt het venster met financiën aan het eind van elk jaar. Zo kun je gemakkelijk de financiële status van het bedrijf in de gaten houden. STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Nieuwe orders zijn standaard 'non-stop': {STRING} -STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normaal gesproken zal een voertuig stoppen op elk station dit wordt gepasseerd. Door het inschakelen van deze instelling, zal het rijden door alle station op weg naar de eindbestemming zonder te stoppen. Merk op dat deze instelling alleen een standaardwaarde voor nieuwe orders bepaalt. Individuele opdrachten kan expliciet worden ingesteld op het gedrag +STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normaal gesproken stopt een voertuig op elk station dat wordt gepasseerd. Wanneer je deze instelling inschakelt, passeert het alle stations op weg naar de eindbestemming zonder te stoppen. Merk op dat deze instelling alleen een standaardwaarde voor nieuwe orders bepaalt. Individuele opdrachten kunnen expliciet worden ingesteld op elk gewenst gedrag. STR_CONFIG_SETTING_STOP_LOCATION :Nieuwe treinorders stoppen de trein standaard {STRING} van het perron STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Plaats waar een trein standaard stopt aan het perron. 'Aan het begin' betekent in de buurt van de ingang, 'In het midden' betekent in het midden van het perron, en 'Aan het einde' betekent ver weg van de ingang. Merk op dat deze instelling alleen een standaardwaarde voor nieuwe orders bepaalt. Je kunt opdrachten expliciet instellen op elk gewenst gedrag. STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :aan het begin @@ -1280,7 +1280,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Het inschakelen STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Waarschuwen wanneer voertuig verdwaald is: {STRING} STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT :Veroorzaakt berichten over voertuigen die niet in staat zijn om een pad naar hun bestemming te vinden STR_CONFIG_SETTING_ORDER_REVIEW :Orders van voertuigen controleren: {STRING} -STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :Wanneer ingeschakeld, worden de orders van de voertuigen regelmatig gecontroleerd, en sommige voor de hand liggende problemen worden gemeld met een nieuwsbericht bij detectie +STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :Wanneer dit is ingeschakeld, worden de orders van de voertuigen regelmatig gecontroleerd, en sommige duidelijke problemen worden gemeld met een nieuwsbericht STR_CONFIG_SETTING_ORDER_REVIEW_OFF :Nee STR_CONFIG_SETTING_ORDER_REVIEW_EXDEPOT :Ja, maar gestopte voertuigen uitsluiten STR_CONFIG_SETTING_ORDER_REVIEW_ON :Alle voertuigen @@ -1318,8 +1318,8 @@ STR_CONFIG_SETTING_TERRAIN_TYPE :Terreintype: {S STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Alleen TerraGenesis) Heuvelachtigheid van het landschap STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industriedichtheid: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Stelt in hoeveel industrieën worden gegenereerd en welk niveau tijdens het spel moet worden gehandhaafd -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximumafstand van de rand voor Olierafinaderijen: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Olieraffinaderijen worden alleen gebouwd nabij de kaart grens, dat is aan de kust van eiland kaarten +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximumafstand van de rand voor olieraffinaderijen: {STRING} +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Olieraffinaderijen worden alleen gebouwd nabij de kaartgrens, dat is aan de kust van eilandkaarten STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Sneeuwhoogte: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Stelt in op welke hoogte de sneeuw begint in subarctisch landschap. Sneeuw heeft ook invloed op het ontstaan van industrieën en op de vereisten voor stadsgroei. STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Ruwheid van het terrein: {STRING} @@ -1385,8 +1385,8 @@ STR_CONFIG_SETTING_OSK_ACTIVATION :Toetsenbord op STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Selecteer de methode om het toetsenbord op het scherm te openen voor tekst invoeren in bewerkingsvensters met alleen het aanwijsapparaat. Dit is bedoeld voor kleine apparaten zonder toetsenbord. STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :Uitgeschakeld STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Dubbelklik -STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Enkel klik (met focus) -STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Enkel klik (onmiddelijk) +STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Enkele klik (met focus) +STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Enkele klik (onmiddelijk) STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Rechtsklikemulatie: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Methode selecteeren voor nabootsen van rechtsklikken @@ -1395,7 +1395,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+klik STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Uit STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Vensters sluiten met rechtsklik: {STRING} -STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Venster sluiten met de rechtermuisknop. Schakelt knopinfo met de rechtermuisknop uit! +STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Sluit vensters met de rechtermuisknop. Schakelt knopinfo met de rechtermuisknop uit! STR_CONFIG_SETTING_AUTOSAVE :Automatisch opslaan: {STRING} STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT :Tijdsduur kiezen voor automatische spelopslag @@ -1407,7 +1407,7 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :kort (31-12-200 STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31) STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Automatisch pauzeren als je een nieuw spel start: {STRING} -STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Wanneer ingeschakeld, het spel zal automatisch pauzeren bij het starten van een nieuw spel, waardoor nadere bestudering van de kaart mogelijk is +STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Wanneer dit is ingeschakeld, pauzeert het spel automatisch wanneer je een nieuw spel start; zo kun je rustig de kaart bestuderen STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :Toestaan wanneer gepauzeerd: {STRING} STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Selecteer welke acties kunnen worden uitgevoerd terwijl het spel is gepauzeerd STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Niets @@ -1423,25 +1423,25 @@ STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT :Reistijden in t STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Aankomst- en vertrektijden in dienstregeling weergeven: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Geef de verwachte aankomst-en vertrektijden in de dienstregeling weer STR_CONFIG_SETTING_QUICKGOTO :Snel voertuigorders maken: {STRING} -STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Pre-selecteer de 'Ga naar cursor' bij het openen van de orders venster +STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Selecteer meteen de 'ga-naar-cursor' wanneer je het ordervenster opent STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Standaard spoorsoort (bij nieuw of opgeslagen spel): {STRING} STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Spoortype om te selecteren na het starten of het laden van een spel. 'eerst beschikbare' selecteert de oudste vorm van sporen, 'laatst beschikbare' selecteert het nieuwste type van sporen, en 'meest gebruikte' selecteert het type dat op dit moment het meest in gebruik is STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :Eerst beschikbare STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Laatst beschikbare STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :Meest gebruikte STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Gereserveerd spoor weergeven: {STRING} -STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Geef gereserveerde tracks een andere kleur om te helpen met de problemen met treinen te weigeren een route op basis van blokken in te gaan +STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Geeft gereserveerde sporen een andere kleur. Dit is handig om te bepalen waarom treinen een routeblok niet ingaan. STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Bouwgereedschappen actief houden na gebruik: {STRING} STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Houd de bouwhulpmiddelen voor bruggen, tunnels, enz. open na gebruik STR_CONFIG_SETTING_EXPENSES_LAYOUT :Uitgaven in bedrijfsfinanciënvenster groeperen: {STRING} STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT :Definieer de lay-out voor het bedrijfsuitgavenvenster STR_CONFIG_SETTING_SOUND_TICKER :Nieuwsticker: {STRING} -STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Geluidseffect afspelen bij korte nieuwsberichten +STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Speel geluidseffecten af bij korte nieuwsberichten STR_CONFIG_SETTING_SOUND_NEWS :Krant: {STRING} -STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Geluidseffect weergeven bij nieuwsbericht +STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Speel geluidseffecten af bij nieuwsberichten STR_CONFIG_SETTING_SOUND_NEW_YEAR :Einde jaar: {STRING} -STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Geluidseffect afspelen bij jaaroverzicht van bedrijf t.o.v. vorig jaar +STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Speel geluidseffecten af bij jaaroverzicht van bedrijf t.o.v. vorig jaar STR_CONFIG_SETTING_SOUND_CONFIRM :Bouw: {STRING} STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Speel geluidseffecten af wanneer constructies of andere acties zijn gelukt STR_CONFIG_SETTING_SOUND_CLICK :Klikgeluid knoppen: {STRING} @@ -1542,7 +1542,7 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Kleurenfoto's v STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Jaar dat de krant aankondigt in kleur te gaan afdrukken. Voor dit jaar wordt zwart-wit gebruikt STR_CONFIG_SETTING_STARTING_YEAR :Startjaar: {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY :Vloeiende economie inschakelen (meer, kleinere veranderingen): {STRING} -STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Wanneer ingeschakeld, industrie produktie verandert vaker en in kleinere stappen. Deze instelling heeft meestal geen effect, als de industrie soorten worden geleverd door een NewGRF +STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Wanneer dit is ingeschakeld, verandert de productie van industrieën vaker en in kleinere stappen. Deze instelling heeft meestal geen effect als de industriesoorten worden geleverd door een NewGRF. STR_CONFIG_SETTING_ALLOW_SHARES :Kopen van aandelen in andere bedrijven toestaan: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Wanneer ingeschakeld is het toegestaan om bedrijfsaandelen te kopen en te verkopen. Aandelen zullen alleen beschikbaar zijn voor bedrijven die een bepaalde leeftijd hebben bereikt STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Percentage van routeopbrengst in overdrachtssysteem: {STRING} @@ -1553,7 +1553,7 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} tegel{P STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Bij slepen vaste afstand tussen seinen aanhouden: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Selecteer het gedrag van seinplaatsing wanneer je met Ctrl+slepen seinen plaatst. Indien dit uitgeschakeld is, dan worden seinen rondom tunnels of bruggen geplaatst om lange stukken te vermijden zonder seinen. Indien dit ingeschakeld is, dan worden seinen om de N tegels geplaatst, waardoor de uitlijning van de seinen op parallelle sporen makkelijker is STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Automatisch armseinen plaatsen voor: {STRING} -STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Stel het jaar waarin elektrische seinen zal worden gebruikt voor sporen. Voor dit jaar zal niet-elektrische seinen worden gebruikt (die exact dezelfde functie hebben, maar verschillend uiterlijk) +STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Stelt het jaar in waarin elektrische seinen worden gebruikt voor sporen. Eerder dan dit jaar worden niet-elektrische seinen gebruikt (die exact op dezelfde manier werken, maar een verschillend uiterlijk hebben). STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Seinenvenster inschakelen: {STRING} STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Een venster weergeven waar je de soorten seinen kunt kiezen om te bouwen in plaats van alleen bladeren door seintypes met Ctrl+klikken op gebouwde seinen STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Seintype dat standaard moet worden gebouwd: {STRING} @@ -1579,7 +1579,7 @@ STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Steden toestaan STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Steden mogen gelijkvloerse kruisingen bouwen: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Door deze optie in te schakelen, kunnen steden gelijkvloerse kruisingen bouwen. STR_CONFIG_SETTING_NOISE_LEVEL :Geluidsniveaucontrole door steden voor vliegvelden toestaan: {STRING} -STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Met deze instelling uitgeschakeld kunnen er twee luchthavens in elke stad zijn. Als deze instelling is ingeschakeld, wordt het aantal luchthavens in een stad beperkt door het lawaai tollerantie van de stad, die afhankelijk is van de bevolking en de luchthaven grootte en afstand +STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Als je deze instelling uitschakelt, mogen er twee luchthavens per stad zijn. Als je deze instelling ingeschakelt, wordt het aantal luchthavens in een stad beperkt door de lawaaitolerantie van de stad; deze is afhankelijk van de bevolking en de grootte en afstand van de luchthaven. STR_CONFIG_SETTING_TOWN_FOUNDING :Steden stichten in spel: {STRING} STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Wanneer deze instelling is ingeschakeld, kunnen spelers nieuwe steden stichten tijdens het spel. STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Verboden @@ -1599,9 +1599,9 @@ STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_ALL :Overal STR_CONFIG_SETTING_TOOLBAR_POS :Positie van algemene knoppenbalk: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Horizontale positie van de algemene taakbalk aan de bovenkant van het scherm. STR_CONFIG_SETTING_STATUSBAR_POS :Positie van de statusbalk: {STRING} -STR_CONFIG_SETTING_STATUSBAR_POS_HELPTEXT :De horizontale positie van de statusbalk aan de onderkant van het scherm. +STR_CONFIG_SETTING_STATUSBAR_POS_HELPTEXT :De horizontale positie van de statusbalk aan de onderkant van het scherm STR_CONFIG_SETTING_SNAP_RADIUS :Straal voor vensters vastmaken: {STRING} -STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Afstand tussen vensters voordat het venster wordt verplaatst wordt automatisch uitgelijnd naar de nabijgelegen vensters +STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Afstand tussen vensters voordat het venster automatisch wordt uitgelijnd op nabijgelegen vensters STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} pixel{P 0 "" s} STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :Uitgeschakeld STR_CONFIG_SETTING_SOFT_LIMIT :Maximumaantal (niet-blijvende) vensters: {STRING} @@ -1728,7 +1728,7 @@ STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Routezoeker voo STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Automatisch omdraaien bij seinen: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Treinen mogen keren bij een sein als ze hier lang staan wachten -STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Verander waarde +STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Instelwaarde wijzigen # Config errors STR_CONFIG_ERROR :{WHITE}Fout in het configuratiebestand... @@ -2139,7 +2139,7 @@ STR_NETWORK_CHAT_ALL :[Iedereen] {STR STR_NETWORK_CHAT_OSKTITLE :{BLACK}Geef tekst voor netwerkchat # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Geen netwerkapparaten gevonden of gecompileerd zonder ENABLE_NETWORK +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Geen netwerkapparaten gevonden STR_NETWORK_ERROR_NOSERVER :{WHITE}Kon geen enkel netwerkspel vinden STR_NETWORK_ERROR_NOCONNECTION :{WHITE}De server beantwoordde het verzoek niet STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Kan geen verbinding maken, je hebt niet dezelfde NewGRF-bestanden als de server @@ -2585,7 +2585,7 @@ STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Klik op STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Klik op de vracht om de leveranciers en klanten te zien STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Keten weergeven STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Industrieën weergeven die vracht leveren en accepteren -STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Link naar de kleine kaart +STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Koppeling naar de kleine kaart STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Weergegeven industrieën ook op de kleine kaart selecteren STR_INDUSTRY_CARGOES_SELECT_CARGO :{BLACK}Vracht selecteren STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}Vracht selecteren voor weergeven @@ -2760,7 +2760,7 @@ STR_FRAMETIME_CAPTION_GL_ROADVEHS :Wegvoertuigtikk STR_FRAMETIME_CAPTION_GL_SHIPS :Scheepstikken STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Vliegtuigtikken STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Wereldtikken -STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Link grafiekvertraging +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Vertraging koppelinggrafiek STR_FRAMETIME_CAPTION_DRAWING :Grafische elementen realiseren STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Wereldkijkvenster weergeven STR_FRAMETIME_CAPTION_VIDEO :Video-output @@ -3516,7 +3516,7 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}Hiermee STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}Hernoem type schip STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Hiermee hernoem je dit type vliegtuig -STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON :{BLACK}Verberg +STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON :{BLACK}Verbergen STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_TOGGLE_BUTTON :{BLACK}Verbergen STR_BUY_VEHICLE_SHIP_HIDE_TOGGLE_BUTTON :{BLACK}Verbergen STR_BUY_VEHICLE_AIRCRAFT_HIDE_TOGGLE_BUTTON :{BLACK}Verbergen diff --git a/src/lang/russian.txt b/src/lang/russian.txt index e6b7237b33..5106114e39 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2291,7 +2291,7 @@ STR_NETWORK_CHAT_ALL :[Всем] {STR STR_NETWORK_CHAT_OSKTITLE :{BLACK}Введите текст для сетевого сообщения # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Не найдены сетевые устройства или игра скомпилирована без поддержки сети +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Не найдены сетевые устройства STR_NETWORK_ERROR_NOSERVER :{WHITE}Не найдены сетевые игры STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Сервер не ответил на запрос STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Невозможно присоединиться из-за несоответствия NewGRF From 1585c12bb9b0306739320e70513195d11206da2c Mon Sep 17 00:00:00 2001 From: peter1138 Date: Thu, 21 Mar 2019 18:03:39 +0000 Subject: [PATCH 518/622] Fix 4da83d2f66: Remove measurement tooltips when completed. --- src/viewport.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/viewport.cpp b/src/viewport.cpp index 729dfca7b3..2cb3baa576 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -2514,7 +2514,7 @@ static inline void ShowMeasurementTooltips(StringID str, uint paramcount, const GuiShowTooltips(_thd.GetCallbackWnd(), str, paramcount, params, close_cond); } -void HideMeasurementTooltips() +static void HideMeasurementTooltips() { DeleteWindowById(WC_TOOLTIPS, 0); } @@ -3192,6 +3192,7 @@ EventState VpHandlePlaceSizingDrag() } SetTileSelectSize(1, 1); + HideMeasurementTooltips(); w->OnPlaceMouseUp(_thd.select_method, _thd.select_proc, _thd.selend, TileVirtXY(_thd.selstart.x, _thd.selstart.y), TileVirtXY(_thd.selend.x, _thd.selend.y)); return ES_HANDLED; From 2cf7ac2863028181bfdb5e3d63dc1f37bf604e72 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Wed, 20 Mar 2019 22:46:02 +0100 Subject: [PATCH 519/622] Fix #7391, 9b99b95: Don't invalidate go to depot orders of non-aircraft when invalidating hangar orders that happen to share IDs. This was caused because hangars are referred to by station ID, which is not unique with respect to depot IDs. --- src/order_backup.cpp | 1 + src/order_cmd.cpp | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/order_backup.cpp b/src/order_backup.cpp index 1d490e7264..38c4c8e676 100644 --- a/src/order_backup.cpp +++ b/src/order_backup.cpp @@ -263,6 +263,7 @@ CommandCost CmdClearOrderBackup(TileIndex tile, DoCommandFlag flags, uint32 p1, for (Order *order = ob->orders; order != NULL; order = order->next) { OrderType ot = order->GetType(); if (ot == OT_GOTO_DEPOT && (order->GetDepotActionType() & ODATFB_NEAREST_DEPOT) != 0) continue; + if (ot == OT_GOTO_DEPOT && hangar && !IsHangarTile(ob->tile)) continue; // Not an aircraft? Can't have a hangar order. if (ot == OT_IMPLICIT || (IsHangarTile(ob->tile) && ot == OT_GOTO_DEPOT && !hangar)) ot = OT_GOTO_STATION; if (ot == type && order->GetDestination() == destination) { /* Remove the order backup! If a station/depot gets removed, we can't/shouldn't restore those broken orders. */ diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index 007cfa5ec0..dae6e58ad6 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -1851,7 +1851,7 @@ void RemoveOrderFromAllVehicles(OrderType type, DestinationID destination, bool order = &v->current_order; if ((v->type == VEH_AIRCRAFT && order->IsType(OT_GOTO_DEPOT) && !hangar ? OT_GOTO_STATION : order->GetType()) == type && - v->current_order.GetDestination() == destination) { + (!hangar || v->type == VEH_AIRCRAFT) && v->current_order.GetDestination() == destination) { order->MakeDummy(); SetWindowDirty(WC_VEHICLE_VIEW, v->index); } @@ -1864,6 +1864,7 @@ restart: OrderType ot = order->GetType(); if (ot == OT_GOTO_DEPOT && (order->GetDepotActionType() & ODATFB_NEAREST_DEPOT) != 0) continue; + if (ot == OT_GOTO_DEPOT && hangar && v->type != VEH_AIRCRAFT) continue; // Not an aircraft? Can't have a hangar order. if (ot == OT_IMPLICIT || (v->type == VEH_AIRCRAFT && ot == OT_GOTO_DEPOT && !hangar)) ot = OT_GOTO_STATION; if (ot == type && order->GetDestination() == destination) { /* We want to clear implicit orders, but we don't want to make them From 054d05b1328e2c733d3910c9d55de724b61995dc Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 18 Mar 2019 01:47:11 +0000 Subject: [PATCH 520/622] Codechange: NewGRF features are documented in hex, so display as hex. --- src/newgrf.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 13d1377d07..75cc4b6354 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -2103,7 +2103,7 @@ static ChangeInfoResult CanalChangeInfo(uint id, int numinfo, int prop, ByteRead ChangeInfoResult ret = CIR_SUCCESS; if (id + numinfo > CF_END) { - grfmsg(1, "CanalChangeInfo: Canal feature %u is invalid, max %u, ignoring", id + numinfo, CF_END); + grfmsg(1, "CanalChangeInfo: Canal feature 0x%02X is invalid, max %u, ignoring", id + numinfo, CF_END); return CIR_INVALID_ID; } @@ -4530,11 +4530,11 @@ static void FeatureChangeInfo(ByteReader *buf) uint numinfo = buf->ReadByte(); uint engine = buf->ReadExtendedByte(); - grfmsg(6, "FeatureChangeInfo: feature %d, %d properties, to apply to %d+%d", + grfmsg(6, "FeatureChangeInfo: Feature 0x%02X, %d properties, to apply to %d+%d", feature, numprops, engine, numinfo); if (feature >= lengthof(handler) || handler[feature] == NULL) { - if (feature != GSF_CARGOES) grfmsg(1, "FeatureChangeInfo: Unsupported feature %d, skipping", feature); + if (feature != GSF_CARGOES) grfmsg(1, "FeatureChangeInfo: Unsupported feature 0x%02X, skipping", feature); return; } @@ -4651,7 +4651,7 @@ static void NewSpriteSet(ByteReader *buf) _cur.AddSpriteSets(feature, _cur.spriteid, first_set, num_sets, num_ents); - grfmsg(7, "New sprite set at %d of type %d, consisting of %d sets with %d views each (total %d)", + grfmsg(7, "New sprite set at %d of feature 0x%02X, consisting of %d sets with %d views each (total %d)", _cur.spriteid, feature, num_sets, num_ents, num_sets * num_ents ); @@ -5046,7 +5046,7 @@ static void NewSpriteGroup(ByteReader *buf) } /* Loading of Tile Layout and Production Callback groups would happen here */ - default: grfmsg(1, "NewSpriteGroup: Unsupported feature %d, skipping", feature); + default: grfmsg(1, "NewSpriteGroup: Unsupported feature 0x%02X, skipping", feature); } } } @@ -5580,7 +5580,7 @@ static void FeatureMapSpriteGroup(ByteReader *buf) uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "FeatureMapSpriteGroup")) return; - grfmsg(6, "FeatureMapSpriteGroup: Adding generic feature callback for feature %d", feature); + grfmsg(6, "FeatureMapSpriteGroup: Adding generic feature callback for feature 0x%02X", feature); AddGenericCallback(feature, _cur.grffile, _cur.spritegroups[groupid]); return; @@ -5589,7 +5589,7 @@ static void FeatureMapSpriteGroup(ByteReader *buf) /* Mark the feature as used by the grf (generic callbacks do not count) */ SetBit(_cur.grffile->grf_features, feature); - grfmsg(6, "FeatureMapSpriteGroup: Feature %d, %d ids", feature, idcount); + grfmsg(6, "FeatureMapSpriteGroup: Feature 0x%02X, %d ids", feature, idcount); switch (feature) { case GSF_TRAINS: @@ -5640,7 +5640,7 @@ static void FeatureMapSpriteGroup(ByteReader *buf) return; default: - grfmsg(1, "FeatureMapSpriteGroup: Unsupported feature %d, skipping", feature); + grfmsg(1, "FeatureMapSpriteGroup: Unsupported feature 0x%02X, skipping", feature); return; } } @@ -5683,7 +5683,7 @@ static void FeatureNewName(ByteReader *buf) uint16 endid = id + num; - grfmsg(6, "FeatureNewName: About to rename engines %d..%d (feature %d) in language 0x%02X", + grfmsg(6, "FeatureNewName: About to rename engines %d..%d (feature 0x%02X) in language 0x%02X", id, endid, feature, lang); for (; id < endid && buf->HasData(); id++) { From 3357cac847ac7637c3a27f1e399cba78ff304829 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 18 Mar 2019 02:05:06 +0000 Subject: [PATCH 521/622] Fix: Bounds check NewGRF feature. --- src/newgrf.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 75cc4b6354..2fc546d4eb 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -4530,6 +4530,11 @@ static void FeatureChangeInfo(ByteReader *buf) uint numinfo = buf->ReadByte(); uint engine = buf->ReadExtendedByte(); + if (feature >= GSF_END) { + grfmsg(1, "FeatureChangeInfo: Unsupported feature 0x%02X, skipping", feature); + return; + } + grfmsg(6, "FeatureChangeInfo: Feature 0x%02X, %d properties, to apply to %d+%d", feature, numprops, engine, numinfo); @@ -4649,6 +4654,12 @@ static void NewSpriteSet(ByteReader *buf) } uint16 num_ents = buf->ReadExtendedByte(); + if (feature >= GSF_END) { + _cur.skip_sprites = num_sets * num_ents; + grfmsg(1, "NewSpriteSet: Unsupported feature 0x%02X, skipping %d sprites", feature, _cur.skip_sprites); + return; + } + _cur.AddSpriteSets(feature, _cur.spriteid, first_set, num_sets, num_ents); grfmsg(7, "New sprite set at %d of feature 0x%02X, consisting of %d sets with %d views each (total %d)", @@ -4743,6 +4754,11 @@ static void NewSpriteGroup(ByteReader *buf) SpriteGroup *act_group = NULL; uint8 feature = buf->ReadByte(); + if (feature >= GSF_END) { + grfmsg(1, "NewSpriteGroup: Unsupported feature 0x%02X, skipping", feature); + return; + } + uint8 setid = buf->ReadByte(); uint8 type = buf->ReadByte(); @@ -5573,6 +5589,11 @@ static void FeatureMapSpriteGroup(ByteReader *buf) uint8 feature = buf->ReadByte(); uint8 idcount = buf->ReadByte(); + if (feature >= GSF_END) { + grfmsg(1, "FeatureMapSpriteGroup: Unsupported feature 0x%02X, skipping", feature); + return; + } + /* If idcount is zero, this is a feature callback */ if (idcount == 0) { /* Skip number of cargo ids? */ @@ -5667,6 +5688,11 @@ static void FeatureNewName(ByteReader *buf) bool new_scheme = _cur.grffile->grf_version >= 7; uint8 feature = buf->ReadByte(); + if (feature >= GSF_END) { + grfmsg(1, "FeatureNewName: Unsupported feature 0x%02X, skipping", feature); + return; + } + uint8 lang = buf->ReadByte(); uint8 num = buf->ReadByte(); bool generic = HasBit(lang, 7); From d7553759661e5c32937ae37b19f0aae1652cb2d7 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 22 Mar 2019 19:45:43 +0100 Subject: [PATCH 522/622] Update: Translations from eints luxembourgish: 31 changes by Phreeze croatian: 2 changes by VoyagerOne --- src/lang/croatian.txt | 3 ++- src/lang/luxembourgish.txt | 32 +++++++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 8bc45b1699..831b159fd5 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -2235,7 +2235,7 @@ STR_NETWORK_CHAT_ALL :[Svima] {STRING STR_NETWORK_CHAT_OSKTITLE :{BLACK}Upišite tekst mrežnog razgovora # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Nisu pronađeni mrežni uređaji ili je kompajlirano bez opcije ENABLE_NETWORK +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Nisu pronađeni mrežni uređaji STR_NETWORK_ERROR_NOSERVER :{WHITE}Niti jedna mrežna igra nije pronađena STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Poslužitelj nije odgovorio na zahtjev STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Spajanje nije moguće zbog razlike u NewGRF datotekama @@ -3128,6 +3128,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF ' STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Informacija o teretu/remontu za '{1:ENGINE}' je različita od kupovne liste nakon izgradnje. Zbog toga bi automatsko obnavljanje/zamjena mogla biti neuspješna STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{G=male}{WHITE}'{1:STRING}' je uzrokovao beskonačnu petlju u pozivu za povrat produkcije STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Povratnica {1:HEX} je vratio nepoznat/nemoguć rezultat {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' callback funkcija za proizvodnju je vratila nevažeći teret na {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index bfebe82f87..4f2d85377f 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -189,6 +189,7 @@ STR_COLOUR_ORANGE :Orange STR_COLOUR_BROWN :Brong STR_COLOUR_GREY :Gro STR_COLOUR_WHITE :Wäiss +STR_COLOUR_RANDOM :Zoufälleg # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -475,6 +476,7 @@ STR_ABOUT_MENU_SCREENSHOT :Screenshot (Ctr STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Voll eragezoomte Screenshot STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Standard Zoom Screenshot STR_ABOUT_MENU_GIANT_SCREENSHOT :Screenshot vun der ganzer Kaart +STR_ABOUT_MENU_SHOW_FRAMERATE :Biller pro Sekonn uweisen STR_ABOUT_MENU_ABOUT_OPENTTD :Iwwert 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite Alignéirer STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Zeechen-Boxen un/aus @@ -650,6 +652,7 @@ STR_MUSIC_RULER_MARKER :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Keng Musik verfügbar STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Nummer STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Titel @@ -674,7 +677,9 @@ STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTB STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Lidder Index STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Programm - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Läschen +STR_PLAYLIST_CHANGE_SET :{BLACK}Set wiesselen STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}De gewielte Program reseten (nëmmen Benotzerdéf.1 oder Benotzerdéf.2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Wiessel d'Musikselektioun op en anert installéiert Set STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Klick op d'Lidd fir et zum aktuellen Program dobäi zesetzen (nëmme Benotzerdéf.1 oder Benotzerdéf.2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klick op d'Lidd fir et vum aktuellen Programm ze läschen (Benotzerdefinéiert 1 an 2 nëmmen) @@ -810,6 +815,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Manager) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} huet Kontruktioun vun der Stad {TOWN} gesponsort! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}En neit Duerf mam Numm {TOWN} gouf gegrënnt! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}{STRING} gëtt bei {TOWN} gebaut! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}{STRING} gëtt bei {TOWN} geplanzt! @@ -985,6 +991,8 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Duebel STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Véierfach +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Véierfach STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basis Grafikset STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Wielt de Basis Grafikset dee soll benotzt ginn @@ -1168,6 +1176,7 @@ STR_CONFIG_SETTING_AUTOSLOPE :Erlaabt Landfor STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Erlaabt Terraintransformatioun ënnert Gebaier an Schinnen ouni dës ewechzehuelen STR_CONFIG_SETTING_CATCHMENT :Erlaabt méi realistësch Einzugsberäicher: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Statiounen a Fluchhäfen hunn verschidde grouss Einzugsberäicher +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Gare vun der Firma kënnen Industrie beliwwere mat neutrale Statiounen: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE :Erlaabt d'Ewechhuelen vu méi Stroossen, Brécken, etc. vun der Stad: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Mach et méi einfach fir Infrastruktur oder Gebaier ewechzehuelen déi enger Stad gehéiren STR_CONFIG_SETTING_TRAIN_LENGTH :Maximal Längt vun Zich: {STRING} @@ -1337,6 +1346,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Faarf vum Terra STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Gréng STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Donkelgréng STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Mof +STR_CONFIG_SETTING_SCROLLMODE_LMB :Kaart mat der lénker Maustast bewegen STR_CONFIG_SETTING_SMOOTH_SCROLLING :Feine Scrolling: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Kontrolléiert wéi d'Haptusiicht op eng bestëmmten Positioun scrollt, wann een op déi kléng Kaart klickt oder en Befehl fir ob en spezifescht Objet ze scrollen gëtt. Wann ugeschalt, gëtt bis dohin gescrollt, wann ausgeschalt, spréngt d'Vue op den Zielobjet STR_CONFIG_SETTING_MEASURE_TOOLTIP :Weis en Mooss-Tooltip wann verschidde Bau-Tools benotzt ginn: {STRING} @@ -1559,6 +1569,8 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Wann dës Astel STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Verbueden STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Erlaabt STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Erlaabt, custom Stad-Layout +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Duerfwuerengeneratioun: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Bamplazéirung: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Kontrolléiert zoufälleg Optauche vu Beem während dem Spill. Dëst kann Industrie beaflossen, déi op d'Wuessen vu Beem ugewisen sinn @@ -1579,7 +1591,7 @@ STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Unzuel un net-g STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA} STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :ausgeschalt STR_CONFIG_SETTING_ZOOM_MIN :Maximalen Ranzoom Level: {STRING} -STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Maximal Ranzoomstuf fir Usiichtsfënsteren. Et gëtt méi Späicher gebraucht wann d'Stufen ze grouss ginn +STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Maximal Razoomstuf fir Usiichtsfënsteren. Et gëtt méi Späicher gebraucht wann d'Stufen ze grouss ginn STR_CONFIG_SETTING_ZOOM_MAX :Maximalen Rauszoom Level: {STRING} STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT :Maximal Rauszoom-Stuf fir Usiichtsfënsteren. Méi grouss Rauszoom-Stufen kënnen Ruckeler verursaachen STR_CONFIG_SETTING_ZOOM_LVL_MIN :4x @@ -1800,6 +1812,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Wiessel STR_CHEAT_SETUP_PROD :{LTBLUE}Erlaabt d'ännere vun de Produktiounswäerter: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Neie Faarfschema STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Weis generell Faarfschemen STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Weis Zuch Faarfschemen @@ -2683,9 +2696,21 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 D'OpenTTD team # Framerate display window +STR_FRAMERATE_AVERAGE :{WHITE}Mëttel +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} Biller/s +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} Biller/s +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Stroossegefierer Ticken: +STR_FRAMERATE_DRAWING :{BLACK}Graphikrendering: +STR_FRAMERATE_VIDEO :{BLACK}Video-output: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Stroossegefierer Ticken +STR_FRAMETIME_CAPTION_GL_SHIPS :Schëffticker +STR_FRAMETIME_CAPTION_SOUND :Soundmixing ############ End of leave-in-this-order @@ -2828,6 +2853,7 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versioun STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. kompatibel Versioun: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palette: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Legacy (W) STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameter: {SILVER}{STRING} STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Keng Info verfügbar @@ -2909,6 +2935,7 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Lanscht d'Enn v STR_NEWGRF_ERROR_GRM_FAILED :Ugefroten GRF Ressource net verfügbar (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} gouf ausgeschalt vun {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Invalid/onbekannten Sprite Layout Format (Sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Zevill Elementer an der Eegeschaftewert-Lëscht (Sprite {3:NUM}, Eegeschaft {4:HEX}) # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Opgepasst! @@ -3341,6 +3368,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Gruppen STR_GROUP_CREATE_TOOLTIP :{BLACK}Klick fir eng Grupp ze maachen STR_GROUP_DELETE_TOOLTIP :{BLACK}Déi ungewielte Grupp läschen STR_GROUP_RENAME_TOOLTIP :{BLACK}Déi ungewielte Grupp ëmbenennen +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Wiessel d'Faarwschema vun dem ausgewielte Grupp STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Klick fir déi Grupp vum globalen "Autoersetzen" auszeschléissen STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Grupp läschen @@ -4215,6 +4243,7 @@ STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... d'St STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... Strooss geet an dei falsch Richtung STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... Duerchfahrtstops kënnen keng Kéiren hunn STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... Duerchfahrtstops kënnen keng Kräizungen hunn +STR_ERROR_DRIVE_THROUGH_ON_ONEWAY_ROAD :{WHITE}... Einbahnstrooss oder blockéiert # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Kann den Deel vun der Gare net ofrappen... @@ -4466,6 +4495,7 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Original Transp STR_BASESOUNDS_WIN_DESCRIPTION :Original Transport Tycoon Deluxe Windows Editioun Sound. STR_BASESOUNDS_NONE_DESCRIPTION :E Soundpack ouni iergendee Sound. STR_BASEMUSIC_WIN_DESCRIPTION :Original Transport Tycoon Deluxe Windows Editioun Musik. +STR_BASEMUSIC_TTO_DESCRIPTION :Original Transport Tycoon (Original/World Editor) DOS Editioun-Musik. STR_BASEMUSIC_NONE_DESCRIPTION :E Musikpack ouni aktuell Musik. ##id 0x2000 From 4feea8db67ca6d50d6bb02718ba38f0081df4649 Mon Sep 17 00:00:00 2001 From: PeterN Date: Sat, 23 Mar 2019 17:59:19 +0000 Subject: [PATCH 523/622] Fix: Filtered file list did not scroll properly. (#7402) --- src/fios_gui.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index fd9e0c06a8..a4eb12e3a2 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -437,12 +437,15 @@ public: GfxFillRect(r.left + 1, r.top + 1, r.right, r.bottom, PC_BLACK); uint y = r.top + WD_FRAMERECT_TOP; - for (uint pos = this->vscroll->GetPosition(); pos < this->fios_items.Length(); pos++) { - if (!this->fios_items_shown[pos]) { + uint scroll_pos = this->vscroll->GetPosition(); + for (uint row = 0; row < this->fios_items.Length(); row++) { + if (!this->fios_items_shown[row]) { /* The current item is filtered out : we do not show it */ + scroll_pos++; continue; } - const FiosItem *item = this->fios_items.Get(pos); + if (row < scroll_pos) continue; + const FiosItem *item = this->fios_items.Get(row); if (item == this->selected) { GfxFillRect(r.left + 1, y, r.right, y + this->resize.step_height, PC_DARK_BLUE); From 685f822c63d642372157895f3975c5ac25546c40 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 23 Mar 2019 19:45:42 +0100 Subject: [PATCH 524/622] Update: Translations from eints finnish: 13 changes by hpiirai danish: 2 changes by nielsmh --- src/lang/danish.txt | 3 ++- src/lang/finnish.txt | 25 +++++++++++++------------ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 5adbdff762..c9ed344aa3 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -2139,7 +2139,7 @@ STR_NETWORK_CHAT_ALL :[Alle] {STRING} STR_NETWORK_CHAT_OSKTITLE :{BLACK}Skriv tekst i netværks-chat # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Ingen netværksheder fundet eller kompilet uden ENABLE_NETWORK +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Ingen netværksheder fundet STR_NETWORK_ERROR_NOSERVER :{WHITE}Kunne ikke finde nogen netværksspil STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Serveren besvarede ikke denne forspørgsel STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Kunne ikke tilslutte grundet NewGRF ulighed @@ -3032,6 +3032,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF ' STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Fragt-/ombygningsinformation for '{1:ENGINE}' afviger fra indkøbslisten efter konstruktion. Dette kan medføre, at autofornyelse ikke fungerer korrekt. STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' forårsagede en uendelig løkke i produktions-callback'en. STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback {1:HEX} returnerede ukendt/ugyldigt resultat {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' returnerede ugyldig godstype i produktion-callback ved {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 3cdf100dd9..4dd1efa4ae 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -785,12 +785,12 @@ STR_NEWS_MESSAGE_CAPTION :{WHITE}Viesti STR_NEWS_CUSTOM_ITEM :{BIG_FONT}{BLACK}{STRING} STR_NEWS_FIRST_TRAIN_ARRIVAL :{BIG_FONT}{BLACK}Asukkaat juhlivat . . .{}Ensimmäinen juna saapuu asemalle {STATION}! -STR_NEWS_FIRST_BUS_ARRIVAL :{BIG_FONT}{BLACK}Kaupunkilaiset juhlivat . . .{}{STATION} vastaanottaa ensimmäisen linja-auton! -STR_NEWS_FIRST_TRUCK_ARRIVAL :{BIG_FONT}{BLACK}Kaupunkilaiset juhlivat . . .{}{STATION} vastaanottaa ensimmäisen kuorma-auton! -STR_NEWS_FIRST_PASSENGER_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Kaupunkilaiset juhlivat . . .{}{STATION} vastaanottaa ensimmäisen raitiovaunun! -STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Kaupunkilaiset juhlivat . . .{}{STATION} vastaanottaa ensimmäisen rahtiraitiovaunun! -STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Kaupunkilaiset juhlivat . . .{}{STATION} vastaanottaa ensimmäisen laivan! -STR_NEWS_FIRST_AIRCRAFT_ARRIVAL :{BIG_FONT}{BLACK}Kaupunkilaiset juhlivat . . .{}{STATION} vastaanottaa ensimmäisen lentokoneen! +STR_NEWS_FIRST_BUS_ARRIVAL :{BIG_FONT}{BLACK}Asukkaat juhlivat . . .{}{STATION} vastaanottaa ensimmäisen linja-auton! +STR_NEWS_FIRST_TRUCK_ARRIVAL :{BIG_FONT}{BLACK}Asukkaat juhlivat . . .{}{STATION} vastaanottaa ensimmäisen kuorma-auton! +STR_NEWS_FIRST_PASSENGER_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Asukkaat juhlivat . . .{}{STATION} vastaanottaa ensimmäisen raitiovaunun! +STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Asukkaat juhlivat . . .{}{STATION} vastaanottaa ensimmäisen rahtiraitiovaunun! +STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Asukkaat juhlivat . . .{}{STATION} vastaanottaa ensimmäisen laivan! +STR_NEWS_FIRST_AIRCRAFT_ARRIVAL :{BIG_FONT}{BLACK}Asukkaat juhlivat . . .{}{STATION} vastaanottaa ensimmäisen lentokoneen! STR_NEWS_TRAIN_CRASH :{BIG_FONT}{BLACK}Junaonnettomuus!{}{COMMA} kuolee törmäyksen jälkeisessä tulipallossa. STR_NEWS_ROAD_VEHICLE_CRASH_DRIVER :{BIG_FONT}{BLACK}Tasoristeysturma!{}Kuljettaja kuolee junan ja auton törmäyksen jälkeisessä tulipallossa @@ -1626,7 +1626,7 @@ STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :Tavallinen STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Nopea STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Erittäin nopea STR_CONFIG_SETTING_LARGER_TOWNS :Kaupunkien osuus: {STRING} -STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Suurkaupungiksi muuttuvien kaupunkien määrä, eli suurempana aloittavat ja nopeammin kasvavat kaupungit +STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Kaupunkien määrä: kaupungit ovat isompia jo alussa ja kasvavat nopeammin kuin muut kunnat STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 / {COMMA} STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Ei yhtään STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Kasvukerroin alussa: {STRING} @@ -2139,7 +2139,7 @@ STR_NETWORK_CHAT_ALL :[Kaikki] {STRIN STR_NETWORK_CHAT_OSKTITLE :{BLACK}Syötä teksti verkkokeskustelua varten # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Verkkolaitteita ei löytynyt tai käännetty ilman ENABLE_NETWORK-valintaa +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Verkkolaitteita ei löytynyt STR_NETWORK_ERROR_NOSERVER :{WHITE}Verkkopelejä ei löytynyt STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Palvelin ei vastannut pyyntöön STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Yhteyden muodostaminen epäonnistui NewGRF-virheen vuoksi @@ -2536,7 +2536,7 @@ STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Haluatko # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Luo kuntia STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Uusi kunta -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Perusta uusi kaupunki. Shift+Klik näyttää vain kustannusarvion +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Perusta uusi kunta. Shift+Klik näyttää vain kustannusarvion STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Satunnainen kunta STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Perusta kunta satunnaiseen paikkaan STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Monta satunnaista kuntaa @@ -2544,7 +2544,7 @@ STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Täytä STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Kunnan nimi: STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Syötä kunnan nimi -STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Syötä kaupungin nimi napsauttamalla +STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Syötä kunnan nimi napsauttamalla STR_FOUND_TOWN_NAME_RANDOM_BUTTON :{BLACK}Satunnainen nimi STR_FOUND_TOWN_NAME_RANDOM_TOOLTIP :{BLACK}Arvo uusi satunnainen nimi @@ -2804,7 +2804,7 @@ STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}Maailman STR_MAPGEN_MAPSIZE :{BLACK}Kartan koko: STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Valitse kartan koko ruutuina. Saatavilla olevien ruutujen määrä on hieman alhaisempi STR_MAPGEN_BY :{BLACK}× -STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Kaupunkien määrä: +STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Kuntien määrä: STR_MAPGEN_DATE :{BLACK}Päivämäärä: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Teollisuuden määrä: STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Suurin sallittu kartan korkeus: @@ -3032,6 +3032,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Kulkuneuvon ”{1:ENGINE}” rahti-/uudelleensovitustiedot ovat toiset kuin ostolistassa rakentamisen jälkeen. Tämä voi johtaa uudelleensovituksen epäonnistumiseen, kun kulkuneuvo uudistetaan tai korvataan automaattisesti STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}”{1:STRING}” aiheutti ikuisen silmukan tuotannon takaisinkutsussa STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback-funktio {1:HEX} palautti tuntemattoman/kelvottoman tuloksen {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}”{1:STRING}” palautti virheellisen rahtityypin tuotannon takaisinkutsun kohdassa {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : @@ -3134,7 +3135,7 @@ STR_GOALS_SPECTATOR_NONE :{ORANGE}- Ei sa STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} STR_GOALS_COMPANY_TITLE :{BLACK}Yhtiön tavoitteet: -STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Keskitä päänäkymä teollisuuteen/kaupunkiin/ruutuun napsauttamalla tavoitetta. Ctrl+Klik avaa uuden näkymän teollisuuden/kaupungin/ruudun sijaintiin +STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Keskitä päänäkymä laitokseen/kuntaan/ruutuun napsauttamalla tavoitetta. Ctrl+Klik avaa uuden näkymän laitoksen/kunnan/ruudun sijaintiin # Goal question window STR_GOAL_QUESTION_CAPTION_QUESTION :Kysymys From 31260e66252fb4d0dda6f992520faeeb96929cfe Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Sun, 24 Mar 2019 12:35:19 +0000 Subject: [PATCH 525/622] Cleanup: Stop OSX compilation complaining about C++11 extensions --- config.lib | 3 +++ 1 file changed, 3 insertions(+) diff --git a/config.lib b/config.lib index 026f7bfb3c..f65aaa535e 100644 --- a/config.lib +++ b/config.lib @@ -1321,6 +1321,9 @@ make_compiler_cflags() { # it happens when using the FOR_ALL_WINDOWS_FROM_BACK_FROM macro flags="$flags -Wno-self-assign" + # warning: is a C++11 extension + flags="$flags -Wno-c++11-extensions" + if [ "$cc_version" -lt "30" ]; then # warning: equality comparison with extraneous parentheses flags="$flags -Wno-parentheses" From af7d9020a15c1b1a14b3981ac73c70d2e58cc877 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Sun, 3 Mar 2019 22:25:13 +0000 Subject: [PATCH 526/622] Codechange: Use override specifer for overriding member declarations This is a C++11 feature that allows the compiler to check that a virtual member declaration overrides a base-class member with the same signature. Also src/blitter/32bpp_anim_sse4.hpp +38 is no longer erroneously marked as virtual despite being a template. --- src/ai/ai_config.hpp | 12 +-- src/ai/ai_gui.cpp | 2 +- src/ai/ai_instance.hpp | 12 +-- src/ai/ai_scanner.hpp | 24 ++--- src/base_media_base.h | 2 +- src/blitter/32bpp_anim.hpp | 30 +++--- src/blitter/32bpp_anim_sse2.hpp | 6 +- src/blitter/32bpp_anim_sse4.hpp | 10 +- src/blitter/32bpp_base.hpp | 26 +++--- src/blitter/32bpp_optimized.hpp | 8 +- src/blitter/32bpp_simple.hpp | 10 +- src/blitter/32bpp_sse2.hpp | 8 +- src/blitter/32bpp_sse4.hpp | 6 +- src/blitter/32bpp_ssse3.hpp | 6 +- src/blitter/8bpp_base.hpp | 28 +++--- src/blitter/8bpp_optimized.hpp | 8 +- src/blitter/8bpp_simple.hpp | 8 +- src/blitter/null.hpp | 36 ++++---- src/fileio_func.h | 2 +- src/fios.cpp | 4 +- src/game/game_config.hpp | 2 +- src/game/game_info.hpp | 2 +- src/game/game_instance.hpp | 12 +-- src/game/game_scanner.hpp | 24 ++--- src/game/game_text.cpp | 4 +- src/goal_gui.cpp | 20 ++-- src/ground_vehicle.hpp | 4 +- src/music/allegro_m.h | 16 ++-- src/music/bemidi.h | 16 ++-- src/music/cocoa_m.h | 16 ++-- src/music/dmusic.h | 16 ++-- src/music/extmidi.h | 16 ++-- src/music/fluidsynth.h | 16 ++-- src/music/null_m.h | 16 ++-- src/music/os2_m.h | 16 ++-- src/music/qtmidi.h | 16 ++-- src/music/win32_m.h | 16 ++-- src/network/network_client.cpp | 4 +- src/network/network_content_gui.cpp | 2 +- src/network/network_gui.cpp | 8 +- src/network/network_server.cpp | 4 +- src/newgrf_airport.cpp | 10 +- src/newgrf_airporttiles.h | 6 +- src/newgrf_canal.cpp | 8 +- src/newgrf_cargo.cpp | 2 +- src/newgrf_config.cpp | 2 +- src/newgrf_engine.h | 10 +- src/newgrf_generic.cpp | 6 +- src/newgrf_gui.cpp | 2 +- src/newgrf_house.h | 8 +- src/newgrf_industries.h | 10 +- src/newgrf_industrytiles.h | 8 +- src/newgrf_object.h | 6 +- src/newgrf_railtype.h | 8 +- src/newgrf_station.h | 10 +- src/newgrf_town.h | 2 +- src/os/macosx/crashlog_osx.cpp | 6 +- src/os/unix/crashlog_unix.cpp | 6 +- src/os/windows/crashlog_win.cpp | 12 +-- src/saveload/saveload.cpp | 28 +++--- src/script/api/script_text.hpp | 2 +- src/script/script_scanner.hpp | 2 +- src/settings_gui.cpp | 2 +- src/sound/allegro_s.h | 8 +- src/sound/cocoa_s.h | 8 +- src/sound/null_s.h | 8 +- src/sound/sdl_s.h | 8 +- src/sound/win32_s.h | 8 +- src/sound/xaudio2_s.h | 8 +- src/station_base.h | 12 +-- src/strgen/strgen.cpp | 6 +- src/strings.cpp | 10 +- src/table/newgrf_debug_data.h | 136 ++++++++++++++-------------- src/thread/thread_os2.cpp | 14 +-- src/thread/thread_pthread.cpp | 14 +-- src/thread/thread_win32.cpp | 16 ++-- src/toolbar_gui.cpp | 14 +-- src/video/allegro_v.h | 20 ++-- src/video/cocoa/cocoa_v.h | 20 ++-- src/video/dedicated_v.h | 18 ++-- src/video/null_v.h | 18 ++-- src/video/sdl_v.h | 24 ++--- src/video/win32_v.h | 26 +++--- src/waypoint_base.h | 12 +-- src/widget_type.h | 72 +++++++-------- 85 files changed, 565 insertions(+), 565 deletions(-) diff --git a/src/ai/ai_config.hpp b/src/ai/ai_config.hpp index 30c6f84bbd..9f667a6127 100644 --- a/src/ai/ai_config.hpp +++ b/src/ai/ai_config.hpp @@ -30,9 +30,9 @@ public: class AIInfo *GetInfo() const; - /* virtual */ int GetSetting(const char *name) const; - /* virtual */ void SetSetting(const char *name, int value); - /* virtual */ void AddRandomDeviation(); + int GetSetting(const char *name) const override; + void SetSetting(const char *name, int value) override; + void AddRandomDeviation() override; /** * When ever the AI Scanner is reloaded, all infos become invalid. This @@ -45,9 +45,9 @@ public: bool ResetInfo(bool force_exact_match); protected: - /* virtual */ void PushExtraConfigList(); - /* virtual */ void ClearConfigList(); - /* virtual */ ScriptInfo *FindInfo(const char *name, int version, bool force_exact_match); + void PushExtraConfigList() override; + void ClearConfigList() override; + ScriptInfo *FindInfo(const char *name, int version, bool force_exact_match) override; }; #endif /* AI_CONFIG_HPP */ diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 8e7e12a63b..5a4c772468 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -646,7 +646,7 @@ struct ScriptTextfileWindow : public TextfileWindow { this->LoadTextfile(textfile, (slot == OWNER_DEITY) ? GAME_DIR : AI_DIR); } - /* virtual */ void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget == WID_TF_CAPTION) { SetDParam(0, (slot == OWNER_DEITY) ? STR_CONTENT_TYPE_GAME_SCRIPT : STR_CONTENT_TYPE_AI); diff --git a/src/ai/ai_instance.hpp b/src/ai/ai_instance.hpp index 204bf9712a..06998558b3 100644 --- a/src/ai/ai_instance.hpp +++ b/src/ai/ai_instance.hpp @@ -25,14 +25,14 @@ public: */ void Initialize(class AIInfo *info); - /* virtual */ int GetSetting(const char *name); - /* virtual */ ScriptInfo *FindLibrary(const char *library, int version); + int GetSetting(const char *name) override; + ScriptInfo *FindLibrary(const char *library, int version) override; private: - /* virtual */ void RegisterAPI(); - /* virtual */ void Died(); - /* virtual */ CommandCallback *GetDoCommandCallback(); - /* virtual */ void LoadDummyScript(); + void RegisterAPI() override; + void Died() override; + CommandCallback *GetDoCommandCallback() override; + void LoadDummyScript() override; }; #endif /* AI_INSTANCE_HPP */ diff --git a/src/ai/ai_scanner.hpp b/src/ai/ai_scanner.hpp index d8e8a6993d..dafc340beb 100644 --- a/src/ai/ai_scanner.hpp +++ b/src/ai/ai_scanner.hpp @@ -19,7 +19,7 @@ public: AIScannerInfo(); ~AIScannerInfo(); - /* virtual */ void Initialize(); + void Initialize() override; /** * Select a random AI. @@ -42,11 +42,11 @@ public: void SetDummyAI(class AIInfo *info); protected: - /* virtual */ void GetScriptName(ScriptInfo *info, char *name, const char *last); - /* virtual */ const char *GetFileName() const { return PATHSEP "info.nut"; } - /* virtual */ Subdirectory GetDirectory() const { return AI_DIR; } - /* virtual */ const char *GetScannerName() const { return "AIs"; } - /* virtual */ void RegisterAPI(class Squirrel *engine); + void GetScriptName(ScriptInfo *info, char *name, const char *last) override; + const char *GetFileName() const override { return PATHSEP "info.nut"; } + Subdirectory GetDirectory() const override { return AI_DIR; } + const char *GetScannerName() const override { return "AIs"; } + void RegisterAPI(class Squirrel *engine) override; private: AIInfo *info_dummy; ///< The dummy AI. @@ -54,7 +54,7 @@ private: class AIScannerLibrary : public ScriptScanner { public: - /* virtual */ void Initialize(); + void Initialize() override; /** * Find a library in the pool. @@ -65,11 +65,11 @@ public: class AILibrary *FindLibrary(const char *library, int version); protected: - /* virtual */ void GetScriptName(ScriptInfo *info, char *name, const char *last); - /* virtual */ const char *GetFileName() const { return PATHSEP "library.nut"; } - /* virtual */ Subdirectory GetDirectory() const { return AI_LIBRARY_DIR; } - /* virtual */ const char *GetScannerName() const { return "AI Libraries"; } - /* virtual */ void RegisterAPI(class Squirrel *engine); + void GetScriptName(ScriptInfo *info, char *name, const char *last) override; + const char *GetFileName() const override { return PATHSEP "library.nut"; } + Subdirectory GetDirectory() const override { return AI_LIBRARY_DIR; } + const char *GetScannerName() const override { return "AI Libraries"; } + void RegisterAPI(class Squirrel *engine) override; }; #endif /* AI_SCANNER_HPP */ diff --git a/src/base_media_base.h b/src/base_media_base.h index b040abcf9d..bcffa11a08 100644 --- a/src/base_media_base.h +++ b/src/base_media_base.h @@ -176,7 +176,7 @@ protected: static Tbase_set *duplicate_sets; ///< All sets that aren't available, but needed for not downloading base sets when a newer version than the one on BaNaNaS is loaded. static const Tbase_set *used_set; ///< The currently used set - /* virtual */ bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename); + bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) override; /** * Get the extension that is used to identify this set. diff --git a/src/blitter/32bpp_anim.hpp b/src/blitter/32bpp_anim.hpp index ecf6dcfca0..f8fd892813 100644 --- a/src/blitter/32bpp_anim.hpp +++ b/src/blitter/32bpp_anim.hpp @@ -37,21 +37,21 @@ public: ~Blitter_32bppAnim(); - /* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom); - /* virtual */ void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal); - /* virtual */ void SetPixel(void *video, int x, int y, uint8 colour); - /* virtual */ void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash); - /* virtual */ void DrawRect(void *video, int width, int height, uint8 colour); - /* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height); - /* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height); - /* virtual */ void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y); - /* virtual */ int BufferSize(int width, int height); - /* virtual */ void PaletteAnimate(const Palette &palette); - /* virtual */ Blitter::PaletteAnimation UsePaletteAnimation(); + void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; + void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal) override; + void SetPixel(void *video, int x, int y, uint8 colour) override; + void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash) override; + void DrawRect(void *video, int width, int height, uint8 colour) override; + void CopyFromBuffer(void *video, const void *src, int width, int height) override; + void CopyToBuffer(const void *video, void *dst, int width, int height) override; + void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y) override; + int BufferSize(int width, int height) override; + void PaletteAnimate(const Palette &palette) override; + Blitter::PaletteAnimation UsePaletteAnimation() override; - /* virtual */ const char *GetName() { return "32bpp-anim"; } - /* virtual */ int GetBytesPerPixel() { return 6; } - /* virtual */ void PostResize(); + const char *GetName() override { return "32bpp-anim"; } + int GetBytesPerPixel() override { return 6; } + void PostResize() override; /** * Look up the colour in the current palette. @@ -77,7 +77,7 @@ public: class FBlitter_32bppAnim : public BlitterFactory { public: FBlitter_32bppAnim() : BlitterFactory("32bpp-anim", "32bpp Animation Blitter (palette animation)") {} - /* virtual */ Blitter *CreateInstance() { return new Blitter_32bppAnim(); } + Blitter *CreateInstance() override { return new Blitter_32bppAnim(); } }; #endif /* BLITTER_32BPP_ANIM_HPP */ diff --git a/src/blitter/32bpp_anim_sse2.hpp b/src/blitter/32bpp_anim_sse2.hpp index 0d4a5f1e65..aed11026c0 100644 --- a/src/blitter/32bpp_anim_sse2.hpp +++ b/src/blitter/32bpp_anim_sse2.hpp @@ -28,15 +28,15 @@ /** A partially 32 bpp blitter with palette animation. */ class Blitter_32bppSSE2_Anim : public Blitter_32bppAnim { public: - /* virtual */ void PaletteAnimate(const Palette &palette); - /* virtual */ const char *GetName() { return "32bpp-sse2-anim"; } + void PaletteAnimate(const Palette &palette) override; + const char *GetName() override { return "32bpp-sse2-anim"; } }; /** Factory for the partially 32bpp blitter with animation. */ class FBlitter_32bppSSE2_Anim : public BlitterFactory { public: FBlitter_32bppSSE2_Anim() : BlitterFactory("32bpp-sse2-anim", "32bpp partially SSE2 Animation Blitter (palette animation)", HasCPUIDFlag(1, 3, 26)) {} - /* virtual */ Blitter *CreateInstance() { return new Blitter_32bppSSE2_Anim(); } + Blitter *CreateInstance() override { return new Blitter_32bppSSE2_Anim(); } }; #endif /* WITH_SSE */ diff --git a/src/blitter/32bpp_anim_sse4.hpp b/src/blitter/32bpp_anim_sse4.hpp index 5ff1fb01be..2fefd3001f 100644 --- a/src/blitter/32bpp_anim_sse4.hpp +++ b/src/blitter/32bpp_anim_sse4.hpp @@ -35,19 +35,19 @@ private: public: template - /* virtual */ void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom); - /* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom); - /* virtual */ Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) { + void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom); + void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; + Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) override { return Blitter_32bppSSE_Base::Encode(sprite, allocator); } - /* virtual */ const char *GetName() { return "32bpp-sse4-anim"; } + const char *GetName() override { return "32bpp-sse4-anim"; } }; /** Factory for the SSE4 32 bpp blitter (with palette animation). */ class FBlitter_32bppSSE4_Anim: public BlitterFactory { public: FBlitter_32bppSSE4_Anim() : BlitterFactory("32bpp-sse4-anim", "SSE4 Blitter (palette animation)", HasCPUIDFlag(1, 2, 19)) {} - /* virtual */ Blitter *CreateInstance() { return new Blitter_32bppSSE4_Anim(); } + Blitter *CreateInstance() override { return new Blitter_32bppSSE4_Anim(); } }; #endif /* WITH_SSE */ diff --git a/src/blitter/32bpp_base.hpp b/src/blitter/32bpp_base.hpp index 697593da6a..e481c15ccb 100644 --- a/src/blitter/32bpp_base.hpp +++ b/src/blitter/32bpp_base.hpp @@ -20,19 +20,19 @@ /** Base for all 32bpp blitters. */ class Blitter_32bppBase : public Blitter { public: - /* virtual */ uint8 GetScreenDepth() { return 32; } - /* virtual */ void *MoveTo(void *video, int x, int y); - /* virtual */ void SetPixel(void *video, int x, int y, uint8 colour); - /* virtual */ void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash); - /* virtual */ void DrawRect(void *video, int width, int height, uint8 colour); - /* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height); - /* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height); - /* virtual */ void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch); - /* virtual */ void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y); - /* virtual */ int BufferSize(int width, int height); - /* virtual */ void PaletteAnimate(const Palette &palette); - /* virtual */ Blitter::PaletteAnimation UsePaletteAnimation(); - /* virtual */ int GetBytesPerPixel() { return 4; } + uint8 GetScreenDepth() override { return 32; } + void *MoveTo(void *video, int x, int y) override; + void SetPixel(void *video, int x, int y, uint8 colour) override; + void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash) override; + void DrawRect(void *video, int width, int height, uint8 colour) override; + void CopyFromBuffer(void *video, const void *src, int width, int height) override; + void CopyToBuffer(const void *video, void *dst, int width, int height) override; + void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) override; + void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y) override; + int BufferSize(int width, int height) override; + void PaletteAnimate(const Palette &palette) override; + Blitter::PaletteAnimation UsePaletteAnimation() override; + int GetBytesPerPixel() override { return 4; } /** * Look up the colour in the current palette. diff --git a/src/blitter/32bpp_optimized.hpp b/src/blitter/32bpp_optimized.hpp index c261aa33d6..fc8a406537 100644 --- a/src/blitter/32bpp_optimized.hpp +++ b/src/blitter/32bpp_optimized.hpp @@ -23,10 +23,10 @@ public: byte data[]; ///< Data, all zoomlevels. }; - /* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom); - /* virtual */ Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator); + void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; + Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) override; - /* virtual */ const char *GetName() { return "32bpp-optimized"; } + const char *GetName() override { return "32bpp-optimized"; } template void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom); }; @@ -35,7 +35,7 @@ public: class FBlitter_32bppOptimized : public BlitterFactory { public: FBlitter_32bppOptimized() : BlitterFactory("32bpp-optimized", "32bpp Optimized Blitter (no palette animation)") {} - /* virtual */ Blitter *CreateInstance() { return new Blitter_32bppOptimized(); } + Blitter *CreateInstance() override { return new Blitter_32bppOptimized(); } }; #endif /* BLITTER_32BPP_OPTIMIZED_HPP */ diff --git a/src/blitter/32bpp_simple.hpp b/src/blitter/32bpp_simple.hpp index 0751f6f753..3d43971e9e 100644 --- a/src/blitter/32bpp_simple.hpp +++ b/src/blitter/32bpp_simple.hpp @@ -26,18 +26,18 @@ class Blitter_32bppSimple : public Blitter_32bppBase { uint8 v; ///< Brightness-channel }; public: - /* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom); - /* virtual */ void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal); - /* virtual */ Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator); + void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; + void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal) override; + Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) override; - /* virtual */ const char *GetName() { return "32bpp-simple"; } + const char *GetName() override { return "32bpp-simple"; } }; /** Factory for the simple 32 bpp blitter. */ class FBlitter_32bppSimple : public BlitterFactory { public: FBlitter_32bppSimple() : BlitterFactory("32bpp-simple", "32bpp Simple Blitter (no palette animation)") {} - /* virtual */ Blitter *CreateInstance() { return new Blitter_32bppSimple(); } + Blitter *CreateInstance() override { return new Blitter_32bppSimple(); } }; #endif /* BLITTER_32BPP_SIMPLE_HPP */ diff --git a/src/blitter/32bpp_sse2.hpp b/src/blitter/32bpp_sse2.hpp index d6b17f679c..1628f1fa26 100644 --- a/src/blitter/32bpp_sse2.hpp +++ b/src/blitter/32bpp_sse2.hpp @@ -82,22 +82,22 @@ DECLARE_ENUM_AS_BIT_SET(Blitter_32bppSSE_Base::SpriteFlags); /** The SSE2 32 bpp blitter (without palette animation). */ class Blitter_32bppSSE2 : public Blitter_32bppSimple, public Blitter_32bppSSE_Base { public: - /* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom); + void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; template void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom); - /* virtual */ Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) { + Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) override { return Blitter_32bppSSE_Base::Encode(sprite, allocator); } - /* virtual */ const char *GetName() { return "32bpp-sse2"; } + const char *GetName() override { return "32bpp-sse2"; } }; /** Factory for the SSE2 32 bpp blitter (without palette animation). */ class FBlitter_32bppSSE2 : public BlitterFactory { public: FBlitter_32bppSSE2() : BlitterFactory("32bpp-sse2", "32bpp SSE2 Blitter (no palette animation)", HasCPUIDFlag(1, 3, 26)) {} - /* virtual */ Blitter *CreateInstance() { return new Blitter_32bppSSE2(); } + Blitter *CreateInstance() override { return new Blitter_32bppSSE2(); } }; #endif /* WITH_SSE */ diff --git a/src/blitter/32bpp_sse4.hpp b/src/blitter/32bpp_sse4.hpp index 9c59d253f5..36b5b16d4c 100644 --- a/src/blitter/32bpp_sse4.hpp +++ b/src/blitter/32bpp_sse4.hpp @@ -27,17 +27,17 @@ /** The SSE4 32 bpp blitter (without palette animation). */ class Blitter_32bppSSE4 : public Blitter_32bppSSSE3 { public: - /* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom); + void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; template void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom); - /* virtual */ const char *GetName() { return "32bpp-sse4"; } + const char *GetName() override { return "32bpp-sse4"; } }; /** Factory for the SSE4 32 bpp blitter (without palette animation). */ class FBlitter_32bppSSE4: public BlitterFactory { public: FBlitter_32bppSSE4() : BlitterFactory("32bpp-sse4", "32bpp SSE4 Blitter (no palette animation)", HasCPUIDFlag(1, 2, 19)) {} - /* virtual */ Blitter *CreateInstance() { return new Blitter_32bppSSE4(); } + Blitter *CreateInstance() override { return new Blitter_32bppSSE4(); } }; #endif /* WITH_SSE */ diff --git a/src/blitter/32bpp_ssse3.hpp b/src/blitter/32bpp_ssse3.hpp index e9cac8ff0b..3d6152e9e7 100644 --- a/src/blitter/32bpp_ssse3.hpp +++ b/src/blitter/32bpp_ssse3.hpp @@ -27,17 +27,17 @@ /** The SSSE3 32 bpp blitter (without palette animation). */ class Blitter_32bppSSSE3 : public Blitter_32bppSSE2 { public: - /* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom); + void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; template void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom); - /* virtual */ const char *GetName() { return "32bpp-ssse3"; } + const char *GetName() override { return "32bpp-ssse3"; } }; /** Factory for the SSSE3 32 bpp blitter (without palette animation). */ class FBlitter_32bppSSSE3: public BlitterFactory { public: FBlitter_32bppSSSE3() : BlitterFactory("32bpp-ssse3", "32bpp SSSE3 Blitter (no palette animation)", HasCPUIDFlag(1, 2, 9)) {} - /* virtual */ Blitter *CreateInstance() { return new Blitter_32bppSSSE3(); } + Blitter *CreateInstance() override { return new Blitter_32bppSSSE3(); } }; #endif /* WITH_SSE */ diff --git a/src/blitter/8bpp_base.hpp b/src/blitter/8bpp_base.hpp index 8f75dda5d3..7ab3f6378a 100644 --- a/src/blitter/8bpp_base.hpp +++ b/src/blitter/8bpp_base.hpp @@ -17,20 +17,20 @@ /** Base for all 8bpp blitters. */ class Blitter_8bppBase : public Blitter { public: - /* virtual */ uint8 GetScreenDepth() { return 8; } - /* virtual */ void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal); - /* virtual */ void *MoveTo(void *video, int x, int y); - /* virtual */ void SetPixel(void *video, int x, int y, uint8 colour); - /* virtual */ void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash); - /* virtual */ void DrawRect(void *video, int width, int height, uint8 colour); - /* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height); - /* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height); - /* virtual */ void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch); - /* virtual */ void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y); - /* virtual */ int BufferSize(int width, int height); - /* virtual */ void PaletteAnimate(const Palette &palette); - /* virtual */ Blitter::PaletteAnimation UsePaletteAnimation(); - /* virtual */ int GetBytesPerPixel() { return 1; } + uint8 GetScreenDepth() override { return 8; } + void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal) override; + void *MoveTo(void *video, int x, int y) override; + void SetPixel(void *video, int x, int y, uint8 colour) override; + void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash) override; + void DrawRect(void *video, int width, int height, uint8 colour) override; + void CopyFromBuffer(void *video, const void *src, int width, int height) override; + void CopyToBuffer(const void *video, void *dst, int width, int height) override; + void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) override; + void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y) override; + int BufferSize(int width, int height) override; + void PaletteAnimate(const Palette &palette) override; + Blitter::PaletteAnimation UsePaletteAnimation() override; + int GetBytesPerPixel() override { return 1; } }; #endif /* BLITTER_8BPP_BASE_HPP */ diff --git a/src/blitter/8bpp_optimized.hpp b/src/blitter/8bpp_optimized.hpp index b5b5324b91..509edb8c40 100644 --- a/src/blitter/8bpp_optimized.hpp +++ b/src/blitter/8bpp_optimized.hpp @@ -24,17 +24,17 @@ public: byte data[]; ///< Data, all zoomlevels. }; - /* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom); - /* virtual */ Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator); + void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; + Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) override; - /* virtual */ const char *GetName() { return "8bpp-optimized"; } + const char *GetName() override { return "8bpp-optimized"; } }; /** Factory for the 8bpp blitter optimised for speed. */ class FBlitter_8bppOptimized : public BlitterFactory { public: FBlitter_8bppOptimized() : BlitterFactory("8bpp-optimized", "8bpp Optimized Blitter (compression + all-ZoomLevel cache)") {} - /* virtual */ Blitter *CreateInstance() { return new Blitter_8bppOptimized(); } + Blitter *CreateInstance() override { return new Blitter_8bppOptimized(); } }; #endif /* BLITTER_8BPP_OPTIMIZED_HPP */ diff --git a/src/blitter/8bpp_simple.hpp b/src/blitter/8bpp_simple.hpp index c00c75ac04..e48bc37585 100644 --- a/src/blitter/8bpp_simple.hpp +++ b/src/blitter/8bpp_simple.hpp @@ -18,17 +18,17 @@ /** Most trivial 8bpp blitter. */ class Blitter_8bppSimple FINAL : public Blitter_8bppBase { public: - /* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom); - /* virtual */ Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator); + void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override; + Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) override; - /* virtual */ const char *GetName() { return "8bpp-simple"; } + const char *GetName() override { return "8bpp-simple"; } }; /** Factory for the most trivial 8bpp blitter. */ class FBlitter_8bppSimple : public BlitterFactory { public: FBlitter_8bppSimple() : BlitterFactory("8bpp-simple", "8bpp Simple Blitter (relative slow, but never wrong)") {} - /* virtual */ Blitter *CreateInstance() { return new Blitter_8bppSimple(); } + Blitter *CreateInstance() override { return new Blitter_8bppSimple(); } }; #endif /* BLITTER_8BPP_SIMPLE_HPP */ diff --git a/src/blitter/null.hpp b/src/blitter/null.hpp index a6fed2ebca..8dc98646c2 100644 --- a/src/blitter/null.hpp +++ b/src/blitter/null.hpp @@ -17,31 +17,31 @@ /** Blitter that does nothing. */ class Blitter_Null : public Blitter { public: - /* virtual */ uint8 GetScreenDepth() { return 0; } - /* virtual */ void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) {}; - /* virtual */ void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal) {}; - /* virtual */ Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator); - /* virtual */ void *MoveTo(void *video, int x, int y) { return NULL; }; - /* virtual */ void SetPixel(void *video, int x, int y, uint8 colour) {}; - /* virtual */ void DrawRect(void *video, int width, int height, uint8 colour) {}; - /* virtual */ void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash) {}; - /* virtual */ void CopyFromBuffer(void *video, const void *src, int width, int height) {}; - /* virtual */ void CopyToBuffer(const void *video, void *dst, int width, int height) {}; - /* virtual */ void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) {}; - /* virtual */ void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y) {}; - /* virtual */ int BufferSize(int width, int height) { return 0; }; - /* virtual */ void PaletteAnimate(const Palette &palette) { }; - /* virtual */ Blitter::PaletteAnimation UsePaletteAnimation() { return Blitter::PALETTE_ANIMATION_NONE; }; + uint8 GetScreenDepth() override { return 0; } + void Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override {}; + void DrawColourMappingRect(void *dst, int width, int height, PaletteID pal) override {}; + Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) override; + void *MoveTo(void *video, int x, int y) override { return NULL; }; + void SetPixel(void *video, int x, int y, uint8 colour) override {}; + void DrawRect(void *video, int width, int height, uint8 colour) override {}; + void DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 colour, int width, int dash) override {}; + void CopyFromBuffer(void *video, const void *src, int width, int height) override {}; + void CopyToBuffer(const void *video, void *dst, int width, int height) override {}; + void CopyImageToBuffer(const void *video, void *dst, int width, int height, int dst_pitch) override {}; + void ScrollBuffer(void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y) override {}; + int BufferSize(int width, int height) override { return 0; }; + void PaletteAnimate(const Palette &palette) override { }; + Blitter::PaletteAnimation UsePaletteAnimation() override { return Blitter::PALETTE_ANIMATION_NONE; }; - /* virtual */ const char *GetName() { return "null"; } - /* virtual */ int GetBytesPerPixel() { return 0; } + const char *GetName() override { return "null"; } + int GetBytesPerPixel() override { return 0; } }; /** Factory for the blitter that does nothing. */ class FBlitter_Null : public BlitterFactory { public: FBlitter_Null() : BlitterFactory("null", "Null Blitter (does nothing)") {} - /* virtual */ Blitter *CreateInstance() { return new Blitter_Null(); } + Blitter *CreateInstance() override { return new Blitter_Null(); } }; #endif /* BLITTER_NULL_HPP */ diff --git a/src/fileio_func.h b/src/fileio_func.h index f5ef58ac06..8263b7872c 100644 --- a/src/fileio_func.h +++ b/src/fileio_func.h @@ -107,7 +107,7 @@ public: ALL = BASESET | NEWGRF | AI | SCENARIO | GAME, ///< Scan for everything. }; - /* virtual */ bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename = NULL); + bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename = NULL) override; bool AddFile(Subdirectory sd, const char *filename); diff --git a/src/fios.cpp b/src/fios.cpp index 835c04ddb2..f849b9a165 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -276,7 +276,7 @@ public: fop(fop), callback_proc(callback_proc), file_list(file_list) {} - /* virtual */ bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename); + bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) override; }; /** @@ -673,7 +673,7 @@ public: this->scanned = true; } - /* virtual */ bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) + bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) override { FILE *f = FioFOpenFile(filename, "r", SCENARIO_DIR); if (f == NULL) return false; diff --git a/src/game/game_config.hpp b/src/game/game_config.hpp index e9ebdc38c1..dfae62c3a9 100644 --- a/src/game/game_config.hpp +++ b/src/game/game_config.hpp @@ -42,7 +42,7 @@ public: bool ResetInfo(bool force_exact_match); protected: - /* virtual */ ScriptInfo *FindInfo(const char *name, int version, bool force_exact_match); + ScriptInfo *FindInfo(const char *name, int version, bool force_exact_match) override; }; #endif /* GAME_CONFIG_HPP */ diff --git a/src/game/game_info.hpp b/src/game/game_info.hpp index f4fc5ed86b..a799ed7d6d 100644 --- a/src/game/game_info.hpp +++ b/src/game/game_info.hpp @@ -40,7 +40,7 @@ public: */ const char *GetAPIVersion() const { return this->api_version; } - /* virtual */ bool IsDeveloperOnly() const { return this->is_developer_only; } + bool IsDeveloperOnly() const override { return this->is_developer_only; } private: int min_loadable_version; ///< The Game can load savegame data if the version is equal or greater than this. diff --git a/src/game/game_instance.hpp b/src/game/game_instance.hpp index 08ce344247..dd0e7950aa 100644 --- a/src/game/game_instance.hpp +++ b/src/game/game_instance.hpp @@ -25,14 +25,14 @@ public: */ void Initialize(class GameInfo *info); - /* virtual */ int GetSetting(const char *name); - /* virtual */ ScriptInfo *FindLibrary(const char *library, int version); + int GetSetting(const char *name) override; + ScriptInfo *FindLibrary(const char *library, int version) override; private: - /* virtual */ void RegisterAPI(); - /* virtual */ void Died(); - /* virtual */ CommandCallback *GetDoCommandCallback(); - /* virtual */ void LoadDummyScript() {} + void RegisterAPI() override; + void Died() override; + CommandCallback *GetDoCommandCallback() override; + void LoadDummyScript() override {} }; #endif /* GAME_INSTANCE_HPP */ diff --git a/src/game/game_scanner.hpp b/src/game/game_scanner.hpp index 071d19d38d..492545c2b1 100644 --- a/src/game/game_scanner.hpp +++ b/src/game/game_scanner.hpp @@ -16,7 +16,7 @@ class GameScannerInfo : public ScriptScanner { public: - /* virtual */ void Initialize(); + void Initialize() override; /** * Check if we have a game by name and version available in our list. @@ -28,17 +28,17 @@ public: class GameInfo *FindInfo(const char *nameParam, int versionParam, bool force_exact_match); protected: - /* virtual */ void GetScriptName(ScriptInfo *info, char *name, const char *last); - /* virtual */ const char *GetFileName() const { return PATHSEP "info.nut"; } - /* virtual */ Subdirectory GetDirectory() const { return GAME_DIR; } - /* virtual */ const char *GetScannerName() const { return "Game Scripts"; } - /* virtual */ void RegisterAPI(class Squirrel *engine); + void GetScriptName(ScriptInfo *info, char *name, const char *last) override; + const char *GetFileName() const override { return PATHSEP "info.nut"; } + Subdirectory GetDirectory() const override { return GAME_DIR; } + const char *GetScannerName() const override { return "Game Scripts"; } + void RegisterAPI(class Squirrel *engine) override; }; class GameScannerLibrary : public ScriptScanner { public: - /* virtual */ void Initialize(); + void Initialize() override; /** * Find a library in the pool. @@ -49,11 +49,11 @@ public: class GameLibrary *FindLibrary(const char *library, int version); protected: - /* virtual */ void GetScriptName(ScriptInfo *info, char *name, const char *last); - /* virtual */ const char *GetFileName() const { return PATHSEP "library.nut"; } - /* virtual */ Subdirectory GetDirectory() const { return GAME_LIBRARY_DIR; } - /* virtual */ const char *GetScannerName() const { return "GS Libraries"; } - /* virtual */ void RegisterAPI(class Squirrel *engine); + void GetScriptName(ScriptInfo *info, char *name, const char *last) override; + const char *GetFileName() const override { return PATHSEP "library.nut"; } + Subdirectory GetDirectory() const override { return GAME_LIBRARY_DIR; } + const char *GetScannerName() const override { return "GS Libraries"; } + void RegisterAPI(class Squirrel *engine) override; }; #endif /* GAME_SCANNER_HPP */ diff --git a/src/game/game_text.cpp b/src/game/game_text.cpp index a32e5b41d7..4673e732c2 100644 --- a/src/game/game_text.cpp +++ b/src/game/game_text.cpp @@ -151,7 +151,7 @@ struct StringListReader : StringReader { { } - /* virtual */ char *ReadLine(char *buffer, const char *last) + char *ReadLine(char *buffer, const char *last) override { if (this->p == this->end) return NULL; @@ -242,7 +242,7 @@ public: this->FileScanner::Scan(".txt", directory, false); } - /* virtual */ bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) + bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) override { if (strcmp(filename, exclude) == 0) return true; diff --git a/src/goal_gui.cpp b/src/goal_gui.cpp index ee4d8170e1..7c3e330043 100644 --- a/src/goal_gui.cpp +++ b/src/goal_gui.cpp @@ -50,7 +50,7 @@ struct GoalListWindow : public Window { this->OnInvalidateData(0); } - /* virtual */ void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget != WID_GOAL_CAPTION) return; @@ -62,7 +62,7 @@ struct GoalListWindow : public Window { } } - /* virtual */ void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { if (widget != WID_GOAL_LIST) return; @@ -177,7 +177,7 @@ struct GoalListWindow : public Window { return 3 + num_global + num_company; } - /* virtual */ void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget != WID_GOAL_LIST) return; Dimension d = maxdim(GetStringBoundingBox(STR_GOALS_GLOBAL_TITLE), GetStringBoundingBox(STR_GOALS_COMPANY_TITLE)); @@ -272,7 +272,7 @@ struct GoalListWindow : public Window { DrawPartialGoalList(pos, cap, x, y, right, progress_col_width, false, column); } - /* virtual */ void OnPaint() + void OnPaint() override { this->DrawWidgets(); @@ -299,7 +299,7 @@ struct GoalListWindow : public Window { } - /* virtual */ void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_GOAL_LIST); } @@ -309,7 +309,7 @@ struct GoalListWindow : public Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - /* virtual */ void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; this->vscroll->SetCount(this->CountLines()); @@ -388,7 +388,7 @@ struct GoalQuestionWindow : public Window { free(this->question); } - /* virtual */ void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_GQ_CAPTION: @@ -409,7 +409,7 @@ struct GoalQuestionWindow : public Window { } } - /* virtual */ void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_GQ_BUTTON_1: @@ -429,7 +429,7 @@ struct GoalQuestionWindow : public Window { } } - /* virtual */ void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget != WID_GQ_QUESTION) return; @@ -437,7 +437,7 @@ struct GoalQuestionWindow : public Window { size->height = GetStringHeight(STR_JUST_RAW_STRING, size->width) + WD_PAR_VSEP_WIDE; } - /* virtual */ void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_GQ_QUESTION) return; diff --git a/src/ground_vehicle.hpp b/src/ground_vehicle.hpp index 56b97875fc..25106ab1c6 100644 --- a/src/ground_vehicle.hpp +++ b/src/ground_vehicle.hpp @@ -92,14 +92,14 @@ struct GroundVehicle : public SpecializedVehicle { void PowerChanged(); void CargoChanged(); int GetAcceleration() const; - bool IsChainInDepot() const; + bool IsChainInDepot() const override; /** * Common code executed for crashed ground vehicles * @param flooded was this vehicle flooded? * @return number of victims */ - /* virtual */ uint Crash(bool flooded) + uint Crash(bool flooded) override { /* Crashed vehicles aren't going up or down */ for (T *v = T::From(this); v != NULL; v = v->Next()) { diff --git a/src/music/allegro_m.h b/src/music/allegro_m.h index 65d8ab811d..9451162a21 100644 --- a/src/music/allegro_m.h +++ b/src/music/allegro_m.h @@ -17,18 +17,18 @@ /** Allegro's music player. */ class MusicDriver_Allegro : public MusicDriver { public: - /* virtual */ const char *Start(const char * const *param); + const char *Start(const char * const *param) override; - /* virtual */ void Stop(); + void Stop() override; - /* virtual */ void PlaySong(const MusicSongInfo &song); + void PlaySong(const MusicSongInfo &song) override; - /* virtual */ void StopSong(); + void StopSong() override; - /* virtual */ bool IsSongPlaying(); + bool IsSongPlaying() override; - /* virtual */ void SetVolume(byte vol); - /* virtual */ const char *GetName() const { return "allegro"; } + void SetVolume(byte vol) override; + const char *GetName() const override { return "allegro"; } }; /** Factory for allegro's music player. */ @@ -43,7 +43,7 @@ public: static const int PRIORITY = 2; #endif FMusicDriver_Allegro() : DriverFactoryBase(Driver::DT_MUSIC, PRIORITY, "allegro", "Allegro MIDI Driver") {} - /* virtual */ Driver *CreateInstance() const { return new MusicDriver_Allegro(); } + Driver *CreateInstance() const override { return new MusicDriver_Allegro(); } }; #endif /* MUSIC_ALLEGRO_H */ diff --git a/src/music/bemidi.h b/src/music/bemidi.h index 7c546525d2..8591ec0159 100644 --- a/src/music/bemidi.h +++ b/src/music/bemidi.h @@ -17,25 +17,25 @@ /** The midi player for BeOS. */ class MusicDriver_BeMidi : public MusicDriver { public: - /* virtual */ const char *Start(const char * const *param); + const char *Start(const char * const *param) override; - /* virtual */ void Stop(); + void Stop() override; - /* virtual */ void PlaySong(const MusicSongInfo &song); + void PlaySong(const MusicSongInfo &song) override; - /* virtual */ void StopSong(); + void StopSong() override; - /* virtual */ bool IsSongPlaying(); + bool IsSongPlaying() override; - /* virtual */ void SetVolume(byte vol); - /* virtual */ const char *GetName() const { return "bemidi"; } + void SetVolume(byte vol) override; + const char *GetName() const override { return "bemidi"; } }; /** Factory for the BeOS midi player. */ class FMusicDriver_BeMidi : public DriverFactoryBase { public: FMusicDriver_BeMidi() : DriverFactoryBase(Driver::DT_MUSIC, 10, "bemidi", "BeOS MIDI Driver") {} - /* virtual */ Driver *CreateInstance() const { return new MusicDriver_BeMidi(); } + Driver *CreateInstance() const override { return new MusicDriver_BeMidi(); } }; #endif /* MUSIC_BEMIDI_H */ diff --git a/src/music/cocoa_m.h b/src/music/cocoa_m.h index fdb10b84e6..7694927993 100644 --- a/src/music/cocoa_m.h +++ b/src/music/cocoa_m.h @@ -16,24 +16,24 @@ class MusicDriver_Cocoa : public MusicDriver { public: - /* virtual */ const char *Start(const char * const *param); + const char *Start(const char * const *param) override; - /* virtual */ void Stop(); + void Stop() override; - /* virtual */ void PlaySong(const MusicSongInfo &song); + void PlaySong(const MusicSongInfo &song) override; - /* virtual */ void StopSong(); + void StopSong() override; - /* virtual */ bool IsSongPlaying(); + bool IsSongPlaying() override; - /* virtual */ void SetVolume(byte vol); - /* virtual */ const char *GetName() const { return "cocoa"; } + void SetVolume(byte vol) override; + const char *GetName() const override { return "cocoa"; } }; class FMusicDriver_Cocoa : public DriverFactoryBase { public: FMusicDriver_Cocoa() : DriverFactoryBase(Driver::DT_MUSIC, 10, "cocoa", "Cocoa MIDI Driver") {} - /* virtual */ Driver *CreateInstance() const { return new MusicDriver_Cocoa(); } + Driver *CreateInstance() const override { return new MusicDriver_Cocoa(); } }; #endif /* MUSIC_MACOSX_COCOA_H */ diff --git a/src/music/dmusic.h b/src/music/dmusic.h index 527e064e49..5b363b8917 100644 --- a/src/music/dmusic.h +++ b/src/music/dmusic.h @@ -19,25 +19,25 @@ class MusicDriver_DMusic : public MusicDriver { public: virtual ~MusicDriver_DMusic(); - /* virtual */ const char *Start(const char * const *param); + const char *Start(const char * const *param) override; - /* virtual */ void Stop(); + void Stop() override; - /* virtual */ void PlaySong(const MusicSongInfo &song); + void PlaySong(const MusicSongInfo &song) override; - /* virtual */ void StopSong(); + void StopSong() override; - /* virtual */ bool IsSongPlaying(); + bool IsSongPlaying() override; - /* virtual */ void SetVolume(byte vol); - /* virtual */ const char *GetName() const { return "dmusic"; } + void SetVolume(byte vol) override; + const char *GetName() const override { return "dmusic"; } }; /** Factory for the DirectX music player. */ class FMusicDriver_DMusic : public DriverFactoryBase { public: FMusicDriver_DMusic() : DriverFactoryBase(Driver::DT_MUSIC, 10, "dmusic", "DirectMusic MIDI Driver") {} - /* virtual */ Driver *CreateInstance() const { return new MusicDriver_DMusic(); } + Driver *CreateInstance() const override { return new MusicDriver_DMusic(); } }; #endif /* MUSIC_DMUSIC_H */ diff --git a/src/music/extmidi.h b/src/music/extmidi.h index e174dc9b08..55050c0d2b 100644 --- a/src/music/extmidi.h +++ b/src/music/extmidi.h @@ -24,24 +24,24 @@ private: void DoStop(); public: - /* virtual */ const char *Start(const char * const *param); + const char *Start(const char * const *param) override; - /* virtual */ void Stop(); + void Stop() override; - /* virtual */ void PlaySong(const MusicSongInfo &song); + void PlaySong(const MusicSongInfo &song) override; - /* virtual */ void StopSong(); + void StopSong() override; - /* virtual */ bool IsSongPlaying(); + bool IsSongPlaying() override; - /* virtual */ void SetVolume(byte vol); - /* virtual */ const char *GetName() const { return "extmidi"; } + void SetVolume(byte vol) override; + const char *GetName() const override { return "extmidi"; } }; class FMusicDriver_ExtMidi : public DriverFactoryBase { public: FMusicDriver_ExtMidi() : DriverFactoryBase(Driver::DT_MUSIC, 3, "extmidi", "External MIDI Driver") {} - /* virtual */ Driver *CreateInstance() const { return new MusicDriver_ExtMidi(); } + Driver *CreateInstance() const override { return new MusicDriver_ExtMidi(); } }; #endif /* MUSIC_EXTERNAL_H */ diff --git a/src/music/fluidsynth.h b/src/music/fluidsynth.h index 171128a8e9..e8a294b77b 100644 --- a/src/music/fluidsynth.h +++ b/src/music/fluidsynth.h @@ -17,25 +17,25 @@ /** Music driver making use of FluidSynth. */ class MusicDriver_FluidSynth : public MusicDriver { public: - /* virtual */ const char *Start(const char * const *param); + const char *Start(const char * const *param) override; - /* virtual */ void Stop(); + void Stop() override; - /* virtual */ void PlaySong(const MusicSongInfo &song); + void PlaySong(const MusicSongInfo &song) override; - /* virtual */ void StopSong(); + void StopSong() override; - /* virtual */ bool IsSongPlaying(); + bool IsSongPlaying() override; - /* virtual */ void SetVolume(byte vol); - /* virtual */ const char *GetName() const { return "fluidsynth"; } + void SetVolume(byte vol) override; + const char *GetName() const override { return "fluidsynth"; } }; /** Factory for the fluidsynth driver. */ class FMusicDriver_FluidSynth : public DriverFactoryBase { public: FMusicDriver_FluidSynth() : DriverFactoryBase(Driver::DT_MUSIC, 5, "fluidsynth", "FluidSynth MIDI Driver") {} - /* virtual */ Driver *CreateInstance() const { return new MusicDriver_FluidSynth(); } + Driver *CreateInstance() const override { return new MusicDriver_FluidSynth(); } }; #endif /* MUSIC_FLUIDSYNTH_H */ diff --git a/src/music/null_m.h b/src/music/null_m.h index 51e1a06656..837eeb092b 100644 --- a/src/music/null_m.h +++ b/src/music/null_m.h @@ -17,25 +17,25 @@ /** The music player that does nothing. */ class MusicDriver_Null : public MusicDriver { public: - /* virtual */ const char *Start(const char * const *param) { return NULL; } + const char *Start(const char * const *param) override { return NULL; } - /* virtual */ void Stop() { } + void Stop() override { } - /* virtual */ void PlaySong(const MusicSongInfo &song) { } + void PlaySong(const MusicSongInfo &song) override { } - /* virtual */ void StopSong() { } + void StopSong() override { } - /* virtual */ bool IsSongPlaying() { return true; } + bool IsSongPlaying() override { return true; } - /* virtual */ void SetVolume(byte vol) { } - /* virtual */ const char *GetName() const { return "null"; } + void SetVolume(byte vol) override { } + const char *GetName() const override { return "null"; } }; /** Factory for the null music player. */ class FMusicDriver_Null : public DriverFactoryBase { public: FMusicDriver_Null() : DriverFactoryBase(Driver::DT_MUSIC, 1, "null", "Null Music Driver") {} - /* virtual */ Driver *CreateInstance() const { return new MusicDriver_Null(); } + Driver *CreateInstance() const override { return new MusicDriver_Null(); } }; #endif /* MUSIC_NULL_H */ diff --git a/src/music/os2_m.h b/src/music/os2_m.h index ac7cd03197..e320946edb 100644 --- a/src/music/os2_m.h +++ b/src/music/os2_m.h @@ -17,25 +17,25 @@ /** OS/2's music player. */ class MusicDriver_OS2 : public MusicDriver { public: - /* virtual */ const char *Start(const char * const *param); + const char *Start(const char * const *param) override; - /* virtual */ void Stop(); + void Stop() override; - /* virtual */ void PlaySong(const MusicSongInfo &song); + void PlaySong(const MusicSongInfo &song) override; - /* virtual */ void StopSong(); + void StopSong() override; - /* virtual */ bool IsSongPlaying(); + bool IsSongPlaying() override; - /* virtual */ void SetVolume(byte vol); - /* virtual */ const char *GetName() const { return "os2"; } + void SetVolume(byte vol) override; + const char *GetName() const override { return "os2"; } }; /** Factory for OS/2's music player. */ class FMusicDriver_OS2 : public DriverFactoryBase { public: FMusicDriver_OS2() : DriverFactoryBase(Driver::DT_MUSIC, 10, "os2", "OS/2 Music Driver") {} - /* virtual */ Driver *CreateInstance() const { return new MusicDriver_OS2(); } + Driver *CreateInstance() const override { return new MusicDriver_OS2(); } }; #endif /* MUSIC_OS2_H */ diff --git a/src/music/qtmidi.h b/src/music/qtmidi.h index 32163db939..631f04d2db 100644 --- a/src/music/qtmidi.h +++ b/src/music/qtmidi.h @@ -16,24 +16,24 @@ class MusicDriver_QtMidi : public MusicDriver { public: - /* virtual */ const char *Start(const char * const *param); + const char *Start(const char * const *param) override; - /* virtual */ void Stop(); + void Stop() override; - /* virtual */ void PlaySong(const MusicSongInfo &song); + void PlaySong(const MusicSongInfo &song) override; - /* virtual */ void StopSong(); + void StopSong() override; - /* virtual */ bool IsSongPlaying(); + bool IsSongPlaying() override; - /* virtual */ void SetVolume(byte vol); - /* virtual */ const char *GetName() const { return "qt"; } + void SetVolume(byte vol) override; + const char *GetName() const override { return "qt"; } }; class FMusicDriver_QtMidi : public DriverFactoryBase { public: FMusicDriver_QtMidi() : DriverFactoryBase(Driver::DT_MUSIC, 5, "qt", "QuickTime MIDI Driver") {} - /* virtual */ Driver *CreateInstance() const { return new MusicDriver_QtMidi(); } + Driver *CreateInstance() const override { return new MusicDriver_QtMidi(); } }; #endif /* MUSIC_MACOSX_QUICKTIME_H */ diff --git a/src/music/win32_m.h b/src/music/win32_m.h index 1ac8ae69e4..5366cf5d71 100644 --- a/src/music/win32_m.h +++ b/src/music/win32_m.h @@ -17,25 +17,25 @@ /** The Windows music player. */ class MusicDriver_Win32 : public MusicDriver { public: - /* virtual */ const char *Start(const char * const *param); + const char *Start(const char * const *param) override; - /* virtual */ void Stop(); + void Stop() override; - /* virtual */ void PlaySong(const MusicSongInfo &song); + void PlaySong(const MusicSongInfo &song) override; - /* virtual */ void StopSong(); + void StopSong() override; - /* virtual */ bool IsSongPlaying(); + bool IsSongPlaying() override; - /* virtual */ void SetVolume(byte vol); - /* virtual */ const char *GetName() const { return "win32"; } + void SetVolume(byte vol) override; + const char *GetName() const override { return "win32"; } }; /** Factory for Windows' music player. */ class FMusicDriver_Win32 : public DriverFactoryBase { public: FMusicDriver_Win32() : DriverFactoryBase(Driver::DT_MUSIC, 5, "win32", "Win32 Music Driver") {} - /* virtual */ Driver *CreateInstance() const { return new MusicDriver_Win32(); } + Driver *CreateInstance() const override { return new MusicDriver_Win32(); } }; #endif /* MUSIC_WIN32_H */ diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 0bb42c86ff..a99a5069ac 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -84,7 +84,7 @@ struct PacketReader : LoadFilter { this->buf += to_write; } - /* virtual */ size_t Read(byte *rbuf, size_t size) + size_t Read(byte *rbuf, size_t size) override { /* Limit the amount to read to whatever we still have. */ size_t ret_size = size = min(this->written_bytes - this->read_bytes, size); @@ -106,7 +106,7 @@ struct PacketReader : LoadFilter { return ret_size; } - /* virtual */ void Reset() + void Reset() override { this->read_bytes = 0; diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 230a62134f..321a53bc7d 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -64,7 +64,7 @@ struct ContentTextfileWindow : public TextfileWindow { } } - /* virtual */ void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget == WID_TF_CAPTION) { SetDParam(0, this->GetTypeString()); diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index cb64261423..f90370312b 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -117,7 +117,7 @@ public: *lastof(this->visible) = true; } - void SetupSmallestSize(Window *w, bool init_array) + void SetupSmallestSize(Window *w, bool init_array) override { /* Oh yeah, we ought to be findable! */ w->nested_array[WID_NG_HEADER] = this; @@ -143,7 +143,7 @@ public: this->smallest_x = this->head->smallest_x + this->tail->smallest_x; // First and last are always shown, rest not } - void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl) + void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl) override { assert(given_width >= this->smallest_x && given_height >= this->smallest_y); @@ -183,7 +183,7 @@ public: } } - /* virtual */ void Draw(const Window *w) + void Draw(const Window *w) override { int i = 0; for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { @@ -193,7 +193,7 @@ public: } } - /* virtual */ NWidgetCore *GetWidgetFromPos(int x, int y) + NWidgetCore *GetWidgetFromPos(int x, int y) override { if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return NULL; diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index bd78acf92d..67f4c6fd91 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -163,7 +163,7 @@ struct PacketWriter : SaveFilter { this->current = NULL; } - /* virtual */ void Write(byte *buf, size_t size) + void Write(byte *buf, size_t size) override { /* We want to abort the saving when the socket is closed. */ if (this->cs == NULL) SlError(STR_NETWORK_ERROR_LOSTCONNECTION); @@ -190,7 +190,7 @@ struct PacketWriter : SaveFilter { this->total_size += size; } - /* virtual */ void Finish() + void Finish() override { /* We want to abort the saving when the socket is closed. */ if (this->cs == NULL) SlError(STR_NETWORK_ERROR_LOSTCONNECTION); diff --git a/src/newgrf_airport.cpp b/src/newgrf_airport.cpp index 6213097bd0..14af15a371 100644 --- a/src/newgrf_airport.cpp +++ b/src/newgrf_airport.cpp @@ -39,9 +39,9 @@ struct AirportScopeResolver : public ScopeResolver { { } - /* virtual */ uint32 GetRandomBits() const; - /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; - /* virtual */ void StorePSA(uint pos, int32 value); + uint32 GetRandomBits() const override; + uint32 GetVariable(byte variable, uint32 parameter, bool *available) const override; + void StorePSA(uint pos, int32 value) override; }; /** Resolver object for airports. */ @@ -51,7 +51,7 @@ struct AirportResolverObject : public ResolverObject { AirportResolverObject(TileIndex tile, Station *st, byte airport_id, byte layout, CallbackID callback = CBID_NO_CALLBACK, uint32 callback_param1 = 0, uint32 callback_param2 = 0); - /* virtual */ ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: return &this->airport_scope; @@ -59,7 +59,7 @@ struct AirportResolverObject : public ResolverObject { } } - /* virtual */ const SpriteGroup *ResolveReal(const RealSpriteGroup *group) const; + const SpriteGroup *ResolveReal(const RealSpriteGroup *group) const override; }; /** diff --git a/src/newgrf_airporttiles.h b/src/newgrf_airporttiles.h index dc04642037..e55409c1b3 100644 --- a/src/newgrf_airporttiles.h +++ b/src/newgrf_airporttiles.h @@ -38,8 +38,8 @@ struct AirportTileScopeResolver : public ScopeResolver { this->airport_id = st->airport.type; } - /* virtual */ uint32 GetRandomBits() const; - /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; + uint32 GetRandomBits() const override; + uint32 GetVariable(byte variable, uint32 parameter, bool *available) const override; }; /** Resolver for tiles of an airport. */ @@ -49,7 +49,7 @@ struct AirportTileResolverObject : public ResolverObject { AirportTileResolverObject(const AirportTileSpec *ats, TileIndex tile, Station *st, CallbackID callback = CBID_NO_CALLBACK, uint32 callback_param1 = 0, uint32 callback_param2 = 0); - /* virtual */ ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: return &tiles_scope; diff --git a/src/newgrf_canal.cpp b/src/newgrf_canal.cpp index 3438bb9850..32180ee1a5 100644 --- a/src/newgrf_canal.cpp +++ b/src/newgrf_canal.cpp @@ -30,8 +30,8 @@ struct CanalScopeResolver : public ScopeResolver { { } - /* virtual */ uint32 GetRandomBits() const; - /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; + uint32 GetRandomBits() const override; + uint32 GetVariable(byte variable, uint32 parameter, bool *available) const override; }; /** Resolver object for canals. */ @@ -41,7 +41,7 @@ struct CanalResolverObject : public ResolverObject { CanalResolverObject(CanalFeature feature, TileIndex tile, CallbackID callback = CBID_NO_CALLBACK, uint32 callback_param1 = 0, uint32 callback_param2 = 0); - /* virtual */ ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: return &this->canal_scope; @@ -49,7 +49,7 @@ struct CanalResolverObject : public ResolverObject { } } - /* virtual */ const SpriteGroup *ResolveReal(const RealSpriteGroup *group) const; + const SpriteGroup *ResolveReal(const RealSpriteGroup *group) const override; }; /* virtual */ uint32 CanalScopeResolver::GetRandomBits() const diff --git a/src/newgrf_cargo.cpp b/src/newgrf_cargo.cpp index 7d830c5730..97db4855e6 100644 --- a/src/newgrf_cargo.cpp +++ b/src/newgrf_cargo.cpp @@ -19,7 +19,7 @@ struct CargoResolverObject : public ResolverObject { CargoResolverObject(const CargoSpec *cs, CallbackID callback = CBID_NO_CALLBACK, uint32 callback_param1 = 0, uint32 callback_param2 = 0); - /* virtual */ const SpriteGroup *ResolveReal(const RealSpriteGroup *group) const; + const SpriteGroup *ResolveReal(const RealSpriteGroup *group) const override; }; /* virtual */ const SpriteGroup *CargoResolverObject::ResolveReal(const RealSpriteGroup *group) const diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index f19c79c9a8..d21d767cdc 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -633,7 +633,7 @@ public: { } - /* virtual */ bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename); + bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) override; /** Do the scan for GRFs. */ static uint DoScan() diff --git a/src/newgrf_engine.h b/src/newgrf_engine.h index 51adb0b7fb..644ff5f015 100644 --- a/src/newgrf_engine.h +++ b/src/newgrf_engine.h @@ -40,9 +40,9 @@ struct VehicleScopeResolver : public ScopeResolver { void SetVehicle(const Vehicle *v) { this->v = v; } - /* virtual */ uint32 GetRandomBits() const; - /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; - /* virtual */ uint32 GetTriggers() const; + uint32 GetRandomBits() const override; + uint32 GetVariable(byte variable, uint32 parameter, bool *available) const override; + uint32 GetTriggers() const override; }; /** Resolver for a vehicle (chain) */ @@ -64,9 +64,9 @@ struct VehicleResolverObject : public ResolverObject { VehicleResolverObject(EngineID engine_type, const Vehicle *v, WagonOverride wagon_override, bool info_view = false, CallbackID callback = CBID_NO_CALLBACK, uint32 callback_param1 = 0, uint32 callback_param2 = 0); - /* virtual */ ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0); + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override; - /* virtual */ const SpriteGroup *ResolveReal(const RealSpriteGroup *group) const; + const SpriteGroup *ResolveReal(const RealSpriteGroup *group) const override; }; static const uint TRAININFO_DEFAULT_VEHICLE_WIDTH = 29; diff --git a/src/newgrf_generic.cpp b/src/newgrf_generic.cpp index eb2cbf08f1..d29a03929e 100644 --- a/src/newgrf_generic.cpp +++ b/src/newgrf_generic.cpp @@ -42,7 +42,7 @@ struct GenericScopeResolver : public ScopeResolver { { } - /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; + uint32 GetVariable(byte variable, uint32 parameter, bool *available) const override; private: bool ai_callback; ///< Callback comes from the AI. @@ -55,7 +55,7 @@ struct GenericResolverObject : public ResolverObject { GenericResolverObject(bool ai_callback, CallbackID callback = CBID_NO_CALLBACK); - /* virtual */ ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: return &this->generic_scope; @@ -63,7 +63,7 @@ struct GenericResolverObject : public ResolverObject { } } - /* virtual */ const SpriteGroup *ResolveReal(const RealSpriteGroup *group) const; + const SpriteGroup *ResolveReal(const RealSpriteGroup *group) const override; }; struct GenericCallback { diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 1af2c72461..adf38b1648 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -550,7 +550,7 @@ struct NewGRFTextfileWindow : public TextfileWindow { this->LoadTextfile(textfile, NEWGRF_DIR); } - /* virtual */ void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget == WID_TF_CAPTION) { SetDParam(0, STR_CONTENT_TYPE_NEWGRF); diff --git a/src/newgrf_house.h b/src/newgrf_house.h index bb364f6fc6..10d61a9e99 100644 --- a/src/newgrf_house.h +++ b/src/newgrf_house.h @@ -44,9 +44,9 @@ struct HouseScopeResolver : public ScopeResolver { { } - /* virtual */ uint32 GetRandomBits() const; - /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; - /* virtual */ uint32 GetTriggers() const; + uint32 GetRandomBits() const override; + uint32 GetVariable(byte variable, uint32 parameter, bool *available) const override; + uint32 GetTriggers() const override; }; /** Resolver object to be used for houses (feature 07 spritegroups). */ @@ -58,7 +58,7 @@ struct HouseResolverObject : public ResolverObject { CallbackID callback = CBID_NO_CALLBACK, uint32 param1 = 0, uint32 param2 = 0, bool not_yet_constructed = false, uint8 initial_random_bits = 0, CargoTypes watched_cargo_triggers = 0); - /* virtual */ ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: return &this->house_scope; diff --git a/src/newgrf_industries.h b/src/newgrf_industries.h index fa809fcd73..2fa8f7d36b 100644 --- a/src/newgrf_industries.h +++ b/src/newgrf_industries.h @@ -34,10 +34,10 @@ struct IndustriesScopeResolver : public ScopeResolver { { } - /* virtual */ uint32 GetRandomBits() const; - /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; - /* virtual */ uint32 GetTriggers() const; - /* virtual */ void StorePSA(uint pos, int32 value); + uint32 GetRandomBits() const override; + uint32 GetVariable(byte variable, uint32 parameter, bool *available) const override; + uint32 GetTriggers() const override; + void StorePSA(uint pos, int32 value) override; }; /** Resolver for industries. */ @@ -51,7 +51,7 @@ struct IndustriesResolverObject : public ResolverObject { TownScopeResolver *GetTown(); - /* virtual */ ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: return &industries_scope; diff --git a/src/newgrf_industrytiles.h b/src/newgrf_industrytiles.h index 6051c1062b..8b72932333 100644 --- a/src/newgrf_industrytiles.h +++ b/src/newgrf_industrytiles.h @@ -32,9 +32,9 @@ struct IndustryTileScopeResolver : public ScopeResolver { { } - /* virtual */ uint32 GetRandomBits() const; - /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; - /* virtual */ uint32 GetTriggers() const; + uint32 GetRandomBits() const override; + uint32 GetVariable(byte variable, uint32 parameter, bool *available) const override; + uint32 GetTriggers() const override; }; /** Resolver for industry tiles. */ @@ -45,7 +45,7 @@ struct IndustryTileResolverObject : public ResolverObject { IndustryTileResolverObject(IndustryGfx gfx, TileIndex tile, Industry *indus, CallbackID callback = CBID_NO_CALLBACK, uint32 callback_param1 = 0, uint32 callback_param2 = 0); - /* virtual */ ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: return &indtile_scope; diff --git a/src/newgrf_object.h b/src/newgrf_object.h index 43c8de031c..1ab351be91 100644 --- a/src/newgrf_object.h +++ b/src/newgrf_object.h @@ -116,8 +116,8 @@ struct ObjectScopeResolver : public ScopeResolver { { } - /* virtual */ uint32 GetRandomBits() const; - /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; + uint32 GetRandomBits() const override; + uint32 GetVariable(byte variable, uint32 parameter, bool *available) const override; }; /** A resolver object to be used with feature 0F spritegroups. */ @@ -129,7 +129,7 @@ struct ObjectResolverObject : public ResolverObject { CallbackID callback = CBID_NO_CALLBACK, uint32 param1 = 0, uint32 param2 = 0); ~ObjectResolverObject(); - /* virtual */ ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: diff --git a/src/newgrf_railtype.h b/src/newgrf_railtype.h index 5fadcd2ab5..829c166cb8 100644 --- a/src/newgrf_railtype.h +++ b/src/newgrf_railtype.h @@ -32,8 +32,8 @@ struct RailTypeScopeResolver : public ScopeResolver { { } - /* virtual */ uint32 GetRandomBits() const; - /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; + uint32 GetRandomBits() const override; + uint32 GetVariable(byte variable, uint32 parameter, bool *available) const override; }; /** Resolver object for rail types. */ @@ -42,7 +42,7 @@ struct RailTypeResolverObject : public ResolverObject { RailTypeResolverObject(const RailtypeInfo *rti, TileIndex tile, TileContext context, RailTypeSpriteGroup rtsg, uint32 param1 = 0, uint32 param2 = 0); - /* virtual */ ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: return &this->railtype_scope; @@ -50,7 +50,7 @@ struct RailTypeResolverObject : public ResolverObject { } } - /* virtual */ const SpriteGroup *ResolveReal(const RealSpriteGroup *group) const; + const SpriteGroup *ResolveReal(const RealSpriteGroup *group) const override; }; SpriteID GetCustomRailSprite(const RailtypeInfo *rti, TileIndex tile, RailTypeSpriteGroup rtsg, TileContext context = TCX_NORMAL, uint *num_results = NULL); diff --git a/src/newgrf_station.h b/src/newgrf_station.h index 123330d0ad..2a19b5811d 100644 --- a/src/newgrf_station.h +++ b/src/newgrf_station.h @@ -42,10 +42,10 @@ struct StationScopeResolver : public ScopeResolver { { } - /* virtual */ uint32 GetRandomBits() const; - /* virtual */ uint32 GetTriggers() const; + uint32 GetRandomBits() const override; + uint32 GetTriggers() const override; - /* virtual */ uint32 GetVariable(byte variable, uint32 parameter, bool *available) const; + uint32 GetVariable(byte variable, uint32 parameter, bool *available) const override; }; /** Station resolver. */ @@ -59,7 +59,7 @@ struct StationResolverObject : public ResolverObject { TownScopeResolver *GetTown(); - /* virtual */ ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: @@ -76,7 +76,7 @@ struct StationResolverObject : public ResolverObject { } } - /* virtual */ const SpriteGroup *ResolveReal(const RealSpriteGroup *group) const; + const SpriteGroup *ResolveReal(const RealSpriteGroup *group) const override; }; enum StationClassID { diff --git a/src/newgrf_town.h b/src/newgrf_town.h index 7c4fb5395c..a55f71f369 100644 --- a/src/newgrf_town.h +++ b/src/newgrf_town.h @@ -46,7 +46,7 @@ struct TownResolverObject : public ResolverObject { TownResolverObject(const struct GRFFile *grffile, Town *t, bool readonly); - /* virtual */ ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) + ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override { switch (scope) { case VSG_SCOPE_SELF: return &town_scope; diff --git a/src/os/macosx/crashlog_osx.cpp b/src/os/macosx/crashlog_osx.cpp index ad258bbc91..c1b3213402 100644 --- a/src/os/macosx/crashlog_osx.cpp +++ b/src/os/macosx/crashlog_osx.cpp @@ -52,7 +52,7 @@ class CrashLogOSX : public CrashLog { char filename_save[MAX_PATH]; ///< Path of crash.sav char filename_screenshot[MAX_PATH]; ///< Path of crash.(png|bmp|pcx) - /* virtual */ char *LogOSVersion(char *buffer, const char *last) const + char *LogOSVersion(char *buffer, const char *last) const override { int ver_maj, ver_min, ver_bug; GetMacOSVersion(&ver_maj, &ver_min, &ver_bug); @@ -71,7 +71,7 @@ class CrashLogOSX : public CrashLog { ); } - /* virtual */ char *LogError(char *buffer, const char *last, const char *message) const + char *LogError(char *buffer, const char *last, const char *message) const override { return buffer + seprintf(buffer, last, "Crash reason:\n" @@ -83,7 +83,7 @@ class CrashLogOSX : public CrashLog { ); } - /* virtual */ char *LogStacktrace(char *buffer, const char *last) const + char *LogStacktrace(char *buffer, const char *last) const override { /* As backtrace() is only implemented in 10.5 or later, * we're rolling our own here. Mostly based on diff --git a/src/os/unix/crashlog_unix.cpp b/src/os/unix/crashlog_unix.cpp index 47de057f7e..2e9f4215fe 100644 --- a/src/os/unix/crashlog_unix.cpp +++ b/src/os/unix/crashlog_unix.cpp @@ -40,7 +40,7 @@ class CrashLogUnix : public CrashLog { /** Signal that has been thrown. */ int signum; - /* virtual */ char *LogOSVersion(char *buffer, const char *last) const + char *LogOSVersion(char *buffer, const char *last) const override { struct utsname name; if (uname(&name) < 0) { @@ -60,7 +60,7 @@ class CrashLogUnix : public CrashLog { ); } - /* virtual */ char *LogError(char *buffer, const char *last, const char *message) const + char *LogError(char *buffer, const char *last, const char *message) const override { return buffer + seprintf(buffer, last, "Crash reason:\n" @@ -105,7 +105,7 @@ class CrashLogUnix : public CrashLog { } #endif - /* virtual */ char *LogStacktrace(char *buffer, const char *last) const + char *LogStacktrace(char *buffer, const char *last) const override { buffer += seprintf(buffer, last, "Stacktrace:\n"); #if defined(__GLIBC__) diff --git a/src/os/windows/crashlog_win.cpp b/src/os/windows/crashlog_win.cpp index 1abb0e725c..6bcaed837e 100644 --- a/src/os/windows/crashlog_win.cpp +++ b/src/os/windows/crashlog_win.cpp @@ -43,14 +43,14 @@ class CrashLogWindows : public CrashLog { /** Information about the encountered exception */ EXCEPTION_POINTERS *ep; - /* virtual */ char *LogOSVersion(char *buffer, const char *last) const; - /* virtual */ char *LogError(char *buffer, const char *last, const char *message) const; - /* virtual */ char *LogStacktrace(char *buffer, const char *last) const; - /* virtual */ char *LogRegisters(char *buffer, const char *last) const; - /* virtual */ char *LogModules(char *buffer, const char *last) const; + char *LogOSVersion(char *buffer, const char *last) const override; + char *LogError(char *buffer, const char *last, const char *message) const override; + char *LogStacktrace(char *buffer, const char *last) const override; + char *LogRegisters(char *buffer, const char *last) const override; + char *LogModules(char *buffer, const char *last) const override; public: #if defined(_MSC_VER) - /* virtual */ int WriteCrashDump(char *filename, const char *filename_last) const; + int WriteCrashDump(char *filename, const char *filename_last) const override; char *AppendDecodedStacktrace(char *buffer, const char *last) const; #else char *AppendDecodedStacktrace(char *buffer, const char *last) const { return buffer; } diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index cd30ed8592..f066d014d3 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -1844,7 +1844,7 @@ struct FileReader : LoadFilter { _sl.sf = NULL; } - /* virtual */ size_t Read(byte *buf, size_t size) + size_t Read(byte *buf, size_t size) override { /* We're in the process of shutting down, i.e. in "failure" mode. */ if (this->file == NULL) return 0; @@ -1852,7 +1852,7 @@ struct FileReader : LoadFilter { return fread(buf, 1, size, this->file); } - /* virtual */ void Reset() + void Reset() override { clearerr(this->file); if (fseek(this->file, this->begin, SEEK_SET)) { @@ -1882,7 +1882,7 @@ struct FileWriter : SaveFilter { _sl.sf = NULL; } - /* virtual */ void Write(byte *buf, size_t size) + void Write(byte *buf, size_t size) override { /* We're in the process of shutting down, i.e. in "failure" mode. */ if (this->file == NULL) return; @@ -1890,7 +1890,7 @@ struct FileWriter : SaveFilter { if (fwrite(buf, 1, size, this->file) != size) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE); } - /* virtual */ void Finish() + void Finish() override { if (this->file != NULL) fclose(this->file); this->file = NULL; @@ -1918,7 +1918,7 @@ struct LZOLoadFilter : LoadFilter { if (lzo_init() != LZO_E_OK) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, "cannot initialize decompressor"); } - /* virtual */ size_t Read(byte *buf, size_t ssize) + size_t Read(byte *buf, size_t ssize) override { assert(ssize >= LZO_BUFFER_SIZE); @@ -1966,7 +1966,7 @@ struct LZOSaveFilter : SaveFilter { if (lzo_init() != LZO_E_OK) SlError(STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR, "cannot initialize compressor"); } - /* virtual */ void Write(byte *buf, size_t size) + void Write(byte *buf, size_t size) override { const lzo_bytep in = buf; /* Buffer size is from the LZO docs plus the chunk header size. */ @@ -2005,7 +2005,7 @@ struct NoCompLoadFilter : LoadFilter { { } - /* virtual */ size_t Read(byte *buf, size_t size) + size_t Read(byte *buf, size_t size) override { return this->chain->Read(buf, size); } @@ -2022,7 +2022,7 @@ struct NoCompSaveFilter : SaveFilter { { } - /* virtual */ void Write(byte *buf, size_t size) + void Write(byte *buf, size_t size) override { this->chain->Write(buf, size); } @@ -2056,7 +2056,7 @@ struct ZlibLoadFilter : LoadFilter { inflateEnd(&this->z); } - /* virtual */ size_t Read(byte *buf, size_t size) + size_t Read(byte *buf, size_t size) override { this->z.next_out = buf; this->z.avail_out = (uint)size; @@ -2135,12 +2135,12 @@ struct ZlibSaveFilter : SaveFilter { } while (this->z.avail_in || !this->z.avail_out); } - /* virtual */ void Write(byte *buf, size_t size) + void Write(byte *buf, size_t size) override { this->WriteLoop(buf, size, 0); } - /* virtual */ void Finish() + void Finish() override { this->WriteLoop(NULL, 0, Z_FINISH); this->chain->Finish(); @@ -2185,7 +2185,7 @@ struct LZMALoadFilter : LoadFilter { lzma_end(&this->lzma); } - /* virtual */ size_t Read(byte *buf, size_t size) + size_t Read(byte *buf, size_t size) override { this->lzma.next_out = buf; this->lzma.avail_out = size; @@ -2254,12 +2254,12 @@ struct LZMASaveFilter : SaveFilter { } while (this->lzma.avail_in || !this->lzma.avail_out); } - /* virtual */ void Write(byte *buf, size_t size) + void Write(byte *buf, size_t size) override { this->WriteLoop(buf, size, LZMA_RUN); } - /* virtual */ void Finish() + void Finish() override { this->WriteLoop(NULL, 0, LZMA_FINISH); this->chain->Finish(); diff --git a/src/script/api/script_text.hpp b/src/script/api/script_text.hpp index ed14e391d0..0b82ffb20c 100644 --- a/src/script/api/script_text.hpp +++ b/src/script/api/script_text.hpp @@ -45,7 +45,7 @@ public: RawText(const char *text); ~RawText(); - /* virtual */ const char *GetEncodedText() { return this->text; } + const char *GetEncodedText() override { return this->text; } private: const char *text; }; diff --git a/src/script/script_scanner.hpp b/src/script/script_scanner.hpp index 50dad02ad2..7fecf6eb29 100644 --- a/src/script/script_scanner.hpp +++ b/src/script/script_scanner.hpp @@ -77,7 +77,7 @@ public: */ const char *FindMainScript(const ContentInfo *ci, bool md5sum); - /* virtual */ bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename); + bool AddFile(const char *filename, size_t basepath_length, const char *tar_filename) override; /** * Rescan the script dir. diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 60430b4906..c92701f0dd 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -152,7 +152,7 @@ struct BaseSetTextfileWindow : public TextfileWindow { this->LoadTextfile(textfile, BASESET_DIR); } - /* virtual */ void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget == WID_TF_CAPTION) { SetDParam(0, content_type); diff --git a/src/sound/allegro_s.h b/src/sound/allegro_s.h index e0a247f7b3..255be66c74 100644 --- a/src/sound/allegro_s.h +++ b/src/sound/allegro_s.h @@ -17,12 +17,12 @@ /** Implementation of the allegro sound driver. */ class SoundDriver_Allegro : public SoundDriver { public: - /* virtual */ const char *Start(const char * const *param); + const char *Start(const char * const *param); - /* virtual */ void Stop(); + void Stop(); - /* virtual */ void MainLoop(); - /* virtual */ const char *GetName() const { return "allegro"; } + void MainLoop(); + const char *GetName() const { return "allegro"; } }; /** Factory for the allegro sound driver. */ diff --git a/src/sound/cocoa_s.h b/src/sound/cocoa_s.h index 7010914258..dd2d740204 100644 --- a/src/sound/cocoa_s.h +++ b/src/sound/cocoa_s.h @@ -16,16 +16,16 @@ class SoundDriver_Cocoa : public SoundDriver { public: - /* virtual */ const char *Start(const char * const *param); + const char *Start(const char * const *param) override; - /* virtual */ void Stop(); - /* virtual */ const char *GetName() const { return "cocoa"; } + void Stop() override; + const char *GetName() const override { return "cocoa"; } }; class FSoundDriver_Cocoa : public DriverFactoryBase { public: FSoundDriver_Cocoa() : DriverFactoryBase(Driver::DT_SOUND, 10, "cocoa", "Cocoa Sound Driver") {} - /* virtual */ Driver *CreateInstance() const { return new SoundDriver_Cocoa(); } + Driver *CreateInstance() const override { return new SoundDriver_Cocoa(); } }; #endif /* SOUND_COCOA_H */ diff --git a/src/sound/null_s.h b/src/sound/null_s.h index b2acd90937..ca9adb546a 100644 --- a/src/sound/null_s.h +++ b/src/sound/null_s.h @@ -17,17 +17,17 @@ /** Implementation of the null sound driver. */ class SoundDriver_Null : public SoundDriver { public: - /* virtual */ const char *Start(const char * const *param) { return NULL; } + const char *Start(const char * const *param) override { return NULL; } - /* virtual */ void Stop() { } - /* virtual */ const char *GetName() const { return "null"; } + void Stop() override { } + const char *GetName() const override { return "null"; } }; /** Factory for the null sound driver. */ class FSoundDriver_Null : public DriverFactoryBase { public: FSoundDriver_Null() : DriverFactoryBase(Driver::DT_SOUND, 1, "null", "Null Sound Driver") {} - /* virtual */ Driver *CreateInstance() const { return new SoundDriver_Null(); } + Driver *CreateInstance() const override { return new SoundDriver_Null(); } }; #endif /* SOUND_NULL_H */ diff --git a/src/sound/sdl_s.h b/src/sound/sdl_s.h index 544ce2070d..2d36b46297 100644 --- a/src/sound/sdl_s.h +++ b/src/sound/sdl_s.h @@ -17,17 +17,17 @@ /** Implementation of the SDL sound driver. */ class SoundDriver_SDL : public SoundDriver { public: - /* virtual */ const char *Start(const char * const *param); + const char *Start(const char * const *param) override; - /* virtual */ void Stop(); - /* virtual */ const char *GetName() const { return "sdl"; } + void Stop() override; + const char *GetName() const override { return "sdl"; } }; /** Factory for the SDL sound driver. */ class FSoundDriver_SDL : public DriverFactoryBase { public: FSoundDriver_SDL() : DriverFactoryBase(Driver::DT_SOUND, 5, "sdl", "SDL Sound Driver") {} - /* virtual */ Driver *CreateInstance() const { return new SoundDriver_SDL(); } + Driver *CreateInstance() const override { return new SoundDriver_SDL(); } }; #endif /* SOUND_SDL_H */ diff --git a/src/sound/win32_s.h b/src/sound/win32_s.h index c6c8e8d149..a0d53a2dae 100644 --- a/src/sound/win32_s.h +++ b/src/sound/win32_s.h @@ -17,17 +17,17 @@ /** Implementation of the sound driver for Windows. */ class SoundDriver_Win32 : public SoundDriver { public: - /* virtual */ const char *Start(const char * const *param); + const char *Start(const char * const *param) override; - /* virtual */ void Stop(); - /* virtual */ const char *GetName() const { return "win32"; } + void Stop() override; + const char *GetName() const override { return "win32"; } }; /** Factory for the sound driver for Windows. */ class FSoundDriver_Win32 : public DriverFactoryBase { public: FSoundDriver_Win32() : DriverFactoryBase(Driver::DT_SOUND, 9, "win32", "Win32 WaveOut Sound Driver") {} - /* virtual */ Driver *CreateInstance() const { return new SoundDriver_Win32(); } + Driver *CreateInstance() const override { return new SoundDriver_Win32(); } }; #endif /* SOUND_WIN32_H */ diff --git a/src/sound/xaudio2_s.h b/src/sound/xaudio2_s.h index 2385f49ee2..f3525251cf 100644 --- a/src/sound/xaudio2_s.h +++ b/src/sound/xaudio2_s.h @@ -17,17 +17,17 @@ /** Implementation of the XAudio2 sound driver. */ class SoundDriver_XAudio2 : public SoundDriver { public: - /* virtual */ const char *Start(const char * const *param); + const char *Start(const char * const *param) override; - /* virtual */ void Stop(); - /* virtual */ const char *GetName() const { return "xaudio2"; } + void Stop() override; + const char *GetName() const override { return "xaudio2"; } }; /** Factory for the XAudio2 sound driver. */ class FSoundDriver_XAudio2 : public DriverFactoryBase { public: FSoundDriver_XAudio2() : DriverFactoryBase(Driver::DT_SOUND, 10, "xaudio2", "XAudio2 Sound Driver") {} - /* virtual */ Driver *CreateInstance() const { return new SoundDriver_XAudio2(); } + Driver *CreateInstance() const override { return new SoundDriver_XAudio2(); } }; #endif /* SOUND_XAUDIO2_H */ diff --git a/src/station_base.h b/src/station_base.h index b3a4a76c71..243a2f0cec 100644 --- a/src/station_base.h +++ b/src/station_base.h @@ -490,12 +490,12 @@ public: void MarkTilesDirty(bool cargo_change) const; - void UpdateVirtCoord(); + void UpdateVirtCoord() override; void AfterStationTileSetChange(bool adding, StationType type); - /* virtual */ uint GetPlatformLength(TileIndex tile, DiagDirection dir) const; - /* virtual */ uint GetPlatformLength(TileIndex tile) const; + uint GetPlatformLength(TileIndex tile, DiagDirection dir) const override; + uint GetPlatformLength(TileIndex tile) const override; void RecomputeCatchment(); static void RecomputeCatchmentForAll(); @@ -509,7 +509,7 @@ public: return this->catchment_tiles.HasTile(tile); } - /* virtual */ inline bool TileBelongsToRailStation(TileIndex tile) const + inline bool TileBelongsToRailStation(TileIndex tile) const override { return IsRailStationTile(tile) && GetStationIndex(tile) == this->index; } @@ -519,9 +519,9 @@ public: return IsAirportTile(tile) && GetStationIndex(tile) == this->index; } - /* virtual */ uint32 GetNewGRFVariable(const ResolverObject &object, byte variable, byte parameter, bool *available) const; + uint32 GetNewGRFVariable(const ResolverObject &object, byte variable, byte parameter, bool *available) const override; - /* virtual */ void GetTileArea(TileArea *ta, StationType type) const; + void GetTileArea(TileArea *ta, StationType type) const override; }; #define FOR_ALL_STATIONS(var) FOR_ALL_BASE_STATIONS_OF_TYPE(Station, var) diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp index 11e6b8dbde..5b361430f5 100644 --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -115,14 +115,14 @@ struct FileStringReader : StringReader { fclose(this->fh); } - /* virtual */ char *ReadLine(char *buffer, const char *last) + char *ReadLine(char *buffer, const char *last) override { return fgets(buffer, ClampToU16(last - buffer + 1), this->fh); } - /* virtual */ void HandlePragma(char *str); + void HandlePragma(char *str) override; - /* virtual */ void ParseFile() + void ParseFile() override { this->StringReader::ParseFile(); diff --git a/src/strings.cpp b/src/strings.cpp index c4ae5218a3..57a1757021 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -2032,18 +2032,18 @@ class LanguagePackGlyphSearcher : public MissingGlyphSearcher { uint i; ///< Iterator for the primary language tables. uint j; ///< Iterator for the secondary language tables. - /* virtual */ void Reset() + void Reset() override { this->i = 0; this->j = 0; } - /* virtual */ FontSize DefaultSize() + FontSize DefaultSize() override { return FS_NORMAL; } - /* virtual */ const char *NextString() + const char *NextString() override { if (this->i >= TEXT_TAB_END) return NULL; @@ -2058,12 +2058,12 @@ class LanguagePackGlyphSearcher : public MissingGlyphSearcher { return ret; } - /* virtual */ bool Monospace() + bool Monospace() override { return false; } - /* virtual */ void SetFontNames(FreeTypeSettings *settings, const char *font_name) + void SetFontNames(FreeTypeSettings *settings, const char *font_name) override { #ifdef WITH_FREETYPE strecpy(settings->small.font, font_name, lastof(settings->small.font)); diff --git a/src/table/newgrf_debug_data.h b/src/table/newgrf_debug_data.h index 19b411fed0..d04827c772 100644 --- a/src/table/newgrf_debug_data.h +++ b/src/table/newgrf_debug_data.h @@ -69,14 +69,14 @@ static const NIVariable _niv_vehicles[] = { }; class NIHVehicle : public NIHelper { - bool IsInspectable(uint index) const { return Vehicle::Get(index)->GetGRF() != NULL; } - uint GetParent(uint index) const { const Vehicle *first = Vehicle::Get(index)->First(); return GetInspectWindowNumber(GetGrfSpecFeature(first->type), first->index); } - const void *GetInstance(uint index)const { return Vehicle::Get(index); } - const void *GetSpec(uint index) const { return Vehicle::Get(index)->GetEngine(); } - void SetStringParameters(uint index) const { this->SetSimpleStringParameters(STR_VEHICLE_NAME, index); } - uint32 GetGRFID(uint index) const { return Vehicle::Get(index)->GetGRFID(); } + bool IsInspectable(uint index) const override { return Vehicle::Get(index)->GetGRF() != NULL; } + uint GetParent(uint index) const override { const Vehicle *first = Vehicle::Get(index)->First(); return GetInspectWindowNumber(GetGrfSpecFeature(first->type), first->index); } + const void *GetInstance(uint index)const override { return Vehicle::Get(index); } + const void *GetSpec(uint index) const override { return Vehicle::Get(index)->GetEngine(); } + void SetStringParameters(uint index) const override { this->SetSimpleStringParameters(STR_VEHICLE_NAME, index); } + uint32 GetGRFID(uint index) const override { return Vehicle::Get(index)->GetGRFID(); } - /* virtual */ uint Resolve(uint index, uint var, uint param, bool *avail) const + uint Resolve(uint index, uint var, uint param, bool *avail) const override { Vehicle *v = Vehicle::Get(index); VehicleResolverObject ro(v->engine_type, v, VehicleResolverObject::WO_CACHED); @@ -132,14 +132,14 @@ static const NIVariable _niv_stations[] = { }; class NIHStation : public NIHelper { - bool IsInspectable(uint index) const { return GetStationSpec(index) != NULL; } - uint GetParent(uint index) const { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Station::GetByTile(index)->town->index); } - const void *GetInstance(uint index)const { return NULL; } - const void *GetSpec(uint index) const { return GetStationSpec(index); } - void SetStringParameters(uint index) const { this->SetObjectAtStringParameters(STR_STATION_NAME, GetStationIndex(index), index); } - uint32 GetGRFID(uint index) const { return (this->IsInspectable(index)) ? GetStationSpec(index)->grf_prop.grffile->grfid : 0; } + bool IsInspectable(uint index) const override { return GetStationSpec(index) != NULL; } + uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Station::GetByTile(index)->town->index); } + const void *GetInstance(uint index)const override { return NULL; } + const void *GetSpec(uint index) const override { return GetStationSpec(index); } + void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_STATION_NAME, GetStationIndex(index), index); } + uint32 GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? GetStationSpec(index)->grf_prop.grffile->grfid : 0; } - /* virtual */ uint Resolve(uint index, uint var, uint param, bool *avail) const + uint Resolve(uint index, uint var, uint param, bool *avail) const override { StationResolverObject ro(GetStationSpec(index), Station::GetByTile(index), index); return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail); @@ -197,14 +197,14 @@ static const NIVariable _niv_house[] = { }; class NIHHouse : public NIHelper { - bool IsInspectable(uint index) const { return HouseSpec::Get(GetHouseType(index))->grf_prop.grffile != NULL; } - uint GetParent(uint index) const { return GetInspectWindowNumber(GSF_FAKE_TOWNS, GetTownIndex(index)); } - const void *GetInstance(uint index)const { return NULL; } - const void *GetSpec(uint index) const { return HouseSpec::Get(GetHouseType(index)); } - void SetStringParameters(uint index) const { this->SetObjectAtStringParameters(STR_TOWN_NAME, GetTownIndex(index), index); } - uint32 GetGRFID(uint index) const { return (this->IsInspectable(index)) ? HouseSpec::Get(GetHouseType(index))->grf_prop.grffile->grfid : 0; } + bool IsInspectable(uint index) const override { return HouseSpec::Get(GetHouseType(index))->grf_prop.grffile != NULL; } + uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_FAKE_TOWNS, GetTownIndex(index)); } + const void *GetInstance(uint index)const override { return NULL; } + const void *GetSpec(uint index) const override { return HouseSpec::Get(GetHouseType(index)); } + void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_TOWN_NAME, GetTownIndex(index), index); } + uint32 GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? HouseSpec::Get(GetHouseType(index))->grf_prop.grffile->grfid : 0; } - /* virtual */ uint Resolve(uint index, uint var, uint param, bool *avail) const + uint Resolve(uint index, uint var, uint param, bool *avail) const override { HouseResolverObject ro(GetHouseType(index), index, Town::GetByTile(index)); return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail); @@ -247,14 +247,14 @@ static const NIVariable _niv_industrytiles[] = { }; class NIHIndustryTile : public NIHelper { - bool IsInspectable(uint index) const { return GetIndustryTileSpec(GetIndustryGfx(index))->grf_prop.grffile != NULL; } - uint GetParent(uint index) const { return GetInspectWindowNumber(GSF_INDUSTRIES, GetIndustryIndex(index)); } - const void *GetInstance(uint index)const { return NULL; } - const void *GetSpec(uint index) const { return GetIndustryTileSpec(GetIndustryGfx(index)); } - void SetStringParameters(uint index) const { this->SetObjectAtStringParameters(STR_INDUSTRY_NAME, GetIndustryIndex(index), index); } - uint32 GetGRFID(uint index) const { return (this->IsInspectable(index)) ? GetIndustryTileSpec(GetIndustryGfx(index))->grf_prop.grffile->grfid : 0; } + bool IsInspectable(uint index) const override { return GetIndustryTileSpec(GetIndustryGfx(index))->grf_prop.grffile != NULL; } + uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_INDUSTRIES, GetIndustryIndex(index)); } + const void *GetInstance(uint index)const override { return NULL; } + const void *GetSpec(uint index) const override { return GetIndustryTileSpec(GetIndustryGfx(index)); } + void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_INDUSTRY_NAME, GetIndustryIndex(index), index); } + uint32 GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? GetIndustryTileSpec(GetIndustryGfx(index))->grf_prop.grffile->grfid : 0; } - /* virtual */ uint Resolve(uint index, uint var, uint param, bool *avail) const + uint Resolve(uint index, uint var, uint param, bool *avail) const override { IndustryTileResolverObject ro(GetIndustryGfx(index), index, Industry::GetByTile(index)); return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail); @@ -346,23 +346,23 @@ static const NIVariable _niv_industries[] = { }; class NIHIndustry : public NIHelper { - bool IsInspectable(uint index) const { return GetIndustrySpec(Industry::Get(index)->type)->grf_prop.grffile != NULL; } - uint GetParent(uint index) const { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Industry::Get(index)->town->index); } - const void *GetInstance(uint index)const { return Industry::Get(index); } - const void *GetSpec(uint index) const { return GetIndustrySpec(Industry::Get(index)->type); } - void SetStringParameters(uint index) const { this->SetSimpleStringParameters(STR_INDUSTRY_NAME, index); } - uint32 GetGRFID(uint index) const { return (this->IsInspectable(index)) ? GetIndustrySpec(Industry::Get(index)->type)->grf_prop.grffile->grfid : 0; } + bool IsInspectable(uint index) const override { return GetIndustrySpec(Industry::Get(index)->type)->grf_prop.grffile != NULL; } + uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Industry::Get(index)->town->index); } + const void *GetInstance(uint index)const override { return Industry::Get(index); } + const void *GetSpec(uint index) const override { return GetIndustrySpec(Industry::Get(index)->type); } + void SetStringParameters(uint index) const override { this->SetSimpleStringParameters(STR_INDUSTRY_NAME, index); } + uint32 GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? GetIndustrySpec(Industry::Get(index)->type)->grf_prop.grffile->grfid : 0; } - /* virtual */ uint Resolve(uint index, uint var, uint param, bool *avail) const + uint Resolve(uint index, uint var, uint param, bool *avail) const override { Industry *i = Industry::Get(index); IndustriesResolverObject ro(i->location.tile, i, i->type); return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail); } - uint GetPSASize(uint index, uint32 grfid) const { return cpp_lengthof(PersistentStorage, storage); } + uint GetPSASize(uint index, uint32 grfid) const override { return cpp_lengthof(PersistentStorage, storage); } - const int32 *GetPSAFirstPosition(uint index, uint32 grfid) const + const int32 *GetPSAFirstPosition(uint index, uint32 grfid) const override { const Industry *i = (const Industry *)this->GetInstance(index); if (i->psa == NULL) return NULL; @@ -411,14 +411,14 @@ static const NIVariable _niv_objects[] = { }; class NIHObject : public NIHelper { - bool IsInspectable(uint index) const { return ObjectSpec::GetByTile(index)->grf_prop.grffile != NULL; } - uint GetParent(uint index) const { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Object::GetByTile(index)->town->index); } - const void *GetInstance(uint index)const { return Object::GetByTile(index); } - const void *GetSpec(uint index) const { return ObjectSpec::GetByTile(index); } - void SetStringParameters(uint index) const { this->SetObjectAtStringParameters(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT, INVALID_STRING_ID, index); } - uint32 GetGRFID(uint index) const { return (this->IsInspectable(index)) ? ObjectSpec::GetByTile(index)->grf_prop.grffile->grfid : 0; } + bool IsInspectable(uint index) const override { return ObjectSpec::GetByTile(index)->grf_prop.grffile != NULL; } + uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Object::GetByTile(index)->town->index); } + const void *GetInstance(uint index)const override { return Object::GetByTile(index); } + const void *GetSpec(uint index) const override { return ObjectSpec::GetByTile(index); } + void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT, INVALID_STRING_ID, index); } + uint32 GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? ObjectSpec::GetByTile(index)->grf_prop.grffile->grfid : 0; } - /* virtual */ uint Resolve(uint index, uint var, uint param, bool *avail) const + uint Resolve(uint index, uint var, uint param, bool *avail) const override { ObjectResolverObject ro(ObjectSpec::GetByTile(index), Object::GetByTile(index), index); return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail); @@ -445,14 +445,14 @@ static const NIVariable _niv_railtypes[] = { }; class NIHRailType : public NIHelper { - bool IsInspectable(uint index) const { return true; } - uint GetParent(uint index) const { return UINT32_MAX; } - const void *GetInstance(uint index)const { return NULL; } - const void *GetSpec(uint index) const { return NULL; } - void SetStringParameters(uint index) const { this->SetObjectAtStringParameters(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE, INVALID_STRING_ID, index); } - uint32 GetGRFID(uint index) const { return 0; } + bool IsInspectable(uint index) const override { return true; } + uint GetParent(uint index) const override { return UINT32_MAX; } + const void *GetInstance(uint index)const override { return NULL; } + const void *GetSpec(uint index) const override { return NULL; } + void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE, INVALID_STRING_ID, index); } + uint32 GetGRFID(uint index) const override { return 0; } - /* virtual */ uint Resolve(uint index, uint var, uint param, bool *avail) const + uint Resolve(uint index, uint var, uint param, bool *avail) const override { /* There is no unique GRFFile for the tile. Multiple GRFs can define different parts of the railtype. * However, currently the NewGRF Debug GUI does not display variables depending on the GRF (like 0x7F) anyway. */ @@ -481,14 +481,14 @@ static const NICallback _nic_airporttiles[] = { }; class NIHAirportTile : public NIHelper { - bool IsInspectable(uint index) const { return AirportTileSpec::Get(GetAirportGfx(index))->grf_prop.grffile != NULL; } - uint GetParent(uint index) const { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Station::GetByTile(index)->town->index); } - const void *GetInstance(uint index)const { return NULL; } - const void *GetSpec(uint index) const { return AirportTileSpec::Get(GetAirportGfx(index)); } - void SetStringParameters(uint index) const { this->SetObjectAtStringParameters(STR_STATION_NAME, GetStationIndex(index), index); } - uint32 GetGRFID(uint index) const { return (this->IsInspectable(index)) ? AirportTileSpec::Get(GetAirportGfx(index))->grf_prop.grffile->grfid : 0; } + bool IsInspectable(uint index) const override { return AirportTileSpec::Get(GetAirportGfx(index))->grf_prop.grffile != NULL; } + uint GetParent(uint index) const override { return GetInspectWindowNumber(GSF_FAKE_TOWNS, Station::GetByTile(index)->town->index); } + const void *GetInstance(uint index)const override { return NULL; } + const void *GetSpec(uint index) const override { return AirportTileSpec::Get(GetAirportGfx(index)); } + void SetStringParameters(uint index) const override { this->SetObjectAtStringParameters(STR_STATION_NAME, GetStationIndex(index), index); } + uint32 GetGRFID(uint index) const override { return (this->IsInspectable(index)) ? AirportTileSpec::Get(GetAirportGfx(index))->grf_prop.grffile->grfid : 0; } - /* virtual */ uint Resolve(uint index, uint var, uint param, bool *avail) const + uint Resolve(uint index, uint var, uint param, bool *avail) const override { AirportTileResolverObject ro(AirportTileSpec::GetByTile(index), index, Station::GetByTile(index)); return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail); @@ -519,22 +519,22 @@ static const NIVariable _niv_towns[] = { }; class NIHTown : public NIHelper { - bool IsInspectable(uint index) const { return Town::IsValidID(index); } - uint GetParent(uint index) const { return UINT32_MAX; } - const void *GetInstance(uint index)const { return Town::Get(index); } - const void *GetSpec(uint index) const { return NULL; } - void SetStringParameters(uint index) const { this->SetSimpleStringParameters(STR_TOWN_NAME, index); } - uint32 GetGRFID(uint index) const { return 0; } - bool PSAWithParameter() const { return true; } - uint GetPSASize(uint index, uint32 grfid) const { return cpp_lengthof(PersistentStorage, storage); } + bool IsInspectable(uint index) const override { return Town::IsValidID(index); } + uint GetParent(uint index) const override { return UINT32_MAX; } + const void *GetInstance(uint index)const override { return Town::Get(index); } + const void *GetSpec(uint index) const override { return NULL; } + void SetStringParameters(uint index) const override { this->SetSimpleStringParameters(STR_TOWN_NAME, index); } + uint32 GetGRFID(uint index) const override { return 0; } + bool PSAWithParameter() const override { return true; } + uint GetPSASize(uint index, uint32 grfid) const override { return cpp_lengthof(PersistentStorage, storage); } - /* virtual */ uint Resolve(uint index, uint var, uint param, bool *avail) const + uint Resolve(uint index, uint var, uint param, bool *avail) const override { TownResolverObject ro(NULL, Town::Get(index), true); return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail); } - const int32 *GetPSAFirstPosition(uint index, uint32 grfid) const + const int32 *GetPSAFirstPosition(uint index, uint32 grfid) const override { Town *t = Town::Get(index); diff --git a/src/thread/thread_os2.cpp b/src/thread/thread_os2.cpp index c66e2ad643..976283f231 100644 --- a/src/thread/thread_os2.cpp +++ b/src/thread/thread_os2.cpp @@ -41,13 +41,13 @@ public: thread = _beginthread(stThreadProc, NULL, 1048576, this); } - /* virtual */ bool Exit() + bool Exit() override { _endthread(); return true; } - /* virtual */ void Join() + void Join() override { DosWaitThread(&this->thread, DCWW_WAIT); this->thread = 0; @@ -106,13 +106,13 @@ public: DosCreateEventSem(NULL, &event, 0, FALSE); } - /* virtual */ ~ThreadMutex_OS2() + ~ThreadMutex_OS2() override { DosCloseMutexSem(mutex); DosCloseEventSem(event); } - /* virtual */ void BeginCritical(bool allow_recursive = false) + void BeginCritical(bool allow_recursive = false) override { /* os2 mutex is recursive by itself */ DosRequestMutexSem(mutex, (unsigned long) SEM_INDEFINITE_WAIT); @@ -120,14 +120,14 @@ public: if (!allow_recursive && this->recursive_count != 1) NOT_REACHED(); } - /* virtual */ void EndCritical(bool allow_recursive = false) + void EndCritical(bool allow_recursive = false) override { if (!allow_recursive && this->recursive_count != 1) NOT_REACHED(); this->recursive_count--; DosReleaseMutexSem(mutex); } - /* virtual */ void WaitForSignal() + void WaitForSignal() override { assert(this->recursive_count == 1); // Do we need to call Begin/EndCritical multiple times otherwise? this->EndCritical(); @@ -135,7 +135,7 @@ public: this->BeginCritical(); } - /* virtual */ void SendSignal() + void SendSignal() override { DosPostEventSem(event); } diff --git a/src/thread/thread_pthread.cpp b/src/thread/thread_pthread.cpp index 8aed5ee136..afb259183e 100644 --- a/src/thread/thread_pthread.cpp +++ b/src/thread/thread_pthread.cpp @@ -45,14 +45,14 @@ public: pthread_create(&this->thread, NULL, &stThreadProc, this); } - /* virtual */ bool Exit() + bool Exit() override { assert(pthread_self() == this->thread); /* For now we terminate by throwing an error, gives much cleaner cleanup */ throw OTTDThreadExitSignal(); } - /* virtual */ void Join() + void Join() override { /* You cannot join yourself */ assert(pthread_self() != this->thread); @@ -129,7 +129,7 @@ public: pthread_cond_init(&this->condition, NULL); } - /* virtual */ ~ThreadMutex_pthread() + ~ThreadMutex_pthread() override { int err = pthread_cond_destroy(&this->condition); assert(err != EBUSY); @@ -142,7 +142,7 @@ public: return this->owner == pthread_self(); } - /* virtual */ void BeginCritical(bool allow_recursive = false) + void BeginCritical(bool allow_recursive = false) override { /* pthread mutex is not recursive by itself */ if (this->IsOwnedByCurrentThread()) { @@ -156,7 +156,7 @@ public: this->recursive_count++; } - /* virtual */ void EndCritical(bool allow_recursive = false) + void EndCritical(bool allow_recursive = false) override { assert(this->IsOwnedByCurrentThread()); if (!allow_recursive && this->recursive_count != 1) NOT_REACHED(); @@ -167,7 +167,7 @@ public: assert(err == 0); } - /* virtual */ void WaitForSignal() + void WaitForSignal() override { uint old_recursive_count = this->recursive_count; this->recursive_count = 0; @@ -178,7 +178,7 @@ public: this->recursive_count = old_recursive_count; } - /* virtual */ void SendSignal() + void SendSignal() override { int err = pthread_cond_signal(&this->condition); assert(err == 0); diff --git a/src/thread/thread_win32.cpp b/src/thread/thread_win32.cpp index a01ea8e108..506faa069e 100644 --- a/src/thread/thread_win32.cpp +++ b/src/thread/thread_win32.cpp @@ -49,7 +49,7 @@ public: ResumeThread(this->thread); } - /* virtual */ ~ThreadObject_Win32() + ~ThreadObject_Win32() override { if (this->thread != NULL) { CloseHandle(this->thread); @@ -57,14 +57,14 @@ public: } } - /* virtual */ bool Exit() + bool Exit() override { assert(GetCurrentThreadId() == this->id); /* For now we terminate by throwing an error, gives much cleaner cleanup */ throw OTTDThreadExitSignal(); } - /* virtual */ void Join() + void Join() override { /* You cannot join yourself */ assert(GetCurrentThreadId() != this->id); @@ -126,13 +126,13 @@ public: this->event = CreateEvent(NULL, FALSE, FALSE, NULL); } - /* virtual */ ~ThreadMutex_Win32() + ~ThreadMutex_Win32() override { DeleteCriticalSection(&this->critical_section); CloseHandle(this->event); } - /* virtual */ void BeginCritical(bool allow_recursive = false) + void BeginCritical(bool allow_recursive = false) override { /* windows mutex is recursive by itself */ EnterCriticalSection(&this->critical_section); @@ -140,14 +140,14 @@ public: if (!allow_recursive && this->recursive_count != 1) NOT_REACHED(); } - /* virtual */ void EndCritical(bool allow_recursive = false) + void EndCritical(bool allow_recursive = false) override { if (!allow_recursive && this->recursive_count != 1) NOT_REACHED(); this->recursive_count--; LeaveCriticalSection(&this->critical_section); } - /* virtual */ void WaitForSignal() + void WaitForSignal() override { assert(this->recursive_count == 1); // Do we need to call Begin/EndCritical multiple times otherwise? this->EndCritical(); @@ -155,7 +155,7 @@ public: this->BeginCritical(); } - /* virtual */ void SendSignal() + void SendSignal() override { SetEvent(this->event); } diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 2277a5cf6f..c3bf5953d7 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -1332,7 +1332,7 @@ public: return type == WWT_IMGBTN || type == WWT_IMGBTN_2 || type == WWT_PUSHIMGBTN; } - void SetupSmallestSize(Window *w, bool init_array) + void SetupSmallestSize(Window *w, bool init_array) override { this->smallest_x = 0; // Biggest child this->smallest_y = 0; // Biggest child @@ -1365,7 +1365,7 @@ public: _toolbar_width = nbuttons * this->smallest_x; } - void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl) + void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl) override { assert(given_width >= this->smallest_x && given_height >= this->smallest_y); @@ -1428,7 +1428,7 @@ public: } } - /* virtual */ void Draw(const Window *w) + void Draw(const Window *w) override { /* Draw brown-red toolbar bg. */ GfxFillRect(this->pos_x, this->pos_y, this->pos_x + this->current_x - 1, this->pos_y + this->current_y - 1, PC_VERY_DARK_RED); @@ -1443,7 +1443,7 @@ public: } } - /* virtual */ NWidgetCore *GetWidgetFromPos(int x, int y) + NWidgetCore *GetWidgetFromPos(int x, int y) override { if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return NULL; @@ -1470,7 +1470,7 @@ public: /** Container for the 'normal' main toolbar */ class NWidgetMainToolbarContainer : public NWidgetToolbarContainer { - /* virtual */ const byte *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const + const byte *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const override { static const uint SMALLEST_ARRANGEMENT = 14; static const uint BIGGEST_ARRANGEMENT = 20; @@ -1793,7 +1793,7 @@ class NWidgetMainToolbarContainer : public NWidgetToolbarContainer { class NWidgetScenarioToolbarContainer : public NWidgetToolbarContainer { uint panel_widths[2]; ///< The width of the two panels (the text panel and date panel) - void SetupSmallestSize(Window *w, bool init_array) + void SetupSmallestSize(Window *w, bool init_array) override { this->NWidgetToolbarContainer::SetupSmallestSize(w, init_array); @@ -1808,7 +1808,7 @@ class NWidgetScenarioToolbarContainer : public NWidgetToolbarContainer { } } - /* virtual */ const byte *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const + const byte *GetButtonArrangement(uint &width, uint &arrangable_count, uint &button_count, uint &spacer_count) const override { static const byte arrange_all[] = { WID_TE_PAUSE, diff --git a/src/video/allegro_v.h b/src/video/allegro_v.h index a770635da0..f68ce5781d 100644 --- a/src/video/allegro_v.h +++ b/src/video/allegro_v.h @@ -17,30 +17,30 @@ /** The allegro video driver. */ class VideoDriver_Allegro : public VideoDriver { public: - /* virtual */ const char *Start(const char * const *param); + const char *Start(const char * const *param) override; - /* virtual */ void Stop(); + void Stop() override; - /* virtual */ void MakeDirty(int left, int top, int width, int height); + void MakeDirty(int left, int top, int width, int height) override; - /* virtual */ void MainLoop(); + void MainLoop() override; - /* virtual */ bool ChangeResolution(int w, int h); + bool ChangeResolution(int w, int h) override; - /* virtual */ bool ToggleFullscreen(bool fullscreen); + bool ToggleFullscreen(bool fullscreen) override; - /* virtual */ bool AfterBlitterChange(); + bool AfterBlitterChange() override; - /* virtual */ bool ClaimMousePointer(); + bool ClaimMousePointer() override; - /* virtual */ const char *GetName() const { return "allegro"; } + const char *GetName() const override { return "allegro"; } }; /** Factory for the allegro video driver. */ class FVideoDriver_Allegro : public DriverFactoryBase { public: FVideoDriver_Allegro() : DriverFactoryBase(Driver::DT_VIDEO, 4, "allegro", "Allegro Video Driver") {} - /* virtual */ Driver *CreateInstance() const { return new VideoDriver_Allegro(); } + Driver *CreateInstance() const override { return new VideoDriver_Allegro(); } }; #endif /* VIDEO_ALLEGRO_H */ diff --git a/src/video/cocoa/cocoa_v.h b/src/video/cocoa/cocoa_v.h index 564daefe0f..2614eef537 100644 --- a/src/video/cocoa/cocoa_v.h +++ b/src/video/cocoa/cocoa_v.h @@ -16,10 +16,10 @@ class VideoDriver_Cocoa : public VideoDriver { public: - /* virtual */ const char *Start(const char * const *param); + const char *Start(const char * const *param) override; /** Stop the video driver */ - /* virtual */ void Stop(); + void Stop() override; /** Mark dirty a screen region * @param left x-coordinate of left border @@ -27,44 +27,44 @@ public: * @param width width or dirty rectangle * @param height height of dirty rectangle */ - /* virtual */ void MakeDirty(int left, int top, int width, int height); + void MakeDirty(int left, int top, int width, int height) override; /** Programme main loop */ - /* virtual */ void MainLoop(); + void MainLoop() override; /** Change window resolution * @param w New window width * @param h New window height * @return Whether change was successful */ - /* virtual */ bool ChangeResolution(int w, int h); + bool ChangeResolution(int w, int h) override; /** Set a new window mode * @param fullscreen Whether to set fullscreen mode or not * @return Whether changing the screen mode was successful */ - /* virtual */ bool ToggleFullscreen(bool fullscreen); + bool ToggleFullscreen(bool fullscreen) override; /** Callback invoked after the blitter was changed. * @return True if no error. */ - /* virtual */ bool AfterBlitterChange(); + bool AfterBlitterChange() override; /** * An edit box lost the input focus. Abort character compositing if necessary. */ - /* virtual */ void EditBoxLostFocus(); + void EditBoxLostFocus() override; /** Return driver name * @return driver name */ - /* virtual */ const char *GetName() const { return "cocoa"; } + const char *GetName() const override { return "cocoa"; } }; class FVideoDriver_Cocoa : public DriverFactoryBase { public: FVideoDriver_Cocoa() : DriverFactoryBase(Driver::DT_VIDEO, 10, "cocoa", "Cocoa Video Driver") {} - /* virtual */ Driver *CreateInstance() const { return new VideoDriver_Cocoa(); } + Driver *CreateInstance() const override { return new VideoDriver_Cocoa(); } }; diff --git a/src/video/dedicated_v.h b/src/video/dedicated_v.h index 0c1477d66d..bdf873c3d7 100644 --- a/src/video/dedicated_v.h +++ b/src/video/dedicated_v.h @@ -17,19 +17,19 @@ /** The dedicated server video driver. */ class VideoDriver_Dedicated : public VideoDriver { public: - /* virtual */ const char *Start(const char * const *param); + const char *Start(const char * const *param) override; - /* virtual */ void Stop(); + void Stop() override; - /* virtual */ void MakeDirty(int left, int top, int width, int height); + void MakeDirty(int left, int top, int width, int height) override; - /* virtual */ void MainLoop(); + void MainLoop() override; - /* virtual */ bool ChangeResolution(int w, int h); + bool ChangeResolution(int w, int h) override; - /* virtual */ bool ToggleFullscreen(bool fullscreen); - /* virtual */ const char *GetName() const { return "dedicated"; } - /* virtual */ bool HasGUI() const { return false; } + bool ToggleFullscreen(bool fullscreen) override; + const char *GetName() const override { return "dedicated"; } + bool HasGUI() const override { return false; } }; /** Factory for the dedicated server video driver. */ @@ -43,7 +43,7 @@ public: static const int PRIORITY = 0; #endif FVideoDriver_Dedicated() : DriverFactoryBase(Driver::DT_VIDEO, PRIORITY, "dedicated", "Dedicated Video Driver") {} - /* virtual */ Driver *CreateInstance() const { return new VideoDriver_Dedicated(); } + Driver *CreateInstance() const override { return new VideoDriver_Dedicated(); } }; #endif /* VIDEO_DEDICATED_H */ diff --git a/src/video/null_v.h b/src/video/null_v.h index 9e04e177ef..a3b2cb5a81 100644 --- a/src/video/null_v.h +++ b/src/video/null_v.h @@ -20,26 +20,26 @@ private: uint ticks; ///< Amount of ticks to run. public: - /* virtual */ const char *Start(const char * const *param); + const char *Start(const char * const *param) override; - /* virtual */ void Stop(); + void Stop() override; - /* virtual */ void MakeDirty(int left, int top, int width, int height); + void MakeDirty(int left, int top, int width, int height) override; - /* virtual */ void MainLoop(); + void MainLoop() override; - /* virtual */ bool ChangeResolution(int w, int h); + bool ChangeResolution(int w, int h) override; - /* virtual */ bool ToggleFullscreen(bool fullscreen); - /* virtual */ const char *GetName() const { return "null"; } - /* virtual */ bool HasGUI() const { return false; } + bool ToggleFullscreen(bool fullscreen) override; + const char *GetName() const override { return "null"; } + bool HasGUI() const override { return false; } }; /** Factory the null video driver. */ class FVideoDriver_Null : public DriverFactoryBase { public: FVideoDriver_Null() : DriverFactoryBase(Driver::DT_VIDEO, 0, "null", "Null Video Driver") {} - /* virtual */ Driver *CreateInstance() const { return new VideoDriver_Null(); } + Driver *CreateInstance() const override { return new VideoDriver_Null(); } }; #endif /* VIDEO_NULL_H */ diff --git a/src/video/sdl_v.h b/src/video/sdl_v.h index 8855c3566e..cafdbbc614 100644 --- a/src/video/sdl_v.h +++ b/src/video/sdl_v.h @@ -17,27 +17,27 @@ /** The SDL video driver. */ class VideoDriver_SDL : public VideoDriver { public: - /* virtual */ const char *Start(const char * const *param); + const char *Start(const char * const *param) override; - /* virtual */ void Stop(); + void Stop() override; - /* virtual */ void MakeDirty(int left, int top, int width, int height); + void MakeDirty(int left, int top, int width, int height) override; - /* virtual */ void MainLoop(); + void MainLoop() override; - /* virtual */ bool ChangeResolution(int w, int h); + bool ChangeResolution(int w, int h) override; - /* virtual */ bool ToggleFullscreen(bool fullscreen); + bool ToggleFullscreen(bool fullscreen) override; - /* virtual */ bool AfterBlitterChange(); + bool AfterBlitterChange() override; - /* virtual */ void AcquireBlitterLock(); + void AcquireBlitterLock() override; - /* virtual */ void ReleaseBlitterLock(); + void ReleaseBlitterLock() override; - /* virtual */ bool ClaimMousePointer(); + bool ClaimMousePointer() override; - /* virtual */ const char *GetName() const { return "sdl"; } + const char *GetName() const override { return "sdl"; } private: int PollEvent(); bool CreateMainSurface(uint w, uint h); @@ -48,7 +48,7 @@ private: class FVideoDriver_SDL : public DriverFactoryBase { public: FVideoDriver_SDL() : DriverFactoryBase(Driver::DT_VIDEO, 5, "sdl", "SDL Video Driver") {} - /* virtual */ Driver *CreateInstance() const { return new VideoDriver_SDL(); } + Driver *CreateInstance() const override { return new VideoDriver_SDL(); } }; #endif /* VIDEO_SDL_H */ diff --git a/src/video/win32_v.h b/src/video/win32_v.h index 7609d0422d..aa6bb7c0d5 100644 --- a/src/video/win32_v.h +++ b/src/video/win32_v.h @@ -17,29 +17,29 @@ /** The video driver for windows. */ class VideoDriver_Win32 : public VideoDriver { public: - /* virtual */ const char *Start(const char * const *param); + const char *Start(const char * const *param) override; - /* virtual */ void Stop(); + void Stop() override; - /* virtual */ void MakeDirty(int left, int top, int width, int height); + void MakeDirty(int left, int top, int width, int height) override; - /* virtual */ void MainLoop(); + void MainLoop() override; - /* virtual */ bool ChangeResolution(int w, int h); + bool ChangeResolution(int w, int h) override; - /* virtual */ bool ToggleFullscreen(bool fullscreen); + bool ToggleFullscreen(bool fullscreen) override; - /* virtual */ bool AfterBlitterChange(); + bool AfterBlitterChange() override; - /* virtual */ void AcquireBlitterLock(); + void AcquireBlitterLock() override; - /* virtual */ void ReleaseBlitterLock(); + void ReleaseBlitterLock() override; - /* virtual */ bool ClaimMousePointer(); + bool ClaimMousePointer() override; - /* virtual */ void EditBoxLostFocus(); + void EditBoxLostFocus() override; - /* virtual */ const char *GetName() const { return "win32"; } + const char *GetName() const override { return "win32"; } bool MakeWindow(bool full_screen); }; @@ -48,7 +48,7 @@ public: class FVideoDriver_Win32 : public DriverFactoryBase { public: FVideoDriver_Win32() : DriverFactoryBase(Driver::DT_VIDEO, 10, "win32", "Win32 GDI Video Driver") {} - /* virtual */ Driver *CreateInstance() const { return new VideoDriver_Win32(); } + Driver *CreateInstance() const override { return new VideoDriver_Win32(); } }; #endif /* VIDEO_WIN32_H */ diff --git a/src/waypoint_base.h b/src/waypoint_base.h index 8d544a3b99..c11c2f2b2f 100644 --- a/src/waypoint_base.h +++ b/src/waypoint_base.h @@ -25,23 +25,23 @@ struct Waypoint FINAL : SpecializedStation { Waypoint(TileIndex tile = INVALID_TILE) : SpecializedStation(tile) { } ~Waypoint(); - void UpdateVirtCoord(); + void UpdateVirtCoord() override; - /* virtual */ inline bool TileBelongsToRailStation(TileIndex tile) const + inline bool TileBelongsToRailStation(TileIndex tile) const override { return IsRailWaypointTile(tile) && GetStationIndex(tile) == this->index; } - /* virtual */ uint32 GetNewGRFVariable(const struct ResolverObject &object, byte variable, byte parameter, bool *available) const; + uint32 GetNewGRFVariable(const struct ResolverObject &object, byte variable, byte parameter, bool *available) const override; - /* virtual */ void GetTileArea(TileArea *ta, StationType type) const; + void GetTileArea(TileArea *ta, StationType type) const override; - /* virtual */ uint GetPlatformLength(TileIndex tile, DiagDirection dir) const + uint GetPlatformLength(TileIndex tile, DiagDirection dir) const override { return 1; } - /* virtual */ uint GetPlatformLength(TileIndex tile) const + uint GetPlatformLength(TileIndex tile) const override { return 1; } diff --git a/src/widget_type.h b/src/widget_type.h index 33fb8bce08..0467630c9d 100644 --- a/src/widget_type.h +++ b/src/widget_type.h @@ -293,11 +293,11 @@ public: inline void SetDisabled(bool disabled); inline bool IsDisabled() const; - /* virtual */ void FillNestedArray(NWidgetBase **array, uint length); - /* virtual */ NWidgetCore *GetWidgetFromPos(int x, int y); - /* virtual */ bool IsHighlighted() const; - /* virtual */ TextColour GetHighlightColour() const; - /* virtual */ void SetHighlighted(TextColour highlight_colour); + void FillNestedArray(NWidgetBase **array, uint length) override; + NWidgetCore *GetWidgetFromPos(int x, int y) override; + bool IsHighlighted() const override; + TextColour GetHighlightColour() const override; + void SetHighlighted(TextColour highlight_colour) override; NWidgetDisplay disp_flags; ///< Flags that affect display and interaction with the widget. Colours colour; ///< Colour of this widget. @@ -371,12 +371,12 @@ public: ~NWidgetContainer(); void Add(NWidgetBase *wid); - /* virtual */ void FillNestedArray(NWidgetBase **array, uint length); + void FillNestedArray(NWidgetBase **array, uint length) override; /** Return whether the container is empty. */ inline bool IsEmpty() { return head == NULL; } - /* virtual */ NWidgetBase *GetWidgetOfType(WidgetType tp); + NWidgetBase *GetWidgetOfType(WidgetType tp) override; protected: NWidgetBase *head; ///< Pointer to first widget in container. @@ -408,12 +408,12 @@ public: void SetIndex(int index); - void SetupSmallestSize(Window *w, bool init_array); - void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl); - /* virtual */ void FillNestedArray(NWidgetBase **array, uint length); + void SetupSmallestSize(Window *w, bool init_array) override; + void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl) override; + void FillNestedArray(NWidgetBase **array, uint length) override; - /* virtual */ void Draw(const Window *w); - /* virtual */ NWidgetCore *GetWidgetFromPos(int x, int y); + void Draw(const Window *w) override; + NWidgetCore *GetWidgetFromPos(int x, int y) override; void SetDisplayedPlane(int plane); @@ -437,8 +437,8 @@ public: void SetPIP(uint8 pip_pre, uint8 pip_inter, uint8 pip_post); - /* virtual */ void Draw(const Window *w); - /* virtual */ NWidgetCore *GetWidgetFromPos(int x, int y); + void Draw(const Window *w) override; + NWidgetCore *GetWidgetFromPos(int x, int y) override; protected: NWidContainerFlags flags; ///< Flags of the container. @@ -500,12 +500,12 @@ public: void SetCount(int count); void SetScrollbar(Scrollbar *sb); - void SetupSmallestSize(Window *w, bool init_array); - void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl); - /* virtual */ void FillNestedArray(NWidgetBase **array, uint length); + void SetupSmallestSize(Window *w, bool init_array) override; + void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl) override; + void FillNestedArray(NWidgetBase **array, uint length) override; - /* virtual */ NWidgetCore *GetWidgetFromPos(int x, int y); - /* virtual */ void Draw(const Window *w); + NWidgetCore *GetWidgetFromPos(int x, int y) override; + void Draw(const Window *w) override; protected: int index; ///< If non-negative, index in the #Window::nested_array. Colours colour; ///< Colour of this widget. @@ -530,12 +530,12 @@ class NWidgetSpacer : public NWidgetResizeBase { public: NWidgetSpacer(int length, int height); - void SetupSmallestSize(Window *w, bool init_array); - /* virtual */ void FillNestedArray(NWidgetBase **array, uint length); + void SetupSmallestSize(Window *w, bool init_array) override; + void FillNestedArray(NWidgetBase **array, uint length) override; - /* virtual */ void Draw(const Window *w); - /* virtual */ void SetDirty(const Window *w) const; - /* virtual */ NWidgetCore *GetWidgetFromPos(int x, int y); + void Draw(const Window *w) override; + void SetDirty(const Window *w) const override; + NWidgetCore *GetWidgetFromPos(int x, int y) override; }; /** @@ -550,14 +550,14 @@ public: void Add(NWidgetBase *nwid); void SetPIP(uint8 pip_pre, uint8 pip_inter, uint8 pip_post); - void SetupSmallestSize(Window *w, bool init_array); - void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl); + void SetupSmallestSize(Window *w, bool init_array) override; + void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl) override; - /* virtual */ void FillNestedArray(NWidgetBase **array, uint length); + void FillNestedArray(NWidgetBase **array, uint length) override; - /* virtual */ void Draw(const Window *w); - /* virtual */ NWidgetCore *GetWidgetFromPos(int x, int y); - /* virtual */ NWidgetBase *GetWidgetOfType(WidgetType tp); + void Draw(const Window *w) override; + NWidgetCore *GetWidgetFromPos(int x, int y) override; + NWidgetBase *GetWidgetOfType(WidgetType tp) override; private: NWidgetPIPContainer *child; ///< Child widget. @@ -576,8 +576,8 @@ class NWidgetViewport : public NWidgetCore { public: NWidgetViewport(int index); - /* virtual */ void SetupSmallestSize(Window *w, bool init_array); - /* virtual */ void Draw(const Window *w); + void SetupSmallestSize(Window *w, bool init_array) override; + void Draw(const Window *w) override; void InitializeViewport(Window *w, uint32 follow_flags, ZoomLevel zoom); void UpdateViewportCoordinates(Window *w); @@ -751,8 +751,8 @@ class NWidgetScrollbar : public NWidgetCore, public Scrollbar { public: NWidgetScrollbar(WidgetType tp, Colours colour, int index); - /* virtual */ void SetupSmallestSize(Window *w, bool init_array); - /* virtual */ void Draw(const Window *w); + void SetupSmallestSize(Window *w, bool init_array) override; + void Draw(const Window *w) override; static void InvalidateDimensionCache(); static Dimension GetVerticalDimension(); @@ -771,8 +771,8 @@ class NWidgetLeaf : public NWidgetCore { public: NWidgetLeaf(WidgetType tp, Colours colour, int index, uint32 data, StringID tip); - /* virtual */ void SetupSmallestSize(Window *w, bool init_array); - /* virtual */ void Draw(const Window *w); + void SetupSmallestSize(Window *w, bool init_array) override; + void Draw(const Window *w) override; bool ButtonHit(const Point &pt); From aafce475963e2d2df59de9b02242a04856e78f93 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Mon, 4 Mar 2019 07:28:52 +0000 Subject: [PATCH 527/622] Codechange: Use override specifier for DropDownListItem classes. --- src/company_gui.cpp | 6 +++--- src/toolbar_gui.cpp | 8 ++++---- src/widgets/dropdown_type.h | 12 ++++++------ 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/company_gui.cpp b/src/company_gui.cpp index de5498102d..3862cd9da3 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -524,17 +524,17 @@ public: return this->result >= COLOUR_END ? STR_COLOUR_DEFAULT : _colour_dropdown[this->result]; } - uint Height(uint width) const + uint Height(uint width) const override { return max(FONT_HEIGHT_NORMAL, ScaleGUITrad(12) + 2); } - bool Selectable() const + bool Selectable() const override { return true; } - void Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const + void Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const override { bool rtl = _current_text_dir == TD_RTL; int height = bottom - top; diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index c3bf5953d7..c3555f107a 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -127,12 +127,12 @@ public: this->lock_size = GetSpriteSize(SPR_LOCK); } - bool Selectable() const + bool Selectable() const override { return true; } - uint Width() const + uint Width() const override { CompanyID company = (CompanyID)this->result; SetDParam(0, company); @@ -140,12 +140,12 @@ public: return GetStringBoundingBox(STR_COMPANY_NAME_COMPANY_NUM).width + this->icon_size.width + this->lock_size.width + 6; } - uint Height(uint width) const + uint Height(uint width) const override { return max(max(this->icon_size.height, this->lock_size.height) + 2U, (uint)FONT_HEIGHT_NORMAL); } - void Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const + void Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const override { CompanyID company = (CompanyID)this->result; bool rtl = _current_text_dir == TD_RTL; diff --git a/src/widgets/dropdown_type.h b/src/widgets/dropdown_type.h index 8300dd26d7..56510b0abe 100644 --- a/src/widgets/dropdown_type.h +++ b/src/widgets/dropdown_type.h @@ -44,9 +44,9 @@ public: DropDownListStringItem(StringID string, int result, bool masked) : DropDownListItem(result, masked), string(string) {} - virtual bool Selectable() const { return true; } - virtual uint Width() const; - virtual void Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const; + bool Selectable() const override { return true; } + uint Width() const override; + void Draw(int left, int right, int top, int bottom, bool sel, Colours bg_colour) const override; virtual StringID String() const { return this->string; } static int CDECL NatSortFunc(const DropDownListItem * const *first, const DropDownListItem * const *second); @@ -61,8 +61,8 @@ public: DropDownListParamStringItem(StringID string, int result, bool masked) : DropDownListStringItem(string, result, masked) {} - virtual StringID String() const; - virtual void SetParam(uint index, uint64 value) { decode_params[index] = value; } + StringID String() const override; + void SetParam(uint index, uint64 value) { decode_params[index] = value; } }; /** @@ -74,7 +74,7 @@ public: DropDownListCharStringItem(const char *raw_string, int result, bool masked) : DropDownListStringItem(STR_JUST_RAW_STRING, result, masked), raw_string(raw_string) {} - virtual StringID String() const; + StringID String() const override; }; /** From 317f69c1520a3e60335c56d358686609d3decf86 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Mon, 4 Mar 2019 07:49:37 +0000 Subject: [PATCH 528/622] Codechange: Use override specifier in Window-derived classes. --- src/ai/ai_gui.cpp | 60 +++++++++++----------- src/airport_gui.cpp | 26 +++++----- src/autoreplace_gui.cpp | 16 +++--- src/bootstrap_gui.cpp | 14 ++--- src/bridge_gui.cpp | 14 ++--- src/build_vehicle_gui.cpp | 20 ++++---- src/cheat_gui.cpp | 10 ++-- src/company_gui.cpp | 76 +++++++++++++-------------- src/console_gui.cpp | 26 +++++----- src/date_gui.cpp | 10 ++-- src/depot_gui.cpp | 30 +++++------ src/dock_gui.cpp | 26 +++++----- src/engine_gui.cpp | 8 +-- src/error_gui.cpp | 16 +++--- src/fios_gui.cpp | 18 +++---- src/framerate_gui.cpp | 20 ++++---- src/genworld_gui.cpp | 36 ++++++------- src/graph_gui.cpp | 62 +++++++++++----------- src/group_gui.cpp | 26 +++++----- src/highscore_gui.cpp | 8 +-- src/industry_gui.cpp | 78 ++++++++++++++-------------- src/intro_gui.cpp | 10 ++-- src/linkgraph/linkgraph_gui.h | 10 ++-- src/main_gui.cpp | 14 ++--- src/misc_gui.cpp | 44 ++++++++-------- src/music_gui.cpp | 20 ++++---- src/network/network_chat_gui.cpp | 16 +++--- src/network/network_content_gui.cpp | 26 +++++----- src/network/network_content_gui.h | 4 +- src/network/network_gui.cpp | 80 ++++++++++++++--------------- src/newgrf_debug_gui.cpp | 28 +++++----- src/newgrf_gui.cpp | 68 ++++++++++++------------ src/news_gui.cpp | 28 +++++----- src/object_gui.cpp | 14 ++--- src/order_gui.cpp | 30 +++++------ src/osk_gui.cpp | 12 ++--- src/rail_gui.cpp | 58 ++++++++++----------- src/road_gui.cpp | 34 ++++++------ src/settings_gui.cpp | 46 ++++++++--------- src/signs_gui.cpp | 26 +++++----- src/smallmap_gui.cpp | 8 +-- src/station_gui.cpp | 46 ++++++++--------- src/statusbar_gui.cpp | 14 ++--- src/story_gui.cpp | 16 +++--- src/subsidy_gui.cpp | 10 ++-- src/terraform_gui.cpp | 32 ++++++------ src/timetable_gui.cpp | 16 +++--- src/toolbar_gui.cpp | 46 ++++++++--------- src/town_gui.cpp | 52 +++++++++---------- src/transparency_gui.cpp | 10 ++-- src/tree_gui.cpp | 16 +++--- src/vehicle_gui.cpp | 74 +++++++++++++------------- src/viewport_gui.cpp | 12 ++--- src/waypoint_gui.cpp | 10 ++-- 54 files changed, 765 insertions(+), 765 deletions(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 5a4c772468..0609696e12 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -98,7 +98,7 @@ struct AIListWindow : public Window { } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_AIL_CAPTION: @@ -107,7 +107,7 @@ struct AIListWindow : public Window { } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget == WID_AIL_LIST) { this->line_height = FONT_HEIGHT_NORMAL + WD_MATRIX_TOP + WD_MATRIX_BOTTOM; @@ -118,7 +118,7 @@ struct AIListWindow : public Window { } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_AIL_LIST: { @@ -183,7 +183,7 @@ struct AIListWindow : public Window { DeleteWindowByClass(WC_QUERY_STRING); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_AIL_LIST: { // Select one of the AIs @@ -211,7 +211,7 @@ struct AIListWindow : public Window { } } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_AIL_LIST); } @@ -221,7 +221,7 @@ struct AIListWindow : public Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (_game_mode == GM_NORMAL && Company::IsValidID(this->slot)) { delete this; @@ -317,7 +317,7 @@ struct AISettingsWindow : public Window { this->RebuildVisibleSettings(); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_AIS_CAPTION: @@ -346,7 +346,7 @@ struct AISettingsWindow : public Window { this->vscroll->SetCount((int)this->visible_settings.size()); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget == WID_AIS_BACKGROUND) { this->line_height = max(SETTING_BUTTON_HEIGHT, FONT_HEIGHT_NORMAL) + WD_MATRIX_TOP + WD_MATRIX_BOTTOM; @@ -357,7 +357,7 @@ struct AISettingsWindow : public Window { } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_AIS_BACKGROUND) return; @@ -421,7 +421,7 @@ struct AISettingsWindow : public Window { } } - virtual void OnPaint() + void OnPaint() override { if (this->closing_dropdown) { this->closing_dropdown = false; @@ -430,7 +430,7 @@ struct AISettingsWindow : public Window { this->DrawWidgets(); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_AIS_BACKGROUND: { @@ -530,7 +530,7 @@ struct AISettingsWindow : public Window { } } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (StrEmpty(str)) return; VisibleSettingsList::const_iterator it = this->visible_settings.begin(); @@ -542,7 +542,7 @@ struct AISettingsWindow : public Window { this->SetDirty(); } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { assert(this->clicked_dropdown); VisibleSettingsList::const_iterator it = this->visible_settings.begin(); @@ -553,7 +553,7 @@ struct AISettingsWindow : public Window { this->SetDirty(); } - virtual void OnDropdownClose(Point pt, int widget, int index, bool instant_close) + void OnDropdownClose(Point pt, int widget, int index, bool instant_close) override { /* We cannot raise the dropdown button just yet. OnClick needs some hint, whether * the same dropdown button was clicked again, and then not open the dropdown again. @@ -564,12 +564,12 @@ struct AISettingsWindow : public Window { this->SetDirty(); } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_AIS_BACKGROUND); } - virtual void OnRealtimeTick(uint delta_ms) + void OnRealtimeTick(uint delta_ms) override { if (this->timeout.Elapsed(delta_ms)) { this->clicked_button = -1; @@ -582,7 +582,7 @@ struct AISettingsWindow : public Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { this->RebuildVisibleSettings(); HideDropDownMenu(this); @@ -743,7 +743,7 @@ struct AIConfigWindow : public Window { DeleteWindowByClass(WC_AI_SETTINGS); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_AIC_NUMBER: @@ -767,7 +767,7 @@ struct AIConfigWindow : public Window { } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_AIC_GAMELIST: @@ -819,7 +819,7 @@ struct AIConfigWindow : public Window { return slot < max_slot; } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_AIC_GAMELIST: { @@ -858,7 +858,7 @@ struct AIConfigWindow : public Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { if (widget >= WID_AIC_TEXTFILE && widget < WID_AIC_TEXTFILE + TFT_END) { if (this->selected_slot == INVALID_COMPANY || GetConfig(this->selected_slot) == NULL) return; @@ -939,7 +939,7 @@ struct AIConfigWindow : public Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!IsEditable(this->selected_slot)) { this->selected_slot = INVALID_COMPANY; @@ -1096,7 +1096,7 @@ struct AIDebugWindow : public Window { this->InvalidateData(-1); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget == WID_AID_LOG_PANEL) { resize->height = FONT_HEIGHT_NORMAL + WD_PAR_VSEP_NORMAL; @@ -1104,7 +1104,7 @@ struct AIDebugWindow : public Window { } } - virtual void OnPaint() + void OnPaint() override { this->SelectValidDebugCompany(); @@ -1182,7 +1182,7 @@ struct AIDebugWindow : public Window { this->last_vscroll_pos = this->vscroll->GetPosition(); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_AID_NAME_TEXT: @@ -1205,7 +1205,7 @@ struct AIDebugWindow : public Window { } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (ai_debug_company == INVALID_COMPANY) return; @@ -1264,7 +1264,7 @@ struct AIDebugWindow : public Window { this->last_vscroll_pos = this->vscroll->GetPosition(); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { /* Also called for hotkeys, so check for disabledness */ if (this->IsWidgetDisabled(widget)) return; @@ -1334,7 +1334,7 @@ struct AIDebugWindow : public Window { } } - virtual void OnEditboxChanged(int wid) + void OnEditboxChanged(int wid) override { if (wid == WID_AID_BREAK_STR_EDIT_BOX) { /* Save the current string to static member so it can be restored next time the window is opened. */ @@ -1349,7 +1349,7 @@ struct AIDebugWindow : public Window { * This is the company ID of the AI/GS which wrote a new log message, or -1 in other cases. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { /* If the log message is related to the active company tab, check the break string. * This needs to be done in gameloop-scope, so the AI is suspended immediately. */ @@ -1406,7 +1406,7 @@ struct AIDebugWindow : public Window { (ai_debug_company == OWNER_DEITY ? !Game::IsPaused() : !AI::IsPaused(ai_debug_company))); } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_AID_LOG_PANEL); } diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index 243f91b247..353e080805 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -87,14 +87,14 @@ struct BuildAirToolbarWindow : Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; if (!CanBuildVehicleInfrastructure(VEH_AIRCRAFT)) delete this; } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_AT_AIRPORT: @@ -114,7 +114,7 @@ struct BuildAirToolbarWindow : Window { } - virtual void OnPlaceObject(Point pt, TileIndex tile) + void OnPlaceObject(Point pt, TileIndex tile) override { switch (this->last_user_action) { case WID_AT_AIRPORT: @@ -129,19 +129,19 @@ struct BuildAirToolbarWindow : Window { } } - virtual void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt) + void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt) override { VpSelectTilesWithMethod(pt.x, pt.y, select_method); } - virtual void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile) + void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile) override { if (pt.x != -1 && select_proc == DDSP_DEMOLISH_AREA) { GUIPlaceProcDragXY(select_proc, start_tile, end_tile); } } - virtual void OnPlaceObjectAbort() + void OnPlaceObjectAbort() override { this->RaiseButtons(); @@ -268,7 +268,7 @@ public: DeleteWindowById(WC_SELECT_STATION, 0); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_AP_CLASS_DROPDOWN: @@ -293,7 +293,7 @@ public: } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_AP_CLASS_DROPDOWN: { @@ -357,7 +357,7 @@ public: } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_AP_AIRPORT_LIST: { @@ -394,7 +394,7 @@ public: } } - virtual void OnPaint() + void OnPaint() override { this->DrawWidgets(); @@ -462,7 +462,7 @@ public: } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_AP_CLASS_DROPDOWN: @@ -535,7 +535,7 @@ public: this->SelectOtherAirport(-1); } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { assert(widget == WID_AP_CLASS_DROPDOWN); _selected_airport_class = (AirportClassID)index; @@ -543,7 +543,7 @@ public: this->SelectFirstAvailableAirport(false); } - virtual void OnRealtimeTick(uint delta_ms) + void OnRealtimeTick(uint delta_ms) override { CheckRedrawStationCoverage(this); } diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index eae0a378eb..196d076da7 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -237,7 +237,7 @@ public: this->sel_group = id_g; } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_RV_SORT_ASCENDING_DESCENDING: { @@ -316,7 +316,7 @@ public: } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_RV_CAPTION: @@ -353,7 +353,7 @@ public: } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_RV_SORT_ASCENDING_DESCENDING: @@ -394,7 +394,7 @@ public: } } - virtual void OnPaint() + void OnPaint() override { if (this->engines[0].NeedRebuild() || this->engines[1].NeedRebuild()) this->GenerateLists(); @@ -437,7 +437,7 @@ public: } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_RV_SORT_ASCENDING_DESCENDING: @@ -516,7 +516,7 @@ public: } } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { switch (widget) { case WID_RV_SORT_DROPDOWN: @@ -557,7 +557,7 @@ public: } } - virtual void OnResize() + void OnResize() override { this->vscroll[0]->SetCapacityFromWidget(this, WID_RV_LEFT_MATRIX); this->vscroll[1]->SetCapacityFromWidget(this, WID_RV_RIGHT_MATRIX); @@ -568,7 +568,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (data != 0) { /* This needs to be done in command-scope to enforce rebuilding before resorting invalid data */ diff --git a/src/bootstrap_gui.cpp b/src/bootstrap_gui.cpp index 01d83848b8..b6fb35bffd 100644 --- a/src/bootstrap_gui.cpp +++ b/src/bootstrap_gui.cpp @@ -56,7 +56,7 @@ public: ResizeWindow(this, _screen.width, _screen.height); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { GfxFillRect(r.left, r.top, r.right, r.bottom, 4, FILLRECT_OPAQUE); GfxFillRect(r.left, r.top, r.right, r.bottom, 0, FILLRECT_CHECKER); @@ -88,7 +88,7 @@ public: { } - virtual void OnDownloadComplete(ContentID cid) + void OnDownloadComplete(ContentID cid) override { /* We have completed downloading. We can trigger finding the right set now. */ BaseGraphics::FindSets(); @@ -142,7 +142,7 @@ public: _network_content_client.RemoveCallback(this); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { /* We cache the button size. This is safe as no reinit can happen here. */ if (this->button_size.width == 0) { @@ -165,14 +165,14 @@ public: } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != 0) return; DrawStringMultiLine(r.left + WD_FRAMETEXT_LEFT, r.right - WD_FRAMETEXT_RIGHT, r.top + WD_FRAMETEXT_TOP, r.bottom - WD_FRAMETEXT_BOTTOM, STR_MISSING_GRAPHICS_SET_MESSAGE, TC_FROMSTRING, SA_CENTER); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_BAFD_YES: @@ -189,13 +189,13 @@ public: } } - virtual void OnConnect(bool success) + void OnConnect(bool success) override { /* Once connected, request the metadata. */ _network_content_client.RequestContentList(CONTENT_TYPE_BASE_GRAPHICS); } - virtual void OnReceiveContentInfo(const ContentInfo *ci) + void OnReceiveContentInfo(const ContentInfo *ci) override { /* And once the meta data is received, start downloading it. */ _network_content_client.Select(ci->id); diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index 768691f080..29cb5a085f 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -163,7 +163,7 @@ public: delete bridges; } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_BBS_DROPDOWN_ORDER: { @@ -207,7 +207,7 @@ public: } } - virtual Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) + Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) override { /* Position the window so hopefully the first bridge from the list is under the mouse pointer. */ NWidgetBase *list = this->GetWidget(WID_BBS_BRIDGE_LIST); @@ -217,7 +217,7 @@ public: return corner; } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_BBS_DROPDOWN_ORDER: @@ -243,7 +243,7 @@ public: } } - virtual EventState OnKeyPress(WChar key, uint16 keycode) + EventState OnKeyPress(WChar key, uint16 keycode) override { const uint8 i = keycode - '1'; if (i < 9 && i < this->bridges->Length()) { @@ -255,7 +255,7 @@ public: return ES_NOT_HANDLED; } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { default: break; @@ -279,7 +279,7 @@ public: } } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { if (widget == WID_BBS_DROPDOWN_CRITERIA && this->bridges->SortType() != index) { this->bridges->SetSortType(index); @@ -288,7 +288,7 @@ public: } } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_BBS_BRIDGE_LIST); } diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 0ac23cfde6..77c175ee7b 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1100,7 +1100,7 @@ struct BuildVehicleWindow : Window { this->eng_list.SetFilterState(this->cargo_filter[this->cargo_filter_criteria] != CF_ANY); } - void OnInit() + void OnInit() override { this->SetCargoFilterArray(); } @@ -1272,7 +1272,7 @@ struct BuildVehicleWindow : Window { this->eng_list.RebuildDone(); } - void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_BV_SORT_ASCENDING_DESCENDING: @@ -1345,7 +1345,7 @@ struct BuildVehicleWindow : Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; /* When switching to original acceleration model for road vehicles, clear the selected sort criteria if it is not available now. */ @@ -1358,7 +1358,7 @@ struct BuildVehicleWindow : Window { this->eng_list.ForceRebuild(); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_BV_CAPTION: @@ -1390,7 +1390,7 @@ struct BuildVehicleWindow : Window { } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_BV_LIST: @@ -1420,7 +1420,7 @@ struct BuildVehicleWindow : Window { } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_BV_LIST: @@ -1433,7 +1433,7 @@ struct BuildVehicleWindow : Window { } } - virtual void OnPaint() + void OnPaint() override { this->GenerateBuildList(); this->vscroll->SetCount(this->eng_list.Length()); @@ -1460,14 +1460,14 @@ struct BuildVehicleWindow : Window { } } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (str == NULL) return; DoCommandP(0, this->rename_engine, 0, CMD_RENAME_ENGINE | CMD_MSG(STR_ERROR_CAN_T_RENAME_TRAIN_TYPE + this->vehicle_type), NULL, str); } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { switch (widget) { case WID_BV_SORT_DROPDOWN: @@ -1491,7 +1491,7 @@ struct BuildVehicleWindow : Window { this->SetDirty(); } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_BV_LIST); } diff --git a/src/cheat_gui.cpp b/src/cheat_gui.cpp index fda2b246e4..e6bfc8c0a2 100644 --- a/src/cheat_gui.cpp +++ b/src/cheat_gui.cpp @@ -221,7 +221,7 @@ struct CheatWindow : Window { this->InitNested(); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_C_PANEL) return; @@ -283,7 +283,7 @@ struct CheatWindow : Window { } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget != WID_C_PANEL) return; @@ -330,7 +330,7 @@ struct CheatWindow : Window { size->height = this->header_height + WD_FRAMERECT_TOP + WD_PAR_VSEP_NORMAL + WD_FRAMERECT_BOTTOM + this->line_height * lengthof(_cheats_ui); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { const NWidgetBase *wid = this->GetWidget(WID_C_PANEL); uint btn = (pt.y - wid->pos_y - WD_FRAMERECT_TOP - this->header_height) / this->line_height; @@ -384,13 +384,13 @@ struct CheatWindow : Window { this->SetDirty(); } - virtual void OnTimeout() + void OnTimeout() override { this->clicked = 0; this->SetDirty(); } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { /* Was 'cancel' pressed or nothing entered? */ if (str == NULL || StrEmpty(str)) return; diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 3862cd9da3..58f972364b 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -284,7 +284,7 @@ struct CompanyFinancesWindow : Window { this->owner = (Owner)this->window_number; } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_CF_CAPTION: @@ -303,7 +303,7 @@ struct CompanyFinancesWindow : Window { } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { int type = _settings_client.gui.expenses_layout; switch (widget) { @@ -331,7 +331,7 @@ struct CompanyFinancesWindow : Window { } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_CF_EXPS_CATEGORY: @@ -392,7 +392,7 @@ struct CompanyFinancesWindow : Window { this->GetWidget(WID_CF_SEL_BUTTONS)->SetDisplayedPlane(plane); } - virtual void OnPaint() + void OnPaint() override { if (!this->IsShaded()) { if (!this->small) { @@ -422,7 +422,7 @@ struct CompanyFinancesWindow : Window { this->DrawWidgets(); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_CF_TOGGLE_SIZE: // toggle size @@ -451,7 +451,7 @@ struct CompanyFinancesWindow : Window { } } - virtual void OnHundredthTick() + void OnHundredthTick() override { const Company *c = Company::Get((CompanyID)this->window_number); if (c->money > CompanyFinancesWindow::max_money) { @@ -740,7 +740,7 @@ public: } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_SCL_SPACER_DROPDOWN: { @@ -793,7 +793,7 @@ public: } } - virtual void OnPaint() + void OnPaint() override { bool local = (CompanyID)this->window_number == _local_company; @@ -807,7 +807,7 @@ public: this->DrawWidgets(); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_SCL_CAPTION: @@ -847,7 +847,7 @@ public: } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_SCL_MATRIX) return; @@ -911,7 +911,7 @@ public: } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { /* Livery Class buttons */ @@ -985,12 +985,12 @@ public: } } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_SCL_MATRIX); } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { bool local = (CompanyID)this->window_number == _local_company; if (!local) return; @@ -1016,7 +1016,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; @@ -1368,7 +1368,7 @@ public: } } - virtual void OnInit() + void OnInit() override { /* Size of the boolean yes/no button. */ Dimension yesno_dim = maxdim(GetStringBoundingBox(STR_FACE_YES), GetStringBoundingBox(STR_FACE_NO)); @@ -1391,7 +1391,7 @@ public: this->number_dim = number_dim; } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_SCMF_FACE: { @@ -1450,7 +1450,7 @@ public: } } - virtual void OnPaint() + void OnPaint() override { /* lower the non-selected gender button */ this->SetWidgetsLoweredState(!this->is_female, WID_SCMF_MALE, WID_SCMF_MALE2, WIDGET_LIST_END); @@ -1511,7 +1511,7 @@ public: this->DrawWidgets(); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT: @@ -1600,7 +1600,7 @@ public: } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { /* Toggle size, advanced/simple face selection */ @@ -1709,7 +1709,7 @@ public: } } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (str == NULL) return; /* Set a new company manager face number */ @@ -1864,7 +1864,7 @@ struct CompanyInfrastructureWindow : Window return total; } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_CI_CAPTION: @@ -1873,7 +1873,7 @@ struct CompanyInfrastructureWindow : Window } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { const Company *c = Company::Get((CompanyID)this->window_number); @@ -1996,7 +1996,7 @@ struct CompanyInfrastructureWindow : Window } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { const Company *c = Company::Get((CompanyID)this->window_number); int y = r.top; @@ -2099,7 +2099,7 @@ struct CompanyInfrastructureWindow : Window * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; @@ -2265,7 +2265,7 @@ struct CompanyWindow : Window this->OnInvalidateData(); } - virtual void OnPaint() + void OnPaint() override { const Company *c = Company::Get((CompanyID)this->window_number); bool local = this->window_number == _local_company; @@ -2334,7 +2334,7 @@ struct CompanyWindow : Window this->DrawWidgets(); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_C_FACE: { @@ -2393,7 +2393,7 @@ struct CompanyWindow : Window } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { const Company *c = Company::Get((CompanyID)this->window_number); switch (widget) { @@ -2504,7 +2504,7 @@ struct CompanyWindow : Window } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_C_CAPTION: @@ -2522,7 +2522,7 @@ struct CompanyWindow : Window } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_C_NEW_FACE: DoSelectCompanyManagerFace(this); break; @@ -2612,13 +2612,13 @@ struct CompanyWindow : Window } } - virtual void OnHundredthTick() + void OnHundredthTick() override { /* redraw the window every now and then */ this->SetDirty(); } - virtual void OnPlaceObject(Point pt, TileIndex tile) + void OnPlaceObject(Point pt, TileIndex tile) override { if (DoCommandP(tile, OBJECT_HQ, 0, CMD_BUILD_OBJECT | CMD_MSG(STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS)) && !_shift_pressed) { ResetObjectToPlace(); @@ -2626,12 +2626,12 @@ struct CompanyWindow : Window } } - virtual void OnPlaceObjectAbort() + void OnPlaceObjectAbort() override { this->RaiseButtons(); } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (str == NULL) return; @@ -2658,7 +2658,7 @@ struct CompanyWindow : Window * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (this->window_number == _local_company) return; @@ -2717,7 +2717,7 @@ struct BuyCompanyWindow : Window { this->InitNested(window_number); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_BC_FACE: @@ -2733,7 +2733,7 @@ struct BuyCompanyWindow : Window { } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_BC_CAPTION: @@ -2743,7 +2743,7 @@ struct BuyCompanyWindow : Window { } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_BC_FACE: { @@ -2762,7 +2762,7 @@ struct BuyCompanyWindow : Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_BC_NO: diff --git a/src/console_gui.cpp b/src/console_gui.cpp index ed46938cd5..3ee13946f2 100644 --- a/src/console_gui.cpp +++ b/src/console_gui.cpp @@ -201,7 +201,7 @@ struct IConsoleWindow : Window this->SetDirty(); } - virtual void OnPaint() + void OnPaint() override { const int right = this->width - 5; @@ -229,7 +229,7 @@ struct IConsoleWindow : Window } } - virtual void OnHundredthTick() + void OnHundredthTick() override { if (IConsoleLine::Truncate() && (IConsoleWindow::scroll > IConsoleLine::size)) { @@ -238,12 +238,12 @@ struct IConsoleWindow : Window } } - virtual void OnMouseLoop() + void OnMouseLoop() override { if (_iconsole_cmdline.HandleCaret()) this->SetDirty(); } - virtual EventState OnKeyPress(WChar key, uint16 keycode) + EventState OnKeyPress(WChar key, uint16 keycode) override { if (_focused_window != this) return ES_NOT_HANDLED; @@ -314,7 +314,7 @@ struct IConsoleWindow : Window return ES_HANDLED; } - virtual void InsertTextString(int wid, const char *str, bool marked, const char *caret, const char *insert_location, const char *replacement_end) + void InsertTextString(int wid, const char *str, bool marked, const char *caret, const char *insert_location, const char *replacement_end) override { if (_iconsole_cmdline.InsertString(str, marked, caret, insert_location, replacement_end)) { IConsoleWindow::scroll = 0; @@ -323,17 +323,17 @@ struct IConsoleWindow : Window } } - virtual const char *GetFocusedText() const + const char *GetFocusedText() const override { return _iconsole_cmdline.buf; } - virtual const char *GetCaret() const + const char *GetCaret() const override { return _iconsole_cmdline.buf + _iconsole_cmdline.caretpos; } - virtual const char *GetMarkedText(size_t *length) const + const char *GetMarkedText(size_t *length) const override { if (_iconsole_cmdline.markend == 0) return NULL; @@ -341,7 +341,7 @@ struct IConsoleWindow : Window return _iconsole_cmdline.buf + _iconsole_cmdline.markpos; } - virtual Point GetCaretPosition() const + Point GetCaretPosition() const override { int delta = min(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0); Point pt = {this->line_offset + delta + _iconsole_cmdline.caretxoffs, this->height - this->line_height}; @@ -349,7 +349,7 @@ struct IConsoleWindow : Window return pt; } - virtual Rect GetTextBoundingRect(const char *from, const char *to) const + Rect GetTextBoundingRect(const char *from, const char *to) const override { int delta = min(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0); @@ -360,7 +360,7 @@ struct IConsoleWindow : Window return r; } - virtual const char *GetTextCharacterAtPosition(const Point &pt) const + const char *GetTextCharacterAtPosition(const Point &pt) const override { int delta = min(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0); @@ -369,12 +369,12 @@ struct IConsoleWindow : Window return GetCharAtPosition(_iconsole_cmdline.buf, pt.x - delta); } - virtual void OnMouseWheel(int wheel) + void OnMouseWheel(int wheel) override { this->Scroll(-wheel); } - virtual void OnFocusLost() + void OnFocusLost() override { VideoDriver::GetInstance()->EditBoxLostFocus(); } diff --git a/src/date_gui.cpp b/src/date_gui.cpp index 468a74db99..53e0cf7359 100644 --- a/src/date_gui.cpp +++ b/src/date_gui.cpp @@ -55,7 +55,7 @@ struct SetDateWindow : Window { this->date.year = Clamp(this->date.year, min_year, max_year); } - virtual Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) + Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) override { Point pt = { this->parent->left + this->parent->width / 2 - sm_width / 2, this->parent->top + this->parent->height / 2 - sm_height / 2 }; return pt; @@ -100,7 +100,7 @@ struct SetDateWindow : Window { ShowDropDownList(this, list, selected, widget); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { Dimension d = {0, 0}; switch (widget) { @@ -129,7 +129,7 @@ struct SetDateWindow : Window { *size = d; } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_SD_DAY: SetDParam(0, this->date.day - 1 + STR_DAY_NUMBER_1ST); break; @@ -138,7 +138,7 @@ struct SetDateWindow : Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_SD_DAY: @@ -154,7 +154,7 @@ struct SetDateWindow : Window { } } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { switch (widget) { case WID_SD_DAY: diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index 39accd65f1..f2da7330ea 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -364,7 +364,7 @@ struct DepotWindow : Window { } } - void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_D_MATRIX) return; @@ -422,7 +422,7 @@ struct DepotWindow : Window { } } - void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget != WID_D_CAPTION) return; @@ -650,7 +650,7 @@ struct DepotWindow : Window { uint flag_width; uint flag_height; - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_D_MATRIX: { @@ -701,12 +701,12 @@ struct DepotWindow : Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { this->generate_list = true; } - virtual void OnPaint() + void OnPaint() override { if (this->generate_list) { /* Generate the vehicle list @@ -758,7 +758,7 @@ struct DepotWindow : Window { this->DrawWidgets(); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_D_MATRIX: { // List @@ -837,7 +837,7 @@ struct DepotWindow : Window { } } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (str == NULL) return; @@ -845,7 +845,7 @@ struct DepotWindow : Window { DoCommandP(0, GetDepotIndex(this->window_number), 0, CMD_RENAME_DEPOT | CMD_MSG(STR_ERROR_CAN_T_RENAME_DEPOT), NULL, str); } - virtual bool OnRightClick(Point pt, int widget) + bool OnRightClick(Point pt, int widget) override { if (widget != WID_D_MATRIX) return false; @@ -906,7 +906,7 @@ struct DepotWindow : Window { * @param v the original vehicle to clone * @return Always true. */ - virtual bool OnVehicleSelect(const Vehicle *v) + bool OnVehicleSelect(const Vehicle *v) override { if (_ctrl_pressed) { /* Share-clone, do not open new viewport, and keep tool active */ @@ -921,7 +921,7 @@ struct DepotWindow : Window { return true; } - virtual void OnPlaceObjectAbort() + void OnPlaceObjectAbort() override { /* abort clone */ this->RaiseWidget(WID_D_CLONE); @@ -939,7 +939,7 @@ struct DepotWindow : Window { } } - virtual void OnMouseDrag(Point pt, int widget) + void OnMouseDrag(Point pt, int widget) override { if (this->sel == INVALID_VEHICLE) return; if (widget != this->hovered_widget) { @@ -991,7 +991,7 @@ struct DepotWindow : Window { this->SetWidgetDirty(widget); } - virtual void OnDragDrop(Point pt, int widget) + void OnDragDrop(Point pt, int widget) override { switch (widget) { case WID_D_MATRIX: { @@ -1046,7 +1046,7 @@ struct DepotWindow : Window { _cursor.vehchain = false; } - virtual void OnTimeout() + void OnTimeout() override { if (!this->IsWidgetDisabled(WID_D_SELL)) { this->RaiseWidget(WID_D_SELL); @@ -1058,7 +1058,7 @@ struct DepotWindow : Window { } } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_D_MATRIX); NWidgetCore *nwi = this->GetWidget(WID_D_MATRIX); @@ -1069,7 +1069,7 @@ struct DepotWindow : Window { } } - virtual EventState OnCTRLStateChange() + EventState OnCTRLStateChange() override { if (this->sel != INVALID_VEHICLE) { _cursor.vehchain = _ctrl_pressed; diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp index e2224dfa28..f5ebd1f7f0 100644 --- a/src/dock_gui.cpp +++ b/src/dock_gui.cpp @@ -113,7 +113,7 @@ struct BuildDocksToolbarWindow : Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; @@ -129,7 +129,7 @@ struct BuildDocksToolbarWindow : Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_DT_CANAL: // Build canal button @@ -173,7 +173,7 @@ struct BuildDocksToolbarWindow : Window { this->last_clicked_widget = (DockToolbarWidgets)widget; } - virtual void OnPlaceObject(Point pt, TileIndex tile) + void OnPlaceObject(Point pt, TileIndex tile) override { switch (this->last_clicked_widget) { case WID_DT_CANAL: // Build canal button @@ -222,12 +222,12 @@ struct BuildDocksToolbarWindow : Window { } } - virtual void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt) + void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt) override { VpSelectTilesWithMethod(pt.x, pt.y, select_method); } - virtual void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile) + void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile) override { if (pt.x != -1) { switch (select_proc) { @@ -246,7 +246,7 @@ struct BuildDocksToolbarWindow : Window { } } - virtual void OnPlaceObjectAbort() + void OnPlaceObjectAbort() override { this->RaiseButtons(); @@ -256,7 +256,7 @@ struct BuildDocksToolbarWindow : Window { DeleteWindowByClass(WC_BUILD_BRIDGE); } - virtual void OnPlacePresize(Point pt, TileIndex tile_from) + void OnPlacePresize(Point pt, TileIndex tile_from) override { TileIndex tile_to = tile_from; @@ -410,7 +410,7 @@ public: DeleteWindowById(WC_SELECT_STATION, 0); } - virtual void OnPaint() + void OnPaint() override { int rad = (_settings_game.station.modified_catchment) ? CA_DOCK : CA_UNMODIFIED; @@ -437,7 +437,7 @@ public: } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case BDSW_LT_OFF: @@ -451,7 +451,7 @@ public: } } - virtual void OnRealtimeTick(uint delta_ms) + void OnRealtimeTick(uint delta_ms) override { CheckRedrawStationCoverage(this); } @@ -505,7 +505,7 @@ public: UpdateDocksDirection(); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_BDD_X: @@ -516,7 +516,7 @@ public: } } - virtual void OnPaint() + void OnPaint() override { this->DrawWidgets(); @@ -531,7 +531,7 @@ public: DrawShipDepotSprite(this->GetWidget(WID_BDD_Y)->pos_x + x1, this->GetWidget(WID_BDD_Y)->pos_y + y2, AXIS_Y, DEPOT_PART_SOUTH); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_BDD_X: diff --git a/src/engine_gui.cpp b/src/engine_gui.cpp index 51c7e14836..8e7f1a8246 100644 --- a/src/engine_gui.cpp +++ b/src/engine_gui.cpp @@ -75,7 +75,7 @@ struct EnginePreviewWindow : Window { this->flags |= WF_STICKY; } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget != WID_EP_QUESTION) return; @@ -102,7 +102,7 @@ struct EnginePreviewWindow : Window { size->height += GetStringHeight(GetEngineInfoString(engine), size->width); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_EP_QUESTION) return; @@ -121,7 +121,7 @@ struct EnginePreviewWindow : Window { DrawStringMultiLine(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, r.bottom, GetEngineInfoString(engine), TC_FROMSTRING, SA_CENTER); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_EP_YES: @@ -133,7 +133,7 @@ struct EnginePreviewWindow : Window { } } - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; diff --git a/src/error_gui.cpp b/src/error_gui.cpp index 1c59b7e8d0..47bca2638b 100644 --- a/src/error_gui.cpp +++ b/src/error_gui.cpp @@ -180,7 +180,7 @@ public: this->InitNested(); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_EM_MESSAGE: { @@ -208,7 +208,7 @@ public: } } - virtual Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) + Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) override { /* Position (0, 0) given, center the window. */ if (this->position.x == 0 && this->position.y == 0) { @@ -244,18 +244,18 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { /* If company gets shut down, while displaying an error about it, remove the error message. */ if (this->face != INVALID_COMPANY && !Company::IsValidID(this->face)) delete this; } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget == WID_EM_CAPTION) CopyInDParam(0, this->decode_params, lengthof(this->decode_params)); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_EM_FACE: { @@ -292,13 +292,13 @@ public: } } - virtual void OnMouseLoop() + void OnMouseLoop() override { /* Disallow closing the window too easily, if timeout is disabled */ if (_right_button_down && this->duration != 0) delete this; } - virtual void OnHundredthTick() + void OnHundredthTick() override { /* Timeout enabled? */ if (this->duration != 0) { @@ -313,7 +313,7 @@ public: if (_window_system_initialized) ShowFirstError(); } - virtual EventState OnKeyPress(WChar key, uint16 keycode) + EventState OnKeyPress(WChar key, uint16 keycode) override { if (keycode != WKC_SPACE) return ES_NOT_HANDLED; delete this; diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index a4eb12e3a2..f2f96cd283 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -407,7 +407,7 @@ public: } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_SL_SORT_BYNAME: @@ -553,7 +553,7 @@ public: } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_SL_BACKGROUND: @@ -575,7 +575,7 @@ public: } } - virtual void OnPaint() + void OnPaint() override { if (_savegame_sort_dirty) { _savegame_sort_dirty = false; @@ -586,7 +586,7 @@ public: this->DrawWidgets(); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_SL_SORT_BYNAME: // Sort save names by name @@ -718,7 +718,7 @@ public: } } - virtual EventState OnKeyPress(WChar key, uint16 keycode) + EventState OnKeyPress(WChar key, uint16 keycode) override { if (keycode == WKC_ESC) { delete this; @@ -728,7 +728,7 @@ public: return ES_NOT_HANDLED; } - virtual void OnTimeout() + void OnTimeout() override { /* Widgets WID_SL_DELETE_SELECTION and WID_SL_SAVE_GAME only exist when saving to a file. */ if (this->fop != SLO_SAVE) return; @@ -763,7 +763,7 @@ public: } } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_SL_DRIVES_DIRECTORIES_LIST); } @@ -773,7 +773,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { switch (data) { case SLIWD_RESCAN_FILES: @@ -851,7 +851,7 @@ public: } } - virtual void OnEditboxChanged(int wid) + void OnEditboxChanged(int wid) override { if (wid == WID_SL_FILTER) { this->string_filter.SetFilterTerm(this->filter_editbox.text.buf); diff --git a/src/framerate_gui.cpp b/src/framerate_gui.cpp index 060b19a4a1..fe8338899d 100644 --- a/src/framerate_gui.cpp +++ b/src/framerate_gui.cpp @@ -432,7 +432,7 @@ struct FramerateWindow : Window { ResizeWindow(this, 0, (max(MIN_ELEMENTS, this->num_displayed) - MIN_ELEMENTS) * FONT_HEIGHT_NORMAL); } - virtual void OnRealtimeTick(uint delta_ms) + void OnRealtimeTick(uint delta_ms) override { bool elapsed = this->next_update.Elapsed(delta_ms); @@ -475,7 +475,7 @@ struct FramerateWindow : Window { } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_FRW_CAPTION: @@ -503,7 +503,7 @@ struct FramerateWindow : Window { } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_FRW_RATE_GAMELOOP: @@ -582,7 +582,7 @@ struct FramerateWindow : Window { } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_FRW_TIMES_NAMES: { @@ -621,7 +621,7 @@ struct FramerateWindow : Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_FRW_TIMES_NAMES: @@ -646,7 +646,7 @@ struct FramerateWindow : Window { } } - virtual void OnResize() + void OnResize() override { auto *wid = this->GetWidget(WID_FRW_TIMES_NAMES); this->num_displayed = (wid->current_y - wid->min_y - VSPACING) / FONT_HEIGHT_NORMAL - 1; // subtract 1 for headings @@ -694,7 +694,7 @@ struct FrametimeGraphWindow : Window { this->InitNested(number); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_FGW_CAPTION: @@ -709,7 +709,7 @@ struct FrametimeGraphWindow : Window { } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget == WID_FGW_GRAPH) { SetDParam(0, 100); @@ -807,7 +807,7 @@ struct FrametimeGraphWindow : Window { this->SelectVerticalScale(peak_value); } - virtual void OnRealtimeTick(uint delta_ms) + void OnRealtimeTick(uint delta_ms) override { this->SetDirty(); @@ -826,7 +826,7 @@ struct FrametimeGraphWindow : Window { return (value - src_min) * dst_diff / src_diff + dst_min; } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget == WID_FGW_GRAPH) { const TimingMeasurement *durations = _pf_data[this->element].durations; diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index b22ba5287e..4631d02ee4 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -332,7 +332,7 @@ struct GenerateLandscapeWindow : public Window { } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_GL_START_DATE_TEXT: SetDParam(0, ConvertYMDToDate(_settings_newgame.game_creation.starting_year, 0, 1)); break; @@ -393,7 +393,7 @@ struct GenerateLandscapeWindow : public Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; /* Update the climate buttons */ @@ -440,7 +440,7 @@ struct GenerateLandscapeWindow : public Window { } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { const StringID *strs = NULL; switch (widget) { @@ -518,7 +518,7 @@ struct GenerateLandscapeWindow : public Window { size->height = max(size->height, (uint)(FONT_HEIGHT_NORMAL + WD_DROPDOWNTEXT_TOP + WD_DROPDOWNTEXT_BOTTOM)); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_GL_HEIGHTMAP_NAME_TEXT: { @@ -528,7 +528,7 @@ struct GenerateLandscapeWindow : public Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_GL_TEMPERATE: @@ -703,7 +703,7 @@ struct GenerateLandscapeWindow : public Window { } } - virtual void OnTimeout() + void OnTimeout() override { static const int raise_widgets[] = {WID_GL_MAX_HEIGHTLEVEL_DOWN, WID_GL_MAX_HEIGHTLEVEL_UP, WID_GL_START_DATE_DOWN, WID_GL_START_DATE_UP, WID_GL_SNOW_LEVEL_UP, WID_GL_SNOW_LEVEL_DOWN, WIDGET_LIST_END}; for (const int *widget = raise_widgets; *widget != WIDGET_LIST_END; widget++) { @@ -714,7 +714,7 @@ struct GenerateLandscapeWindow : public Window { } } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { switch (widget) { case WID_GL_MAPSIZE_X_PULLDOWN: _settings_newgame.game_creation.map_x = index; break; @@ -758,7 +758,7 @@ struct GenerateLandscapeWindow : public Window { this->InvalidateData(); } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { /* Was 'cancel' pressed? */ if (str == NULL) return; @@ -888,7 +888,7 @@ struct CreateScenarioWindow : public Window this->LowerWidget(_settings_newgame.game_creation.landscape + WID_CS_TEMPERATE); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_CS_START_DATE_TEXT: @@ -909,7 +909,7 @@ struct CreateScenarioWindow : public Window } } - virtual void OnPaint() + void OnPaint() override { this->SetWidgetDisabledState(WID_CS_START_DATE_DOWN, _settings_newgame.game_creation.starting_year <= MIN_YEAR); this->SetWidgetDisabledState(WID_CS_START_DATE_UP, _settings_newgame.game_creation.starting_year >= MAX_YEAR); @@ -924,7 +924,7 @@ struct CreateScenarioWindow : public Window this->DrawWidgets(); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { StringID str = STR_JUST_INT; switch (widget) { @@ -950,7 +950,7 @@ struct CreateScenarioWindow : public Window size->height += padding.height; } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_CS_TEMPERATE: @@ -1015,7 +1015,7 @@ struct CreateScenarioWindow : public Window } } - virtual void OnTimeout() + void OnTimeout() override { static const int raise_widgets[] = {WID_CS_START_DATE_DOWN, WID_CS_START_DATE_UP, WID_CS_FLAT_LAND_HEIGHT_DOWN, WID_CS_FLAT_LAND_HEIGHT_UP, WIDGET_LIST_END}; for (const int *widget = raise_widgets; *widget != WIDGET_LIST_END; widget++) { @@ -1026,7 +1026,7 @@ struct CreateScenarioWindow : public Window } } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { switch (widget) { case WID_CS_MAPSIZE_X_PULLDOWN: _settings_newgame.game_creation.map_x = index; break; @@ -1035,7 +1035,7 @@ struct CreateScenarioWindow : public Window this->SetDirty(); } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (!StrEmpty(str)) { int32 value = atoi(str); @@ -1187,7 +1187,7 @@ struct GenerateProgressWindow : public Window { this->InitNested(); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_GP_ABORT: @@ -1202,7 +1202,7 @@ struct GenerateProgressWindow : public Window { } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_GP_PROGRESS_BAR: { @@ -1223,7 +1223,7 @@ struct GenerateProgressWindow : public Window { } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_GP_PROGRESS_BAR: diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index 39df8ab6e2..d74f833cee 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -56,7 +56,7 @@ struct GraphLegendWindow : Window { } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (!IsInsideMM(widget, WID_GL_FIRST_COMPANY, MAX_COMPANIES + WID_GL_FIRST_COMPANY)) return; @@ -74,7 +74,7 @@ struct GraphLegendWindow : Window { DrawString(r.left + (rtl ? (uint)WD_FRAMERECT_LEFT : (d.width + 4)), r.right - (rtl ? (d.width + 4) : (uint)WD_FRAMERECT_RIGHT), r.top + (r.bottom - r.top + 1 - FONT_HEIGHT_NORMAL) / 2, STR_COMPANY_NAME_COMPANY_NUM, HasBit(_legend_excluded_companies, cid) ? TC_BLACK : TC_WHITE); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { if (!IsInsideMM(widget, WID_GL_FIRST_COMPANY, MAX_COMPANIES + WID_GL_FIRST_COMPANY)) return; @@ -93,7 +93,7 @@ struct GraphLegendWindow : Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; if (Company::IsValidID(data)) return; @@ -485,7 +485,7 @@ protected: } public: - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget != this->graph_widget) return; @@ -521,7 +521,7 @@ public: size->height = max(size->height, size->width / 3); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != this->graph_widget) return; @@ -533,13 +533,13 @@ public: return INVALID_DATAPOINT; } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { /* Clicked on legend? */ if (widget == WID_CV_KEY_BUTTON) ShowGraphLegend(); } - virtual void OnGameTick() + void OnGameTick() override { this->UpdateStatistics(false); } @@ -549,7 +549,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; this->UpdateStatistics(true); @@ -621,7 +621,7 @@ struct OperatingProfitGraphWindow : BaseGraphWindow { this->InitializeWindow(window_number); } - virtual OverflowSafeInt64 GetGraphData(const Company *c, int j) + OverflowSafeInt64 GetGraphData(const Company *c, int j) override { return c->old_economy[j].income + c->old_economy[j].expenses; } @@ -672,7 +672,7 @@ struct IncomeGraphWindow : BaseGraphWindow { this->InitializeWindow(window_number); } - virtual OverflowSafeInt64 GetGraphData(const Company *c, int j) + OverflowSafeInt64 GetGraphData(const Company *c, int j) override { return c->old_economy[j].income; } @@ -721,7 +721,7 @@ struct DeliveredCargoGraphWindow : BaseGraphWindow { this->InitializeWindow(window_number); } - virtual OverflowSafeInt64 GetGraphData(const Company *c, int j) + OverflowSafeInt64 GetGraphData(const Company *c, int j) override { return c->old_economy[j].delivered_cargo.GetSum(); } @@ -770,12 +770,12 @@ struct PerformanceHistoryGraphWindow : BaseGraphWindow { this->InitializeWindow(window_number); } - virtual OverflowSafeInt64 GetGraphData(const Company *c, int j) + OverflowSafeInt64 GetGraphData(const Company *c, int j) override { return c->old_economy[j].performance_history; } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { if (widget == WID_PHG_DETAILED_PERFORMANCE) ShowPerformanceRatingDetail(); this->BaseGraphWindow::OnClick(pt, widget, click_count); @@ -826,7 +826,7 @@ struct CompanyValueGraphWindow : BaseGraphWindow { this->InitializeWindow(window_number); } - virtual OverflowSafeInt64 GetGraphData(const Company *c, int j) + OverflowSafeInt64 GetGraphData(const Company *c, int j) override { return c->old_economy[j].company_value; } @@ -903,7 +903,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow { } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget != WID_CPR_MATRIX) { BaseGraphWindow::UpdateWidgetSize(widget, size, padding, fill, resize); @@ -926,7 +926,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow { resize->height = this->line_height; } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_CPR_MATRIX) { BaseGraphWindow::DrawWidget(r, widget); @@ -963,7 +963,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_CPR_ENABLE_CARGOES: @@ -1004,12 +1004,12 @@ struct PaymentRatesGraphWindow : BaseGraphWindow { } } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_CPR_MATRIX); } - virtual void OnGameTick() + void OnGameTick() override { /* Override default OnGameTick */ } @@ -1019,13 +1019,13 @@ struct PaymentRatesGraphWindow : BaseGraphWindow { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; this->OnHundredthTick(); } - virtual void OnHundredthTick() + void OnHundredthTick() override { this->UpdateExcludedData(); @@ -1161,7 +1161,7 @@ public: this->companies.NeedResort(); } - virtual void OnPaint() + void OnPaint() override { this->BuildCompanyList(); this->companies.Sort(&PerformanceSorter); @@ -1169,7 +1169,7 @@ public: this->DrawWidgets(); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_CL_BACKGROUND) return; @@ -1197,7 +1197,7 @@ public: } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget != WID_CL_BACKGROUND) return; @@ -1236,7 +1236,7 @@ public: } - virtual void OnGameTick() + void OnGameTick() override { if (this->companies.NeedResort()) { this->SetDirty(); @@ -1248,7 +1248,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (data == 0) { /* This needs to be done in command-scope to enforce rebuilding before resorting invalid data */ @@ -1318,7 +1318,7 @@ struct PerformanceRatingDetailWindow : Window { uint score_detail_left; uint score_detail_right; - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_PRD_SCORE_FIRST: @@ -1376,7 +1376,7 @@ struct PerformanceRatingDetailWindow : Window { } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { /* No need to draw when there's nothing to draw */ if (this->company == INVALID_COMPANY) return; @@ -1455,7 +1455,7 @@ struct PerformanceRatingDetailWindow : Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { /* Check which button is clicked */ if (IsInsideMM(widget, WID_PRD_COMPANY_FIRST, WID_PRD_COMPANY_LAST + 1)) { @@ -1469,7 +1469,7 @@ struct PerformanceRatingDetailWindow : Window { } } - virtual void OnGameTick() + void OnGameTick() override { /* Update the company score every 5 days */ if (--this->timeout == 0) { @@ -1483,7 +1483,7 @@ struct PerformanceRatingDetailWindow : Window { * @param data the company ID of the company that is going to be removed * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; /* Disable the companies who are not active */ diff --git a/src/group_gui.cpp b/src/group_gui.cpp index b5f33ff52a..299bf58ccd 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -359,7 +359,7 @@ public: *this->sorting = this->vehicles.GetListing(); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_GL_LIST_GROUP: { @@ -423,7 +423,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (data == 0) { /* This needs to be done in command-scope to enforce rebuilding before resorting invalid data */ @@ -447,7 +447,7 @@ public: this->SetDirty(); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_GL_AVAILABLE_VEHICLES: @@ -474,7 +474,7 @@ public: } } - virtual void OnPaint() + void OnPaint() override { /* If we select the all vehicles, this->list will contain all vehicles of the owner * else this->list will contain all vehicles which belong to the selected group */ @@ -529,7 +529,7 @@ public: this->DrawWidgets(); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_GL_ALL_VEHICLES: @@ -628,7 +628,7 @@ public: } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_GL_SORT_BY_ORDER: // Flip sorting method ascending/descending @@ -806,7 +806,7 @@ public: } } - virtual void OnDragDrop(Point pt, int widget) + void OnDragDrop(Point pt, int widget) override { if (this->vehicle_sel != INVALID_VEHICLE) OnDragDrop_Vehicle(pt, widget); if (this->group_sel != INVALID_GROUP) OnDragDrop_Group(pt, widget); @@ -814,19 +814,19 @@ public: _cursor.vehchain = false; } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (str != NULL) DoCommandP(0, this->group_rename, 0, CMD_ALTER_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_RENAME), NULL, str); this->group_rename = INVALID_GROUP; } - virtual void OnResize() + void OnResize() override { this->group_sb->SetCapacityFromWidget(this, WID_GL_LIST_GROUP); this->vscroll->SetCapacityFromWidget(this, WID_GL_LIST_VEHICLE); } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { switch (widget) { case WID_GL_SORT_BY_DROPDOWN: @@ -866,14 +866,14 @@ public: this->SetDirty(); } - virtual void OnGameTick() + void OnGameTick() override { if (this->groups.NeedResort() || this->vehicles.NeedResort()) { this->SetDirty(); } } - virtual void OnPlaceObjectAbort() + void OnPlaceObjectAbort() override { /* abort drag & drop */ this->vehicle_sel = INVALID_VEHICLE; @@ -882,7 +882,7 @@ public: this->SetWidgetDirty(WID_GL_LIST_VEHICLE); } - virtual void OnMouseDrag(Point pt, int widget) + void OnMouseDrag(Point pt, int widget) override { if (this->vehicle_sel == INVALID_VEHICLE && this->group_sel == INVALID_GROUP) return; diff --git a/src/highscore_gui.cpp b/src/highscore_gui.cpp index c67aaa170b..d6ea8c0c1c 100644 --- a/src/highscore_gui.cpp +++ b/src/highscore_gui.cpp @@ -63,12 +63,12 @@ struct EndGameHighScoreBaseWindow : Window { return pt; } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { delete this; } - virtual EventState OnKeyPress(WChar key, uint16 keycode) + EventState OnKeyPress(WChar key, uint16 keycode) override { /* All keys are 'handled' by this window but we want to make * sure that 'quit' still works correctly. Not handling the @@ -129,7 +129,7 @@ struct EndGameWindow : EndGameHighScoreBaseWindow { ShowHighscoreTable(this->window_number, this->rank); } - virtual void OnPaint() + void OnPaint() override { this->SetupHighScoreEndWindow(); Point pt = this->GetTopLeft(640, 480); @@ -177,7 +177,7 @@ struct HighScoreWindow : EndGameHighScoreBaseWindow { if (!_networking && !this->game_paused_by_player) DoCommandP(0, PM_PAUSED_NORMAL, 0, CMD_PAUSE); // unpause } - virtual void OnPaint() + void OnPaint() override { const HighScore *hs = _highscore_table[this->window_number]; diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 78bf3f4a01..898786ff7d 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -403,12 +403,12 @@ public: this->SetButtons(); } - virtual void OnInit() + void OnInit() override { this->SetupArrays(); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_DPI_MATRIX_WIDGET: { @@ -477,7 +477,7 @@ public: } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_DPI_FUND_WIDGET: @@ -494,7 +494,7 @@ public: } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_DPI_MATRIX_WIDGET: { @@ -581,7 +581,7 @@ public: } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_DPI_MATRIX_WIDGET: { @@ -635,13 +635,13 @@ public: } } - virtual void OnResize() + void OnResize() override { /* Adjust the number of items in the matrix depending of the resize */ this->vscroll->SetCapacityFromWidget(this, WID_DPI_MATRIX_WIDGET); } - virtual void OnPlaceObject(Point pt, TileIndex tile) + void OnPlaceObject(Point pt, TileIndex tile) override { bool success = true; /* We do not need to protect ourselves against "Random Many Industries" in this mode */ @@ -674,7 +674,7 @@ public: if (success && !_settings_client.gui.persistent_buildingtools) ResetObjectToPlace(); } - virtual void OnGameTick() + void OnGameTick() override { if (!this->timer_enabled) return; if (--this->callback_timer == 0) { @@ -697,12 +697,12 @@ public: } } - virtual void OnTimeout() + void OnTimeout() override { this->RaiseButtons(); } - virtual void OnPlaceObjectAbort() + void OnPlaceObjectAbort() override { this->RaiseButtons(); } @@ -712,7 +712,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; this->SetupArrays(); @@ -787,7 +787,7 @@ public: this->InvalidateData(); } - virtual void OnPaint() + void OnPaint() override { this->DrawWidgets(); @@ -924,17 +924,17 @@ public: return y + WD_FRAMERECT_BOTTOM; } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget == WID_IV_CAPTION) SetDParam(0, this->window_number); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget == WID_IV_INFO) size->height = this->info_height; } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_IV_INFO: { @@ -1039,14 +1039,14 @@ public: } } - virtual void OnTimeout() + void OnTimeout() override { this->clicked_line = IL_NONE; this->clicked_button = 0; this->SetDirty(); } - virtual void OnResize() + void OnResize() override { if (this->viewport != NULL) { NWidgetViewport *nvp = this->GetWidget(WID_IV_VIEWPORT); @@ -1056,7 +1056,7 @@ public: } } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (StrEmpty(str)) return; @@ -1082,7 +1082,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; const Industry *i = Industry::Get(this->window_number); @@ -1094,12 +1094,12 @@ public: } } - virtual bool IsNewGRFInspectable() const + bool IsNewGRFInspectable() const override { return ::IsNewGRFInspectable(GSF_INDUSTRIES, this->window_number); } - virtual void ShowNewGRFInspectWindow() const + void ShowNewGRFInspectWindow() const override { ::ShowNewGRFInspectWindow(GSF_INDUSTRIES, this->window_number); } @@ -1357,12 +1357,12 @@ public: this->last_sorting = this->industries.GetListing(); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget == WID_ID_DROPDOWN_CRITERIA) SetDParam(0, IndustryDirectoryWindow::sorter_names[this->industries.SortType()]); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_ID_DROPDOWN_ORDER: @@ -1387,7 +1387,7 @@ public: } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_ID_DROPDOWN_ORDER: { @@ -1425,7 +1425,7 @@ public: } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_ID_DROPDOWN_ORDER: @@ -1451,7 +1451,7 @@ public: } } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { if (this->industries.SortType() != index) { this->industries.SetSortType(index); @@ -1459,18 +1459,18 @@ public: } } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_ID_INDUSTRY_LIST); } - virtual void OnPaint() + void OnPaint() override { if (this->industries.NeedRebuild()) this->BuildSortIndustriesList(); this->DrawWidgets(); } - virtual void OnHundredthTick() + void OnHundredthTick() override { this->industries.ForceResort(); this->BuildSortIndustriesList(); @@ -1481,7 +1481,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (data == 0) { /* This needs to be done in command-scope to enforce rebuilding before resorting invalid data */ @@ -2172,7 +2172,7 @@ struct IndustryCargoesWindow : public Window { this->OnInvalidateData(id); } - virtual void OnInit() + void OnInit() override { /* Initialize static CargoesField size variables. */ Dimension d = GetStringBoundingBox(STR_INDUSTRY_CARGOES_PRODUCERS); @@ -2219,7 +2219,7 @@ struct IndustryCargoesWindow : public Window { CargoesField::cargo_field_width = CargoesField::HOR_CARGO_BORDER_SPACE * 2 + CargoesField::HOR_CARGO_WIDTH * CargoesField::max_cargoes + CargoesField::HOR_CARGO_SPACE * (CargoesField::max_cargoes - 1); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_IC_PANEL: @@ -2238,7 +2238,7 @@ struct IndustryCargoesWindow : public Window { CargoesFieldType type; ///< Type of field. - virtual void SetStringParameters (int widget) const + void SetStringParameters (int widget) const override { if (widget != WID_IC_CAPTION) return; @@ -2557,7 +2557,7 @@ struct IndustryCargoesWindow : public Window { * - data = NUM_INDUSTRYTYPES: Stop sending updates to the smallmap window. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; if (data == NUM_INDUSTRYTYPES) { @@ -2572,7 +2572,7 @@ struct IndustryCargoesWindow : public Window { this->ComputeIndustryDisplay(data); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_IC_PANEL) return; @@ -2660,7 +2660,7 @@ struct IndustryCargoesWindow : public Window { return true; } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_IC_PANEL: { @@ -2738,7 +2738,7 @@ struct IndustryCargoesWindow : public Window { } } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { if (index < 0) return; @@ -2753,7 +2753,7 @@ struct IndustryCargoesWindow : public Window { } } - bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond) + bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond) override { if (widget != WID_IC_PANEL) return false; @@ -2795,7 +2795,7 @@ struct IndustryCargoesWindow : public Window { return false; } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_IC_PANEL); } diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp index 001afde1d4..307be44050 100644 --- a/src/intro_gui.cpp +++ b/src/intro_gui.cpp @@ -49,7 +49,7 @@ struct SelectGameWindow : public Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; this->SetWidgetLoweredState(WID_SGI_TEMPERATE_LANDSCAPE, _settings_newgame.game_creation.landscape == LT_TEMPERATE); @@ -58,7 +58,7 @@ struct SelectGameWindow : public Window { this->SetWidgetLoweredState(WID_SGI_TOYLAND_LANDSCAPE, _settings_newgame.game_creation.landscape == LT_TOYLAND); } - virtual void OnInit() + void OnInit() override { bool missing_sprites = _missing_extra_graphics > 0 && !IsReleasedVersion(); this->GetWidget(WID_SGI_BASESET_SELECTION)->SetDisplayedPlane(missing_sprites ? 0 : SZSP_NONE); @@ -67,7 +67,7 @@ struct SelectGameWindow : public Window { this->GetWidget(WID_SGI_TRANSLATION_SELECTION)->SetDisplayedPlane(missing_lang ? 0 : SZSP_NONE); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_SGI_BASESET: @@ -82,7 +82,7 @@ struct SelectGameWindow : public Window { } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { StringID str = 0; switch (widget) { @@ -111,7 +111,7 @@ struct SelectGameWindow : public Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { /* Do not create a network server when you (just) have closed one of the game * creation/load windows for the network server. */ diff --git a/src/linkgraph/linkgraph_gui.h b/src/linkgraph/linkgraph_gui.h index 17fcd28b28..b913bb1f4a 100644 --- a/src/linkgraph/linkgraph_gui.h +++ b/src/linkgraph/linkgraph_gui.h @@ -104,11 +104,11 @@ public: LinkGraphLegendWindow(WindowDesc *desc, int window_number); void SetOverlay(LinkGraphOverlay *overlay); - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize); - virtual void DrawWidget(const Rect &r, int widget) const; - virtual bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond); - virtual void OnClick(Point pt, int widget, int click_count); - virtual void OnInvalidateData(int data = 0, bool gui_scope = true); + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override; + void DrawWidget(const Rect &r, int widget) const override; + bool OnTooltip(Point pt, int widget, TooltipCloseCondition close_cond) override; + void OnClick(Point pt, int widget, int click_count) override; + void OnInvalidateData(int data = 0, bool gui_scope = true) override; private: LinkGraphOverlay *overlay; diff --git a/src/main_gui.cpp b/src/main_gui.cpp index 7ab9bebb16..808484b0ea 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -250,7 +250,7 @@ struct MainWindow : Window this->refresh.SetInterval(LINKGRAPH_DELAY); } - virtual void OnRealtimeTick(uint delta_ms) + void OnRealtimeTick(uint delta_ms) override { if (!this->refresh.Elapsed(delta_ms)) return; @@ -265,7 +265,7 @@ struct MainWindow : Window this->GetWidget(WID_M_VIEWPORT)->SetDirty(this); } - virtual void OnPaint() + void OnPaint() override { this->DrawWidgets(); if (_game_mode == GM_MENU) { @@ -285,7 +285,7 @@ struct MainWindow : Window } } - virtual EventState OnHotkey(int hotkey) + EventState OnHotkey(int hotkey) override { if (hotkey == GHK_QUIT) { HandleExitGameRequest(); @@ -424,7 +424,7 @@ struct MainWindow : Window return ES_HANDLED; } - virtual void OnScroll(Point delta) + void OnScroll(Point delta) override { this->viewport->scrollpos_x += ScaleByZoom(delta.x, this->viewport->zoom); this->viewport->scrollpos_y += ScaleByZoom(delta.y, this->viewport->zoom); @@ -433,14 +433,14 @@ struct MainWindow : Window this->refresh.SetInterval(LINKGRAPH_DELAY); } - virtual void OnMouseWheel(int wheel) + void OnMouseWheel(int wheel) override { if (_settings_client.gui.scrollwheel_scrolling != 2) { ZoomInOrOutToCursorWindow(wheel < 0, this); } } - virtual void OnResize() + void OnResize() override { if (this->viewport != NULL) { NWidgetViewport *nvp = this->GetWidget(WID_M_VIEWPORT); @@ -454,7 +454,7 @@ struct MainWindow : Window * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; /* Forward the message to the appropriate toolbar (ingame or scenario editor) */ diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 061070a2b5..4aeb81736b 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -72,7 +72,7 @@ public: char landinfo_data[LAND_INFO_LINE_END][LAND_INFO_LINE_BUFF_SIZE]; TileIndex tile; - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_LI_BACKGROUND) return; @@ -91,7 +91,7 @@ public: } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget != WID_LI_BACKGROUND) return; @@ -137,7 +137,7 @@ public: #undef LANDINFOD_LEVEL } - virtual void OnInit() + void OnInit() override { Town *t = ClosestTownFromTile(tile, _settings_game.economy.dist_local_authority); @@ -328,12 +328,12 @@ public: if (!found) this->landinfo_data[LAND_INFO_MULTICENTER_LINE][0] = '\0'; } - virtual bool IsNewGRFInspectable() const + bool IsNewGRFInspectable() const override { return ::IsNewGRFInspectable(GetGrfSpecFeature(this->tile), this->tile); } - virtual void ShowNewGRFInspectWindow() const + void ShowNewGRFInspectWindow() const override { ::ShowNewGRFInspectWindow(GetGrfSpecFeature(this->tile), this->tile); } @@ -343,7 +343,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; switch (data) { @@ -469,12 +469,12 @@ struct AboutWindow : public Window { this->timer.SetInterval(TIMER_INTERVAL); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget == WID_A_WEBSITE) SetDParamStr(0, "Website: http://www.openttd.org"); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget != WID_A_SCROLLING_TEXT) return; @@ -490,7 +490,7 @@ struct AboutWindow : public Window { *size = maxdim(*size, d); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_A_SCROLLING_TEXT) return; @@ -505,7 +505,7 @@ struct AboutWindow : public Window { } } - virtual void OnRealtimeTick(uint delta_ms) + void OnRealtimeTick(uint delta_ms) override { uint count = this->timer.CountElapsed(delta_ms); if (count > 0) { @@ -667,7 +667,7 @@ struct TooltipsWindow : public Window CLRBITS(this->flags, WF_WHITE_BORDER); } - virtual Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) + Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) override { /* Find the free screen space between the main toolbar at the top, and the statusbar at the bottom. * Add a fixed distance 2 so the tooltip floats free from both bars. @@ -687,7 +687,7 @@ struct TooltipsWindow : public Window return pt; } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { /* There is only one widget. */ for (uint i = 0; i != this->paramcount; i++) SetDParam(i, this->params[i]); @@ -700,7 +700,7 @@ struct TooltipsWindow : public Window size->height += 2 + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { /* There is only one widget. */ GfxFillRect(r.left, r.top, r.right, r.bottom, PC_BLACK); @@ -712,7 +712,7 @@ struct TooltipsWindow : public Window DrawStringMultiLine(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, r.bottom - WD_FRAMERECT_BOTTOM, this->string_id, TC_FROMSTRING, SA_CENTER); } - virtual void OnMouseLoop() + void OnMouseLoop() override { /* Always close tooltips when the cursor is not in our window. */ if (!_cursor.in_window) { @@ -973,7 +973,7 @@ struct QueryStringWindow : public Window this->SetFocusedWidget(WID_QS_TEXT); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget == WID_QS_DEFAULT && (this->flags & QSF_ENABLE_DEFAULT) == 0) { /* We don't want this widget to show! */ @@ -983,7 +983,7 @@ struct QueryStringWindow : public Window } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget == WID_QS_CAPTION) SetDParam(0, this->editbox.caption); } @@ -1002,7 +1002,7 @@ struct QueryStringWindow : public Window } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_QS_DEFAULT: @@ -1097,7 +1097,7 @@ struct QueryWindow : public Window { if (this->proc != NULL) this->proc(this->parent, false); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_Q_CAPTION: @@ -1111,7 +1111,7 @@ struct QueryWindow : public Window { } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget != WID_Q_TEXT) return; @@ -1121,7 +1121,7 @@ struct QueryWindow : public Window { *size = d; } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_Q_TEXT) return; @@ -1129,7 +1129,7 @@ struct QueryWindow : public Window { this->message, TC_FROMSTRING, SA_CENTER); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_Q_YES: { @@ -1152,7 +1152,7 @@ struct QueryWindow : public Window { } } - virtual EventState OnKeyPress(WChar key, uint16 keycode) + EventState OnKeyPress(WChar key, uint16 keycode) override { /* ESC closes the window, Enter confirms the action */ switch (keycode) { diff --git a/src/music_gui.cpp b/src/music_gui.cpp index 885647427f..da63192e02 100644 --- a/src/music_gui.cpp +++ b/src/music_gui.cpp @@ -459,7 +459,7 @@ struct MusicTrackSelectionWindow : public Window { this->LowerWidget(WID_MTS_ALL + _settings_client.music.playlist); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_MTS_PLAYLIST: @@ -476,7 +476,7 @@ struct MusicTrackSelectionWindow : public Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; for (int i = 0; i < 6; i++) { @@ -486,7 +486,7 @@ struct MusicTrackSelectionWindow : public Window { this->SetDirty(); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_MTS_PLAYLIST: { @@ -521,7 +521,7 @@ struct MusicTrackSelectionWindow : public Window { } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_MTS_LIST_LEFT: { @@ -554,7 +554,7 @@ struct MusicTrackSelectionWindow : public Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_MTS_LIST_LEFT: { // add to playlist @@ -587,7 +587,7 @@ struct MusicTrackSelectionWindow : public Window { } } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { switch (widget) { case WID_MTS_MUSICSET: @@ -672,7 +672,7 @@ struct MusicWindow : public Window { ); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { /* Make sure that WID_M_SHUFFLE and WID_M_PROGRAMME have the same size. @@ -714,7 +714,7 @@ struct MusicWindow : public Window { } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_M_TRACK_NR: { @@ -763,7 +763,7 @@ struct MusicWindow : public Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; for (int i = 0; i < 6; i++) { @@ -775,7 +775,7 @@ struct MusicWindow : public Window { this->SetDirty(); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_M_PREV: // skip to prev diff --git a/src/network/network_chat_gui.cpp b/src/network/network_chat_gui.cpp index 94e2898852..21607e9e8d 100644 --- a/src/network/network_chat_gui.cpp +++ b/src/network/network_chat_gui.cpp @@ -320,7 +320,7 @@ struct NetworkChatWindow : public Window { InvalidateWindowData(WC_NEWS_WINDOW, 0, 0); } - virtual void FindWindowPlacementAndResize(int def_width, int def_height) + void FindWindowPlacementAndResize(int def_width, int def_height) override { Window::FindWindowPlacementAndResize(_toolbar_width, def_height); } @@ -458,13 +458,13 @@ struct NetworkChatWindow : public Window { free(pre_buf); } - virtual Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) + Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) override { Point pt = { 0, _screen.height - sm_height - FindWindowById(WC_STATUS_BAR, 0)->height }; return pt; } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget != WID_NC_DESTINATION) return; @@ -477,7 +477,7 @@ struct NetworkChatWindow : public Window { *size = maxdim(*size, d); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_NC_DESTINATION) return; @@ -487,7 +487,7 @@ struct NetworkChatWindow : public Window { DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, this->dest_string, TC_BLACK, SA_RIGHT); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_NC_SENDBUTTON: /* Send */ @@ -500,7 +500,7 @@ struct NetworkChatWindow : public Window { } } - virtual EventState OnKeyPress(WChar key, uint16 keycode) + EventState OnKeyPress(WChar key, uint16 keycode) override { EventState state = ES_NOT_HANDLED; if (keycode == WKC_TAB) { @@ -510,7 +510,7 @@ struct NetworkChatWindow : public Window { return state; } - virtual void OnEditboxChanged(int wid) + void OnEditboxChanged(int wid) override { _chat_tab_completion_active = false; } @@ -520,7 +520,7 @@ struct NetworkChatWindow : public Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (data == this->dest) delete this; } diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 321a53bc7d..49ecf2b242 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -257,7 +257,7 @@ public: InvalidateWindowData(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_CONTENT_LIST, 2); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { if (widget == WID_NCDS_CANCELOK) { if (this->downloaded_bytes != this->total_bytes) { @@ -271,7 +271,7 @@ public: } } - virtual void OnDownloadProgress(const ContentInfo *ci, int bytes) + void OnDownloadProgress(const ContentInfo *ci, int bytes) override { BaseNetworkContentDownloadStatusWindow::OnDownloadProgress(ci, bytes); this->receivedTypes.Include(ci->type); @@ -562,7 +562,7 @@ public: _network_content_client.RemoveCallback(this); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_NCL_FILTER_CAPT: @@ -590,7 +590,7 @@ public: } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_NCL_FILTER_CAPT: @@ -607,7 +607,7 @@ public: } } - virtual void OnPaint() + void OnPaint() override { const SortButtonState arrow = this->content.IsDescSortOrder() ? SBS_DOWN : SBS_UP; @@ -779,7 +779,7 @@ public: } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { if (widget >= WID_NCL_TEXTFILE && widget < WID_NCL_TEXTFILE + TFT_END) { if (this->selected == NULL || this->selected->state != ContentInfo::ALREADY_HERE) return; @@ -865,7 +865,7 @@ public: } } - virtual EventState OnKeyPress(WChar key, uint16 keycode) + EventState OnKeyPress(WChar key, uint16 keycode) override { switch (keycode) { case WKC_UP: @@ -937,7 +937,7 @@ public: return ES_HANDLED; } - virtual void OnEditboxChanged(int wid) + void OnEditboxChanged(int wid) override { if (wid == WID_NCL_FILTER) { this->filter_data.string_filter.SetFilterTerm(this->filter_editbox.text.buf); @@ -947,25 +947,25 @@ public: } } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_NCL_MATRIX); } - virtual void OnReceiveContentInfo(const ContentInfo *rci) + void OnReceiveContentInfo(const ContentInfo *rci) override { if (this->auto_select && !rci->IsSelected()) _network_content_client.ToggleSelectedState(rci); this->content.ForceRebuild(); this->InvalidateData(); } - virtual void OnDownloadComplete(ContentID cid) + void OnDownloadComplete(ContentID cid) override { this->content.ForceResort(); this->InvalidateData(); } - virtual void OnConnect(bool success) + void OnConnect(bool success) override { if (!success) { ShowErrorMessage(STR_CONTENT_ERROR_COULD_NOT_CONNECT, INVALID_STRING_ID, WL_ERROR); @@ -981,7 +981,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; if (this->content.NeedRebuild()) this->BuildContentList(); diff --git a/src/network/network_content_gui.h b/src/network/network_content_gui.h index 1397010019..8afd245d7c 100644 --- a/src/network/network_content_gui.h +++ b/src/network/network_content_gui.h @@ -39,8 +39,8 @@ public: */ ~BaseNetworkContentDownloadStatusWindow(); - virtual void DrawWidget(const Rect &r, int widget) const; - virtual void OnDownloadProgress(const ContentInfo *ci, int bytes); + void DrawWidget(const Rect &r, int widget) const override; + void OnDownloadProgress(const ContentInfo *ci, int bytes) override; }; void BuildContentTypeStringList(); diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index f90370312b..b12aaa8239 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -494,7 +494,7 @@ public: this->last_sorting = this->servers.GetListing(); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_NG_CONN_BTN: @@ -503,7 +503,7 @@ public: } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_NG_CONN_BTN: @@ -558,7 +558,7 @@ public: } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_NG_MATRIX: { @@ -595,7 +595,7 @@ public: } - virtual void OnPaint() + void OnPaint() override { if (this->servers.NeedRebuild()) { this->BuildGUINetworkGameList(); @@ -691,7 +691,7 @@ public: } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_NG_CANCEL: // Cancel button @@ -788,7 +788,7 @@ public: } } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { switch (widget) { case WID_NG_CONN_BTN: @@ -807,13 +807,13 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { this->servers.ForceRebuild(); this->SetDirty(); } - virtual EventState OnKeyPress(WChar key, uint16 keycode) + EventState OnKeyPress(WChar key, uint16 keycode) override { EventState state = ES_NOT_HANDLED; @@ -874,7 +874,7 @@ public: return state; } - virtual void OnEditboxChanged(int wid) + void OnEditboxChanged(int wid) override { switch (wid) { case WID_NG_FILTER: { @@ -896,17 +896,17 @@ public: } } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (!StrEmpty(str)) NetworkAddServer(str); } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_NG_MATRIX); } - virtual void OnRealtimeTick(uint delta_ms) + void OnRealtimeTick(uint delta_ms) override { if (!this->requery_timer.Elapsed(delta_ms)) return; this->requery_timer.SetInterval(MILLISECONDS_PER_TICK); @@ -1067,7 +1067,7 @@ struct NetworkStartServerWindow : public Window { this->SetFocusedWidget(WID_NSS_GAMENAME); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_NSS_CONNTYPE_BTN: @@ -1092,7 +1092,7 @@ struct NetworkStartServerWindow : public Window { } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_NSS_CONNTYPE_BTN: @@ -1103,7 +1103,7 @@ struct NetworkStartServerWindow : public Window { } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_NSS_SETPWD: @@ -1112,7 +1112,7 @@ struct NetworkStartServerWindow : public Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_NSS_CANCEL: // Cancel button @@ -1208,7 +1208,7 @@ struct NetworkStartServerWindow : public Window { } } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { switch (widget) { case WID_NSS_CONNTYPE_BTN: @@ -1224,14 +1224,14 @@ struct NetworkStartServerWindow : public Window { this->SetDirty(); } - virtual void OnEditboxChanged(int wid) + void OnEditboxChanged(int wid) override { if (wid == WID_NSS_GAMENAME) { strecpy(_settings_client.network.server_name, this->name_editbox.text.buf, lastof(_settings_client.network.server_name)); } } - virtual void OnTimeout() + void OnTimeout() override { static const int raise_widgets[] = {WID_NSS_CLIENTS_BTND, WID_NSS_CLIENTS_BTNU, WID_NSS_COMPANIES_BTND, WID_NSS_COMPANIES_BTNU, WID_NSS_SPECTATORS_BTND, WID_NSS_SPECTATORS_BTNU, WIDGET_LIST_END}; for (const int *widget = raise_widgets; *widget != WIDGET_LIST_END; widget++) { @@ -1242,7 +1242,7 @@ struct NetworkStartServerWindow : public Window { } } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (str == NULL) return; @@ -1384,7 +1384,7 @@ struct NetworkLobbyWindow : public Window { return COMPANY_FIRST; } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_NL_HEADER: @@ -1402,7 +1402,7 @@ struct NetworkLobbyWindow : public Window { } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_NL_TEXT: @@ -1411,7 +1411,7 @@ struct NetworkLobbyWindow : public Window { } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_NL_DETAILS: @@ -1424,7 +1424,7 @@ struct NetworkLobbyWindow : public Window { } } - virtual void OnPaint() + void OnPaint() override { const NetworkGameInfo *gi = &this->server->info; @@ -1546,7 +1546,7 @@ struct NetworkLobbyWindow : public Window { DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_NETWORK_GAME_LOBBY_PLAYERS); // players } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_NL_CANCEL: // Cancel button @@ -1585,7 +1585,7 @@ struct NetworkLobbyWindow : public Window { } } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_NL_MATRIX); } @@ -1777,12 +1777,12 @@ struct NetworkClientListPopupWindow : Window { CLRBITS(this->flags, WF_WHITE_BORDER); } - virtual Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) + Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) override { return this->desired_location; } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { Dimension d = *size; for (const ClientListAction *action = this->actions.Begin(); action != this->actions.End(); action++) { @@ -1795,7 +1795,7 @@ struct NetworkClientListPopupWindow : Window { *size = d; } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { /* Draw the actions */ int sel = this->sel_index; @@ -1813,7 +1813,7 @@ struct NetworkClientListPopupWindow : Window { } } - virtual void OnMouseLoop() + void OnMouseLoop() override { /* We selected an action */ uint index = (_cursor.pos.y - this->top - WD_FRAMERECT_TOP) / FONT_HEIGHT_NORMAL; @@ -1904,7 +1904,7 @@ struct NetworkClientListWindow : Window { return true; } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget != WID_CL_PANEL) return; @@ -1921,7 +1921,7 @@ struct NetworkClientListWindow : Window { size->width = WD_FRAMERECT_LEFT + this->server_client_width + this->icon_size.width + WD_FRAMERECT_LEFT + width + WD_FRAMERECT_RIGHT; } - virtual void OnPaint() + void OnPaint() override { /* Check if we need to reset the height */ if (!this->CheckClientListHeight()) return; @@ -1929,7 +1929,7 @@ struct NetworkClientListWindow : Window { this->DrawWidgets(); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_CL_PANEL) return; @@ -1975,7 +1975,7 @@ struct NetworkClientListWindow : Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { /* Show the popup with option */ if (this->selected_item != -1) { @@ -1991,7 +1991,7 @@ struct NetworkClientListWindow : Window { } } - virtual void OnMouseOver(Point pt, int widget) + void OnMouseOver(Point pt, int widget) override { /* -1 means we left the current window */ if (pt.y == -1) { @@ -2035,7 +2035,7 @@ struct NetworkJoinStatusWindow : Window { this->InitNested(WN_NETWORK_STATUS_WINDOW_JOIN); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_NJS_BACKGROUND) return; @@ -2069,7 +2069,7 @@ struct NetworkJoinStatusWindow : Window { DrawFrameRect(r.left + 20, r.top + 5, (int)((this->width - 20) * progress / 100), r.top + 15, COLOUR_MAUVE, FR_NONE); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget != WID_NJS_BACKGROUND) return; @@ -2095,7 +2095,7 @@ struct NetworkJoinStatusWindow : Window { size->width = width + WD_FRAMERECT_LEFT + WD_FRAMERECT_BOTTOM + 10; } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { if (widget == WID_NJS_CANCELOK) { // Disconnect button NetworkDisconnect(); @@ -2104,7 +2104,7 @@ struct NetworkJoinStatusWindow : Window { } } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (StrEmpty(str)) { NetworkDisconnect(); @@ -2184,7 +2184,7 @@ struct NetworkCompanyPasswordWindow : public Window { NetworkChangeCompanyPassword(_local_company, this->password_editbox.text.buf); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_NCP_OK: diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index 75b06967f7..e8fc4efccb 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -363,14 +363,14 @@ struct NewGRFInspectWindow : Window { this->OnInvalidateData(0, true); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget != WID_NGRFI_CAPTION) return; GetFeatureHelper(this->window_number)->SetStringParameters(this->GetFeatureIndex()); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_NGRFI_VEH_CHAIN: { @@ -410,7 +410,7 @@ struct NewGRFInspectWindow : Window { ::DrawString(r.left + LEFT_OFFSET, r.right - RIGHT_OFFSET, r.top + TOP_OFFSET + (offset * this->resize.step_height), buf, TC_BLACK); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_NGRFI_VEH_CHAIN: { @@ -550,7 +550,7 @@ struct NewGRFInspectWindow : Window { const_cast(this)->vscroll->SetCount(i); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_NGRFI_PARENT: { @@ -600,7 +600,7 @@ struct NewGRFInspectWindow : Window { } } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (StrEmpty(str)) return; @@ -608,7 +608,7 @@ struct NewGRFInspectWindow : Window { this->SetDirty(); } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_NGRFI_MAINPANEL, TOP_OFFSET + BOTTOM_OFFSET); } @@ -618,7 +618,7 @@ struct NewGRFInspectWindow : Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; if (this->HasChainIndex()) { @@ -822,7 +822,7 @@ struct SpriteAlignerWindow : Window { while (GetSpriteType(this->current_sprite) != ST_NORMAL) this->current_sprite++; } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { const Sprite *spr = GetSprite(this->current_sprite, ST_NORMAL); switch (widget) { @@ -856,7 +856,7 @@ struct SpriteAlignerWindow : Window { } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget != WID_SA_LIST) return; @@ -867,7 +867,7 @@ struct SpriteAlignerWindow : Window { size->height = (1 + 200 / resize->height) * resize->height; } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_SA_SPRITE: { @@ -908,7 +908,7 @@ struct SpriteAlignerWindow : Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_SA_PREVIOUS: @@ -992,7 +992,7 @@ struct SpriteAlignerWindow : Window { } } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (StrEmpty(str)) return; @@ -1009,7 +1009,7 @@ struct SpriteAlignerWindow : Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; if (data == 1) { @@ -1019,7 +1019,7 @@ struct SpriteAlignerWindow : Window { } } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_SA_LIST); } diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index adf38b1648..37844423aa 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -190,7 +190,7 @@ struct NewGRFParametersWindow : public Window { return &dummy_parameter_info; } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_NP_NUMPAR_DEC: @@ -234,7 +234,7 @@ struct NewGRFParametersWindow : public Window { } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_NP_NUMPAR: @@ -243,7 +243,7 @@ struct NewGRFParametersWindow : public Window { } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget == WID_NP_DESCRIPTION) { const GRFParameterInfo *par_info = (this->clicked_row < this->grf_config->param_info.Length()) ? this->grf_config->param_info[this->clicked_row] : NULL; @@ -304,7 +304,7 @@ struct NewGRFParametersWindow : public Window { } } - virtual void OnPaint() + void OnPaint() override { if (this->closing_dropdown) { this->closing_dropdown = false; @@ -313,7 +313,7 @@ struct NewGRFParametersWindow : public Window { this->DrawWidgets(); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_NP_NUMPAR_DEC: @@ -427,7 +427,7 @@ struct NewGRFParametersWindow : public Window { } } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (StrEmpty(str)) return; int32 value = atoi(str); @@ -438,7 +438,7 @@ struct NewGRFParametersWindow : public Window { this->SetDirty(); } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { assert(this->clicked_dropdown); GRFParameterInfo *par_info = ((uint)this->clicked_row < this->grf_config->param_info.Length()) ? this->grf_config->param_info[this->clicked_row] : NULL; @@ -447,7 +447,7 @@ struct NewGRFParametersWindow : public Window { this->SetDirty(); } - virtual void OnDropdownClose(Point pt, int widget, int index, bool instant_close) + void OnDropdownClose(Point pt, int widget, int index, bool instant_close) override { /* We cannot raise the dropdown button just yet. OnClick needs some hint, whether * the same dropdown button was clicked again, and then not open the dropdown again. @@ -458,7 +458,7 @@ struct NewGRFParametersWindow : public Window { this->SetDirty(); } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_NP_BACKGROUND); } @@ -468,7 +468,7 @@ struct NewGRFParametersWindow : public Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; if (!this->action14present) { @@ -483,7 +483,7 @@ struct NewGRFParametersWindow : public Window { } } - virtual void OnRealtimeTick(uint delta_ms) + void OnRealtimeTick(uint delta_ms) override { if (timeout.Elapsed(delta_ms)) { this->clicked_button = UINT_MAX; @@ -718,7 +718,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_NS_FILE_LIST: @@ -769,13 +769,13 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { } } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_NS_FILE_LIST); this->vscroll2->SetCapacityFromWidget(this, WID_NS_AVAIL_LIST); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_NS_PRESET_LIST: @@ -824,7 +824,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { return pal; } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_NS_FILE_LIST: { @@ -913,7 +913,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { if (widget >= WID_NS_NEWGRF_TEXTFILE && widget < WID_NS_NEWGRF_TEXTFILE + TFT_END) { if (this->active_sel == NULL && this->avail_sel == NULL) return; @@ -1139,7 +1139,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { } } - virtual void OnNewGRFsScanned() + void OnNewGRFsScanned() override { if (this->active_sel == NULL) DeleteWindowByClass(WC_TEXTFILE); this->avail_sel = NULL; @@ -1148,7 +1148,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { this->DeleteChildWindows(WC_QUERY_STRING); // Remove the parameter query window } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { if (!this->editable) return; @@ -1167,7 +1167,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { this->InvalidateData(GOID_NEWGRF_PRESET_LOADED); } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (str == NULL) return; @@ -1190,7 +1190,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { * @param data Information about the changed data. @see GameOptionsInvalidationData * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; switch (data) { @@ -1296,7 +1296,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { this->SetWidgetDisabledState(WID_NS_PRESET_SAVE, has_missing); } - virtual EventState OnKeyPress(WChar key, uint16 keycode) + EventState OnKeyPress(WChar key, uint16 keycode) override { if (!this->editable) return ES_NOT_HANDLED; @@ -1348,7 +1348,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { return ES_HANDLED; } - virtual void OnEditboxChanged(int wid) + void OnEditboxChanged(int wid) override { if (!this->editable) return; @@ -1358,7 +1358,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { this->InvalidateData(0); } - virtual void OnDragDrop(Point pt, int widget) + void OnDragDrop(Point pt, int widget) override { if (!this->editable) return; @@ -1406,7 +1406,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { } } - virtual void OnMouseDrag(Point pt, int widget) + void OnMouseDrag(Point pt, int widget) override { if (!this->editable) return; @@ -1605,7 +1605,7 @@ public: this->editable = true; // Temporary setting, 'real' value is set in SetupSmallestSize(). } - virtual void SetupSmallestSize(Window *w, bool init_array) + void SetupSmallestSize(Window *w, bool init_array) override { /* Copy state flag from the window. */ assert(dynamic_cast(w) != NULL); @@ -1648,7 +1648,7 @@ public: this->smallest_y = ComputeMaxSize(min_acs_height, this->smallest_y + this->resize_y - 1, this->resize_y); } - virtual void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl) + void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl) override { this->StoreSizePosition(sizing, x, y, given_width, given_height); @@ -1767,7 +1767,7 @@ public: } } - virtual NWidgetCore *GetWidgetFromPos(int x, int y) + NWidgetCore *GetWidgetFromPos(int x, int y) override { if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return NULL; @@ -1777,7 +1777,7 @@ public: return nw; } - virtual void Draw(const Window *w) + void Draw(const Window *w) override { if (this->editable) this->avs->Draw(w); this->acs->Draw(w); @@ -2074,7 +2074,7 @@ struct SavePresetWindow : public Window { { } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_SVP_PRESET_LIST: { @@ -2091,7 +2091,7 @@ struct SavePresetWindow : public Window { } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_SVP_PRESET_LIST: { @@ -2115,7 +2115,7 @@ struct SavePresetWindow : public Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_SVP_PRESET_LIST: { @@ -2142,7 +2142,7 @@ struct SavePresetWindow : public Window { } } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_SVP_PRESET_LIST); } @@ -2197,7 +2197,7 @@ struct ScanProgressWindow : public Window { free(last_name); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_SP_PROGRESS_BAR: { @@ -2220,7 +2220,7 @@ struct ScanProgressWindow : public Window { } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_SP_PROGRESS_BAR: { diff --git a/src/news_gui.cpp b/src/news_gui.cpp index b79418c899..59c75eb514 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -308,13 +308,13 @@ struct NewsWindow : Window { GfxFillRect(r.left, r.bottom, r.right, r.bottom, PC_BLACK); } - virtual Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) + Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) override { Point pt = { 0, _screen.height }; return pt; } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { StringID str = STR_NULL; switch (widget) { @@ -365,12 +365,12 @@ struct NewsWindow : Window { *size = maxdim(*size, d); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget == WID_N_DATE) SetDParam(0, this->ni->date); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_N_CAPTION: @@ -427,7 +427,7 @@ struct NewsWindow : Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_N_CLOSEBOX: @@ -466,7 +466,7 @@ struct NewsWindow : Window { } } - virtual EventState OnKeyPress(WChar key, uint16 keycode) + EventState OnKeyPress(WChar key, uint16 keycode) override { if (keycode == WKC_SPACE) { /* Don't continue. */ @@ -481,7 +481,7 @@ struct NewsWindow : Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; /* The chatbar has notified us that is was either created or closed */ @@ -490,7 +490,7 @@ struct NewsWindow : Window { this->SetWindowTop(newtop); } - virtual void OnRealtimeTick(uint delta_ms) + void OnRealtimeTick(uint delta_ms) override { int count = this->timer.CountElapsed(delta_ms); if (count > 0) { @@ -1024,7 +1024,7 @@ struct MessageHistoryWindow : Window { this->OnInvalidateData(0); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget == WID_MH_BACKGROUND) { this->line_height = FONT_HEIGHT_NORMAL + 2; @@ -1040,13 +1040,13 @@ struct MessageHistoryWindow : Window { } } - virtual void OnPaint() + void OnPaint() override { this->OnInvalidateData(0); this->DrawWidgets(); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_MH_BACKGROUND || _total_news == 0) return; @@ -1081,13 +1081,13 @@ struct MessageHistoryWindow : Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; this->vscroll->SetCount(_total_news); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { if (widget == WID_MH_BACKGROUND) { NewsItem *ni = _latest_news; @@ -1102,7 +1102,7 @@ struct MessageHistoryWindow : Window { } } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_MH_BACKGROUND); } diff --git a/src/object_gui.cpp b/src/object_gui.cpp index 8aabcfdc46..6684566f15 100644 --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -99,7 +99,7 @@ public: this->GetWidget(WID_BO_OBJECT_MATRIX)->SetCount(4); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_BO_OBJECT_NAME: { @@ -120,7 +120,7 @@ public: } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_BO_CLASS_LIST: { @@ -210,7 +210,7 @@ public: } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (GB(widget, 0, 16)) { case WID_BO_CLASS_LIST: { @@ -382,12 +382,12 @@ public: this->SetDirty(); } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_BO_CLASS_LIST); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (GB(widget, 0, 16)) { case WID_BO_CLASS_LIST: { @@ -415,13 +415,13 @@ public: } } - virtual void OnPlaceObject(Point pt, TileIndex tile) + void OnPlaceObject(Point pt, TileIndex tile) override { DoCommandP(tile, ObjectClass::Get(_selected_object_class)->GetSpec(_selected_object_index)->Index(), _selected_object_view, CMD_BUILD_OBJECT | CMD_MSG(STR_ERROR_CAN_T_BUILD_OBJECT), CcTerraform); } - virtual void OnPlaceObjectAbort() + void OnPlaceObjectAbort() override { this->UpdateButtons(_selected_object_class, -1, _selected_object_view); } diff --git a/src/order_gui.cpp b/src/order_gui.cpp index e50247e275..612c1ba81c 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -798,7 +798,7 @@ public: this->OnInvalidateData(VIWD_MODIFY_ORDERS); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_O_ORDER_LIST: @@ -835,7 +835,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { VehicleOrderID from = INVALID_VEH_ORDER_ID; VehicleOrderID to = INVALID_VEH_ORDER_ID; @@ -1070,7 +1070,7 @@ public: this->SetDirty(); } - virtual void OnPaint() + void OnPaint() override { if (this->vehicle->owner != _local_company) { this->selected_order = -1; // Disable selection any selected row at a competitor order window. @@ -1080,7 +1080,7 @@ public: this->DrawWidgets(); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_O_ORDER_LIST) return; @@ -1138,7 +1138,7 @@ public: } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_O_COND_VALUE: { @@ -1159,7 +1159,7 @@ public: } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_O_ORDER_LIST: { @@ -1324,7 +1324,7 @@ public: } } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (!StrEmpty(str)) { VehicleOrderID sel = this->OrderGetSel(); @@ -1347,7 +1347,7 @@ public: } } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { switch (widget) { case WID_O_NON_STOP: @@ -1390,7 +1390,7 @@ public: } } - virtual void OnDragDrop(Point pt, int widget) + void OnDragDrop(Point pt, int widget) override { switch (widget) { case WID_O_ORDER_LIST: { @@ -1423,7 +1423,7 @@ public: } } - virtual EventState OnHotkey(int hotkey) + EventState OnHotkey(int hotkey) override { if (this->vehicle->owner != _local_company) return ES_NOT_HANDLED; @@ -1444,7 +1444,7 @@ public: return ES_HANDLED; } - virtual void OnPlaceObject(Point pt, TileIndex tile) + void OnPlaceObject(Point pt, TileIndex tile) override { if (this->goto_type == OPOS_GOTO) { const Order cmd = GetOrderCmdFromTile(this->vehicle, tile); @@ -1457,7 +1457,7 @@ public: } } - virtual bool OnVehicleSelect(const Vehicle *v) + bool OnVehicleSelect(const Vehicle *v) override { /* v is vehicle getting orders. Only copy/clone orders if vehicle doesn't have any orders yet. * We disallow copying orders of other vehicles if we already have at least one order entry @@ -1475,7 +1475,7 @@ public: return true; } - virtual void OnPlaceObjectAbort() + void OnPlaceObjectAbort() override { this->goto_type = OPOS_NONE; this->SetWidgetDirty(WID_O_GOTO); @@ -1487,7 +1487,7 @@ public: } } - virtual void OnMouseDrag(Point pt, int widget) + void OnMouseDrag(Point pt, int widget) override { if (this->selected_order != -1 && widget == WID_O_ORDER_LIST) { /* An order is dragged.. */ @@ -1507,7 +1507,7 @@ public: } } - virtual void OnResize() + void OnResize() override { /* Update the scroll bar */ this->vscroll->SetCapacityFromWidget(this, WID_O_ORDER_LIST); diff --git a/src/osk_gui.cpp b/src/osk_gui.cpp index dc069d1686..de8be373ec 100644 --- a/src/osk_gui.cpp +++ b/src/osk_gui.cpp @@ -94,12 +94,12 @@ struct OskWindow : public Window { this->SetWidgetLoweredState(WID_OSK_CAPS, HasBit(_keystate, KEYS_CAPS)); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget == WID_OSK_CAPTION) SetDParam(0, this->caption); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget < WID_OSK_LETTERS) return; @@ -110,7 +110,7 @@ struct OskWindow : public Window { TC_BLACK); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { /* clicked a letter */ if (widget >= WID_OSK_LETTERS) { @@ -192,21 +192,21 @@ struct OskWindow : public Window { } } - virtual void OnEditboxChanged(int widget) + void OnEditboxChanged(int widget) override { this->SetWidgetDirty(WID_OSK_TEXT); this->parent->OnEditboxChanged(this->text_btn); this->parent->SetWidgetDirty(this->text_btn); } - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; this->SetWidgetDirty(WID_OSK_TEXT); this->parent->SetWidgetDirty(this->text_btn); } - virtual void OnFocusLost() + void OnFocusLost() override { VideoDriver::GetInstance()->EditBoxLostFocus(); delete this; diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index d0789f337c..a26cc99028 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -440,7 +440,7 @@ struct BuildRailToolbarWindow : Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; @@ -507,7 +507,7 @@ struct BuildRailToolbarWindow : Window { } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget == WID_RAT_CAPTION) { const RailtypeInfo *rti = GetRailTypeInfo(this->railtype); @@ -521,7 +521,7 @@ struct BuildRailToolbarWindow : Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { if (widget < WID_RAT_BUILD_NS) return; @@ -613,13 +613,13 @@ struct BuildRailToolbarWindow : Window { if (_ctrl_pressed) RailToolbar_CtrlChanged(this); } - virtual EventState OnHotkey(int hotkey) + EventState OnHotkey(int hotkey) override { MarkTileDirtyByTile(TileVirtXY(_thd.pos.x, _thd.pos.y)); // redraw tile selection return Window::OnHotkey(hotkey); } - virtual void OnPlaceObject(Point pt, TileIndex tile) + void OnPlaceObject(Point pt, TileIndex tile) override { switch (this->last_user_action) { case WID_RAT_BUILD_NS: @@ -680,7 +680,7 @@ struct BuildRailToolbarWindow : Window { } } - virtual void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt) + void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt) override { /* no dragging if you have pressed the convert button */ if (FindWindowById(WC_BUILD_SIGNAL, 0) != NULL && _convert_signal_button && this->IsWidgetLowered(WID_RAT_BUILD_SIGNALS)) return; @@ -688,7 +688,7 @@ struct BuildRailToolbarWindow : Window { VpSelectTilesWithMethod(pt.x, pt.y, select_method); } - virtual void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile) + void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile) override { if (pt.x != -1) { switch (select_proc) { @@ -741,7 +741,7 @@ struct BuildRailToolbarWindow : Window { } } - virtual void OnPlaceObjectAbort() + void OnPlaceObjectAbort() override { this->RaiseButtons(); this->DisableWidget(WID_RAT_REMOVE); @@ -755,13 +755,13 @@ struct BuildRailToolbarWindow : Window { DeleteWindowByClass(WC_BUILD_BRIDGE); } - virtual void OnPlacePresize(Point pt, TileIndex tile) + void OnPlacePresize(Point pt, TileIndex tile) override { DoCommand(tile, _cur_railtype | (TRANSPORT_RAIL << 8), 0, DC_AUTO, CMD_BUILD_TUNNEL); VpSetPresizeRange(tile, _build_tunnel_endtile == 0 ? tile : _build_tunnel_endtile); } - virtual EventState OnCTRLStateChange() + EventState OnCTRLStateChange() override { /* do not toggle Remove button by Ctrl when placing station */ if (!this->IsWidgetLowered(WID_RAT_BUILD_STATION) && !this->IsWidgetLowered(WID_RAT_BUILD_WAYPOINT) && RailToolbar_CtrlChanged(this)) return ES_HANDLED; @@ -996,7 +996,7 @@ public: DeleteWindowById(WC_SELECT_STATION, 0); } - virtual void OnPaint() + void OnPaint() override { bool newstations = _railstation.newstations; const StationSpec *statspec = newstations ? StationClass::Get(_railstation.station_class)->GetSpec(_railstation.station_type) : NULL; @@ -1047,7 +1047,7 @@ public: } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_BRAS_NEWST_LIST: { @@ -1104,7 +1104,7 @@ public: } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { DrawPixelInfo tmp_dpi; @@ -1178,14 +1178,14 @@ public: } } - virtual void OnResize() + void OnResize() override { if (this->vscroll != NULL) { // New stations available. this->vscroll->SetCapacityFromWidget(this, WID_BRAS_NEWST_LIST); } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget == WID_BRAS_SHOW_NEWST_TYPE) { const StationSpec *statspec = StationClass::Get(_railstation.station_class)->GetSpec(_railstation.station_type); @@ -1193,7 +1193,7 @@ public: } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (GB(widget, 0, 16)) { case WID_BRAS_PLATFORM_DIR_X: @@ -1369,7 +1369,7 @@ public: } } - virtual void OnRealtimeTick(uint delta_ms) + void OnRealtimeTick(uint delta_ms) override { CheckRedrawStationCoverage(this); } @@ -1523,7 +1523,7 @@ public: _convert_signal_button = false; } - virtual void OnInit() + void OnInit() override { /* Calculate maximum signal sprite size. */ this->sig_sprite_size.width = 0; @@ -1543,7 +1543,7 @@ public: } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget == WID_BS_DRAG_SIGNALS_DENSITY_LABEL) { /* Two digits for signals density. */ @@ -1554,7 +1554,7 @@ public: } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_BS_DRAG_SIGNALS_DENSITY_LABEL: @@ -1563,7 +1563,7 @@ public: } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (IsInsideMM(widget, WID_BS_SEMAPHORE_NORM, WID_BS_ELECTRIC_PBS_OWAY + 1)) { /* Extract signal from widget number. */ @@ -1575,7 +1575,7 @@ public: } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_BS_SEMAPHORE_NORM: @@ -1632,7 +1632,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; this->LowerWidget((_cur_signal_variant == SIG_ELECTRIC ? WID_BS_ELECTRIC_NORM : WID_BS_SEMAPHORE_NORM) + _cur_signal_type); @@ -1704,7 +1704,7 @@ struct BuildRailDepotWindow : public PickerWindowBase { this->LowerWidget(_build_depot_direction + WID_BRAD_DEPOT_NE); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (!IsInsideMM(widget, WID_BRAD_DEPOT_NE, WID_BRAD_DEPOT_NW + 1)) return; @@ -1712,14 +1712,14 @@ struct BuildRailDepotWindow : public PickerWindowBase { size->height = ScaleGUITrad(48) + 2; } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (!IsInsideMM(widget, WID_BRAD_DEPOT_NE, WID_BRAD_DEPOT_NW + 1)) return; DrawTrainDepotSprite(r.left + 1 + ScaleGUITrad(31), r.bottom - ScaleGUITrad(31), widget - WID_BRAD_DEPOT_NE + DIAGDIR_NE, _cur_railtype); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_BRAD_DEPOT_NE: @@ -1793,7 +1793,7 @@ struct BuildRailWaypointWindow : PickerWindowBase { matrix->SetClicked(_cur_waypoint_type); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_BRW_WAYPOINT_MATRIX: @@ -1812,7 +1812,7 @@ struct BuildRailWaypointWindow : PickerWindowBase { } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (GB(widget, 0, 16)) { case WID_BRW_WAYPOINT: { @@ -1827,7 +1827,7 @@ struct BuildRailWaypointWindow : PickerWindowBase { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (GB(widget, 0, 16)) { case WID_BRW_WAYPOINT: { diff --git a/src/road_gui.cpp b/src/road_gui.cpp index e3091ec8af..40212e8fb9 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -335,7 +335,7 @@ struct BuildRoadToolbarWindow : Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; @@ -403,7 +403,7 @@ struct BuildRoadToolbarWindow : Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { _remove_button_clicked = false; _one_way_button_clicked = false; @@ -483,13 +483,13 @@ struct BuildRoadToolbarWindow : Window { if (_ctrl_pressed) RoadToolbar_CtrlChanged(this); } - virtual EventState OnHotkey(int hotkey) + EventState OnHotkey(int hotkey) override { MarkTileDirtyByTile(TileVirtXY(_thd.pos.x, _thd.pos.y)); // redraw tile selection return Window::OnHotkey(hotkey); } - virtual void OnPlaceObject(Point pt, TileIndex tile) + void OnPlaceObject(Point pt, TileIndex tile) override { _remove_button_clicked = this->IsWidgetLowered(WID_ROT_REMOVE); _one_way_button_clicked = this->IsWidgetLowered(WID_ROT_ONE_WAY); @@ -543,7 +543,7 @@ struct BuildRoadToolbarWindow : Window { } } - virtual void OnPlaceObjectAbort() + void OnPlaceObjectAbort() override { this->RaiseButtons(); this->SetWidgetsDisabledState(true, @@ -560,7 +560,7 @@ struct BuildRoadToolbarWindow : Window { DeleteWindowByClass(WC_BUILD_BRIDGE); } - virtual void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt) + void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt) override { /* Here we update the end tile flags * of the road placement actions. @@ -603,7 +603,7 @@ struct BuildRoadToolbarWindow : Window { VpSelectTilesWithMethod(pt.x, pt.y, select_method); } - virtual void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile) + void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile) override { if (pt.x != -1) { switch (select_proc) { @@ -659,13 +659,13 @@ struct BuildRoadToolbarWindow : Window { } } - virtual void OnPlacePresize(Point pt, TileIndex tile) + void OnPlacePresize(Point pt, TileIndex tile) override { DoCommand(tile, RoadTypeToRoadTypes(_cur_roadtype) | (TRANSPORT_ROAD << 8), 0, DC_AUTO, CMD_BUILD_TUNNEL); VpSetPresizeRange(tile, _build_tunnel_endtile == 0 ? tile : _build_tunnel_endtile); } - virtual EventState OnCTRLStateChange() + EventState OnCTRLStateChange() override { if (RoadToolbar_CtrlChanged(this)) return ES_HANDLED; return ES_NOT_HANDLED; @@ -874,7 +874,7 @@ struct BuildRoadDepotWindow : public PickerWindowBase { this->FinishInitNested(TRANSPORT_ROAD); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (!IsInsideMM(widget, WID_BROD_DEPOT_NE, WID_BROD_DEPOT_NW + 1)) return; @@ -882,14 +882,14 @@ struct BuildRoadDepotWindow : public PickerWindowBase { size->height = ScaleGUITrad(48) + 2; } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (!IsInsideMM(widget, WID_BROD_DEPOT_NE, WID_BROD_DEPOT_NW + 1)) return; DrawRoadDepotSprite(r.left + 1 + ScaleGUITrad(31), r.bottom - ScaleGUITrad(31), (DiagDirection)(widget - WID_BROD_DEPOT_NE + DIAGDIR_NE), _cur_roadtype); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_BROD_DEPOT_NW: @@ -979,7 +979,7 @@ struct BuildRoadStationWindow : public PickerWindowBase { DeleteWindowById(WC_SELECT_STATION, 0); } - virtual void OnPaint() + void OnPaint() override { this->DrawWidgets(); @@ -1006,7 +1006,7 @@ struct BuildRoadStationWindow : public PickerWindowBase { } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (!IsInsideMM(widget, WID_BROS_STATION_NE, WID_BROS_STATION_Y + 1)) return; @@ -1014,7 +1014,7 @@ struct BuildRoadStationWindow : public PickerWindowBase { size->height = ScaleGUITrad(48) + 2; } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (!IsInsideMM(widget, WID_BROS_STATION_NE, WID_BROS_STATION_Y + 1)) return; @@ -1022,7 +1022,7 @@ struct BuildRoadStationWindow : public PickerWindowBase { StationPickerDrawSprite(r.left + 1 + ScaleGUITrad(31), r.bottom - ScaleGUITrad(31), st, INVALID_RAILTYPE, widget < WID_BROS_STATION_X ? ROADTYPE_ROAD : _cur_roadtype, widget - WID_BROS_STATION_NE); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_BROS_STATION_NE: @@ -1053,7 +1053,7 @@ struct BuildRoadStationWindow : public PickerWindowBase { } } - virtual void OnRealtimeTick(uint delta_ms) + void OnRealtimeTick(uint delta_ms) override { CheckRedrawStationCoverage(this); } diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index c92701f0dd..fda7cfa52c 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -339,7 +339,7 @@ struct GameOptionsWindow : Window { return list; } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_GO_CURRENCY_DROPDOWN: SetDParam(0, _currency_specs[this->opt->locale.currency].name); break; @@ -358,7 +358,7 @@ struct GameOptionsWindow : Window { } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_GO_BASE_GRF_DESCRIPTION: @@ -378,7 +378,7 @@ struct GameOptionsWindow : Window { } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_GO_BASE_GRF_DESCRIPTION: @@ -445,7 +445,7 @@ struct GameOptionsWindow : Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { if (widget >= WID_GO_BASE_GRF_TEXTFILE && widget < WID_GO_BASE_GRF_TEXTFILE + TFT_END) { if (BaseGraphics::GetUsedSet() == NULL) return; @@ -508,7 +508,7 @@ struct GameOptionsWindow : Window { } } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { switch (widget) { case WID_GO_CURRENCY_DROPDOWN: // Currency @@ -587,7 +587,7 @@ struct GameOptionsWindow : Window { * @param data Information about the changed data. @see GameOptionsInvalidationData * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; this->SetWidgetLoweredState(WID_GO_FULLSCREEN_BUTTON, _fullscreen); @@ -1858,7 +1858,7 @@ struct GameSettingsWindow : Window { this->InvalidateData(); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_GS_OPTIONSPANEL: @@ -1893,7 +1893,7 @@ struct GameSettingsWindow : Window { } } - virtual void OnPaint() + void OnPaint() override { if (this->closing_dropdown) { this->closing_dropdown = false; @@ -1934,7 +1934,7 @@ struct GameSettingsWindow : Window { } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_GS_RESTRICT_DROPDOWN: @@ -1979,7 +1979,7 @@ struct GameSettingsWindow : Window { return list; } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_GS_OPTIONSPANEL: { @@ -2029,7 +2029,7 @@ struct GameSettingsWindow : Window { this->last_clicked = pe; } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_GS_EXPAND_ALL: @@ -2212,7 +2212,7 @@ struct GameSettingsWindow : Window { } } - virtual void OnTimeout() + void OnTimeout() override { if (this->clicked_entry != NULL) { // On timeout, release any depressed buttons this->clicked_entry->SetButtons(0); @@ -2221,7 +2221,7 @@ struct GameSettingsWindow : Window { } } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { /* The user pressed cancel */ if (str == NULL) return; @@ -2247,7 +2247,7 @@ struct GameSettingsWindow : Window { this->SetDirty(); } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { switch (widget) { case WID_GS_RESTRICT_DROPDOWN: @@ -2291,7 +2291,7 @@ struct GameSettingsWindow : Window { } } - virtual void OnDropdownClose(Point pt, int widget, int index, bool instant_close) + void OnDropdownClose(Point pt, int widget, int index, bool instant_close) override { if (widget >= 0) { /* Normally the default implementation of OnDropdownClose() takes care of @@ -2310,7 +2310,7 @@ struct GameSettingsWindow : Window { } } - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; @@ -2340,7 +2340,7 @@ struct GameSettingsWindow : Window { this->SetWidgetDisabledState(WID_GS_COLLAPSE_ALL, all_folded); } - virtual void OnEditboxChanged(int wid) + void OnEditboxChanged(int wid) override { if (wid == WID_GS_FILTER) { this->filter.string.SetFilterTerm(this->filter_editbox.text.buf); @@ -2353,7 +2353,7 @@ struct GameSettingsWindow : Window { } } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_GS_OPTIONSPANEL, SETTINGTREE_TOP_OFFSET + SETTINGTREE_BOTTOM_OFFSET); } @@ -2497,7 +2497,7 @@ struct CustomCurrencyWindow : Window { this->SetWidgetDisabledState(WID_CC_YEAR_UP, _custom_currency.to_euro == MAX_YEAR); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_CC_RATE: SetDParam(0, 1); SetDParam(1, 1); break; @@ -2515,7 +2515,7 @@ struct CustomCurrencyWindow : Window { } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { /* Set the appropriate width for the edit 'buttons' */ @@ -2534,7 +2534,7 @@ struct CustomCurrencyWindow : Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { int line = 0; int len = 0; @@ -2616,7 +2616,7 @@ struct CustomCurrencyWindow : Window { this->SetDirty(); } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (str == NULL) return; @@ -2648,7 +2648,7 @@ struct CustomCurrencyWindow : Window { SetButtonState(); } - virtual void OnTimeout() + void OnTimeout() override { this->SetDirty(); } diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index 56af6e6655..5e752da522 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -166,7 +166,7 @@ struct SignListWindow : Window, SignList { this->BuildSortSignList(); } - virtual void OnInit() + void OnInit() override { /* Default sign name, used if Sign::name is NULL. */ GetString(SignList::default_name, STR_DEFAULT_SIGN_NAME, lastof(SignList::default_name)); @@ -190,13 +190,13 @@ struct SignListWindow : Window, SignList { this->InvalidateData(); } - virtual void OnPaint() + void OnPaint() override { if (!this->IsShaded() && this->signs.NeedRebuild()) this->BuildSortSignList(); this->DrawWidgets(); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_SIL_LIST: { @@ -228,12 +228,12 @@ struct SignListWindow : Window, SignList { } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget == WID_SIL_CAPTION) SetDParam(0, this->vscroll->GetCount()); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_SIL_LIST: { @@ -260,12 +260,12 @@ struct SignListWindow : Window, SignList { } } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_SIL_LIST, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_SIL_LIST: { @@ -286,7 +286,7 @@ struct SignListWindow : Window, SignList { } } - virtual EventState OnHotkey(int hotkey) + EventState OnHotkey(int hotkey) override { switch (hotkey) { case SLHK_FOCUS_FILTER_BOX: @@ -301,7 +301,7 @@ struct SignListWindow : Window, SignList { return ES_HANDLED; } - virtual void OnEditboxChanged(int widget) + void OnEditboxChanged(int widget) override { if (widget == WID_SIL_FILTER_TEXT) this->SetFilterString(this->filter_editbox.text.buf); } @@ -316,7 +316,7 @@ struct SignListWindow : Window, SignList { this->SortSignsList(); } - virtual void OnHundredthTick() + void OnHundredthTick() override { this->BuildSortSignList(); this->SetDirty(); @@ -327,7 +327,7 @@ struct SignListWindow : Window, SignList { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { /* When there is a filter string, we always need to rebuild the list even if * the amount of signs in total is unchanged, as the subset of signs that is @@ -482,7 +482,7 @@ struct SignWindow : Window, SignList { return this->signs[next ? 0 : this->signs.Length() - 1]; } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_QES_CAPTION: @@ -491,7 +491,7 @@ struct SignWindow : Window, SignList { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_QES_PREVIOUS: diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 97d01325a0..41848cdf0e 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -1685,7 +1685,7 @@ public: this->smallmap_window = NULL; } - virtual void SetupSmallestSize(Window *w, bool init_array) + void SetupSmallestSize(Window *w, bool init_array) override { NWidgetBase *display = this->head; NWidgetBase *bar = display->next; @@ -1703,7 +1703,7 @@ public: this->resize_y = min(display->resize_y, bar->resize_y); } - virtual void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl) + void AssignSizePosition(SizingType sizing, uint x, uint y, uint given_width, uint given_height, bool rtl) override { this->pos_x = x; this->pos_y = y; @@ -1727,7 +1727,7 @@ public: bar->AssignSizePosition(ST_RESIZE, x, y + display_height, given_width, bar_height, rtl); } - virtual NWidgetCore *GetWidgetFromPos(int x, int y) + NWidgetCore *GetWidgetFromPos(int x, int y) override { if (!IsInsideBS(x, this->pos_x, this->current_x) || !IsInsideBS(y, this->pos_y, this->current_y)) return NULL; for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) { @@ -1737,7 +1737,7 @@ public: return NULL; } - virtual void Draw(const Window *w) + void Draw(const Window *w) override { for (NWidgetBase *child_wid = this->head; child_wid != NULL; child_wid = child_wid->next) child_wid->Draw(w); } diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 5c2e06070b..ef434c4ffc 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -337,7 +337,7 @@ public: this->last_sorting = this->stations.GetListing(); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_STL_SORTBY: { @@ -393,7 +393,7 @@ public: } } - virtual void OnPaint() + void OnPaint() override { this->BuildStationsList((Owner)this->window_number); this->SortStationsList(); @@ -401,7 +401,7 @@ public: this->DrawWidgets(); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_STL_SORTBY: @@ -485,7 +485,7 @@ public: } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget == WID_STL_CAPTION) { SetDParam(0, this->window_number); @@ -493,7 +493,7 @@ public: } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_STL_LIST: { @@ -609,7 +609,7 @@ public: } } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { if (this->stations.SortType() != index) { this->stations.SetSortType(index); @@ -621,7 +621,7 @@ public: } } - virtual void OnGameTick() + void OnGameTick() override { if (this->stations.NeedResort()) { DEBUG(misc, 3, "Periodic rebuild station list company %d", this->window_number); @@ -629,7 +629,7 @@ public: } } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_STL_LIST, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM); } @@ -639,7 +639,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (data == 0) { /* This needs to be done in command-scope to enforce rebuilding before resorting invalid data */ @@ -1361,7 +1361,7 @@ struct StationViewWindow : public Window { data->Update(count); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_SV_WAITING: @@ -1385,7 +1385,7 @@ struct StationViewWindow : public Window { } } - virtual void OnPaint() + void OnPaint() override { const Station *st = Station::Get(this->window_number); CargoDataEntry cargo; @@ -1441,7 +1441,7 @@ struct StationViewWindow : public Window { } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { const Station *st = Station::Get(this->window_number); SetDParam(0, st->index); @@ -1876,7 +1876,7 @@ struct StationViewWindow : public Window { this->SetWidgetDirty(WID_SV_WAITING); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_SV_WAITING: @@ -2037,7 +2037,7 @@ struct StationViewWindow : public Window { this->SetDirty(); } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { if (widget == WID_SV_SORT_BY) { this->SelectSortBy(index); @@ -2046,14 +2046,14 @@ struct StationViewWindow : public Window { } } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (str == NULL) return; DoCommandP(0, this->window_number, 0, CMD_RENAME_STATION | CMD_MSG(STR_ERROR_CAN_T_RENAME_STATION), NULL, str); } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_SV_WAITING, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM); } @@ -2063,7 +2063,7 @@ struct StationViewWindow : public Window { * @param data Information about the changed data. If it's a valid cargo ID, invalidate the cargo data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (gui_scope) { if (data >= 0 && data < NUM_CARGO) { @@ -2249,7 +2249,7 @@ struct SelectStationWindow : Window { this->OnInvalidateData(0); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget != WID_JS_PANEL) return; @@ -2269,7 +2269,7 @@ struct SelectStationWindow : Window { *size = d; } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_JS_PANEL) return; @@ -2290,7 +2290,7 @@ struct SelectStationWindow : Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { if (widget != WID_JS_PANEL) return; @@ -2311,7 +2311,7 @@ struct SelectStationWindow : Window { DeleteWindowById(WC_SELECT_STATION, 0); } - virtual void OnRealtimeTick(uint delta_ms) + void OnRealtimeTick(uint delta_ms) override { if (_thd.dirty & 2) { _thd.dirty &= ~2; @@ -2319,7 +2319,7 @@ struct SelectStationWindow : Window { } } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_JS_PANEL, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM); } @@ -2329,7 +2329,7 @@ struct SelectStationWindow : Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; FindStationsNearby(this->area, true); diff --git a/src/statusbar_gui.cpp b/src/statusbar_gui.cpp index 88ba495f34..281b4eb98a 100644 --- a/src/statusbar_gui.cpp +++ b/src/statusbar_gui.cpp @@ -99,18 +99,18 @@ struct StatusBarWindow : Window { PositionStatusbar(this); } - virtual Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) + Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) override { Point pt = { 0, _screen.height - sm_height }; return pt; } - virtual void FindWindowPlacementAndResize(int def_width, int def_height) + void FindWindowPlacementAndResize(int def_width, int def_height) override { Window::FindWindowPlacementAndResize(_toolbar_width, def_height); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { Dimension d; switch (widget) { @@ -137,7 +137,7 @@ struct StatusBarWindow : Window { *size = maxdim(d, *size); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_S_LEFT: @@ -195,7 +195,7 @@ struct StatusBarWindow : Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; switch (data) { @@ -211,7 +211,7 @@ struct StatusBarWindow : Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_S_MIDDLE: ShowLastNewsMessage(); break; @@ -220,7 +220,7 @@ struct StatusBarWindow : Window { } } - virtual void OnRealtimeTick(uint delta_ms) + void OnRealtimeTick(uint delta_ms) override { if (_pause_mode != PM_UNPAUSED) return; diff --git a/src/story_gui.cpp b/src/story_gui.cpp index 003843310e..8b12207e3f 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -463,7 +463,7 @@ public: } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_SB_SEL_PAGE: { @@ -482,7 +482,7 @@ public: } } - virtual void OnPaint() + void OnPaint() override { /* Detect if content has changed height. This can happen if a * multi-line text contains eg. {COMPANY} and that company is @@ -497,7 +497,7 @@ public: this->DrawWidgets(); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_SB_PAGE_PANEL) return; @@ -563,7 +563,7 @@ public: _cur_dpi = old_dpi; } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget != WID_SB_SEL_PAGE && widget != WID_SB_PAGE_PANEL) return; @@ -606,13 +606,13 @@ public: } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_SB_PAGE_PANEL, WD_FRAMETEXT_TOP + WD_FRAMETEXT_BOTTOM); this->vscroll->SetCount(this->GetContentHeight()); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_SB_SEL_PAGE: { @@ -667,7 +667,7 @@ public: } } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { if (widget != WID_SB_SEL_PAGE) return; @@ -682,7 +682,7 @@ public: * >= 0 Id of the page that needs to be refreshed. If it is not the current page, nothing happens. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; diff --git a/src/subsidy_gui.cpp b/src/subsidy_gui.cpp index 04e5ae262b..e71b62f94f 100644 --- a/src/subsidy_gui.cpp +++ b/src/subsidy_gui.cpp @@ -38,7 +38,7 @@ struct SubsidyListWindow : Window { this->OnInvalidateData(0); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { if (widget != WID_SUL_PANEL) return; @@ -129,7 +129,7 @@ struct SubsidyListWindow : Window { return 3 + num_awarded + num_not_awarded; } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget != WID_SUL_PANEL) return; Dimension d = maxdim(GetStringBoundingBox(STR_SUBSIDIES_OFFERED_TITLE), GetStringBoundingBox(STR_SUBSIDIES_SUBSIDISED_TITLE)); @@ -142,7 +142,7 @@ struct SubsidyListWindow : Window { *size = maxdim(*size, d); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_SUL_PANEL) return; @@ -207,7 +207,7 @@ struct SubsidyListWindow : Window { } } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_SUL_PANEL); } @@ -217,7 +217,7 @@ struct SubsidyListWindow : Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; this->vscroll->SetCount(this->CountLines()); diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp index 97749a8dcc..a699170409 100644 --- a/src/terraform_gui.cpp +++ b/src/terraform_gui.cpp @@ -165,14 +165,14 @@ struct TerraformToolbarWindow : Window { { } - virtual void OnInit() + void OnInit() override { /* Don't show the place object button when there are no objects to place. */ NWidgetStacked *show_object = this->GetWidget(WID_TT_SHOW_PLACE_OBJECT); show_object->SetDisplayedPlane(ObjectClass::GetUIClassCount() != 0 ? 0 : SZSP_NONE); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { if (widget < WID_TT_BUTTONS_START) return; @@ -219,7 +219,7 @@ struct TerraformToolbarWindow : Window { } } - virtual void OnPlaceObject(Point pt, TileIndex tile) + void OnPlaceObject(Point pt, TileIndex tile) override { switch (this->last_user_action) { case WID_TT_LOWER_LAND: // Lower land button @@ -250,19 +250,19 @@ struct TerraformToolbarWindow : Window { } } - virtual void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt) + void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt) override { VpSelectTilesWithMethod(pt.x, pt.y, select_method); } - virtual Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) + Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) override { Point pt = GetToolbarAlignedWindowPosition(sm_width); pt.y += sm_height; return pt; } - virtual void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile) + void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile) override { if (pt.x != -1) { switch (select_proc) { @@ -277,7 +277,7 @@ struct TerraformToolbarWindow : Window { } } - virtual void OnPlaceObjectAbort() + void OnPlaceObjectAbort() override { this->RaiseButtons(); } @@ -538,7 +538,7 @@ struct ScenarioEditorLandscapeGenerationWindow : Window { this->last_user_action = WIDGET_LIST_END; } - virtual void OnPaint() + void OnPaint() override { this->DrawWidgets(); @@ -547,7 +547,7 @@ struct ScenarioEditorLandscapeGenerationWindow : Window { } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget != WID_ETT_DOTS) return; @@ -555,7 +555,7 @@ struct ScenarioEditorLandscapeGenerationWindow : Window { size->height = max(size->height, ScaleGUITrad(31)); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_ETT_DOTS) return; @@ -572,7 +572,7 @@ struct ScenarioEditorLandscapeGenerationWindow : Window { } while (--n); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { if (widget < WID_ETT_BUTTONS_START) return; @@ -638,7 +638,7 @@ struct ScenarioEditorLandscapeGenerationWindow : Window { } } - virtual void OnTimeout() + void OnTimeout() override { for (uint i = WID_ETT_START; i < this->nested_array_size; i++) { if (i == WID_ETT_BUTTONS_START) i = WID_ETT_BUTTONS_END; // skip the buttons @@ -649,7 +649,7 @@ struct ScenarioEditorLandscapeGenerationWindow : Window { } } - virtual void OnPlaceObject(Point pt, TileIndex tile) + void OnPlaceObject(Point pt, TileIndex tile) override { switch (this->last_user_action) { case WID_ETT_DEMOLISH: // Demolish aka dynamite button @@ -680,12 +680,12 @@ struct ScenarioEditorLandscapeGenerationWindow : Window { } } - virtual void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt) + void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt) override { VpSelectTilesWithMethod(pt.x, pt.y, select_method); } - virtual void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile) + void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile) override { if (pt.x != -1) { switch (select_proc) { @@ -702,7 +702,7 @@ struct ScenarioEditorLandscapeGenerationWindow : Window { } } - virtual void OnPlaceObjectAbort() + void OnPlaceObjectAbort() override { this->RaiseButtons(); this->SetDirty(); diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp index 5dd45561f3..8280c0e892 100644 --- a/src/timetable_gui.cpp +++ b/src/timetable_gui.cpp @@ -189,7 +189,7 @@ struct TimetableWindow : Window { return (travelling && v->lateness_counter < 0); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_VT_ARRIVAL_DEPARTURE_PANEL: @@ -227,7 +227,7 @@ struct TimetableWindow : Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { switch (data) { case VIWD_AUTOREPLACE: @@ -297,7 +297,7 @@ struct TimetableWindow : Window { } - virtual void OnPaint() + void OnPaint() override { const Vehicle *v = this->vehicle; int selected = this->sel_index; @@ -341,7 +341,7 @@ struct TimetableWindow : Window { this->DrawWidgets(); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_VT_CAPTION: SetDParam(0, this->vehicle->index); break; @@ -349,7 +349,7 @@ struct TimetableWindow : Window { } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { const Vehicle *v = this->vehicle; int selected = this->sel_index; @@ -513,7 +513,7 @@ struct TimetableWindow : Window { return v->index | (order_number << 20) | (mtf << 28); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { const Vehicle *v = this->vehicle; @@ -614,7 +614,7 @@ struct TimetableWindow : Window { this->SetDirty(); } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (str == NULL) return; @@ -634,7 +634,7 @@ struct TimetableWindow : Window { DoCommandP(0, p1, p2, CMD_CHANGE_TIMETABLE | CMD_MSG(STR_ERROR_CAN_T_TIMETABLE_VEHICLE)); } - virtual void OnResize() + void OnResize() override { /* Update the scroll bar */ this->vscroll->SetCapacityFromWidget(this, WID_VT_TIMETABLE_PANEL, WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM); diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index c3555f107a..7052dc4e2f 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -1997,12 +1997,12 @@ struct MainToolbarWindow : Window { this->timer.SetInterval(MILLISECONDS_PER_TICK); } - virtual void FindWindowPlacementAndResize(int def_width, int def_height) + void FindWindowPlacementAndResize(int def_width, int def_height) override { Window::FindWindowPlacementAndResize(_toolbar_width, def_height); } - virtual void OnPaint() + void OnPaint() override { /* If spectator, disable all construction buttons * ie : Build road, rail, ships, airports and landscaping @@ -2020,18 +2020,18 @@ struct MainToolbarWindow : Window { this->DrawWidgets(); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { if (_game_mode != GM_MENU && !this->IsWidgetDisabled(widget)) _toolbar_button_procs[widget](this); } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { CallBackFunction cbf = _menu_clicked_procs[widget](index); if (cbf != CBF_NONE) _last_started_action = cbf; } - virtual EventState OnHotkey(int hotkey) + EventState OnHotkey(int hotkey) override { switch (hotkey) { case MTHK_PAUSE: ToolbarPauseClick(this); break; @@ -2077,7 +2077,7 @@ struct MainToolbarWindow : Window { return ES_HANDLED; } - virtual void OnPlaceObject(Point pt, TileIndex tile) + void OnPlaceObject(Point pt, TileIndex tile) override { switch (_last_started_action) { case CBF_PLACE_SIGN: @@ -2092,12 +2092,12 @@ struct MainToolbarWindow : Window { } } - virtual void OnPlaceObjectAbort() + void OnPlaceObjectAbort() override { _last_started_action = CBF_NONE; } - virtual void OnRealtimeTick(uint delta_ms) + void OnRealtimeTick(uint delta_ms) override { if (!this->timer.Elapsed(delta_ms)) return; this->timer.SetInterval(MILLISECONDS_PER_TICK); @@ -2113,7 +2113,7 @@ struct MainToolbarWindow : Window { } } - virtual void OnTimeout() + void OnTimeout() override { /* We do not want to automatically raise the pause, fast forward and * switchbar buttons; they have to stay down when pressed etc. */ @@ -2130,7 +2130,7 @@ struct MainToolbarWindow : Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; if (FindWindowById(WC_MAIN_WINDOW, 0) != NULL) HandleZoomMessage(this, FindWindowById(WC_MAIN_WINDOW, 0)->viewport, WID_TN_ZOOM_IN, WID_TN_ZOOM_OUT); @@ -2330,12 +2330,12 @@ struct ScenarioEditorToolbarWindow : Window { this->timer.SetInterval(MILLISECONDS_PER_TICK); } - virtual void FindWindowPlacementAndResize(int def_width, int def_height) + void FindWindowPlacementAndResize(int def_width, int def_height) override { Window::FindWindowPlacementAndResize(_toolbar_width, def_height); } - virtual void OnPaint() + void OnPaint() override { this->SetWidgetDisabledState(WID_TE_DATE_BACKWARD, _settings_game.game_creation.starting_year <= MIN_YEAR); this->SetWidgetDisabledState(WID_TE_DATE_FORWARD, _settings_game.game_creation.starting_year >= MAX_YEAR); @@ -2343,7 +2343,7 @@ struct ScenarioEditorToolbarWindow : Window { this->DrawWidgets(); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_TE_DATE: @@ -2364,7 +2364,7 @@ struct ScenarioEditorToolbarWindow : Window { } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_TE_SPACER: @@ -2379,14 +2379,14 @@ struct ScenarioEditorToolbarWindow : Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { if (_game_mode == GM_MENU) return; CallBackFunction cbf = _scen_toolbar_button_procs[widget](this); if (cbf != CBF_NONE) _last_started_action = cbf; } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { /* The map button is in a different location on the scenario * editor toolbar, so we need to adjust for it. */ @@ -2396,7 +2396,7 @@ struct ScenarioEditorToolbarWindow : Window { if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); } - virtual EventState OnHotkey(int hotkey) + EventState OnHotkey(int hotkey) override { CallBackFunction cbf = CBF_NONE; switch (hotkey) { @@ -2428,7 +2428,7 @@ struct ScenarioEditorToolbarWindow : Window { return ES_HANDLED; } - virtual void OnPlaceObject(Point pt, TileIndex tile) + void OnPlaceObject(Point pt, TileIndex tile) override { switch (_last_started_action) { case CBF_PLACE_SIGN: @@ -2443,19 +2443,19 @@ struct ScenarioEditorToolbarWindow : Window { } } - virtual void OnPlaceObjectAbort() + void OnPlaceObjectAbort() override { _last_started_action = CBF_NONE; } - virtual void OnTimeout() + void OnTimeout() override { this->SetWidgetsLoweredState(false, WID_TE_DATE_BACKWARD, WID_TE_DATE_FORWARD, WIDGET_LIST_END); this->SetWidgetDirty(WID_TE_DATE_BACKWARD); this->SetWidgetDirty(WID_TE_DATE_FORWARD); } - virtual void OnRealtimeTick(uint delta_ms) + void OnRealtimeTick(uint delta_ms) override { if (!this->timer.Elapsed(delta_ms)) return; this->timer.SetInterval(MILLISECONDS_PER_TICK); @@ -2476,13 +2476,13 @@ struct ScenarioEditorToolbarWindow : Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; if (FindWindowById(WC_MAIN_WINDOW, 0) != NULL) HandleZoomMessage(this, FindWindowById(WC_MAIN_WINDOW, 0)->viewport, WID_TE_ZOOM_IN, WID_TE_ZOOM_OUT); } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { /* Was 'cancel' pressed? */ if (str == NULL) return; diff --git a/src/town_gui.cpp b/src/town_gui.cpp index bc322b08f2..18b767ebca 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -99,7 +99,7 @@ public: this->vscroll->SetCapacity((this->GetWidget(WID_TA_COMMAND_LIST)->current_y - WD_FRAMERECT_TOP - WD_FRAMERECT_BOTTOM) / FONT_HEIGHT_NORMAL); } - virtual void OnPaint() + void OnPaint() override { int numact; uint buttons = GetMaskOfTownActions(&numact, _local_company, this->town); @@ -180,12 +180,12 @@ public: } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget == WID_TA_CAPTION) SetDParam(0, this->window_number); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_TA_ACTION_INFO: @@ -220,7 +220,7 @@ public: } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_TA_ACTION_INFO: { @@ -254,7 +254,7 @@ public: } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_TA_COMMAND_LIST: { @@ -277,7 +277,7 @@ public: } } - virtual void OnHundredthTick() + void OnHundredthTick() override { this->SetDirty(); } @@ -321,12 +321,12 @@ public: this->SetWidgetDisabledState(WID_TV_CHANGE_NAME, _networking && !_network_server); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget == WID_TV_CAPTION) SetDParam(0, this->town->index); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_TV_INFO) return; @@ -412,7 +412,7 @@ public: } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_TV_CENTER_VIEW: // scroll to location @@ -451,7 +451,7 @@ public: } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_TV_INFO: @@ -501,7 +501,7 @@ public: } } - virtual void OnResize() + void OnResize() override { if (this->viewport != NULL) { NWidgetViewport *nvp = this->GetWidget(WID_TV_VIEWPORT); @@ -516,7 +516,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; /* Called when setting station noise or required cargoes have changed, in order to resize the window */ @@ -524,7 +524,7 @@ public: this->ResizeWindowAsNeeded(); } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (str == NULL) return; @@ -733,7 +733,7 @@ public: this->FinishInitNested(0); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_TD_WORLD_POPULATION: @@ -756,7 +756,7 @@ public: return t->larger_town ? STR_TOWN_DIRECTORY_CITY : STR_TOWN_DIRECTORY_TOWN; } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_TD_SORT_ORDER: @@ -804,7 +804,7 @@ public: } } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_TD_SORT_ORDER: { @@ -856,7 +856,7 @@ public: } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_TD_SORT_ORDER: // Click on sort order button @@ -893,7 +893,7 @@ public: } } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { if (widget != WID_TD_SORT_CRITERIA) return; @@ -904,19 +904,19 @@ public: } } - virtual void OnPaint() + void OnPaint() override { if (this->towns.NeedRebuild()) this->BuildSortTownList(); this->DrawWidgets(); } - virtual void OnHundredthTick() + void OnHundredthTick() override { this->BuildSortTownList(); this->SetDirty(); } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_TD_LIST); } @@ -926,7 +926,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (data == 0) { /* This needs to be done in command-scope to enforce rebuilding before resorting invalid data */ @@ -1129,7 +1129,7 @@ public: if (success && !_shift_pressed) this->RandomTownName(); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_TF_NEW_TOWN: @@ -1174,12 +1174,12 @@ public: } } - virtual void OnPlaceObject(Point pt, TileIndex tile) + void OnPlaceObject(Point pt, TileIndex tile) override { this->ExecuteFoundTownCommand(tile, false, STR_ERROR_CAN_T_FOUND_TOWN_HERE, CcFoundTown); } - virtual void OnPlaceObjectAbort() + void OnPlaceObjectAbort() override { this->RaiseButtons(); this->UpdateButtons(false); @@ -1190,7 +1190,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; this->UpdateButtons(true); diff --git a/src/transparency_gui.cpp b/src/transparency_gui.cpp index 4bad2b0561..c396b52f5e 100644 --- a/src/transparency_gui.cpp +++ b/src/transparency_gui.cpp @@ -35,13 +35,13 @@ public: this->InitNested(window_number); } - virtual void OnPaint() + void OnPaint() override { this->OnInvalidateData(0); // Must be sure that the widgets show the transparency variable changes, also when we use shortcuts. this->DrawWidgets(); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_TT_SIGNS: @@ -69,7 +69,7 @@ public: } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { if (widget >= WID_TT_BEGIN && widget < WID_TT_END) { if (_ctrl_pressed) { @@ -104,7 +104,7 @@ public: } } - virtual Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) + Point OnInitialPosition(int16 sm_width, int16 sm_height, int window_number) override { Point pt = GetToolbarAlignedWindowPosition(sm_width); pt.y += 2 * (sm_height - this->GetWidget(WID_TT_BUTTONS)->current_y); @@ -116,7 +116,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; for (uint i = WID_TT_BEGIN; i < WID_TT_END; i++) { diff --git a/src/tree_gui.cpp b/src/tree_gui.cpp index f21eeaef2e..1b1dce95ac 100644 --- a/src/tree_gui.cpp +++ b/src/tree_gui.cpp @@ -84,7 +84,7 @@ public: return size; } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { if (widget >= WID_BT_TYPE_11 && widget <= WID_BT_TYPE_34) { Dimension d = GetMaxTreeSpriteSize(); @@ -102,7 +102,7 @@ public: } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget < WID_BT_TYPE_11 || widget > WID_BT_TYPE_34 || widget - WID_BT_TYPE_11 >= this->count) return; @@ -111,7 +111,7 @@ public: DrawSprite(tree_sprites[i].sprite, tree_sprites[i].pal, (r.left + r.right) / 2 + WD_FRAMERECT_LEFT, r.bottom - 7); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_BT_TYPE_11: case WID_BT_TYPE_12: case WID_BT_TYPE_13: case WID_BT_TYPE_14: @@ -138,17 +138,17 @@ public: } } - virtual void OnPlaceObject(Point pt, TileIndex tile) + void OnPlaceObject(Point pt, TileIndex tile) override { VpStartPlaceSizing(tile, VPM_X_AND_Y, DDSP_PLANT_TREES); } - virtual void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt) + void OnPlaceDrag(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt) override { VpSelectTilesWithMethod(pt.x, pt.y, select_method); } - virtual void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile) + void OnPlaceMouseUp(ViewportPlaceMethod select_method, ViewportDragDropSelectionProcess select_proc, Point pt, TileIndex start_tile, TileIndex end_tile) override { if (pt.x != -1 && select_proc == DDSP_PLANT_TREES) { DoCommandP(end_tile, this->tree_to_plant, start_tile, @@ -159,13 +159,13 @@ public: /** * Initialize the window data */ - virtual void OnInit() + void OnInit() override { this->base = _tree_base_by_landscape[_settings_game.game_creation.landscape]; this->count = _tree_count_by_landscape[_settings_game.game_creation.landscape]; } - virtual void OnPlaceObjectAbort() + void OnPlaceObjectAbort() override { this->RaiseButtons(); } diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 777716c646..f4e7665893 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -605,7 +605,7 @@ struct RefitWindow : public Window { this->SetWidgetDisabledState(WID_VR_REFIT, this->sel[0] < 0); } - virtual void OnInit() + void OnInit() override { if (this->cargo != NULL) { /* Store the RefitOption currently in use. */ @@ -635,7 +635,7 @@ struct RefitWindow : public Window { } } - virtual void OnPaint() + void OnPaint() override { /* Determine amount of items for scroller. */ if (this->hscroll != NULL) this->hscroll->SetCount(this->vehicle_width); @@ -656,7 +656,7 @@ struct RefitWindow : public Window { this->DrawWidgets(); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_VR_MATRIX: @@ -674,7 +674,7 @@ struct RefitWindow : public Window { } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget == WID_VR_CAPTION) SetDParam(0, Vehicle::Get(this->window_number)->index); } @@ -726,7 +726,7 @@ struct RefitWindow : public Window { } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_VR_VEHICLE_PANEL_DISPLAY: { @@ -808,7 +808,7 @@ struct RefitWindow : public Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { switch (data) { case VIWD_AUTOREPLACE: // Autoreplace replaced the vehicle; selected_vehicle became invalid. @@ -916,7 +916,7 @@ struct RefitWindow : public Window { } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_VR_VEHICLE_PANEL_DISPLAY: { // Vehicle image. @@ -958,7 +958,7 @@ struct RefitWindow : public Window { } } - virtual void OnMouseDrag(Point pt, int widget) + void OnMouseDrag(Point pt, int widget) override { switch (widget) { case WID_VR_VEHICLE_PANEL_DISPLAY: { // Vehicle image. @@ -971,7 +971,7 @@ struct RefitWindow : public Window { } } - virtual void OnDragDrop(Point pt, int widget) + void OnDragDrop(Point pt, int widget) override { switch (widget) { case WID_VR_VEHICLE_PANEL_DISPLAY: { // Vehicle image. @@ -984,7 +984,7 @@ struct RefitWindow : public Window { } } - virtual void OnResize() + void OnResize() override { this->vehicle_width = GetVehicleWidth(Vehicle::Get(this->window_number), EIT_IN_DETAILS); this->vscroll->SetCapacityFromWidget(this, WID_VR_MATRIX); @@ -1485,7 +1485,7 @@ public: *this->sorting = this->vehicles.GetListing(); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_VL_LIST: @@ -1522,7 +1522,7 @@ public: } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_VL_AVAILABLE_VEHICLES: @@ -1565,7 +1565,7 @@ public: } } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { switch (widget) { case WID_VL_SORT_ORDER: @@ -1579,7 +1579,7 @@ public: } } - virtual void OnPaint() + void OnPaint() override { this->BuildVehicleList(); this->SortVehicleList(); @@ -1611,7 +1611,7 @@ public: this->DrawWidgets(); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_VL_SORT_ORDER: // Flip sorting method ascending/descending @@ -1650,7 +1650,7 @@ public: } } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { switch (widget) { case WID_VL_SORT_BY_PULLDOWN: @@ -1676,7 +1676,7 @@ public: this->SetDirty(); } - virtual void OnGameTick() + void OnGameTick() override { if (this->vehicles.NeedResort()) { StationID station = (this->vli.type == VL_STATION_LIST) ? this->vli.index : INVALID_STATION; @@ -1686,7 +1686,7 @@ public: } } - virtual void OnResize() + void OnResize() override { this->vscroll->SetCapacityFromWidget(this, WID_VL_LIST); } @@ -1696,7 +1696,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope && HasBit(data, 31) && this->vli.type == VL_SHARED_ORDERS) { /* Needs to be done in command-scope, so everything stays valid */ @@ -1886,7 +1886,7 @@ struct VehicleDetailsWindow : Window { * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (data == VIWD_AUTOREPLACE) { /* Autoreplace replaced the vehicle. @@ -1926,7 +1926,7 @@ struct VehicleDetailsWindow : Window { return desired_height; } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { switch (widget) { case WID_VD_TOP_DETAILS: { @@ -2030,12 +2030,12 @@ struct VehicleDetailsWindow : Window { } } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget == WID_VD_CAPTION) SetDParam(0, Vehicle::Get(this->window_number)->index); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { const Vehicle *v = Vehicle::Get(this->window_number); @@ -2133,7 +2133,7 @@ struct VehicleDetailsWindow : Window { } /** Repaint vehicle details window. */ - virtual void OnPaint() + void OnPaint() override { const Vehicle *v = Vehicle::Get(this->window_number); @@ -2158,7 +2158,7 @@ struct VehicleDetailsWindow : Window { this->DrawWidgets(); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_VD_RENAME_VEHICLE: { // rename @@ -2206,7 +2206,7 @@ struct VehicleDetailsWindow : Window { } } - virtual void OnDropdownSelect(int widget, int index) + void OnDropdownSelect(int widget, int index) override { switch (widget) { case WID_VD_SERVICE_INTERVAL_DROPDOWN: { @@ -2220,14 +2220,14 @@ struct VehicleDetailsWindow : Window { } } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (str == NULL) return; DoCommandP(0, this->window_number, 0, CMD_RENAME_VEHICLE | CMD_MSG(STR_ERROR_CAN_T_RENAME_TRAIN + Vehicle::Get(this->window_number)->type), NULL, str); } - virtual void OnResize() + void OnResize() override { NWidgetCore *nwi = this->GetWidget(WID_VD_MATRIX); if (nwi != NULL) { @@ -2515,7 +2515,7 @@ public: DeleteWindowById(WC_VEHICLE_TIMETABLE, this->window_number, false); } - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { const Vehicle *v = Vehicle::Get(this->window_number); switch (widget) { @@ -2537,7 +2537,7 @@ public: } } - virtual void OnPaint() + void OnPaint() override { const Vehicle *v = Vehicle::Get(this->window_number); bool is_localcompany = v->owner == _local_company; @@ -2556,7 +2556,7 @@ public: this->DrawWidgets(); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget != WID_VV_CAPTION) return; @@ -2564,7 +2564,7 @@ public: SetDParam(0, v->index); } - virtual void DrawWidget(const Rect &r, int widget) const + void DrawWidget(const Rect &r, int widget) const override { if (widget != WID_VV_START_STOP) return; @@ -2663,7 +2663,7 @@ public: DrawString(text_left + lowered, text_right + lowered, r.top + WD_FRAMERECT_TOP + lowered, str, TC_FROMSTRING, SA_HOR_CENTER); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { const Vehicle *v = Vehicle::Get(this->window_number); @@ -2726,7 +2726,7 @@ public: } } - virtual void OnResize() + void OnResize() override { if (this->viewport != NULL) { NWidgetViewport *nvp = this->GetWidget(WID_VV_VIEWPORT); @@ -2764,7 +2764,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (data == VIWD_AUTOREPLACE) { /* Autoreplace replaced the vehicle. @@ -2775,12 +2775,12 @@ public: this->UpdateButtonStatus(); } - virtual bool IsNewGRFInspectable() const + bool IsNewGRFInspectable() const override { return ::IsNewGRFInspectable(GetGrfSpecFeature(Vehicle::Get(this->window_number)->type), this->window_number); } - virtual void ShowNewGRFInspectWindow() const + void ShowNewGRFInspectWindow() const override { ::ShowNewGRFInspectWindow(GetGrfSpecFeature(Vehicle::Get(this->window_number)->type), this->window_number); } diff --git a/src/viewport_gui.cpp b/src/viewport_gui.cpp index 9c89a85f84..936990ac5b 100644 --- a/src/viewport_gui.cpp +++ b/src/viewport_gui.cpp @@ -80,7 +80,7 @@ public: this->viewport->dest_scrollpos_y = this->viewport->scrollpos_y; } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { switch (widget) { case WID_EV_CAPTION: @@ -90,7 +90,7 @@ public: } } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_EV_ZOOM_IN: DoZoomInOutWindow(ZOOM_IN, this); break; @@ -120,7 +120,7 @@ public: } } - virtual void OnResize() + void OnResize() override { if (this->viewport != NULL) { NWidgetViewport *nvp = this->GetWidget(WID_EV_VIEWPORT); @@ -128,7 +128,7 @@ public: } } - virtual void OnScroll(Point delta) + void OnScroll(Point delta) override { this->viewport->scrollpos_x += ScaleByZoom(delta.x, this->viewport->zoom); this->viewport->scrollpos_y += ScaleByZoom(delta.y, this->viewport->zoom); @@ -136,7 +136,7 @@ public: this->viewport->dest_scrollpos_y = this->viewport->scrollpos_y; } - virtual void OnMouseWheel(int wheel) + void OnMouseWheel(int wheel) override { if (_settings_client.gui.scrollwheel_scrolling != 2) { ZoomInOrOutToCursorWindow(wheel < 0, this); @@ -148,7 +148,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; /* Only handle zoom message if intended for us (msg ZOOM_IN/ZOOM_OUT) */ diff --git a/src/waypoint_gui.cpp b/src/waypoint_gui.cpp index fa4deaac68..5dd57c080d 100644 --- a/src/waypoint_gui.cpp +++ b/src/waypoint_gui.cpp @@ -81,12 +81,12 @@ public: DeleteWindowById(GetWindowClassForVehicleType(this->vt), VehicleListIdentifier(VL_STATION_LIST, this->vt, this->owner, this->window_number).Pack(), false); } - virtual void SetStringParameters(int widget) const + void SetStringParameters(int widget) const override { if (widget == WID_W_CAPTION) SetDParam(0, this->wp->index); } - virtual void OnClick(Point pt, int widget, int click_count) + void OnClick(Point pt, int widget, int click_count) override { switch (widget) { case WID_W_CENTER_VIEW: // scroll to location @@ -113,7 +113,7 @@ public: * @param data Information about the changed data. * @param gui_scope Whether the call is done from GUI scope. You may not do everything when not in GUI scope. See #InvalidateWindowData() for details. */ - virtual void OnInvalidateData(int data = 0, bool gui_scope = true) + void OnInvalidateData(int data = 0, bool gui_scope = true) override { if (!gui_scope) return; /* You can only change your own waypoints */ @@ -124,7 +124,7 @@ public: ScrollWindowToTile(this->GetCenterTile(), this, true); } - virtual void OnResize() + void OnResize() override { if (this->viewport != NULL) { NWidgetViewport *nvp = this->GetWidget(WID_W_VIEWPORT); @@ -135,7 +135,7 @@ public: } } - virtual void OnQueryTextFinished(char *str) + void OnQueryTextFinished(char *str) override { if (str == NULL) return; From 76e77aefada54d1a0dbf7e4b7fb12a9c5f3cb838 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 24 Mar 2019 00:12:31 +0000 Subject: [PATCH 529/622] Fix #7400: Water class for tree tiles was not converted for old saves preventing industry creation. As the information is always available from the tree ground type, unconditionally update the map array for tree tiles. --- src/saveload/afterload.cpp | 7 +++++++ src/tree_map.h | 1 + 2 files changed, 8 insertions(+) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 6f32c5506f..f940632654 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -3111,6 +3111,13 @@ bool AfterLoadGame() FOR_ALL_INDUSTRIES(ind) if (ind->neutral_station != NULL) ind->neutral_station->industry = ind; } + { + /* Update water class for trees for all current savegame versions. */ + for (TileIndex t = 0; t < map_size; t++) { + if (IsTileType(t, MP_TREES)) SetWaterClass(t, GetTreeGround(t) == TREE_GROUND_SHORE ? WATER_CLASS_SEA : WATER_CLASS_INVALID); + } + } + /* Compute station catchment areas. This is needed here in case UpdateStationAcceptance is called below. */ Station::RecomputeCatchmentForAll(); diff --git a/src/tree_map.h b/src/tree_map.h index df9fd441cc..bd1567b54c 100644 --- a/src/tree_map.h +++ b/src/tree_map.h @@ -277,6 +277,7 @@ static inline void MakeTree(TileIndex t, TreeType type, uint count, uint growth, { SetTileType(t, MP_TREES); SetTileOwner(t, OWNER_NONE); + SetWaterClass(t, ground == TREE_GROUND_SHORE ? WATER_CLASS_SEA : WATER_CLASS_INVALID); _m[t].m2 = ground << 6 | density << 4 | 0; _m[t].m3 = type; _m[t].m4 = 0 << 5 | 0 << 2; From f6264e5212575e63f02cb0741e7188ff0d154fac Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 24 Mar 2019 14:54:13 +0000 Subject: [PATCH 530/622] Change: Bump savegame version for tree tile water class conversion. --- src/saveload/afterload.cpp | 4 ++-- src/saveload/saveload.h | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index f940632654..6ec4ab67c9 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -3111,8 +3111,8 @@ bool AfterLoadGame() FOR_ALL_INDUSTRIES(ind) if (ind->neutral_station != NULL) ind->neutral_station->industry = ind; } - { - /* Update water class for trees for all current savegame versions. */ + if (IsSavegameVersionBefore(SLV_TREES_WATER_CLASS)) { + /* Update water class for trees. */ for (TileIndex t = 0; t < map_size; t++) { if (IsTileType(t, MP_TREES)) SetWaterClass(t, GetTreeGround(t) == TREE_GROUND_SHORE ? WATER_CLASS_SEA : WATER_CLASS_INVALID); } diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 61d5273401..07d45fafdb 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -297,6 +297,7 @@ enum SaveLoadVersion : uint16 { SLV_SERVE_NEUTRAL_INDUSTRIES, ///< 210 PR#7234 Company stations can serve industries with attached neutral stations. SLV_ROADVEH_PATH_CACHE, ///< 211 PR#7261 Add path cache for road vehicles. SLV_REMOVE_OPF, ///< 212 PR#7245 Remove OPF. + SLV_TREES_WATER_CLASS, ///< 213 PR#7405 WaterClass update for tree tiles. SL_MAX_VERSION, ///< Highest possible saveload version }; From d54b6ac09b6fe88c09f7886739fe9c05f16b8222 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Thu, 28 Feb 2019 21:32:08 +0000 Subject: [PATCH 531/622] Feature: When filtering purchase list by cargo type, make buy button perform a refit if required. --- src/autoreplace_cmd.cpp | 2 +- src/build_vehicle_gui.cpp | 36 ++++++++++++--- src/lang/english.txt | 10 +++++ src/script/api/script_vehicle.cpp | 2 +- src/vehicle_cmd.cpp | 73 ++++++++++++++++++++++--------- 5 files changed, 95 insertions(+), 28 deletions(-) diff --git a/src/autoreplace_cmd.cpp b/src/autoreplace_cmd.cpp index 95568e3811..7a8a7fefd8 100644 --- a/src/autoreplace_cmd.cpp +++ b/src/autoreplace_cmd.cpp @@ -294,7 +294,7 @@ static CommandCost BuildReplacementVehicle(Vehicle *old_veh, Vehicle **new_vehic if (refit_cargo == CT_INVALID) return CommandCost(); // incompatible cargoes /* Build the new vehicle */ - cost = DoCommand(old_veh->tile, e, 0, DC_EXEC | DC_AUTOREPLACE, GetCmdBuildVeh(old_veh)); + cost = DoCommand(old_veh->tile, e | (CT_INVALID << 24), 0, DC_EXEC | DC_AUTOREPLACE, GetCmdBuildVeh(old_veh)); if (cost.Failed()) return cost; Vehicle *new_veh = Vehicle::Get(_new_vehicle_id); diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 77c175ee7b..94353382b8 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -989,6 +989,22 @@ struct BuildVehicleWindow : Window { int details_height; ///< Minimal needed height of the details panels (found so far). Scrollbar *vscroll; + void SetBuyVehicleText() + { + NWidgetCore *widget = this->GetWidget(WID_BV_BUILD); + + bool refit = this->sel_engine != INVALID_ENGINE && this->cargo_filter[this->cargo_filter_criteria] != CF_ANY && this->cargo_filter[this->cargo_filter_criteria] != CF_NONE; + if (refit) refit = Engine::Get(this->sel_engine)->GetDefaultCargoType() != this->cargo_filter[this->cargo_filter_criteria]; + + if (refit) { + widget->widget_data = STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON + this->vehicle_type; + widget->tool_tip = STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP + this->vehicle_type; + } else { + widget->widget_data = STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON + this->vehicle_type; + widget->tool_tip = STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP + this->vehicle_type; + } + } + BuildVehicleWindow(WindowDesc *desc, TileIndex tile, VehicleType type) : Window(desc) { this->vehicle_type = type; @@ -1031,10 +1047,6 @@ struct BuildVehicleWindow : Window { widget = this->GetWidget(WID_BV_SHOW_HIDE); widget->tool_tip = STR_BUY_VEHICLE_TRAIN_HIDE_SHOW_TOGGLE_TOOLTIP + type; - widget = this->GetWidget(WID_BV_BUILD); - widget->widget_data = STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON + type; - widget->tool_tip = STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP + type; - widget = this->GetWidget(WID_BV_RENAME); widget->widget_data = STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON + type; widget->tool_tip = STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP + type; @@ -1054,6 +1066,7 @@ struct BuildVehicleWindow : Window { this->GenerateBuildList(); // generate the list, since we need it in the next line /* Select the first engine in the list as default when opening the window */ if (this->eng_list.Length() > 0) this->sel_engine = this->eng_list[0]; + this->SetBuyVehicleText(); } /** Populate the filter list and set the cargo filter criteria. */ @@ -1111,8 +1124,10 @@ struct BuildVehicleWindow : Window { this->eng_list.Filter(this->cargo_filter[this->cargo_filter_criteria]); if (0 == this->eng_list.Length()) { // no engine passed through the filter, invalidate the previously selected engine this->sel_engine = INVALID_ENGINE; + this->SetBuyVehicleText(); } else if (!this->eng_list.Contains(this->sel_engine)) { // previously selected engine didn't pass the filter, select the first engine of the list this->sel_engine = this->eng_list[0]; + this->SetBuyVehicleText(); } } @@ -1294,6 +1309,7 @@ struct BuildVehicleWindow : Window { uint i = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_BV_LIST); size_t num_items = this->eng_list.Length(); this->sel_engine = (i < num_items) ? this->eng_list[i] : INVALID_ENGINE; + this->SetBuyVehicleText(); this->SetDirty(); if (_ctrl_pressed) { this->OnClick(pt, WID_BV_SHOW_HIDE, 1); @@ -1323,7 +1339,9 @@ struct BuildVehicleWindow : Window { EngineID sel_eng = this->sel_engine; if (sel_eng != INVALID_ENGINE) { CommandCallback *callback = (this->vehicle_type == VEH_TRAIN && RailVehInfo(sel_eng)->railveh_type == RAILVEH_WAGON) ? CcBuildWagon : CcBuildPrimaryVehicle; - DoCommandP(this->window_number, sel_eng, 0, GetCmdBuildVeh(this->vehicle_type), callback); + bool refit = this->cargo_filter[this->cargo_filter_criteria] != CF_ANY && this->cargo_filter[this->cargo_filter_criteria] != CF_NONE; + CargoID cargo = refit ? this->cargo_filter[this->cargo_filter_criteria] : CT_INVALID; + DoCommandP(this->window_number, sel_eng | (cargo << 24), 0, GetCmdBuildVeh(this->vehicle_type), callback); } break; } @@ -1411,6 +1429,13 @@ struct BuildVehicleWindow : Window { break; } + case WID_BV_BUILD: + *size = GetStringBoundingBox(STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON + this->vehicle_type); + *size = maxdim(*size, GetStringBoundingBox(STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON + this->vehicle_type)); + size->width += padding.width; + size->height += padding.height; + break; + case WID_BV_SHOW_HIDE: *size = GetStringBoundingBox(STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON + this->vehicle_type); *size = maxdim(*size, GetStringBoundingBox(STR_BUY_VEHICLE_TRAIN_SHOW_TOGGLE_BUTTON + this->vehicle_type)); @@ -1485,6 +1510,7 @@ struct BuildVehicleWindow : Window { /* deactivate filter if criteria is 'Show All', activate it otherwise */ this->eng_list.SetFilterState(this->cargo_filter[this->cargo_filter_criteria] != CF_ANY); this->eng_list.ForceRebuild(); + this->SetBuyVehicleText(); } break; } diff --git a/src/lang/english.txt b/src/lang/english.txt index 3661e74c30..86e045d067 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -3501,11 +3501,21 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Buy Vehi STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Buy Ship STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Buy Aircraft +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Buy and Refit Vehicle +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Buy and Refit Vehicle +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Buy and Refit Ship +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Buy and Refit Aircraft + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Buy the highlighted train vehicle. Shift+Click shows estimated cost without purchase STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Buy the highlighted road vehicle. Shift+Click shows estimated cost without purchase STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Buy the highlighted ship. Shift+Click shows estimated cost without purchase STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Buy the highlighted aircraft. Shift+Click shows estimated cost without purchase +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Buy and refit the highlighted train vehicle. Shift+Click shows estimated cost without purchase +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Buy and refit the highlighted road vehicle. Shift+Click shows estimated cost without purchase +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Buy and refit the highlighted ship. Shift+Click shows estimated cost without purchase +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Buy and refit the highlighted aircraft. Shift+Click shows estimated cost without purchase + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Rename STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Rename STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Rename diff --git a/src/script/api/script_vehicle.cpp b/src/script/api/script_vehicle.cpp index ca841f7557..ca05ec58f1 100644 --- a/src/script/api/script_vehicle.cpp +++ b/src/script/api/script_vehicle.cpp @@ -70,7 +70,7 @@ EnforcePreconditionCustomError(VEHICLE_INVALID, !ScriptGameSettings::IsDisabledVehicleType((ScriptVehicle::VehicleType)type), ScriptVehicle::ERR_VEHICLE_BUILD_DISABLED); - if (!ScriptObject::DoCommand(depot, engine_id, 0, ::GetCmdBuildVeh(type), NULL, &ScriptInstance::DoCommandReturnVehicleID)) return VEHICLE_INVALID; + if (!ScriptObject::DoCommand(depot, engine_id | (CT_INVALID << 24), 0, ::GetCmdBuildVeh(type), NULL, &ScriptInstance::DoCommandReturnVehicleID)) return VEHICLE_INVALID; /* In case of test-mode, we return VehicleID 0 */ return 0; diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 8284511dd4..345874e586 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -71,13 +71,16 @@ CommandCost CmdBuildRoadVehicle(TileIndex tile, DoCommandFlag flags, const Engin CommandCost CmdBuildShip (TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **v); CommandCost CmdBuildAircraft (TileIndex tile, DoCommandFlag flags, const Engine *e, uint16 data, Vehicle **v); +CommandCost CmdRefitVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text); + /** * Build a vehicle. * @param tile tile of depot where the vehicle is built * @param flags for command * @param p1 various bitstuffed data * bits 0-15: vehicle type being built. - * bits 16-31: vehicle type specific bits passed on to the vehicle build functions. + * bits 16-23: vehicle type specific bits passed on to the vehicle build functions. + * bits 24-31: refit cargo type. * @param p2 User * @param text unused * @return the cost of this operation or an error @@ -93,11 +96,18 @@ CommandCost CmdBuildVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint EngineID eid = GB(p1, 0, 16); if (!IsEngineBuildable(eid, type, _current_company)) return_cmd_error(STR_ERROR_RAIL_VEHICLE_NOT_AVAILABLE + type); + /* Validate the cargo type. */ + CargoID cargo = GB(p1, 24, 8); + if (cargo >= NUM_CARGO && cargo != CT_INVALID) return CMD_ERROR; + const Engine *e = Engine::Get(eid); CommandCost value(EXPENSES_NEW_VEHICLES, e->GetCost()); /* Engines without valid cargo should not be available */ - if (e->GetDefaultCargoType() == CT_INVALID) return CMD_ERROR; + CargoID default_cargo = e->GetDefaultCargoType(); + if (default_cargo == CT_INVALID) return CMD_ERROR; + + bool refitting = cargo != CT_INVALID && cargo != default_cargo; /* Check whether the number of vehicles we need to build can be built according to pool space. */ uint num_vehicles; @@ -116,32 +126,53 @@ CommandCost CmdBuildVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint UnitID unit_num = (flags & DC_AUTOREPLACE || (type == VEH_TRAIN && e->u.rail.railveh_type == RAILVEH_WAGON)) ? 0 : GetFreeUnitNumber(type); if (unit_num == UINT16_MAX) return_cmd_error(STR_ERROR_TOO_MANY_VEHICLES_IN_GAME); + /* If we are refitting we need to temporarily purchase the vehicle to be able to + * test it. */ + DoCommandFlag subflags = flags; + if (refitting) subflags |= DC_EXEC; + Vehicle *v; switch (type) { - case VEH_TRAIN: value.AddCost(CmdBuildRailVehicle(tile, flags, e, GB(p1, 16, 16), &v)); break; - case VEH_ROAD: value.AddCost(CmdBuildRoadVehicle(tile, flags, e, GB(p1, 16, 16), &v)); break; - case VEH_SHIP: value.AddCost(CmdBuildShip (tile, flags, e, GB(p1, 16, 16), &v)); break; - case VEH_AIRCRAFT: value.AddCost(CmdBuildAircraft (tile, flags, e, GB(p1, 16, 16), &v)); break; + case VEH_TRAIN: value.AddCost(CmdBuildRailVehicle(tile, subflags, e, GB(p1, 24, 8), &v)); break; + case VEH_ROAD: value.AddCost(CmdBuildRoadVehicle(tile, subflags, e, GB(p1, 24, 8), &v)); break; + case VEH_SHIP: value.AddCost(CmdBuildShip (tile, subflags, e, GB(p1, 24, 8), &v)); break; + case VEH_AIRCRAFT: value.AddCost(CmdBuildAircraft (tile, subflags, e, GB(p1, 24, 8), &v)); break; default: NOT_REACHED(); // Safe due to IsDepotTile() } - if (value.Succeeded() && flags & DC_EXEC) { - v->unitnumber = unit_num; - v->value = value.GetCost(); - - InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile); - InvalidateWindowClassesData(GetWindowClassForVehicleType(type), 0); - SetWindowDirty(WC_COMPANY, _current_company); - if (IsLocalCompany()) { - InvalidateAutoreplaceWindow(v->engine_type, v->group_id); // updates the auto replace window (must be called before incrementing num_engines) + if (value.Succeeded()) { + if (refitting || (flags & DC_EXEC)) { + v->unitnumber = unit_num; + v->value = value.GetCost(); } - GroupStatistics::CountEngine(v, 1); - GroupStatistics::UpdateAutoreplace(_current_company); + if (refitting) { + value.AddCost(CmdRefitVehicle(tile, flags, v->index, cargo, NULL)); + } - if (v->IsPrimaryVehicle()) { - GroupStatistics::CountVehicle(v, 1); - OrderBackup::Restore(v, p2); + if (flags & DC_EXEC) { + InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile); + InvalidateWindowClassesData(GetWindowClassForVehicleType(type), 0); + SetWindowDirty(WC_COMPANY, _current_company); + if (IsLocalCompany()) { + InvalidateAutoreplaceWindow(v->engine_type, v->group_id); // updates the auto replace window (must be called before incrementing num_engines) + } + } + + if (refitting || (flags & DC_EXEC)) { + GroupStatistics::CountEngine(v, 1); + GroupStatistics::UpdateAutoreplace(_current_company); + + if (v->IsPrimaryVehicle()) { + GroupStatistics::CountVehicle(v, 1); + OrderBackup::Restore(v, p2); + } + } + + + /* If we are not in DC_EXEC undo everything */ + if (refitting && (flags & DC_EXEC) == 0) { + DoCommand(0, v->index, 0, DC_EXEC, GetCmdSellVeh(v)); } } @@ -832,7 +863,7 @@ CommandCost CmdCloneVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint DoCommandFlag build_flags = flags; if ((flags & DC_EXEC) && !v->IsPrimaryVehicle()) build_flags |= DC_AUTOREPLACE; - CommandCost cost = DoCommand(tile, v->engine_type | (1 << 16), 0, build_flags, GetCmdBuildVeh(v)); + CommandCost cost = DoCommand(tile, v->engine_type | (1 << 16) | (CT_INVALID << 24), 0, build_flags, GetCmdBuildVeh(v)); if (cost.Failed()) { /* Can't build a part, then sell the stuff we already made; clear up the mess */ From f8e6cd10ef8161fbaa95a847a794e475d6aeb60e Mon Sep 17 00:00:00 2001 From: glx Date: Fri, 8 Mar 2019 19:52:22 +0100 Subject: [PATCH 532/622] Add: script API functions for build with refit feature --- bin/ai/regression/tst_regression/main.nut | 13 +++++++ bin/ai/regression/tst_regression/result.txt | 14 +++++++- src/script/api/ai/ai_vehicle.hpp.sq | 2 ++ src/script/api/game/game_vehicle.hpp.sq | 2 ++ src/script/api/script_vehicle.cpp | 29 +++++++++++++-- src/script/api/script_vehicle.hpp | 40 +++++++++++++++++++++ 6 files changed, 96 insertions(+), 4 deletions(-) diff --git a/bin/ai/regression/tst_regression/main.nut b/bin/ai/regression/tst_regression/main.nut index 7315f33f82..baece09d08 100644 --- a/bin/ai/regression/tst_regression/main.nut +++ b/bin/ai/regression/tst_regression/main.nut @@ -1704,6 +1704,19 @@ function Regression::Vehicle() print(" GetWagonEngineType(): " + AIVehicle.GetWagonEngineType(17 3)); print(" GetWagonAge(): " + AIVehicle.GetWagonAge(17, 3)); + print(" --Refit--"); + print(" GetBuildWithRefitCapacity(): " + AIVehicle.GetBuildWithRefitCapacity(28479, 211, 255)); + print(" GetBuildWithRefitCapacity(): " + AIVehicle.GetBuildWithRefitCapacity(28479, 211, 0)); + print(" GetBuildWithRefitCapacity(): " + AIVehicle.GetBuildWithRefitCapacity(28479, 211, 9)); + print(" BuildVehicleWithRefit(): " + AIVehicle.BuildVehicleWithRefit(28479, 211, 9)); + print(" GetCapacity(): " + AIVehicle.GetCapacity(20, 9)); + print(" GetCapacity(): " + AIVehicle.GetCapacity(20, 5)); + print(" GetRefitCapacity(): " + AIVehicle.GetRefitCapacity(20, 5)); + print(" RefitVehicle(): " + AIVehicle.RefitVehicle(20, 5)); + print(" GetCapacity(): " + AIVehicle.GetCapacity(20, 9)); + print(" GetCapacity(): " + AIVehicle.GetCapacity(20, 5)); + print(" SellVehicle(): " + AIVehicle.SellVehicle(20)); + print(" --Errors--"); print(" RefitVehicle(): " + AIVehicle.RefitVehicle(12, 0)); print(" GetLastErrorString(): " + AIError.GetLastErrorString()); diff --git a/bin/ai/regression/tst_regression/result.txt b/bin/ai/regression/tst_regression/result.txt index e93b2e2343..cda888d297 100644 --- a/bin/ai/regression/tst_regression/result.txt +++ b/bin/ai/regression/tst_regression/result.txt @@ -9128,6 +9128,18 @@ ERROR: IsEnd() is invalid as Begin() is never called GetWagonAge(): 0 GetWagonEngineType(): 65535 GetWagonAge(): -1 + --Refit-- + GetBuildWithRefitCapacity(): -1 + GetBuildWithRefitCapacity(): 0 + GetBuildWithRefitCapacity(): 160 + BuildVehicleWithRefit(): 20 + GetCapacity(): 160 + GetCapacity(): 0 + GetRefitCapacity(): 160 + RefitVehicle(): true + GetCapacity(): 0 + GetCapacity(): 160 + SellVehicle(): true --Errors-- RefitVehicle(): false GetLastErrorString(): ERR_VEHICLE_NOT_IN_DEPOT @@ -9175,7 +9187,7 @@ ERROR: IsEnd() is invalid as Begin() is never called 13 => 5489 12 => 5489 CurrentSpeed ListDump: - 12 => 21 + 12 => 27 17 => 0 16 => 0 14 => 0 diff --git a/src/script/api/ai/ai_vehicle.hpp.sq b/src/script/api/ai/ai_vehicle.hpp.sq index 0eb21ed672..dbd0096ada 100644 --- a/src/script/api/ai/ai_vehicle.hpp.sq +++ b/src/script/api/ai/ai_vehicle.hpp.sq @@ -122,6 +122,8 @@ void SQAIVehicle_Register(Squirrel *engine) SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::IsInDepot, "IsInDepot", 2, ".i"); SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::IsStoppedInDepot, "IsStoppedInDepot", 2, ".i"); SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::BuildVehicle, "BuildVehicle", 3, ".ii"); + SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::BuildVehicleWithRefit, "BuildVehicleWithRefit", 4, ".iii"); + SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetBuildWithRefitCapacity, "GetBuildWithRefitCapacity", 4, ".iii"); SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::CloneVehicle, "CloneVehicle", 4, ".iib"); SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::MoveWagon, "MoveWagon", 5, ".iiii"); SQAIVehicle.DefSQStaticMethod(engine, &ScriptVehicle::MoveWagonChain, "MoveWagonChain", 5, ".iiii"); diff --git a/src/script/api/game/game_vehicle.hpp.sq b/src/script/api/game/game_vehicle.hpp.sq index 3dc9fe67ad..15a007046e 100644 --- a/src/script/api/game/game_vehicle.hpp.sq +++ b/src/script/api/game/game_vehicle.hpp.sq @@ -123,6 +123,8 @@ void SQGSVehicle_Register(Squirrel *engine) SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::IsInDepot, "IsInDepot", 2, ".i"); SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::IsStoppedInDepot, "IsStoppedInDepot", 2, ".i"); SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::BuildVehicle, "BuildVehicle", 3, ".ii"); + SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::BuildVehicleWithRefit, "BuildVehicleWithRefit", 4, ".iii"); + SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::GetBuildWithRefitCapacity, "GetBuildWithRefitCapacity", 4, ".iii"); SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::CloneVehicle, "CloneVehicle", 4, ".iib"); SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::MoveWagon, "MoveWagon", 5, ".iiii"); SQGSVehicle.DefSQStaticMethod(engine, &ScriptVehicle::MoveWagonChain, "MoveWagonChain", 5, ".iiii"); diff --git a/src/script/api/script_vehicle.cpp b/src/script/api/script_vehicle.cpp index ca05ec58f1..46fae0a917 100644 --- a/src/script/api/script_vehicle.cpp +++ b/src/script/api/script_vehicle.cpp @@ -61,21 +61,44 @@ return v->IsGroundVehicle() ? v->GetGroundVehicleCache()->cached_total_length : -1; } -/* static */ VehicleID ScriptVehicle::BuildVehicle(TileIndex depot, EngineID engine_id) +/* static */ VehicleID ScriptVehicle::_BuildVehicleInternal(TileIndex depot, EngineID engine_id, CargoID cargo) { - EnforcePrecondition(false, ScriptObject::GetCompany() != OWNER_DEITY); + EnforcePrecondition(VEHICLE_INVALID, ScriptObject::GetCompany() != OWNER_DEITY); EnforcePrecondition(VEHICLE_INVALID, ScriptEngine::IsBuildable(engine_id)); + EnforcePrecondition(VEHICLE_INVALID, cargo == CT_INVALID || ScriptCargo::IsValidCargo(cargo)); ::VehicleType type = ::Engine::Get(engine_id)->type; EnforcePreconditionCustomError(VEHICLE_INVALID, !ScriptGameSettings::IsDisabledVehicleType((ScriptVehicle::VehicleType)type), ScriptVehicle::ERR_VEHICLE_BUILD_DISABLED); - if (!ScriptObject::DoCommand(depot, engine_id | (CT_INVALID << 24), 0, ::GetCmdBuildVeh(type), NULL, &ScriptInstance::DoCommandReturnVehicleID)) return VEHICLE_INVALID; + if (!ScriptObject::DoCommand(depot, engine_id | (cargo << 24), 0, ::GetCmdBuildVeh(type), NULL, &ScriptInstance::DoCommandReturnVehicleID)) return VEHICLE_INVALID; /* In case of test-mode, we return VehicleID 0 */ return 0; } +/* static */ VehicleID ScriptVehicle::BuildVehicle(TileIndex depot, EngineID engine_id) +{ + return _BuildVehicleInternal(depot, engine_id, CT_INVALID); +} + +/* static */ VehicleID ScriptVehicle::BuildVehicleWithRefit(TileIndex depot, EngineID engine_id, CargoID cargo) +{ + EnforcePrecondition(VEHICLE_INVALID, ScriptCargo::IsValidCargo(cargo)); + return _BuildVehicleInternal(depot, engine_id, cargo); +} + +/* static */ int ScriptVehicle::GetBuildWithRefitCapacity(TileIndex depot, EngineID engine_id, CargoID cargo) +{ + if (!ScriptEngine::IsBuildable(engine_id)) return -1; + if (!ScriptCargo::IsValidCargo(cargo)) return -1; + + ::VehicleType type = ::Engine::Get(engine_id)->type; + + CommandCost res = ::DoCommand(depot, engine_id | (cargo << 24), 0, DC_QUERY_COST, ::GetCmdBuildVeh(type)); + return res.Succeeded() ? _returned_refit_capacity : -1; +} + /* static */ VehicleID ScriptVehicle::CloneVehicle(TileIndex depot, VehicleID vehicle_id, bool share_orders) { EnforcePrecondition(false, ScriptObject::GetCompany() != OWNER_DEITY); diff --git a/src/script/api/script_vehicle.hpp b/src/script/api/script_vehicle.hpp index f6b22c204d..d027e12435 100644 --- a/src/script/api/script_vehicle.hpp +++ b/src/script/api/script_vehicle.hpp @@ -320,6 +320,41 @@ public: */ static VehicleID BuildVehicle(TileIndex depot, EngineID engine_id); + /** + * Builds a vehicle with the given engine at the given depot and refits it to the given cargo. + * @param depot The depot where the vehicle will be build. + * @param engine_id The engine to use for this vehicle. + * @param cargo The cargo to refit to. + * @pre The tile at depot has a depot that can build the engine and + * is owned by you. + * @pre ScriptEngine::IsBuildable(engine_id). + * @pre ScriptCargo::IsValidCargo(cargo). + * @game @pre Valid ScriptCompanyMode active in scope. + * @exception ScriptVehicle::ERR_VEHICLE_TOO_MANY + * @exception ScriptVehicle::ERR_VEHICLE_BUILD_DISABLED + * @exception ScriptVehicle::ERR_VEHICLE_WRONG_DEPOT + * @return The VehicleID of the new vehicle, or an invalid VehicleID when + * it failed. Check the return value using IsValidVehicle. In test-mode + * 0 is returned if it was successful; any other value indicates failure. + * @note In Test Mode it means you can't assign orders yet to this vehicle, + * as the vehicle isn't really built yet. Build it for real first before + * assigning orders. + */ + static VehicleID BuildVehicleWithRefit(TileIndex depot, EngineID engine_id, CargoID cargo); + + /** + * Gets the capacity of a vehicle built at the given depot with the given engine and refitted to the given cargo. + * @param depot The depot where the vehicle will be build. + * @param engine_id The engine to use for this vehicle. + * @param cargo The cargo to refit to. + * @pre The tile at depot has a depot that can build the engine and + * is owned by you. + * @pre ScriptEngine::IsBuildable(engine_id). + * @pre ScriptCargo::IsValidCargo(cargo). + * @return The capacity the vehicle will have when refited. + */ + static int GetBuildWithRefitCapacity(TileIndex depot, EngineID engine_id, CargoID cargo); + /** * Clones a vehicle at the given depot, copying or cloning its orders. * @param depot The depot where the vehicle will be build. @@ -563,6 +598,11 @@ public: static uint GetMaximumOrderDistance(VehicleID vehicle_id); private: + /** + * Internal function used by BuildVehicle(WithRefit). + */ + static VehicleID _BuildVehicleInternal(TileIndex depot, EngineID engine_id, CargoID cargo); + /** * Internal function used by SellWagon(Chain). */ From e6bb90543e885d20814b4829c94c04909a311b71 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Sat, 23 Mar 2019 21:06:46 +0000 Subject: [PATCH 533/622] Change: Show additional cost and refitted capacity in build vehicle window. --- src/articulated_vehicles.cpp | 6 +- src/autoreplace_gui.cpp | 9 +- src/build_vehicle_gui.cpp | 196 ++++++++++++++++++++++++----------- src/engine_func.h | 2 +- src/lang/english.txt | 3 + src/vehicle_cmd.cpp | 3 + src/vehicle_gui.h | 10 +- 7 files changed, 165 insertions(+), 64 deletions(-) diff --git a/src/articulated_vehicles.cpp b/src/articulated_vehicles.cpp index 44ad587895..62ab5b0961 100644 --- a/src/articulated_vehicles.cpp +++ b/src/articulated_vehicles.cpp @@ -168,16 +168,16 @@ CargoArray GetCapacityOfArticulatedParts(EngineID engine) * @param engine Model to investigate. * @param[out] cargoes Total amount of units that can be transported, summed by cargo. * @param[out] refits Whether a (possibly partial) refit for each cargo is possible. + * @param cargo_type Selected refitted cargo type + * @param cargo_capacity Capacity of selected refitted cargo type */ -void GetArticulatedVehicleCargoesAndRefits(EngineID engine, CargoArray *cargoes, CargoTypes *refits) +void GetArticulatedVehicleCargoesAndRefits(EngineID engine, CargoArray *cargoes, CargoTypes *refits, CargoID cargo_type, uint16 cargo_capacity) { cargoes->Clear(); *refits = 0; const Engine *e = Engine::Get(engine); - CargoID cargo_type; - uint16 cargo_capacity = GetVehicleDefaultCapacity(engine, &cargo_type); if (cargo_type < NUM_CARGO && cargo_capacity > 0) { (*cargoes)[cargo_type] += cargo_capacity; if (IsEngineRefittable(engine)) SetBit(*refits, cargo_type); diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index 196d076da7..3a8a7543d5 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -423,9 +423,16 @@ public: /* Draw details panels. */ for (int side = 0; side < 2; side++) { if (this->sel_engine[side] != INVALID_ENGINE) { + /* Use default engine details without refitting */ + const Engine *e = Engine::Get(this->sel_engine[side]); + TestedEngineDetails ted; + ted.cost = 0; + ted.cargo = e->GetDefaultCargoType(); + ted.capacity = e->GetDisplayDefaultCapacity(&ted.mail_capacity); + NWidgetBase *nwi = this->GetWidget(side == 0 ? WID_RV_LEFT_DETAILS : WID_RV_RIGHT_DETAILS); int text_end = DrawVehiclePurchaseInfo(nwi->pos_x + WD_FRAMETEXT_LEFT, nwi->pos_x + nwi->current_x - WD_FRAMETEXT_RIGHT, - nwi->pos_y + WD_FRAMERECT_TOP, this->sel_engine[side]); + nwi->pos_y + WD_FRAMERECT_TOP, this->sel_engine[side], ted); needed_height = max(needed_height, text_end - (int)nwi->pos_y + WD_FRAMERECT_BOTTOM); } } diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 94353382b8..a086feccce 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -532,11 +532,11 @@ static GUIEngineList::FilterFunction * const _filter_funcs[] = { &CargoFilter, }; -static int DrawCargoCapacityInfo(int left, int right, int y, EngineID engine) +static int DrawCargoCapacityInfo(int left, int right, int y, EngineID engine, TestedEngineDetails &te) { CargoArray cap; CargoTypes refits; - GetArticulatedVehicleCargoesAndRefits(engine, &cap, &refits); + GetArticulatedVehicleCargoesAndRefits(engine, &cap, &refits, te.cargo, te.capacity); for (CargoID c = 0; c < NUM_CARGO; c++) { if (cap[c] == 0) continue; @@ -552,19 +552,25 @@ static int DrawCargoCapacityInfo(int left, int right, int y, EngineID engine) } /* Draw rail wagon specific details */ -static int DrawRailWagonPurchaseInfo(int left, int right, int y, EngineID engine_number, const RailVehicleInfo *rvi) +static int DrawRailWagonPurchaseInfo(int left, int right, int y, EngineID engine_number, const RailVehicleInfo *rvi, TestedEngineDetails &te) { const Engine *e = Engine::Get(engine_number); /* Purchase cost */ - SetDParam(0, e->GetCost()); - DrawString(left, right, y, STR_PURCHASE_INFO_COST); + if (te.cost != 0) { + SetDParam(0, e->GetCost() + te.cost); + SetDParam(1, te.cost); + DrawString(left, right, y, STR_PURCHASE_INFO_COST_REFIT); + } else { + SetDParam(0, e->GetCost()); + DrawString(left, right, y, STR_PURCHASE_INFO_COST); + } y += FONT_HEIGHT_NORMAL; /* Wagon weight - (including cargo) */ uint weight = e->GetDisplayWeight(); SetDParam(0, weight); - uint cargo_weight = (e->CanCarryCargo() ? CargoSpec::Get(e->GetDefaultCargoType())->weight * GetTotalCapacityOfArticulatedParts(engine_number) / 16 : 0); + uint cargo_weight = (e->CanCarryCargo() ? CargoSpec::Get(te.cargo)->weight * te.capacity / 16 : 0); SetDParam(1, cargo_weight + weight); DrawString(left, right, y, STR_PURCHASE_INFO_WEIGHT_CWEIGHT); y += FONT_HEIGHT_NORMAL; @@ -590,14 +596,21 @@ static int DrawRailWagonPurchaseInfo(int left, int right, int y, EngineID engine } /* Draw locomotive specific details */ -static int DrawRailEnginePurchaseInfo(int left, int right, int y, EngineID engine_number, const RailVehicleInfo *rvi) +static int DrawRailEnginePurchaseInfo(int left, int right, int y, EngineID engine_number, const RailVehicleInfo *rvi, TestedEngineDetails &te) { const Engine *e = Engine::Get(engine_number); /* Purchase Cost - Engine weight */ - SetDParam(0, e->GetCost()); - SetDParam(1, e->GetDisplayWeight()); - DrawString(left, right, y, STR_PURCHASE_INFO_COST_WEIGHT); + if (te.cost != 0) { + SetDParam(0, e->GetCost() + te.cost); + SetDParam(1, te.cost); + SetDParam(2, e->GetDisplayWeight()); + DrawString(left, right, y, STR_PURCHASE_INFO_COST_REFIT_WEIGHT); + } else { + SetDParam(0, e->GetCost()); + SetDParam(1, e->GetDisplayWeight()); + DrawString(left, right, y, STR_PURCHASE_INFO_COST_WEIGHT); + } y += FONT_HEIGHT_NORMAL; /* Max speed - Engine power */ @@ -632,20 +645,26 @@ static int DrawRailEnginePurchaseInfo(int left, int right, int y, EngineID engin } /* Draw road vehicle specific details */ -static int DrawRoadVehPurchaseInfo(int left, int right, int y, EngineID engine_number) +static int DrawRoadVehPurchaseInfo(int left, int right, int y, EngineID engine_number, TestedEngineDetails &te) { const Engine *e = Engine::Get(engine_number); if (_settings_game.vehicle.roadveh_acceleration_model != AM_ORIGINAL) { /* Purchase Cost */ - SetDParam(0, e->GetCost()); - DrawString(left, right, y, STR_PURCHASE_INFO_COST); + if (te.cost != 0) { + SetDParam(0, e->GetCost() + te.cost); + SetDParam(1, te.cost); + DrawString(left, right, y, STR_PURCHASE_INFO_COST_REFIT); + } else { + SetDParam(0, e->GetCost()); + DrawString(left, right, y, STR_PURCHASE_INFO_COST); + } y += FONT_HEIGHT_NORMAL; /* Road vehicle weight - (including cargo) */ int16 weight = e->GetDisplayWeight(); SetDParam(0, weight); - uint cargo_weight = (e->CanCarryCargo() ? CargoSpec::Get(e->GetDefaultCargoType())->weight * GetTotalCapacityOfArticulatedParts(engine_number) / 16 : 0); + uint cargo_weight = (e->CanCarryCargo() ? CargoSpec::Get(te.cargo)->weight * te.capacity / 16 : 0); SetDParam(1, cargo_weight + weight); DrawString(left, right, y, STR_PURCHASE_INFO_WEIGHT_CWEIGHT); y += FONT_HEIGHT_NORMAL; @@ -662,9 +681,16 @@ static int DrawRoadVehPurchaseInfo(int left, int right, int y, EngineID engine_n y += FONT_HEIGHT_NORMAL; } else { /* Purchase cost - Max speed */ - SetDParam(0, e->GetCost()); - SetDParam(1, e->GetDisplayMaxSpeed()); - DrawString(left, right, y, STR_PURCHASE_INFO_COST_SPEED); + if (te.cost != 0) { + SetDParam(0, e->GetCost() + te.cost); + SetDParam(1, te.cost); + SetDParam(2, e->GetDisplayMaxSpeed()); + DrawString(left, right, y, STR_PURCHASE_INFO_COST_REFIT_SPEED); + } else { + SetDParam(0, e->GetCost()); + SetDParam(2, e->GetDisplayMaxSpeed()); + DrawString(left, right, y, STR_PURCHASE_INFO_COST_SPEED); + } y += FONT_HEIGHT_NORMAL; } @@ -677,7 +703,7 @@ static int DrawRoadVehPurchaseInfo(int left, int right, int y, EngineID engine_n } /* Draw ship specific details */ -static int DrawShipPurchaseInfo(int left, int right, int y, EngineID engine_number, bool refittable) +static int DrawShipPurchaseInfo(int left, int right, int y, EngineID engine_number, bool refittable, TestedEngineDetails &te) { const Engine *e = Engine::Get(engine_number); @@ -686,13 +712,27 @@ static int DrawShipPurchaseInfo(int left, int right, int y, EngineID engine_numb uint ocean_speed = e->u.ship.ApplyWaterClassSpeedFrac(raw_speed, true); uint canal_speed = e->u.ship.ApplyWaterClassSpeedFrac(raw_speed, false); - SetDParam(0, e->GetCost()); if (ocean_speed == canal_speed) { - SetDParam(1, ocean_speed); - DrawString(left, right, y, STR_PURCHASE_INFO_COST_SPEED); + if (te.cost != 0) { + SetDParam(0, e->GetCost() + te.cost); + SetDParam(1, te.cost); + SetDParam(2, ocean_speed); + DrawString(left, right, y, STR_PURCHASE_INFO_COST_REFIT_SPEED); + } else { + SetDParam(0, e->GetCost()); + SetDParam(1, ocean_speed); + DrawString(left, right, y, STR_PURCHASE_INFO_COST_SPEED); + } y += FONT_HEIGHT_NORMAL; } else { - DrawString(left, right, y, STR_PURCHASE_INFO_COST); + if (te.cost != 0) { + SetDParam(0, e->GetCost() + te.cost); + SetDParam(1, te.cost); + DrawString(left, right, y, STR_PURCHASE_INFO_COST_REFIT); + } else { + SetDParam(0, e->GetCost()); + DrawString(left, right, y, STR_PURCHASE_INFO_COST); + } y += FONT_HEIGHT_NORMAL; SetDParam(0, ocean_speed); @@ -705,8 +745,8 @@ static int DrawShipPurchaseInfo(int left, int right, int y, EngineID engine_numb } /* Cargo type + capacity */ - SetDParam(0, e->GetDefaultCargoType()); - SetDParam(1, e->GetDisplayDefaultCapacity()); + SetDParam(0, te.cargo); + SetDParam(1, te.capacity); SetDParam(2, refittable ? STR_PURCHASE_INFO_REFITTABLE : STR_EMPTY); DrawString(left, right, y, STR_PURCHASE_INFO_CAPACITY); y += FONT_HEIGHT_NORMAL; @@ -728,31 +768,35 @@ static int DrawShipPurchaseInfo(int left, int right, int y, EngineID engine_numb * @param refittable If set, the aircraft can be refitted. * @return Bottom of the used area. */ -static int DrawAircraftPurchaseInfo(int left, int right, int y, EngineID engine_number, bool refittable) +static int DrawAircraftPurchaseInfo(int left, int right, int y, EngineID engine_number, bool refittable, TestedEngineDetails &te) { const Engine *e = Engine::Get(engine_number); - CargoID cargo = e->GetDefaultCargoType(); /* Purchase cost - Max speed */ - SetDParam(0, e->GetCost()); - SetDParam(1, e->GetDisplayMaxSpeed()); - DrawString(left, right, y, STR_PURCHASE_INFO_COST_SPEED); + if (te.cost != 0) { + SetDParam(0, e->GetCost() + te.cost); + SetDParam(1, te.cost); + SetDParam(2, e->GetDisplayMaxSpeed()); + DrawString(left, right, y, STR_PURCHASE_INFO_COST_REFIT_SPEED); + } else { + SetDParam(0, e->GetCost()); + SetDParam(1, e->GetDisplayMaxSpeed()); + DrawString(left, right, y, STR_PURCHASE_INFO_COST_SPEED); + } y += FONT_HEIGHT_NORMAL; /* Cargo capacity */ - uint16 mail_capacity; - uint capacity = e->GetDisplayDefaultCapacity(&mail_capacity); - if (mail_capacity > 0) { - SetDParam(0, cargo); - SetDParam(1, capacity); + if (te.mail_capacity > 0) { + SetDParam(0, te.cargo); + SetDParam(1, te.capacity); SetDParam(2, CT_MAIL); - SetDParam(3, mail_capacity); + SetDParam(3, te.mail_capacity); DrawString(left, right, y, STR_PURCHASE_INFO_AIRCRAFT_CAPACITY); } else { /* Note, if the default capacity is selected by the refit capacity * callback, then the capacity shown is likely to be incorrect. */ - SetDParam(0, cargo); - SetDParam(1, capacity); + SetDParam(0, te.cargo); + SetDParam(1, te.capacity); SetDParam(2, refittable ? STR_PURCHASE_INFO_REFITTABLE : STR_EMPTY); DrawString(left, right, y, STR_PURCHASE_INFO_CAPACITY); } @@ -809,7 +853,7 @@ static uint ShowAdditionalText(int left, int right, int y, EngineID engine) * @param engine_number the engine of which to draw the info of * @return y after drawing all the text */ -int DrawVehiclePurchaseInfo(int left, int right, int y, EngineID engine_number) +int DrawVehiclePurchaseInfo(int left, int right, int y, EngineID engine_number, TestedEngineDetails &te) { const Engine *e = Engine::Get(engine_number); YearMonthDay ymd; @@ -821,30 +865,30 @@ int DrawVehiclePurchaseInfo(int left, int right, int y, EngineID engine_number) default: NOT_REACHED(); case VEH_TRAIN: if (e->u.rail.railveh_type == RAILVEH_WAGON) { - y = DrawRailWagonPurchaseInfo(left, right, y, engine_number, &e->u.rail); + y = DrawRailWagonPurchaseInfo(left, right, y, engine_number, &e->u.rail, te); } else { - y = DrawRailEnginePurchaseInfo(left, right, y, engine_number, &e->u.rail); + y = DrawRailEnginePurchaseInfo(left, right, y, engine_number, &e->u.rail, te); } articulated_cargo = true; break; case VEH_ROAD: - y = DrawRoadVehPurchaseInfo(left, right, y, engine_number); + y = DrawRoadVehPurchaseInfo(left, right, y, engine_number, te); articulated_cargo = true; break; case VEH_SHIP: - y = DrawShipPurchaseInfo(left, right, y, engine_number, refittable); + y = DrawShipPurchaseInfo(left, right, y, engine_number, refittable, te); break; case VEH_AIRCRAFT: - y = DrawAircraftPurchaseInfo(left, right, y, engine_number, refittable); + y = DrawAircraftPurchaseInfo(left, right, y, engine_number, refittable, te); break; } if (articulated_cargo) { /* Cargo type + capacity, or N/A */ - int new_y = DrawCargoCapacityInfo(left, right, y, engine_number); + int new_y = DrawCargoCapacityInfo(left, right, y, engine_number, te); if (new_y == y) { SetDParam(0, CT_INVALID); @@ -988,6 +1032,7 @@ struct BuildVehicleWindow : Window { byte cargo_filter_criteria; ///< Selected cargo filter int details_height; ///< Minimal needed height of the details panels (found so far). Scrollbar *vscroll; + TestedEngineDetails te; ///< Tested cost and capacity after refit. void SetBuyVehicleText() { @@ -1065,8 +1110,11 @@ struct BuildVehicleWindow : Window { this->eng_list.ForceRebuild(); this->GenerateBuildList(); // generate the list, since we need it in the next line /* Select the first engine in the list as default when opening the window */ - if (this->eng_list.Length() > 0) this->sel_engine = this->eng_list[0]; - this->SetBuyVehicleText(); + if (this->eng_list.Length() > 0) { + this->SelectEngine(this->eng_list[0]); + } else { + this->SelectEngine(INVALID_ENGINE); + } } /** Populate the filter list and set the cargo filter criteria. */ @@ -1113,6 +1161,41 @@ struct BuildVehicleWindow : Window { this->eng_list.SetFilterState(this->cargo_filter[this->cargo_filter_criteria] != CF_ANY); } + void SelectEngine(EngineID engine) + { + bool refit = this->cargo_filter[this->cargo_filter_criteria] != CF_ANY && this->cargo_filter[this->cargo_filter_criteria] != CF_NONE; + CargoID cargo = refit ? this->cargo_filter[this->cargo_filter_criteria] : CT_INVALID; + + this->sel_engine = engine; + this->SetBuyVehicleText(); + + if (this->sel_engine == INVALID_ENGINE) return; + + const Engine *e = Engine::Get(this->sel_engine); + if (!e->CanCarryCargo()) { + this->te.cost = 0; + this->te.cargo = CT_INVALID; + return; + } + + if (!this->listview_mode) { + /* Query for cost and refitted capacity */ + CommandCost ret = DoCommand(this->window_number, this->sel_engine | (cargo << 24), 0, DC_QUERY_COST, GetCmdBuildVeh(this->vehicle_type), NULL); + if (ret.Succeeded()) { + this->te.cost = ret.GetCost() - e->GetCost(); + this->te.capacity = _returned_refit_capacity; + this->te.mail_capacity = _returned_mail_refit_capacity; + this->te.cargo = (cargo == CT_INVALID) ? e->GetDefaultCargoType() : cargo; + return; + } + } + + /* Purchase test was not possible or failed, fill in the defaults instead. */ + this->te.cost = 0; + this->te.capacity = e->GetDisplayDefaultCapacity(&this->te.mail_capacity); + this->te.cargo = e->GetDefaultCargoType(); + } + void OnInit() override { this->SetCargoFilterArray(); @@ -1123,11 +1206,9 @@ struct BuildVehicleWindow : Window { { this->eng_list.Filter(this->cargo_filter[this->cargo_filter_criteria]); if (0 == this->eng_list.Length()) { // no engine passed through the filter, invalidate the previously selected engine - this->sel_engine = INVALID_ENGINE; - this->SetBuyVehicleText(); + this->SelectEngine(INVALID_ENGINE); } else if (!this->eng_list.Contains(this->sel_engine)) { // previously selected engine didn't pass the filter, select the first engine of the list - this->sel_engine = this->eng_list[0]; - this->SetBuyVehicleText(); + this->SelectEngine(this->eng_list[0]); } } @@ -1176,7 +1257,7 @@ struct BuildVehicleWindow : Window { if (eid == this->sel_engine) sel_id = eid; } - this->sel_engine = sel_id; + this->SelectEngine(sel_id); /* make engines first, and then wagons, sorted by selected sort_criteria */ _engine_sort_direction = false; @@ -1207,7 +1288,7 @@ struct BuildVehicleWindow : Window { if (eid == this->sel_engine) sel_id = eid; } - this->sel_engine = sel_id; + this->SelectEngine(sel_id); } /* Figure out what ship EngineIDs to put in the list */ @@ -1225,7 +1306,7 @@ struct BuildVehicleWindow : Window { if (eid == this->sel_engine) sel_id = eid; } - this->sel_engine = sel_id; + this->SelectEngine(sel_id); } /* Figure out what aircraft EngineIDs to put in the list */ @@ -1253,7 +1334,7 @@ struct BuildVehicleWindow : Window { if (eid == this->sel_engine) sel_id = eid; } - this->sel_engine = sel_id; + this->SelectEngine(sel_id); } /* Generate the list of vehicles */ @@ -1308,8 +1389,7 @@ struct BuildVehicleWindow : Window { case WID_BV_LIST: { uint i = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_BV_LIST); size_t num_items = this->eng_list.Length(); - this->sel_engine = (i < num_items) ? this->eng_list[i] : INVALID_ENGINE; - this->SetBuyVehicleText(); + this->SelectEngine((i < num_items) ? this->eng_list[i] : INVALID_ENGINE); this->SetDirty(); if (_ctrl_pressed) { this->OnClick(pt, WID_BV_SHOW_HIDE, 1); @@ -1473,7 +1553,7 @@ struct BuildVehicleWindow : Window { if (this->sel_engine != INVALID_ENGINE) { NWidgetBase *nwi = this->GetWidget(WID_BV_PANEL); int text_end = DrawVehiclePurchaseInfo(nwi->pos_x + WD_FRAMETEXT_LEFT, nwi->pos_x + nwi->current_x - WD_FRAMETEXT_RIGHT, - nwi->pos_y + WD_FRAMERECT_TOP, this->sel_engine); + nwi->pos_y + WD_FRAMERECT_TOP, this->sel_engine, this->te); needed_height = max(needed_height, text_end - (int)nwi->pos_y + WD_FRAMERECT_BOTTOM); } if (needed_height != this->details_height) { // Details window are not high enough, enlarge them. @@ -1510,7 +1590,7 @@ struct BuildVehicleWindow : Window { /* deactivate filter if criteria is 'Show All', activate it otherwise */ this->eng_list.SetFilterState(this->cargo_filter[this->cargo_filter_criteria] != CF_ANY); this->eng_list.ForceRebuild(); - this->SetBuyVehicleText(); + this->SelectEngine(this->sel_engine); } break; } diff --git a/src/engine_func.h b/src/engine_func.h index 37fb005092..79dad18c72 100644 --- a/src/engine_func.h +++ b/src/engine_func.h @@ -26,7 +26,7 @@ extern const uint8 _engine_offsets[4]; bool IsEngineBuildable(EngineID engine, VehicleType type, CompanyID company); bool IsEngineRefittable(EngineID engine); -void GetArticulatedVehicleCargoesAndRefits(EngineID engine, CargoArray *cargoes, CargoTypes *refits); +void GetArticulatedVehicleCargoesAndRefits(EngineID engine, CargoArray *cargoes, CargoTypes *refits, CargoID cargo_type, uint16 cargo_capacity); void SetYearEngineAgingStops(); void StartupOneEngine(Engine *e, Date aging_date); diff --git a/src/lang/english.txt b/src/lang/english.txt index 86e045d067..2e01e3a2d5 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -3469,6 +3469,7 @@ STR_BUY_VEHICLE_SHIP_CAPTION :New Ships STR_BUY_VEHICLE_AIRCRAFT_CAPTION :New Aircraft STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} Weight: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} (Refit Cost: {GOLD}{CURRENCY_LONG}{BLACK}) Weight: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Speed: {GOLD}{VELOCITY}{BLACK} Power: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Speed: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Speed on ocean: {GOLD}{VELOCITY} @@ -3479,8 +3480,10 @@ STR_PURCHASE_INFO_REFITTABLE :(refittable) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Designed: {GOLD}{NUM}{BLACK} Life: {GOLD}{COMMA} year{P "" s} STR_PURCHASE_INFO_RELIABILITY :{BLACK}Max. Reliability: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Cost: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} (Refit Cost: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Weight: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} Speed: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} (Refit Cost: {GOLD}{CURRENCY_LONG}{BLACK}) Speed: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacity: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Powered Wagons: {GOLD}+{POWER}{BLACK} Weight: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Refittable to: {GOLD}{STRING2} diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 345874e586..7dd7a790aa 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -148,6 +148,9 @@ CommandCost CmdBuildVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint if (refitting) { value.AddCost(CmdRefitVehicle(tile, flags, v->index, cargo, NULL)); + } else { + /* Fill in non-refitted capacities */ + _returned_refit_capacity = e->GetDisplayDefaultCapacity(&_returned_mail_refit_capacity); } if (flags & DC_EXEC) { diff --git a/src/vehicle_gui.h b/src/vehicle_gui.h index 92975425df..9eb688eee9 100644 --- a/src/vehicle_gui.h +++ b/src/vehicle_gui.h @@ -37,7 +37,15 @@ enum VehicleInvalidateWindowData { VIWD_AUTOREPLACE = -4, ///< Autoreplace replaced the vehicle. }; -int DrawVehiclePurchaseInfo(int left, int right, int y, EngineID engine_number); +/** Extra information about refitted cargo and capacity */ +struct TestedEngineDetails { + Money cost; ///< Refit cost + CargoID cargo; ///< Cargo type + uint16 capacity; ///< Cargo capacity + uint16 mail_capacity; ///< Mail capacity if available +}; + +int DrawVehiclePurchaseInfo(int left, int right, int y, EngineID engine_number, TestedEngineDetails &te); void DrawTrainImage(const Train *v, int left, int right, int y, VehicleID selection, EngineImageType image_type, int skip, VehicleID drag_dest = INVALID_VEHICLE); void DrawRoadVehImage(const Vehicle *v, int left, int right, int y, VehicleID selection, EngineImageType image_type, int skip = 0); From b1fb3f4fb8c389d36ba670558a169578f7d142e2 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Sun, 24 Mar 2019 16:23:46 +0000 Subject: [PATCH 534/622] Codechange: More use of override keyword. --- src/newgrf_commons.h | 6 ++++-- src/textfile_gui.h | 24 ++++++++++++++---------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/newgrf_commons.h b/src/newgrf_commons.h index 5721b7eb20..a5cedf429b 100644 --- a/src/newgrf_commons.h +++ b/src/newgrf_commons.h @@ -228,6 +228,7 @@ class HouseOverrideManager : public OverrideManagerBase { public: HouseOverrideManager(uint16 offset, uint16 maximum, uint16 invalid) : OverrideManagerBase(offset, maximum, invalid) {} + void SetEntitySpec(const HouseSpec *hs); }; @@ -238,8 +239,9 @@ public: IndustryOverrideManager(uint16 offset, uint16 maximum, uint16 invalid) : OverrideManagerBase(offset, maximum, invalid) {} - virtual uint16 AddEntityID(byte grf_local_id, uint32 grfid, byte substitute_id); - virtual uint16 GetID(uint8 grf_local_id, uint32 grfid) const; + uint16 AddEntityID(byte grf_local_id, uint32 grfid, byte substitute_id) override; + uint16 GetID(uint8 grf_local_id, uint32 grfid) const override; + void SetEntitySpec(IndustrySpec *inds); }; diff --git a/src/textfile_gui.h b/src/textfile_gui.h index 9495fa3f08..b7bcb2db75 100644 --- a/src/textfile_gui.h +++ b/src/textfile_gui.h @@ -32,17 +32,21 @@ struct TextfileWindow : public Window, MissingGlyphSearcher { static const int BOTTOM_SPACING = WD_FRAMETEXT_BOTTOM; ///< Additional spacing at the bottom of the #WID_TF_BACKGROUND widget. TextfileWindow(TextfileType file_type); - virtual ~TextfileWindow(); - virtual void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize); - virtual void OnClick(Point pt, int widget, int click_count); - virtual void DrawWidget(const Rect &r, int widget) const; - virtual void OnResize(); - virtual void Reset(); - virtual FontSize DefaultSize(); - virtual const char *NextString(); - virtual bool Monospace(); - virtual void SetFontNames(FreeTypeSettings *settings, const char *font_name); + ~TextfileWindow(); + + void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override; + void OnClick(Point pt, int widget, int click_count) override; + void DrawWidget(const Rect &r, int widget) const override; + void OnResize() override; + + void Reset() override; + FontSize DefaultSize() override; + const char *NextString() override; + bool Monospace() override; + void SetFontNames(FreeTypeSettings *settings, const char *font_name) override; + virtual void LoadTextfile(const char *textfile, Subdirectory dir); + private: uint GetContentHeight(); void SetupScrollbars(); From 07de9d6c3f48b6a3b92e11d553aca145546c62ef Mon Sep 17 00:00:00 2001 From: peter1138 Date: Sun, 24 Mar 2019 16:24:06 +0000 Subject: [PATCH 535/622] Codechange: Use override keyword in networking classes. --- src/network/core/tcp.h | 2 +- src/network/core/tcp_admin.h | 2 +- src/network/core/tcp_content.h | 2 +- src/network/core/tcp_game.h | 2 +- src/network/core/tcp_http.h | 6 ++-- src/network/core/udp.h | 4 +-- src/network/network.cpp | 8 ++--- src/network/network_admin.h | 16 ++++----- src/network/network_client.h | 56 ++++++++++++++--------------- src/network/network_content.cpp | 4 +-- src/network/network_content.h | 20 +++++------ src/network/network_content_gui.cpp | 4 +-- src/network/network_server.h | 36 +++++++++---------- src/network/network_udp.cpp | 18 +++++----- 14 files changed, 90 insertions(+), 90 deletions(-) diff --git a/src/network/core/tcp.h b/src/network/core/tcp.h index 00642c2dd3..243ec042d2 100644 --- a/src/network/core/tcp.h +++ b/src/network/core/tcp.h @@ -40,7 +40,7 @@ public: */ bool IsConnected() const { return this->sock != INVALID_SOCKET; } - virtual NetworkRecvStatus CloseConnection(bool error = true); + NetworkRecvStatus CloseConnection(bool error = true) override; virtual void SendPacket(Packet *packet); SendPacketsState SendPackets(bool closing_down = false); diff --git a/src/network/core/tcp_admin.h b/src/network/core/tcp_admin.h index 497c24b48a..7bcc878403 100644 --- a/src/network/core/tcp_admin.h +++ b/src/network/core/tcp_admin.h @@ -481,7 +481,7 @@ protected: NetworkRecvStatus HandlePacket(Packet *p); public: - NetworkRecvStatus CloseConnection(bool error = true); + NetworkRecvStatus CloseConnection(bool error = true) override; NetworkAdminSocketHandler(SOCKET s); ~NetworkAdminSocketHandler(); diff --git a/src/network/core/tcp_content.h b/src/network/core/tcp_content.h index c359fb6679..689de7a018 100644 --- a/src/network/core/tcp_content.h +++ b/src/network/core/tcp_content.h @@ -98,7 +98,7 @@ struct ContentInfo { class NetworkContentSocketHandler : public NetworkTCPSocketHandler { protected: NetworkAddress client_addr; ///< The address we're connected to. - virtual void Close(); + void Close() override; bool ReceiveInvalidPacket(PacketContentType type); diff --git a/src/network/core/tcp_game.h b/src/network/core/tcp_game.h index c41ad4dc16..b392cf7179 100644 --- a/src/network/core/tcp_game.h +++ b/src/network/core/tcp_game.h @@ -522,7 +522,7 @@ public: CommandQueue incoming_queue; ///< The command-queue awaiting handling uint last_packet; ///< Time we received the last frame. - NetworkRecvStatus CloseConnection(bool error = true); + NetworkRecvStatus CloseConnection(bool error = true) override; /** * Close the network connection due to the given status. diff --git a/src/network/core/tcp_http.h b/src/network/core/tcp_http.h index ec969264b1..5a5cdd9f2f 100644 --- a/src/network/core/tcp_http.h +++ b/src/network/core/tcp_http.h @@ -60,7 +60,7 @@ public: return this->sock != INVALID_SOCKET; } - virtual NetworkRecvStatus CloseConnection(bool error = true); + NetworkRecvStatus CloseConnection(bool error = true) override; NetworkHTTPSocketHandler(SOCKET sock, HTTPCallback *callback, const char *host, const char *url, const char *data, int depth); @@ -106,13 +106,13 @@ public: free(this->url); } - virtual void OnFailure() + void OnFailure() override { this->callback->OnFailure(); free(this->data); } - virtual void OnConnect(SOCKET s) + void OnConnect(SOCKET s) override { new NetworkHTTPSocketHandler(s, this->callback, this->address.GetHostname(), this->url, this->data, this->depth); /* We've relinquished control of data now. */ diff --git a/src/network/core/udp.h b/src/network/core/udp.h index 2f77a94df2..fab2324927 100644 --- a/src/network/core/udp.h +++ b/src/network/core/udp.h @@ -52,7 +52,7 @@ protected: /** The opened sockets. */ SocketList sockets; - NetworkRecvStatus CloseConnection(bool error = true); + NetworkRecvStatus CloseConnection(bool error = true) override; void ReceiveInvalidPacket(PacketUDPType, NetworkAddress *client_addr); @@ -235,7 +235,7 @@ public: virtual ~NetworkUDPSocketHandler() { this->Close(); } bool Listen(); - void Close(); + void Close() override; void SendPacket(Packet *p, NetworkAddress *recv, bool all = false, bool broadcast = false); void ReceivePackets(); diff --git a/src/network/network.cpp b/src/network/network.cpp index ea770e5001..e437f4df0a 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -576,12 +576,12 @@ class TCPQueryConnecter : TCPConnecter { public: TCPQueryConnecter(const NetworkAddress &address) : TCPConnecter(address) {} - virtual void OnFailure() + void OnFailure() override { NetworkDisconnect(); } - virtual void OnConnect(SOCKET s) + void OnConnect(SOCKET s) override { _networking = true; new ClientNetworkGameSocketHandler(s); @@ -659,12 +659,12 @@ class TCPClientConnecter : TCPConnecter { public: TCPClientConnecter(const NetworkAddress &address) : TCPConnecter(address) {} - virtual void OnFailure() + void OnFailure() override { NetworkError(STR_NETWORK_ERROR_NOCONNECTION); } - virtual void OnConnect(SOCKET s) + void OnConnect(SOCKET s) override { _networking = true; new ClientNetworkGameSocketHandler(s); diff --git a/src/network/network_admin.h b/src/network/network_admin.h index 6d06d5b9ff..6ea373e8eb 100644 --- a/src/network/network_admin.h +++ b/src/network/network_admin.h @@ -26,14 +26,14 @@ extern NetworkAdminSocketPool _networkadminsocket_pool; /** Class for handling the server side of the game connection. */ class ServerNetworkAdminSocketHandler : public NetworkAdminSocketPool::PoolItem<&_networkadminsocket_pool>, public NetworkAdminSocketHandler, public TCPListenHandler { protected: - virtual NetworkRecvStatus Receive_ADMIN_JOIN(Packet *p); - virtual NetworkRecvStatus Receive_ADMIN_QUIT(Packet *p); - virtual NetworkRecvStatus Receive_ADMIN_UPDATE_FREQUENCY(Packet *p); - virtual NetworkRecvStatus Receive_ADMIN_POLL(Packet *p); - virtual NetworkRecvStatus Receive_ADMIN_CHAT(Packet *p); - virtual NetworkRecvStatus Receive_ADMIN_RCON(Packet *p); - virtual NetworkRecvStatus Receive_ADMIN_GAMESCRIPT(Packet *p); - virtual NetworkRecvStatus Receive_ADMIN_PING(Packet *p); + NetworkRecvStatus Receive_ADMIN_JOIN(Packet *p) override; + NetworkRecvStatus Receive_ADMIN_QUIT(Packet *p) override; + NetworkRecvStatus Receive_ADMIN_UPDATE_FREQUENCY(Packet *p) override; + NetworkRecvStatus Receive_ADMIN_POLL(Packet *p) override; + NetworkRecvStatus Receive_ADMIN_CHAT(Packet *p) override; + NetworkRecvStatus Receive_ADMIN_RCON(Packet *p) override; + NetworkRecvStatus Receive_ADMIN_GAMESCRIPT(Packet *p) override; + NetworkRecvStatus Receive_ADMIN_PING(Packet *p) override; NetworkRecvStatus SendProtocol(); NetworkRecvStatus SendPong(uint32 d1); diff --git a/src/network/network_client.h b/src/network/network_client.h index 5e9988d9aa..d0a9d07b18 100644 --- a/src/network/network_client.h +++ b/src/network/network_client.h @@ -42,33 +42,33 @@ protected: friend void NetworkClose(bool close_admins); static ClientNetworkGameSocketHandler *my_client; ///< This is us! - virtual NetworkRecvStatus Receive_SERVER_FULL(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_BANNED(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_ERROR(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_COMPANY_INFO(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_CLIENT_INFO(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_NEED_GAME_PASSWORD(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_NEED_COMPANY_PASSWORD(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_WELCOME(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_WAIT(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_MAP_BEGIN(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_MAP_SIZE(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_MAP_DATA(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_MAP_DONE(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_JOIN(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_FRAME(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_SYNC(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_COMMAND(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_CHAT(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_QUIT(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_ERROR_QUIT(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_SHUTDOWN(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_NEWGAME(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_RCON(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_CHECK_NEWGRFS(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_MOVE(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_COMPANY_UPDATE(Packet *p); - virtual NetworkRecvStatus Receive_SERVER_CONFIG_UPDATE(Packet *p); + NetworkRecvStatus Receive_SERVER_FULL(Packet *p) override; + NetworkRecvStatus Receive_SERVER_BANNED(Packet *p) override; + NetworkRecvStatus Receive_SERVER_ERROR(Packet *p) override; + NetworkRecvStatus Receive_SERVER_COMPANY_INFO(Packet *p) override; + NetworkRecvStatus Receive_SERVER_CLIENT_INFO(Packet *p) override; + NetworkRecvStatus Receive_SERVER_NEED_GAME_PASSWORD(Packet *p) override; + NetworkRecvStatus Receive_SERVER_NEED_COMPANY_PASSWORD(Packet *p) override; + NetworkRecvStatus Receive_SERVER_WELCOME(Packet *p) override; + NetworkRecvStatus Receive_SERVER_WAIT(Packet *p) override; + NetworkRecvStatus Receive_SERVER_MAP_BEGIN(Packet *p) override; + NetworkRecvStatus Receive_SERVER_MAP_SIZE(Packet *p) override; + NetworkRecvStatus Receive_SERVER_MAP_DATA(Packet *p) override; + NetworkRecvStatus Receive_SERVER_MAP_DONE(Packet *p) override; + NetworkRecvStatus Receive_SERVER_JOIN(Packet *p) override; + NetworkRecvStatus Receive_SERVER_FRAME(Packet *p) override; + NetworkRecvStatus Receive_SERVER_SYNC(Packet *p) override; + NetworkRecvStatus Receive_SERVER_COMMAND(Packet *p) override; + NetworkRecvStatus Receive_SERVER_CHAT(Packet *p) override; + NetworkRecvStatus Receive_SERVER_QUIT(Packet *p) override; + NetworkRecvStatus Receive_SERVER_ERROR_QUIT(Packet *p) override; + NetworkRecvStatus Receive_SERVER_SHUTDOWN(Packet *p) override; + NetworkRecvStatus Receive_SERVER_NEWGAME(Packet *p) override; + NetworkRecvStatus Receive_SERVER_RCON(Packet *p) override; + NetworkRecvStatus Receive_SERVER_CHECK_NEWGRFS(Packet *p) override; + NetworkRecvStatus Receive_SERVER_MOVE(Packet *p) override; + NetworkRecvStatus Receive_SERVER_COMPANY_UPDATE(Packet *p) override; + NetworkRecvStatus Receive_SERVER_CONFIG_UPDATE(Packet *p) override; static NetworkRecvStatus SendNewGRFsOk(); static NetworkRecvStatus SendGetMap(); @@ -78,7 +78,7 @@ public: ClientNetworkGameSocketHandler(SOCKET s); ~ClientNetworkGameSocketHandler(); - NetworkRecvStatus CloseConnection(NetworkRecvStatus status); + NetworkRecvStatus CloseConnection(NetworkRecvStatus status) override; void ClientError(NetworkRecvStatus res); static NetworkRecvStatus SendCompanyInformationQuery(); diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 1a80c5d99d..786f1c04a6 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -724,13 +724,13 @@ public: */ NetworkContentConnecter(const NetworkAddress &address) : TCPConnecter(address) {} - virtual void OnFailure() + void OnFailure() override { _network_content_client.isConnecting = false; _network_content_client.OnConnect(false); } - virtual void OnConnect(SOCKET s) + void OnConnect(SOCKET s) override { assert(_network_content_client.sock == INVALID_SOCKET); _network_content_client.isConnecting = false; diff --git a/src/network/network_content.h b/src/network/network_content.h index b1e9dd66b6..7a96a73c06 100644 --- a/src/network/network_content.h +++ b/src/network/network_content.h @@ -80,20 +80,20 @@ protected: friend class NetworkContentConnecter; - virtual bool Receive_SERVER_INFO(Packet *p); - virtual bool Receive_SERVER_CONTENT(Packet *p); + bool Receive_SERVER_INFO(Packet *p) override; + bool Receive_SERVER_CONTENT(Packet *p) override; ContentInfo *GetContent(ContentID cid); void DownloadContentInfo(ContentID cid); - void OnConnect(bool success); - void OnDisconnect(); - void OnReceiveContentInfo(const ContentInfo *ci); - void OnDownloadProgress(const ContentInfo *ci, int bytes); - void OnDownloadComplete(ContentID cid); + void OnConnect(bool success) override; + void OnDisconnect() override; + void OnReceiveContentInfo(const ContentInfo *ci) override; + void OnDownloadProgress(const ContentInfo *ci, int bytes) override; + void OnDownloadComplete(ContentID cid) override; - void OnFailure(); - void OnReceiveData(const char *data, size_t length); + void OnFailure() override; + void OnReceiveData(const char *data, size_t length) override; bool BeforeDownload(); void AfterDownload(); @@ -109,7 +109,7 @@ public: void Connect(); void SendReceive(); - void Close(); + void Close() override; void RequestContentList(ContentType type); void RequestContentList(uint count, const ContentID *content_ids); diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 49ecf2b242..406c6aa052 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -115,7 +115,7 @@ BaseNetworkContentDownloadStatusWindow::~BaseNetworkContentDownloadStatusWindow( _network_content_client.RemoveCallback(this); } -/* virtual */ void BaseNetworkContentDownloadStatusWindow::DrawWidget(const Rect &r, int widget) const +void BaseNetworkContentDownloadStatusWindow::DrawWidget(const Rect &r, int widget) const { if (widget != WID_NCDS_BACKGROUND) return; @@ -144,7 +144,7 @@ BaseNetworkContentDownloadStatusWindow::~BaseNetworkContentDownloadStatusWindow( DrawStringMultiLine(r.left + 2, r.right - 2, y, y + FONT_HEIGHT_NORMAL * 2, str, TC_FROMSTRING, SA_CENTER); } -/* virtual */ void BaseNetworkContentDownloadStatusWindow::OnDownloadProgress(const ContentInfo *ci, int bytes) +void BaseNetworkContentDownloadStatusWindow::OnDownloadProgress(const ContentInfo *ci, int bytes) { if (ci->id != this->cur_id) { strecpy(this->name, ci->filename, lastof(this->name)); diff --git a/src/network/network_server.h b/src/network/network_server.h index 1cd8feb677..f35192a116 100644 --- a/src/network/network_server.h +++ b/src/network/network_server.h @@ -26,22 +26,22 @@ extern NetworkClientSocketPool _networkclientsocket_pool; /** Class for handling the server side of the game connection. */ class ServerNetworkGameSocketHandler : public NetworkClientSocketPool::PoolItem<&_networkclientsocket_pool>, public NetworkGameSocketHandler, public TCPListenHandler { protected: - virtual NetworkRecvStatus Receive_CLIENT_JOIN(Packet *p); - virtual NetworkRecvStatus Receive_CLIENT_COMPANY_INFO(Packet *p); - virtual NetworkRecvStatus Receive_CLIENT_GAME_PASSWORD(Packet *p); - virtual NetworkRecvStatus Receive_CLIENT_COMPANY_PASSWORD(Packet *p); - virtual NetworkRecvStatus Receive_CLIENT_GETMAP(Packet *p); - virtual NetworkRecvStatus Receive_CLIENT_MAP_OK(Packet *p); - virtual NetworkRecvStatus Receive_CLIENT_ACK(Packet *p); - virtual NetworkRecvStatus Receive_CLIENT_COMMAND(Packet *p); - virtual NetworkRecvStatus Receive_CLIENT_CHAT(Packet *p); - virtual NetworkRecvStatus Receive_CLIENT_SET_PASSWORD(Packet *p); - virtual NetworkRecvStatus Receive_CLIENT_SET_NAME(Packet *p); - virtual NetworkRecvStatus Receive_CLIENT_QUIT(Packet *p); - virtual NetworkRecvStatus Receive_CLIENT_ERROR(Packet *p); - virtual NetworkRecvStatus Receive_CLIENT_RCON(Packet *p); - virtual NetworkRecvStatus Receive_CLIENT_NEWGRFS_CHECKED(Packet *p); - virtual NetworkRecvStatus Receive_CLIENT_MOVE(Packet *p); + NetworkRecvStatus Receive_CLIENT_JOIN(Packet *p) override; + NetworkRecvStatus Receive_CLIENT_COMPANY_INFO(Packet *p) override; + NetworkRecvStatus Receive_CLIENT_GAME_PASSWORD(Packet *p) override; + NetworkRecvStatus Receive_CLIENT_COMPANY_PASSWORD(Packet *p) override; + NetworkRecvStatus Receive_CLIENT_GETMAP(Packet *p) override; + NetworkRecvStatus Receive_CLIENT_MAP_OK(Packet *p) override; + NetworkRecvStatus Receive_CLIENT_ACK(Packet *p) override; + NetworkRecvStatus Receive_CLIENT_COMMAND(Packet *p) override; + NetworkRecvStatus Receive_CLIENT_CHAT(Packet *p) override; + NetworkRecvStatus Receive_CLIENT_SET_PASSWORD(Packet *p) override; + NetworkRecvStatus Receive_CLIENT_SET_NAME(Packet *p) override; + NetworkRecvStatus Receive_CLIENT_QUIT(Packet *p) override; + NetworkRecvStatus Receive_CLIENT_ERROR(Packet *p) override; + NetworkRecvStatus Receive_CLIENT_RCON(Packet *p) override; + NetworkRecvStatus Receive_CLIENT_NEWGRFS_CHECKED(Packet *p) override; + NetworkRecvStatus Receive_CLIENT_MOVE(Packet *p) override; NetworkRecvStatus SendCompanyInfo(); NetworkRecvStatus SendNewGRFCheck(); @@ -79,8 +79,8 @@ public: ServerNetworkGameSocketHandler(SOCKET s); ~ServerNetworkGameSocketHandler(); - virtual Packet *ReceivePacket(); - NetworkRecvStatus CloseConnection(NetworkRecvStatus status); + virtual Packet *ReceivePacket() override; + NetworkRecvStatus CloseConnection(NetworkRecvStatus status) override; void GetClientName(char *client_name, const char *last) const; NetworkRecvStatus SendMap(); diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp index 289b07520a..cee230c888 100644 --- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -117,8 +117,8 @@ void NetworkUDPQueryServer(NetworkAddress address, bool manually) /** Helper class for connecting to the master server. */ class MasterNetworkUDPSocketHandler : public NetworkUDPSocketHandler { protected: - virtual void Receive_MASTER_ACK_REGISTER(Packet *p, NetworkAddress *client_addr); - virtual void Receive_MASTER_SESSION_KEY(Packet *p, NetworkAddress *client_addr); + void Receive_MASTER_ACK_REGISTER(Packet *p, NetworkAddress *client_addr) override; + void Receive_MASTER_SESSION_KEY(Packet *p, NetworkAddress *client_addr) override; public: /** * Create the socket. @@ -148,9 +148,9 @@ void MasterNetworkUDPSocketHandler::Receive_MASTER_SESSION_KEY(Packet *p, Networ /** Helper class for handling all server side communication. */ class ServerNetworkUDPSocketHandler : public NetworkUDPSocketHandler { protected: - virtual void Receive_CLIENT_FIND_SERVER(Packet *p, NetworkAddress *client_addr); - virtual void Receive_CLIENT_DETAIL_INFO(Packet *p, NetworkAddress *client_addr); - virtual void Receive_CLIENT_GET_NEWGRFS(Packet *p, NetworkAddress *client_addr); + void Receive_CLIENT_FIND_SERVER(Packet *p, NetworkAddress *client_addr) override; + void Receive_CLIENT_DETAIL_INFO(Packet *p, NetworkAddress *client_addr) override; + void Receive_CLIENT_GET_NEWGRFS(Packet *p, NetworkAddress *client_addr) override; public: /** * Create the socket. @@ -324,10 +324,10 @@ void ServerNetworkUDPSocketHandler::Receive_CLIENT_GET_NEWGRFS(Packet *p, Networ /** Helper class for handling all client side communication. */ class ClientNetworkUDPSocketHandler : public NetworkUDPSocketHandler { protected: - virtual void Receive_SERVER_RESPONSE(Packet *p, NetworkAddress *client_addr); - virtual void Receive_MASTER_RESPONSE_LIST(Packet *p, NetworkAddress *client_addr); - virtual void Receive_SERVER_NEWGRFS(Packet *p, NetworkAddress *client_addr); - virtual void HandleIncomingNetworkGameInfoGRFConfig(GRFConfig *config); + void Receive_SERVER_RESPONSE(Packet *p, NetworkAddress *client_addr) override; + void Receive_MASTER_RESPONSE_LIST(Packet *p, NetworkAddress *client_addr) override; + void Receive_SERVER_NEWGRFS(Packet *p, NetworkAddress *client_addr) override; + void HandleIncomingNetworkGameInfoGRFConfig(GRFConfig *config) override; public: virtual ~ClientNetworkUDPSocketHandler() {} }; From 3860a2ce2acf3e295af087c4ca3bb409a61632fc Mon Sep 17 00:00:00 2001 From: peter1138 Date: Sun, 24 Mar 2019 16:49:26 +0000 Subject: [PATCH 536/622] Codechange: Use override keyword for smallmap window. --- src/smallmap_gui.h | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/smallmap_gui.h b/src/smallmap_gui.h index 486f2a6524..a167d81988 100644 --- a/src/smallmap_gui.h +++ b/src/smallmap_gui.h @@ -180,17 +180,17 @@ public: void SmallMapCenterOnCurrentPos(); Point GetStationMiddle(const Station *st) const; - virtual void SetStringParameters(int widget) const; - virtual void OnInit(); - virtual void OnPaint(); - virtual void DrawWidget(const Rect &r, int widget) const; - virtual void OnClick(Point pt, int widget, int click_count); - virtual void OnInvalidateData(int data = 0, bool gui_scope = true); - virtual bool OnRightClick(Point pt, int widget); - virtual void OnMouseWheel(int wheel); - virtual void OnRealtimeTick(uint delta_ms); - virtual void OnScroll(Point delta); - virtual void OnMouseOver(Point pt, int widget); + void SetStringParameters(int widget) const override; + void OnInit() override; + void OnPaint() override; + void DrawWidget(const Rect &r, int widget) const override; + void OnClick(Point pt, int widget, int click_count) override; + void OnInvalidateData(int data = 0, bool gui_scope = true) override; + bool OnRightClick(Point pt, int widget) override; + void OnMouseWheel(int wheel) override; + void OnRealtimeTick(uint delta_ms) override; + void OnScroll(Point delta) override; + void OnMouseOver(Point pt, int widget) override; }; #endif /* SMALLMAP_GUI_H */ From ce10d9be3f3ae1422e4e1f79fc5c867ab38526e7 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sat, 23 Mar 2019 12:39:13 +0100 Subject: [PATCH 537/622] Fix #7374: Ensure k-d trees are always updated when station sign moves --- src/base_station_base.h | 6 ++++++ src/station.cpp | 2 +- src/station_base.h | 2 ++ src/station_cmd.cpp | 26 ++++++++++++++++++-------- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/base_station_base.h b/src/base_station_base.h index cd512c5177..8af01f8a70 100644 --- a/src/base_station_base.h +++ b/src/base_station_base.h @@ -110,6 +110,12 @@ struct BaseStation : StationPool::PoolItem<&_station_pool> { */ virtual void UpdateVirtCoord() = 0; + virtual void MoveSign(TileIndex new_xy) + { + this->xy = new_xy; + this->UpdateVirtCoord(); + } + /** * Get the tile area for a given station type. * @param ta tile area to fill. diff --git a/src/station.cpp b/src/station.cpp index 3c50ef94f4..6f10806a4b 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -207,7 +207,7 @@ RoadStop *Station::GetPrimaryRoadStop(const RoadVehicle *v) const void Station::AddFacility(StationFacility new_facility_bit, TileIndex facil_xy) { if (this->facilities == FACIL_NONE) { - this->xy = facil_xy; + this->MoveSign(facil_xy); this->random_bits = Random(); } this->facilities |= new_facility_bit; diff --git a/src/station_base.h b/src/station_base.h index 243a2f0cec..794fbdfdfc 100644 --- a/src/station_base.h +++ b/src/station_base.h @@ -492,6 +492,8 @@ public: void UpdateVirtCoord() override; + void MoveSign(TileIndex new_xy) override; + void AfterStationTileSetChange(bool adding, StationType type); uint GetPlatformLength(TileIndex tile, DiagDirection dir) const override; diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 72c70456f7..6121424d57 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -429,6 +429,23 @@ void Station::UpdateVirtCoord() SetWindowDirty(WC_STATION_VIEW, this->index); } +/** + * Move the station main coordinate somewhere else. + * @param new_xy new tile location of the sign + */ +void Station::MoveSign(TileIndex new_xy) +{ + if (this->xy == new_xy) return; + + _viewport_sign_kdtree.Remove(ViewportSignKdtreeItem::MakeStation(this->index)); + _station_kdtree.Remove(this->index); + + this->BaseStation::MoveSign(new_xy); + + _station_kdtree.Insert(this->index); + _viewport_sign_kdtree.Insert(ViewportSignKdtreeItem::MakeStation(this->index)); +} + /** Update the virtual coords needed to draw the station sign for all stations. */ void UpdateAllStationVirtCoords() { @@ -672,14 +689,7 @@ static void UpdateStationSignCoord(BaseStation *st) /* clamp sign coord to be inside the station rect */ TileIndex new_xy = TileXY(ClampU(TileX(st->xy), r->left, r->right), ClampU(TileY(st->xy), r->top, r->bottom)); - if (new_xy != st->xy) { - _viewport_sign_kdtree.Remove(ViewportSignKdtreeItem::MakeStation(st->index)); - _station_kdtree.Remove(st->index); - st->xy = new_xy; - _station_kdtree.Insert(st->index); - _viewport_sign_kdtree.Insert(ViewportSignKdtreeItem::MakeStation(st->index)); - st->UpdateVirtCoord(); - } + st->MoveSign(new_xy); if (!Station::IsExpected(st)) return; Station *full_station = Station::From(st); From 37b9fdc0c1b79d3b91ea858de98893b795cdd479 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 24 Mar 2019 19:45:44 +0100 Subject: [PATCH 538/622] Update: Translations from eints finnish: 13 changes by hpiirai korean: 1 change by telk5093 --- src/lang/afrikaans.txt | 2 ++ src/lang/arabic_egypt.txt | 2 ++ src/lang/basque.txt | 2 ++ src/lang/belarusian.txt | 2 ++ src/lang/brazilian_portuguese.txt | 2 ++ src/lang/bulgarian.txt | 2 ++ src/lang/catalan.txt | 2 ++ src/lang/croatian.txt | 2 ++ src/lang/czech.txt | 2 ++ src/lang/danish.txt | 2 ++ src/lang/dutch.txt | 2 ++ src/lang/english_AU.txt | 2 ++ src/lang/english_US.txt | 2 ++ src/lang/esperanto.txt | 2 ++ src/lang/estonian.txt | 2 ++ src/lang/faroese.txt | 2 ++ src/lang/finnish.txt | 28 +++++++++++++++------------- src/lang/french.txt | 2 ++ src/lang/gaelic.txt | 2 ++ src/lang/galician.txt | 2 ++ src/lang/german.txt | 2 ++ src/lang/greek.txt | 2 ++ src/lang/hebrew.txt | 2 ++ src/lang/hungarian.txt | 2 ++ src/lang/icelandic.txt | 2 ++ src/lang/indonesian.txt | 2 ++ src/lang/irish.txt | 2 ++ src/lang/italian.txt | 2 ++ src/lang/japanese.txt | 2 ++ src/lang/korean.txt | 4 +++- src/lang/latin.txt | 2 ++ src/lang/latvian.txt | 2 ++ src/lang/lithuanian.txt | 2 ++ src/lang/luxembourgish.txt | 2 ++ src/lang/malay.txt | 2 ++ src/lang/norwegian_bokmal.txt | 2 ++ src/lang/norwegian_nynorsk.txt | 2 ++ src/lang/polish.txt | 2 ++ src/lang/portuguese.txt | 2 ++ src/lang/romanian.txt | 2 ++ src/lang/russian.txt | 2 ++ src/lang/serbian.txt | 2 ++ src/lang/simplified_chinese.txt | 2 ++ src/lang/slovak.txt | 2 ++ src/lang/slovenian.txt | 2 ++ src/lang/spanish.txt | 2 ++ src/lang/spanish_MX.txt | 2 ++ src/lang/swedish.txt | 2 ++ src/lang/tamil.txt | 2 ++ src/lang/thai.txt | 2 ++ src/lang/traditional_chinese.txt | 2 ++ src/lang/turkish.txt | 2 ++ src/lang/ukrainian.txt | 2 ++ src/lang/unfinished/chuvash.txt | 2 ++ src/lang/unfinished/frisian.txt | 2 ++ src/lang/unfinished/ido.txt | 2 ++ src/lang/unfinished/macedonian.txt | 2 ++ src/lang/unfinished/maltese.txt | 2 ++ src/lang/unfinished/marathi.txt | 2 ++ src/lang/unfinished/persian.txt | 2 ++ src/lang/unfinished/urdu.txt | 2 ++ src/lang/vietnamese.txt | 2 ++ src/lang/welsh.txt | 2 ++ 63 files changed, 140 insertions(+), 14 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index d8b05cac75..ae2f77bee2 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -3388,11 +3388,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Koop Voe STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Bou skip STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Koop vliegtuig + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Koop die gekose lokomotief/wa. Shift+klik vir kwotasie STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Koop die gekose voertuig. Shift+klik vir kwotasie STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Koop die gekose skip. Shift+klik vir kwotasie STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Koop die gekose vliegtuig. Shift+klik vir kwotasie + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Hernoem STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Hernoem STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Hernoem diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index ec0017d675..694f5643a6 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -2915,11 +2915,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}شراء STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}شراء سفينة STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}شراء طائرة + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}شراء العربة الموضحة STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}شراء العربة STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}شراء السفينة المختارة STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}اشتر الطائرة المختارة + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}اعادة تسمية STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}أعد التسمية STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}تسمية diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 6cec7bfd29..d390de5bf2 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -3275,11 +3275,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Ibilgail STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Itsasontia erosi STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Hegazkina erosi + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Aukeratuta dagoen ibilgailua erosi. Shift+Klik gutxi gora beherako kostea erakutsi STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Aukeratuta dagoen ibilgailua erosi. Shift+Klik gutxi gora beherako kostea erakutsi STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Aukeratuta dagoen itsasontzia erosi. Shift+Klik gutxi gora beherako kostea erakutsi STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Aukeratuta dagoen hegazkina erosi. Shift+Klik gutxi gora beherako kostea erakutsi + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Berrizendatu STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Berrizendatu STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Berrizendatu diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 917374e5d1..887dace4b5 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -3745,11 +3745,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Купі STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Купіць STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Купіць + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Набыць абраны лякаматыў/ваґон. Shift+пстрычка — ацэнка кошту набыцьця. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Набыць абраны аўтамабіль. Shift+пстрычка — ацэнка кошту набыцьця. STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Набыць абраны карабель. Shift+пстрычка — ацэнка кошту набыцьця. STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Набыць абраны авіятранспарт. Shift+пстрычка — ацэнка кошту набыцьця. + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Перайменаваць STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Перайменаваць STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Перайменаваць diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index b0c8a58167..cf75f47507 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -3455,11 +3455,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Comprar STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Comprar Embarcação STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Comprar Aeronave + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Compra o veículo ferroviário selecionado. Shift+Clique mostra preço estimado sem a compra STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Compra o veículo selecionado. Shift+Clique mostra preço estimado sem a compra STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Compra a embarcação selecionada. Shift+Clique mostra preço estimado sem a compra STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Compra a aeronave selecionada. Shift+Clique mostra o preço estimado sem a compra + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Renomear STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Renomear STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Renomear diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index ff4487443e..661589024b 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -3320,11 +3320,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Купи STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Купи Кораб STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Купи самолет + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Купи маркираният влак. Shift строеж/цена за построяване STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Купи посоченото МПС. Shift строеж/цена за построяване STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Купи посоченият кораб. Shift строеж/цена за построяване STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Купи посоченият самолет. Shift строеж/цена за построяване + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Преименувай STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Преименувай STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Промяна на име diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 012a5d3168..8d91307d03 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -3499,11 +3499,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Compra e STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Compra el vaixell STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Compra l'aeronau + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Compra el tren/vagó seleccionat. Amb Maj+Clic, mostra el cost estimat sense comprar-lo. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Compra el vehicle marcat. Amb Maj+Clic, mostra el cost estimat sense comprar-lo. STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Compra el vaixell seleccionat. Amb Maj+Clic, mostra el cost estimat sense comprar-lo. STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Compra l'aeronau marcada. Amb Maj+Clic, mostra el cost estimat sense comprar-la. + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Canvia el nom STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Canvia el nom STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Canvia el nom diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 831b159fd5..e494d10803 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -3597,11 +3597,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Kupi voz STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Kupi brod STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Kupi zrakoplov + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Kupi označeni vlak. Shift+Klik prikazuje trošak bez kupnje. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Kupi označeno cestovno vozilo. Shift+Klik prikazuje trošak bez kupnje. STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Kupi označeni brod. Shift+Klik prikazuje trošak bez kupnje. STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Kupi označeni zrakoplov. Shift+Klik prikazuje trošak bez kupnje. + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Preimenuj STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Preimenuj STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Preimenuj diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 618527bd9d..6ce6c2f1fe 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -3515,11 +3515,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Koupit v STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Koupit loď STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Koupit letadlo + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Kup označený vagon/lokomotivu. Stisknutý Shift pro zobrazení odhadu ceny STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Koupit označené vozidlo. Stisknutý Shift pro zobrazení odhadu ceny STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Koupit označenou loď. Stisknutý Shift pro zobrazení odhadu ceny STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Koupit označené letadlo. Stisknutý Shift pro zobrazení odhadu ceny + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Přejmenovat STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Přejmenovat STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Přejmenovat diff --git a/src/lang/danish.txt b/src/lang/danish.txt index c9ed344aa3..5ff50a961c 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -3501,11 +3501,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Køb kø STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Køb skib STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Køb et fly + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Køb det markerede lokomotiv/togvogn. Shift skifter mellem at købe og vise prisoverslag. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Køb det markerede køretøj. Shift skifter mellem at købe og vise prisoverslag. STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Køb det markerede skib. Shift skifter mellem at købe og vise prisoverslag. STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Køb det markerede fly. Shift skifter mellem at købe og vise prisoverslag. + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Omdøb STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Omdøb STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Omdøb diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 221caab94c..2886783ea6 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -3501,11 +3501,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Wegvoert STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Schip kopen STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Vliegtuig kopen + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Geselecteerd spoorvoertuig bouwen. Shift+klik geeft de verwachte kosten zonder te kopen. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde wegvoertuig. Shift+klik geeft de verwachte kosten zonder te kopen. STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde schip. Shift+klik geeft de verwachte kosten zonder te kopen STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde vliegtuig. Shift+klik geeft de verwachte kosten zonder te kopen. + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Hernoemen STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Hernoemen STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Hernoemen diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 1f3d9eef5d..d260a6a80e 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -3354,11 +3354,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Buy Vehi STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Buy Ship STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Buy Aircraft + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Buy the highlighted train vehicle. Shift+Click shows estimated cost without purchase STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Buy the highlighted road vehicle. Shift+Click shows estimated cost without purchase STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Buy the highlighted ship. Shift+Click shows estimated cost without purchase STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Buy the highlighted aircraft. Shift+Click shows estimated cost without purchase + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Rename STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Rename STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Rename diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index f02b1a2cd5..0d8b1b7127 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -3498,11 +3498,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Buy Vehi STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Buy Ship STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Buy Aircraft + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Buy the highlighted train vehicle. Shift+Click shows estimated cost without purchase STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Buy the highlighted road vehicle. Shift+Click shows estimated cost without purchase STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Buy the highlighted ship. Shift+Click shows estimated cost without purchase STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Buy the highlighted aircraft. Shift+Click shows estimated cost without purchase + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Rename STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Rename STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Rename diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 12e550a16c..c82efa0e07 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -2825,11 +2825,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Aĉeti V STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Aĉeti Ŝipon STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Aĉeti Aviadilon + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Aĉeti la emfazitan trajnveturilon. Montri taksitaj kostoj sen aĉeti per maljuskliga klavo + Klaki STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Aĉeti la emfazitan stratveturilon. Montri taksitaj kostoj sen aĉeti per maljuskliga klavo + Klaki STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Aĉeti la emfazitan ŝipon. Montri taksitaj kostoj sen aĉeti per maljuskliga klavo + Klaki STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Aĉeti la emfazitan aviadilon. Montri taksitaj kostoj sen aĉeti per maljuskliga klavo + Klaki + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Alinomi STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Alinomi STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Alinomi diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 39e74edd39..d60c39bd81 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -3466,11 +3466,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Ehita ve STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Ehita laev STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Ehita lennuk + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valitud raudteesõiduk. Shift+klõpsuga kuvatakse eeldatav ostuhind STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valitud mootorsõiduk. Shift+klõpsuga kuvatakse eeldatav ostuhind STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valitud laev. Shift+klõpsuga kuvatakse eeldatav ostuhind STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valitud õhusõiduk. Shift+klõpsuga kuvatakse eeldatav ostuhind + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Nimevahetus STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Nimevahetus STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Nimevahetus diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 803c761caf..55849f11be 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -3018,11 +3018,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Keyp akf STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Keyp skip STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Keyp flogfar + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Keyp undirstrikaða tok flutningstóli. Shift+trýst vísur kostnaðar meting uttan at keypa STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Keyp undirstrikaða akfari. Shift+trýst vísur kostnaðar meting uttan at keypa STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Keyp undirstrikaða skipi. Shift+trýst vísur kostnaðar meting uttan at keypa STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Keyp undirstrikaða flogfari. Shift+trýst vísur kostnaðar meting uttan at keypa + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Navngev STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Navngev STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Navngev diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 4dd1efa4ae..829e9b91bf 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1075,7 +1075,7 @@ STR_SEA_LEVEL_LOW :Matala STR_SEA_LEVEL_MEDIUM :Keskitaso STR_SEA_LEVEL_HIGH :Korkea STR_SEA_LEVEL_CUSTOM :Oma -STR_SEA_LEVEL_CUSTOM_PERCENTAGE :Oma ({NUM}%) +STR_SEA_LEVEL_CUSTOM_PERCENTAGE :Oma ({NUM}{NBSP}%) STR_RIVERS_NONE :Ei yhtään STR_RIVERS_FEW :Vähän @@ -1199,7 +1199,7 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Ajoneuvojen kii STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Valitsee ajoneuvojen käyttämän fysiikkamallin. "Alkuperäinen" malli hidastaa ajoneuvoja mäissä tasapuolisesta. "Realistinen" malli hidastaa ajoneuvoja mäissä niiden ominaisuuksista riippuen STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS :Mäkien jyrkkyys junille: {STRING} STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Mäkien jyrkkyys junille. Korkeammat arvot tekevät mäkien nousemisesta vaikeampaa -STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% +STR_CONFIG_SETTING_PERCENTAGE :{COMMA}{NBSP}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Mäkien jyrkkyys ajoneuvoille: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Mäkien jyrkkyys ajoneuvoille. Korkeammat arvot tekevät mäkien nousemisesta vaikeampaa STR_CONFIG_SETTING_FORBID_90_DEG :90 asteen käännökset kielletty junilta: {STRING} @@ -1652,9 +1652,9 @@ STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Mitä suuremmak STR_CONFIG_SETTING_DEMAND_DISTANCE :Välimatkan vaikutus kysyntään: {STRING} STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Mikäli asetuksen arvo on määritelty suuremmaksi kuin 0, alkuperäisen aseman A ja mahdollisen määränpään B välimatkalla on vaikutus A:sta B:hen lähetetyn rahdin määrään. Mitä kauempana B on A:sta, sitä vähemmän rahtia lähetetään. Mitä suuremmaksi tämä asetus on määritetty, sitä vähemmän rahtia lähetetään kaukana oleville ja enemmän lähellä oleville asemille. STR_CONFIG_SETTING_DEMAND_SIZE :Palautettavan rahdin määrä symmetrisessä tilassa: {STRING} -STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Mikäli asetuksen arvoksi on määritetty alle 100%, symmetrinen jakauma toimii enemmän epäsymmetrisen jakauman tavoin ja vähemmän rahtia pakotetaan lähetettäväksi takaisin alkuperäiselle asemalle. Jos arvoksi määritetään 0%, symmetrinen jakauma toimii täysin epäsymmetrisen jakauman tavoin. +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Mikäli asetuksen arvoksi on määritetty alle 100{NBSP}%, symmetrinen jakauma toimii enemmän epäsymmetrisen jakauman tavoin, ja vähemmän rahtia pakotetaan lähetettäväksi takaisin alkuperäiselle asemalle. Jos arvoksi määritetään 0{NBSP}%, symmetrinen jakauma toimii täysin epäsymmetrisen jakauman tavoin. STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Lyhyiden reittien kuormittuminen ennen vapaampien reittien käyttämistä: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Kahden aseman välillä on usein useita reittejä. Lyhintä reittiä käytetään ensisijaisesti, toisiksi lyhintä ensimmäisen kuormittuessa ja niin edelleen. Kuormitus määritellään arvioidun kapasiteetin ja suunnitellun käytön mukaan. Kaikkien reittien ollessa kuormittuneita reittejä aletaan ylikuormittamaan, suurimman kapasiteetin omaavista reiteista aloittaen. Algoritmi ei kuitenkaan aina arvioi kapasiteettia oikein. Tämä asetus mahdollistaa reitin kuormitustason määrittämisen ennen seuraavan reitin käyttämistä. Määritä arvoksi vähemmän kuin 100% välttääksesi ylikuormittuneita asemia jos kapasiteetti yliarvioidaan. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Kahden aseman välillä on usein useita reittejä. Lyhintä reittiä käytetään ensisijaisesti, toiseksi lyhintä ensimmäisen kuormittuessa ja niin edelleen. Kuormitus määritellään arvioidun kapasiteetin ja suunnitellun käytön mukaan. Kaikkien reittien ollessa kuormittuneita reittejä aletaan ylikuormittaa, suurimman kapasiteetin omaavista reiteista aloittaen. Algoritmi ei kuitenkaan aina arvioi kapasiteettia oikein. Tämä asetus mahdollistaa reitin kuormitustason määrittämisen ennen seuraavan reitin käyttämistä. Määritä arvoksi vähemmän kuin 100{NBSP}% välttääksesi ylikuormittuneita asemia, jos kapasiteetti yliarvioidaan. STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Nopeuden yksikkö: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Kun käyttöliittymässä näytetään nopeus, näytä se valittua yksikköä käyttäen @@ -2859,7 +2859,7 @@ STR_GENERATION_WORLD :{WHITE}Maailmaa STR_GENERATION_ABORT :{BLACK}Peruuta STR_GENERATION_ABORT_CAPTION :{WHITE}Keskeytä maailman luominen STR_GENERATION_ABORT_MESSAGE :{YELLOW}Haluatko varmasti keskeyttää maan luomisen? -STR_GENERATION_PROGRESS :{WHITE}{NUM}% valmiina +STR_GENERATION_PROGRESS :{WHITE}{NUM}{NBSP}% valmiina STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Maailman luominen STR_GENERATION_RIVER_GENERATION :{BLACK}Jokien luominen @@ -3067,7 +3067,7 @@ STR_TOWN_DIRECTORY_CAPTION :{WHITE}Kunnat STR_TOWN_DIRECTORY_NONE :{ORANGE}- Ei mitään - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (kaupunki){BLACK} ({COMMA}) -STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Kaupunkien nimet – keskitä päänäkymä kaupunkiin napsauttamalla nimeä. Ctrl+Klik avaa uuden näkymäikkunan kaupungin sijaintiin +STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Kuntien nimet – keskitä päänäkymä kuntaan napsauttamalla nimeä. Ctrl+Klik avaa uuden näkymäikkunan kunnan sijaintiin STR_TOWN_POPULATION :{BLACK}Maailman asukasluku: {COMMA} # Town view window @@ -3213,7 +3213,7 @@ STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPAN STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Arviot STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Näytä aseman arviot STR_STATION_VIEW_SUPPLY_RATINGS_TITLE :{BLACK}Kuukausittainen tarjonta ja paikallinen arvio: -STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%) +STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}{NBSP}%) STR_STATION_VIEW_GROUP :{BLACK}Järjestä STR_STATION_VIEW_WAITING_STATION :Asema: Odottaa @@ -3368,8 +3368,8 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Teollisuusala STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ei mitään - -STR_INDUSTRY_DIRECTORY_ITEM :{ORANGE}{INDUSTRY}{BLACK} ({CARGO_LONG}{STRING}){YELLOW} ({COMMA}% kuljetettu) -STR_INDUSTRY_DIRECTORY_ITEM_TWO :{ORANGE}{INDUSTRY}{BLACK} ({CARGO_LONG}{STRING}/{CARGO_LONG}{STRING}){YELLOW} ({COMMA}%/{COMMA}% kuljetettu) +STR_INDUSTRY_DIRECTORY_ITEM :{ORANGE}{INDUSTRY}{BLACK} ({CARGO_LONG}{STRING}){YELLOW} ({COMMA}{NBSP}% kuljetettu) +STR_INDUSTRY_DIRECTORY_ITEM_TWO :{ORANGE}{INDUSTRY}{BLACK} ({CARGO_LONG}{STRING}/{CARGO_LONG}{STRING}){YELLOW} ({COMMA}{NBSP}% / {COMMA}{NBSP}% kuljetettu) STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Teollisuusmuotojen nimet - kohdista päänäkymä teollisuuslaitokseen napsauttamalla nimeä. Ctrl+Klik avaa uuden näkymäikkunan teollisuuslaitoksen sijaintiin @@ -3378,7 +3378,7 @@ STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTR STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Tuotto viime kuussa: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}{NBSP}% kuljetettu) STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Keskitä päänäkymä teollisuuden sijaintiin. Ctrl+Klik avaa uuden näkymäikkunan teollisuuden sijaintiin -STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tuotantotaso: {YELLOW}{COMMA}% +STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Tuotantotaso: {YELLOW}{COMMA}{NBSP}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Teollisuuslaitos ilmoittaa pikaisesta sulkeutumisestaan! STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Tarvitsee: {YELLOW}{STRING}{STRING} @@ -3477,7 +3477,7 @@ STR_PURCHASE_INFO_RUNNINGCOST :{BLACK}Käyttö STR_PURCHASE_INFO_CAPACITY :{BLACK}Kapasiteetti: {GOLD}{CARGO_LONG} {STRING} STR_PURCHASE_INFO_REFITTABLE :(sovitettava) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Suunniteltu: {GOLD}{NUM}{BLACK} Elinikä: {GOLD}{COMMA} vuo{P si tta} -STR_PURCHASE_INFO_RELIABILITY :{BLACK}Enimmäisluotettavuus: {GOLD}{COMMA}% +STR_PURCHASE_INFO_RELIABILITY :{BLACK}Enimmäisluotettavuus: {GOLD}{COMMA}{NBSP}% STR_PURCHASE_INFO_COST :{BLACK}Hinta: {GOLD}{CURRENCY_LONG} STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Paino: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Hinta: {GOLD}{CURRENCY_LONG}{BLACK} Nopeus: {GOLD}{VELOCITY} @@ -3501,11 +3501,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Osta ajo STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Osta laiva STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Osta lentokone + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valittu yksikkö. Shift+Klik näyttää kustannusarvion ostamatta STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valittu ajoneuvo. Shift+Klik näyttää kustannusarvion ostamatta STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valittu laiva. Shift+Klik näyttää kustannusarvion ostamatta STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Osta korostettu lentokone. Shift+Klik näyttää kustannusarvion ostamatta + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Nimeä STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Nimeä STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Nimeä @@ -3756,7 +3758,7 @@ STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Paino: { STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Paino: {LTBLUE}{WEIGHT_SHORT} {BLACK}Teho: {LTBLUE}{POWER}{BLACK} Maks. nopeus: {LTBLUE}{VELOCITY} {BLACK}Maks. vetovoima: {LTBLUE}{FORCE} STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Tuotto tänä vuonna: {LTBLUE}{CURRENCY_LONG} (viime vuonna: {CURRENCY_LONG}) -STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Luotettavuus: {LTBLUE}{COMMA}% {BLACK}Hajoamiset viime huollon jälkeen: {LTBLUE}{COMMA} +STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Luotettavuus: {LTBLUE}{COMMA}{NBSP}% {BLACK}Hajoamiset viime huollon jälkeen: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}Rakennettu: {LTBLUE}{NUM}{BLACK} Arvo: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Kapasiteetti: {LTBLUE}-{STRING} @@ -3767,7 +3769,7 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Kapasite STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Siirron arvo: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Huoltoväli: {LTBLUE}{COMMA}{NBSP}päivää{BLACK} Viimeisin huolto: {LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Huoltoväli: {LTBLUE}{COMMA}%{BLACK} Viime huolto: {LTBLUE}{DATE_LONG} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Huoltoväli: {LTBLUE}{COMMA}{NBSP}%{BLACK} Viime huolto: {LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Kasvata huoltoväliä kymmenellä. Ctrl+Klik kasvattaa huoltoväliä viidellä STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Pienennä huoltoväliä kymmenellä. Ctrl+Klik vähentää huoltoväliä viidellä diff --git a/src/lang/french.txt b/src/lang/french.txt index e8e14582c3..e1387329ff 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -3495,11 +3495,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Acheter STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Acheter STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Acheter + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Acheter le véhicule sélectionné.{}Shift-clic pour afficher seulement le coût estimé. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Acheter le véhicule sélectionné.{}Shift-clic pour afficher seulement le coût estimé. STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Acheter le navire sélectionné.{}Shift-clic pour afficher seulement le coût estimé. STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Acheter l'aéronef sélectionné.{}Shift-clic pour afficher seulement le coût estimé. + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Renommer STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Renommer STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Renommer diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 3ed107d8b8..0fbc2328aa 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -3675,11 +3675,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Ceannaic STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Ceannaich long STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Ceannaich carbad-adhair + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Ceannaich an carbad-rèile a thagh thu. Seallaidh Shift+briogadh tuairmse air na cosgaisean gun a bhith a' ceannach dad STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Ceannaich an carbad-rathaid a thagh thu. Seallaidh Shift+briogadh tuairmse air na cosgaisean gun a bhith a' ceannach dad STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Ceannaich an long a thagh thu. Seallaidh Shift+briogadh tuairmse air na cosgaisean gun a bhith a' ceannach dad STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Ceannaich an carbad-adhair a thagh thu. Seallaidh Shift+briogadh tuairmse air na cosgaisean gun a bhith a' ceannach dad + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Thoir ainm ùr air STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Thoir ainm ùr air STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Thoir ainm ùr air diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 3fcc850c4c..7320dc9820 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -3400,11 +3400,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Mercar v STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Mercar barco STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Mercar aeronave + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Mercar o vehículo ferroviario seleccionado. Shift+click mostra o custo estimado sen mercar STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Mercar o vehículo de estrada seleccionado. Shift+click mostra o custo estimado sen mercar STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Mercar o barco seleccionado. Shift+click mostra o custo estimado sen mercar STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Mercar a aeronave seleccionada. Shift+click mostra o custo estimado sen mercar + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Renomear STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Renomear STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Renomear diff --git a/src/lang/german.txt b/src/lang/german.txt index 713257785e..1092b12da1 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -3480,11 +3480,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Fahrzeug STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Schiff kaufen STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Flugzeug kaufen + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Angewähltes Fahrzeug kaufen. Shift+Klick zeigt einen Kostenvoranschlag STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Ausgewähltes Fahrzeug kaufen. Shift+Klick zeigt einen Kostenvoranschlag STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Ausgewähltes Schiff kaufen. Shift+Klick zeigt einen Kostenvoranschlag STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Augewähltes Flugzeug kaufen. Shift schaltet zwischen Bauen und Kostenvoranschlag um + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Umbenennen STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Umbenennen STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Umbenennen diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 2591066016..5c07295585 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -3558,11 +3558,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Αγορ STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Αγορά Πλοίου STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Αγορά Αεροσκάφους + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Αγοράστε το επιλεγμένο όχημα τρένου. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Αγοράστε το επιλεγμένο όχημα δρόμου. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Αγοράστε το επιλεγμένο πλοίο. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Αγοράστε το επιλεγμένο αεροσκάφος. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Μετονομασία STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Μετονομασία STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Μετονομασία diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 18845ea441..726c91ceeb 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -3453,11 +3453,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}רכוש STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}רכוש כלי שייט STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}רכוש כלי טייס + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}רכוש את קרון הרכבת שמודגש. Shift+לחיצה מציג הערכת עלות ללא רכישה STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}רכוש את כלי הרכב שמודגש. Shift+לחיצה מציג הערכת עלות ללא רכישה STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}רכוש את כלי השייט שמודגש. Shift+לחיצה מציג הערכת עלות ללא רכישה STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}רכוש את כלי הטייס שמודגש. Shift+לחיצה מציג הערכת עלות ללא רכישה + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}שנה שם STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}שנה שם STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}החלף שם diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 3f2c2b40eb..8268a8ab95 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -3564,11 +3564,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Megvesz STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Megvesz STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Megvesz + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}A kijelölt vasúti jármű megvétele. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}A kijelölt közúti jármű megvétele. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}A kijelölt hajó megvétele. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}A kijelölt repülőgép megvétele. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Átnevez STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Átnevez STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Átnevez diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 1fada9f414..3efad55181 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -3176,11 +3176,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Kaupa bi STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Kaupa skip STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Kaupa flugvél + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Kaupa valinn lestarvagn. Shift+smella sýnir áætlaðan kostnað án þess að kaupa STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Kaupa valda bifreið. Shift+smella sýnir áætlaðan kostnað án þess að kaupa STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Kaupa valið skip. Shift+smella sýnir áætlaðan kostnað án þess að kaupa STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Kaupa valda flugvél. Shift+smella sýnir áætlaðan kostnað án þess að kaupa + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Endurnefna STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Endurnefna STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Endurnefna diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index ff220fc1d5..b682f23c04 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -3428,11 +3428,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Beli Ken STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Beli Kapal STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Beli Pesawat + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Beli kereta yang dipilih. Shift untuk menampilkan perkiraan biaya STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Beli kendaraan yang dipilih. Shift untuk menampilkan perkiraan biaya STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Beli kapal yang dipilih. Shift untuk menampilkan perkiraan biaya STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Beli pesawat yang dipilih. Shift untuk menampilkan perkiraan biaya + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Ubah Nama STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Ganti Nama STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Ubah Nama diff --git a/src/lang/irish.txt b/src/lang/irish.txt index c845d4c5f5..dcc0a5729b 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -3387,11 +3387,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Ceannaig STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Ceannaigh Long STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Ceannaigh Aerárthach + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Ceannaigh an fheithicil traenach aibhsithe STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Ceannaigh an fheithicil bóthair aibhsithe STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Ceannaigh an long aibhsithe STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Ceannaigh an t-aerárthach aibhsithe + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Athainmnigh STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Athainmnigh STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Athainmnigh diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 2b629806de..d0232ddc6d 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -3524,11 +3524,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Compra v STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Compra nave STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Compra aeromobile + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Compra il veicolo ferroviario selezionato. MAIUSC+clic mostra il costo stimato senza comprare STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Compra l'automezzo selezionato. MAIUSC+clic mostra il costo stimato senza comprare STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Compra la nave selezionata. MAIUSC+clic mostra il costo stimato senza comprare STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Compra l'aeromobile selezionato. MAIUSC+clic mostra il costo stimato senza comprare + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Rinomina STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Rinomina STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Rinomina diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index c3c5fe89f9..bfddda4e69 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -3389,11 +3389,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}車両 STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}船舶を購入 STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}航空機を購入 + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}選択した列車を購入します。Shift+クリックで購入費を見積もります STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}選択した車両を購入します。Shift+クリックで購入費を見積もります STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}選択した船舶を購入します。Shift+クリックで購入費を見積もります STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}選択した航空機を購入します。Shift+クリックで購入費を見積もります + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}名称を変更 STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}名称を変更 STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}名称を変更 diff --git a/src/lang/korean.txt b/src/lang/korean.txt index a57e08bda5..7e7780f2b4 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -2140,7 +2140,7 @@ STR_NETWORK_CHAT_ALL :[모두] {STRIN STR_NETWORK_CHAT_OSKTITLE :{BLACK}채팅 메시지를 입력하세요. # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}네트워크 장치를 찾을수 없거나 게임 자체가 네트워크를 사용할 수 없는 버전으로 컴파일되었습니다. +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}사용할 수 있는 네트워크 장치가 없습니다. STR_NETWORK_ERROR_NOSERVER :{WHITE}네트워크 게임이 존재하지 않습니다. STR_NETWORK_ERROR_NOCONNECTION :{WHITE}서버가 요청을 받지 않습니다. STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}NewGRF이 맞지 않아서 연결할 수 없습니다 @@ -3502,11 +3502,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}차량 STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}선박 구입 STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}항공기 구입 + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}선택된 차량을 구입합니다. SHIFT+클릭으로 예상 구입 가격을 볼 수 있습니다. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}선택한 차량을 구입합니다. Shift+클릭하면 예상 구입 비용을 볼 수 있습니다. STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}선택한 선박을 구입합니다. SHIFT+클릭으로 예상 구입 비용을 볼 수 있습니다. STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}선택한 항공기를 구입합니다. SHIFT+클릭으로 예상 구입 비용을 볼 수 있습니다. + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}이름 STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}이름 지정 STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}이름 지정 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 10a0ea29be..bfc7157c90 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -3613,11 +3613,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Emere Ve STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Emere Navem STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Emere Aeroplanum + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Emere vehiculum ferriviarium electum. Shift+Preme ut pretium monstretur sine emptione STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Emere vehiculum viarium electum. Shift+Preme ut pretium monstretur sine emptione STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Emere navem electam. Shift+Preme ut pretium monstretur sine emptione STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Emere aeroplanum electum. Shift+Preme ut pretium monstretur sine emptione + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Renominare STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Renominare STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Renominare diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index c457ac0019..4c5dd5e273 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -3331,11 +3331,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Pirkt au STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Pirkt kuģi STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Pirkt lidaparātu + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkt atzīmēto vilciena vagonu. Shift+klikšķis rāda izmaksu novērtējumu, neveicot pirkumu STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkt atzīmēto transportlīdzekli. Shift+klikšķis rāda izmaksu novērtējumu, neveicot pirkumu STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkt atzīmēto kuģi. Shift+klikšķis rāda izmaksu novērtējumu, neveicot pirkumu STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkt izvēlēto lidaparātu. Shift+klikšķis rāda izmaksu novērtējumu, neveicot pirkumu + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Pārdēvēt STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Pārdēvēt STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Pārdēvēt diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index cf5290f6d6..e7dfead7b6 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -3606,11 +3606,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Pirkti STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Pirkti STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Pirkti + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkti pažymėtą lokomotyvą ir/ar vagonus. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodyta pirkinio kaina nieko realiai nenuperkant STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkti pažymėtą automobilį. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodyta pirkinio kaina nieko realiai nenuperkant STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkti pažymėtą laivą. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodyta pirkinio kaina nieko realiai nenuperkant STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkti pažymėtą lėktuvą. Spragtelėjus laikant nuspaustą Shift klavišą, bus parodyta pirkinio kaina nieko realiai nenuperkant + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Pervardinti STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Pervardinti STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Pervardinti diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 4f2d85377f..2ef5814f8c 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -3427,11 +3427,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Gefier k STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Schëff kafen STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Fliger kafen + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Keeft den ungewielten Zuch. Shift+Klick weist ongeféier Käschten ouni Kaf STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Keeft dat ugewielte Stroossegefier. Shift+Klick weist ongeféier Käschten ouni Kaf STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Keeft dat ugewielte Schëff. Shift+Klick weist ongeféier Käschten ouni Kaf STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Keeft den ungewielte Fliger. Shift+Klick weist ongeféier Käschten ouni Kaf + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Ëmbenennen STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Ëmbenennen STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Ëmbenennen diff --git a/src/lang/malay.txt b/src/lang/malay.txt index ddaf825a83..faf57b8906 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -3086,11 +3086,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Beli Ken STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Beli Kapal STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Beli Pesawat + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Beli gerabak keretapi yang terpilih. Shift+Klik menunjukkan anggaran kos tanpa membeli STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Beli kenderaan jalanraya yang terpilih. Shift+Klik menunjukkan anggaran kos tanpa membeli STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Beli kapal yang terpilih. Shift+Klik menunjukkan anggaran kos tanpa membeli STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Beli pesawat yang terpilih. Shift+Klik menunjukkan anggaran kos tanpa membeli + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Namakan semula STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Namakan semula STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Namakan semula diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 8c565bec81..54a4766de5 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -3505,11 +3505,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Kjøp kj STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Kjøp skip STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Kjøp luftfartøy + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Kjøp det merkede tog/vogn. Shift+klikk viser estimert kostnad STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Kjøp det merkede kjøretøy. Shift+klikk viser estimert kostnad STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Kjøp det merkede skip. Shift+klikk viser estimert kostnad STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Kjøp det merkede luftfartøy. Shift+klikk viser estimert kostnad + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Endre navn STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Endre navn STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Endre navn diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 8e6948d9ab..787a42d7f6 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -3306,11 +3306,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Kjøp k STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Bygg skip STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Bygg luftfartøy + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Bygg den valde farkosten. Skift-klikk viser prisoverslag utan å kjøpe. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Bygg det valde køyretøyet. Skift-klikk viser prisoverslag utan å kjøpe. STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Bygg det valde skipet. Skift-klikk viser prisoverslag utan å kjøpe. STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Bygg det valde luftfartøyet. Skift-klikk viser prisoverslag utan å kjøpe. + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Gje nytt namn STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Endre namn STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Endre namn diff --git a/src/lang/polish.txt b/src/lang/polish.txt index f44de0b917..4ec0ada640 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3839,11 +3839,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Kup poja STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Kup statek STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Kup samolot + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Kup zaznaczony pociąg. Shift+klik pokazuje szacunkowy koszt bez dokonania zakupu STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Kup zaznaczony pojazd drogowy. Shift+klik pokazuje szacunkowy koszt bez dokonania zakupu STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Kup zaznaczony statek. Shift+klik pokazuje szacunkowy koszt bez dokonania zakupu STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Kup zaznaczony samolot. Shift+klik pokazuje szacunkowy koszt bez dokonania zakupu + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Zmień nazwę STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Zmień nazwę STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Zmień nazwę diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 503dcacf63..e44f53f1ef 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -3495,11 +3495,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Comprar STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Comprar Barco STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Comprar Aeronave + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar o veículo ferroviário seleccionado. Shift+Clique mostra estimativa de custo, sem comprar STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar o veículo rodoviário seleccionado. Shift+Clique mostra estimativa de custo, sem comprar STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar barco seleccionado. Shift+Clique mostra estimativa de custo, sem comprar STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar aeronave seleccionada. Shift+Clique mostra estimativa de custo, sem comprar + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Renomear STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Renomear STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Renomear diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index b1c80d97dc..1aabd80fa4 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -3374,11 +3374,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Cumpăr STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Cumpără navă STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Cumpără aeronavă + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Cumpără vehiculul feroviar selectat. Shift+Click arată costul estimat fără să cumpere vehiculul STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Cumpără autovehiculul selectat. Shift+Click arată costul estimat fără să cumpere autovehiculul STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Cumpără nava selectată. Shift+Click arată costul estimativ fără a efectua achiziţia STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Cumpără aeronava selectată. Shift+Click arată costul estimativ fără a efectua achiziţia + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Nume nou STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Nume nou STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Nume nou diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 5106114e39..fbc70a0399 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -3681,11 +3681,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Купи STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Купить STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Купить + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Купить выбранный локомотив/вагон. Shift+щелчок - оценка стоимости покупки. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Купить выбранный автомобиль. Shift+щелчок - оценка стоимости покупки. STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Купить выбранный корабль. Shift+щелчок - оценка стоимости покупки. STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Купить выбранный авиатранспорт. Shift+щелчок - оценка стоимости покупки. + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Переименовать STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Переименовать STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Переименовать diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index b1efd373e3..57c172f64e 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -3606,11 +3606,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Kupi Voz STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Kupi Brod STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Kupi Letelicu + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Kupuje označeno šinsko vozilo. Shift+Klik prikazuje procenu troškova bez kupovine STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Kupuje označeno drumsko vozilo. Shift+Klik prikazuje procenu troškova bez kupovine STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Kupuje označeni brod. Shift+Klik prikazuje procenu troškova bez kupovine STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Kupuje označenu letilicu. Shift+Klik prikazuje procenu troškova bez kupovine + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Preimenuj STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Promena naziva STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Preimenuj diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 61983f80a3..7235f8e55d 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -3419,11 +3419,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}购买 STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}购买船只 STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}购买飞机 + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}购买选定的列车,按住 Shift 键单击可以显示所需资金 STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}购买选定的汽车,按住 Shift 键单击可以显示所需资金 STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}购买选定的船只,按住 Shift 键单击可以显示所需资金 STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}购买选定的飞机,按住 Shift 键单击可以显示所需资金 + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}重命名 STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}重命名 STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}重命名 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 8cb3a35042..0540846b61 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -3455,11 +3455,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Kúpiť STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Kúpiť loď STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Kúpiť lietadlo + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybraný vlak. Shift+klik zobrazí predpokladanú cenu bez nákupu. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybrané vozidlo. Shift+klik zobrazí predpokladanú cenu bez nákupu STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybranú loď. Shift+klik zobrazí predpokladanú cenu bez nákupu STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Kúpiť vybrané lietadlo. Shift+klik zobrazí predpokladanú cenu bez nákupu + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Premenovať STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Premenovať STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Premenovať diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 63bbff4ef7..dc98d79e62 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -3541,11 +3541,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Kupi voz STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Kupi ladjo STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Kupi letalo + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Kupi izbrano železniško vozilo. Shift+Klik prikaže predviden strošek brez nakupa STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Kupi izbrano cestno vozilo. Shift+Klik prikaže predviden strošek brez nakupa STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Kupi izbrano ladjo. Shift+Klik prikaže predviden strošek brez nakupa STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Kupi izbrano letalo. Shift+Klik prikaže predviden strošek brez nakupa + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Preimenuj STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Preimenuj STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Preimenuj diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index b2ed3fc171..cb1b91d1b4 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -3446,11 +3446,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Comprar STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Comprar barco STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Comprar aeronave + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Compra el vehículo de ferrocarril resaltado. Shift+Click muestra una estimación del precio sin realizar la compra STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar el vehículo de carretera resaltado. Shift+Click muestra una estimación del precio sin realizar la compra STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar el barco resaltado. Shift+Click muestra una estimación del precio sin realizar la compra STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar la aeronave resaltada. Shift+Click muestra una estimación del precio sin realizar la compra + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Renombrar STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Renombrar STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Renombrar diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 946c35f0c3..bc0ec7d5bb 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -3495,11 +3495,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Comprar STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Comprar STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Comprar + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar el tren elegido. Mayús+Clic muestra una estimación del precio sin realizar la compra STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar el vehículo de carretera elegido. Mayús+Clic muestra una estimación del precio sin realizar la compra STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar el barco elegido. Mayús+Clic muestra una estimación del precio sin realizar la compra STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar la aeronave elegida. Mayús+Clic muestra una estimación del precio sin realizar la compra + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Cambiar nombre STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Cambiar nombre STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Cambiar nombre diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index e0351daa7a..5a18425d3f 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -3479,11 +3479,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Köp for STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Köp skepp STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Köp flygplan + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Köp markerad tågvagn. Shift+klick visar kostnad utan att köpa STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Köp markerat vägfordon. Shift+klick visar kostnad utan att köpa STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Köp markerat skepp. Shift+klick visar kostnad utan att köpa STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Köp markerat flygplan. Shift+klick visar kostnad utan att köpa + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Byt namn på STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Byt namn på STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Byt namn på diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 34b413eea0..da1a772df0 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -3006,11 +3006,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}வா STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}கப்பலை வாங்கு STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}விமானத்தை வாங்கு + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}காட்டப்படும் இரயில் வாகனத்தை வாங்கவும். Shift+Click செய்தால் வாங்கும்போது ஆகும் மதிப்பிடப்பட்டச் செலவுகளைக் காட்டு STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}காட்டப்படும் சாலை வாகனத்தை வாங்கவும். Shift+Click செய்தால் வாங்கும்போது ஆகும் மதிப்பிடப்பட்டச் செலவுகளைக் காட்டும் STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}காட்டப்படும் கப்பலை வாங்கவும். Shift+Click செய்தால் வாங்கும்போது ஆகும் மதிப்பிடப்பட்டச் செலவுகளைக் காட்டும் STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}காட்டப்படும் விமானத்தை வாங்கவும். Shift+Click செய்தால் வாங்கும்போது ஆகும் மதிப்பிடப்பட்டச் செலவுகளைக் காட்டும் + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}பெயரிடு STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}பெயரிடு STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}பெயரிடு diff --git a/src/lang/thai.txt b/src/lang/thai.txt index a315f95639..78c26c65b0 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -3317,11 +3317,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}ซื STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}ซื้อเรือ STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}ซื้อเครื่องบิน + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}ซื้อรถไฟที่เลือกไว้ เมื่อกด Shift+คลิกเมาส์ จะแสดงมูลค่าโดยประมาณโดยไม่ทำการซื้อ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}ซื้อรถที่เลือกไว้ เมื่อกด Shift+คลิกเมาส์ จะแสดงมูลค่าโดยประมาณโดยไม่ทำการซื้อ STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}ซื้อเรือที่เลือกไว้ เมื่อกด Shift+คลิกเมาส์ จะแสดงมูลค่าโดยประมาณโดยไม่ทำการซื้อ STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}ซื้อเครื่องบินที่เลือกไว้ เมื่อกด Shift+คลิกเมาส์ จะแสดงมูลค่าโดยประมาณโดยไม่ทำการซื้อ + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}เปลี่ยนชื่อ STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}เปลี่ยนชื่อ STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}เปลี่ยนชื่อ diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index c9cbddb9ca..b3f1b63f51 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -3387,11 +3387,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}購買 STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}購買船舶 STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}購買飛機 + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}購買選定的列車。按住 Shift 點選則只會顯示預估的購買費用 STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}購買選定的車輛。按住 Shift 點選則只會顯示預估的購買費用 STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}購買選定的船舶。按住 Shift 點選則只會顯示預估的購買費用 STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}購買選定的飛機。按住 Shift 點選則只會顯示預估的購買費用 + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}重新命名 STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}重新命名 STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}重新命名 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 93a386398c..270a30a91c 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -3488,11 +3488,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Araç Sa STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Gemi Satın Al STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Uçak Satın Al + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Seçili treni satın al. Shift ile tıklama satın almadan tahmini maliyeti gösterir. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}İşaretli aracı al. Shift ile tıklama satın almadan tahmini maliyeti gösterir STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Seçili gemiyi satın al. Shift ile tıklama satın almadan tahmini maliyeti gösterir STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Seçili uçağı satın al. Shift ile tıklama satın almadan tahmini maliyeti gösterir + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Yeni isim STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}İsim STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}İsim diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 4e7b87d229..452c0f9783 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -3630,11 +3630,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Купи STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Купити STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Купити + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Купити вибраний поїзд. Утримуйте Shift для показу витрат на придбання STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Купити вибране авто. Утримуйте Shift для показу витрат на придбання STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Купити вибраний корабель. Утримуйте Shift для показу витрат на придбання STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Купити вибраний літак. Утримуйте Shift для показу витрат на придбання + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Назва STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Зміна назви STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Зміна назви diff --git a/src/lang/unfinished/chuvash.txt b/src/lang/unfinished/chuvash.txt index e858a0bbc8..e7b0adbda5 100644 --- a/src/lang/unfinished/chuvash.txt +++ b/src/lang/unfinished/chuvash.txt @@ -1147,6 +1147,8 @@ STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ҫу + + # Depot window STR_DEPOT_CAPTION :{WHITE}{DEPOT} diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index df1ffd3c04..8b02042810 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -3115,11 +3115,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Keapje a STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Keapje boat STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Keapje fleantúg + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Keapje ferljochte trein STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Keapje ferljochte auto STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Keapje ferljochte boat STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Keapje ferljochte fleantúg + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Jow in nije namme STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Jow in nije namme STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Jow in nije namme diff --git a/src/lang/unfinished/ido.txt b/src/lang/unfinished/ido.txt index dcc3027782..f850fc769a 100644 --- a/src/lang/unfinished/ido.txt +++ b/src/lang/unfinished/ido.txt @@ -985,6 +985,8 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Negrupigita aer + + # Depot window STR_DEPOT_CAPTION :{WHITE}{DEPOT} diff --git a/src/lang/unfinished/macedonian.txt b/src/lang/unfinished/macedonian.txt index b25ee84b06..b927c74a82 100644 --- a/src/lang/unfinished/macedonian.txt +++ b/src/lang/unfinished/macedonian.txt @@ -1459,8 +1459,10 @@ STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Лист STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Направи авион + STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Направи авион од селектираниот тип + STR_BUY_VEHICLE_AIRCRAFT_RENAME_BUTTON :{BLACK}Преименувај STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Преименувај го типот на авиони diff --git a/src/lang/unfinished/maltese.txt b/src/lang/unfinished/maltese.txt index f25027744e..f66ee02a6d 100644 --- a/src/lang/unfinished/maltese.txt +++ b/src/lang/unfinished/maltese.txt @@ -857,6 +857,8 @@ STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURREN + + # Depot window STR_DEPOT_CAPTION :{WHITE}{DEPOT} diff --git a/src/lang/unfinished/marathi.txt b/src/lang/unfinished/marathi.txt index cfc34dcc4b..a79303bcbf 100644 --- a/src/lang/unfinished/marathi.txt +++ b/src/lang/unfinished/marathi.txt @@ -1330,6 +1330,8 @@ STR_PURCHASE_INFO_COST_SPEED :{BLACK}कि + + # Depot window STR_DEPOT_CAPTION :{WHITE}{DEPOT} diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index 763f267c6f..4d54b92cfd 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -2960,10 +2960,12 @@ STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}ساخت STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}خرید وسیله نقلیه STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}خرید هواپیما + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}خرید قطار مشخص شده. Shift+Click کنید تا قبل از خرید، مبلغ تقریبی آنرا نمایش دهد STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}خرید کشتی مشخص شده . Shift+Click کنید تا هزینه تقریبی نمایش داده شود STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}خرید هواپیمای مشخص شده. برای مشاهده هزینه تقریبی Shift+Click کنید + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}تغییر نام STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}تغییر نام STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}نام گذاری مجدد diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index 73e794ca7c..25bc51f680 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -2354,6 +2354,8 @@ STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}پہنچ + + STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON :{BLACK}چهپایں STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_TOGGLE_BUTTON :{BLACK}چهپایں STR_BUY_VEHICLE_SHIP_HIDE_TOGGLE_BUTTON :{BLACK}چهپایں diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 190541c7a1..652ae6ef3e 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -3458,11 +3458,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Mua P.Ti STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Mua tàu STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Mua Máy Bay + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Mua tàu hỏa đã ấn định. Shift+Click để xem giá mua dự tính STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Mua xe đã ấn định. Shift+Click để xem giá mua dự tính STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Mua tàu đã ấn định. Shift+Click để xem giá mua dự tính STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Mua máy bay đã ấn định. Shift+Click để xem giá mua dự tính + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Thay tên STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Thay tên STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Thay tên diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index e5e451d8b9..172f11f7a3 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -3399,11 +3399,13 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Prynu Ce STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Prynu Llong STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Prynu Awyren + STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Adeiladu'r cerbyd trên sydd wedi'i amlygu. Mae Shift+Clic yn dangos amcangyfrif o'r gost STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Adeiladu'r cerbyd ffordd sydd wedi'i amlygu. Mae Shift+Clic yn dangos amcangyfrif o'r gost STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Adeiladu'r llong sydd wedi'i hamlygu. Mae Shift+Clic yn dfangos amcangyfrif o'r gost STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Adeiladu'r awyren sydd wedi'i hamlygu. Mae Shift+Clic yn dangos amcangyfrif o'r gost + STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Ailenwi STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Ailenwi STR_BUY_VEHICLE_SHIP_RENAME_BUTTON :{BLACK}Ailenwi From 10f0c1e3cdd1f45dd3de5a12170ef870f27c2c32 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 25 Mar 2019 19:45:45 +0100 Subject: [PATCH 539/622] Update: Translations from eints finnish: 12 changes by hpiirai greek: 40 changes by Jubilee luxembourgish: 2 changes by Phreeze dutch: 12 changes by JanWillem french: 4 changes by romazoon norwegian (bokmal): 12 changes by Leifbk hungarian: 14 changes by Brumi portuguese: 51 changes by JayCity, 11 changes by vesgo --- src/lang/dutch.txt | 13 +++- src/lang/finnish.txt | 13 +++- src/lang/french.txt | 4 ++ src/lang/greek.txt | 44 ++++++++++++-- src/lang/hungarian.txt | 16 ++++- src/lang/luxembourgish.txt | 2 + src/lang/norwegian_bokmal.txt | 13 +++- src/lang/portuguese.txt | 110 +++++++++++++++++++--------------- 8 files changed, 158 insertions(+), 57 deletions(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 2886783ea6..ffb7e914d3 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -2939,7 +2939,7 @@ STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Sla de h STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}NewGRF-parameters wijzigen STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Sluiten STR_NEWGRF_PARAMETERS_RESET :{BLACK}Terugstellen -STR_NEWGRF_PARAMETERS_RESET_TOOLTIP :{BLACK}Zet alle parameters naar de standaardwaarde +STR_NEWGRF_PARAMETERS_RESET_TOOLTIP :{BLACK}Stel alle parameters terug naar de standaardwaarde STR_NEWGRF_PARAMETERS_DEFAULT_NAME :Parameter {NUM} STR_NEWGRF_PARAMETERS_SETTING :{STRING}: {ORANGE}{STRING} STR_NEWGRF_PARAMETERS_NUM_PARAM :{LTBLUE}Aantal parameters: {ORANGE}{NUM} @@ -3469,6 +3469,7 @@ STR_BUY_VEHICLE_SHIP_CAPTION :Nieuwe schepen STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nieuwe vliegtuigen STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Kosten: {GOLD}{CURRENCY_LONG}{BLACK} Gewicht: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Kosten: {GOLD}{CURRENCY_LONG}{BLACK} (ombouwkosten: {GOLD}{CURRENCY_LONG}{BLACK}) Gewicht: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Snelheid: {GOLD}{VELOCITY}{BLACK} Vermogen: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Snelheid: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Snelheid op oceaan: {GOLD}{VELOCITY} @@ -3479,8 +3480,10 @@ STR_PURCHASE_INFO_REFITTABLE :(ombouwbaar) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Ontworpen: {GOLD}{NUM}{BLACK} Levensduur: {GOLD}{COMMA} jaar STR_PURCHASE_INFO_RELIABILITY :{BLACK}Max. betrouwbaarheid: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Kosten: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Kosten: {GOLD}{CURRENCY_LONG}{BLACK} (ombouwkosten: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Gewicht: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Kosten: {GOLD}{CURRENCY_LONG}{BLACK} Snelheid: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Kosten: {GOLD}{CURRENCY_LONG}{BLACK} (ombouwkosten: {GOLD}{CURRENCY_LONG}{BLACK}) Snelheid: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capaciteit: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Aangedreven wagons: {GOLD}+{POWER}{BLACK} Gewicht: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Om te bouwen naar: {GOLD}{STRING} @@ -3501,12 +3504,20 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Wegvoert STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Schip kopen STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Vliegtuig kopen +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Voertuig kopen en ombouwen +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Voertuig kopen en ombouwen +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Schip kopen en ombouwen +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Vliegtuig kopen en ombouwen STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Geselecteerd spoorvoertuig bouwen. Shift+klik geeft de verwachte kosten zonder te kopen. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde wegvoertuig. Shift+klik geeft de verwachte kosten zonder te kopen. STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde schip. Shift+klik geeft de verwachte kosten zonder te kopen STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde vliegtuig. Shift+klik geeft de verwachte kosten zonder te kopen. +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Koop de geselecteerde trein en bouw hem om. Shift+klik geeft de verwachte kosten zonder te kopen. +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde wegvoertuig en bouw het om. Shift+klik geeft de geschatte kosten zonder te kopen. +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde schip en bouw het om. Shift+klik geeft de verwachte kosten zonder te kopen. +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Koop het geselecteerde vliegtuig en bouw het om. Shift+klik geeft de verwachte kosten zonder te kopen. STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Hernoemen STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Hernoemen diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 829e9b91bf..42e3fdb45b 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -137,7 +137,7 @@ STR_ABBREV_OIL :{TINY_FONT}ÖL STR_ABBREV_LIVESTOCK :{TINY_FONT}KA STR_ABBREV_GOODS :{TINY_FONT}TA STR_ABBREV_GRAIN :{TINY_FONT}VL -STR_ABBREV_WOOD :{TINY_FONT}PT +STR_ABBREV_WOOD :{TINY_FONT}PU STR_ABBREV_IRON_ORE :{TINY_FONT}RM STR_ABBREV_STEEL :{TINY_FONT}TR STR_ABBREV_VALUABLES :{TINY_FONT}AT @@ -3469,6 +3469,7 @@ STR_BUY_VEHICLE_SHIP_CAPTION :Uusia laivoja STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Uusi lentokone STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Hinta: {GOLD}{CURRENCY_LONG}{BLACK} Paino: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Hinta: {GOLD}{CURRENCY_LONG}{BLACK} (Sovituskustannus: {GOLD}{CURRENCY_LONG}{BLACK}) Paino: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Nopeus: {GOLD}{VELOCITY}{BLACK} Teho: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Nopeus: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Nopeus merellä: {GOLD}{VELOCITY} @@ -3479,8 +3480,10 @@ STR_PURCHASE_INFO_REFITTABLE :(sovitettava) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Suunniteltu: {GOLD}{NUM}{BLACK} Elinikä: {GOLD}{COMMA} vuo{P si tta} STR_PURCHASE_INFO_RELIABILITY :{BLACK}Enimmäisluotettavuus: {GOLD}{COMMA}{NBSP}% STR_PURCHASE_INFO_COST :{BLACK}Hinta: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Hinta: {GOLD}{CURRENCY_LONG}{BLACK} (Sovituskustannus: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Paino: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Hinta: {GOLD}{CURRENCY_LONG}{BLACK} Nopeus: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Hinta: {GOLD}{CURRENCY_LONG}{BLACK} (Sovituskustannus: {GOLD}{CURRENCY_LONG}{BLACK}) Nopeus: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapasiteetti: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Moottoroidut vaunut: {GOLD}+{POWER}{BLACK} Paino: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Sovitettavissa: {GOLD}{STRING} @@ -3501,12 +3504,20 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Osta ajo STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Osta laiva STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Osta lentokone +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Osta ja sovita yksikkö +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Osta ja sovita ajoneuvo +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Osta ja sovita laiva +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Osta ja sovita lentokone STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valittu yksikkö. Shift+Klik näyttää kustannusarvion ostamatta STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valittu ajoneuvo. Shift+Klik näyttää kustannusarvion ostamatta STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Osta valittu laiva. Shift+Klik näyttää kustannusarvion ostamatta STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Osta korostettu lentokone. Shift+Klik näyttää kustannusarvion ostamatta +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja sovita valittu yksikkö. Shift+Klik näyttää kustannusarvion ostamatta +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja sovita valittu ajoneuvo. Shift+Klik näyttää kustannusarvion ostamatta +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja sovita valittu laiva. Shift+Klik näyttää kustannusarvion ostamatta +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Osta ja sovita valittu lentokone. Shift+Klik näyttää kustannusarvion ostamatta STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Nimeä STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Nimeä diff --git a/src/lang/french.txt b/src/lang/french.txt index e1387329ff..aa70db7716 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1185,6 +1185,7 @@ STR_CONFIG_SETTING_AUTOSLOPE :Terrassement so STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Autoriser le terrassement sous les bâtiments et les voies sans les retirer STR_CONFIG_SETTING_CATCHMENT :Autoriser des zones de desserte plus réalistes{NBSP}: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Les zones de desserte ont des tailles différentes selon les types de stations et d'aéroports +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Si activé, les industries avec une station intégré (comme les plateformes pétrolière) peuvent aussi être servi par les stations des compagnies construites à proximité. Si désactivé, ces industries peuvent uniquement être servi par leur station intégré. Aucune station de compagnie ne pourra servir cette industrie, et la station intégré ne pourra servir que pour cette industrie. STR_CONFIG_SETTING_EXTRADYNAMITE :Permettre le retrait de plus d'éléments possédés par une ville{NBSP}: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Simplifier le retrait d'éléments possédés par une ville STR_CONFIG_SETTING_TRAIN_LENGTH :Longueur maximum des trains{NBSP}: {STRING} @@ -3495,12 +3496,15 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Acheter STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Acheter STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Acheter +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :Achat et réaménagement du véhicule +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :Acheter et réaménager le bateau STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Acheter le véhicule sélectionné.{}Shift-clic pour afficher seulement le coût estimé. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Acheter le véhicule sélectionné.{}Shift-clic pour afficher seulement le coût estimé. STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Acheter le navire sélectionné.{}Shift-clic pour afficher seulement le coût estimé. STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Acheter l'aéronef sélectionné.{}Shift-clic pour afficher seulement le coût estimé. +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :Acheter et réaménager le véhicule ferroviaire sélectionné. Shift+Click montre une estimation du coût sans acheter le véhicule. STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Renommer STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Renommer diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 5c07295585..17d726877c 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -923,6 +923,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}({G 0 Διευθυντής Διευθύντρια ""}) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}Η {STRING} χορήγεισε την κατασκεύη της νέας πόλης {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Μια νέα πόλη με όνομα {TOWN} κατασκευάστηκε! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Νέ{G ος α ο} {STRING} υπό κατασκευή κοντά στην πόλη {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Νέο {STRING} φυτεύεται κοντά στην πόλη {TOWN}! @@ -1099,7 +1100,11 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Κανονικ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Διπλό μέγεθος STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Τετραπλό μέγεθος +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Επιλέξτε το μέγεθος της γραμματοσειράς διεπαφής +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Κανονικό +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Διπλό μέγεθος +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Τετραπλό μέγεθος STR_GAME_OPTIONS_BASE_GRF :{BLACK}Βασικό σετ γραφικών STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Επιλογή του βασικού σετ γραφικών που θα χρησιμοποιηθεί @@ -1368,6 +1373,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 :Αρχικό χρώμα εταιρίας: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Τα αεροδρόμια δεν λήγουν ποτέ: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Ενεργοποιώντας αυτήν τη ρύθμιση κάθε τύπος αεροδρομίου παραμένει διαθέσιμο για πάντα μετά την παρουσίασή του @@ -1680,6 +1686,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Ενεργοπ 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 :Δημιουργία εμπορευμάτων πόλης: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Τοποθέτηση δέντρων εντός παιχνιδιού: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Έλεγχος της τυχαίας εμφάνισης δέντρων κατά τη διάρκεια του παιχνιδιού. Αυτό είναι πιθανό να επηρεάσει βιομηχανίες που εξαρτώνται από την ανάπτυξη των δέντρων, όπως για παράδειγμα οι υλοτομίες @@ -2807,7 +2814,9 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Ρυθμός προσομοίωσης: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Αριθμός στιγμών παιχνιδιού που προσομοιώνεται ανά δευτερόλεπτο. +STR_FRAMERATE_RATE_BLITTER :{BLACK}Ρυθμός καρέ γραφικών: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Αριθμος των παραγμενων video frames ανα δευτερολεπτο STR_FRAMERATE_SPEED_FACTOR :{WHITE}Παράγοντας ταχύτητας τρέχοντος παιχνιδιού: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Πόσο γρήγορα εκτελείται το παιχνίδι αυτήν τη στιγμή, σε σύγκριση με την αναμενόμενη ταχύτητα στον κανονικό ρυθμό εξομοίωσης. @@ -2818,6 +2827,7 @@ STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMA STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} frames/δευτ. STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} frames/δευτ. +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} ς ############ Leave those lines in this order!! STR_FRAMERATE_GL_ECONOMY :{WHITE} Διαχείριση φορτίου: STR_FRAMERATE_GL_TRAINS :Στιγμές τρένων: @@ -2825,10 +2835,15 @@ STR_FRAMERATE_GL_ROADVEHS :{WHITE} Στι STR_FRAMERATE_GL_SHIPS :Στιγμές πλοίων: STR_FRAMERATE_GL_AIRCRAFT :Στιγμές αεροσκαφών: STR_FRAMERATE_GL_LANDSCAPE :Στιγμές κόσμου: +STR_FRAMERATE_DRAWING :{BLACK}Γραφική απόδοση: +STR_FRAMERATE_DRAWING_VIEWPORTS :Παράθυρα προβολής κόσμου: STR_FRAMERATE_VIDEO :{WHITE}Έξοδος βίντεο: STR_FRAMERATE_SOUND :{WHITE}Μίξη ήχου: +STR_FRAMERATE_ALLSCRIPTS :Σύνολο GS/AI: +STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Βρόγχος παιχνιδιού STR_FRAMETIME_CAPTION_GL_ECONOMY :Διαχείριση φορτίου STR_FRAMETIME_CAPTION_GL_TRAINS :Στιγμές τρένων STR_FRAMETIME_CAPTION_GL_ROADVEHS :Στιγμές οχημάτων δρόμου @@ -2836,8 +2851,12 @@ STR_FRAMETIME_CAPTION_GL_SHIPS :Στιγμές STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Στιγμές αεροσκαφών STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Στιγμές κόσμου STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Καθυστέρηση γραφήματος συνδέσμου +STR_FRAMETIME_CAPTION_DRAWING :Γραφική απόδοση +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Παράθυρα προβολής κόσμου STR_FRAMETIME_CAPTION_VIDEO :Έξοδος βίντεο STR_FRAMETIME_CAPTION_SOUND :Μίξη ήχου +STR_FRAMETIME_CAPTION_ALLSCRIPTS :Σύνολο GS/AI δεσμών ενεργειών +STR_FRAMETIME_CAPTION_GAMESCRIPT :Δέσμη Ενεργειών παιχνιδιού ############ End of leave-in-this-order @@ -2863,6 +2882,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 :Φιλτράρισμα κειμένου: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Αντικατάσταση Αρχείου STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Είστε σίγουροι οτι θέλετε να αντικαταστήσετε το υπάρχων αρχείο; @@ -2983,6 +3003,8 @@ STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Ελάχ STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Παλέτα: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Προεπιλογή (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Προεπιλογή (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Παλαιού τύπου (W) STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Παράμετροι: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PARAMETER_NONE :Κανένα @@ -3065,6 +3087,7 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Διάβασε STR_NEWGRF_ERROR_GRM_FAILED :Οι ζητημένοι πόροι GRF δεν είναι διαθέσιμοι (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :Το {1:STRING} απενεργοποιήθηκε από το {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Άκυρη/άγνωστη μορφή σχεδίου sprite (sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Πάρα πολλά αντικέιμενα στη λίστα τιμών ιδιοτήτων (sprite {3:NUM}, ιδιότητα {4:HEX}) # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Προσοχή! @@ -3190,6 +3213,7 @@ 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_TITLE :{BLACK}Καθολικοί στόχοι: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Κανένας - @@ -3238,6 +3262,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Πατή # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Βιβλίο Ιστορίας STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Παγκόσμιο Βιβλίο Ιστορίας +STR_STORY_BOOK_SPECTATOR :Παγκόσμιο Βιβλίο Ιστορίας STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Σελίδα {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Μεταβείτε σε μια συγκεκριμένη σελίδα επιλέγοντάς την από αυτή τη λίστα. @@ -3442,6 +3467,8 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Κεντ STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Επίπεδο παραγωγής: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Η βιομηχανία έχει ανακοινώσει άμεσο κλείσιμο! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Απαιτεί: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Παράγει: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Απαιτεί: @@ -3539,6 +3566,7 @@ STR_PURCHASE_INFO_RELIABILITY :{BLACK}Μέγ. STR_PURCHASE_INFO_COST :{BLACK}Κόστος: {GOLD}{CURRENCY_LONG} 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} @@ -3558,12 +3586,19 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Αγορ STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Αγορά Πλοίου STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Αγορά Αεροσκάφους +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Αγορά και μετατροπή οχήματος +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Αγορά και μετατροπή οχήματος +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Αγορά και μετατροπή πλοίου -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Αγοράστε το επιλεγμένο όχημα τρένου. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Αγοράστε το επιλεγμένο όχημα δρόμου. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου οχήματος τρένου. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου οχήματος δρόμου. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Αγοράστε το επιλεγμένο πλοίο. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Αγοράστε το επιλεγμένο αεροσκάφος. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου αεροσκάφους. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Αγορά και μετατροπή του επιλεγμένου οχήματος τρένου. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά +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+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Μετονομασία STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Μετονομασία @@ -3645,7 +3680,7 @@ STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Κλων STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Αυτό θα αγοράσει ένα αντίγραφο του τρένου μαζί με τα όλα τα βαγόνια. Πατήστε αυτό το κουμπί και μετά σε κάποιο τρένο μέσα ή έξω από το αμαξοστάσιο. Με Ctrl+Κλικ θα έχει τις ίδιες εντολές. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς να γίνει η αγορά STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Αυτό θα αγοράσει ένα αντίγραφο του οχήματος. Πατήστε αυτό το κουμπί και μετά σε κάποιο όχημα μέσα ή έξω από το αμαξοστάσιο. Με Ctrl+Κλικ θα έχει τις ίδιες εντολές. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς να γίνει η αγορά -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Αυτό θα αγοράσει ένα αντίγραφο του πλοίου. Πατήστε αυτό το κουμπί και μετά σε κάποιο πλοίο μέσα ή έξω από το ναυπηγείο. Με Ctrl+Κλικ θα έχει τις ίδιες εντολές. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς να γίνει η αγορά +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Αυτό θα αγοράσει ένα αντίγραφο ενός πλοίου. Πατήστε αυτό το κουμπί και μετά σε κάποιο πλοίο μέσα ή έξω από το ναυπηγείο. Με Ctrl+Κλικ θα έχει τις ίδιες εντολές. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς να γίνει η αγορά STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Αυτό θα αγοράσει ένα αντίγραφο του αεροσκάφους. Πατήστε αυτό το κουμπί και μετά σε κάποιο αεροσκάφος μέσα στο ή έξω από το υπόστεγο. Με Ctrl+Κλικ θα έχει τις ίδιες εντολές. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς να γίνει η αγορά STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Κεντράρισμα της εικόνας στην τοποθεσία του αμαξοστάσιου. Με Ctrl+Κλικ ανοίγει νέο παράθυρο εμφάνισης στην τοποθεσία του αμαξοστασίου @@ -3950,6 +3985,7 @@ STR_ORDER_CONDITIONAL_AGE :{G=f}Ηλικί STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Απαιτεί επισκευή STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Πάντα STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Υπόλοιπη διάρκεια ζωής (χρόνια) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Μέγιστη αξιοπιστία STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Πως να συγκρίνετε τα δεδομένα του οχήματος με την δοσμένη τιμή STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :είναι ίσο με diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 8268a8ab95..ad4f8f7017 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -2203,7 +2203,7 @@ STR_NETWORK_CHAT_ALL :[Mindenkinek] { STR_NETWORK_CHAT_OSKTITLE :{BLACK}Add meg a hálózati beszélgetéshez a neved # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Nem található a hálózati csatoló, vagy a játékban nincs hálózati támogatás (ENABLE_NETWORK) +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Nem található a hálózati csatoló STR_NETWORK_ERROR_NOSERVER :{WHITE}Nem található semmilyen hálózati játék STR_NETWORK_ERROR_NOCONNECTION :{WHITE}A szerver nem válaszolt a kérésre STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}NewGRF eltérés miatt nem sikerült kapcsolódni @@ -3096,6 +3096,7 @@ STR_NEWGRF_BUGGY :{WHITE}A(z) '{0 STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}A(z) '{1:ENGINE}' rakomány/átalakítás információja a gyártás után különbözik a vételi listán találhatótól. Ez hibát okozhat az automatikus felújítás/lecserélés során az átalakításban STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' végtelen ciklust okozott a termelés folyamatnál STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}{1:HEX} visszatérő érték ismeretlen/érvénytelen {2:HEX} értékkel tért vissza +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' érvénytelen rakománytípussal tért vissza a termelési callback-ben: {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO :<érvénytelen rakomány> @@ -3532,6 +3533,7 @@ STR_BUY_VEHICLE_SHIP_CAPTION :Új hajók STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Új repülőgépek STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Ár: {GOLD}{CURRENCY_LONG}{BLACK} Súly: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Ár: {GOLD}{CURRENCY_LONG}{BLACK} (Átalakítás költsége: {GOLD}{CURRENCY_LONG}{BLACK}) Súly: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Sebesség: {GOLD}{VELOCITY}{BLACK} Telj.: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Sebesség: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Sebesség óceánon: {GOLD}{VELOCITY} @@ -3542,12 +3544,14 @@ STR_PURCHASE_INFO_REFITTABLE :(átalakíthat STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Kifejlesztve: {GOLD}{NUM}{BLACK} Élettartam: {GOLD}{COMMA} év STR_PURCHASE_INFO_RELIABILITY :{BLACK}Max. megbízhatóság: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Ár: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Ár: {GOLD}{CURRENCY_LONG}{BLACK} (Átalakítás költsége: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Súly: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Ár: {GOLD}{CURRENCY_LONG}{BLACK} Sebesség: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Ár: {GOLD}{CURRENCY_LONG}{BLACK} (Átalakítás költsége: {GOLD}{CURRENCY_LONG}{BLACK}) Végsebesség: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapacitás: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Meghajtott vagonok: {GOLD}+{POWER}{BLACK} Súly: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Átalakítható: {GOLD}{STRING} -STR_PURCHASE_INFO_ALL_TYPES :Minden rakomány típusra +STR_PURCHASE_INFO_ALL_TYPES :Minden rakománytípusra STR_PURCHASE_INFO_NONE :Semmi STR_PURCHASE_INFO_ALL_BUT :Mindenre, kivéve {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Maximális vonóerő: {GOLD}{FORCE} @@ -3564,12 +3568,20 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Megvesz STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Megvesz STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Megvesz +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Megvesz és átalakít +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Megvesz és átalakít +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Megvesz és átalakít +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Megvesz és átalakít STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}A kijelölt vasúti jármű megvétele. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}A kijelölt közúti jármű megvétele. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}A kijelölt hajó megvétele. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}A kijelölt repülőgép megvétele. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}A kijelölt vasúti jármű megvétele és átalakítása a kijelölt rakománytípusra. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}A kijelölt közúti jármű megvétele és átalakítása a kijelölt rakománytípusra. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}A kijelölt hajó megvétele és átalakítása a kijelölt rakománytípusra. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}A kijelölt repülőgép megvétele és átalakítása a kijelölt rakománytípusra. Shift+kattintással megmutatja a becsült költséget vásárlás nélkül STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Átnevez STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Átnevez diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 2ef5814f8c..4c285de396 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -2704,6 +2704,7 @@ STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! STR_FRAMERATE_GL_ROADVEHS :{BLACK} Stroossegefierer Ticken: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Linkgrafik-Verzögerung: STR_FRAMERATE_DRAWING :{BLACK}Graphikrendering: STR_FRAMERATE_VIDEO :{BLACK}Video-output: ############ End of leave-in-this-order @@ -3396,6 +3397,7 @@ STR_BUY_VEHICLE_SHIP_CAPTION :Nei Schëffer STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Neie Fliger STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Käschten: {GOLD}{CURRENCY_LONG}{BLACK} Gewiicht: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Käschten: {GOLD}{CURRENCY_LONG}{BLACK} (Embaukäschten: {GOLD}{CURRENCY_LONG}{BLACK}) Gewiicht: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Geschw.: {GOLD}{VELOCITY}{BLACK} Kraaft: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Geschw.: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Geschwindegkeet um Ozean: {GOLD}{VELOCITY} diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 54a4766de5..dd824edef8 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -2143,7 +2143,7 @@ STR_NETWORK_CHAT_ALL :[Alle] {STRING} STR_NETWORK_CHAT_OSKTITLE :{BLACK}Skriv inn tekst for nettverkssamtale # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Ingen nettverksadaptere funnet eller kompilert uten ENABLE_NETWORK +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Ingen nettverksadapter funnet STR_NETWORK_ERROR_NOSERVER :{WHITE}Kunne ikke finne noen nettverksspill STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Tjeneren svarte ikke på forespørselen STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Kunne ikke koble til pga. ulike versjoner av NewGRF @@ -3473,6 +3473,7 @@ STR_BUY_VEHICLE_SHIP_CAPTION :Nye skip STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nye luftfartøy STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Kostnad: {GOLD}{CURRENCY_LONG}{BLACK} Vekt: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Kostnad: {GOLD}{CURRENCY_LONG}{BLACK} (Ombyggingskostnad: {GOLD}{CURRENCY_LONG}{BLACK}) Vekt: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Hastighet: {GOLD}{VELOCITY}{BLACK} Kraft: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Hastighet: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Hastighet på havet: {GOLD}{VELOCITY} @@ -3483,8 +3484,10 @@ STR_PURCHASE_INFO_REFITTABLE :(ombyggbart) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Designet: {GOLD}{NUM}{BLACK} Levetid: {GOLD}{COMMA} år STR_PURCHASE_INFO_RELIABILITY :{BLACK}Maks pålitelighet: {GOLD}{COMMA}{NBSP}% STR_PURCHASE_INFO_COST :{BLACK}Kostnad: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Kostnad: {GOLD}{CURRENCY_LONG}{BLACK} (Ombyggingskostnad: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Vekt: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Kostnad: {GOLD}{CURRENCY_LONG}{BLACK} Hastighet: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Kostnad: {GOLD}{CURRENCY_LONG}{BLACK} (Ombyggingskostnad: {GOLD}{CURRENCY_LONG}{BLACK}) Hastighet: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapasitet: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Lokomotivvogner: {GOLD}+{POWER}{BLACK} Vekt: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Kan bygges om til: {GOLD}{STRING} @@ -3505,12 +3508,20 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Kjøp kj STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Kjøp skip STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Kjøp luftfartøy +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kjøp og bygg om kjøretøy +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kjøp og bygg om kjøretøy +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kjøp og bygg om skip +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kjøp og bygg om luftfartøy STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Kjøp det merkede tog/vogn. Shift+klikk viser estimert kostnad STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Kjøp det merkede kjøretøy. Shift+klikk viser estimert kostnad STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Kjøp det merkede skip. Shift+klikk viser estimert kostnad STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Kjøp det merkede luftfartøy. Shift+klikk viser estimert kostnad +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kjøp og bygg om merket tog/vogn. Shift+klikk viser anslått kostnad uten å kjøpe. +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kjøp og bygg om det merkede kjøretøyet. Shift+klikk viser anslått kostnad uten å kjøpe. +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kjøp og bygg om det merkede skipet. Shift+klikk viser anslått kostnad uten å kjøpe. +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kjøp og bygg om det merkede luftfartøyet. Shift+klikk viser anslått kostnad uten å kjøpe. STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Endre navn STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Endre navn diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index e44f53f1ef..2a423497b0 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1186,7 +1186,7 @@ STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permite altera STR_CONFIG_SETTING_CATCHMENT :Dimensionamento mais realista de áreas de abrangência: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Haver diferentes áreas de cobertura para diferentes tipos de estações e aeroportos STR_CONFIG_SETTING_EXTRADYNAMITE :Permite remover mais estradas, pontes e túneis detidos pela cidade: {STRING} -STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Facilitar a remoçar de edifícios e infraestruturas detidas pela cidade +STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Facilitar a remoçar de edifícios e infraestruturas detidas pela localidade STR_CONFIG_SETTING_TRAIN_LENGTH :Tamanho máximo de comboios: {STRING} STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT :Assignar o tamanho máximo dos comboios STR_CONFIG_SETTING_TILE_LENGTH :{COMMA} quadrado{P 0 "" s} @@ -1201,7 +1201,7 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Ângulo de incl STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Ângulo de inclínação para veículos rodoviários: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Declive de um quadrado inclinado para um veiculo de estrada. Valores mais altos tornam mais difícil de subir. -STR_CONFIG_SETTING_FORBID_90_DEG :Proibir comboios e barcos fazer curvas de 90º: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG :Proibir comboios fazer curvas de 90º: {STRING} STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Curvas de 90 graus ocorrem quando uma pista horizontal é directamente seguida por outra vertical num quadrado adjacente, fazendo com que o combóio vire 90 graus quando atravessa a fronteira dos quadrados, ao invés dos habituais 45 graus para outras combinações de pistas. Também se aplica ao raio de curvatura dos navios STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permitir juntar estações não adjacentes: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permite adicionar novas partes a uma estação sem tocar nas partes já existentes. Requer pressionar CTRL+click para adicionar as novas partes @@ -1220,8 +1220,8 @@ STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :Como as outras STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :Prospecção STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Área plana à volta das industrias: {STRING} STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Quantidade de terreno plano á volta de uma industria. Isto garante que terreno vazio esteja disponível para construir linhas, etc -STR_CONFIG_SETTING_MULTIPINDTOWN :Permitir várias indústrias semelhantes por cidade: {STRING} -STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normalmente, uma cidade não aceita mais do que uma indústria de cada tipo. Com esta configuração, será possível ter várias indústrias do mesmo tipo na mesma cidade +STR_CONFIG_SETTING_MULTIPINDTOWN :Permitir várias indústrias semelhantes por localidade: {STRING} +STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Normalmente, uma localidade não aceita mais do que uma indústria de cada tipo. Com esta configuração, será possível ter várias indústrias do mesmo tipo na mesma localidade STR_CONFIG_SETTING_SIGNALSIDE :Mostrar sínais: {STRING} STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Escolha em que lado da via colocar sinais STR_CONFIG_SETTING_SIGNALSIDE_LEFT :Na esquerda @@ -1245,7 +1245,7 @@ STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Todos os visual STR_CONFIG_SETTING_BRIBE :Permite o suborno da autoridade local: {STRING} STR_CONFIG_SETTING_BRIBE_HELPTEXT :Permite que as companhias tentem subornar a autoridade local. Se o suborno for descoberto por um inspector, a companhia não poderá construir nessa localidade durante seis meses STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Permite comprar direitos de transporte em exclusividade: {STRING} -STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Se uma empresa compra direitos exclusivos de transporte para uma cidade, as estações dos concorrentes (passageiros e carga) não receberão cargo durante um ano +STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Se uma empresa compra direitos exclusivos de transporte para uma localidade, as estações dos concorrentes (passageiros e carga) não receberão cargo durante um ano STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Permite investir em edifícios: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Permite que empresas doem dinheiro às cidades para financiar novas casas STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Permite financiar a reconstrução de estradas locais:{STRING} @@ -1258,8 +1258,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Fator de veloci STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Set the relative speed of planes compared to other vehicle types, to reduce the amount of income of transport by aircraft STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Número de acidentes de aeronaves: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Indicar a hipótese da ocorrência de um acidente aéreo -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Nenhum +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Indicar a hipótese da ocorrência de um acidente aéreo.{}* As aeronaves maiores tem um risco acrescido a despenhar quando aterram em aeroportos pequenos +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Nenhum* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Reduzido STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Permite estações de passagem em estradas das cidades: {STRING} @@ -1302,13 +1302,13 @@ STR_CONFIG_SETTING_HOVER_DELAY :Mostrar textos STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Atraso após o qual os textos de ajuda são mostrados após parar o cursor sobre algum elemento da interface. Alternativamente, os textos de ajuda podem ser mostrados com o botão direito do rato quando este valor está definido como 0 STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Parar o rato por {COMMA} milisegundo{P 0 "" s} STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Clique com botão direito -STR_CONFIG_SETTING_POPULATION_IN_LABEL :Mostra população da cidade na janela da cidade: {STRING} +STR_CONFIG_SETTING_POPULATION_IN_LABEL :Mostra população da localidade na identificação da mesma: {STRING} STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Mostrar a população das povoações na sua etiqueta no mapa STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Grossura das linhas nos gráficos: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Largura da linha nos gráficos. Uma linha mais estreita é de leitura mais precisa, enquanto uma linha mais espessa é mais fácil de ver e as cores distinguem-se melhor. STR_CONFIG_SETTING_LANDSCAPE :Cenário: {STRING} -STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Os estilos dos cenários definem a jogabilidade base, cada um com cargas e requerimentos diferentes para o desenvolvimento das cidades. NewGRF e Scripts de Jogo permitem um controlo mais refinado +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Os estilos dos cenários definem a jogabilidade base, cada um com cargas e requerimentos diferentes para o desenvolvimento das localidades. NewGRF e Scripts de Jogo permitem um controlo mais refinado STR_CONFIG_SETTING_LAND_GENERATOR :Gerador de terreno: {STRING} STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :O gerador original é dependente do conjunto gráfico base, e compõe formas de terreno já afixadas. TerraGenesis é um gerador baseado no algoritmo de ruído de Perlin que permite definições mais refinadas STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Original @@ -1320,7 +1320,7 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Define quantas STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Distância máxima entre o limite do mapa e Refinarias de Petróleo: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Refinarias de petróleo são construídas apenas próximo da borda do mapa, isto é, na costa para mapas de ilha STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Altura da linha de neve: {STRING} -STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Controla a que altura a neve começa em paisagens sub-árticas. A neve também afecta a geração de indústrias e os requisitos de crescimento das cidades +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Controla a que altura a neve começa em paisagens sub-árticas. A neve também afecta a geração de indústrias e os requisitos de crescimento das localidades STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Rudeza do terreno: {STRING} STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(Apenas TerraGenesis) Escolhe a frequência de montes: paisagens macias têm menos montes e mais espalhados. Paisagens duras têm muitos montes, que podem parecer repetitivos STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Muito suave @@ -1450,7 +1450,7 @@ STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT :Reproduzir efei STR_CONFIG_SETTING_SOUND_VEHICLE :Veículos: {STRING} STR_CONFIG_SETTING_SOUND_VEHICLE_HELPTEXT :Reproduzir efeitos sonoros dos veículos STR_CONFIG_SETTING_SOUND_AMBIENT :Ambiente: {STRING} -STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Reproduzir efeitos sonoros da paisagem, indústrias e cidades +STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Reproduzir efeitos sonoros da paisagem, indústrias e localidades STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING :Desativar construção de infra-estrutura quando não estão disponíveis veículos adequados: {STRING} STR_CONFIG_SETTING_DISABLE_UNSUITABLE_BUILDING_HELPTEXT :Quando activo, as infraestruturas só estão disponíveis se os veículos estiverem também, prevenindo desperdícios de tempo e dinheiro em infraestruturas sem utilidade. @@ -1566,24 +1566,28 @@ STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :Apenas sinais d STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Apenas sinais de rota STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Todos -STR_CONFIG_SETTING_TOWN_LAYOUT :Disposição de estradas para novas cidades: {STRING} -STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT :Disposição da rede de estradas das cidades +STR_CONFIG_SETTING_TOWN_LAYOUT :Disposição de estradas para novas localidades: {STRING} +STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT :Disposição da rede de estradas das localidades STR_CONFIG_SETTING_TOWN_LAYOUT_DEFAULT :Original STR_CONFIG_SETTING_TOWN_LAYOUT_BETTER_ROADS :Estradas melhores STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :grelha 2x2 STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :grelha 3x3 STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Aleatório -STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :As cidades têm permissão para construir estradas: {STRING} +STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :As localidades têm permissão para construir estradas: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Permite às cidades a construção de estradas para crescimento. Desactivar para não permitir às autoridades a construção de estradas -STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Cidades podem construir passagens de nível: {STRING} -STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Activar esta preferência permite às cidades construir cruzamentos nivelados -STR_CONFIG_SETTING_NOISE_LEVEL :Permitir que a cidade controle o nível de ruído dos aeroportos: {STRING} -STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Com esta preferência desactivada, podem haver dois aeroportos em cada cidade. Com esta preferência activa, o número de aeroportos numa cidade é limitado pela aceitação do ruído na cidade, que depende da população, do tamanho do aeroporto e da sua distância -STR_CONFIG_SETTING_TOWN_FOUNDING :Fundar cidades no jogo: {STRING} +STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Localidades podem construir passagens de nível: {STRING} +STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Activar esta preferência permite às localidades construir cruzamentos nivelados +STR_CONFIG_SETTING_NOISE_LEVEL :Permitir que a localidade controle o nível de ruído dos aeroportos: {STRING} +STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Com esta preferência desactivada, podem haver dois aeroportos em cada localidade. Com esta preferência activa, o número de aeroportos numa localidade é limitado pela aceitação do ruído na mesma, que depende da população, do tamanho do aeroporto e da sua distância +STR_CONFIG_SETTING_TOWN_FOUNDING :Fundar localidades no jogo: {STRING} STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Activar esta preferência permite aos jogadores fundar novas povoações no jogo STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Proibido STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Permitido -STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Permitido, estrutura personalizada da cidade +STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Permitido, estrutura personalizada da localidade +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Geração de carga citadina: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Quantidade de carga produzida por casas em localidades, relativa à população total da mesma.{}Crescimento quadrático: Uma localidade do dobro do tamanho gera 4x mais passageiros.{}Crescimento linear: Uma localidade do dobro do tamanho gera 2x a quantidade de passageiros. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadrático (original) +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 @@ -1613,15 +1617,15 @@ STR_CONFIG_SETTING_ZOOM_LVL_NORMAL :Normal STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x -STR_CONFIG_SETTING_TOWN_GROWTH :Ritmo de crescimento de cidades: {STRING} -STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Velocidade de crescimento das cidades +STR_CONFIG_SETTING_TOWN_GROWTH :Ritmo de crescimento de localidades: {STRING} +STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Velocidade de crescimento das localidades STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Nenhum STR_CONFIG_SETTING_TOWN_GROWTH_SLOW :Lento STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :Normal STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Rápido STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Muito Rápido -STR_CONFIG_SETTING_LARGER_TOWNS :Proporção de cidades que chegarão a metrópoles: {STRING} -STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Quantidade de povoações que se tornarão cidades, logo cidades que começarão maiores e crescerão mais depressa +STR_CONFIG_SETTING_LARGER_TOWNS :Proporção de localidades que chegarão a cidades: {STRING} +STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Quantidade de localidades que se tornarão cidades, ou seja uma localidade que começa maior e crescerá mais depressa. STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 em {COMMA} STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Nenhum STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador inicial para a dimensão das metrópoles: {STRING} @@ -1705,7 +1709,7 @@ STR_CONFIG_SETTING_ACCIDENTS :{ORANGE}Desastr STR_CONFIG_SETTING_GENWORLD :{ORANGE}Geração do mundo STR_CONFIG_SETTING_ENVIRONMENT :{ORANGE}Meio Ambiente STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :{ORANGE}Autoridades -STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Cidades +STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :{ORANGE}Localidades STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :{ORANGE}Industrias STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :{ORANGE}Distribuição de Carga STR_CONFIG_SETTING_AI :{ORANGE}Oponentes @@ -2529,12 +2533,12 @@ STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Repor Te STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Tem a certeza que quer apagar todas as propriedades das empresas? # Town generation window (SE) -STR_FOUND_TOWN_CAPTION :{WHITE}Gerar Cidades +STR_FOUND_TOWN_CAPTION :{WHITE}Gerar Localidades STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Nova Cidade STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Fundar nova cidade. Shift+Clique mostra apenas o custo estimado STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Cidade Aleatória STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Fundar uma cidade num local aleatório -STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Várias cidades aleatórias +STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Várias localidades aleatórias STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Cobrir o mapa com cidades colocadas aleatoriamente STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Nome da cidade: @@ -2543,14 +2547,14 @@ STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Clique p STR_FOUND_TOWN_NAME_RANDOM_BUTTON :{BLACK}Nome aleatório STR_FOUND_TOWN_NAME_RANDOM_TOOLTIP :{BLACK}Gerar novo nome aleatório -STR_FOUND_TOWN_INITIAL_SIZE_TITLE :{YELLOW}Tamanho da cidade: +STR_FOUND_TOWN_INITIAL_SIZE_TITLE :{YELLOW}Tamanho da localidade: STR_FOUND_TOWN_INITIAL_SIZE_SMALL_BUTTON :{BLACK}Pequena STR_FOUND_TOWN_INITIAL_SIZE_MEDIUM_BUTTON :{BLACK}Média STR_FOUND_TOWN_INITIAL_SIZE_LARGE_BUTTON :{BLACK}Grande STR_FOUND_TOWN_SIZE_RANDOM :{BLACK}Aleatório -STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Seleccione o tamanho da cidade +STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Seleccione o tamanho da localidade STR_FOUND_TOWN_CITY :{BLACK}Metrópole -STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Metrópoles crescem mais depressa do que as cidades normais{}Dependendo da configuração, são maiores aquando da sua fundação +STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Cidades crescem mais depressa do que as localidades normais{}Dependendo da configuração, são maiores aquando da sua fundação STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Disposição de estradas na cidade: STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Seleccione disposição das estradas utilizada para esta cidade @@ -3027,6 +3031,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF ' STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}A informação de carga/adaptação do modelo de veículo '{1:ENGINE}' difere da que consta na lista de veículos depois de adquirido. Isto poderá causar problemas ao adaptar quando automaticamente renovado/substituído. STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' causou um loop infinito no callback de produção. STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback {1:HEX} devolveu resultado desconhecido/inválido {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' devolveu tipo de carga inválida no callback de produção em {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : @@ -3473,6 +3478,7 @@ STR_PURCHASE_INFO_REFITTABLE :(adaptável) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Concebido: {GOLD}{NUM}{BLACK} Vida útil: {GOLD}{COMMA} ano{P "" s} STR_PURCHASE_INFO_RELIABILITY :{BLACK}Fiabilidade máxima: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Custo: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Custo: {GOLD}{CURRENCY_LONG}{BLACK} (Custo da adaptação: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Peso: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Custo: {GOLD}{CURRENCY_LONG}{BLACK} Velocidade: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacidade: {GOLD}{CARGO_LONG}, {CARGO_LONG} @@ -3495,12 +3501,20 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Comprar STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Comprar Barco STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Comprar Aeronave +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Reconverter veiculo +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Reconverter Veículo +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Converter Barco +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Adaptar Carga da Aeronave STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar o veículo ferroviário seleccionado. Shift+Clique mostra estimativa de custo, sem comprar STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar o veículo rodoviário seleccionado. Shift+Clique mostra estimativa de custo, sem comprar STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar barco seleccionado. Shift+Clique mostra estimativa de custo, sem comprar STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar aeronave seleccionada. Shift+Clique mostra estimativa de custo, sem comprar +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e converter veículo ferroviário seleccionado. Shift+Clique mostra estimativa de custo, sem comprar +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :Comprar e converter veículo rodoviário seleccionado. Shift+Clique mostra estimativa de custo, sem comprar +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e converter barco seleccionado. Shift+Clique mostra estimativa de custo, sem comprar +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e converter aeronave seleccionada. Shift+Clique mostra estimativa de custo, sem comprar STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Renomear STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Renomear @@ -4174,8 +4188,8 @@ STR_GAME_SAVELOAD_NOT_AVAILABLE : STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}O jogo foi salvo numa versão sem suporte a eléctricos. Todos os eléctricos foram removidos. # Map generation messages -STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Geração de mapa abortada...{}... não há locais apropriados para cidades -STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... não existe nenhuma cidade neste cenário +STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Geração de mapa abortada...{}... não há locais apropriados para localidades +STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... não existe nenhuma localidade neste cenário STR_ERROR_PNGMAP :{WHITE}Impossível carregar paisagem do PNG... STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... ficheiro não encontrado @@ -4226,7 +4240,7 @@ STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Não per # Local authority errors STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}A autoridade local de {TOWN} não autorizou -STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}{TOWN} a autoridade local recusa permitir que outro aeroporto seja construído nesta cidade +STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}{TOWN} a autoridade local recusa permitir que outro aeroporto seja construído nesta localidade STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}{TOWN} a autoridade local não permite a construção do aeroporto devido à poluição sonora STR_ERROR_BRIBE_FAILED :{WHITE}A sua tentativa de suborno foi descoberta por um investigador regional @@ -4257,18 +4271,18 @@ STR_ERROR_CAN_T_SELL_25_SHARE_IN :{WHITE}Não é STR_ERROR_PROTECTED :{WHITE}Esta empresa ainda não troca acções... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Não é possível construir cidades -STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Não é possível renomear cidade... -STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Não é possível construir uma cidade aqui... -STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Não é possível expandir cidade... +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Não é possível construir localidades +STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Não é possível renomear localidade... +STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Não é possível construir uma localidade aqui... +STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Não é possível expandir localidade... STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... muito perto do limite do mapa -STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... muito perto de outra cidade -STR_ERROR_TOO_MANY_TOWNS :{WHITE}... demasiadas cidades +STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... muito perto de outra localidade +STR_ERROR_TOO_MANY_TOWNS :{WHITE}... demasiadas localidades STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... não existe mais espaço no mapa -STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}A cidade não construirá estradas. Pode-se permitir a construção de estradas por Opções Avançadas->Economia->Cidades +STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}A localidade não construirá estradas. Pode-se permitir a construção de estradas por Opções Avançadas->Economia->Localidades STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Trabalhos na estrada em curso -STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Não é possível eliminar esta cidade...{}Uma estação ou depósito refere-se à cidade ou não é possível remover terreno pertencente à cidade -STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... não há um sítio adequado para uma estátua no centro desta cidade +STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Não é possível eliminar esta localidade...{}Uma estação ou depósito refere-se à localidade ou não é possível remover terreno pertencente à mesma +STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... não há um sítio adequado para uma estátua no centro desta localidade # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... demasiadas indústrias @@ -4276,13 +4290,13 @@ STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Não é STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Não é possível construir {STRING} aqui... STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Não é possível construir este tipo de indústria aqui... STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... muito perto de outra indústria -STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... é necessário construir uma cidade primeiro -STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... só é permitido uma por cidade -STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... só pode ser construído em cidades com pelo menos 1200 habitantes +STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... é necessário construir uma localidade primeiro +STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... só é permitido uma por localidade +STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... só pode ser construído em localidades com pelo menos 1200 habitantes STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... só se pode construir em zonas florestais STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... só se pode construir em zonas desérticas -STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... só se pode construir em cidades (substituindo casas) -STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... só se pode construir no centro de uma cidade +STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... só se pode construir em localidades (substituindo casas) +STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... só se pode construir no centro de uma localidade STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... só se pode construir em planícies STR_ERROR_CAN_ONLY_BE_POSITIONED :{WHITE}... só pode ser colocado perto das bordas do mapa STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... a floresta só pode ser plantada acima do nível de neve @@ -4310,7 +4324,7 @@ STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Demasiad STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Muito perto de outra doca STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Demasiado perto de outro aeroporto STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Não pode alterar o nome da estação... -STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... esta estrada é detida pela cidade +STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... esta estrada é detida pela localidade. STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... estrada orientada na direcção incorrecta STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... estações de passagem não podem ter curvas STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... estações de passagem não podem ter cruzamentos From a4073895aeb0ceedd965ed691c2888500a542612 Mon Sep 17 00:00:00 2001 From: PeterN Date: Mon, 25 Mar 2019 19:30:23 +0000 Subject: [PATCH 540/622] Fix #7411: Use industry production callback (if used) on initial industry cargo generation. (#7412) --- src/industry_cmd.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index a4863ab126..403e57a96f 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1751,8 +1751,16 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, } if (_generating_world) { + if (HasBit(indspec->callback_mask, CBM_IND_PRODUCTION_256_TICKS)) { + IndustryProductionCallback(i, 1); + for (size_t ci = 0; ci < lengthof(i->last_month_production); ci++) { + i->last_month_production[ci] = i->produced_cargo_waiting[ci] * 8; + i->produced_cargo_waiting[ci] = 0; + } + } + for (size_t ci = 0; ci < lengthof(i->last_month_production); ci++) { - i->last_month_production[ci] = i->production_rate[ci] * 8; + i->last_month_production[ci] += i->production_rate[ci] * 8; } } From 698241e16e12bdb03cdc90bdf3d5a6ff631ae309 Mon Sep 17 00:00:00 2001 From: PeterN Date: Mon, 25 Mar 2019 20:01:55 +0000 Subject: [PATCH 541/622] Fix #7410: Sign position/width not set on initial creation. (#7413) Sign width was only updated when the text was changed. This seems to work for player-placed signs as there is always a rename operation, however AIs can create a sign with text in one go, in which case the width was never set. --- src/signs_cmd.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/signs_cmd.cpp b/src/signs_cmd.cpp index 69fde2559f..e094e9e0ff 100644 --- a/src/signs_cmd.cpp +++ b/src/signs_cmd.cpp @@ -58,6 +58,7 @@ CommandCost CmdPlaceSign(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 if (!StrEmpty(text)) { si->name = stredup(text); } + si->UpdateVirtCoord(); _viewport_sign_kdtree.Insert(ViewportSignKdtreeItem::MakeSign(si->index)); InvalidateWindowData(WC_SIGN_LIST, 0, 0); _new_sign_id = si->index; From 8acca3a72ba4569607575aa5a74bdbbcdb5669f8 Mon Sep 17 00:00:00 2001 From: stormcone <48624099+stormcone@users.noreply.github.com> Date: Sat, 23 Mar 2019 17:40:01 +0100 Subject: [PATCH 542/622] Change: Do not display a newspaper about old vehicles for which replacement is activated. --- src/vehicle.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index f4dc0c4ddb..4f987a4bf4 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1348,8 +1348,11 @@ void AgeVehicle(Vehicle *v) /* Don't warn about non-primary or not ours vehicles or vehicles that are crashed */ if (v->Previous() != NULL || v->owner != _local_company || (v->vehstatus & VS_CRASHED) != 0) return; + const Company *c = Company::Get(v->owner); /* Don't warn if a renew is active */ - if (Company::Get(v->owner)->settings.engine_renew && v->GetEngine()->company_avail != 0) return; + if (c->settings.engine_renew && v->GetEngine()->company_avail != 0) return; + /* Don't warn if a replacement is active */ + if (EngineHasReplacementForCompany(c, v->engine_type, v->group_id)) return; StringID str; if (age == -DAYS_IN_LEAP_YEAR) { From e3ea758c46e94f603d0be71af11eb1e64abcfcab Mon Sep 17 00:00:00 2001 From: PeterN Date: Mon, 25 Mar 2019 23:24:40 +0000 Subject: [PATCH 543/622] Fix #7414: Reinstate marking sign dirty before removal. (#7416) --- src/signs_cmd.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/signs_cmd.cpp b/src/signs_cmd.cpp index e094e9e0ff..ea6c680c30 100644 --- a/src/signs_cmd.cpp +++ b/src/signs_cmd.cpp @@ -100,6 +100,7 @@ CommandCost CmdRenameSign(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 } } else { // Delete sign if (flags & DC_EXEC) { + si->sign.MarkDirty(); _viewport_sign_kdtree.Remove(ViewportSignKdtreeItem::MakeSign(si->index)); delete si; From 7a32cf1401d289f04682aa91fbfb779cbb2378e4 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 26 Mar 2019 19:45:43 +0100 Subject: [PATCH 544/622] Update: Translations from eints greek: 51 changes by Jubilee russian: 17 changes by Lone_Wolf latin: 19 changes by Supercheese portuguese: 53 changes by JayCity --- src/lang/greek.txt | 76 ++++++++++++++++++++---------- src/lang/latin.txt | 28 +++++++---- src/lang/portuguese.txt | 102 +++++++++++++++++++++------------------- src/lang/russian.txt | 23 ++++++--- 4 files changed, 140 insertions(+), 89 deletions(-) diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 17d726877c..d2fab2ac1e 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -527,6 +527,7 @@ STR_TOOLBAR_SOUND_MUSIC :Ήχος/Μου ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Τελευταίο μήνυμα/αναφορά ειδήσεων STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Ιστορικό μηνυμάτων +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Διαγραφή όλων των μηνυμάτων ############ range ends here ############ range for about menu starts @@ -538,6 +539,7 @@ STR_ABOUT_MENU_SCREENSHOT :Στιγμιό STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Στιγμιότυπο οθόνης μέγιστης μεγέθυνσης STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Στιγμιότυπο οθόνης τυπικής μεγέθυνσης STR_ABOUT_MENU_GIANT_SCREENSHOT :Στιγμιότυπο οθόνης για ολό τον χάρτη +STR_ABOUT_MENU_SHOW_FRAMERATE :Εμφάνιση ρυθμού καρέ STR_ABOUT_MENU_ABOUT_OPENTTD :Σχετικά με το 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Ευθυγραμμιστής στοιχεών STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Εναλλαγή πλαισίου οριοθέτησης @@ -1100,6 +1102,7 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Κανονικ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Διπλό μέγεθος STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Τετραπλό μέγεθος +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Μέγεθος γραμματοσειράς STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Επιλέξτε το μέγεθος της γραμματοσειράς διεπαφής STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Κανονικό @@ -1288,6 +1291,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Να επιτρ STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Επιτρέπεται η διαμόρφωση του εδάφους κάτω από κτίρια και σιδηροτροχιές χωρίς αυτά να αφαιρούνται STR_CONFIG_SETTING_CATCHMENT :Επιτρέπονται πιο ρεαλιστικά ταξινομημένες περιοχές συλλογής : {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Διαφορετικοί σταθμοί και αεροδρόμια έχουν περιοχές κάλυψης διαφορετικού μεγέθους +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Οι σταθμοί της εταιρίας μπορούν να εξυπηρετήσεουν βιομηχανίες με κοντινούς ουδέτερους σταθμούς: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Όταν είναι ενεργοποιημένο, βιομηχανίες με ενσωματωμένους σταθμούς (όπως Πλατφόρμες Πετρελαίου) μπορούν να εξυπηρετούνται από κοντινούς σταθμούς της εταιρίας. Όταν είναι απενεργοποιημένο, οι βιομηχανίες αυτές μπορούν να εξυπηρετούνται μόνο από τους ενσωματωμένους σταθμούς τους. Κοντινοί σταθμοί της εταιρίας δεν θα μπορούν να τους εξυπηρετούν, ούτε και ο ενσωματωμένος σταθμός θα μπορεί να εξυπηρετήσει οτιδήποτε άλλο εκτός από τη βιομηχανία. STR_CONFIG_SETTING_EXTRADYNAMITE :Επιτρέπεται η αφαίρεση περισσότερων ιδιοκτησιών των πολέων: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Είναι ευκολότερη η αφαίρεση υποδομών και κτιρίων που κατέχονται από την πόλη STR_CONFIG_SETTING_TRAIN_LENGTH :Μέγιστο μήκος τρένων: {STRING} @@ -1304,7 +1309,7 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Η κλίση STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Κλίση εδάφους για τα οδικά οχήματα: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Η κλίση ενός κεκλιμένου τετραγωνίδιου για τα οδικά οχήματα. Μεγαλύτερες τιμές καθιστούν δυσκολότερο το ανέβασμα λόφων -STR_CONFIG_SETTING_FORBID_90_DEG :Απαγόρευση στα τρένα και πλοία να κάνουν στροφές 90°: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG :Απαγόρευση στα τρένα να κάνουν στροφές 90°: {STRING} STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Στροφές 90 μοιρών προκύπτουν όταν μια οριζόντια σιδηροτροχιά ακολουθείται από μια κάθετη στο επόμενο τετραγωνίδιο, κάνοντας το τρένο να στρίψει κατά 90 μοίρες όταν αλλάζει τετραγωνίδιο, αντί για τις συνηθισμένες 45 μοίρες σε άλλους συνδυασμούς σιδηροτροχιών. Αυτό έχει επίσης εφαρμογή στην ακτίνα στροφής των πλοίων STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Να επιτρέπεται η συνένωση μη παρακείμενων σταθμών: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Επιτρέπεται η προσθήκη τμημάτων σε σταθμό χωρίς αυτά να αγγίζουν τα ήδη υπάρχοντα τμήματα. Χρειάζεται Ctrl+Κλικ κατά την τοποθέτηση των νέων τμημάτων @@ -1361,8 +1366,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Παράγον STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Ορίζεται η σχετική ταχύτητα των αεροπλάνων συγκριτικά με τους άλλους τύπους οχημάτων, ώστε να μειώνεται το ποσό του εισοδήματος από μεταφορές με αεροσκάφη STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Αριθμός των αεροπορικών ατυχημάτων: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Ορίστε την πιθανότητα συντριβής ενός αεροσκάφους -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Καθόλου +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Ορίστε την πιθανότητα συντριβής ενός τυχαίου αεροσκάφους.{}* Μεγάλα αεροσκάφη πάντα έχουν ένα ρίσκο συντριβής όταν προσγειώνονται σε μικρά αεροδρόμια. +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Κανένα* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Μειωμένη STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Κανονική STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Επιτρέπονται οι στάσεις σε δρόμους που είναι ιδιοκτησία των πόλεων : {STRING} @@ -1374,6 +1379,7 @@ STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Συντήρη STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Όταν είναι ενεργοποιημένη, οι υποδομές προκαλούν έξοδα συντήρησης. Το κόστος μεγαλώνει δυσανάλογα με το μέγεθος του δικτύου, επηρεάζοντας έτσι τις μεγάλες εταιρείες περισσότερο από τις μικρότερες STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Αρχικό χρώμα εταιρίας: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Επιλογή του αρχικού χρώματος της εταιρίας STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Τα αεροδρόμια δεν λήγουν ποτέ: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Ενεργοποιώντας αυτήν τη ρύθμιση κάθε τύπος αεροδρομίου παραμένει διαθέσιμο για πάντα μετά την παρουσίασή του @@ -1687,6 +1693,9 @@ 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 :Δημιουργία εμπορευμάτων πόλης: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Η ποσότητα εμπορευμάτων που παράγεται απο σπίτια σε πόλεις, σε σχέση με τον πληθυσμό της πόλης.{}Τετραγωνική ανάπτυξη: Μια πόλη διπλού μεγέθους παράγει τετραπλάσιο αριθμό επιβατών.{}Γραμμική ανάπτυξη: Μια πόλη διπλού μεγέθους παράγει διπλάσιο αριθμό επιβατών. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Τετραγωνικός (αρχική έκδοση) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Γραμμικό STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Τοποθέτηση δέντρων εντός παιχνιδιού: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Έλεγχος της τυχαίας εμφάνισης δέντρων κατά τη διάρκεια του παιχνιδιού. Αυτό είναι πιθανό να επηρεάσει βιομηχανίες που εξαρτώνται από την ανάπτυξη των δέντρων, όπως για παράδειγμα οι υλοτομίες @@ -1891,7 +1900,7 @@ STR_INTRO_TRANSLATION :{BLACK}Λείπ # Quit window STR_QUIT_CAPTION :{WHITE}Έξοδος -STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Είστε σίγουροι ότι θέλετε να εγκαταλείψετε το OpenTTD και να επιστρέψετε στο {STRING}; +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Είστε σίγουροι ότι θέλετε να εγκαταλείψετε το OpenTTD και να επιστρέψετε στο λειτουργικό {STRING}; STR_QUIT_YES :{BLACK}Ναι STR_QUIT_NO :{BLACK}Όχι @@ -2188,6 +2197,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Αποσ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Η πρόσβαση στον διακομιστή προστατεύεται. Εισάγετε τον κωδικό STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Η εταιρεία προστατεύεται από κωδικό. Εισάγετε κωδικό +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Λίστα συμμετεχόντων # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Λίστα συμμετεχόντων @@ -2236,7 +2246,7 @@ STR_NETWORK_CHAT_ALL :[Όλοι] {STR STR_NETWORK_CHAT_OSKTITLE :{BLACK}Εισάγετε το κείμενο για δικτυακή συζήτηση # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Δεν βρέθηκε συσκευή δικτύου ή έγινε μεταγλώττιση χωρίς την παράμετρο ENABLE_NETWORK +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Δεν βρέθηκαν συσκευές δικτύου STR_NETWORK_ERROR_NOSERVER :{WHITE}Δεν βρέθηκε κάποιο δικτυακό παιχνίδι STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Ο διακομιστής δεν απάντησε στο αίτημα STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Απέτυχε η σύνδεση λόγο ασυμφωνίας NewGRF @@ -2488,9 +2498,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Συνδ STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Σηματοδότης Τροχιάς (ηλεκτρικός){}Ένας σηματοδότης τροχιάς επιτρέπει σε περισσότερα από ένα τρένο να είναι σε ένα κομμάτι ελέγχου την ίδια στιγμή, εάν το τρένο μπορεί να δεσμεύσει τροχιά σε ασφαλές σημείο στάσης. Κανονικοί σηματοδότες τροχιάς μπορούν να περαστούν από την πίσω πλευρά STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Μονόδρομος Σηματοδότης Τροχιάς (ηλεκτρικός){}Ένας σηματοδότης τροχιάς επιτρέπει σε περισσότερα από ένα τρένο να είναι σε ένα κομμάτι ελέγχου την ίδια στιγμή, εάν το τρένο μπορεί να δεσμεύσει τροχιά σε ασφαλές σημείο στάσης. Μονόδρομοι σηματοδότες τροχιάς δεν μπορούν να περαστούν από την πίσω πλευρά STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Μετατροπέας Σηματοδότη{}Όταν επιλέγεται, πατώντας σε έναν υπάρχωντα σηματοδότη θα τον μετατρέψει στον επιλεγμένο τύπο και παραλλαγή σηματοδότη. Με Ctrl+Κλικ εναλλάσσεται με την υπάρχουσα παραλλαγή. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος μετατροπής -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Πυκνότητα σηματοδοτών με σύρσιμο -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Μείωση πυκνότητας σηματοδοτών με σύρσιμο -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Αύξηση πυκνότητας σηματοδοτών με σύρσιμο +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Απόσταση μεταξύ σηματοδοτών με σύρσιμο +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Μείωση απόστασης μεταξύ σηματοδοτών με σύρσιμο +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Αύξηση απόστασης μεταξύ σηματοδοτών με σύρσιμο # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Επιλογή Γέφυρας @@ -2809,37 +2819,44 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Ιδιοκτη # About OpenTTD window STR_ABOUT_OPENTTD :{WHITE}Σχετικά με το OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Αρχικά Πνευματικά Δικαιώματα {COPYRIGHT} 1995 Chris Sawyer, Όλα τα δικαιώματα διατηρούνται -STR_ABOUT_VERSION :{BLACK}Έκδοση OpenTTD{REV} +STR_ABOUT_VERSION :{BLACK}OpenTTD έκδοση {REV} STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 Η ομάδα του 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_GAMELOOP_TOOLTIP :{BLACK}Αριθμός στιγμών παιχνιδιού που προσομοιώνεται ανά δευτερόλεπτο. STR_FRAMERATE_RATE_BLITTER :{BLACK}Ρυθμός καρέ γραφικών: {STRING} -STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Αριθμος των παραγμενων video frames ανα δευτερολεπτο -STR_FRAMERATE_SPEED_FACTOR :{WHITE}Παράγοντας ταχύτητας τρέχοντος παιχνιδιού: {DECIMAL}x +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Αριθμος των παραγμενων καρέ ανα δευτερολεπτο +STR_FRAMERATE_SPEED_FACTOR :{BLACK}Παράγοντας ταχύτητας τρέχοντος παιχνιδιού: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Πόσο γρήγορα εκτελείται το παιχνίδι αυτήν τη στιγμή, σε σύγκριση με την αναμενόμενη ταχύτητα στον κανονικό ρυθμό εξομοίωσης. STR_FRAMERATE_CURRENT :{WHITE}Τρέχον STR_FRAMERATE_AVERAGE :{WHITE}Μέσο -STR_FRAMERATE_DATA_POINTS :{WHITE}Τα δεδομένα βασίζονται σε μετρήσεις {COMMA} -STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL}{WHITE} ms +STR_FRAMERATE_DATA_POINTS :{BLACK}Τα δεδομένα βασίζονται σε μετρήσεις {COMMA} +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms -STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} frames/δευτ. -STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} frames/δευτ. +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} καρέ/δευτερόλεπτο +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} καρέ/δευτερόλεπτο +STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} καρέ/δευτερόλεπτο +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} ς ############ Leave those lines in this order!! -STR_FRAMERATE_GL_ECONOMY :{WHITE} Διαχείριση φορτίου: -STR_FRAMERATE_GL_TRAINS :Στιγμές τρένων: -STR_FRAMERATE_GL_ROADVEHS :{WHITE} Στιγμές οχημάτων δρόμου: -STR_FRAMERATE_GL_SHIPS :Στιγμές πλοίων: -STR_FRAMERATE_GL_AIRCRAFT :Στιγμές αεροσκαφών: -STR_FRAMERATE_GL_LANDSCAPE :Στιγμές κόσμου: +STR_FRAMERATE_GAMELOOP :{BLACK}Σύνολο βρόγχου παιχνιδιού: +STR_FRAMERATE_GL_ECONOMY :{BLACK} Διαχείριση φορτίου: +STR_FRAMERATE_GL_TRAINS :{BLACK} Στιγμές τρένων: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Στιγμές οχημάτων δρόμου: +STR_FRAMERATE_GL_SHIPS :{BLACK} Στιγμές πλοίων: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Στιγμές αεροσκαφών: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Στιγμές κόσμου: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Καθυστέρηση γραφήματος συνδέσμου: STR_FRAMERATE_DRAWING :{BLACK}Γραφική απόδοση: STR_FRAMERATE_DRAWING_VIEWPORTS :Παράθυρα προβολής κόσμου: -STR_FRAMERATE_VIDEO :{WHITE}Έξοδος βίντεο: -STR_FRAMERATE_SOUND :{WHITE}Μίξη ήχου: +STR_FRAMERATE_VIDEO :{BLACK}Έξοδος βίντεο: +STR_FRAMERATE_SOUND :{BLACK}Μίξη ήχου: STR_FRAMERATE_ALLSCRIPTS :Σύνολο GS/AI: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Δέσμη ενεργειών παιχνιδιού: STR_FRAMERATE_AI :{BLACK} AI {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! @@ -2857,6 +2874,7 @@ 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} ############ End of leave-in-this-order @@ -3005,6 +3023,7 @@ STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Παλέ STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Προεπιλογή (D) STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Προεπιλογή (D) / 32 bpp STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Παλαιού τύπου (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Παλαιού τύπου (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Παράμετροι: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PARAMETER_NONE :Κανένα @@ -3088,6 +3107,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Οι ζητημ STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :Το {1:STRING} απενεργοποιήθηκε από το {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Άκυρη/άγνωστη μορφή σχεδίου sprite (sprite {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Πάρα πολλά αντικέιμενα στη λίστα τιμών ιδιοτήτων (sprite {3:NUM}, ιδιότητα {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Άγνωστη/άκυρη σπιτροφή κήσης από παραγωγή βιομηχανίας (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Προσοχή! @@ -3113,12 +3133,13 @@ STR_NEWGRF_BROKEN :{WHITE}Η συ STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Άλλαξε την κατάσταση *** για «{1:ENGINE}» όταν δεν είναι μέσα σε αμαξοστάσιο STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Άλλαξε το μήκος του οχήματος «{1:ENGINE}» ενώ δεν βρισκόταν μέσα σε αμαξοστάσιο STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Άλλαξε τη χωριτικότητα όχηματος για τη «{1:ENGINE}» όταν δεν είναι σε αμαξοστάσιο ή διαδικασία μετατροπής -STR_BROKEN_VEHICLE_LENGTH :{WHITE}Το τρένο «{VEHICLE}» που ανήκει στην εταιρία «{COMPANY}» έχει μη έγκυρο μήκος. Πιθανόν να προέρχεται από προβλήματα με NewGRF. Το παιχνίδι μπορεί να αποσυγχρονιστεί ή να κλείσει απρόοπτα. +STR_BROKEN_VEHICLE_LENGTH :{WHITE}Το τρένο «{VEHICLE}» που ανήκει στην εταιρία «{COMPANY}» έχει μη έγκυρο μήκος. Πιθανόν να προκλήθηκε από προβλήματα με κάποια NewGRF. Το παιχνίδι μπορεί να αποσυγχρονιστεί ή να κλείσει απρόοπτα. STR_NEWGRF_BUGGY :{WHITE}Το NewGRF «{0:STRING}» δίνει λάθος πληροφορίες STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Η πληροφορία εμπορεύματος/μετατροπής για το «{1:ENGINE}» διαφέρει από τη λίστα αγοράς μετά την κατασκευή. Αυτό μπορεί να προκαλέσει την αποτυχία της αυτόματης ανανέωσης/αντικατάστασης για σωστή μετατροπή STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}Το «{1:STRING}» προκάλεσε ένα ατέρμονο βρόχο στην κλήση παραγωγής STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Η κλήση {1:HEX} επέστρεψε άγνωστο/άκυρο αποτέλεσμα {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}Το '{1:STRING}' επέστρεψε άγνωστο/άκυρο τύπο εμπορεύματος στην κλήση {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO :<μη έγκυρο φορτίο> @@ -3527,6 +3548,7 @@ 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_LIVERY_TOOLTIP :{BLACK}Αλλαγή εμφάνισης της επιλεγμένης ομάδας STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Πατήστε για προστατέψετε αυτήν την ομάδα από την γενική αυτόματη αντικατάσταση STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Διαγραφή ομάδας @@ -3554,6 +3576,7 @@ STR_BUY_VEHICLE_SHIP_CAPTION :Νέα Πλοί STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Νέα Αεροσκάφη STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Κόστος: {GOLD}{CURRENCY_LONG}{BLACK} Βάρος: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Κόστος: {GOLD}{CURRENCY_LONG}{BLACK} (Κόστος μετατροπής: {GOLD}{CURRENCY_LONG}{BLACK}) Βάρος: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Ταχύτητα: {GOLD}{VELOCITY}{BLACK} Δύναμη κινητήρα: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Ταχύτητα: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Ταχύτητα στον ωκεανό: {GOLD}{VELOCITY} @@ -3564,6 +3587,7 @@ STR_PURCHASE_INFO_REFITTABLE :(μετατρέ STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Έτος σχεδίασης: {GOLD}{NUM}{BLACK} Χρόνος ζωής: {GOLD}{COMMA} χρόν{P ο ια} 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} @@ -3571,7 +3595,8 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Χωρη 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_ALL_BUT :Όλοι εκτός από {CARGO_LIST} +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} τετραγωνίδια STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Τύπος αεροσκάφους: {GOLD}{STRING} @@ -3589,6 +3614,7 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Αγορ STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Αγορά και μετατροπή οχήματος STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Αγορά και μετατροπή οχήματος STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Αγορά και μετατροπή πλοίου +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Αγορά και μετατροπή του αεροσκάφους STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου οχήματος τρένου. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Αγορά του επιλεγμένου οχήματος δρόμου. Με Shift+Κλικ εμφανίζεται το εκτιμώμενο κόστος χωρίς αγορά diff --git a/src/lang/latin.txt b/src/lang/latin.txt index bfc7157c90..56f05fe299 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -377,6 +377,8 @@ STR_COLOUR_ORANGE :Fulvus STR_COLOUR_BROWN :Aquilus STR_COLOUR_GREY :Canus STR_COLOUR_WHITE :Albus +STR_COLOUR_RANDOM :Fortuitus +STR_COLOUR_DEFAULT :Solitus # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -652,6 +654,7 @@ STR_TOOLBAR_SOUND_MUSIC :Sonus musicave ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Monstrare nuntium novissimum STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Historia nuntiorum +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Delere omnia nuntia ############ range ends here ############ range for about menu starts @@ -1114,6 +1117,7 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Randum Africae STR_GAME_OPTIONS_CURRENCY_CUSTOM :Propria... STR_GAME_OPTIONS_CURRENCY_GEL :Lari Georgiana (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Regalis Iranica (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Novus Rubelus Russicus (RUB) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Vehicula Viaria @@ -1376,8 +1380,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Arduitas tegula STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Arduitas clivorum vehiculis viariis: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Arduitas tegulae clivosae vehiculo viario. Arduitate maiore, difficultas ascendendi maior est vehiculis -STR_CONFIG_SETTING_FORBID_90_DEG :Vetare tramina et naves cursum flectere 90°: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Tramina possunt cursum flectere in astariis aut 45° (diagonale deinde horizontale/verticale) aut 90° (horizontale deinde verticale); quoque naves possunt cursum 90° aut 45° cursum flectere. Hac electa, tantum 45° licet +STR_CONFIG_SETTING_FORBID_90_DEG :Vetare traminum cursum flectere 90°: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Tramina possunt cursum flectere in astariis aut 45° (diagonale deinde horizontale/verticale) aut 90° (horizontale deinde verticale). Hac electa, tantum 45° licet. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Sinere stationes iungi quae non contigua sunt: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Sinere partes stationi addere quae non prorsus contigua sunt. Necesse est Ctrl premere dum novae partes adduntur. STR_CONFIG_SETTING_INFLATION :Inflatio: {STRING} @@ -1433,8 +1437,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Multiplicator v STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Eligere si aeroplana eant lentius quam alia vehicula, ut reditus aeroplanorum minuatur STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Calamitates aeroplanicae accidunt: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Eligere crebritatem calamitatum aeroplanicarum -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Numquam +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Eligere crebritatem calamitatum aeroplanicarum.{}* Aeroplana magna tamen semper corruere possunt si aeroportui parvo appellant. +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Numquam* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Raro STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Mediocriter STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Sinere stationes viarias pervias esse in viis oppidorum: {STRING} @@ -1998,6 +2002,7 @@ STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Mutare a STR_CHEAT_SETUP_PROD :{LTBLUE}Sinere mutare productiones industriarum: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}{COMPANY} Schema Coloris STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Monstrare schemata coloris generalia STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Monstrare schemata coloris traminum @@ -2305,7 +2310,7 @@ STR_NETWORK_CHAT_ALL :[Omnibus] {STRI STR_NETWORK_CHAT_OSKTITLE :{BLACK}Inscribere nuntium ad retis colloquium # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Nullae res retis inventae vel compilata sine ENABLE_NETWORK +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Nullae res retis inventae STR_NETWORK_ERROR_NOSERVER :{WHITE}Nulli ludi in rete inventi STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Nulla responsa a servatro STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Non potest iungere propter NewGRF imparia @@ -2571,9 +2576,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Signale STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Signale Itineris (electricum){}Signale itineris sinit plura tramina inire intra signalia eodem tempore, si tramen potest reservare iter ad destinatum tutum. Signalia itineris usitata possunt transiri a tergo STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Signale Itineris Unius Cursus (electricum){}Signale itineris sinit plura tramina inire intra signalia eodem tempore, si tramen potest reservare iter ad destinatum tutum. Signalia itineris unius cursus non possunt transiri a tergo STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Mutare Signalia{}Electa, pressio in signale facit ut mutetur in novum typum electum. Ctrl+Preme ut signale mutetur inter semaphoricum et electricum. Shift mutat inter mutationem et aestimationem monstrandam -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Densitas signalia trahendi -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Minuere densitatem signalia trahendi -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Augere densitatem signalia trahendi +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Intervallum signalia trahendi +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Minuere intervallum signalia trahendi +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Augere intervallum signalia trahendi # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Eligere Pontem Ferriviarium @@ -2893,7 +2898,7 @@ STR_LAI_OBJECT_DESCRIPTION_COMPANY_OWNED_LAND :Terra societati STR_ABOUT_OPENTTD :{WHITE}De OpenTTD STR_ABOUT_ORIGINAL_COPYRIGHT :{BLACK}Privilegium impressorium originale {COPYRIGHT} MCMXCV Chris Sawyer, Omnia proprietatis iura reservantur STR_ABOUT_VERSION :{BLACK}OpenTTD editio {REV} -STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} MMII-MMXVII Manus OpenTTD +STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} MMII-MMXIX Manus OpenTTD # Framerate display window ############ Leave those lines in this order!! @@ -3194,6 +3199,7 @@ STR_TOWN_POPULATION :{BLACK}Incolae STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Urbs) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Incolae: {ORANGE}{COMMA}{BLACK} Aedificia: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} mensis prioris: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Onera mandata ad oppidum crescendum: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} mandatur STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} hieme mandatur @@ -3246,6 +3252,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Largiri # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Proposita STR_GOALS_SPECTATOR_CAPTION :{WHITE}Proposita Universalia +STR_GOALS_SPECTATOR :Proposita universalia STR_GOALS_GLOBAL_TITLE :{BLACK}Proposita universalia: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Nullae - @@ -3555,6 +3562,7 @@ STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Greges - STR_GROUP_CREATE_TOOLTIP :{BLACK}Preme ut grex creatur STR_GROUP_DELETE_TOOLTIP :{BLACK}Delere gregem electam STR_GROUP_RENAME_TOOLTIP :{BLACK}Renominare gregem electam +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Mutare schema coloris gregis electi STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Preme ut vehicula huius gregis custodiantur contra autocommutationem universalem STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Gregem Delere @@ -3613,6 +3621,8 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Emere Ve STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Emere Navem STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Emere Aeroplanum +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Emere reficereque vehiculum +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Emere reficereque aeroplanum STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Emere vehiculum ferriviarium electum. Shift+Preme ut pretium monstretur sine emptione STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Emere vehiculum viarium electum. Shift+Preme ut pretium monstretur sine emptione diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 2a423497b0..d5e5d9b643 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -321,7 +321,7 @@ STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Aumentar STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opções STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Guardar jogo, abandonar jogo, sair STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Mostrar mapa -STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Mostrar lista de cidades +STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Mostrar lista de localidades STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Mostrar subsídios STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Mostrar lista de estações da empresa STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Mostrar informações financeiras da empresa @@ -354,9 +354,9 @@ STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Editor STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Retroceder data de início 1 ano STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Avançar data de início 1 ano STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Clique para escolher o ano inicial -STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Mostrar mapa, lista de cidades +STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Mostrar mapa, lista de localidades STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Gerar terreno -STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Gerar cidades +STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Gerar localidades STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Gerar indústrias STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Construir estradas STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantar árvores. Shift alterna contruir/mostrar custo estimado @@ -379,7 +379,7 @@ STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Definições STR_SETTINGS_MENU_SCRIPT_SETTINGS :Definições de IA / Scripts de Jogo STR_SETTINGS_MENU_NEWGRF_SETTINGS :Definições NewGRF STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Opções de Transparência -STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Mostrar nomes de cidades +STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Mostrar nomes de localidades STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Mostrar nomes de estações STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Mostrar nomes dos pontos de passagem STR_SETTINGS_MENU_SIGNS_DISPLAYED :Mostrar sinais @@ -405,8 +405,8 @@ STR_MAP_MENU_LINGRAPH_LEGEND :Legenda de flux STR_MAP_MENU_SIGN_LIST :Lista de sinais ############ range for town menu starts -STR_TOWN_MENU_TOWN_DIRECTORY :Lista de cidades -STR_TOWN_MENU_FOUND_TOWN :Fundar cidade +STR_TOWN_MENU_TOWN_DIRECTORY :Lista de localidades +STR_TOWN_MENU_FOUND_TOWN :Fundar localidade ############ range ends here ############ range for subsidies menu starts @@ -748,12 +748,12 @@ STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Rochas STR_SMALLMAP_LEGENDA_WATER :{TINY_FONT}{BLACK}Água STR_SMALLMAP_LEGENDA_NO_OWNER :{TINY_FONT}{BLACK}Sem Proprietário -STR_SMALLMAP_LEGENDA_TOWNS :{TINY_FONT}{BLACK}Cidades +STR_SMALLMAP_LEGENDA_TOWNS :{TINY_FONT}{BLACK}Localidades STR_SMALLMAP_LEGENDA_INDUSTRIES :{TINY_FONT}{BLACK}Indústrias STR_SMALLMAP_LEGENDA_DESERT :{TINY_FONT}{BLACK}Deserto STR_SMALLMAP_LEGENDA_SNOW :{TINY_FONT}{BLACK}Neve -STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Mostrar/ocultar nomes das cidades no mapa +STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Mostrar/ocultar nomes das localidades no mapa STR_SMALLMAP_CENTER :{BLACK}Centrar o mapa na posição actual STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STRING} ({NUM}) STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} @@ -818,8 +818,8 @@ STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLAC STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} foi comprada por {STRING}! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Presidente) -STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} subsidiou a construção da nova cidade de {TOWN}! -STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Uma nova cidade chamada {TOWN} foi construida! +STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} subsidiou a construção da nova localidade de {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Uma nova localidade chamada {TOWN} foi fundada! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Nov{G 0 o o a os as} {STRING} em construção em {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Nov{G 0 o o a os as} {STRING} est{G 0 á á á ão ão} a ser plantad{G 0 o o a os as} em {TOWN}! @@ -941,8 +941,8 @@ STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_TOOLTIP :{BLACK}Seleccio STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT :Circular pela esquerda STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_RIGHT :Circular pela direita -STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Nomes das cidades -STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Seleccionar o estilo dos nomes das cidades +STR_GAME_OPTIONS_TOWN_NAMES_FRAME :{BLACK}Nomes das localidades +STR_GAME_OPTIONS_TOWN_NAMES_DROPDOWN_TOOLTIP :{BLACK}Seleccionar o estilo dos nomes das localidades ############ start of townname region STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH :Inglês @@ -1175,7 +1175,7 @@ STR_CONFIG_SETTING_TRAIN_REVERSING :Desabilitar inv STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Quando activo, os combóios não podem inverter marcha em estações não-terminais, mesmo se existir um caminho mais curto para o destino seguinte com inversão STR_CONFIG_SETTING_DISASTERS :Desastres: {STRING} STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Activa desastres que podem ocasionalmente bloquear ou destruir veículos ou infraestruturas -STR_CONFIG_SETTING_CITY_APPROVAL :Atitude da do Concelho Municipal em relação a reestruturação de áreas: {STRING} +STR_CONFIG_SETTING_CITY_APPROVAL :Atitude do Concelho Municipal em relação a reestruturação de áreas: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Escolha quanto ruído e estragos ambientais causados pelas empresas afecta o rating da povoação e futuras acções de construção na área STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Altura máxima do mapa: {STRING} @@ -1185,6 +1185,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Permite altera STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Permite alteração de terra sob edifícios e vias sem os remover STR_CONFIG_SETTING_CATCHMENT :Dimensionamento mais realista de áreas de abrangência: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Haver diferentes áreas de cobertura para diferentes tipos de estações e aeroportos +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Estações da companhia podem servir industrias equipadas com estações neutras: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Quando activo, industrias com estações incluídas (com as Petrolíferas) podem ser servidas por estações da companhia construídas nas redondezas. Quando inactivo, estas industrias só podem ser servidas pela sua própria estação. Qualquer estação da companhia não poderá servir a industria, nem a estação incluída poder servir outra entidade senão a própria industria STR_CONFIG_SETTING_EXTRADYNAMITE :Permite remover mais estradas, pontes e túneis detidos pela cidade: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Facilitar a remoçar de edifícios e infraestruturas detidas pela localidade STR_CONFIG_SETTING_TRAIN_LENGTH :Tamanho máximo de comboios: {STRING} @@ -1202,7 +1204,7 @@ STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Ângulo de inclínação para veículos rodoviários: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Declive de um quadrado inclinado para um veiculo de estrada. Valores mais altos tornam mais difícil de subir. STR_CONFIG_SETTING_FORBID_90_DEG :Proibir comboios fazer curvas de 90º: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Curvas de 90 graus ocorrem quando uma pista horizontal é directamente seguida por outra vertical num quadrado adjacente, fazendo com que o combóio vire 90 graus quando atravessa a fronteira dos quadrados, ao invés dos habituais 45 graus para outras combinações de pistas. Também se aplica ao raio de curvatura dos navios +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Curvas de 90 graus ocorrem quando uma pista horizontal é directamente seguida por outra vertical num quadrado adjacente, fazendo com que o combóio vire 90 graus quando atravessa a fronteira dos quadrados, ao invés dos habituais 45 graus para outras combinações de pistas. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Permitir juntar estações não adjacentes: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Permite adicionar novas partes a uma estação sem tocar nas partes já existentes. Requer pressionar CTRL+click para adicionar as novas partes STR_CONFIG_SETTING_INFLATION :Inflação: {STRING} @@ -1247,7 +1249,7 @@ STR_CONFIG_SETTING_BRIBE_HELPTEXT :Permite que as STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Permite comprar direitos de transporte em exclusividade: {STRING} STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Se uma empresa compra direitos exclusivos de transporte para uma localidade, as estações dos concorrentes (passageiros e carga) não receberão cargo durante um ano STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Permite investir em edifícios: {STRING} -STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Permite que empresas doem dinheiro às cidades para financiar novas casas +STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Permite que empresas doem dinheiro às localidades para financiar novas casas STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Permite financiar a reconstrução de estradas locais:{STRING} STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Permite que as companhias financiem reparações de estrada para sabotar serviços rodoviários dos oponentes. STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Permite enviar dinheiro para outras empresas: {STRING} @@ -1262,7 +1264,7 @@ STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Indicar a hipó STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Nenhum* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Reduzido STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal -STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Permite estações de passagem em estradas das cidades: {STRING} +STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Permite estações de passagem em estradas das localidades: {STRING} STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Permite construção de paragens drive-through em ruas que são prorpiedade das povoações STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Permite estações de passagem em estradas do adversário: {STRING} STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Permite construção de paragens drive-through em ruas que são prorpiedade de outras companhias @@ -1574,7 +1576,7 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :grelha 2x2 STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :grelha 3x3 STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Aleatório STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :As localidades têm permissão para construir estradas: {STRING} -STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Permite às cidades a construção de estradas para crescimento. Desactivar para não permitir às autoridades a construção de estradas +STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Permite às localidades a construção de estradas para crescimento. Desactivar para não permitir às autoridades a construção de estradas STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Localidades podem construir passagens de nível: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Activar esta preferência permite às localidades construir cruzamentos nivelados STR_CONFIG_SETTING_NOISE_LEVEL :Permitir que a localidade controle o nível de ruído dos aeroportos: {STRING} @@ -1629,7 +1631,7 @@ STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Quantidade de l STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 em {COMMA} STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Nenhum STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Multiplicador inicial para a dimensão das metrópoles: {STRING} -STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Tamanho relativo das metrópoles em relação ao tamanho normal das cidades aquando o início do jogo +STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Tamanho relativo das cidades em relação ao tamanho normal das localidades aquando o início do jogo STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Actualizar gráfico de distribuição a cada {STRING} dia{P 0:2 "" s} STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Tempo entre recalculos subsequentes de cada gráfico. Cada recalculo calcula os planos para cada componente do gráfico. Isto significa que um valor X para essa configuração não indica que o gráfico será todo actualizado a cada X dias. Apenas alguns componentes serão. Quanto mais curto o definir, mais tempo será necessário ao CPU para o calcular. Quanto mais longo, mais tempo levará até que a distribuição da carga inicie em novas rotas. @@ -2138,7 +2140,7 @@ STR_NETWORK_CHAT_ALL :[Todos] {STRING STR_NETWORK_CHAT_OSKTITLE :{BLACK}Introduza a mensagem para os outros jogadores # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Não foram encontradas interfaces de rede ou o jogo foi compilado sem ENABLE_NETWORK +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Não foram encontradas interfaces de rede STR_NETWORK_ERROR_NOSERVER :{WHITE}Não foram encontrados jogos de rede STR_NETWORK_ERROR_NOCONNECTION :{WHITE}O servidor não respondeu ao pedido STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Impossível ligar devido a incompatibilidade de NewGRF @@ -2534,16 +2536,16 @@ STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Tem a ce # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Gerar Localidades -STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Nova Cidade -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Fundar nova cidade. Shift+Clique mostra apenas o custo estimado -STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Cidade Aleatória -STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Fundar uma cidade num local aleatório +STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Nova Localidade +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Fundar nova localidade. Shift+Clique mostra apenas o custo estimado +STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Localidade Aleatória +STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Fundar uma localidade num local aleatório STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Várias localidades aleatórias -STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Cobrir o mapa com cidades colocadas aleatoriamente +STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Cobrir o mapa com localidades colocadas aleatoriamente -STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Nome da cidade: -STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Introduza o nome da cidade -STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Clique para introduzir o nome da cidade +STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Nome da localidade: +STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Introduza o nome da localidade +STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Clique para introduzir o nome da localidade STR_FOUND_TOWN_NAME_RANDOM_BUTTON :{BLACK}Nome aleatório STR_FOUND_TOWN_NAME_RANDOM_TOOLTIP :{BLACK}Gerar novo nome aleatório @@ -2553,11 +2555,11 @@ STR_FOUND_TOWN_INITIAL_SIZE_MEDIUM_BUTTON :{BLACK}Média STR_FOUND_TOWN_INITIAL_SIZE_LARGE_BUTTON :{BLACK}Grande STR_FOUND_TOWN_SIZE_RANDOM :{BLACK}Aleatório STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Seleccione o tamanho da localidade -STR_FOUND_TOWN_CITY :{BLACK}Metrópole +STR_FOUND_TOWN_CITY :{BLACK}Cidade STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Cidades crescem mais depressa do que as localidades normais{}Dependendo da configuração, são maiores aquando da sua fundação -STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Disposição de estradas na cidade: -STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Seleccione disposição das estradas utilizada para esta cidade +STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}Disposição de estradas na localidade: +STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Seleccione disposição das estradas utilizada para esta localidade STR_FOUND_TOWN_SELECT_LAYOUT_ORIGINAL :{BLACK}Original STR_FOUND_TOWN_SELECT_LAYOUT_BETTER_ROADS :{BLACK}Estradas melhores STR_FOUND_TOWN_SELECT_LAYOUT_2X2_GRID :{BLACK}grelha 2x2 @@ -2803,7 +2805,7 @@ STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}Gerador STR_MAPGEN_MAPSIZE :{BLACK}Dim. do mapa: STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Seleccionar o tamanho do mapa em mosaicos. O numero de mosaicos disponiveis será ligeiramente menor STR_MAPGEN_BY :{BLACK}* -STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Num. de cidades: +STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Num. de localidades: STR_MAPGEN_DATE :{BLACK}Data: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Num. de indústrias: STR_MAPGEN_MAX_HEIGHTLEVEL :{BLACK}Altura máxima do mapa: @@ -3062,16 +3064,16 @@ STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Ir para STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Introduza um nome para o sinal # Town directory window -STR_TOWN_DIRECTORY_CAPTION :{WHITE}Cidades +STR_TOWN_DIRECTORY_CAPTION :{WHITE}Localidades STR_TOWN_DIRECTORY_NONE :{ORANGE}- Nenhuma - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Cidade){BLACK} ({COMMA}) -STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Nomes das cidades - clique no nome para centrar a visualização na cidade. Ctrl+Clique abre um novo visualizador na localização da cidade +STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Nomes das localidades - clique no nome para centrar a visualização na cidade. Ctrl+Clique abre um novo visualizador na localização da localidade STR_TOWN_POPULATION :{BLACK}População Mundial: {COMMA} # Town view window STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} -STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Metrópole) +STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Cidade) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}População: {ORANGE}{COMMA}{BLACK} Casas: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} ultimo mês: {ORANGE}{COMMA}{BLACK} max: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Mercadoria necessária para o seu desenvolvimento: @@ -3080,28 +3082,28 @@ STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{BLACK}No inver STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} entregue STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (ainda necessário) STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (entregue) -STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Cidade cresce a cada {ORANGE}{COMMA}{BLACK} dia{P "" s} -STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Cidade cresce a cada {ORANGE}{COMMA}{BLACK} dia{P "" s} (financiado) -STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Cidade {RED}não{BLACK} está a crescer -STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Limite de ruído na cidade: {ORANGE}{COMMA}{BLACK} máx: {ORANGE}{COMMA} -STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Centrar visualização na cidade. Ctrl+Clique abre um novo visualizador na localização da cidade +STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Localidade cresce a cada {ORANGE}{COMMA}{BLACK}{NBSP}dia{P "" s} +STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Localidade cresce a cada {ORANGE}{COMMA}{BLACK}{NBSP}dia{P "" s} (financiado) +STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Localidade {RED}não{BLACK} está a crescer +STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Limite de ruído na localidade: {ORANGE}{COMMA}{BLACK} máx: {ORANGE}{COMMA} +STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Centrar visualização na localidade. Ctrl+Clique abre um novo visualizador na localização da localidade STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Autoridade local STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Ver informações sobre a autoridade local -STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Alterar o nome da cidade +STR_TOWN_VIEW_RENAME_TOOLTIP :{BLACK}Alterar o nome da localidade STR_TOWN_VIEW_EXPAND_BUTTON :{BLACK}Expandir STR_TOWN_VIEW_EXPAND_TOOLTIP :{BLACK}Aumentar o tamanho da cidade STR_TOWN_VIEW_DELETE_BUTTON :{BLACK}Apagar -STR_TOWN_VIEW_DELETE_TOOLTIP :{BLACK}Apagar completamente esta cidade +STR_TOWN_VIEW_DELETE_TOOLTIP :{BLACK}Apagar completamente esta localidade -STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Renomear Cidade +STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Renomear Localidade # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN} autoridade local STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Avaliações da empresa de transporte: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Acções disponíveis: -STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lista de acções disponíveis nesta cidade - fazer clique no item para mais detalhes +STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lista de acções disponíveis nesta localidade - fazer clique no item para mais detalhes STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Aplicar STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Realizar a acção destacada na lista acima @@ -3119,8 +3121,8 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Iniciar STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Iniciar uma campanha publicitária grande, para atrair mais passageiros e carga à sua empresa.{}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Financiar a reconstrução da rede rodoviária urbana. Causa engarrafamentos consideráveis ao tráfego até 6 meses.{}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Construir uma estátua em honra da sua empresa.{}Custo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Financiar a construção de edifícios comerciais novos na cidade.{}Custo: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Comprar a exclusividade dos serviços durante 1 ano na cidade. A autoridade da cidade permitirá que os passageiros e a carga usem somente estações da sua empresa.{}Custo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Financiar a construção de edifícios comerciais novos na localidade.{}Custo: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Comprar a exclusividade dos serviços durante 1 ano nesta localidade. A autoridade local permitirá que os passageiros e a carga usem somente estações da sua empresa.{}Custo: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}Subornar a autoridade local para aumentar a sua avaliação, correndo o risco de uma penalidade severa se apanhado.{}Custo: {CURRENCY_LONG} # Goal window @@ -3134,7 +3136,7 @@ STR_GOALS_SPECTATOR_NONE :{ORANGE}- Não STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} STR_GOALS_COMPANY_TITLE :{BLACK}Objetivos da empresa: -STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique no objetivo para centrar a vista principal na indústria/cidade/quadrado. Ctrl+clique abre uma nova vista na localização da indústria/cidade/quadrado +STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique no objetivo para centrar a vista principal na indústria/localidade/quadrado. Ctrl+Clique abre uma nova vista na localização da indústria/localidade/quadrado # Goal question window STR_GOAL_QUESTION_CAPTION_QUESTION :Questão @@ -3170,7 +3172,7 @@ STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING STR_SUBSIDIES_NONE :{ORANGE}- Nenhum - STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Serviços já subsidiados: STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} d{G 1 e o a os as} {STRING} para{G 2 "" " o" " a" " os" " as"} {STRING}{YELLOW} ({COMPANY}{YELLOW}, até {DATE_SHORT}) -STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique num serviço para centrar a visualização numa indústria/cidade. Ctrl+Clique abre um novo visualizador na localização da indústria/cidade +STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Clique num serviço para centrar a visualização numa indústria/localidade. Ctrl+Clique abre um novo visualizador na localização da indústria/localidade # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Livro de História @@ -3206,8 +3208,8 @@ STR_STATION_VIEW_ACCEPTS_BUTTON :{BLACK}Aceita STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}Mostrar lista de carga aceite STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}Aceita: {WHITE}{CARGO_LIST} -STR_STATION_VIEW_EXCLUSIVE_RIGHTS_SELF :{BLACK}Esta estação tem direitos de transporte exclusivos nesta cidade. -STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPANY}{BLACK} comprou direitos exclusivos de transporte nesta cidade. +STR_STATION_VIEW_EXCLUSIVE_RIGHTS_SELF :{BLACK}Esta estação tem direitos de transporte exclusivos nesta localidade. +STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPANY}{BLACK} comprou direitos exclusivos de transporte nesta localidade. STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Avaliações STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Mostrar avaliações da estação @@ -3468,6 +3470,7 @@ STR_BUY_VEHICLE_SHIP_CAPTION :Novos Barcos STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nova Aeronave STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Custo: {GOLD}{CURRENCY_LONG}{BLACK} Peso: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Custo: {GOLD}{CURRENCY_LONG}{BLACK} (Custo da conversão: {GOLD}{CURRENCY_LONG}{BLACK}) Peso: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Velocidade: {GOLD}{VELOCITY}{BLACK} Potência: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Velocidade: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Velocidade no oceano: {GOLD}{VELOCITY} @@ -3481,6 +3484,7 @@ STR_PURCHASE_INFO_COST :{BLACK}Custo: { STR_PURCHASE_INFO_COST_REFIT :{BLACK}Custo: {GOLD}{CURRENCY_LONG}{BLACK} (Custo da adaptação: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Peso: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Custo: {GOLD}{CURRENCY_LONG}{BLACK} Velocidade: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Custo: {GOLD}{CURRENCY_LONG}{BLACK} (Custo de conversão: {GOLD}{CURRENCY_LONG}{BLACK}) Velocidade: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacidade: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagões Motorizados: {GOLD}+{POWER}{BLACK} Peso: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Reconvertível para: {GOLD}{STRING} diff --git a/src/lang/russian.txt b/src/lang/russian.txt index fbc70a0399..dae1be714b 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -3649,18 +3649,21 @@ STR_BUY_VEHICLE_SHIP_CAPTION :Новый ко STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Новый авиатранспорт STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Цена: {GOLD}{CURRENCY_LONG}{BLACK} Вес: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Цена: {GOLD}{CURRENCY_LONG}{BLACK} (Стоимость переоборудования: {GOLD}{CURRENCY_LONG}{BLACK}) Вес: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Скорость: {GOLD}{VELOCITY}{BLACK} Мощность: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Скорость: {GOLD}{VELOCITY} -STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Скорость по океану: {GOLD}{VELOCITY} -STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}Скорость по каналу/реке: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Скорость в море: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}Скорость в каналах и реках: {GOLD}{VELOCITY} STR_PURCHASE_INFO_RUNNINGCOST :{BLACK}Стоимость обслуживания: {GOLD}{CURRENCY_LONG}/год STR_PURCHASE_INFO_CAPACITY :{BLACK}Ёмкость: {GOLD}{CARGO_LONG} {STRING} STR_PURCHASE_INFO_REFITTABLE :(переоб.) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Разработан в {GOLD}{NUM} г.{BLACK} Срок службы: {GOLD}{COMMA} {P год года лет} 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} @@ -3681,12 +3684,20 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Купи STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Купить STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Купить +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Купить и переоборудовать +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Купить и переоборудовать +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Купить и переоборудовать +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Купить и переоборудовать -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Купить выбранный локомотив/вагон. Shift+щелчок - оценка стоимости покупки. -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Купить выбранный автомобиль. Shift+щелчок - оценка стоимости покупки. -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Купить выбранный корабль. Shift+щелчок - оценка стоимости покупки. -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Купить выбранный авиатранспорт. Shift+щелчок - оценка стоимости покупки. +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Приобрести выбранный локомотив/вагон. Shift+щелчок покажет ориентировочную стоимость покупки. +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Приобрести выбранный автомобиль. Shift+щелчок покажет ориентировочную стоимость покупки. +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Приобрести выбранное судно. Shift+щелчок покажет ориентировочную стоимость покупки. +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Приобрести выбранное воздушное судно. Shift+щелчок покажет ориентировочную стоимость покупки. +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Приобрести и переоборудовать выбранный локомотив/вагон. Shift+щелчок покажет ориентировочную стоимость покупки. +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+щелчок покажет ориентировочную стоимость покупки. STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Переименовать STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Переименовать From 4b349c0f90c3f7b6a39171cec41cd98dcd0d88b7 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Thu, 20 Sep 2018 22:41:43 +0100 Subject: [PATCH 545/622] Codechange: [core] Implement SmallVector using std::vector The public and protected interface to SmallVector are unchanged SmallVector now requires that items be default constructible This isn't an issue since some contained items were previously created uninitialized. Temporary default constructors are added to the following structs - SmallPair - SmallStackItem - GRFPresence Where vector is required, transition immediately to std::vector to avoid returning proxy object references. --- src/core/smallmap_type.hpp | 51 +++++++++---- src/core/smallstack_type.hpp | 1 + src/core/smallvec_type.hpp | 135 +++++++++++---------------------- src/fios_gui.cpp | 4 +- src/gamelog.cpp | 1 + src/script/squirrel_helper.hpp | 2 +- src/sortlist_type.h | 12 +-- 7 files changed, 90 insertions(+), 116 deletions(-) diff --git a/src/core/smallmap_type.hpp b/src/core/smallmap_type.hpp index dda0fc2a1e..44ace6b45b 100644 --- a/src/core/smallmap_type.hpp +++ b/src/core/smallmap_type.hpp @@ -27,6 +27,7 @@ struct SmallPair { /** Initializes this Pair with data */ inline SmallPair(const T &first, const U &second) : first(first), second(second) { } + SmallPair() = default; }; /** @@ -56,8 +57,8 @@ struct SmallMap : SmallVector, S> { */ inline const Pair *Find(const T &key) const { - for (uint i = 0; i < this->items; i++) { - if (key == this->data[i].first) return &this->data[i]; + for (uint i = 0; i < std::vector::size(); i++) { + if (key == std::vector::operator[](i).first) return &std::vector::operator[](i); } return this->End(); } @@ -69,12 +70,23 @@ struct SmallMap : SmallVector, S> { */ inline Pair *Find(const T &key) { - for (uint i = 0; i < this->items; i++) { - if (key == this->data[i].first) return &this->data[i]; + for (uint i = 0; i < std::vector::size(); i++) { + if (key == std::vector::operator[](i).first) return &std::vector::operator[](i); } return this->End(); } + inline const Pair *End() const + { + return &*std::vector::end(); + } + + inline Pair *End() + { + return &*std::vector::end(); + } + + /** * Tests whether a key is assigned in this map. * @param key key to test @@ -85,6 +97,16 @@ struct SmallMap : SmallVector, S> { return this->Find(key) != this->End(); } + /** + * Tests whether a key is assigned in this map. + * @param key key to test + * @return true iff the item is present + */ + inline bool Contains(const T &key) + { + return this->Find(key) != this->End(); + } + /** * Removes given pair from this map * @param pair pair to remove @@ -93,7 +115,7 @@ struct SmallMap : SmallVector, S> { inline void Erase(Pair *pair) { assert(pair >= this->Begin() && pair < this->End()); - *pair = this->data[--this->items]; + SmallVector::Erase(pair); } /** @@ -104,13 +126,12 @@ struct SmallMap : SmallVector, S> { */ inline bool Erase(const T &key) { - for (uint i = 0; i < this->items; i++) { - if (key == this->data[i].first) { - this->data[i] = this->data[--this->items]; - return true; - } - } - return false; + Pair *pair = this->Find(key); + if (pair == this->End()) + return false; + + SmallVector::Erase(pair); + return true; } /** @@ -136,8 +157,8 @@ struct SmallMap : SmallVector, S> { */ inline U &operator[](const T &key) { - for (uint i = 0; i < this->items; i++) { - if (key == this->data[i].first) return this->data[i].second; + for (uint i = 0; i < std::vector::size(); i++) { + if (key == std::vector::operator[](i).first) return std::vector::operator[](i).second; } Pair *n = this->Append(); n->first = key; @@ -146,7 +167,7 @@ struct SmallMap : SmallVector, S> { inline void SortByKey() { - QSortT(this->Begin(), this->items, KeySorter); + QSortT(this->Begin(), std::vector::size(), KeySorter); } static int CDECL KeySorter(const Pair *a, const Pair *b) diff --git a/src/core/smallstack_type.hpp b/src/core/smallstack_type.hpp index 06b5aaafa6..b053c32a85 100644 --- a/src/core/smallstack_type.hpp +++ b/src/core/smallstack_type.hpp @@ -106,6 +106,7 @@ struct SmallStackItem { */ inline SmallStackItem(const Titem &value, Tindex next) : next(next), value(value) {} + SmallStackItem() = default; }; /** diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 588dd599dc..795435d7ac 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -14,6 +14,8 @@ #include "alloc_func.hpp" #include "mem_func.hpp" +#include +#include /** * Simple vector template class. @@ -26,43 +28,30 @@ * @tparam S The steps of allocation */ template -class SmallVector { -protected: - T *data; ///< The pointer to the first item - uint items; ///< The number of items stored - uint capacity; ///< The available space for storing items - +class SmallVector : public std::vector { public: - SmallVector() : data(NULL), items(0), capacity(0) { } + SmallVector() = default; /** * Copy constructor. * @param other The other vector to copy. */ - SmallVector(const SmallVector &other) : data(NULL), items(0), capacity(0) - { - this->Assign(other); - } + SmallVector(const SmallVector &other) = default; /** * Generic copy constructor. * @param other The other vector to copy. */ template - SmallVector(const SmallVector &other) : data(NULL), items(0), capacity(0) + SmallVector(const SmallVector &other) : std::vector(other) { - this->Assign(other); } /** * Assignment. * @param other The other vector to assign. */ - SmallVector &operator=(const SmallVector &other) - { - this->Assign(other); - return *this; - } + SmallVector &operator=(const SmallVector &other) = default; /** * Generic assignment. @@ -75,10 +64,7 @@ public: return *this; } - ~SmallVector() - { - free(this->data); - } + ~SmallVector() = default; /** * Assign items from other vector. @@ -88,8 +74,7 @@ public: { if ((const void *)&other == (void *)this) return; - this->Clear(); - if (other.Length() > 0) MemCpyT(this->Append(other.Length()), other.Begin(), other.Length()); + std::vector::operator=(other); } /** @@ -97,10 +82,7 @@ public: */ inline void Clear() { - /* In fact we just reset the item counter avoiding the need to - * probably reallocate the same amount of memory the list was - * previously using. */ - this->items = 0; + std::vector::clear(); } /** @@ -108,10 +90,8 @@ public: */ inline void Reset() { - this->items = 0; - this->capacity = 0; - free(data); - data = NULL; + std::vector::clear(); + std::vector::shrink_to_fit(); } /** @@ -119,11 +99,7 @@ public: */ inline void Compact() { - uint capacity = Align(this->items, S); - if (capacity >= this->capacity) return; - - this->capacity = capacity; - this->data = ReallocT(this->data, this->capacity); + std::vector::shrink_to_fit(); } /** @@ -133,15 +109,8 @@ public: */ inline T *Append(uint to_add = 1) { - uint begin = this->items; - this->items += to_add; - - if (this->items > this->capacity) { - this->capacity = Align(this->items, S); - this->data = ReallocT(this->data, this->capacity); - } - - return &this->data[begin]; + std::vector::resize(std::vector::size() + to_add); + return this->End() - to_add; } /** @@ -150,12 +119,7 @@ public: */ inline void Resize(uint num_items) { - this->items = num_items; - - if (this->items > this->capacity) { - this->capacity = Align(this->items, S); - this->data = ReallocT(this->data, this->capacity); - } + std::vector::resize(num_items); } /** @@ -167,11 +131,8 @@ public: { assert(item >= this->Begin() && item <= this->End()); - size_t to_move = this->End() - item; size_t start = item - this->Begin(); - - this->Append(); - if (to_move > 0) MemMoveT(this->Begin() + start + 1, this->Begin() + start, to_move); + std::vector::insert(std::vector::begin() + start); return this->Begin() + start; } @@ -211,14 +172,8 @@ public: */ inline int FindIndex(const T &item) const { - int index = 0; - const T *pos = this->Begin(); - const T *end = this->End(); - while (pos != end && *pos != item) { - pos++; - index++; - } - return pos == end ? -1 : index; + auto const it = this->Find(item); + return it == this->End() ? -1 : it - this->Begin(); } /** @@ -240,7 +195,8 @@ public: inline void Erase(T *item) { assert(item >= this->Begin() && item < this->End()); - *item = this->data[--this->items]; + *item = std::vector::back(); + std::vector::pop_back(); } /** @@ -250,7 +206,8 @@ public: */ void ErasePreservingOrder(uint pos, uint count = 1) { - ErasePreservingOrder(this->data + pos, count); + auto const it = std::vector::begin() + pos; + std::vector::erase(it, it + count); } /** @@ -260,13 +217,7 @@ public: */ inline void ErasePreservingOrder(T *item, uint count = 1) { - if (count == 0) return; - assert(item >= this->Begin()); - assert(item + count <= this->End()); - - this->items -= count; - ptrdiff_t to_move = this->End() - item; - if (to_move > 0) MemMoveT(item, item + count, to_move); + this->ErasePreservingOrder(item - this->Begin(), count); } /** @@ -289,7 +240,7 @@ public: */ inline uint Length() const { - return this->items; + return std::vector::size(); } /** @@ -299,7 +250,7 @@ public: */ inline const T *Begin() const { - return this->data; + return std::vector::data(); } /** @@ -309,7 +260,7 @@ public: */ inline T *Begin() { - return this->data; + return std::vector::data(); } /** @@ -319,7 +270,7 @@ public: */ inline const T *End() const { - return &this->data[this->items]; + return std::vector::data() + std::vector::size(); } /** @@ -329,7 +280,7 @@ public: */ inline T *End() { - return &this->data[this->items]; + return std::vector::data() + std::vector::size(); } /** @@ -341,8 +292,8 @@ public: inline const T *Get(uint index) const { /* Allow access to the 'first invalid' item */ - assert(index <= this->items); - return &this->data[index]; + assert(index <= std::vector::size()); + return this->Begin() + index; } /** @@ -354,8 +305,8 @@ public: inline T *Get(uint index) { /* Allow access to the 'first invalid' item */ - assert(index <= this->items); - return &this->data[index]; + assert(index <= std::vector::size()); + return this->Begin() + index; } /** @@ -366,8 +317,8 @@ public: */ inline const T &operator[](uint index) const { - assert(index < this->items); - return this->data[index]; + assert(index < std::vector::size()); + return std::vector::operator[](index); } /** @@ -378,8 +329,8 @@ public: */ inline T &operator[](uint index) { - assert(index < this->items); - return this->data[index]; + assert(index < std::vector::size()); + return std::vector::operator[](index); } }; @@ -407,11 +358,11 @@ public: */ inline void Clear() { - for (uint i = 0; i < this->items; i++) { - free(this->data[i]); + for (uint i = 0; i < std::vector::size(); i++) { + free(std::vector::operator[](i)); } - this->items = 0; + std::vector::clear(); } }; @@ -438,11 +389,11 @@ public: */ inline void Clear() { - for (uint i = 0; i < this->items; i++) { - delete this->data[i]; + for (uint i = 0; i < std::vector::size(); i++) { + delete std::vector::operator[](i); } - this->items = 0; + std::vector::clear(); } }; diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index f2f96cd283..f4a2f497bd 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -279,7 +279,7 @@ private: StringFilter string_filter; ///< Filter for available games. QueryString filter_editbox; ///< Filter editbox; - SmallVector fios_items_shown; ///< Map of the filtered out fios items + std::vector fios_items_shown; ///< Map of the filtered out fios items static void SaveGameConfirmationCallback(Window *w, bool confirmed) { @@ -824,7 +824,7 @@ public: case SLIWD_FILTER_CHANGES: /* Filter changes */ - this->fios_items_shown.Resize(this->fios_items.Length()); + this->fios_items_shown.resize(this->fios_items.Length()); uint items_shown_count = 0; ///< The number of items shown in the list /* We pass through every fios item */ for (uint i = 0; i < this->fios_items.Length(); i++) { diff --git a/src/gamelog.cpp b/src/gamelog.cpp index 29910d7ad1..1698dadad8 100644 --- a/src/gamelog.cpp +++ b/src/gamelog.cpp @@ -178,6 +178,7 @@ struct GRFPresence{ bool was_missing; ///< Grf was missing during some gameload in the past GRFPresence(const GRFConfig *gc) : gc(gc), was_missing(false) {} + GRFPresence() = default; }; typedef SmallMap GrfIDMapping; diff --git a/src/script/squirrel_helper.hpp b/src/script/squirrel_helper.hpp index 22d738d4f7..002c561069 100644 --- a/src/script/squirrel_helper.hpp +++ b/src/script/squirrel_helper.hpp @@ -32,7 +32,7 @@ namespace SQConvert { struct SQAutoFreePointers : SmallVector { ~SQAutoFreePointers() { - for (uint i = 0; i < this->items; i++) free(this->data[i]); + for (uint i = 0; i < std::vector::size(); i++) free(std::vector::operator[](i)); } }; diff --git a/src/sortlist_type.h b/src/sortlist_type.h index 1a30c3b1a8..74b6f37b35 100644 --- a/src/sortlist_type.h +++ b/src/sortlist_type.h @@ -67,7 +67,7 @@ protected: */ bool IsSortable() const { - return (this->data != NULL && this->items >= 2); + return std::vector::size() >= 2; } /** @@ -240,7 +240,7 @@ public: { this->flags ^= VL_DESC; - if (this->IsSortable()) MemReverseT(this->data, this->items); + if (this->IsSortable()) MemReverseT(std::vector::data(), std::vector::size()); } /** @@ -270,11 +270,11 @@ public: if (this->flags & VL_FIRST_SORT) { CLRBITS(this->flags, VL_FIRST_SORT); - QSortT(this->data, this->items, compare, desc); + QSortT(std::vector::data(), std::vector::size(), compare, desc); return true; } - GSortT(this->data, this->items, compare, desc); + GSortT(std::vector::data(), std::vector::size(), compare, desc); return true; } @@ -337,8 +337,8 @@ public: if (!(this->flags & VL_FILTER)) return false; bool changed = false; - for (uint iter = 0; iter < this->items;) { - T *item = &this->data[iter]; + for (uint iter = 0; iter < std::vector::size();) { + T *item = &std::vector::operator[](iter); if (!decide(item, filter_data)) { this->Erase(item); changed = true; From bfd79e59dc34314a089a0024af56d04d84456ebd Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Thu, 20 Sep 2018 23:44:14 +0100 Subject: [PATCH 546/622] Codechange: Replace SmallVector::Clear() with std::vector::clear() --- src/animated_tile.cpp | 2 +- src/autoreplace_gui.cpp | 4 ++-- src/build_vehicle_gui.cpp | 8 ++++---- src/command.cpp | 8 ++++---- src/company_gui.cpp | 4 ++-- src/core/smallvec_type.hpp | 8 -------- src/economy.cpp | 2 +- src/engine.cpp | 2 +- src/fios.h | 2 +- src/fios_gui.cpp | 2 +- src/gfx_layout.cpp | 4 ++-- src/graph_gui.cpp | 2 +- src/group_gui.cpp | 4 ++-- src/hotkeys.cpp | 2 +- src/industry_gui.cpp | 6 +++--- src/network/core/tcp_listen.h | 2 +- src/network/core/udp.cpp | 2 +- src/network/network_content.cpp | 8 ++++---- src/network/network_content_gui.cpp | 2 +- src/network/network_gui.cpp | 2 +- src/network/network_udp.cpp | 2 +- src/newgrf.cpp | 10 +++++----- src/newgrf_commons.cpp | 2 +- src/newgrf_gui.cpp | 2 +- src/newgrf_sound.cpp | 2 +- src/rail_cmd.cpp | 2 +- src/saveload/afterload.cpp | 2 +- src/saveload/animated_tile_sl.cpp | 2 +- src/saveload/engine_sl.cpp | 2 +- src/saveload/labelmaps_sl.cpp | 4 ++-- src/saveload/waypoint_sl.cpp | 4 ++-- src/settingsgen/settingsgen.cpp | 2 +- src/signs_gui.cpp | 2 +- src/station_gui.cpp | 6 +++--- src/story_gui.cpp | 4 ++-- src/strgen/strgen_base.cpp | 2 +- src/string.cpp | 4 ++-- src/textfile_gui.cpp | 2 +- src/town_cmd.cpp | 2 +- src/town_gui.cpp | 2 +- src/train_gui.cpp | 2 +- src/vehicle.cpp | 2 +- src/vehicle_cmd.cpp | 4 ++-- src/vehicle_gui.cpp | 4 ++-- src/vehiclelist.cpp | 6 +++--- src/viewport.cpp | 10 +++++----- src/window.cpp | 4 ++-- 47 files changed, 80 insertions(+), 88 deletions(-) diff --git a/src/animated_tile.cpp b/src/animated_tile.cpp index 2a4cd89583..5d43848202 100644 --- a/src/animated_tile.cpp +++ b/src/animated_tile.cpp @@ -75,5 +75,5 @@ void AnimateAnimatedTiles() */ void InitializeAnimatedTiles() { - _animated_tiles.Clear(); + _animated_tiles.clear(); } diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index 3a8a7543d5..356058e938 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -123,7 +123,7 @@ class ReplaceVehicleWindow : public Window { byte side = draw_left ? 0 : 1; GUIEngineList *list = &this->engines[side]; - list->Clear(); + list->clear(); const Engine *e; FOR_ALL_ENGINES_OF_TYPE(e, type) { @@ -170,7 +170,7 @@ class ReplaceVehicleWindow : public Window { /* Either we got a request to rebuild the right engines list, or the left engines list selected a different engine */ if (this->sel_engine[0] == INVALID_ENGINE) { /* Always empty the right engines list when nothing is selected in the left engines list */ - this->engines[1].Clear(); + this->engines[1].clear(); this->sel_engine[1] = INVALID_ENGINE; } else { if (this->reset_sel_engine && this->sel_engine[0] != INVALID_ENGINE) { diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index a086feccce..e160d6daca 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1228,7 +1228,7 @@ struct BuildVehicleWindow : Window { this->filter.railtype = (this->listview_mode) ? RAILTYPE_END : GetRailType(this->window_number); - this->eng_list.Clear(); + this->eng_list.clear(); /* Make list of all available train engines and wagons. * Also check to see if the previously selected engine is still available, @@ -1276,7 +1276,7 @@ struct BuildVehicleWindow : Window { { EngineID sel_id = INVALID_ENGINE; - this->eng_list.Clear(); + this->eng_list.clear(); const Engine *e; FOR_ALL_ENGINES_OF_TYPE(e, VEH_ROAD) { @@ -1295,7 +1295,7 @@ struct BuildVehicleWindow : Window { void GenerateBuildShipList() { EngineID sel_id = INVALID_ENGINE; - this->eng_list.Clear(); + this->eng_list.clear(); const Engine *e; FOR_ALL_ENGINES_OF_TYPE(e, VEH_SHIP) { @@ -1314,7 +1314,7 @@ struct BuildVehicleWindow : Window { { EngineID sel_id = INVALID_ENGINE; - this->eng_list.Clear(); + this->eng_list.clear(); const Station *st = this->listview_mode ? NULL : Station::GetByTile(this->window_number); diff --git a/src/command.cpp b/src/command.cpp index 7500a170bd..b914563fc4 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -469,7 +469,7 @@ CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, DoCommandFlag flags, /* only execute the test call if it's toplevel, or we're not execing. */ if (_docommand_recursive == 1 || !(flags & DC_EXEC) ) { - if (_docommand_recursive == 1) _cleared_object_areas.Clear(); + if (_docommand_recursive == 1) _cleared_object_areas.clear(); SetTownRatingTestMode(true); res = proc(tile, flags & ~DC_EXEC, p1, p2, text); SetTownRatingTestMode(false); @@ -492,7 +492,7 @@ CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, DoCommandFlag flags, /* Execute the command here. All cost-relevant functions set the expenses type * themselves to the cost object at some point */ - if (_docommand_recursive == 1) _cleared_object_areas.Clear(); + if (_docommand_recursive == 1) _cleared_object_areas.clear(); res = proc(tile, flags, p1, p2, text); if (res.Failed()) { error: @@ -666,7 +666,7 @@ CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, bool test_and_exec_can_differ = (cmd_flags & CMD_NO_TEST) != 0; /* Test the command. */ - _cleared_object_areas.Clear(); + _cleared_object_areas.clear(); SetTownRatingTestMode(true); BasePersistentStorageArray::SwitchMode(PSM_ENTER_TESTMODE); CommandCost res = proc(tile, flags, p1, p2, text); @@ -710,7 +710,7 @@ CommandCost DoCommandPInternal(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, /* Actually try and execute the command. If no cost-type is given * use the construction one */ - _cleared_object_areas.Clear(); + _cleared_object_areas.clear(); BasePersistentStorageArray::SwitchMode(PSM_ENTER_COMMAND); CommandCost res2 = proc(tile, flags | DC_EXEC, p1, p2, text); BasePersistentStorageArray::SwitchMode(PSM_LEAVE_COMMAND); diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 58f972364b..ba82b44b8c 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -652,8 +652,8 @@ private: { if (!this->groups.NeedRebuild()) return; - this->groups.Clear(); - this->indents.Clear(); + this->groups.clear(); + this->indents.clear(); if (this->livery_class >= LC_GROUP_RAIL) { GUIGroupList list; diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 795435d7ac..89fdd13697 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -77,14 +77,6 @@ public: std::vector::operator=(other); } - /** - * Remove all items from the list. - */ - inline void Clear() - { - std::vector::clear(); - } - /** * Remove all items from the list and free allocated memory. */ diff --git a/src/economy.cpp b/src/economy.cpp index bf520c3f6f..d306fd0bab 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1949,7 +1949,7 @@ void LoadUnloadStation(Station *st) for (Industry **iid = _cargo_delivery_destinations.Begin(); iid != isend; iid++) { TriggerIndustryProduction(*iid); } - _cargo_delivery_destinations.Clear(); + _cargo_delivery_destinations.clear(); } /** diff --git a/src/engine.cpp b/src/engine.cpp index d539a48520..e0536e7ba8 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -487,7 +487,7 @@ StringID Engine::GetAircraftTypeText() const */ void EngineOverrideManager::ResetToDefaultMapping() { - this->Clear(); + this->clear(); for (VehicleType type = VEH_TRAIN; type <= VEH_AIRCRAFT; type++) { for (uint internal_id = 0; internal_id < _engine_counts[type]; internal_id++) { EngineIDMapping *eid = this->Append(); diff --git a/src/fios.h b/src/fios.h index 24c9f370eb..788ac654f5 100644 --- a/src/fios.h +++ b/src/fios.h @@ -185,7 +185,7 @@ public: /** Remove all items from the list. */ inline void Clear() { - this->files.Clear(); + this->files.clear(); } /** Compact the list down to the smallest block size boundary. */ diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index f4a2f497bd..49c1deac37 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -61,7 +61,7 @@ void LoadCheckData::Clear() for (CompanyPropertiesMap::iterator it = this->companies.Begin(); it != end; it++) { delete it->second; } - companies.Clear(); + companies.clear(); GamelogFree(this->gamelog_action, this->gamelog_actions); this->gamelog_action = NULL; diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index 3bf490da67..f0fb391071 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -600,7 +600,7 @@ static inline void GetLayouter(Layouter::LineCacheItem &line, const char *&str, Font *f = Layouter::GetFont(state.fontsize, state.cur_colour); line.buffer = buff_begin; - fontMapping.Clear(); + fontMapping.clear(); /* * Go through the whole string while adding Font instances to the font map @@ -847,7 +847,7 @@ void Layouter::ResetFontCache(FontSize size) for (FontColourMap::iterator it = fonts[size].Begin(); it != fonts[size].End(); ++it) { delete it->second; } - fonts[size].Clear(); + fonts[size].clear(); /* We must reset the linecache since it references the just freed fonts */ ResetLineCache(); diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index d74f833cee..c459e2a03b 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -1136,7 +1136,7 @@ private: { if (!this->companies.NeedRebuild()) return; - this->companies.Clear(); + this->companies.clear(); const Company *c; FOR_ALL_COMPANIES(c) { diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 299bf58ccd..bd8f37ec56 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -167,8 +167,8 @@ private: { if (!this->groups.NeedRebuild()) return; - this->groups.Clear(); - this->indents.Clear(); + this->groups.clear(); + this->indents.clear(); GUIGroupList list; diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp index 12bd827fa5..c88d4499a3 100644 --- a/src/hotkeys.cpp +++ b/src/hotkeys.cpp @@ -273,7 +273,7 @@ void HotkeyList::Load(IniFile *ini) for (Hotkey *hotkey = this->items; hotkey->name != NULL; ++hotkey) { IniItem *item = group->GetItem(hotkey->name, false); if (item != NULL) { - hotkey->keycodes.Clear(); + hotkey->keycodes.clear(); if (item->value != NULL) ParseHotkeys(hotkey, item->value); } } diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 898786ff7d..4fa3501284 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1202,7 +1202,7 @@ protected: void BuildSortIndustriesList() { if (this->industries.NeedRebuild()) { - this->industries.Clear(); + this->industries.clear(); const Industry *i; FOR_ALL_INDUSTRIES(i) { @@ -2414,7 +2414,7 @@ struct IndustryCargoesWindow : public Window { _displayed_industries.reset(); _displayed_industries.set(it); - this->fields.Clear(); + this->fields.clear(); CargoesRow *row = this->fields.Append(); row->columns[0].MakeHeader(STR_INDUSTRY_CARGOES_PRODUCERS); row->columns[1].MakeEmpty(CFT_SMALL_EMPTY); @@ -2492,7 +2492,7 @@ struct IndustryCargoesWindow : public Window { this->ind_cargo = cid + NUM_INDUSTRYTYPES; _displayed_industries.reset(); - this->fields.Clear(); + this->fields.clear(); CargoesRow *row = this->fields.Append(); row->columns[0].MakeHeader(STR_INDUSTRY_CARGOES_PRODUCERS); row->columns[1].MakeEmpty(CFT_SMALL_EMPTY); diff --git a/src/network/core/tcp_listen.h b/src/network/core/tcp_listen.h index 21bcaea3c0..b9f987190f 100644 --- a/src/network/core/tcp_listen.h +++ b/src/network/core/tcp_listen.h @@ -164,7 +164,7 @@ public: for (SocketList::iterator s = sockets.Begin(); s != sockets.End(); s++) { closesocket(s->second); } - sockets.Clear(); + sockets.clear(); DEBUG(net, 1, "[%s] closed listeners", Tsocket::GetName()); } }; diff --git a/src/network/core/udp.cpp b/src/network/core/udp.cpp index 4a2f773682..83c14d2b05 100644 --- a/src/network/core/udp.cpp +++ b/src/network/core/udp.cpp @@ -62,7 +62,7 @@ void NetworkUDPSocketHandler::Close() for (SocketList::iterator s = this->sockets.Begin(); s != this->sockets.End(); s++) { closesocket(s->second); } - this->sockets.Clear(); + this->sockets.clear(); } NetworkRecvStatus NetworkUDPSocketHandler::CloseConnection(bool error) diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 786f1c04a6..0ef0606281 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -981,7 +981,7 @@ void ClientNetworkContentSocketHandler::CheckDependencyState(ContentInfo *ci) if (c->state != ContentInfo::AUTOSELECTED) continue; /* Only unselect when WE are the only parent. */ - parents.Clear(); + parents.clear(); this->ReverseLookupDependency(parents, c); /* First check whether anything depends on us */ @@ -1000,7 +1000,7 @@ void ClientNetworkContentSocketHandler::CheckDependencyState(ContentInfo *ci) if (force_selection) continue; /* "Flood" search to find all items in the dependency graph*/ - parents.Clear(); + parents.clear(); this->ReverseLookupTreeDependency(parents, c); /* Is there anything that is "force" selected?, if so... we're done. */ @@ -1033,8 +1033,8 @@ void ClientNetworkContentSocketHandler::Clear() { for (ContentIterator iter = this->infos.Begin(); iter != this->infos.End(); iter++) delete *iter; - this->infos.Clear(); - this->requested.Clear(); + this->infos.clear(); + this->requested.clear(); } /*** CALLBACK ***/ diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 406c6aa052..2ac7e6b12b 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -385,7 +385,7 @@ class NetworkContentListWindow : public Window, ContentCallback { if (!this->content.NeedRebuild()) return; /* Create temporary array of games to use for listing */ - this->content.Clear(); + this->content.clear(); bool all_available = true; diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index b12aaa8239..1366906b88 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -250,7 +250,7 @@ protected: if (!this->servers.NeedRebuild()) return; /* Create temporary array of games to use for listing */ - this->servers.Clear(); + this->servers.clear(); for (NetworkGameList *ngl = _network_game_list; ngl != NULL; ngl = ngl->next) { *this->servers.Append() = ngl; diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp index cee230c888..b416ee98e3 100644 --- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -668,7 +668,7 @@ void NetworkUDPInitialize() GetBindAddresses(&server, _settings_client.network.server_port); _udp_server_socket = new ServerNetworkUDPSocketHandler(&server); - server.Clear(); + server.clear(); GetBindAddresses(&server, 0); _udp_master_socket = new MasterNetworkUDPSocketHandler(&server); diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 2fc546d4eb..e26577353b 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -1906,7 +1906,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte if (_cur.skip_sprites < 0) return CIR_DISABLED; static SmallVector tmp_layout; - tmp_layout.Clear(); + tmp_layout.clear(); for (;;) { /* no relative bounding box support */ DrawTileSeqStruct *dtss = tmp_layout.Append(); @@ -2591,7 +2591,7 @@ static ChangeInfoResult LoadTranslationTable(uint gvid, int numinfo, ByteReader return CIR_INVALID_ID; } - translation_table.Clear(); + translation_table.clear(); for (int i = 0; i < numinfo; i++) { uint32 item = buf->ReadDWord(); *translation_table.Append() = BSWAP32(item); @@ -4791,7 +4791,7 @@ static void NewSpriteGroup(ByteReader *buf) } static SmallVector adjusts; - adjusts.Clear(); + adjusts.clear(); /* Loop through the var adjusts. Unfortunately we don't know how many we have * from the outset, so we shall have to keep reallocing. */ @@ -8246,7 +8246,7 @@ static void ResetNewGRF() delete *file; } - _grf_files.Clear(); + _grf_files.clear(); _cur.grffile = NULL; } @@ -9332,7 +9332,7 @@ static void AfterLoadGRFs() for (StringIDMapping *it = _string_to_grf_mapping.Begin(); it != _string_to_grf_mapping.End(); it++) { *it->target = MapGRFStringID(it->grfid, it->source); } - _string_to_grf_mapping.Clear(); + _string_to_grf_mapping.clear(); /* Free the action 6 override sprites. */ for (GRFLineToSpriteOverride::iterator it = _grf_line_to_action6_sprite_override.begin(); it != _grf_line_to_action6_sprite_override.end(); it++) { diff --git a/src/newgrf_commons.cpp b/src/newgrf_commons.cpp index 4caf3a5d47..e25f6d0856 100644 --- a/src/newgrf_commons.cpp +++ b/src/newgrf_commons.cpp @@ -661,7 +661,7 @@ void NewGRFSpriteLayout::AllocateRegisters() */ uint32 NewGRFSpriteLayout::PrepareLayout(uint32 orig_offset, uint32 newgrf_ground_offset, uint32 newgrf_offset, uint constr_stage, bool separate_ground) const { - result_seq.Clear(); + result_seq.clear(); uint32 var10_values = 0; /* Create a copy of the spritelayout, so we can modify some values. diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 37844423aa..fcb04be0d6 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -1456,7 +1456,7 @@ private: { if (!this->avails.NeedRebuild()) return; - this->avails.Clear(); + this->avails.clear(); for (const GRFConfig *c = _all_grfs; c != NULL; c = c->next) { bool found = false; diff --git a/src/newgrf_sound.cpp b/src/newgrf_sound.cpp index 0cc113d9df..9d890e9caf 100644 --- a/src/newgrf_sound.cpp +++ b/src/newgrf_sound.cpp @@ -40,7 +40,7 @@ SoundEntry *AllocateSound(uint num) void InitializeSoundPool() { - _sounds.Clear(); + _sounds.clear(); /* Copy original sound data to the pool */ SndCopyToPool(); diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 1c07932cd3..a948ac0f9b 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -167,7 +167,7 @@ RailType AllocateRailType(RailTypeLabel label) /* Set up new rail type */ *rti = _original_railtypes[RAILTYPE_RAIL]; rti->label = label; - rti->alternate_labels.Clear(); + rti->alternate_labels.clear(); /* Make us compatible with ourself. */ rti->powered_railtypes = (RailTypes)(1LL << rt); diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 6ec4ab67c9..851eb6a786 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2942,7 +2942,7 @@ bool AfterLoadGame() SmallVector skip_frames; FOR_ALL_ROADVEHICLES(v) { if (!v->IsFrontEngine()) continue; - skip_frames.Clear(); + skip_frames.clear(); TileIndex prev_tile = v->tile; uint prev_tile_skip = 0; uint cur_skip = 0; diff --git a/src/saveload/animated_tile_sl.cpp b/src/saveload/animated_tile_sl.cpp index c54c4724ab..6db0561cd3 100644 --- a/src/saveload/animated_tile_sl.cpp +++ b/src/saveload/animated_tile_sl.cpp @@ -48,7 +48,7 @@ static void Load_ANIT() } uint count = (uint)SlGetFieldLength() / sizeof(*_animated_tiles.Begin()); - _animated_tiles.Clear(); + _animated_tiles.clear(); _animated_tiles.Append(count); SlArray(_animated_tiles.Begin(), count, SLE_UINT32); } diff --git a/src/saveload/engine_sl.cpp b/src/saveload/engine_sl.cpp index 5221d1bbdc..87b18336ce 100644 --- a/src/saveload/engine_sl.cpp +++ b/src/saveload/engine_sl.cpp @@ -187,7 +187,7 @@ static void Save_EIDS() static void Load_EIDS() { - _engine_mngr.Clear(); + _engine_mngr.clear(); while (SlIterateArray() != -1) { EngineIDMapping *eid = _engine_mngr.Append(); diff --git a/src/saveload/labelmaps_sl.cpp b/src/saveload/labelmaps_sl.cpp index 3b898a3b87..b57a89f208 100644 --- a/src/saveload/labelmaps_sl.cpp +++ b/src/saveload/labelmaps_sl.cpp @@ -81,7 +81,7 @@ void AfterLoadLabelMaps() } } - _railtype_list.Clear(); + _railtype_list.clear(); } /** Container for a label for SaveLoad system */ @@ -108,7 +108,7 @@ static void Save_RAIL() static void Load_RAIL() { - _railtype_list.Clear(); + _railtype_list.clear(); LabelObject lo; diff --git a/src/saveload/waypoint_sl.cpp b/src/saveload/waypoint_sl.cpp index ae74d812b1..2567c2c93f 100644 --- a/src/saveload/waypoint_sl.cpp +++ b/src/saveload/waypoint_sl.cpp @@ -172,7 +172,7 @@ static const SaveLoad _old_waypoint_desc[] = { static void Load_WAYP() { /* Precaution for when loading failed and it didn't get cleared */ - _old_waypoints.Clear(); + _old_waypoints.clear(); int index; @@ -201,7 +201,7 @@ static void Ptrs_WAYP() * whether we're in the NULL or "normal" Ptrs proc. So just clear the list * of old waypoints we constructed and then this waypoint (and the other * possibly corrupt ones) will not be queried in the NULL Ptrs proc run. */ - _old_waypoints.Clear(); + _old_waypoints.clear(); SlErrorCorrupt("Referencing invalid Town"); } wp->town = Town::Get(wp->town_index); diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp index d8d76a4d64..35c9911d8b 100644 --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -103,7 +103,7 @@ public: /** Clear the temporary storage. */ void Clear() { - this->output_buffer.Clear(); + this->output_buffer.clear(); } /** diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index 5e752da522..fab2ac912b 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -60,7 +60,7 @@ struct SignList { DEBUG(misc, 3, "Building sign list"); - this->signs.Clear(); + this->signs.clear(); const Sign *si; FOR_ALL_SIGNS(si) *this->signs.Append() = si; diff --git a/src/station_gui.cpp b/src/station_gui.cpp index ef434c4ffc..965240e3ed 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -178,7 +178,7 @@ protected: DEBUG(misc, 3, "Building station list for company %d", owner); - this->stations.Clear(); + this->stations.clear(); const Station *st; FOR_ALL_STATIONS(st) { @@ -2173,8 +2173,8 @@ static const T *FindStationsNearby(TileArea ta, bool distant_join) { TileArea ctx = ta; - _stations_nearby_list.Clear(); - _deleted_stations_nearby.Clear(); + _stations_nearby_list.clear(); + _deleted_stations_nearby.clear(); /* Check the inside, to return, if we sit on another station */ TILE_AREA_LOOP(t, ta) { diff --git a/src/story_gui.cpp b/src/story_gui.cpp index 8b12207e3f..0ccfe2b63d 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -52,7 +52,7 @@ protected: void BuildStoryPageList() { if (this->story_pages.NeedRebuild()) { - this->story_pages.Clear(); + this->story_pages.clear(); const StoryPage *p; FOR_ALL_STORY_PAGES(p) { @@ -78,7 +78,7 @@ protected: void BuildStoryPageElementList() { if (this->story_page_elements.NeedRebuild()) { - this->story_page_elements.Clear(); + this->story_page_elements.clear(); const StoryPage *p = GetSelPage(); if (p != NULL) { diff --git a/src/strgen/strgen_base.cpp b/src/strgen/strgen_base.cpp index 8d46b1b271..8f3f8941fd 100644 --- a/src/strgen/strgen_base.cpp +++ b/src/strgen/strgen_base.cpp @@ -1046,7 +1046,7 @@ void LanguageWriter::WriteLang(const StringData &data) this->WriteLength(buffer.Length()); this->Write(buffer.Begin(), buffer.Length()); - buffer.Clear(); + buffer.clear(); } } } diff --git a/src/string.cpp b/src/string.cpp index 18ed863d0e..cb6c1e8f7e 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -652,8 +652,8 @@ public: * for word break iterators (especially for CJK languages) in combination * with UTF-8 input. As a work around we have to convert the input to * UTF-16 and create a mapping back to UTF-8 character indices. */ - this->utf16_str.Clear(); - this->utf16_to_utf8.Clear(); + this->utf16_str.clear(); + this->utf16_to_utf8.clear(); while (*s != '\0') { size_t idx = s - string_base; diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index 3480a2aef2..018888d0b9 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -319,7 +319,7 @@ static void Xunzip(byte **bufp, size_t *sizep) { if (textfile == NULL) return; - this->lines.Clear(); + this->lines.clear(); /* Get text from file */ size_t filesize; diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 0ae79367cc..35ef97e940 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -3469,7 +3469,7 @@ void SetTownRatingTestMode(bool mode) static int ref_count = 0; // Number of times test-mode is switched on. if (mode) { if (ref_count == 0) { - _town_test_ratings.Clear(); + _town_test_ratings.clear(); } ref_count++; } else { diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 18b767ebca..5cc934f0a8 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -650,7 +650,7 @@ private: void BuildSortTownList() { if (this->towns.NeedRebuild()) { - this->towns.Clear(); + this->towns.clear(); const Town *t; FOR_ALL_TOWNS(t) { diff --git a/src/train_gui.cpp b/src/train_gui.cpp index 51e772b520..5246b59cb1 100644 --- a/src/train_gui.cpp +++ b/src/train_gui.cpp @@ -263,7 +263,7 @@ static void TrainDetailsCapacityTab(const CargoSummaryItem *item, int left, int */ static void GetCargoSummaryOfArticulatedVehicle(const Train *v, CargoSummary *summary) { - summary->Clear(); + summary->clear(); do { if (!v->GetEngine()->CanCarryCargo()) continue; diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 4f987a4bf4..d885a04587 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -942,7 +942,7 @@ static void RunVehicleDayProc() void CallVehicleTicks() { - _vehicles_to_autoreplace.Clear(); + _vehicles_to_autoreplace.clear(); RunVehicleDayProc(); diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 7dd7a790aa..27f2262e78 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -347,7 +347,7 @@ static CommandCost RefitVehicle(Vehicle *v, bool only_this, uint8 num_vehicles, } static SmallVector refit_result; - refit_result.Clear(); + refit_result.clear(); v->InvalidateNewGRFCacheOfChain(); byte actual_subtype = new_subtype; @@ -442,7 +442,7 @@ static CommandCost RefitVehicle(Vehicle *v, bool only_this, uint8 num_vehicles, } } - refit_result.Clear(); + refit_result.clear(); _returned_refit_capacity = total_capacity; _returned_mail_refit_capacity = total_mail_capacity; return cost; diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index f4e7665893..2ae385aa20 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -234,7 +234,7 @@ byte GetBestFittingSubType(Vehicle *v_from, Vehicle *v_for, CargoID dest_cargo_t /* Create a list of subtypes used by the various parts of v_for */ static SmallVector subtypes; - subtypes.Clear(); + subtypes.clear(); for (; v_from != NULL; v_from = v_from->HasArticulatedPart() ? v_from->GetNextArticulatedPart() : NULL) { const Engine *e_from = v_from->GetEngine(); if (!e_from->CanCarryCargo() || !HasBit(e_from->info.callback_mask, CBM_VEHICLE_CARGO_SUFFIX)) continue; @@ -406,7 +406,7 @@ struct RefitWindow : public Window { */ void BuildRefitList() { - for (uint i = 0; i < NUM_CARGO; i++) this->list[i].Clear(); + for (uint i = 0; i < NUM_CARGO; i++) this->list[i].clear(); Vehicle *v = Vehicle::Get(this->window_number); /* Check only the selected vehicles. */ diff --git a/src/vehiclelist.cpp b/src/vehiclelist.cpp index bfe4e5ffd1..4022262685 100644 --- a/src/vehiclelist.cpp +++ b/src/vehiclelist.cpp @@ -70,8 +70,8 @@ bool VehicleListIdentifier::UnpackIfValid(uint32 data) */ void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engines, VehicleList *wagons, bool individual_wagons) { - engines->Clear(); - if (wagons != NULL && wagons != engines) wagons->Clear(); + engines->clear(); + if (wagons != NULL && wagons != engines) wagons->clear(); const Vehicle *v; FOR_ALL_VEHICLES(v) { @@ -115,7 +115,7 @@ void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engine */ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli) { - list->Clear(); + list->clear(); const Vehicle *v; diff --git a/src/viewport.cpp b/src/viewport.cpp index 2cb3baa576..bd0570cf1a 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1620,11 +1620,11 @@ void ViewportDoDraw(const ViewPort *vp, int left, int top, int right, int bottom _cur_dpi = old_dpi; - _vd.string_sprites_to_draw.Clear(); - _vd.tile_sprites_to_draw.Clear(); - _vd.parent_sprites_to_draw.Clear(); - _vd.parent_sprites_to_sort.Clear(); - _vd.child_screen_sprites_to_draw.Clear(); + _vd.string_sprites_to_draw.clear(); + _vd.tile_sprites_to_draw.clear(); + _vd.parent_sprites_to_draw.clear(); + _vd.parent_sprites_to_sort.clear(); + _vd.child_screen_sprites_to_draw.clear(); } /** diff --git a/src/window.cpp b/src/window.cpp index 243114e206..184b9940ae 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -3024,7 +3024,7 @@ void HandleMouseEvents() Blitter *blitter = BlitterFactory::GetCurrentBlitter(); _newgrf_debug_sprite_picker.clicked_pixel = blitter->MoveTo(_screen.dst_ptr, _cursor.pos.x, _cursor.pos.y); _newgrf_debug_sprite_picker.click_time = _realtime_tick; - _newgrf_debug_sprite_picker.sprites.Clear(); + _newgrf_debug_sprite_picker.sprites.clear(); _newgrf_debug_sprite_picker.mode = SPM_REDRAW; MarkWholeScreenDirty(); } else { @@ -3255,7 +3255,7 @@ void Window::ProcessScheduledInvalidations() for (int *data = this->scheduled_invalidation_data.Begin(); this->window_class != WC_INVALID && data != this->scheduled_invalidation_data.End(); data++) { this->OnInvalidateData(*data, true); } - this->scheduled_invalidation_data.Clear(); + this->scheduled_invalidation_data.clear(); } /** From 9cba6f71936207f11ad0d4ed752d82966087fab9 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Fri, 21 Sep 2018 22:45:44 +0100 Subject: [PATCH 547/622] Codechange: Replaced SmallVector::Compact() with std::vector::shrink_to_fit() --- src/build_vehicle_gui.cpp | 4 ++-- src/company_gui.cpp | 2 +- src/core/smallvec_type.hpp | 8 -------- src/fios.h | 2 +- src/graph_gui.cpp | 2 +- src/group_gui.cpp | 2 +- src/industry_gui.cpp | 2 +- src/network/network_content_gui.cpp | 2 +- src/network/network_gui.cpp | 2 +- src/newgrf_gui.cpp | 2 +- src/signs_gui.cpp | 2 +- src/station_gui.cpp | 2 +- src/story_gui.cpp | 4 ++-- src/town_gui.cpp | 2 +- src/vehiclelist.cpp | 6 +++--- 15 files changed, 18 insertions(+), 26 deletions(-) diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index e160d6daca..f580ba7a92 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1345,7 +1345,7 @@ struct BuildVehicleWindow : Window { default: NOT_REACHED(); case VEH_TRAIN: this->GenerateBuildTrainList(); - this->eng_list.Compact(); + this->eng_list.shrink_to_fit(); this->eng_list.RebuildDone(); return; // trains should not reach the last sorting case VEH_ROAD: @@ -1364,7 +1364,7 @@ struct BuildVehicleWindow : Window { _engine_sort_direction = this->descending_sort_order; EngList_Sort(&this->eng_list, _engine_sort_functions[this->vehicle_type][this->sort_criteria]); - this->eng_list.Compact(); + this->eng_list.shrink_to_fit(); this->eng_list.RebuildDone(); } diff --git a/src/company_gui.cpp b/src/company_gui.cpp index ba82b44b8c..19aea17759 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -672,7 +672,7 @@ private: AddChildren(&list, INVALID_GROUP, 0); } - this->groups.Compact(); + this->groups.shrink_to_fit(); this->groups.RebuildDone(); } diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 89fdd13697..9ce63e3f3e 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -86,14 +86,6 @@ public: std::vector::shrink_to_fit(); } - /** - * Compact the list down to the smallest block size boundary. - */ - inline void Compact() - { - std::vector::shrink_to_fit(); - } - /** * Append an item and return it. * @param to_add the number of items to append diff --git a/src/fios.h b/src/fios.h index 788ac654f5..848fe7c8e1 100644 --- a/src/fios.h +++ b/src/fios.h @@ -191,7 +191,7 @@ public: /** Compact the list down to the smallest block size boundary. */ inline void Compact() { - this->files.Compact(); + this->files.shrink_to_fit(); } void BuildFileList(AbstractFileType abstract_filetype, SaveLoadOperation fop); diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index c459e2a03b..a53bef906b 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -1143,7 +1143,7 @@ private: *this->companies.Append() = c; } - this->companies.Compact(); + this->companies.shrink_to_fit(); this->companies.RebuildDone(); } diff --git a/src/group_gui.cpp b/src/group_gui.cpp index bd8f37ec56..3a5aa0eead 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -184,7 +184,7 @@ private: AddChildren(&list, INVALID_GROUP, 0); - this->groups.Compact(); + this->groups.shrink_to_fit(); this->groups.RebuildDone(); } diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 4fa3501284..eb6018973f 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1209,7 +1209,7 @@ protected: *this->industries.Append() = i; } - this->industries.Compact(); + this->industries.shrink_to_fit(); this->industries.RebuildDone(); this->vscroll->SetCount(this->industries.Length()); // Update scrollbar as well. } diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 2ac7e6b12b..cb534d7961 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -397,7 +397,7 @@ class NetworkContentListWindow : public Window, ContentCallback { this->SetWidgetDisabledState(WID_NCL_SEARCH_EXTERNAL, this->auto_select && all_available); this->FilterContentList(); - this->content.Compact(); + this->content.shrink_to_fit(); this->content.RebuildDone(); this->SortContentList(); diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 1366906b88..1451e7154e 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -267,7 +267,7 @@ protected: this->servers.SetFilterState(false); } - this->servers.Compact(); + this->servers.shrink_to_fit(); this->servers.RebuildDone(); this->vscroll->SetCount(this->servers.Length()); diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index fcb04be0d6..4235d31336 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -1481,7 +1481,7 @@ private: } this->avails.Filter(this->string_filter); - this->avails.Compact(); + this->avails.shrink_to_fit(); this->avails.RebuildDone(); this->avails.Sort(); diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index fab2ac912b..84b43c69d0 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -67,7 +67,7 @@ struct SignList { this->signs.SetFilterState(true); this->FilterSignList(); - this->signs.Compact(); + this->signs.shrink_to_fit(); this->signs.RebuildDone(); } diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 965240e3ed..32e22b1616 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -202,7 +202,7 @@ protected: } } - this->stations.Compact(); + this->stations.shrink_to_fit(); this->stations.RebuildDone(); this->vscroll->SetCount(this->stations.Length()); // Update the scrollbar diff --git a/src/story_gui.cpp b/src/story_gui.cpp index 0ccfe2b63d..efb3f36e72 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -61,7 +61,7 @@ protected: } } - this->story_pages.Compact(); + this->story_pages.shrink_to_fit(); this->story_pages.RebuildDone(); } @@ -90,7 +90,7 @@ protected: } } - this->story_page_elements.Compact(); + this->story_page_elements.shrink_to_fit(); this->story_page_elements.RebuildDone(); } diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 5cc934f0a8..b9aa938e63 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -657,7 +657,7 @@ private: *this->towns.Append() = t; } - this->towns.Compact(); + this->towns.shrink_to_fit(); this->towns.RebuildDone(); this->vscroll->SetCount(this->towns.Length()); // Update scrollbar as well. } diff --git a/src/vehiclelist.cpp b/src/vehiclelist.cpp index 4022262685..39ec90e8b9 100644 --- a/src/vehiclelist.cpp +++ b/src/vehiclelist.cpp @@ -103,8 +103,8 @@ void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engine /* Ensure the lists are not wasting too much space. If the lists are fresh * (i.e. built within a command) then this will actually do nothing. */ - engines->Compact(); - if (wagons != NULL && wagons != engines) wagons->Compact(); + engines->shrink_to_fit(); + if (wagons != NULL && wagons != engines) wagons->shrink_to_fit(); } /** @@ -184,6 +184,6 @@ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli default: return false; } - list->Compact(); + list->shrink_to_fit(); return true; } From 56ae855dc20b27593c9a454d5a09d8f892a6c71f Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Fri, 21 Sep 2018 22:50:12 +0100 Subject: [PATCH 548/622] Codechange: Removed SmallVector::operator[] --- src/core/smallvec_type.hpp | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 9ce63e3f3e..be3ec309c6 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -292,30 +292,6 @@ public: assert(index <= std::vector::size()); return this->Begin() + index; } - - /** - * Get item "number" (const) - * - * @param index the position of the item - * @return the item - */ - inline const T &operator[](uint index) const - { - assert(index < std::vector::size()); - return std::vector::operator[](index); - } - - /** - * Get item "number" - * - * @param index the position of the item - * @return the item - */ - inline T &operator[](uint index) - { - assert(index < std::vector::size()); - return std::vector::operator[](index); - } }; From a690936ed75e96627be0e2ecafee2360a71e8d3c Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Sun, 23 Sep 2018 12:23:54 +0100 Subject: [PATCH 549/622] Codechange: Replace SmallVector::Length() with std::vector::size() --- src/autoreplace_gui.cpp | 10 +++--- src/bridge_gui.cpp | 12 +++---- src/build_vehicle_gui.cpp | 12 +++---- src/company_gui.cpp | 8 ++--- src/console_cmds.cpp | 6 ++-- src/core/pool_func.cpp | 2 +- src/core/smallstack_type.hpp | 2 +- src/core/smallvec_type.hpp | 10 ------ src/depot_gui.cpp | 20 ++++++------ src/engine.cpp | 2 +- src/engine_gui.cpp | 6 ++-- src/fios.cpp | 2 +- src/fios.h | 2 +- src/game/game_text.cpp | 4 +-- src/gfx.cpp | 4 +-- src/gfx_layout.cpp | 8 ++--- src/graph_gui.cpp | 2 +- src/group_gui.cpp | 34 ++++++++++---------- src/hotkeys.cpp | 2 +- src/industry_gui.cpp | 18 +++++------ src/linkgraph/linkgraph.h | 2 +- src/music/dmusic.cpp | 4 +-- src/music/midifile.cpp | 6 ++-- src/music/win32_m.cpp | 4 +-- src/network/core/tcp_http.cpp | 2 +- src/network/core/tcp_listen.h | 4 +-- src/network/core/udp.cpp | 4 +-- src/network/network.cpp | 2 +- src/network/network_content.cpp | 18 +++++------ src/network/network_content.h | 2 +- src/network/network_content_gui.cpp | 14 ++++---- src/network/network_gui.cpp | 24 +++++++------- src/newgrf.cpp | 26 +++++++-------- src/newgrf_cargo.cpp | 4 +-- src/newgrf_config.cpp | 12 +++---- src/newgrf_debug_gui.cpp | 6 ++-- src/newgrf_engine.cpp | 2 +- src/newgrf_gui.cpp | 50 ++++++++++++++--------------- src/newgrf_railtype.cpp | 2 +- src/newgrf_sound.cpp | 4 +-- src/os/macosx/string_osx.cpp | 4 +-- src/os/windows/string_uniscribe.cpp | 2 +- src/rail_cmd.cpp | 2 +- src/saveload/animated_tile_sl.cpp | 4 +-- src/saveload/game_sl.cpp | 6 ++-- src/saveload/labelmaps_sl.cpp | 4 +-- src/saveload/linkgraph_sl.cpp | 4 +-- src/saveload/saveload.cpp | 2 +- src/saveload/waypoint_sl.cpp | 2 +- src/script/squirrel_helper.hpp | 6 ++-- src/settings_gui.cpp | 12 +++---- src/settingsgen/settingsgen.cpp | 4 +-- src/signs_gui.cpp | 8 ++--- src/station_cmd.cpp | 2 +- src/station_gui.cpp | 18 +++++------ src/story_gui.cpp | 18 +++++------ src/strgen/strgen_base.cpp | 8 ++--- src/string.cpp | 4 +-- src/stringfilter_type.h | 4 +-- src/strings.cpp | 2 +- src/texteff.cpp | 4 +-- src/textfile_gui.cpp | 10 +++--- src/timetable_cmd.cpp | 4 +-- src/town_gui.cpp | 10 +++--- src/train_cmd.cpp | 2 +- src/train_gui.cpp | 8 ++--- src/vehicle_cmd.cpp | 8 ++--- src/vehicle_gui.cpp | 44 ++++++++++++------------- src/viewport.cpp | 8 ++--- src/widgets/dropdown.cpp | 10 +++--- src/window.cpp | 2 +- 71 files changed, 287 insertions(+), 297 deletions(-) diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index 356058e938..1286dc5a78 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -160,8 +160,8 @@ class ReplaceVehicleWindow : public Window { if (this->engines[0].NeedRebuild()) { /* We need to rebuild the left engines list */ this->GenerateReplaceVehList(true); - this->vscroll[0]->SetCount(this->engines[0].Length()); - if (this->reset_sel_engine && this->sel_engine[0] == INVALID_ENGINE && this->engines[0].Length() != 0) { + this->vscroll[0]->SetCount(this->engines[0].size()); + if (this->reset_sel_engine && this->sel_engine[0] == INVALID_ENGINE && this->engines[0].size() != 0) { this->sel_engine[0] = this->engines[0][0]; } } @@ -180,7 +180,7 @@ class ReplaceVehicleWindow : public Window { } /* Regenerate the list on the right. Note: This resets sel_engine[1] to INVALID_ENGINE, if it is no longer available. */ this->GenerateReplaceVehList(false); - this->vscroll[1]->SetCount(this->engines[1].Length()); + this->vscroll[1]->SetCount(this->engines[1].size()); if (this->reset_sel_engine && this->sel_engine[1] != INVALID_ENGINE) { int position = 0; for (EngineID *it = this->engines[1].Begin(); it != this->engines[1].End(); ++it) { @@ -384,7 +384,7 @@ public: case WID_RV_RIGHT_MATRIX: { int side = (widget == WID_RV_LEFT_MATRIX) ? 0 : 1; EngineID start = this->vscroll[side]->GetPosition(); // what is the offset for the start (scrolling) - EngineID end = min(this->vscroll[side]->GetCapacity() + start, this->engines[side].Length()); + EngineID end = min(this->vscroll[side]->GetCapacity() + start, this->engines[side].size()); /* Do the actual drawing */ DrawEngineList((VehicleType)this->window_number, r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, @@ -508,7 +508,7 @@ public: click_side = 1; } uint i = this->vscroll[click_side]->GetScrolledRowFromWidget(pt.y, this, widget); - size_t engine_count = this->engines[click_side].Length(); + size_t engine_count = this->engines[click_side].size(); EngineID e = engine_count > i ? this->engines[click_side][i] : INVALID_ENGINE; if (e == this->sel_engine[click_side]) break; // we clicked the one we already selected diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index 29cb5a085f..0b4d0d619e 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -153,7 +153,7 @@ public: this->bridges->NeedResort(); this->SortBridgeList(); - this->vscroll->SetCount(bl->Length()); + this->vscroll->SetCount(bl->size()); } ~BuildBridgeWindow() @@ -186,7 +186,7 @@ public: case WID_BBS_BRIDGE_LIST: { Dimension sprite_dim = {0, 0}; // Biggest bridge sprite dimension Dimension text_dim = {0, 0}; // Biggest text dimension - for (int i = 0; i < (int)this->bridges->Length(); i++) { + for (int i = 0; i < (int)this->bridges->size(); i++) { const BridgeSpec *b = this->bridges->Get(i)->spec; sprite_dim = maxdim(sprite_dim, GetSpriteSize(b->sprite)); @@ -226,7 +226,7 @@ public: case WID_BBS_BRIDGE_LIST: { uint y = r.top; - for (int i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < (int)this->bridges->Length(); i++) { + for (int i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < (int)this->bridges->size(); i++) { const BridgeSpec *b = this->bridges->Get(i)->spec; SetDParam(2, this->bridges->Get(i)->cost); @@ -246,7 +246,7 @@ public: EventState OnKeyPress(WChar key, uint16 keycode) override { const uint8 i = keycode - '1'; - if (i < 9 && i < this->bridges->Length()) { + if (i < 9 && i < this->bridges->size()) { /* Build the requested bridge */ this->BuildBridge(i); delete this; @@ -261,7 +261,7 @@ public: default: break; case WID_BBS_BRIDGE_LIST: { uint i = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_BBS_BRIDGE_LIST); - if (i < this->bridges->Length()) { + if (i < this->bridges->size()) { this->BuildBridge(i); delete this; } @@ -426,7 +426,7 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transpo } } - if (bl != NULL && bl->Length() != 0) { + if (bl != NULL && bl->size() != 0) { new BuildBridgeWindow(&_build_bridge_desc, start, end, type, bl); } else { delete bl; diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index f580ba7a92..ce3ebeff46 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -940,7 +940,7 @@ void DrawEngineList(VehicleType type, int l, int r, int y, const GUIEngineList * static const int sprite_y_offsets[] = { -1, -1, -2, -2 }; /* Obligatory sanity checks! */ - assert(max <= eng_list->Length()); + assert(max <= eng_list->size()); bool rtl = _current_text_dir == TD_RTL; int step_size = GetEngineListHeight(type); @@ -1110,7 +1110,7 @@ struct BuildVehicleWindow : Window { this->eng_list.ForceRebuild(); this->GenerateBuildList(); // generate the list, since we need it in the next line /* Select the first engine in the list as default when opening the window */ - if (this->eng_list.Length() > 0) { + if (this->eng_list.size() > 0) { this->SelectEngine(this->eng_list[0]); } else { this->SelectEngine(INVALID_ENGINE); @@ -1205,7 +1205,7 @@ struct BuildVehicleWindow : Window { void FilterEngineList() { this->eng_list.Filter(this->cargo_filter[this->cargo_filter_criteria]); - if (0 == this->eng_list.Length()) { // no engine passed through the filter, invalidate the previously selected engine + if (0 == this->eng_list.size()) { // no engine passed through the filter, invalidate the previously selected engine this->SelectEngine(INVALID_ENGINE); } else if (!this->eng_list.Contains(this->sel_engine)) { // previously selected engine didn't pass the filter, select the first engine of the list this->SelectEngine(this->eng_list[0]); @@ -1388,7 +1388,7 @@ struct BuildVehicleWindow : Window { case WID_BV_LIST: { uint i = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_BV_LIST); - size_t num_items = this->eng_list.Length(); + size_t num_items = this->eng_list.size(); this->SelectEngine((i < num_items) ? this->eng_list[i] : INVALID_ENGINE); this->SetDirty(); if (_ctrl_pressed) { @@ -1529,7 +1529,7 @@ struct BuildVehicleWindow : Window { { switch (widget) { case WID_BV_LIST: - DrawEngineList(this->vehicle_type, r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, &this->eng_list, this->vscroll->GetPosition(), min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->eng_list.Length()), this->sel_engine, false, DEFAULT_GROUP); + DrawEngineList(this->vehicle_type, r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, &this->eng_list, this->vscroll->GetPosition(), min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->eng_list.size()), this->sel_engine, false, DEFAULT_GROUP); break; case WID_BV_SORT_ASCENDING_DESCENDING: @@ -1541,7 +1541,7 @@ struct BuildVehicleWindow : Window { void OnPaint() override { this->GenerateBuildList(); - this->vscroll->SetCount(this->eng_list.Length()); + this->vscroll->SetCount(this->eng_list.size()); this->SetWidgetsDisabledState(this->sel_engine == INVALID_ENGINE, WID_BV_SHOW_HIDE, WID_BV_BUILD, WID_BV_RENAME, WIDGET_LIST_END); diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 19aea17759..b34862f694 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -686,7 +686,7 @@ private: } } } else { - this->rows = this->groups.Length(); + this->rows = this->groups.size(); } this->vscroll->SetCount(this->rows); @@ -902,7 +902,7 @@ public: } } } else { - uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->groups.Length()); + uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->groups.size()); for (uint i = this->vscroll->GetPosition(); i < max; ++i) { const Group *g = this->groups[i]; SetDParam(0, g->index); @@ -942,7 +942,7 @@ public: this->groups.ForceRebuild(); this->BuildGroupList((CompanyID)this->window_number); - if (this->groups.Length() > 0) { + if (this->groups.size() > 0) { this->sel = this->groups[0]->index; } } @@ -1029,7 +1029,7 @@ public: if (!Group::IsValidID(this->sel)) { this->sel = INVALID_GROUP; - if (this->groups.Length() > 0) this->sel = this->groups[0]->index; + if (this->groups.size() > 0) this->sel = this->groups[0]->index; } this->SetDirty(); diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 6c8e927c96..a4a6fccd17 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -552,16 +552,16 @@ DEF_CONSOLE_CMD(ConUnBan) /* Try by IP. */ uint index; - for (index = 0; index < _network_ban_list.Length(); index++) { + for (index = 0; index < _network_ban_list.size(); index++) { if (strcmp(_network_ban_list[index], argv[1]) == 0) break; } /* Try by index. */ - if (index >= _network_ban_list.Length()) { + if (index >= _network_ban_list.size()) { index = atoi(argv[1]) - 1U; // let it wrap } - if (index < _network_ban_list.Length()) { + if (index < _network_ban_list.size()) { char msg[64]; seprintf(msg, lastof(msg), "Unbanned %s", _network_ban_list[index]); IConsolePrint(CC_DEFAULT, msg); diff --git a/src/core/pool_func.cpp b/src/core/pool_func.cpp index f8ff93cecc..914cbcfd90 100644 --- a/src/core/pool_func.cpp +++ b/src/core/pool_func.cpp @@ -22,7 +22,7 @@ { PoolVector *pools = PoolBase::GetPools(); pools->Erase(pools->Find(this)); - if (pools->Length() == 0) delete pools; + if (pools->size() == 0) delete pools; } /** diff --git a/src/core/smallstack_type.hpp b/src/core/smallstack_type.hpp index b053c32a85..76d97f9615 100644 --- a/src/core/smallstack_type.hpp +++ b/src/core/smallstack_type.hpp @@ -73,7 +73,7 @@ private: if (!this->data[index].valid) return index; } - if (index >= this->data.Length() && index < Tmax_size) { + if (index >= this->data.size() && index < Tmax_size) { this->data.Resize(index + 1); } return index; diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index be3ec309c6..600b7ea262 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -217,16 +217,6 @@ public: return is_member; } - /** - * Get the number of items in the list. - * - * @return The number of items in the list. - */ - inline uint Length() const - { - return std::vector::size(); - } - /** * Get the pointer to the first item (const) * diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index f2da7330ea..2b5879116f 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -398,7 +398,7 @@ struct DepotWindow : Window { uint16 rows_in_display = wid->current_y / wid->resize_y; uint16 num = this->vscroll->GetPosition() * this->num_columns; - int maxval = min(this->vehicle_list.Length(), num + (rows_in_display * this->num_columns)); + int maxval = min(this->vehicle_list.size(), num + (rows_in_display * this->num_columns)); int y; for (y = r.top + 1; num < maxval; y += this->resize.step_height) { // Draw the rows for (byte i = 0; i < this->num_columns && num < maxval; i++, num++) { @@ -413,11 +413,11 @@ struct DepotWindow : Window { } } - maxval = min(this->vehicle_list.Length() + this->wagon_list.Length(), (this->vscroll->GetPosition() * this->num_columns) + (rows_in_display * this->num_columns)); + maxval = min(this->vehicle_list.size() + this->wagon_list.size(), (this->vscroll->GetPosition() * this->num_columns) + (rows_in_display * this->num_columns)); /* Draw the train wagons without an engine in front. */ for (; num < maxval; num++, y += this->resize.step_height) { - const Vehicle *v = this->wagon_list[num - this->vehicle_list.Length()]; + const Vehicle *v = this->wagon_list[num - this->vehicle_list.size()]; this->DrawVehicleInDepot(v, r.left, r.right, y); } } @@ -465,7 +465,7 @@ struct DepotWindow : Window { uint pos = ((row + this->vscroll->GetPosition()) * this->num_columns) + xt; - if (this->vehicle_list.Length() + this->wagon_list.Length() <= pos) { + if (this->vehicle_list.size() + this->wagon_list.size() <= pos) { /* Clicking on 'line' / 'block' without a vehicle */ if (this->type == VEH_TRAIN) { /* End the dragging */ @@ -478,12 +478,12 @@ struct DepotWindow : Window { } bool wagon = false; - if (this->vehicle_list.Length() > pos) { + if (this->vehicle_list.size() > pos) { *veh = this->vehicle_list[pos]; /* Skip vehicles that are scrolled off the list */ if (this->type == VEH_TRAIN) x += this->hscroll->GetPosition(); } else { - pos -= this->vehicle_list.Length(); + pos -= this->vehicle_list.size(); *veh = this->wagon_list[pos]; /* free wagons don't have an initial loco. */ x -= ScaleGUITrad(VEHICLEINFO_FULL_VEHICLE_WIDTH); @@ -726,7 +726,7 @@ struct DepotWindow : Window { /* determine amount of items for scroller */ if (this->type == VEH_TRAIN) { uint max_width = ScaleGUITrad(VEHICLEINFO_FULL_VEHICLE_WIDTH); - for (uint num = 0; num < this->vehicle_list.Length(); num++) { + for (uint num = 0; num < this->vehicle_list.size(); num++) { uint width = 0; for (const Train *v = Train::From(this->vehicle_list[num]); v != NULL; v = v->Next()) { width += v->GetDisplayImageWidth(); @@ -734,11 +734,11 @@ struct DepotWindow : Window { max_width = max(max_width, width); } /* Always have 1 empty row, so people can change the setting of the train */ - this->vscroll->SetCount(this->vehicle_list.Length() + this->wagon_list.Length() + 1); + this->vscroll->SetCount(this->vehicle_list.size() + this->wagon_list.size() + 1); /* Always make it longer than the longest train, so you can attach vehicles at the end, and also see the next vertical tile separator line */ this->hscroll->SetCount(max_width + ScaleGUITrad(2 * VEHICLEINFO_FULL_VEHICLE_WIDTH + 1)); } else { - this->vscroll->SetCount(CeilDiv(this->vehicle_list.Length(), this->num_columns)); + this->vscroll->SetCount(CeilDiv(this->vehicle_list.size(), this->num_columns)); } /* Setup disabled buttons. */ @@ -811,7 +811,7 @@ struct DepotWindow : Window { case WID_D_SELL_ALL: /* Only open the confirmation window if there are anything to sell */ - if (this->vehicle_list.Length() != 0 || this->wagon_list.Length() != 0) { + if (this->vehicle_list.size() != 0 || this->wagon_list.size() != 0) { TileIndex tile = this->window_number; byte vehtype = this->type; diff --git a/src/engine.cpp b/src/engine.cpp index e0536e7ba8..b7be293afd 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -547,7 +547,7 @@ void SetupEngines() DeleteWindowByClass(WC_ENGINE_PREVIEW); _engine_pool.CleanPool(); - assert(_engine_mngr.Length() >= _engine_mngr.NUM_DEFAULT_ENGINES); + assert(_engine_mngr.size() >= _engine_mngr.NUM_DEFAULT_ENGINES); const EngineIDMapping *end = _engine_mngr.End(); uint index = 0; for (const EngineIDMapping *eid = _engine_mngr.Begin(); eid != end; eid++, index++) { diff --git a/src/engine_gui.cpp b/src/engine_gui.cpp index 8e7f1a8246..c2a258f180 100644 --- a/src/engine_gui.cpp +++ b/src/engine_gui.cpp @@ -325,7 +325,7 @@ void DrawVehicleEngine(int left, int right, int preferred_x, int y, EngineID eng */ void EngList_Sort(GUIEngineList *el, EngList_SortTypeFunction compare) { - uint size = el->Length(); + uint size = el->size(); /* out-of-bounds access at the next line for size == 0 (even with operator[] at some systems) * generally, do not sort if there are less than 2 items */ if (size < 2) return; @@ -342,8 +342,8 @@ void EngList_Sort(GUIEngineList *el, EngList_SortTypeFunction compare) void EngList_SortPartial(GUIEngineList *el, EngList_SortTypeFunction compare, uint begin, uint num_items) { if (num_items < 2) return; - assert(begin < el->Length()); - assert(begin + num_items <= el->Length()); + assert(begin < el->size()); + assert(begin + num_items <= el->size()); QSortT(el->Get(begin), num_items, compare); } diff --git a/src/fios.cpp b/src/fios.cpp index f849b9a165..a1369e1cd1 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -380,7 +380,7 @@ static void FiosGetFileList(SaveLoadOperation fop, fios_getlist_callback_proc *c { SortingBits order = _savegame_sort_order; _savegame_sort_order = SORT_BY_NAME | SORT_ASCENDING; - QSortT(file_list.files.Begin(), file_list.files.Length(), CompareFiosItems); + QSortT(file_list.files.Begin(), file_list.files.size(), CompareFiosItems); _savegame_sort_order = order; } diff --git a/src/fios.h b/src/fios.h index 848fe7c8e1..71a6cff175 100644 --- a/src/fios.h +++ b/src/fios.h @@ -129,7 +129,7 @@ public: */ inline uint Length() const { - return this->files.Length(); + return this->files.size(); } /** diff --git a/src/game/game_text.cpp b/src/game/game_text.cpp index 4673e732c2..781d0dabab 100644 --- a/src/game/game_text.cpp +++ b/src/game/game_text.cpp @@ -212,7 +212,7 @@ struct StringNameWriter : HeaderWriter { void WriteStringID(const char *name, int stringid) { - if (stringid == (int)this->strings->Length()) *this->strings->Append() = stredup(name); + if (stringid == (int)this->strings->size()) *this->strings->Append() = stredup(name); } void Finalise(const StringData &data) @@ -340,7 +340,7 @@ GameStrings *_current_data = NULL; */ const char *GetGameStringPtr(uint id) { - if (id >= _current_data->cur_language->lines.Length()) return GetStringPtr(STR_UNDEFINED); + if (id >= _current_data->cur_language->lines.size()) return GetStringPtr(STR_UNDEFINED); return _current_data->cur_language->lines[id]; } diff --git a/src/gfx.cpp b/src/gfx.cpp index aedd2c17e3..42bb56400b 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -509,7 +509,7 @@ int DrawString(int left, int right, int top, const char *str, TextColour colour, } Layouter layout(str, INT32_MAX, colour, fontsize); - if (layout.Length() == 0) return 0; + if (layout.size() == 0) return 0; return DrawLayoutLine(*layout.Begin(), top, left, right, align, underline, true); } @@ -574,7 +574,7 @@ int GetStringLineCount(StringID str, int maxw) GetString(buffer, str, lastof(buffer)); Layouter layout(buffer, maxw); - return layout.Length(); + return layout.size(); } /** diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index f0fb391071..7c4407e3a3 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -200,7 +200,7 @@ public: } /* Fill ICU's FontRuns with the right data. */ - icu::FontRuns runs(fontMapping.Length()); + icu::FontRuns runs(fontMapping.size()); for (FontMap::iterator iter = fontMapping.Begin(); iter != fontMapping.End(); iter++) { runs.add(iter->second, iter->first); } @@ -432,7 +432,7 @@ int FallbackParagraphLayout::FallbackLine::GetLeading() const */ int FallbackParagraphLayout::FallbackLine::GetWidth() const { - if (this->Length() == 0) return 0; + if (this->size() == 0) return 0; /* * The last X position of a run contains is the end of that run. @@ -449,7 +449,7 @@ int FallbackParagraphLayout::FallbackLine::GetWidth() const */ int FallbackParagraphLayout::FallbackLine::CountRuns() const { - return this->Length(); + return this->size(); } /** @@ -572,7 +572,7 @@ const ParagraphLayouter::Line *FallbackParagraphLayout::NextLine(int max_width) this->buffer++; } - if (l->Length() == 0 || last_char - begin != 0) { + if (l->size() == 0 || last_char - begin != 0) { int w = l->GetWidth(); *l->Append() = new FallbackVisualRun(iter->second, begin, last_char - begin, w); } diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index a53bef906b..1acf7728cc 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -1183,7 +1183,7 @@ public: uint text_left = rtl ? r.left + WD_FRAMERECT_LEFT : r.right - WD_FRAMERECT_LEFT - this->text_width; uint text_right = rtl ? r.left + WD_FRAMERECT_LEFT + this->text_width : r.right - WD_FRAMERECT_LEFT; - for (uint i = 0; i != this->companies.Length(); i++) { + for (uint i = 0; i != this->companies.size(); i++) { const Company *c = this->companies[i]; DrawString(ordinal_left, ordinal_right, y, i + STR_ORDINAL_NUMBER_1ST, i == 0 ? TC_WHITE : TC_YELLOW); diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 3a5aa0eead..d64f9c51b8 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -460,8 +460,8 @@ public: if (IsDefaultGroupID(this->vli.index) || IsAllGroupID(this->vli.index)) { SetDParam(0, STR_COMPANY_NAME); SetDParam(1, this->vli.company); - SetDParam(2, this->vehicles.Length()); - SetDParam(3, this->vehicles.Length()); + SetDParam(2, this->vehicles.size()); + SetDParam(3, this->vehicles.size()); } else { const Group *g = Group::Get(this->vli.index); @@ -483,17 +483,17 @@ public: this->BuildGroupList(this->owner); - this->group_sb->SetCount(this->groups.Length()); - this->vscroll->SetCount(this->vehicles.Length()); + this->group_sb->SetCount(this->groups.size()); + this->vscroll->SetCount(this->vehicles.size()); /* The drop down menu is out, *but* it may not be used, retract it. */ - if (this->vehicles.Length() == 0 && this->IsWidgetLowered(WID_GL_MANAGE_VEHICLES_DROPDOWN)) { + if (this->vehicles.size() == 0 && this->IsWidgetLowered(WID_GL_MANAGE_VEHICLES_DROPDOWN)) { this->RaiseWidget(WID_GL_MANAGE_VEHICLES_DROPDOWN); HideDropDownMenu(this); } /* Disable all lists management button when the list is empty */ - this->SetWidgetsDisabledState(this->vehicles.Length() == 0 || _local_company != this->vli.company, + this->SetWidgetsDisabledState(this->vehicles.size() == 0 || _local_company != this->vli.company, WID_GL_STOP_ALL, WID_GL_START_ALL, WID_GL_MANAGE_VEHICLES_DROPDOWN, @@ -544,7 +544,7 @@ public: Money this_year = 0; Money last_year = 0; uint32 occupancy = 0; - uint32 vehicle_count = this->vehicles.Length(); + uint32 vehicle_count = this->vehicles.size(); for (uint i = 0; i < vehicle_count; i++) { const Vehicle *v = this->vehicles[i]; @@ -580,7 +580,7 @@ public: case WID_GL_LIST_GROUP: { int y1 = r.top + WD_FRAMERECT_TOP; - int max = min(this->group_sb->GetPosition() + this->group_sb->GetCapacity(), this->groups.Length()); + int max = min(this->group_sb->GetPosition() + this->group_sb->GetCapacity(), this->groups.size()); for (int i = this->group_sb->GetPosition(); i < max; ++i) { const Group *g = this->groups[i]; @@ -590,7 +590,7 @@ public: y1 += this->tiny_step_height; } - if ((uint)this->group_sb->GetPosition() + this->group_sb->GetCapacity() > this->groups.Length()) { + if ((uint)this->group_sb->GetPosition() + this->group_sb->GetCapacity() > this->groups.size()) { DrawGroupInfo(y1, r.left, r.right, NEW_GROUP); } break; @@ -604,7 +604,7 @@ public: if (this->vli.index != ALL_GROUP) { /* Mark vehicles which are in sub-groups */ int y = r.top; - uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->vehicles.Length()); + uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->vehicles.size()); for (uint i = this->vscroll->GetPosition(); i < max; ++i) { const Vehicle *v = this->vehicles[i]; if (v->group_id != this->vli.index) { @@ -658,7 +658,7 @@ public: case WID_GL_LIST_GROUP: { // Matrix Group uint id_g = this->group_sb->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_GROUP, 0, this->tiny_step_height); - if (id_g >= this->groups.Length()) return; + if (id_g >= this->groups.size()) return; this->group_sel = this->vli.index = this->groups[id_g]->index; @@ -671,7 +671,7 @@ public: case WID_GL_LIST_VEHICLE: { // Matrix Vehicle uint id_v = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_VEHICLE); - if (id_v >= this->vehicles.Length()) return; // click out of list bound + if (id_v >= this->vehicles.size()) return; // click out of list bound const Vehicle *v = this->vehicles[id_v]; if (VehicleClicked(v)) break; @@ -749,7 +749,7 @@ public: case WID_GL_LIST_GROUP: { // Matrix group uint id_g = this->group_sb->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_GROUP, 0, this->tiny_step_height); - GroupID new_g = id_g >= this->groups.Length() ? INVALID_GROUP : this->groups[id_g]->index; + GroupID new_g = id_g >= this->groups.size() ? INVALID_GROUP : this->groups[id_g]->index; if (this->group_sel != new_g && g->parent != new_g) { DoCommandP(0, this->group_sel | (1 << 16), new_g, CMD_ALTER_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_SET_PARENT)); @@ -782,7 +782,7 @@ public: this->SetDirty(); uint id_g = this->group_sb->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_GROUP, 0, this->tiny_step_height); - GroupID new_g = id_g >= this->groups.Length() ? NEW_GROUP : this->groups[id_g]->index; + GroupID new_g = id_g >= this->groups.size() ? NEW_GROUP : this->groups[id_g]->index; DoCommandP(0, new_g, vindex | (_ctrl_pressed ? 1 << 31 : 0), CMD_ADD_VEHICLE_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_ADD_VEHICLE), new_g == NEW_GROUP ? CcAddVehicleNewGroup : NULL); break; @@ -795,7 +795,7 @@ public: this->SetDirty(); uint id_v = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_VEHICLE); - if (id_v >= this->vehicles.Length()) return; // click out of list bound + if (id_v >= this->vehicles.size()) return; // click out of list bound const Vehicle *v = this->vehicles[id_v]; if (!VehicleClicked(v) && vindex == v->index) { @@ -834,7 +834,7 @@ public: break; case WID_GL_MANAGE_VEHICLES_DROPDOWN: - assert(this->vehicles.Length() != 0); + assert(this->vehicles.size() != 0); switch (index) { case ADI_REPLACE: // Replace window @@ -895,7 +895,7 @@ public: case WID_GL_LIST_GROUP: { // ... the list of custom groups. uint id_g = this->group_sb->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_GROUP, 0, this->tiny_step_height); - new_group_over = id_g >= this->groups.Length() ? NEW_GROUP : this->groups[id_g]->index; + new_group_over = id_g >= this->groups.size() ? NEW_GROUP : this->groups[id_g]->index; break; } } diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp index c88d4499a3..9411887ea7 100644 --- a/src/hotkeys.cpp +++ b/src/hotkeys.cpp @@ -203,7 +203,7 @@ const char *SaveKeycodes(const Hotkey *hotkey) { static char buf[128]; buf[0] = '\0'; - for (uint i = 0; i < hotkey->keycodes.Length(); i++) { + for (uint i = 0; i < hotkey->keycodes.size(); i++) { const char *str = KeycodeToString(hotkey->keycodes[i]); if (i > 0) strecat(buf, ",", lastof(buf)); strecat(buf, str, lastof(buf)); diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index eb6018973f..32c62bfa3d 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1211,7 +1211,7 @@ protected: this->industries.shrink_to_fit(); this->industries.RebuildDone(); - this->vscroll->SetCount(this->industries.Length()); // Update scrollbar as well. + this->vscroll->SetCount(this->industries.size()); // Update scrollbar as well. } if (!this->industries.Sort()) return; @@ -1372,11 +1372,11 @@ public: case WID_ID_INDUSTRY_LIST: { int n = 0; int y = r.top + WD_FRAMERECT_TOP; - if (this->industries.Length() == 0) { + if (this->industries.size() == 0) { DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_DIRECTORY_NONE); break; } - for (uint i = this->vscroll->GetPosition(); i < this->industries.Length(); i++) { + for (uint i = this->vscroll->GetPosition(); i < this->industries.size(); i++) { DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, this->GetIndustryString(this->industries[i])); y += this->resize.step_height; @@ -1411,7 +1411,7 @@ public: case WID_ID_INDUSTRY_LIST: { Dimension d = GetStringBoundingBox(STR_INDUSTRY_DIRECTORY_NONE); - for (uint i = 0; i < this->industries.Length(); i++) { + for (uint i = 0; i < this->industries.size(); i++) { d = maxdim(d, GetStringBoundingBox(this->GetIndustryString(this->industries[i]))); } resize->height = d.height; @@ -1439,7 +1439,7 @@ public: case WID_ID_INDUSTRY_LIST: { uint p = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_ID_INDUSTRY_LIST, WD_FRAMERECT_TOP); - if (p < this->industries.Length()) { + if (p < this->industries.size()) { if (_ctrl_pressed) { ShowExtraViewPortWindow(this->industries[p]->location.tile); } else { @@ -2589,7 +2589,7 @@ struct IndustryCargoesWindow : public Window { const NWidgetBase *nwp = this->GetWidget(WID_IC_PANEL); int vpos = -this->vscroll->GetPosition() * nwp->resize_y; - for (uint i = 0; i < this->fields.Length(); i++) { + for (uint i = 0; i < this->fields.size(); i++) { int row_height = (i == 0) ? CargoesField::small_height : CargoesField::normal_height; if (vpos + row_height >= 0) { int xpos = left_pos; @@ -2631,7 +2631,7 @@ struct IndustryCargoesWindow : public Window { if (pt.y < vpos) return false; int row = (pt.y - vpos) / CargoesField::normal_height; // row is relative to row 1. - if (row + 1 >= (int)this->fields.Length()) return false; + if (row + 1 >= (int)this->fields.size()) return false; vpos = pt.y - vpos - row * CargoesField::normal_height; // Position in the row + 1 field row++; // rebase row to match index of this->fields. @@ -2710,7 +2710,7 @@ struct IndustryCargoesWindow : public Window { FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) { *lst->Append() = new DropDownListStringItem(cs->name, cs->Index(), false); } - if (lst->Length() == 0) { + if (lst->size() == 0) { delete lst; break; } @@ -2727,7 +2727,7 @@ struct IndustryCargoesWindow : public Window { if (!indsp->enabled) continue; *lst->Append() = new DropDownListStringItem(indsp->name, ind, false); } - if (lst->Length() == 0) { + if (lst->size() == 0) { delete lst; break; } diff --git a/src/linkgraph/linkgraph.h b/src/linkgraph/linkgraph.h index 799f22c780..1900c0b1f5 100644 --- a/src/linkgraph/linkgraph.h +++ b/src/linkgraph/linkgraph.h @@ -496,7 +496,7 @@ public: * Get the current size of the component. * @return Size. */ - inline uint Size() const { return this->nodes.Length(); } + inline uint Size() const { return this->nodes.size(); } /** * Get date of last compression. diff --git a/src/music/dmusic.cpp b/src/music/dmusic.cpp index fece709fda..a03a6ec57e 100644 --- a/src/music/dmusic.cpp +++ b/src/music/dmusic.cpp @@ -686,7 +686,7 @@ static void MidiThreadProc(void *) size_t preload_bytes = 0; for (size_t bl = 0; bl < current_file.blocks.size(); bl++) { MidiFile::DataBlock &block = current_file.blocks[bl]; - preload_bytes += block.data.Length(); + preload_bytes += block.data.size(); if (block.ticktime >= current_segment.start) { if (current_segment.loop) { DEBUG(driver, 2, "DMusic: timer: loop from block %d (ticktime %d, realtime %.3f, bytes %d)", (int)bl, (int)block.ticktime, ((int)block.realtime) / 1000.0, (int)preload_bytes); @@ -752,7 +752,7 @@ static void MidiThreadProc(void *) DEBUG(driver, 9, "DMusic thread: Streaming block " PRINTF_SIZE " (cur=" OTTD_PRINTF64 ", block=" OTTD_PRINTF64 ")", current_block, (long long)(current_time / MS_TO_REFTIME), (long long)(block_time / MS_TO_REFTIME)); byte *data = block.data.Begin(); - size_t remaining = block.data.Length(); + size_t remaining = block.data.size(); byte last_status = 0; while (remaining > 0) { /* MidiFile ought to have converted everything out of running status, diff --git a/src/music/midifile.cpp b/src/music/midifile.cpp index 91f83c529d..fb3c187c05 100644 --- a/src/music/midifile.cpp +++ b/src/music/midifile.cpp @@ -330,14 +330,14 @@ static bool FixupMidiData(MidiFile &target) uint32 last_ticktime = 0; for (size_t i = 0; i < target.blocks.size(); i++) { MidiFile::DataBlock &block = target.blocks[i]; - if (block.data.Length() == 0) { + if (block.data.size() == 0) { continue; } else if (block.ticktime > last_ticktime || merged_blocks.size() == 0) { merged_blocks.push_back(block); last_ticktime = block.ticktime; } else { - byte *datadest = merged_blocks.back().data.Append(block.data.Length()); - memcpy(datadest, block.data.Begin(), block.data.Length()); + byte *datadest = merged_blocks.back().data.Append(block.data.size()); + memcpy(datadest, block.data.Begin(), block.data.size()); } } std::swap(merged_blocks, target.blocks); diff --git a/src/music/win32_m.cpp b/src/music/win32_m.cpp index a32318db12..6d88af4a3c 100644 --- a/src/music/win32_m.cpp +++ b/src/music/win32_m.cpp @@ -187,7 +187,7 @@ void CALLBACK TimerCallback(UINT uTimerID, UINT, DWORD_PTR dwUser, DWORD_PTR, DW uint preload_bytes = 0; for (size_t bl = 0; bl < _midi.current_file.blocks.size(); bl++) { MidiFile::DataBlock &block = _midi.current_file.blocks[bl]; - preload_bytes += block.data.Length(); + preload_bytes += block.data.size(); if (block.ticktime >= _midi.current_segment.start) { if (_midi.current_segment.loop) { DEBUG(driver, 2, "Win32-MIDI: timer: loop from block %d (ticktime %d, realtime %.3f, bytes %d)", (int)bl, (int)block.ticktime, ((int)block.realtime)/1000.0, (int)preload_bytes); @@ -230,7 +230,7 @@ void CALLBACK TimerCallback(UINT uTimerID, UINT, DWORD_PTR dwUser, DWORD_PTR, DW } byte *data = block.data.Begin(); - size_t remaining = block.data.Length(); + size_t remaining = block.data.size(); byte last_status = 0; while (remaining > 0) { /* MidiFile ought to have converted everything out of running status, diff --git a/src/network/core/tcp_http.cpp b/src/network/core/tcp_http.cpp index 3a40e3eec2..d2ab0638c9 100644 --- a/src/network/core/tcp_http.cpp +++ b/src/network/core/tcp_http.cpp @@ -297,7 +297,7 @@ int NetworkHTTPSocketHandler::Receive() /* static */ void NetworkHTTPSocketHandler::HTTPReceive() { /* No connections, just bail out. */ - if (_http_connections.Length() == 0) return; + if (_http_connections.size() == 0) return; fd_set read_fd; struct timeval tv; diff --git a/src/network/core/tcp_listen.h b/src/network/core/tcp_listen.h index b9f987190f..55594070be 100644 --- a/src/network/core/tcp_listen.h +++ b/src/network/core/tcp_listen.h @@ -140,7 +140,7 @@ public: */ static bool Listen(uint16 port) { - assert(sockets.Length() == 0); + assert(sockets.size() == 0); NetworkAddressList addresses; GetBindAddresses(&addresses, port); @@ -149,7 +149,7 @@ public: address->Listen(SOCK_STREAM, &sockets); } - if (sockets.Length() == 0) { + if (sockets.size() == 0) { DEBUG(net, 0, "[server] could not start network: could not create listening socket"); NetworkError(STR_NETWORK_ERROR_SERVER_START); return false; diff --git a/src/network/core/udp.cpp b/src/network/core/udp.cpp index 83c14d2b05..db655c0cfa 100644 --- a/src/network/core/udp.cpp +++ b/src/network/core/udp.cpp @@ -51,7 +51,7 @@ bool NetworkUDPSocketHandler::Listen() addr->Listen(SOCK_DGRAM, &this->sockets); } - return this->sockets.Length() != 0; + return this->sockets.size() != 0; } /** @@ -80,7 +80,7 @@ NetworkRecvStatus NetworkUDPSocketHandler::CloseConnection(bool error) */ void NetworkUDPSocketHandler::SendPacket(Packet *p, NetworkAddress *recv, bool all, bool broadcast) { - if (this->sockets.Length() == 0) this->Listen(); + if (this->sockets.size() == 0) this->Listen(); for (SocketList::iterator s = this->sockets.Begin(); s != this->sockets.End(); s++) { /* Make a local copy because if we resolve it we cannot diff --git a/src/network/network.cpp b/src/network/network.cpp index e437f4df0a..3780258bde 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -637,7 +637,7 @@ void GetBindAddresses(NetworkAddressList *addresses, uint16 port) } /* No address, so bind to everything. */ - if (addresses->Length() == 0) { + if (addresses->size() == 0) { *addresses->Append() = NetworkAddress("", port); } } diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 0ef0606281..d36aec6baa 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -246,12 +246,12 @@ void ClientNetworkContentSocketHandler::RequestContentList(ContentVector *cv, bo this->Connect(); - assert(cv->Length() < 255); - assert(cv->Length() < (SEND_MTU - sizeof(PacketSize) - sizeof(byte) - sizeof(uint8)) / + assert(cv->size() < 255); + assert(cv->size() < (SEND_MTU - sizeof(PacketSize) - sizeof(byte) - sizeof(uint8)) / (sizeof(uint8) + sizeof(uint32) + (send_md5sum ? /*sizeof(ContentInfo::md5sum)*/16 : 0))); Packet *p = new Packet(send_md5sum ? PACKET_CONTENT_CLIENT_INFO_EXTID_MD5 : PACKET_CONTENT_CLIENT_INFO_EXTID); - p->Send_uint8(cv->Length()); + p->Send_uint8(cv->size()); for (ContentIterator iter = cv->Begin(); iter != cv->End(); iter++) { const ContentInfo *ci = *iter; @@ -304,7 +304,7 @@ void ClientNetworkContentSocketHandler::DownloadSelectedContent(uint &files, uin bytes += ci->filesize; } - files = content.Length(); + files = content.size(); /* If there's nothing to download, do nothing. */ if (files == 0) return; @@ -322,7 +322,7 @@ void ClientNetworkContentSocketHandler::DownloadSelectedContent(uint &files, uin */ void ClientNetworkContentSocketHandler::DownloadSelectedContentHTTP(const ContentIDList &content) { - uint count = content.Length(); + uint count = content.size(); /* Allocate memory for the whole request. * Requests are "id\nid\n..." (as strings), so assume the maximum ID, @@ -350,7 +350,7 @@ void ClientNetworkContentSocketHandler::DownloadSelectedContentHTTP(const Conten */ void ClientNetworkContentSocketHandler::DownloadSelectedContentFallback(const ContentIDList &content) { - uint count = content.Length(); + uint count = content.size(); const ContentID *content_ids = content.Begin(); this->Connect(); @@ -607,7 +607,7 @@ void ClientNetworkContentSocketHandler::OnReceiveData(const char *data, size_t l this->AfterDownload(); } - if ((uint)this->http_response_index >= this->http_response.Length()) { + if ((uint)this->http_response_index >= this->http_response.size()) { /* It's not a real failure, but if there's * nothing more to download it helps with * cleaning up the stuff we allocated. */ @@ -653,7 +653,7 @@ void ClientNetworkContentSocketHandler::OnReceiveData(const char *data, size_t l str = p + 1; /* Is it a fallback URL? If so, just continue with the next one. */ if (strncmp(str, "ottd", 4) == 0) { - if ((uint)this->http_response_index >= this->http_response.Length()) { + if ((uint)this->http_response_index >= this->http_response.size()) { /* Have we gone through all lines? */ this->OnFailure(); return; @@ -925,7 +925,7 @@ void ClientNetworkContentSocketHandler::ReverseLookupTreeDependency(ConstContent * we are including stuff into the vector and as such the vector's data * store can be reallocated (and thus move), which means out iterating * pointer gets invalid. So fall back to the indices. */ - for (uint i = 0; i < tree.Length(); i++) { + for (uint i = 0; i < tree.size(); i++) { ConstContentVector parents; this->ReverseLookupDependency(parents, tree[i]); diff --git a/src/network/network_content.h b/src/network/network_content.h index 7a96a73c06..0d30de857d 100644 --- a/src/network/network_content.h +++ b/src/network/network_content.h @@ -129,7 +129,7 @@ public: void CheckDependencyState(ContentInfo *ci); /** Get the number of content items we know locally. */ - uint Length() const { return this->infos.Length(); } + uint Length() const { return this->infos.size(); } /** Get the begin of the content inf iterator. */ ConstContentIterator Begin() const { return this->infos.Begin(); } /** Get the nth position of the content inf iterator. */ diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index cb534d7961..51215935ca 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -401,7 +401,7 @@ class NetworkContentListWindow : public Window, ContentCallback { this->content.RebuildDone(); this->SortContentList(); - this->vscroll->SetCount(this->content.Length()); // Update the scrollbar + this->vscroll->SetCount(this->content.size()); // Update the scrollbar this->ScrollToSelected(); } @@ -791,7 +791,7 @@ public: switch (widget) { case WID_NCL_MATRIX: { uint id_v = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_NCL_MATRIX); - if (id_v >= this->content.Length()) return; // click out of bounds + if (id_v >= this->content.size()) return; // click out of bounds this->selected = *this->content.Get(id_v); this->list_pos = id_v; @@ -815,7 +815,7 @@ public: case WID_NCL_NAME: if (this->content.SortType() == widget - WID_NCL_CHECKBOX) { this->content.ToggleSortOrder(); - if (this->content.Length() > 0) this->list_pos = this->content.Length() - this->list_pos - 1; + if (this->content.size() > 0) this->list_pos = this->content.size() - this->list_pos - 1; } else { this->content.SetSortType(widget - WID_NCL_CHECKBOX); this->content.ForceResort(); @@ -874,7 +874,7 @@ public: break; case WKC_DOWN: /* scroll down by one */ - if (this->list_pos < (int)this->content.Length() - 1) this->list_pos++; + if (this->list_pos < (int)this->content.size() - 1) this->list_pos++; break; case WKC_PAGEUP: /* scroll up a page */ @@ -882,7 +882,7 @@ public: break; case WKC_PAGEDOWN: /* scroll down a page */ - this->list_pos = min(this->list_pos + this->vscroll->GetCapacity(), (int)this->content.Length() - 1); + this->list_pos = min(this->list_pos + this->vscroll->GetCapacity(), (int)this->content.size() - 1); break; case WKC_HOME: /* jump to beginning */ @@ -890,7 +890,7 @@ public: break; case WKC_END: /* jump to end */ - this->list_pos = this->content.Length() - 1; + this->list_pos = this->content.size() - 1; break; case WKC_SPACE: @@ -914,7 +914,7 @@ public: return ES_NOT_HANDLED; } - if (this->content.Length() == 0) { + if (this->content.size() == 0) { this->list_pos = 0; // above stuff may result in "-1". if (this->UpdateFilterState()) { this->content.ForceRebuild(); diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 1451e7154e..e3c4555bf5 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -269,7 +269,7 @@ protected: this->servers.shrink_to_fit(); this->servers.RebuildDone(); - this->vscroll->SetCount(this->servers.Length()); + this->vscroll->SetCount(this->servers.size()); /* Sort the list of network games as requested. */ this->servers.Sort(); @@ -354,7 +354,7 @@ protected: void UpdateListPos() { this->list_pos = SLP_INVALID; - for (uint i = 0; i != this->servers.Length(); i++) { + for (uint i = 0; i != this->servers.size(); i++) { if (this->servers[i] == this->server) { this->list_pos = i; break; @@ -564,7 +564,7 @@ public: case WID_NG_MATRIX: { uint16 y = r.top; - const int max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), (int)this->servers.Length()); + const int max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), (int)this->servers.size()); for (int i = this->vscroll->GetPosition(); i < max; ++i) { const NetworkGameList *ngl = this->servers[i]; @@ -710,7 +710,7 @@ public: case WID_NG_INFO: // Connectivity (green dot) if (this->servers.SortType() == widget - WID_NG_NAME) { this->servers.ToggleSortOrder(); - if (this->list_pos != SLP_INVALID) this->list_pos = this->servers.Length() - this->list_pos - 1; + if (this->list_pos != SLP_INVALID) this->list_pos = this->servers.size() - this->list_pos - 1; } else { this->servers.SetSortType(widget - WID_NG_NAME); this->servers.ForceResort(); @@ -722,7 +722,7 @@ public: case WID_NG_MATRIX: { // Show available network games uint id_v = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_NG_MATRIX); - this->server = (id_v < this->servers.Length()) ? this->servers[id_v] : NULL; + this->server = (id_v < this->servers.size()) ? this->servers[id_v] : NULL; this->list_pos = (server == NULL) ? SLP_INVALID : id_v; this->SetDirty(); @@ -819,7 +819,7 @@ public: /* handle up, down, pageup, pagedown, home and end */ if (keycode == WKC_UP || keycode == WKC_DOWN || keycode == WKC_PAGEUP || keycode == WKC_PAGEDOWN || keycode == WKC_HOME || keycode == WKC_END) { - if (this->servers.Length() == 0) return ES_HANDLED; + if (this->servers.size() == 0) return ES_HANDLED; switch (keycode) { case WKC_UP: /* scroll up by one */ @@ -829,7 +829,7 @@ public: case WKC_DOWN: /* scroll down by one */ if (this->list_pos == SLP_INVALID) return ES_HANDLED; - if (this->list_pos < this->servers.Length() - 1) this->list_pos++; + if (this->list_pos < this->servers.size() - 1) this->list_pos++; break; case WKC_PAGEUP: /* scroll up a page */ @@ -839,7 +839,7 @@ public: case WKC_PAGEDOWN: /* scroll down a page */ if (this->list_pos == SLP_INVALID) return ES_HANDLED; - this->list_pos = min(this->list_pos + this->vscroll->GetCapacity(), (int)this->servers.Length() - 1); + this->list_pos = min(this->list_pos + this->vscroll->GetCapacity(), (int)this->servers.size() - 1); break; case WKC_HOME: /* jump to beginning */ @@ -847,7 +847,7 @@ public: break; case WKC_END: /* jump to end */ - this->list_pos = this->servers.Length() - 1; + this->list_pos = this->servers.size() - 1; break; default: NOT_REACHED(); } @@ -1789,7 +1789,7 @@ struct NetworkClientListPopupWindow : Window { d = maxdim(GetStringBoundingBox(action->name), d); } - d.height *= this->actions.Length(); + d.height *= this->actions.size(); d.width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT; d.height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; *size = d; @@ -1819,12 +1819,12 @@ struct NetworkClientListPopupWindow : Window { uint index = (_cursor.pos.y - this->top - WD_FRAMERECT_TOP) / FONT_HEIGHT_NORMAL; if (_left_button_down) { - if (index == this->sel_index || index >= this->actions.Length()) return; + if (index == this->sel_index || index >= this->actions.size()) return; this->sel_index = index; this->SetDirty(); } else { - if (index < this->actions.Length() && _cursor.pos.y >= this->top) { + if (index < this->actions.size() && _cursor.pos.y >= this->top) { const NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(this->client_id); if (ci != NULL) this->actions[index].proc(ci); } diff --git a/src/newgrf.cpp b/src/newgrf.cpp index e26577353b..f80e79f7db 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -658,7 +658,7 @@ static Engine *GetNewEngine(const GRFFile *file, VehicleType type, uint16 intern e->grf_prop.grffile = file; /* Reserve the engine slot */ - assert(_engine_mngr.Length() == e->index); + assert(_engine_mngr.size() == e->index); EngineIDMapping *eid = _engine_mngr.Append(); eid->type = type; eid->grfid = scope_grfid; // Note: this is INVALID_GRFID if dynamic_engines is disabled, so no reservation @@ -1058,7 +1058,7 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop case 0x05: { // Track type uint8 tracktype = buf->ReadByte(); - if (tracktype < _cur.grffile->railtype_list.Length()) { + if (tracktype < _cur.grffile->railtype_list.size()) { _gted[e->index].railtypelabel = _cur.grffile->railtype_list[tracktype]; break; } @@ -1200,7 +1200,7 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop break; } - if (_cur.grffile->railtype_list.Length() == 0) { + if (_cur.grffile->railtype_list.size() == 0) { /* Use traction type to select between normal and electrified * rail only when no translation list is in place. */ if (_gted[e->index].railtypelabel == RAILTYPE_RAIL_LABEL && engclass >= EC_ELECTRIC) _gted[e->index].railtypelabel = RAILTYPE_ELECTRIC_LABEL; @@ -4799,7 +4799,7 @@ static void NewSpriteGroup(ByteReader *buf) DeterministicSpriteGroupAdjust *adjust = adjusts.Append(); /* The first var adjust doesn't have an operation specified, so we set it to add. */ - adjust->operation = adjusts.Length() == 1 ? DSGA_OP_ADD : (DeterministicSpriteGroupAdjustOperation)buf->ReadByte(); + adjust->operation = adjusts.size() == 1 ? DSGA_OP_ADD : (DeterministicSpriteGroupAdjustOperation)buf->ReadByte(); adjust->variable = buf->ReadByte(); if (adjust->variable == 0x7E) { /* Link subroutine group */ @@ -4824,7 +4824,7 @@ static void NewSpriteGroup(ByteReader *buf) /* Continue reading var adjusts while bit 5 is set. */ } while (HasBit(varadjust, 5)); - group->num_adjusts = adjusts.Length(); + group->num_adjusts = adjusts.size(); group->adjusts = MallocT(group->num_adjusts); MemCpyT(group->adjusts, adjusts.Begin(), group->num_adjusts); @@ -5085,7 +5085,7 @@ static CargoID TranslateCargo(uint8 feature, uint8 ctype) if (feature == GSF_STATIONS && ctype == 0xFE) return CT_DEFAULT_NA; if (ctype == 0xFF) return CT_PURCHASE; - if (_cur.grffile->cargo_list.Length() == 0) { + if (_cur.grffile->cargo_list.size() == 0) { /* No cargo table, so use bitnum values */ if (ctype >= 32) { grfmsg(1, "TranslateCargo: Cargo bitnum %d out of range (max 31), skipping.", ctype); @@ -5105,8 +5105,8 @@ static CargoID TranslateCargo(uint8 feature, uint8 ctype) } /* Check if the cargo type is out of bounds of the cargo translation table */ - if (ctype >= _cur.grffile->cargo_list.Length()) { - grfmsg(1, "TranslateCargo: Cargo type %d out of range (max %d), skipping.", ctype, _cur.grffile->cargo_list.Length() - 1); + if (ctype >= _cur.grffile->cargo_list.size()) { + grfmsg(1, "TranslateCargo: Cargo type %d out of range (max %d), skipping.", ctype, (unsigned int)_cur.grffile->cargo_list.size() - 1); return CT_INVALID; } @@ -7850,8 +7850,8 @@ static bool HandleParameterInfo(ByteReader *buf) continue; } - if (id >= _cur.grfconfig->param_info.Length()) { - uint num_to_add = id - _cur.grfconfig->param_info.Length() + 1; + if (id >= _cur.grfconfig->param_info.size()) { + uint num_to_add = id - _cur.grfconfig->param_info.size() + 1; GRFParameterInfo **newdata = _cur.grfconfig->param_info.Append(num_to_add); MemSetT(newdata, 0, num_to_add); } @@ -8380,7 +8380,7 @@ static void BuildCargoTranslationMap() const CargoSpec *cs = CargoSpec::Get(c); if (!cs->IsValid()) continue; - if (_cur.grffile->cargo_list.Length() == 0) { + if (_cur.grffile->cargo_list.size() == 0) { /* Default translation table, so just a straight mapping to bitnum */ _cur.grffile->cargo_map[c] = cs->bitnum; } else { @@ -8560,7 +8560,7 @@ static void CalculateRefitMasks() { const GRFFile *file = _gted[engine].defaultcargo_grf; if (file == NULL) file = e->GetGRF(); - if (file != NULL && file->grf_version >= 8 && file->cargo_list.Length() != 0) { + if (file != NULL && file->grf_version >= 8 && file->cargo_list.size() != 0) { cargo_map_for_first_refittable = file->cargo_map; } } @@ -9216,7 +9216,7 @@ static void FinalisePriceBaseMultipliers() static const uint32 override_features = (1 << GSF_TRAINS) | (1 << GSF_ROADVEHICLES) | (1 << GSF_SHIPS) | (1 << GSF_AIRCRAFT); /* Evaluate grf overrides */ - int num_grfs = _grf_files.Length(); + int num_grfs = _grf_files.size(); int *grf_overrides = AllocaM(int, num_grfs); for (int i = 0; i < num_grfs; i++) { grf_overrides[i] = -1; diff --git a/src/newgrf_cargo.cpp b/src/newgrf_cargo.cpp index 97db4855e6..58d4102d33 100644 --- a/src/newgrf_cargo.cpp +++ b/src/newgrf_cargo.cpp @@ -82,10 +82,10 @@ CargoID GetCargoTranslation(uint8 cargo, const GRFFile *grffile, bool usebit) /* Other cases use (possibly translated) cargobits */ - if (grffile->cargo_list.Length() > 0) { + if (grffile->cargo_list.size() > 0) { /* ...and the cargo is in bounds, then get the cargo ID for * the label */ - if (cargo < grffile->cargo_list.Length()) return GetCargoIDByLabel(grffile->cargo_list[cargo]); + if (cargo < grffile->cargo_list.size()) return GetCargoIDByLabel(grffile->cargo_list[cargo]); } else { /* Else the cargo value is a 'climate independent' 'bitnum' */ return GetCargoIDByBitnum(cargo); diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index d21d767cdc..fa84c947a4 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -83,7 +83,7 @@ GRFConfig::GRFConfig(const GRFConfig &config) : this->info->AddRef(); this->url->AddRef(); if (config.error != NULL) this->error = new GRFError(*config.error); - for (uint i = 0; i < config.param_info.Length(); i++) { + for (uint i = 0; i < config.param_info.size(); i++) { if (config.param_info[i] == NULL) { *this->param_info.Append() = NULL; } else { @@ -104,7 +104,7 @@ GRFConfig::~GRFConfig() this->info->Release(); this->url->Release(); - for (uint i = 0; i < this->param_info.Length(); i++) delete this->param_info[i]; + for (uint i = 0; i < this->param_info.size(); i++) delete this->param_info[i]; } /** @@ -155,7 +155,7 @@ void GRFConfig::SetParameterDefaults() if (!this->has_param_defaults) return; - for (uint i = 0; i < this->param_info.Length(); i++) { + for (uint i = 0; i < this->param_info.size(); i++) { if (this->param_info[i] == NULL) continue; this->param_info[i]->SetValue(this, this->param_info[i]->def_value); } @@ -261,7 +261,7 @@ GRFParameterInfo::GRFParameterInfo(GRFParameterInfo &info) : num_bit(info.num_bit), complete_labels(info.complete_labels) { - for (uint i = 0; i < info.value_names.Length(); i++) { + for (uint i = 0; i < info.value_names.size(); i++) { SmallPair *data = info.value_names.Get(i); this->value_names.Insert(data->first, DuplicateGRFText(data->second)); } @@ -272,7 +272,7 @@ GRFParameterInfo::~GRFParameterInfo() { CleanUpGRFText(this->name); CleanUpGRFText(this->desc); - for (uint i = 0; i < this->value_names.Length(); i++) { + for (uint i = 0; i < this->value_names.size(); i++) { SmallPair *data = this->value_names.Get(i); CleanUpGRFText(data->second); } @@ -609,7 +609,7 @@ compatible_grf: c->min_loadable_version = f->min_loadable_version; c->num_valid_params = f->num_valid_params; c->has_param_defaults = f->has_param_defaults; - for (uint i = 0; i < f->param_info.Length(); i++) { + for (uint i = 0; i < f->param_info.size(); i++) { if (f->param_info[i] == NULL) { *c->param_info.Append() = NULL; } else { diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index e8fc4efccb..ec1a91d7ba 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -895,7 +895,7 @@ struct SpriteAlignerWindow : Window { int step_size = nwid->resize_y; SmallVector &list = _newgrf_debug_sprite_picker.sprites; - int max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), list.Length()); + int max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), list.size()); int y = r.top + WD_FRAMERECT_TOP; for (int i = this->vscroll->GetPosition(); i < max; i++) { @@ -940,7 +940,7 @@ struct SpriteAlignerWindow : Window { int step_size = nwid->resize_y; uint i = this->vscroll->GetPosition() + (pt.y - nwid->pos_y) / step_size; - if (i < _newgrf_debug_sprite_picker.sprites.Length()) { + if (i < _newgrf_debug_sprite_picker.sprites.size()) { SpriteID spr = _newgrf_debug_sprite_picker.sprites[i]; if (GetSpriteType(spr) == ST_NORMAL) this->current_sprite = spr; } @@ -1015,7 +1015,7 @@ struct SpriteAlignerWindow : Window { if (data == 1) { /* Sprite picker finished */ this->RaiseWidget(WID_SA_PICKER); - this->vscroll->SetCount(_newgrf_debug_sprite_picker.sprites.Length()); + this->vscroll->SetCount(_newgrf_debug_sprite_picker.sprites.size()); } } diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index 660b7e476b..60d03fcc3e 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -1233,7 +1233,7 @@ void CommitVehicleListOrderChanges() FOR_ALL_ENGINES(e) { *ordering.Append() = e->index; } - QSortT(ordering.Begin(), ordering.Length(), EnginePreSort); + QSortT(ordering.Begin(), ordering.size(), EnginePreSort); /* Apply Insertion-Sort operations */ const ListOrderChange *end = _list_order_changes.End(); diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 4235d31336..fb712700c2 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -166,7 +166,7 @@ struct NewGRFParametersWindow : public Window { clicked_row(UINT_MAX), editable(editable) { - this->action14present = (c->num_valid_params != lengthof(c->param) || c->param_info.Length() != 0); + this->action14present = (c->num_valid_params != lengthof(c->param) || c->param_info.size() != 0); this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_NP_SCROLLBAR); @@ -220,7 +220,7 @@ struct NewGRFParametersWindow : public Window { case WID_NP_DESCRIPTION: /* Minimum size of 4 lines. The 500 is the default size of the window. */ Dimension suggestion = {500 - WD_FRAMERECT_LEFT - WD_FRAMERECT_RIGHT, (uint)FONT_HEIGHT_NORMAL * 4 + WD_TEXTPANEL_TOP + WD_TEXTPANEL_BOTTOM}; - for (uint i = 0; i < this->grf_config->param_info.Length(); i++) { + for (uint i = 0; i < this->grf_config->param_info.size(); i++) { const GRFParameterInfo *par_info = this->grf_config->param_info[i]; if (par_info == NULL) continue; const char *desc = GetGRFStringFromGRFText(par_info->desc); @@ -246,7 +246,7 @@ struct NewGRFParametersWindow : public Window { void DrawWidget(const Rect &r, int widget) const override { if (widget == WID_NP_DESCRIPTION) { - const GRFParameterInfo *par_info = (this->clicked_row < this->grf_config->param_info.Length()) ? this->grf_config->param_info[this->clicked_row] : NULL; + const GRFParameterInfo *par_info = (this->clicked_row < this->grf_config->param_info.size()) ? this->grf_config->param_info[this->clicked_row] : NULL; if (par_info == NULL) return; const char *desc = GetGRFStringFromGRFText(par_info->desc); if (desc == NULL) return; @@ -265,7 +265,7 @@ struct NewGRFParametersWindow : public Window { int button_y_offset = (this->line_height - SETTING_BUTTON_HEIGHT) / 2; int text_y_offset = (this->line_height - FONT_HEIGHT_NORMAL) / 2; for (uint i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < this->vscroll->GetCount(); i++) { - GRFParameterInfo *par_info = (i < this->grf_config->param_info.Length()) ? this->grf_config->param_info[i] : NULL; + GRFParameterInfo *par_info = (i < this->grf_config->param_info.size()) ? this->grf_config->param_info[i] : NULL; if (par_info == NULL) par_info = GetDummyParameterInfo(i); uint32 current_value = par_info->GetValue(this->grf_config); bool selected = (i == this->clicked_row); @@ -350,7 +350,7 @@ struct NewGRFParametersWindow : public Window { if (_current_text_dir == TD_RTL) x = wid->current_x - 1 - x; x -= 4; - GRFParameterInfo *par_info = (num < this->grf_config->param_info.Length()) ? this->grf_config->param_info[num] : NULL; + GRFParameterInfo *par_info = (num < this->grf_config->param_info.size()) ? this->grf_config->param_info[num] : NULL; if (par_info == NULL) par_info = GetDummyParameterInfo(num); /* One of the arrows is clicked */ @@ -431,7 +431,7 @@ struct NewGRFParametersWindow : public Window { { if (StrEmpty(str)) return; int32 value = atoi(str); - GRFParameterInfo *par_info = ((uint)this->clicked_row < this->grf_config->param_info.Length()) ? this->grf_config->param_info[this->clicked_row] : NULL; + GRFParameterInfo *par_info = ((uint)this->clicked_row < this->grf_config->param_info.size()) ? this->grf_config->param_info[this->clicked_row] : NULL; if (par_info == NULL) par_info = GetDummyParameterInfo(this->clicked_row); uint32 val = Clamp(value, par_info->min_value, par_info->max_value); par_info->SetValue(this->grf_config, val); @@ -441,7 +441,7 @@ struct NewGRFParametersWindow : public Window { void OnDropdownSelect(int widget, int index) override { assert(this->clicked_dropdown); - GRFParameterInfo *par_info = ((uint)this->clicked_row < this->grf_config->param_info.Length()) ? this->grf_config->param_info[this->clicked_row] : NULL; + GRFParameterInfo *par_info = ((uint)this->clicked_row < this->grf_config->param_info.size()) ? this->grf_config->param_info[this->clicked_row] : NULL; if (par_info == NULL) par_info = GetDummyParameterInfo(this->clicked_row); par_info->SetValue(this->grf_config, index); this->SetDirty(); @@ -747,7 +747,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { case WID_NS_PRESET_LIST: { Dimension d = GetStringBoundingBox(STR_NUM_CUSTOM); - for (uint i = 0; i < _grf_preset_list.Length(); i++) { + for (uint i = 0; i < _grf_preset_list.size(); i++) { if (_grf_preset_list[i] != NULL) { SetDParamStr(0, _grf_preset_list[i]); d = maxdim(d, GetStringBoundingBox(STR_JUST_RAW_STRING)); @@ -882,7 +882,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { int offset_y = (step_height - FONT_HEIGHT_NORMAL) / 2; uint y = r.top + WD_FRAMERECT_TOP; uint min_index = this->vscroll2->GetPosition(); - uint max_index = min(min_index + this->vscroll2->GetCapacity(), this->avails.Length()); + uint max_index = min(min_index + this->vscroll2->GetCapacity(), this->avails.size()); for (uint i = min_index; i < max_index; i++) { const GRFConfig *c = this->avails[i]; @@ -929,7 +929,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { /* Add 'None' option for clearing list */ *list->Append() = new DropDownListStringItem(STR_NONE, -1, false); - for (uint i = 0; i < _grf_preset_list.Length(); i++) { + for (uint i = 0; i < _grf_preset_list.size(); i++) { if (_grf_preset_list[i] != NULL) { *list->Append() = new DropDownListCharStringItem(_grf_preset_list[i], i, false); } @@ -1069,7 +1069,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { uint i = this->vscroll2->GetScrolledRowFromWidget(pt.y, this, WID_NS_AVAIL_LIST); this->active_sel = NULL; DeleteWindowByClass(WC_GRF_PARAMETERS); - if (i < this->avails.Length()) { + if (i < this->avails.size()) { if (this->avail_sel != this->avails[i]) DeleteWindowByClass(WC_TEXTFILE); this->avail_sel = this->avails[i]; this->avail_pos = i; @@ -1175,7 +1175,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { GetGRFPresetList(&_grf_preset_list); /* Switch to this preset */ - for (uint i = 0; i < _grf_preset_list.Length(); i++) { + for (uint i = 0; i < _grf_preset_list.size(); i++) { if (_grf_preset_list[i] != NULL && strcmp(_grf_preset_list[i], str) == 0) { this->preset = i; break; @@ -1308,7 +1308,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { case WKC_DOWN: /* scroll down by one */ - if (this->avail_pos < (int)this->avails.Length() - 1) this->avail_pos++; + if (this->avail_pos < (int)this->avails.size() - 1) this->avail_pos++; break; case WKC_PAGEUP: @@ -1318,7 +1318,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { case WKC_PAGEDOWN: /* scroll down a page */ - this->avail_pos = min(this->avail_pos + this->vscroll2->GetCapacity(), (int)this->avails.Length() - 1); + this->avail_pos = min(this->avail_pos + this->vscroll2->GetCapacity(), (int)this->avails.size() - 1); break; case WKC_HOME: @@ -1328,14 +1328,14 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { case WKC_END: /* jump to end */ - this->avail_pos = this->avails.Length() - 1; + this->avail_pos = this->avails.size() - 1; break; default: return ES_NOT_HANDLED; } - if (this->avails.Length() == 0) this->avail_pos = -1; + if (this->avails.size() == 0) this->avail_pos = -1; if (this->avail_pos >= 0) { this->active_sel = NULL; DeleteWindowByClass(WC_GRF_PARAMETERS); @@ -1490,7 +1490,7 @@ private: if (this->avail_pos < 0) this->avail_sel = NULL; } - this->vscroll2->SetCount(this->avails.Length()); // Update the scrollbar + this->vscroll2->SetCount(this->avails.size()); // Update the scrollbar } /** @@ -1531,7 +1531,7 @@ private: /* Select next (or previous, if last one) item in the list. */ int new_pos = this->avail_pos + 1; - if (new_pos >= (int)this->avails.Length()) new_pos = this->avail_pos - 1; + if (new_pos >= (int)this->avails.size()) new_pos = this->avail_pos - 1; this->avail_pos = new_pos; if (new_pos >= 0) this->avail_sel = this->avails[new_pos]; @@ -1560,7 +1560,7 @@ void ShowMissingContentWindow(const GRFConfig *list) memcpy(ci->md5sum, HasBit(c->flags, GCF_COMPATIBLE) ? c->original_md5sum : c->ident.md5sum, sizeof(ci->md5sum)); *cv.Append() = ci; } - ShowNetworkContentListWindow(cv.Length() == 0 ? NULL : &cv, CONTENT_TYPE_NEWGRF); + ShowNetworkContentListWindow(cv.size() == 0 ? NULL : &cv, CONTENT_TYPE_NEWGRF); } Listing NewGRFWindow::last_sorting = {false, 0}; @@ -2049,7 +2049,7 @@ struct SavePresetWindow : public Window { GetGRFPresetList(&this->presets); this->selected = -1; if (initial_text != NULL) { - for (uint i = 0; i < this->presets.Length(); i++) { + for (uint i = 0; i < this->presets.size(); i++) { if (!strcmp(initial_text, this->presets[i])) { this->selected = i; break; @@ -2065,7 +2065,7 @@ struct SavePresetWindow : public Window { this->vscroll = this->GetScrollbar(WID_SVP_SCROLLBAR); this->FinishInitNested(0); - this->vscroll->SetCount(this->presets.Length()); + this->vscroll->SetCount(this->presets.size()); this->SetFocusedWidget(WID_SVP_EDITBOX); if (initial_text != NULL) this->presetname_editbox.text.Assign(initial_text); } @@ -2080,12 +2080,12 @@ struct SavePresetWindow : public Window { case WID_SVP_PRESET_LIST: { resize->height = FONT_HEIGHT_NORMAL + 2U; size->height = 0; - for (uint i = 0; i < this->presets.Length(); i++) { + for (uint i = 0; i < this->presets.size(); i++) { Dimension d = GetStringBoundingBox(this->presets[i]); size->width = max(size->width, d.width + WD_FRAMETEXT_LEFT + WD_FRAMETEXT_RIGHT); resize->height = max(resize->height, d.height); } - size->height = ClampU(this->presets.Length(), 5, 20) * resize->height + 1; + size->height = ClampU(this->presets.size(), 5, 20) * resize->height + 1; break; } } @@ -2101,7 +2101,7 @@ struct SavePresetWindow : public Window { int offset_y = (step_height - FONT_HEIGHT_NORMAL) / 2; uint y = r.top + WD_FRAMERECT_TOP; uint min_index = this->vscroll->GetPosition(); - uint max_index = min(min_index + this->vscroll->GetCapacity(), this->presets.Length()); + uint max_index = min(min_index + this->vscroll->GetCapacity(), this->presets.size()); for (uint i = min_index; i < max_index; i++) { if ((int)i == this->selected) GfxFillRect(r.left + 1, y, r.right - 1, y + step_height - 2, PC_DARK_BLUE); @@ -2120,7 +2120,7 @@ struct SavePresetWindow : public Window { switch (widget) { case WID_SVP_PRESET_LIST: { uint row = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_SVP_PRESET_LIST); - if (row < this->presets.Length()) { + if (row < this->presets.size()) { this->selected = row; this->presetname_editbox.text.Assign(this->presets[row]); this->SetWidgetDirty(WID_SVP_PRESET_LIST); diff --git a/src/newgrf_railtype.cpp b/src/newgrf_railtype.cpp index 8421844717..60ddc19140 100644 --- a/src/newgrf_railtype.cpp +++ b/src/newgrf_railtype.cpp @@ -139,7 +139,7 @@ SpriteID GetCustomSignalSprite(const RailtypeInfo *rti, TileIndex tile, SignalTy uint8 GetReverseRailTypeTranslation(RailType railtype, const GRFFile *grffile) { /* No rail type table present, return rail type as-is */ - if (grffile == NULL || grffile->railtype_list.Length() == 0) return railtype; + if (grffile == NULL || grffile->railtype_list.size() == 0) return railtype; /* Look for a matching rail type label in the table */ RailTypeLabel label = GetRailTypeInfo(railtype)->label; diff --git a/src/newgrf_sound.cpp b/src/newgrf_sound.cpp index 9d890e9caf..dfe7e403ef 100644 --- a/src/newgrf_sound.cpp +++ b/src/newgrf_sound.cpp @@ -49,14 +49,14 @@ void InitializeSoundPool() SoundEntry *GetSound(SoundID index) { - if (index >= _sounds.Length()) return NULL; + if (index >= _sounds.size()) return NULL; return &_sounds[index]; } uint GetNumSounds() { - return _sounds.Length(); + return _sounds.size(); } diff --git a/src/os/macosx/string_osx.cpp b/src/os/macosx/string_osx.cpp index 1c5d558855..4abf0037ca 100644 --- a/src/os/macosx/string_osx.cpp +++ b/src/os/macosx/string_osx.cpp @@ -85,7 +85,7 @@ public: virtual int GetLeading() const; virtual int GetWidth() const; - virtual int CountRuns() const { return this->Length(); } + virtual int CountRuns() const { return this->size(); } virtual const VisualRun *GetVisualRun(int run) const { return *this->Get(run); } int GetInternalCharLength(WChar c) const @@ -256,7 +256,7 @@ int CoreTextParagraphLayout::CoreTextLine::GetLeading() const */ int CoreTextParagraphLayout::CoreTextLine::GetWidth() const { - if (this->Length() == 0) return 0; + if (this->size() == 0) return 0; int total_width = 0; for (const CoreTextVisualRun * const *run = this->Begin(); run != this->End(); run++) { diff --git a/src/os/windows/string_uniscribe.cpp b/src/os/windows/string_uniscribe.cpp index ce61537b2b..8877d36a65 100644 --- a/src/os/windows/string_uniscribe.cpp +++ b/src/os/windows/string_uniscribe.cpp @@ -110,7 +110,7 @@ public: public: virtual int GetLeading() const; virtual int GetWidth() const; - virtual int CountRuns() const { return this->Length(); } + virtual int CountRuns() const { return this->size(); } virtual const VisualRun *GetVisualRun(int run) const { return *this->Get(run); } int GetInternalCharLength(WChar c) const diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index a948ac0f9b..17df27fc5d 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -1747,7 +1747,7 @@ CommandCost CmdConvertRail(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 break; } - for (uint i = 0; i < vehicles_affected.Length(); ++i) { + for (uint i = 0; i < vehicles_affected.size(); ++i) { TryPathReserve(vehicles_affected[i], true); } } diff --git a/src/saveload/animated_tile_sl.cpp b/src/saveload/animated_tile_sl.cpp index 6db0561cd3..36571c418c 100644 --- a/src/saveload/animated_tile_sl.cpp +++ b/src/saveload/animated_tile_sl.cpp @@ -25,8 +25,8 @@ extern SmallVector _animated_tiles; */ static void Save_ANIT() { - SlSetLength(_animated_tiles.Length() * sizeof(*_animated_tiles.Begin())); - SlArray(_animated_tiles.Begin(), _animated_tiles.Length(), SLE_UINT32); + SlSetLength(_animated_tiles.size() * sizeof(*_animated_tiles.Begin())); + SlArray(_animated_tiles.Begin(), _animated_tiles.size(), SLE_UINT32); } /** diff --git a/src/saveload/game_sl.cpp b/src/saveload/game_sl.cpp index 325ae1c9d4..ff48ab1351 100644 --- a/src/saveload/game_sl.cpp +++ b/src/saveload/game_sl.cpp @@ -132,7 +132,7 @@ static const SaveLoad _game_language_string[] = { static void SaveReal_GSTR(LanguageStrings *ls) { _game_saveload_string = ls->language; - _game_saveload_strings = ls->lines.Length(); + _game_saveload_strings = ls->lines.size(); SlObject(NULL, _game_language_header); for (uint i = 0; i < _game_saveload_strings; i++) { @@ -160,7 +160,7 @@ static void Load_GSTR() } /* If there were no strings in the savegame, set GameStrings to NULL */ - if (_current_data->raw_strings.Length() == 0) { + if (_current_data->raw_strings.size() == 0) { delete _current_data; _current_data = NULL; return; @@ -174,7 +174,7 @@ static void Save_GSTR() { if (_current_data == NULL) return; - for (uint i = 0; i < _current_data->raw_strings.Length(); i++) { + for (uint i = 0; i < _current_data->raw_strings.size(); i++) { SlSetArrayIndex(i); SlAutolength((AutolengthProc *)SaveReal_GSTR, _current_data->raw_strings[i]); } diff --git a/src/saveload/labelmaps_sl.cpp b/src/saveload/labelmaps_sl.cpp index b57a89f208..a25abe722f 100644 --- a/src/saveload/labelmaps_sl.cpp +++ b/src/saveload/labelmaps_sl.cpp @@ -26,7 +26,7 @@ static SmallVector _railtype_list; */ static bool NeedRailTypeConversion() { - for (uint i = 0; i < _railtype_list.Length(); i++) { + for (uint i = 0; i < _railtype_list.size(); i++) { if ((RailType)i < RAILTYPE_END) { const RailtypeInfo *rti = GetRailTypeInfo((RailType)i); if (rti->label != _railtype_list[i]) return true; @@ -44,7 +44,7 @@ void AfterLoadLabelMaps() if (NeedRailTypeConversion()) { SmallVector railtype_conversion_map; - for (uint i = 0; i < _railtype_list.Length(); i++) { + for (uint i = 0; i < _railtype_list.size(); i++) { RailType r = GetRailTypeByLabel(_railtype_list[i]); if (r == INVALID_RAILTYPE) r = RAILTYPE_BEGIN; diff --git a/src/saveload/linkgraph_sl.cpp b/src/saveload/linkgraph_sl.cpp index 76390a0101..1ff2470424 100644 --- a/src/saveload/linkgraph_sl.cpp +++ b/src/saveload/linkgraph_sl.cpp @@ -55,7 +55,7 @@ const SaveLoad *GetLinkGraphJobDesc() static const char *prefix = "linkgraph."; /* Build the SaveLoad array on first call and don't touch it later on */ - if (saveloads.Length() == 0) { + if (saveloads.size() == 0) { size_t offset_gamesettings = cpp_offsetof(GameSettings, linkgraph); size_t offset_component = cpp_offsetof(LinkGraphJob, settings); @@ -83,7 +83,7 @@ const SaveLoad *GetLinkGraphJobDesc() int i = 0; do { *(saveloads.Append()) = job_desc[i++]; - } while (saveloads[saveloads.Length() - 1].cmd != SL_END); + } while (saveloads[saveloads.size() - 1].cmd != SL_END); } return &saveloads[0]; diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index f066d014d3..2aa19af818 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -175,7 +175,7 @@ struct MemoryDumper { */ size_t GetSize() const { - return this->blocks.Length() * MEMORY_CHUNK_SIZE - (this->bufe - this->buf); + return this->blocks.size() * MEMORY_CHUNK_SIZE - (this->bufe - this->buf); } }; diff --git a/src/saveload/waypoint_sl.cpp b/src/saveload/waypoint_sl.cpp index 2567c2c93f..5e3a391f07 100644 --- a/src/saveload/waypoint_sl.cpp +++ b/src/saveload/waypoint_sl.cpp @@ -96,7 +96,7 @@ void MoveWaypointsToBaseStations() } } - if (!Waypoint::CanAllocateItem(_old_waypoints.Length())) SlError(STR_ERROR_TOO_MANY_STATIONS_LOADING); + if (!Waypoint::CanAllocateItem(_old_waypoints.size())) SlError(STR_ERROR_TOO_MANY_STATIONS_LOADING); /* All saveload conversions have been done. Create the new waypoints! */ for (OldWaypoint *wp = _old_waypoints.Begin(); wp != _old_waypoints.End(); wp++) { diff --git a/src/script/squirrel_helper.hpp b/src/script/squirrel_helper.hpp index 002c561069..8d1ee29fc7 100644 --- a/src/script/squirrel_helper.hpp +++ b/src/script/squirrel_helper.hpp @@ -147,9 +147,9 @@ namespace SQConvert { } sq_pop(vm, 2); - Array *arr = (Array*)MallocT(sizeof(Array) + sizeof(int32) * data.Length()); - arr->size = data.Length(); - memcpy(arr->array, data.Begin(), sizeof(int32) * data.Length()); + Array *arr = (Array*)MallocT(sizeof(Array) + sizeof(int32) * data.size()); + arr->size = data.size(); + memcpy(arr->array, data.Begin(), sizeof(int32) * data.size()); *ptr->Append() = arr; return arr; diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index fda7cfa52c..8b20bb9f27 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -215,7 +215,7 @@ struct GameOptionsWindow : Window { if (i == CURRENCY_CUSTOM) continue; *list->Append() = new DropDownListStringItem(*items, i, HasBit(disabled, i)); } - QSortT(list->Begin(), list->Length(), DropDownListStringItem::NatSortFunc); + QSortT(list->Begin(), list->size(), DropDownListStringItem::NatSortFunc); /* Append custom currency at the end */ *list->Append() = new DropDownListItem(-1, false); // separator line @@ -253,9 +253,9 @@ struct GameOptionsWindow : Window { int result = _nb_orig_names + i; *list->Append() = new DropDownListStringItem(_grf_names[i], result, enabled_item != result && enabled_item >= 0); } - QSortT(list->Begin(), list->Length(), DropDownListStringItem::NatSortFunc); + QSortT(list->Begin(), list->size(), DropDownListStringItem::NatSortFunc); - int newgrf_size = list->Length(); + int newgrf_size = list->size(); /* Insert newgrf_names at the top of the list */ if (newgrf_size > 0) { *list->Append() = new DropDownListItem(-1, false); // separator line @@ -266,7 +266,7 @@ struct GameOptionsWindow : Window { for (int i = 0; i < _nb_orig_names; i++) { *list->Append() = new DropDownListStringItem(STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH + i, i, enabled_item != i && enabled_item >= 0); } - QSortT(list->Begin() + newgrf_size, list->Length() - newgrf_size, DropDownListStringItem::NatSortFunc); + QSortT(list->Begin() + newgrf_size, list->size() - newgrf_size, DropDownListStringItem::NatSortFunc); break; } @@ -282,11 +282,11 @@ struct GameOptionsWindow : Window { case WID_GO_LANG_DROPDOWN: { // Setup interface language dropdown list = new DropDownList(); - for (uint i = 0; i < _languages.Length(); i++) { + for (uint i = 0; i < _languages.size(); i++) { if (&_languages[i] == _current_language) *selected_index = i; *list->Append() = new DropDownListStringItem(SPECSTR_LANGUAGE_START + i, i, false); } - QSortT(list->Begin(), list->Length(), DropDownListStringItem::NatSortFunc); + QSortT(list->Begin(), list->size(), DropDownListStringItem::NatSortFunc); break; } diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp index 35c9911d8b..64901a89f6 100644 --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -116,7 +116,7 @@ public: if (length == 0) length = strlen(text); if (length > 0 && this->BufferHasRoom()) { - int stored_size = this->output_buffer[this->output_buffer.Length() - 1].Add(text, length); + int stored_size = this->output_buffer[this->output_buffer.size() - 1].Add(text, length); length -= stored_size; text += stored_size; } @@ -147,7 +147,7 @@ private: */ bool BufferHasRoom() const { - uint num_blocks = this->output_buffer.Length(); + uint num_blocks = this->output_buffer.size(); return num_blocks > 0 && this->output_buffer[num_blocks - 1].HasRoom(); } diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index 84b43c69d0..0a1f0dd5d5 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -246,7 +246,7 @@ struct SignListWindow : Window, SignList { } case WID_SIL_FILTER_ENTER_BTN: - if (this->signs.Length() >= 1) { + if (this->signs.size() >= 1) { const Sign *si = this->signs[0]; ScrollMainWindowToTile(TileVirtXY(si->x, si->y)); } @@ -310,7 +310,7 @@ struct SignListWindow : Window, SignList { { if (this->signs.NeedRebuild()) { this->BuildSignsList(); - this->vscroll->SetCount(this->signs.Length()); + this->vscroll->SetCount(this->signs.size()); this->SetWidgetDirty(WID_SIL_CAPTION); } this->SortSignsList(); @@ -471,7 +471,7 @@ struct SignWindow : Window, SignList { /* Search through the list for the current sign, excluding * - the first sign if we want the previous sign or * - the last sign if we want the next sign */ - uint end = this->signs.Length() - (next ? 1 : 0); + uint end = this->signs.size() - (next ? 1 : 0); for (uint i = next ? 0 : 1; i < end; i++) { if (this->cur_sign == this->signs[i]->index) { /* We've found the current sign, so return the sign before/after it */ @@ -479,7 +479,7 @@ struct SignWindow : Window, SignList { } } /* If we haven't found the current sign by now, return the last/first sign */ - return this->signs[next ? 0 : this->signs.Length() - 1]; + return next ? this->signs.front() : this->signs.back(); } void SetStringParameters(int widget) const override diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 6121424d57..f7e2a18249 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -1436,7 +1436,7 @@ CommandCost CmdBuildRailStation(TileIndex tile_org, DoCommandFlag flags, uint32 tile_track += tile_delta ^ TileDiffXY(1, 1); // perpendicular to tile_delta } while (--numtracks); - for (uint i = 0; i < affected_vehicles.Length(); ++i) { + for (uint i = 0; i < affected_vehicles.size(); ++i) { /* Restore reservations of trains. */ RestoreTrainReservation(affected_vehicles[i]); } diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 32e22b1616..fddfe780d5 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -205,7 +205,7 @@ protected: this->stations.shrink_to_fit(); this->stations.RebuildDone(); - this->vscroll->SetCount(this->stations.Length()); // Update the scrollbar + this->vscroll->SetCount(this->stations.size()); // Update the scrollbar } /** Sort stations by their name */ @@ -411,7 +411,7 @@ public: case WID_STL_LIST: { bool rtl = _current_text_dir == TD_RTL; - int max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->stations.Length()); + int max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->stations.size()); int y = r.top + WD_FRAMERECT_TOP; for (int i = this->vscroll->GetPosition(); i < max; ++i) { // do until max number of stations of owner const Station *st = this->stations[i]; @@ -498,7 +498,7 @@ public: switch (widget) { case WID_STL_LIST: { uint id_v = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_STL_LIST, 0, FONT_HEIGHT_NORMAL); - if (id_v >= this->stations.Length()) return; // click out of list bound + if (id_v >= this->stations.size()) return; // click out of list bound const Station *st = this->stations[id_v]; /* do not check HasStationInUse - it is slow and may be invalid */ @@ -2132,7 +2132,7 @@ static bool AddNearbyStation(TileIndex tile, void *user_data) TileArea *ctx = (TileArea *)user_data; /* First check if there were deleted stations here */ - for (uint i = 0; i < _deleted_stations_nearby.Length(); i++) { + for (uint i = 0; i < _deleted_stations_nearby.size(); i++) { TileAndStation *ts = _deleted_stations_nearby.Get(i); if (ts->tile == tile) { *_stations_nearby_list.Append() = _deleted_stations_nearby[i].station; @@ -2255,7 +2255,7 @@ struct SelectStationWindow : Window { /* Determine the widest string */ Dimension d = GetStringBoundingBox(T::EXPECTED_FACIL == FACIL_WAYPOINT ? STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT : STR_JOIN_STATION_CREATE_SPLITTED_STATION); - for (uint i = 0; i < _stations_nearby_list.Length(); i++) { + for (uint i = 0; i < _stations_nearby_list.size(); i++) { const T *st = T::Get(_stations_nearby_list[i]); SetDParam(0, st->index); SetDParam(1, st->facilities); @@ -2279,7 +2279,7 @@ struct SelectStationWindow : Window { y += this->resize.step_height; } - for (uint i = max(1, this->vscroll->GetPosition()); i <= _stations_nearby_list.Length(); ++i, y += this->resize.step_height) { + for (uint i = max(1, this->vscroll->GetPosition()); i <= _stations_nearby_list.size(); ++i, y += this->resize.step_height) { /* Don't draw anything if it extends past the end of the window. */ if (i - this->vscroll->GetPosition() >= this->vscroll->GetCapacity()) break; @@ -2298,7 +2298,7 @@ struct SelectStationWindow : Window { bool distant_join = (st_index > 0); if (distant_join) st_index--; - if (distant_join && st_index >= _stations_nearby_list.Length()) return; + if (distant_join && st_index >= _stations_nearby_list.size()) return; /* Insert station to be joined into stored command */ SB(this->select_station_cmd.p2, 16, 16, @@ -2333,7 +2333,7 @@ struct SelectStationWindow : Window { { if (!gui_scope) return; FindStationsNearby(this->area, true); - this->vscroll->SetCount(_stations_nearby_list.Length() + 1); + this->vscroll->SetCount(_stations_nearby_list.size() + 1); this->SetDirty(); } }; @@ -2378,7 +2378,7 @@ static bool StationJoinerNeeded(const CommandContainer &cmd, TileArea ta) * If adjacent-stations is disabled and we are building next to a station, do not show the selection window. * but join the other station immediately. */ const T *st = FindStationsNearby(ta, false); - return st == NULL && (_settings_game.station.adjacent_stations || _stations_nearby_list.Length() == 0); + return st == NULL && (_settings_game.station.adjacent_stations || _stations_nearby_list.size() == 0); } /** diff --git a/src/story_gui.cpp b/src/story_gui.cpp index efb3f36e72..78c8b97930 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -159,7 +159,7 @@ protected: /* Verify that the selected page exist. */ if (!_story_page_pool.IsValidID(this->selected_page_id)) return false; - if (this->story_pages.Length() <= 1) return true; + if (this->story_pages.size() <= 1) return true; const StoryPage *last = *(this->story_pages.End() - 1); return last->index == this->selected_page_id; } @@ -253,7 +253,7 @@ protected: } /* Check if list is empty. */ - if (list->Length() == 0) { + if (list->size() == 0) { delete list; list = NULL; } @@ -444,8 +444,8 @@ public: */ void UpdatePrevNextDisabledState() { - this->SetWidgetDisabledState(WID_SB_PREV_PAGE, story_pages.Length() == 0 || this->IsFirstPageSelected()); - this->SetWidgetDisabledState(WID_SB_NEXT_PAGE, story_pages.Length() == 0 || this->IsLastPageSelected()); + this->SetWidgetDisabledState(WID_SB_PREV_PAGE, story_pages.size() == 0 || this->IsFirstPageSelected()); + this->SetWidgetDisabledState(WID_SB_NEXT_PAGE, story_pages.size() == 0 || this->IsLastPageSelected()); this->SetWidgetDirty(WID_SB_PREV_PAGE); this->SetWidgetDirty(WID_SB_NEXT_PAGE); } @@ -575,7 +575,7 @@ public: case WID_SB_SEL_PAGE: { /* Get max title width. */ - for (uint16 i = 0; i < this->story_pages.Length(); i++) { + for (uint16 i = 0; i < this->story_pages.size(); i++) { const StoryPage *s = this->story_pages[i]; if (s->title != NULL) { @@ -620,7 +620,7 @@ public: if (list != NULL) { /* Get the index of selected page. */ int selected = 0; - for (uint16 i = 0; i < this->story_pages.Length(); i++) { + for (uint16 i = 0; i < this->story_pages.size(); i++) { const StoryPage *p = this->story_pages[i]; if (p->index == this->selected_page_id) break; selected++; @@ -694,7 +694,7 @@ public: this->BuildStoryPageList(); /* Was the last page removed? */ - if (this->story_pages.Length() == 0) { + if (this->story_pages.size() == 0) { this->selected_generic_title[0] = '\0'; } @@ -702,14 +702,14 @@ public: if (!_story_page_pool.IsValidID(this->selected_page_id)) { this->selected_page_id = INVALID_STORY_PAGE; } - if (this->selected_page_id == INVALID_STORY_PAGE && this->story_pages.Length() > 0) { + if (this->selected_page_id == INVALID_STORY_PAGE && this->story_pages.size() > 0) { /* No page is selected, but there exist at least one available. * => Select first page. */ this->SetSelectedPage(this->story_pages[0]->index); } - this->SetWidgetDisabledState(WID_SB_SEL_PAGE, this->story_pages.Length() == 0); + this->SetWidgetDisabledState(WID_SB_SEL_PAGE, this->story_pages.size() == 0); this->SetWidgetDirty(WID_SB_SEL_PAGE); this->UpdatePrevNextDisabledState(); } else if (data >= 0 && this->selected_page_id == data) { diff --git a/src/strgen/strgen_base.cpp b/src/strgen/strgen_base.cpp index 8f3f8941fd..0e75537fb8 100644 --- a/src/strgen/strgen_base.cpp +++ b/src/strgen/strgen_base.cpp @@ -1029,14 +1029,14 @@ void LanguageWriter::WriteLang(const StringData &data) for (c = casep; c != NULL; c = c->next) { buffer.AppendByte(c->caseidx); /* Make some space for the 16-bit length */ - uint pos = buffer.Length(); + uint pos = buffer.size(); buffer.AppendByte(0); buffer.AppendByte(0); /* Write string */ PutCommandString(&buffer, c->string); buffer.AppendByte(0); // terminate with a zero /* Fill in the length */ - uint size = buffer.Length() - (pos + 2); + uint size = buffer.size() - (pos + 2); buffer[pos + 0] = GB(size, 8, 8); buffer[pos + 1] = GB(size, 0, 8); } @@ -1044,8 +1044,8 @@ void LanguageWriter::WriteLang(const StringData &data) if (cmdp != NULL) PutCommandString(&buffer, cmdp); - this->WriteLength(buffer.Length()); - this->Write(buffer.Begin(), buffer.Length()); + this->WriteLength(buffer.size()); + this->Write(buffer.Begin(), buffer.size()); buffer.clear(); } } diff --git a/src/string.cpp b/src/string.cpp index cb6c1e8f7e..5246f78271 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -674,7 +674,7 @@ public: UText text = UTEXT_INITIALIZER; UErrorCode status = U_ZERO_ERROR; - utext_openUChars(&text, this->utf16_str.Begin(), this->utf16_str.Length() - 1, &status); + utext_openUChars(&text, this->utf16_str.Begin(), this->utf16_str.size() - 1, &status); this->char_itr->setText(&text, status); this->word_itr->setText(&text, status); this->char_itr->first(); @@ -685,7 +685,7 @@ public: { /* Convert incoming position to an UTF-16 string index. */ uint utf16_pos = 0; - for (uint i = 0; i < this->utf16_to_utf8.Length(); i++) { + for (uint i = 0; i < this->utf16_to_utf8.size(); i++) { if (this->utf16_to_utf8[i] == pos) { utf16_pos = i; break; diff --git a/src/stringfilter_type.h b/src/stringfilter_type.h index f78b133cb4..4dad55aaaa 100644 --- a/src/stringfilter_type.h +++ b/src/stringfilter_type.h @@ -58,7 +58,7 @@ public: * Check whether any filter words were entered. * @return true if no words were entered. */ - bool IsEmpty() const { return this->word_index.Length() == 0; } + bool IsEmpty() const { return this->word_index.size() == 0; } void ResetState(); void AddLine(const char *str); @@ -68,7 +68,7 @@ public: * Get the matching state of the current item. * @return true if matched. */ - bool GetState() const { return this->word_matches == this->word_index.Length(); } + bool GetState() const { return this->word_matches == this->word_index.size(); } }; #endif /* STRINGFILTER_TYPE_H */ diff --git a/src/strings.cpp b/src/strings.cpp index 57a1757021..61a5098ab6 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -1952,7 +1952,7 @@ void InitializeLanguagePacks() FioAppendDirectory(path, lastof(path), sp, LANG_DIR); GetLanguageList(path); } - if (_languages.Length() == 0) usererror("No available language packs (invalid versions?)"); + if (_languages.size() == 0) usererror("No available language packs (invalid versions?)"); /* Acquire the locale of the current system */ const char *lang = GetCurrentLocale("LC_MESSAGES"); diff --git a/src/texteff.cpp b/src/texteff.cpp index ee5ce592b4..0f9fec247d 100644 --- a/src/texteff.cpp +++ b/src/texteff.cpp @@ -45,10 +45,10 @@ TextEffectID AddTextEffect(StringID msg, int center, int y, uint8 duration, Text if (_game_mode == GM_MENU) return INVALID_TE_ID; TextEffectID i; - for (i = 0; i < _text_effects.Length(); i++) { + for (i = 0; i < _text_effects.size(); i++) { if (_text_effects[i].string_id == INVALID_STRING_ID) break; } - if (i == _text_effects.Length()) _text_effects.Append(); + if (i == _text_effects.size()) _text_effects.Append(); TextEffect *te = _text_effects.Get(i); diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index 018888d0b9..e9706c7529 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -86,7 +86,7 @@ uint TextfileWindow::GetContentHeight() int max_width = this->GetWidget(WID_TF_BACKGROUND)->current_x - WD_FRAMETEXT_LEFT - WD_FRAMERECT_RIGHT; uint height = 0; - for (uint i = 0; i < this->lines.Length(); i++) { + for (uint i = 0; i < this->lines.size(); i++) { height += GetStringHeight(this->lines[i], max_width, FS_MONO); } @@ -113,10 +113,10 @@ void TextfileWindow::SetupScrollbars() this->hscroll->SetCount(0); } else { uint max_length = 0; - for (uint i = 0; i < this->lines.Length(); i++) { + for (uint i = 0; i < this->lines.size(); i++) { max_length = max(max_length, GetStringBoundingBox(this->lines[i], FS_MONO).width); } - this->vscroll->SetCount(this->lines.Length() * FONT_HEIGHT_MONO); + this->vscroll->SetCount(this->lines.size() * FONT_HEIGHT_MONO); this->hscroll->SetCount(max_length + WD_FRAMETEXT_LEFT + WD_FRAMETEXT_RIGHT); } @@ -152,7 +152,7 @@ void TextfileWindow::SetupScrollbars() int line_height = FONT_HEIGHT_MONO; int y_offset = -this->vscroll->GetPosition(); - for (uint i = 0; i < this->lines.Length(); i++) { + for (uint i = 0; i < this->lines.size(); i++) { if (IsWidgetLowered(WID_TF_WRAPTEXT)) { y_offset = DrawStringMultiLine(0, right - x, y_offset, bottom - y, this->lines[i], TC_WHITE, SA_TOP | SA_LEFT, false, FS_MONO); } else { @@ -184,7 +184,7 @@ void TextfileWindow::SetupScrollbars() /* virtual */ const char *TextfileWindow::NextString() { - if (this->search_iterator >= this->lines.Length()) return NULL; + if (this->search_iterator >= this->lines.size()) return NULL; return this->lines[this->search_iterator++]; } diff --git a/src/timetable_cmd.cpp b/src/timetable_cmd.cpp index 29986c353d..dec4f7d442 100644 --- a/src/timetable_cmd.cpp +++ b/src/timetable_cmd.cpp @@ -292,10 +292,10 @@ CommandCost CmdSetTimetableStart(TileIndex tile, DoCommandFlag flags, uint32 p1, } int total_duration = v->orders.list->GetTimetableTotalDuration(); - int num_vehs = vehs.Length(); + int num_vehs = vehs.size(); if (num_vehs >= 2) { - QSortT(vehs.Begin(), vehs.Length(), &VehicleTimetableSorter); + QSortT(vehs.Begin(), vehs.size(), &VehicleTimetableSorter); } int base = vehs.FindIndex(v); diff --git a/src/town_gui.cpp b/src/town_gui.cpp index b9aa938e63..bf8fb4b875 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -659,7 +659,7 @@ private: this->towns.shrink_to_fit(); this->towns.RebuildDone(); - this->vscroll->SetCount(this->towns.Length()); // Update scrollbar as well. + this->vscroll->SetCount(this->towns.size()); // Update scrollbar as well. } /* Always sort the towns. */ this->last_town = NULL; @@ -766,7 +766,7 @@ public: case WID_TD_LIST: { int n = 0; int y = r.top + WD_FRAMERECT_TOP; - if (this->towns.Length() == 0) { // No towns available. + if (this->towns.size() == 0) { // No towns available. DrawString(r.left + WD_FRAMERECT_LEFT, r.right, y, STR_TOWN_DIRECTORY_NONE); break; } @@ -778,7 +778,7 @@ public: int text_right = r.right - WD_FRAMERECT_RIGHT - (rtl ? icon_size.width + 2 : 0); int icon_x = rtl ? r.right - WD_FRAMERECT_RIGHT - icon_size.width : r.left + WD_FRAMERECT_LEFT; - for (uint i = this->vscroll->GetPosition(); i < this->towns.Length(); i++) { + for (uint i = this->vscroll->GetPosition(); i < this->towns.size(); i++) { const Town *t = this->towns[i]; assert(t->xy != INVALID_TILE); @@ -826,7 +826,7 @@ public: } case WID_TD_LIST: { Dimension d = GetStringBoundingBox(STR_TOWN_DIRECTORY_NONE); - for (uint i = 0; i < this->towns.Length(); i++) { + for (uint i = 0; i < this->towns.size(); i++) { const Town *t = this->towns[i]; assert(t != NULL); @@ -879,7 +879,7 @@ public: case WID_TD_LIST: { // Click on Town Matrix uint id_v = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_TD_LIST, WD_FRAMERECT_TOP); - if (id_v >= this->towns.Length()) return; // click out of town bounds + if (id_v >= this->towns.size()) return; // click out of town bounds const Town *t = this->towns[id_v]; assert(t != NULL); diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 9f17bd898c..db3773f964 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -833,7 +833,7 @@ static void MakeTrainBackup(TrainList &list, Train *t) static void RestoreTrainBackup(TrainList &list) { /* No train, nothing to do. */ - if (list.Length() == 0) return; + if (list.size() == 0) return; Train *prev = NULL; /* Iterate over the list and rebuild it. */ diff --git a/src/train_gui.cpp b/src/train_gui.cpp index 5246b59cb1..3c394ef191 100644 --- a/src/train_gui.cpp +++ b/src/train_gui.cpp @@ -332,7 +332,7 @@ int GetTrainDetailsWndVScroll(VehicleID veh_id, TrainDetailsWindowTabs det_tab) } else { for (const Train *v = Train::Get(veh_id); v != NULL; v = v->GetNextVehicle()) { GetCargoSummaryOfArticulatedVehicle(v, &_cargo_summary); - num += max(1u, _cargo_summary.Length()); + num += max(1u, (unsigned)_cargo_summary.size()); uint length = GetLengthOfArticulatedVehicle(v); if (length > TRAIN_DETAILS_MAX_INDENT) num++; @@ -400,7 +400,7 @@ void DrawTrainDetails(const Train *v, int left, int right, int y, int vscroll_po dx = 0; } - uint num_lines = max(1u, _cargo_summary.Length()); + uint num_lines = max(1u, (unsigned)_cargo_summary.size()); for (uint i = 0; i < num_lines; i++) { int sprite_width = max(dx, ScaleGUITrad(TRAIN_DETAILS_MIN_INDENT)) + 3; int data_left = left + (rtl ? 0 : sprite_width); @@ -412,7 +412,7 @@ void DrawTrainDetails(const Train *v, int left, int right, int y, int vscroll_po } switch (det_tab) { case TDW_TAB_CARGO: - if (i < _cargo_summary.Length()) { + if (i < _cargo_summary.size()) { TrainDetailsCargoTab(&_cargo_summary[i], data_left, data_right, py); } else { DrawString(data_left, data_right, py, STR_QUANTITY_N_A, TC_LIGHT_BLUE); @@ -424,7 +424,7 @@ void DrawTrainDetails(const Train *v, int left, int right, int y, int vscroll_po break; case TDW_TAB_CAPACITY: - if (i < _cargo_summary.Length()) { + if (i < _cargo_summary.size()) { TrainDetailsCapacityTab(&_cargo_summary[i], data_left, data_right, py); } else { SetDParam(0, STR_EMPTY); diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 27f2262e78..ccc9446a02 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -652,7 +652,7 @@ CommandCost CmdMassStartStopVehicle(TileIndex tile, DoCommandFlag flags, uint32 BuildDepotVehicleList(vli.vtype, tile, &list, NULL); } - for (uint i = 0; i < list.Length(); i++) { + for (uint i = 0; i < list.size(); i++) { const Vehicle *v = list[i]; if (!!(v->vehstatus & VS_STOPPED) != do_start) continue; @@ -691,7 +691,7 @@ CommandCost CmdDepotSellAllVehicles(TileIndex tile, DoCommandFlag flags, uint32 CommandCost last_error = CMD_ERROR; bool had_success = false; - for (uint i = 0; i < list.Length(); i++) { + for (uint i = 0; i < list.size(); i++) { CommandCost ret = DoCommand(tile, list[i]->index | (1 << 20), 0, flags, sell_command); if (ret.Succeeded()) { cost.AddCost(ret); @@ -725,7 +725,7 @@ CommandCost CmdDepotMassAutoReplace(TileIndex tile, DoCommandFlag flags, uint32 /* Get the list of vehicles in the depot */ BuildDepotVehicleList(vehicle_type, tile, &list, &list, true); - for (uint i = 0; i < list.Length(); i++) { + for (uint i = 0; i < list.size(); i++) { const Vehicle *v = list[i]; /* Ensure that the vehicle completely in the depot */ @@ -1003,7 +1003,7 @@ static CommandCost SendAllVehiclesToDepot(DoCommandFlag flags, bool service, con /* Send all the vehicles to a depot */ bool had_success = false; - for (uint i = 0; i < list.Length(); i++) { + for (uint i = 0; i < list.size(); i++) { const Vehicle *v = list[i]; CommandCost ret = DoCommand(v->tile, v->index | (service ? DEPOT_SERVICE : 0U) | DEPOT_DONT_CANCEL, 0, flags, GetCmdSendToDepot(vli.vtype)); diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 2ae385aa20..36f08493e5 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -133,7 +133,7 @@ void BaseVehicleListWindow::BuildVehicleList() this->unitnumber_digits = GetUnitNumberDigits(this->vehicles); this->vehicles.RebuildDone(); - this->vscroll->SetCount(this->vehicles.Length()); + this->vscroll->SetCount(this->vehicles.size()); } /** @@ -193,8 +193,8 @@ void BaseVehicleListWindow::SortVehicleList() void DepotSortList(VehicleList *list) { - if (list->Length() < 2) return; - QSortT(list->Begin(), list->Length(), &VehicleNumberSorter); + if (list->size() < 2) return; + QSortT(list->Begin(), list->size(), &VehicleNumberSorter); } /** draw the vehicle profit button in the vehicle list window. */ @@ -243,7 +243,7 @@ byte GetBestFittingSubType(Vehicle *v_from, Vehicle *v_for, CargoID dest_cargo_t byte ret_refit_cyc = 0; bool success = false; - if (subtypes.Length() > 0) { + if (subtypes.size() > 0) { /* Check whether any articulated part is refittable to 'dest_cargo_type' with a subtype listed in 'subtypes' */ for (Vehicle *v = v_for; v != NULL; v = v->HasArticulatedPart() ? v->GetNextArticulatedPart() : NULL) { const Engine *e = v->GetEngine(); @@ -347,7 +347,7 @@ static void DrawVehicleRefitWindow(const SubtypeList list[NUM_CARGO], const int /* Draw the list of subtypes for each cargo, and find the selected refit option (by its position). */ for (uint i = 0; current < pos + rows && i < NUM_CARGO; i++) { - for (uint j = 0; current < pos + rows && j < list[i].Length(); j++) { + for (uint j = 0; current < pos + rows && j < list[i].size(); j++) { const RefitOption &refit = list[i][j]; /* Hide subtypes if sel[0] does not match */ @@ -359,11 +359,11 @@ static void DrawVehicleRefitWindow(const SubtypeList list[NUM_CARGO], const int continue; } - if (list[i].Length() > 1) { + if (list[i].size() > 1) { if (refit.subtype != 0xFF) { /* Draw tree lines */ int ycenter = y + FONT_HEIGHT_NORMAL / 2; - GfxDrawLine(iconcenter, y - WD_MATRIX_TOP, iconcenter, j == list[i].Length() - 1 ? ycenter : y - WD_MATRIX_TOP + delta - 1, linecolour); + GfxDrawLine(iconcenter, y - WD_MATRIX_TOP, iconcenter, j == list[i].size() - 1 ? ycenter : y - WD_MATRIX_TOP + delta - 1, linecolour); GfxDrawLine(iconcenter, ycenter, iconinner, ycenter, linecolour); } else { /* Draw expand/collapse icon */ @@ -435,7 +435,7 @@ struct RefitWindow : public Window { continue; } - bool first_vehicle = this->list[current_index].Length() == 0; + bool first_vehicle = this->list[current_index].size() == 0; if (first_vehicle) { /* Keeping the current subtype is always an option. It also serves as the option in case of no subtypes */ RefitOption *option = this->list[current_index].Append(); @@ -480,7 +480,7 @@ struct RefitWindow : public Window { /* No more subtypes for this vehicle, delete all subtypes >= refit_cyc */ SubtypeList &l = this->list[current_index]; /* 0xFF item is in front, other subtypes are sorted. So just truncate the list in the right spot */ - for (uint i = 1; i < l.Length(); i++) { + for (uint i = 1; i < l.size(); i++) { if (l[i].subtype >= refit_cyc) { l.Resize(i); break; @@ -491,8 +491,8 @@ struct RefitWindow : public Window { /* Check whether the subtype matches with the subtype of earlier vehicles. */ uint pos = 1; SubtypeList &l = this->list[current_index]; - while (pos < l.Length() && l[pos].subtype != refit_cyc) pos++; - if (pos < l.Length() && l[pos].string != subtype) { + while (pos < l.size() && l[pos].subtype != refit_cyc) pos++; + if (pos < l.size() && l[pos].string != subtype) { /* String mismatch, remove item keeping the order */ l.ErasePreservingOrder(pos); } @@ -522,7 +522,7 @@ struct RefitWindow : public Window { uint row = 0; for (uint i = 0; i < NUM_CARGO; i++) { - for (uint j = 0; j < this->list[i].Length(); j++) { + for (uint j = 0; j < this->list[i].size(); j++) { const RefitOption &refit = this->list[i][j]; /* Hide subtypes if sel[0] does not match */ @@ -547,7 +547,7 @@ struct RefitWindow : public Window { uint row = 0; for (uint i = 0; i < NUM_CARGO; i++) { - for (uint j = 0; j < this->list[i].Length(); j++) { + for (uint j = 0; j < this->list[i].size(); j++) { const RefitOption &refit = this->list[i][j]; /* Hide subtypes if sel[0] does not match */ @@ -576,7 +576,7 @@ struct RefitWindow : public Window { if (this->sel[0] < 0) return NULL; SubtypeList &l = this->list[this->sel[0]]; - if ((uint)this->sel[1] >= l.Length()) return NULL; + if ((uint)this->sel[1] >= l.size()) return NULL; return &l[this->sel[1]]; } @@ -617,7 +617,7 @@ struct RefitWindow : public Window { this->sel[1] = 0; this->cargo = NULL; for (uint i = 0; this->cargo == NULL && i < NUM_CARGO; i++) { - for (uint j = 0; j < list[i].Length(); j++) { + for (uint j = 0; j < list[i].size(); j++) { if (list[i][j] == current_refit_option) { this->sel[0] = i; this->sel[1] = j; @@ -830,7 +830,7 @@ struct RefitWindow : public Window { /* Check the width of all cargo information strings. */ for (uint i = 0; i < NUM_CARGO; i++) { - for (uint j = 0; j < this->list[i].Length(); j++) { + for (uint j = 0; j < this->list[i].size(); j++) { StringID string = this->GetCapacityString(&list[i][j]); if (string != INVALID_STRING_ID) { Dimension dim = GetStringBoundingBox(string); @@ -1388,7 +1388,7 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int int vehicle_button_x = rtl ? right - GetSpriteSize(SPR_PROFIT_LOT).width : left; int y = r.top; - uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->vehicles.Length()); + uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->vehicles.size()); for (uint i = this->vscroll->GetPosition(); i < max; ++i) { const Vehicle *v = this->vehicles[i]; StringID str; @@ -1532,7 +1532,7 @@ public: case WID_VL_CAPTION: { switch (this->vli.type) { case VL_SHARED_ORDERS: // Shared Orders - if (this->vehicles.Length() == 0) { + if (this->vehicles.size() == 0) { /* We can't open this window without vehicles using this order * and we should close the window when deleting the order. */ NOT_REACHED(); @@ -1584,7 +1584,7 @@ public: this->BuildVehicleList(); this->SortVehicleList(); - if (this->vehicles.Length() == 0 && this->IsWidgetLowered(WID_VL_MANAGE_VEHICLES_DROPDOWN)) { + if (this->vehicles.size() == 0 && this->IsWidgetLowered(WID_VL_MANAGE_VEHICLES_DROPDOWN)) { HideDropDownMenu(this); } @@ -1598,7 +1598,7 @@ public: } if (this->owner == _local_company) { this->SetWidgetDisabledState(WID_VL_AVAILABLE_VEHICLES, this->vli.type != VL_STANDARD); - this->SetWidgetsDisabledState(this->vehicles.Length() == 0, + this->SetWidgetsDisabledState(this->vehicles.size() == 0, WID_VL_MANAGE_VEHICLES_DROPDOWN, WID_VL_STOP_ALL, WID_VL_START_ALL, @@ -1626,7 +1626,7 @@ public: case WID_VL_LIST: { // Matrix to show vehicles uint id_v = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_VL_LIST); - if (id_v >= this->vehicles.Length()) return; // click out of list bound + if (id_v >= this->vehicles.size()) return; // click out of list bound const Vehicle *v = this->vehicles[id_v]; if (!VehicleClicked(v)) ShowVehicleViewWindow(v); @@ -1657,7 +1657,7 @@ public: this->vehicles.SetSortType(index); break; case WID_VL_MANAGE_VEHICLES_DROPDOWN: - assert(this->vehicles.Length() != 0); + assert(this->vehicles.size() != 0); switch (index) { case ADI_REPLACE: // Replace window diff --git a/src/viewport.cpp b/src/viewport.cpp index bd0570cf1a..de0da81b23 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -598,7 +598,7 @@ void OffsetGroundSprite(int x, int y) } /* _vd.last_child == NULL if foundation sprite was clipped by the viewport bounds */ - if (_vd.last_child != NULL) _vd.foundation[_vd.foundation_part] = _vd.parent_sprites_to_draw.Length() - 1; + if (_vd.last_child != NULL) _vd.foundation[_vd.foundation_part] = _vd.parent_sprites_to_draw.size() - 1; _vd.foundation_offset[_vd.foundation_part].x = x * ZOOM_LVL_BASE; _vd.foundation_offset[_vd.foundation_part].y = y * ZOOM_LVL_BASE; @@ -824,7 +824,7 @@ void AddChildSpriteScreen(SpriteID image, PaletteID pal, int x, int y, bool tran pal = PALETTE_TO_TRANSPARENT; } - *_vd.last_child = _vd.child_screen_sprites_to_draw.Length(); + *_vd.last_child = _vd.child_screen_sprites_to_draw.size(); ChildScreenSpriteToDraw *cs = _vd.child_screen_sprites_to_draw.Append(); cs->image = image; @@ -1584,7 +1584,7 @@ void ViewportDoDraw(const ViewPort *vp, int left, int top, int right, int bottom DrawTextEffects(&_vd.dpi); - if (_vd.tile_sprites_to_draw.Length() != 0) ViewportDrawTileSprites(&_vd.tile_sprites_to_draw); + if (_vd.tile_sprites_to_draw.size() != 0) ViewportDrawTileSprites(&_vd.tile_sprites_to_draw); ParentSpriteToDraw *psd_end = _vd.parent_sprites_to_draw.End(); for (ParentSpriteToDraw *it = _vd.parent_sprites_to_draw.Begin(); it != psd_end; it++) { @@ -1611,7 +1611,7 @@ void ViewportDoDraw(const ViewPort *vp, int left, int top, int right, int bottom vp->overlay->Draw(&dp); } - if (_vd.string_sprites_to_draw.Length() != 0) { + if (_vd.string_sprites_to_draw.size() != 0) { /* translate to world coordinates */ dp.left = UnScaleByZoom(_vd.dpi.left, zoom); dp.top = UnScaleByZoom(_vd.dpi.top, zoom); diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp index f789b47b7c..6acbd79c21 100644 --- a/src/widgets/dropdown.cpp +++ b/src/widgets/dropdown.cpp @@ -151,7 +151,7 @@ struct DropdownWindow : Window { DropdownWindow(Window *parent, const DropDownList *list, int selected, int button, bool instant_close, const Point &position, const Dimension &size, Colours wi_colour, bool scroll) : Window(&_dropdown_desc) { - assert(list->Length() > 0); + assert(list->size() > 0); this->position = position; @@ -180,8 +180,8 @@ struct DropdownWindow : Window { } /* Capacity is the average number of items visible */ - this->vscroll->SetCapacity(size.height * (uint16)list->Length() / list_height); - this->vscroll->SetCount((uint16)list->Length()); + this->vscroll->SetCapacity(size.height * (uint16)list->size() / list_height); + this->vscroll->SetCount((uint16)list->size()); this->parent_wnd_class = parent->window_class; this->parent_wnd_num = parent->window_number; @@ -418,7 +418,7 @@ void ShowDropDownListAt(Window *w, const DropDownList *list, int selected, int b /* If the dropdown doesn't fully fit, we need a dropdown. */ if (height > available_height) { scroll = true; - uint avg_height = height / list->Length(); + uint avg_height = height / list->size(); /* Check at least there is space for one item. */ assert(available_height >= avg_height); @@ -514,7 +514,7 @@ void ShowDropDownMenu(Window *w, const StringID *strings, int selected, int butt } /* No entries in the list? */ - if (list->Length() == 0) { + if (list->size() == 0) { delete list; return; } diff --git a/src/window.cpp b/src/window.cpp index 184b9940ae..c6a9f1653d 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -166,7 +166,7 @@ static int CDECL DescSorter(WindowDesc * const *a, WindowDesc * const *b) void WindowDesc::SaveToConfig() { /* Sort the stuff to get a nice ini file on first write */ - QSortT(_window_descs->Begin(), _window_descs->Length(), DescSorter); + QSortT(_window_descs->Begin(), _window_descs->size(), DescSorter); IniFile *ini = new IniFile(); ini->LoadFromDisk(_windows_file, NO_DIRECTORY); From bad2c2154b97613bd6a045cfe1f05cff876da1e4 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Sun, 23 Sep 2018 16:43:00 +0100 Subject: [PATCH 550/622] Codechange: Replaced SmallVector::Resize() with std::vector::resize() --- src/core/smallstack_type.hpp | 2 +- src/core/smallvec_type.hpp | 9 --------- src/linkgraph/linkgraph.cpp | 2 +- src/linkgraph/linkgraphjob.cpp | 2 +- src/vehicle_gui.cpp | 2 +- 5 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/core/smallstack_type.hpp b/src/core/smallstack_type.hpp index 76d97f9615..5a9d329a9f 100644 --- a/src/core/smallstack_type.hpp +++ b/src/core/smallstack_type.hpp @@ -74,7 +74,7 @@ private: } if (index >= this->data.size() && index < Tmax_size) { - this->data.Resize(index + 1); + this->data.resize(index + 1); } return index; } diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 600b7ea262..e78f98a50b 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -97,15 +97,6 @@ public: return this->End() - to_add; } - /** - * Set the size of the vector, effectively truncating items from the end or appending uninitialised ones. - * @param num_items Target size. - */ - inline void Resize(uint num_items) - { - std::vector::resize(num_items); - } - /** * Insert a new item at a specific position into the vector, moving all following items. * @param item Position at which the new item should be inserted diff --git a/src/linkgraph/linkgraph.cpp b/src/linkgraph/linkgraph.cpp index 34b3a4aa09..eee7ac61fd 100644 --- a/src/linkgraph/linkgraph.cpp +++ b/src/linkgraph/linkgraph.cpp @@ -281,7 +281,7 @@ void LinkGraph::Init(uint size) { assert(this->Size() == 0); this->edges.Resize(size, size); - this->nodes.Resize(size); + this->nodes.resize(size); for (uint i = 0; i < size; ++i) { this->nodes[i].Init(); diff --git a/src/linkgraph/linkgraphjob.cpp b/src/linkgraph/linkgraphjob.cpp index 537303cf35..fcc9dce780 100644 --- a/src/linkgraph/linkgraphjob.cpp +++ b/src/linkgraph/linkgraphjob.cpp @@ -179,7 +179,7 @@ LinkGraphJob::~LinkGraphJob() void LinkGraphJob::Init() { uint size = this->Size(); - this->nodes.Resize(size); + this->nodes.resize(size); this->edges.Resize(size, size); for (uint i = 0; i < size; ++i) { this->nodes[i].Init(this->link_graph[i].Supply()); diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 36f08493e5..95f0a28ec7 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -482,7 +482,7 @@ struct RefitWindow : public Window { /* 0xFF item is in front, other subtypes are sorted. So just truncate the list in the right spot */ for (uint i = 1; i < l.size(); i++) { if (l[i].subtype >= refit_cyc) { - l.Resize(i); + l.resize(i); break; } } From f3938fdb838685e76bba78974bb6e90e9afc6e22 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Sun, 23 Sep 2018 17:16:49 +0100 Subject: [PATCH 551/622] Codechange: Replaced SmallVector::Reset() with std::vector::clear() + shrink_to_fit() --- src/core/smallvec_type.hpp | 9 --------- src/network/network_content.cpp | 3 ++- src/newgrf_engine.cpp | 3 ++- src/saveload/waypoint_sl.cpp | 3 ++- src/stringfilter.cpp | 3 ++- src/texteff.cpp | 3 ++- src/vehicle.cpp | 3 ++- 7 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index e78f98a50b..7e0abec767 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -77,15 +77,6 @@ public: std::vector::operator=(other); } - /** - * Remove all items from the list and free allocated memory. - */ - inline void Reset() - { - std::vector::clear(); - std::vector::shrink_to_fit(); - } - /** * Append an item and return it. * @param to_add the number of items to append diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index d36aec6baa..8c038796f0 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -555,7 +555,8 @@ void ClientNetworkContentSocketHandler::OnFailure() uint files, bytes; this->DownloadSelectedContent(files, bytes, true); - this->http_response.Reset(); + this->http_response.clear(); + this->http_response.shrink_to_fit(); this->http_response_index = -2; if (this->curFile != NULL) { diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index 60d03fcc3e..ce7cfdf24e 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -1272,7 +1272,8 @@ void CommitVehicleListOrderChanges() } /* Clear out the queue */ - _list_order_changes.Reset(); + _list_order_changes.clear(); + _list_order_changes.shrink_to_fit(); } /** diff --git a/src/saveload/waypoint_sl.cpp b/src/saveload/waypoint_sl.cpp index 5e3a391f07..47d0c5ab36 100644 --- a/src/saveload/waypoint_sl.cpp +++ b/src/saveload/waypoint_sl.cpp @@ -146,7 +146,8 @@ void MoveWaypointsToBaseStations() UpdateWaypointOrder(&v->current_order); } - _old_waypoints.Reset(); + _old_waypoints.clear(); + _old_waypoints.shrink_to_fit(); } static const SaveLoad _old_waypoint_desc[] = { diff --git a/src/stringfilter.cpp b/src/stringfilter.cpp index 6045c19ef4..b12abff7ff 100644 --- a/src/stringfilter.cpp +++ b/src/stringfilter.cpp @@ -28,7 +28,8 @@ static const WChar STATE_QUOTE2 = '"'; */ void StringFilter::SetFilterTerm(const char *str) { - this->word_index.Reset(); + this->word_index.clear(); + this->word_index.shrink_to_fit(); this->word_matches = 0; free(this->filter_buffer); diff --git a/src/texteff.cpp b/src/texteff.cpp index 0f9fec247d..41907e14d4 100644 --- a/src/texteff.cpp +++ b/src/texteff.cpp @@ -108,7 +108,8 @@ void MoveAllTextEffects(uint delta_ms) void InitTextEffects() { - _text_effects.Reset(); + _text_effects.clear(); + _text_effects.shrink_to_fit(); } void DrawTextEffects(DrawPixelInfo *dpi) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index d885a04587..0e05d68f2a 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -693,7 +693,8 @@ static AutoreplaceMap _vehicles_to_autoreplace; void InitializeVehicles() { - _vehicles_to_autoreplace.Reset(); + _vehicles_to_autoreplace.clear(); + _vehicles_to_autoreplace.shrink_to_fit(); ResetVehicleHash(); } From 81315939b909a95277ffbab51709714779089656 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Sun, 23 Sep 2018 17:36:45 +0100 Subject: [PATCH 552/622] Codechange: Replaced SmallVector::Find() non-const with std::find() --- src/animated_tile.cpp | 2 +- src/core/pool_func.cpp | 2 +- src/core/smallvec_type.hpp | 14 -------------- src/hotkeys.cpp | 2 +- src/network/network_content.h | 2 +- src/train_gui.cpp | 8 +++++++- src/window.cpp | 2 +- 7 files changed, 12 insertions(+), 20 deletions(-) diff --git a/src/animated_tile.cpp b/src/animated_tile.cpp index 5d43848202..3341f57951 100644 --- a/src/animated_tile.cpp +++ b/src/animated_tile.cpp @@ -27,7 +27,7 @@ SmallVector _animated_tiles; */ void DeleteAnimatedTile(TileIndex tile) { - TileIndex *to_remove = _animated_tiles.Find(tile); + TileIndex *to_remove = &*std::find(_animated_tiles.begin(), _animated_tiles.end(), tile); if (to_remove != _animated_tiles.End()) { /* The order of the remaining elements must stay the same, otherwise the animation loop may miss a tile. */ _animated_tiles.ErasePreservingOrder(to_remove); diff --git a/src/core/pool_func.cpp b/src/core/pool_func.cpp index 914cbcfd90..97f9ad1c78 100644 --- a/src/core/pool_func.cpp +++ b/src/core/pool_func.cpp @@ -21,7 +21,7 @@ /* virtual */ PoolBase::~PoolBase() { PoolVector *pools = PoolBase::GetPools(); - pools->Erase(pools->Find(this)); + pools->erase(std::find(pools->begin(), pools->end(), this)); if (pools->size() == 0) delete pools; } diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 7e0abec767..289cc9e1d6 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -116,20 +116,6 @@ public: return pos; } - /** - * Search for the first occurrence of an item. - * The '!=' operator of T is used for comparison. - * @param item Item to search for - * @return The position of the item, or End() when not present - */ - inline T *Find(const T &item) - { - T *pos = this->Begin(); - const T *end = this->End(); - while (pos != end && *pos != item) pos++; - return pos; - } - /** * Search for the first occurrence of an item. * The '!=' operator of T is used for comparison. diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp index 9411887ea7..9f323bc285 100644 --- a/src/hotkeys.cpp +++ b/src/hotkeys.cpp @@ -260,7 +260,7 @@ HotkeyList::HotkeyList(const char *ini_group, Hotkey *items, GlobalHotkeyHandler HotkeyList::~HotkeyList() { - _hotkey_lists->Erase(_hotkey_lists->Find(this)); + _hotkey_lists->erase(std::find(_hotkey_lists->begin(), _hotkey_lists->end(), this)); } /** diff --git a/src/network/network_content.h b/src/network/network_content.h index 0d30de857d..a81cc6a6d4 100644 --- a/src/network/network_content.h +++ b/src/network/network_content.h @@ -142,7 +142,7 @@ public: /** Add a callback to this class */ void AddCallback(ContentCallback *cb) { this->callbacks.Include(cb); } /** Remove a callback */ - void RemoveCallback(ContentCallback *cb) { this->callbacks.Erase(this->callbacks.Find(cb)); } + void RemoveCallback(ContentCallback *cb) { this->callbacks.erase(std::find(this->callbacks.begin(), this->callbacks.end(), cb)); } }; extern ClientNetworkContentSocketHandler _network_content_client; diff --git a/src/train_gui.cpp b/src/train_gui.cpp index 3c394ef191..eab6a33e3e 100644 --- a/src/train_gui.cpp +++ b/src/train_gui.cpp @@ -174,6 +174,12 @@ struct CargoSummaryItem { { return this->cargo != other.cargo || this->subtype != other.subtype; } + + /** Used by std::find() and similar functions */ + inline bool operator == (const CargoSummaryItem &other) const + { + return !(this->cargo != other.cargo); + } }; static const uint TRAIN_DETAILS_MIN_INDENT = 32; ///< Minimum indent level in the train details window @@ -272,7 +278,7 @@ static void GetCargoSummaryOfArticulatedVehicle(const Train *v, CargoSummary *su new_item.subtype = GetCargoSubtypeText(v); if (new_item.cargo == INVALID_CARGO && new_item.subtype == STR_EMPTY) continue; - CargoSummaryItem *item = summary->Find(new_item); + CargoSummaryItem *item = &*std::find(summary->begin(), summary->end(), new_item); if (item == summary->End()) { item = summary->Append(); item->cargo = new_item.cargo; diff --git a/src/window.cpp b/src/window.cpp index c6a9f1653d..471ac08a2e 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -114,7 +114,7 @@ WindowDesc::WindowDesc(WindowPosition def_pos, const char *ini_key, int16 def_wi WindowDesc::~WindowDesc() { - _window_descs->Erase(_window_descs->Find(this)); + _window_descs->erase(std::find(_window_descs->begin(), _window_descs->end(), this)); } /** From 846095224044b39ddd3249b6ea072e486ba1fe38 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Sun, 23 Sep 2018 22:15:35 +0100 Subject: [PATCH 553/622] Codechange: Replaced SmallVector::Find() const with suitable alternatives The use of std::none_of in network/core/host.cpp is driven by the non-const comparison operator use by NetworkAddress. A future commit should address the const_casts in that class to ensure const-correctness. --- src/core/smallvec_type.hpp | 20 +++----------------- src/network/core/host.cpp | 8 ++++---- 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 289cc9e1d6..1c713470f6 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -102,20 +102,6 @@ public: return this->Begin() + start; } - /** - * Search for the first occurrence of an item. - * The '!=' operator of T is used for comparison. - * @param item Item to search for - * @return The position of the item, or End() when not present - */ - inline const T *Find(const T &item) const - { - const T *pos = this->Begin(); - const T *end = this->End(); - while (pos != end && *pos != item) pos++; - return pos; - } - /** * Search for the first occurrence of an item. * The '!=' operator of T is used for comparison. @@ -124,8 +110,8 @@ public: */ inline int FindIndex(const T &item) const { - auto const it = this->Find(item); - return it == this->End() ? -1 : it - this->Begin(); + auto const it = std::find(std::vector::begin(), std::vector::end(), item); + return it == std::vector::end() ? -1 : it - std::vector::begin(); } /** @@ -136,7 +122,7 @@ public: */ inline bool Contains(const T &item) const { - return this->Find(item) != this->End(); + return std::find(std::vector::begin(), std::vector::end(), item) != std::vector::end(); } /** diff --git a/src/network/core/host.cpp b/src/network/core/host.cpp index 05ad84153b..c0365742b0 100644 --- a/src/network/core/host.cpp +++ b/src/network/core/host.cpp @@ -76,7 +76,7 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // BE memset(&address, 0, sizeof(address)); ((sockaddr_in*)&address)->sin_addr.s_addr = htonl(ip | ~netmask); NetworkAddress addr(address, sizeof(sockaddr)); - if (!broadcast->Contains(addr)) *broadcast->Append() = addr; + if (std::none_of(broadcast->begin(), broadcast->end(), [&addr](NetworkAddress const& elem) -> bool { return elem == addr; })) *broadcast->Append() = addr; } if (read < 0) { break; @@ -100,7 +100,7 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // GE if (ifa->ifa_broadaddr->sa_family != AF_INET) continue; NetworkAddress addr(ifa->ifa_broadaddr, sizeof(sockaddr)); - if (!broadcast->Contains(addr)) *broadcast->Append() = addr; + if (std::none_of(broadcast->begin(), broadcast->end(), [&addr](NetworkAddress const& elem) -> bool { return elem == addr; })) *broadcast->Append() = addr; } freeifaddrs(ifap); } @@ -136,7 +136,7 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // Wi memcpy(&address, &ifo[j].iiAddress.Address, sizeof(sockaddr)); ((sockaddr_in*)&address)->sin_addr.s_addr = ifo[j].iiAddress.AddressIn.sin_addr.s_addr | ~ifo[j].iiNetmask.AddressIn.sin_addr.s_addr; NetworkAddress addr(address, sizeof(sockaddr)); - if (!broadcast->Contains(addr)) *broadcast->Append() = addr; + if (std::none_of(broadcast->begin(), broadcast->end(), [&addr](NetworkAddress const& elem) -> bool { return elem == addr; })) *broadcast->Append() = addr; } free(ifo); @@ -174,7 +174,7 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // !G (r.ifr_flags & IFF_BROADCAST) && ioctl(sock, SIOCGIFBRDADDR, &r) != -1) { NetworkAddress addr(&r.ifr_broadaddr, sizeof(sockaddr)); - if (!broadcast->Contains(addr)) *broadcast->Append() = addr; + if (std::none_of(broadcast->begin(), broadcast->end(), [&addr](NetworkAddress const& elem) -> bool { return elem == addr; })) *broadcast->Append() = addr; } } From 9b5cc73f3eeefdad439b2d93d872e621891f2b38 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Mon, 24 Sep 2018 20:18:16 +0100 Subject: [PATCH 554/622] Codechange: Replaced SmallVector::ErasePreservingOrder(it, count) with std::vector::erase() --- src/animated_tile.cpp | 6 +++--- src/core/smallvec_type.hpp | 10 ---------- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/src/animated_tile.cpp b/src/animated_tile.cpp index 3341f57951..eb10b9b8d1 100644 --- a/src/animated_tile.cpp +++ b/src/animated_tile.cpp @@ -27,10 +27,10 @@ SmallVector _animated_tiles; */ void DeleteAnimatedTile(TileIndex tile) { - TileIndex *to_remove = &*std::find(_animated_tiles.begin(), _animated_tiles.end(), tile); - if (to_remove != _animated_tiles.End()) { + auto to_remove = std::find(_animated_tiles.begin(), _animated_tiles.end(), tile); + if (to_remove != _animated_tiles.end()) { /* The order of the remaining elements must stay the same, otherwise the animation loop may miss a tile. */ - _animated_tiles.ErasePreservingOrder(to_remove); + _animated_tiles.erase(to_remove); MarkTileDirtyByTile(tile); } } diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 1c713470f6..7d856ca9ba 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -148,16 +148,6 @@ public: std::vector::erase(it, it + count); } - /** - * Remove items from the vector while preserving the order of other items. - * @param item First item to remove. - * @param count Number of consecutive items to remove. - */ - inline void ErasePreservingOrder(T *item, uint count = 1) - { - this->ErasePreservingOrder(item - this->Begin(), count); - } - /** * Tests whether a item is present in the vector, and appends it to the end if not. * The '!=' operator of T is used for comparison. From b1f5119d3af2fb47a2f1c752d61a742f41076451 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Mon, 24 Sep 2018 20:24:40 +0100 Subject: [PATCH 555/622] Codechange: Replaced SmallVector::ErasePreservingOrder(pos, count) with std::vector::erase() --- src/core/smallvec_type.hpp | 11 ----------- src/vehicle_gui.cpp | 2 +- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 7d856ca9ba..5225d13da4 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -137,17 +137,6 @@ public: std::vector::pop_back(); } - /** - * Remove items from the vector while preserving the order of other items. - * @param pos First item to remove. - * @param count Number of consecutive items to remove. - */ - void ErasePreservingOrder(uint pos, uint count = 1) - { - auto const it = std::vector::begin() + pos; - std::vector::erase(it, it + count); - } - /** * Tests whether a item is present in the vector, and appends it to the end if not. * The '!=' operator of T is used for comparison. diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 95f0a28ec7..6dd4bef336 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -494,7 +494,7 @@ struct RefitWindow : public Window { while (pos < l.size() && l[pos].subtype != refit_cyc) pos++; if (pos < l.size() && l[pos].string != subtype) { /* String mismatch, remove item keeping the order */ - l.ErasePreservingOrder(pos); + l.erase(l.begin() + pos); } } } From 5795f66d2eebccbc8e04b80ebaf163f636479f9e Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Tue, 12 Feb 2019 22:59:12 +0000 Subject: [PATCH 556/622] Codechange: Replaced SmallVector::Contains() with std::find() pattern --- src/build_vehicle_gui.cpp | 2 +- src/core/smallvec_type.hpp | 13 +------------ src/hotkeys.cpp | 4 +++- src/network/network_content.cpp | 5 ++--- src/rail.cpp | 2 +- src/station_gui.cpp | 2 +- src/vehicle_cmd.cpp | 2 +- src/vehicle_gui.cpp | 11 ++++++----- 8 files changed, 16 insertions(+), 25 deletions(-) diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index ce3ebeff46..a118b1c995 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1207,7 +1207,7 @@ struct BuildVehicleWindow : Window { this->eng_list.Filter(this->cargo_filter[this->cargo_filter_criteria]); if (0 == this->eng_list.size()) { // no engine passed through the filter, invalidate the previously selected engine this->SelectEngine(INVALID_ENGINE); - } else if (!this->eng_list.Contains(this->sel_engine)) { // previously selected engine didn't pass the filter, select the first engine of the list + } else if (std::find(this->eng_list.begin(), this->eng_list.end(), this->sel_engine) == this->eng_list.end()) { // previously selected engine didn't pass the filter, select the first engine of the list this->SelectEngine(this->eng_list[0]); } } diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 5225d13da4..9df015ad80 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -114,17 +114,6 @@ public: return it == std::vector::end() ? -1 : it - std::vector::begin(); } - /** - * Tests whether a item is present in the vector. - * The '!=' operator of T is used for comparison. - * @param item Item to test for - * @return true iff the item is present - */ - inline bool Contains(const T &item) const - { - return std::find(std::vector::begin(), std::vector::end(), item) != std::vector::end(); - } - /** * Removes given item from this vector * @param item item to remove @@ -145,7 +134,7 @@ public: */ inline bool Include(const T &item) { - bool is_member = this->Contains(item); + bool is_member = std::find(std::vector::begin(), std::vector::end(), item) != std::vector::end(); if (!is_member) *this->Append() = item; return is_member; } diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp index 9f323bc285..24e6b6c419 100644 --- a/src/hotkeys.cpp +++ b/src/hotkeys.cpp @@ -301,7 +301,9 @@ void HotkeyList::Save(IniFile *ini) const int HotkeyList::CheckMatch(uint16 keycode, bool global_only) const { for (const Hotkey *list = this->items; list->name != NULL; ++list) { - if (list->keycodes.Contains(keycode | WKC_GLOBAL_HOTKEY) || (!global_only && list->keycodes.Contains(keycode))) { + auto begin = list->keycodes.begin(); + auto end = list->keycodes.end(); + if (std::find(begin, end, keycode | WKC_GLOBAL_HOTKEY) != end || (!global_only && std::find(begin, end, keycode) != end)) { return list->num; } } diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 8c038796f0..54798f4b76 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -794,10 +794,9 @@ void ClientNetworkContentSocketHandler::SendReceive() void ClientNetworkContentSocketHandler::DownloadContentInfo(ContentID cid) { /* When we tried to download it already, don't try again */ - if (this->requested.Contains(cid)) return; + if (std::find(this->requested.begin(), this->requested.end(), cid) != this->requested.end()) return; - *this->requested.Append() = cid; - assert(this->requested.Contains(cid)); + this->requested.push_back(cid); this->RequestContentList(1, &cid); } diff --git a/src/rail.cpp b/src/rail.cpp index 8bd7aa5181..c97dfb53c2 100644 --- a/src/rail.cpp +++ b/src/rail.cpp @@ -304,7 +304,7 @@ RailType GetRailTypeByLabel(RailTypeLabel label, bool allow_alternate_labels) /* Test if any rail type defines the label as an alternate. */ for (RailType r = RAILTYPE_BEGIN; r != RAILTYPE_END; r++) { const RailtypeInfo *rti = GetRailTypeInfo(r); - if (rti->alternate_labels.Contains(label)) return r; + if (std::find(rti->alternate_labels.begin(), rti->alternate_labels.end(), label) != rti->alternate_labels.end()) return r; } } diff --git a/src/station_gui.cpp b/src/station_gui.cpp index fddfe780d5..36a58e62eb 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -2150,7 +2150,7 @@ static bool AddNearbyStation(TileIndex tile, void *user_data) if (!T::IsValidID(sid)) return false; T *st = T::Get(sid); - if (st->owner != _local_company || _stations_nearby_list.Contains(sid)) return false; + if (st->owner != _local_company || std::find(_stations_nearby_list.begin(), _stations_nearby_list.end(), sid) != _stations_nearby_list.end()) return false; if (st->rect.BeforeAddRect(ctx->tile, ctx->w, ctx->h, StationRect::ADD_TEST).Succeeded()) { *_stations_nearby_list.Append() = sid; diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index ccc9446a02..636aadb499 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -355,7 +355,7 @@ static CommandCost RefitVehicle(Vehicle *v, bool only_this, uint8 num_vehicles, /* Reset actual_subtype for every new vehicle */ if (!v->IsArticulatedPart()) actual_subtype = new_subtype; - if (v->type == VEH_TRAIN && !vehicles_to_refit.Contains(v->index) && !only_this) continue; + if (v->type == VEH_TRAIN && std::find(vehicles_to_refit.begin(), vehicles_to_refit.end(), v->index) == vehicles_to_refit.end() && !only_this) continue; const Engine *e = v->GetEngine(); if (!e->CanCarryCargo()) continue; diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 6dd4bef336..4a42d746d8 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -267,7 +267,7 @@ byte GetBestFittingSubType(Vehicle *v_from, Vehicle *v_for, CargoID dest_cargo_t StringID subtype = GetCargoSubtypeText(v); if (subtype == STR_EMPTY) break; - if (!subtypes.Contains(subtype)) continue; + if (std::find(subtypes.begin(), subtypes.end(), subtype) == subtypes.end()) continue; /* We found something matching. */ ret_refit_cyc = refit_cyc; @@ -414,7 +414,7 @@ struct RefitWindow : public Window { GetVehicleSet(vehicles_to_refit, Vehicle::Get(this->selected_vehicle), this->num_vehicles); do { - if (v->type == VEH_TRAIN && !vehicles_to_refit.Contains(v->index)) continue; + if (v->type == VEH_TRAIN && std::find(vehicles_to_refit.begin(), vehicles_to_refit.end(), v->index) == vehicles_to_refit.end()) continue; const Engine *e = v->GetEngine(); CargoTypes cmask = e->info.refit_mask; byte callback_mask = e->info.callback_mask; @@ -747,14 +747,15 @@ struct RefitWindow : public Window { for (Train *u = Train::From(v); u != NULL; u = u->Next()) { /* Start checking. */ - if (vehicles_to_refit.Contains(u->index) && left == INT32_MIN) { + const bool contained = std::find(vehicles_to_refit.begin(), vehicles_to_refit.end(), u->index) != vehicles_to_refit.end(); + if (contained && left == INT32_MIN) { left = x - this->hscroll->GetPosition() + r.left + this->vehicle_margin; width = 0; } /* Draw a selection. */ - if ((!vehicles_to_refit.Contains(u->index) || u->Next() == NULL) && left != INT32_MIN) { - if (u->Next() == NULL && vehicles_to_refit.Contains(u->index)) { + if ((!contained || u->Next() == NULL) && left != INT32_MIN) { + if (u->Next() == NULL && contained) { int current_width = u->GetDisplayImageWidth(); width += current_width; x += current_width; From bc7dcaffca553b227fe895dc185e657d110c5ffe Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Tue, 25 Sep 2018 20:44:39 +0100 Subject: [PATCH 557/622] Codechange: Removed SmallVector::Assign() --- src/core/smallvec_type.hpp | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 9df015ad80..81b9cf7ee4 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -60,23 +60,12 @@ public: template SmallVector &operator=(const SmallVector &other) { - this->Assign(other); + std::vector::operator=(other); return *this; } ~SmallVector() = default; - /** - * Assign items from other vector. - */ - template - inline void Assign(const SmallVector &other) - { - if ((const void *)&other == (void *)this) return; - - std::vector::operator=(other); - } - /** * Append an item and return it. * @param to_add the number of items to append From aa7ca7fe64af51c2cd2400e3dec477dfbddadae3 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Tue, 25 Sep 2018 21:01:56 +0100 Subject: [PATCH 558/622] Codechange: Replaced SmallVector::Get(n) non-const with std::vector::data() + n --- src/console_cmds.cpp | 2 +- src/core/smallvec_type.hpp | 13 ------------- src/engine_gui.cpp | 2 +- src/fios.h | 2 +- src/linkgraph/linkgraph.cpp | 2 +- src/newgrf.cpp | 2 +- src/newgrf_config.cpp | 4 ++-- src/station_gui.cpp | 2 +- src/texteff.cpp | 4 ++-- 9 files changed, 10 insertions(+), 23 deletions(-) diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index a4a6fccd17..85b2ddbb19 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -566,7 +566,7 @@ DEF_CONSOLE_CMD(ConUnBan) seprintf(msg, lastof(msg), "Unbanned %s", _network_ban_list[index]); IConsolePrint(CC_DEFAULT, msg); free(_network_ban_list[index]); - _network_ban_list.Erase(_network_ban_list.Get(index)); + _network_ban_list.erase(_network_ban_list.begin() + index); } else { IConsolePrint(CC_DEFAULT, "Invalid list index or IP not in ban-list."); IConsolePrint(CC_DEFAULT, "For a list of banned IP's, see the command 'banlist'"); diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 81b9cf7ee4..a682697b38 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -180,19 +180,6 @@ public: assert(index <= std::vector::size()); return this->Begin() + index; } - - /** - * Get the pointer to item "number" - * - * @param index the position of the item - * @return the pointer to the item - */ - inline T *Get(uint index) - { - /* Allow access to the 'first invalid' item */ - assert(index <= std::vector::size()); - return this->Begin() + index; - } }; diff --git a/src/engine_gui.cpp b/src/engine_gui.cpp index c2a258f180..caf264e3d1 100644 --- a/src/engine_gui.cpp +++ b/src/engine_gui.cpp @@ -344,6 +344,6 @@ void EngList_SortPartial(GUIEngineList *el, EngList_SortTypeFunction compare, ui if (num_items < 2) return; assert(begin < el->size()); assert(begin + num_items <= el->size()); - QSortT(el->Get(begin), num_items, compare); + QSortT(el->data() + begin, num_items, compare); } diff --git a/src/fios.h b/src/fios.h index 71a6cff175..0fe6fcc062 100644 --- a/src/fios.h +++ b/src/fios.h @@ -165,7 +165,7 @@ public: */ inline FiosItem *Get(uint index) { - return this->files.Get(index); + return this->files.data() + index; } inline const FiosItem &operator[](uint index) const diff --git a/src/linkgraph/linkgraph.cpp b/src/linkgraph/linkgraph.cpp index eee7ac61fd..532792e7c3 100644 --- a/src/linkgraph/linkgraph.cpp +++ b/src/linkgraph/linkgraph.cpp @@ -139,7 +139,7 @@ void LinkGraph::RemoveNode(NodeID id) node_edges[id] = node_edges[last_node]; } Station::Get(this->nodes[last_node].station)->goods[this->cargo].node = id; - this->nodes.Erase(this->nodes.Get(id)); + this->nodes.erase(this->nodes.begin() + id); this->edges.EraseColumn(id); /* Not doing EraseRow here, as having the extra invalid row doesn't hurt * and removing it would trigger a lot of memmove. The data has already diff --git a/src/newgrf.cpp b/src/newgrf.cpp index f80e79f7db..6ff9914413 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -637,7 +637,7 @@ static Engine *GetNewEngine(const GRFFile *file, VehicleType type, uint16 intern /* Reserve the engine slot */ if (!static_access) { - EngineIDMapping *eid = _engine_mngr.Get(engine); + EngineIDMapping *eid = _engine_mngr.data() + engine; eid->grfid = scope_grfid; // Note: this is INVALID_GRFID if dynamic_engines is disabled, so no reservation } diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index fa84c947a4..730207c6b0 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -262,7 +262,7 @@ GRFParameterInfo::GRFParameterInfo(GRFParameterInfo &info) : complete_labels(info.complete_labels) { for (uint i = 0; i < info.value_names.size(); i++) { - SmallPair *data = info.value_names.Get(i); + SmallPair *data = info.value_names.data() + i; this->value_names.Insert(data->first, DuplicateGRFText(data->second)); } } @@ -273,7 +273,7 @@ GRFParameterInfo::~GRFParameterInfo() CleanUpGRFText(this->name); CleanUpGRFText(this->desc); for (uint i = 0; i < this->value_names.size(); i++) { - SmallPair *data = this->value_names.Get(i); + SmallPair *data = this->value_names.data() + i; CleanUpGRFText(data->second); } } diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 36a58e62eb..157d571afe 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -2133,7 +2133,7 @@ static bool AddNearbyStation(TileIndex tile, void *user_data) /* First check if there were deleted stations here */ for (uint i = 0; i < _deleted_stations_nearby.size(); i++) { - TileAndStation *ts = _deleted_stations_nearby.Get(i); + TileAndStation *ts = _deleted_stations_nearby.data() + i; if (ts->tile == tile) { *_stations_nearby_list.Append() = _deleted_stations_nearby[i].station; _deleted_stations_nearby.Erase(ts); diff --git a/src/texteff.cpp b/src/texteff.cpp index 41907e14d4..92c2017047 100644 --- a/src/texteff.cpp +++ b/src/texteff.cpp @@ -50,7 +50,7 @@ TextEffectID AddTextEffect(StringID msg, int center, int y, uint8 duration, Text } if (i == _text_effects.size()) _text_effects.Append(); - TextEffect *te = _text_effects.Get(i); + TextEffect *te = _text_effects.data() + i; /* Start defining this object */ te->string_id = msg; @@ -69,7 +69,7 @@ TextEffectID AddTextEffect(StringID msg, int center, int y, uint8 duration, Text void UpdateTextEffect(TextEffectID te_id, StringID msg) { /* Update details */ - TextEffect *te = _text_effects.Get(te_id); + TextEffect *te = _text_effects.data() + te_id; if (msg == te->string_id && GetDParam(0) == te->params_1) return; te->string_id = msg; te->params_1 = GetDParam(0); From 097328c3d73520834b4ef801945c4f57f9eca0cd Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Tue, 25 Sep 2018 21:20:24 +0100 Subject: [PATCH 559/622] Codechange: Replaced SmallVector::Get() const with std alternatives --- src/bridge_gui.cpp | 14 +++++++------- src/core/smallvec_type.hpp | 13 ------------- src/fios.h | 2 +- src/gfx_layout.cpp | 4 ++-- src/network/network_content.h | 2 +- src/network/network_content_gui.cpp | 6 +++--- src/newgrf_engine.cpp | 12 ++++++------ src/openttd.cpp | 4 ++-- src/os/macosx/string_osx.cpp | 2 +- src/os/windows/string_uniscribe.cpp | 2 +- src/viewport.cpp | 2 +- 11 files changed, 25 insertions(+), 38 deletions(-) diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index 0b4d0d619e..bbb54551e9 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -113,11 +113,11 @@ private: void BuildBridge(uint8 i) { switch ((TransportType)(this->type >> 15)) { - case TRANSPORT_RAIL: _last_railbridge_type = this->bridges->Get(i)->index; break; - case TRANSPORT_ROAD: _last_roadbridge_type = this->bridges->Get(i)->index; break; + case TRANSPORT_RAIL: _last_railbridge_type = this->bridges->at(i).index; break; + case TRANSPORT_ROAD: _last_roadbridge_type = this->bridges->at(i).index; break; default: break; } - DoCommandP(this->end_tile, this->start_tile, this->type | this->bridges->Get(i)->index, + DoCommandP(this->end_tile, this->start_tile, this->type | this->bridges->at(i).index, CMD_BUILD_BRIDGE | CMD_MSG(STR_ERROR_CAN_T_BUILD_BRIDGE_HERE), CcBuildBridge); } @@ -187,10 +187,10 @@ public: Dimension sprite_dim = {0, 0}; // Biggest bridge sprite dimension Dimension text_dim = {0, 0}; // Biggest text dimension for (int i = 0; i < (int)this->bridges->size(); i++) { - const BridgeSpec *b = this->bridges->Get(i)->spec; + const BridgeSpec *b = this->bridges->at(i).spec; sprite_dim = maxdim(sprite_dim, GetSpriteSize(b->sprite)); - SetDParam(2, this->bridges->Get(i)->cost); + SetDParam(2, this->bridges->at(i).cost); SetDParam(1, b->speed); SetDParam(0, b->material); text_dim = maxdim(text_dim, GetStringBoundingBox(_game_mode == GM_EDITOR ? STR_SELECT_BRIDGE_SCENEDIT_INFO : STR_SELECT_BRIDGE_INFO)); @@ -227,9 +227,9 @@ public: case WID_BBS_BRIDGE_LIST: { uint y = r.top; for (int i = this->vscroll->GetPosition(); this->vscroll->IsVisible(i) && i < (int)this->bridges->size(); i++) { - const BridgeSpec *b = this->bridges->Get(i)->spec; + const BridgeSpec *b = this->bridges->at(i).spec; - SetDParam(2, this->bridges->Get(i)->cost); + SetDParam(2, this->bridges->at(i).cost); SetDParam(1, b->speed); SetDParam(0, b->material); diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index a682697b38..1ec336b730 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -167,19 +167,6 @@ public: { return std::vector::data() + std::vector::size(); } - - /** - * Get the pointer to item "number" (const) - * - * @param index the position of the item - * @return the pointer to the item - */ - inline const T *Get(uint index) const - { - /* Allow access to the 'first invalid' item */ - assert(index <= std::vector::size()); - return this->Begin() + index; - } }; diff --git a/src/fios.h b/src/fios.h index 0fe6fcc062..85b6b0dd60 100644 --- a/src/fios.h +++ b/src/fios.h @@ -156,7 +156,7 @@ public: */ inline const FiosItem *Get(uint index) const { - return this->files.Get(index); + return this->files.data() + index; } /** diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index 7c4407e3a3..786e074080 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -158,7 +158,7 @@ public: int GetLeading() const { return l->getLeading(); } int GetWidth() const { return l->getWidth(); } int CountRuns() const { return l->countRuns(); } - const ParagraphLayouter::VisualRun *GetVisualRun(int run) const { return *this->Get(run); } + const ParagraphLayouter::VisualRun *GetVisualRun(int run) const { return this->at(run); } int GetInternalCharLength(WChar c) const { @@ -458,7 +458,7 @@ int FallbackParagraphLayout::FallbackLine::CountRuns() const */ const ParagraphLayouter::VisualRun *FallbackParagraphLayout::FallbackLine::GetVisualRun(int run) const { - return *this->Get(run); + return this->at(run); } /** diff --git a/src/network/network_content.h b/src/network/network_content.h index a81cc6a6d4..7cce7fc0a0 100644 --- a/src/network/network_content.h +++ b/src/network/network_content.h @@ -133,7 +133,7 @@ public: /** Get the begin of the content inf iterator. */ ConstContentIterator Begin() const { return this->infos.Begin(); } /** Get the nth position of the content inf iterator. */ - ConstContentIterator Get(uint32 index) const { return this->infos.Get(index); } + ConstContentIterator Get(uint32 index) const { return this->infos.data() + index; } /** Get the end of the content inf iterator. */ ConstContentIterator End() const { return this->infos.End(); } diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 51215935ca..109e63c95b 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -641,7 +641,7 @@ public: int text_y_offset = WD_MATRIX_TOP + (line_height - FONT_HEIGHT_NORMAL) / 2; uint y = r.top; int cnt = 0; - for (ConstContentIterator iter = this->content.Get(this->vscroll->GetPosition()); iter != this->content.End() && cnt < this->vscroll->GetCapacity(); iter++, cnt++) { + for (ConstContentIterator iter = this->content.data() + this->vscroll->GetPosition(); iter != this->content.End() && cnt < this->vscroll->GetCapacity(); iter++, cnt++) { const ContentInfo *ci = *iter; if (ci == this->selected) GfxFillRect(r.left + 1, y + 1, r.right - 1, y + this->resize.step_height - 1, PC_GREY); @@ -793,7 +793,7 @@ public: uint id_v = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_NCL_MATRIX); if (id_v >= this->content.size()) return; // click out of bounds - this->selected = *this->content.Get(id_v); + this->selected = this->content[id_v]; this->list_pos = id_v; const NWidgetBase *checkbox = this->GetWidget(WID_NCL_CHECKBOX); @@ -923,7 +923,7 @@ public: return ES_HANDLED; } - this->selected = *this->content.Get(this->list_pos); + this->selected = this->content[this->list_pos]; if (this->UpdateFilterState()) { this->content.ForceRebuild(); diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index ce7cfdf24e..07e0f8af77 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -1209,17 +1209,17 @@ void AlterVehicleListOrder(EngineID engine, uint target) */ static int CDECL EnginePreSort(const EngineID *a, const EngineID *b) { - const EngineIDMapping *id_a = _engine_mngr.Get(*a); - const EngineIDMapping *id_b = _engine_mngr.Get(*b); + const EngineIDMapping &id_a = _engine_mngr.at(*a); + const EngineIDMapping &id_b = _engine_mngr.at(*b); /* 1. Sort by engine type */ - if (id_a->type != id_b->type) return (int)id_a->type - (int)id_b->type; + if (id_a.type != id_b.type) return (int)id_a.type - (int)id_b.type; /* 2. Sort by scope-GRFID */ - if (id_a->grfid != id_b->grfid) return id_a->grfid < id_b->grfid ? -1 : 1; + if (id_a.grfid != id_b.grfid) return id_a.grfid < id_b.grfid ? -1 : 1; /* 3. Sort by local ID */ - return (int)id_a->internal_id - (int)id_b->internal_id; + return (int)id_a.internal_id - (int)id_b.internal_id; } /** @@ -1241,7 +1241,7 @@ void CommitVehicleListOrderChanges() EngineID source = it->engine; uint local_target = it->target; - const EngineIDMapping *id_source = _engine_mngr.Get(source); + const EngineIDMapping *id_source = _engine_mngr.data() + source; if (id_source->internal_id == local_target) continue; EngineID target = _engine_mngr.GetID(id_source->type, local_target, id_source->grfid); diff --git a/src/openttd.cpp b/src/openttd.cpp index b78084145d..5478ec5a2c 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1186,7 +1186,7 @@ static void CheckCaches() uint i = 0; FOR_ALL_TOWNS(t) { - if (MemCmpT(old_town_caches.Get(i), &t->cache) != 0) { + if (MemCmpT(old_town_caches.data() + i, &t->cache) != 0) { DEBUG(desync, 2, "town cache mismatch: town %i", (int)t->index); } i++; @@ -1202,7 +1202,7 @@ static void CheckCaches() i = 0; FOR_ALL_COMPANIES(c) { - if (MemCmpT(old_infrastructure.Get(i), &c->infrastructure) != 0) { + if (MemCmpT(old_infrastructure.data() + i, &c->infrastructure) != 0) { DEBUG(desync, 2, "infrastructure cache mismatch: company %i", (int)c->index); } i++; diff --git a/src/os/macosx/string_osx.cpp b/src/os/macosx/string_osx.cpp index 4abf0037ca..261885187b 100644 --- a/src/os/macosx/string_osx.cpp +++ b/src/os/macosx/string_osx.cpp @@ -86,7 +86,7 @@ public: virtual int GetLeading() const; virtual int GetWidth() const; virtual int CountRuns() const { return this->size(); } - virtual const VisualRun *GetVisualRun(int run) const { return *this->Get(run); } + virtual const VisualRun *GetVisualRun(int run) const { return this->at(run); } int GetInternalCharLength(WChar c) const { diff --git a/src/os/windows/string_uniscribe.cpp b/src/os/windows/string_uniscribe.cpp index 8877d36a65..f1c62c7d35 100644 --- a/src/os/windows/string_uniscribe.cpp +++ b/src/os/windows/string_uniscribe.cpp @@ -111,7 +111,7 @@ public: virtual int GetLeading() const; virtual int GetWidth() const; virtual int CountRuns() const { return this->size(); } - virtual const VisualRun *GetVisualRun(int run) const { return *this->Get(run); } + virtual const VisualRun *GetVisualRun(int run) const { return this->at(run); } int GetInternalCharLength(WChar c) const { diff --git a/src/viewport.cpp b/src/viewport.cpp index de0da81b23..5d6f58268f 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1468,7 +1468,7 @@ static void ViewportDrawParentSprites(const ParentSpriteToSortVector *psd, const int child_idx = ps->first_child; while (child_idx >= 0) { - const ChildScreenSpriteToDraw *cs = csstdv->Get(child_idx); + const ChildScreenSpriteToDraw *cs = csstdv->data() + child_idx; child_idx = cs->next; DrawSpriteViewport(cs->image, cs->pal, ps->left + cs->x, ps->top + cs->y, cs->sub); } From ca2f33c6d025c0c45fb4bc472493290445312de5 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Tue, 25 Sep 2018 22:01:05 +0100 Subject: [PATCH 560/622] Codechange: Replaced SmallVector::Erase() with std::vector::erase() --- src/core/smallmap_type.hpp | 10 +++++----- src/core/smallvec_type.hpp | 12 ------------ src/network/core/tcp_connect.cpp | 8 ++++---- src/network/core/tcp_http.cpp | 4 ++-- src/newgrf_debug_gui.cpp | 2 +- src/sortlist_type.h | 9 ++++----- src/station_cmd.cpp | 8 ++++---- src/station_gui.cpp | 4 ++-- 8 files changed, 22 insertions(+), 35 deletions(-) diff --git a/src/core/smallmap_type.hpp b/src/core/smallmap_type.hpp index 44ace6b45b..0bd9bd2965 100644 --- a/src/core/smallmap_type.hpp +++ b/src/core/smallmap_type.hpp @@ -115,7 +115,8 @@ struct SmallMap : SmallVector, S> { inline void Erase(Pair *pair) { assert(pair >= this->Begin() && pair < this->End()); - SmallVector::Erase(pair); + auto distance = pair - std::vector::data(); + std::vector::erase(std::vector::begin() + distance); } /** @@ -126,11 +127,10 @@ struct SmallMap : SmallVector, S> { */ inline bool Erase(const T &key) { - Pair *pair = this->Find(key); - if (pair == this->End()) - return false; + auto pair = std::find(this->begin(), this->end(), key); + if (pair == this->end()) return false; - SmallVector::Erase(pair); + std::vector::erase(pair); return true; } diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 1ec336b730..b989d44c5d 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -103,18 +103,6 @@ public: return it == std::vector::end() ? -1 : it - std::vector::begin(); } - /** - * Removes given item from this vector - * @param item item to remove - * @note it has to be pointer to item in this map. It is overwritten by the last item. - */ - inline void Erase(T *item) - { - assert(item >= this->Begin() && item < this->End()); - *item = std::vector::back(); - std::vector::pop_back(); - } - /** * Tests whether a item is present in the vector, and appends it to the end if not. * The '!=' operator of T is used for comparison. diff --git a/src/network/core/tcp_connect.cpp b/src/network/core/tcp_connect.cpp index 95f9662cd6..470d97e682 100644 --- a/src/network/core/tcp_connect.cpp +++ b/src/network/core/tcp_connect.cpp @@ -66,22 +66,22 @@ void TCPConnecter::Connect() */ /* static */ void TCPConnecter::CheckCallbacks() { - for (TCPConnecter **iter = _tcp_connecters.Begin(); iter < _tcp_connecters.End(); /* nothing */) { + for (auto iter = _tcp_connecters.begin(); iter < _tcp_connecters.end(); /* nothing */) { TCPConnecter *cur = *iter; if ((cur->connected || cur->aborted) && cur->killed) { - _tcp_connecters.Erase(iter); + iter = _tcp_connecters.erase(iter); if (cur->sock != INVALID_SOCKET) closesocket(cur->sock); delete cur; continue; } if (cur->connected) { - _tcp_connecters.Erase(iter); + iter = _tcp_connecters.erase(iter); cur->OnConnect(cur->sock); delete cur; continue; } if (cur->aborted) { - _tcp_connecters.Erase(iter); + iter = _tcp_connecters.erase(iter); cur->OnFailure(); delete cur; continue; diff --git a/src/network/core/tcp_http.cpp b/src/network/core/tcp_http.cpp index d2ab0638c9..2d3e89b4e4 100644 --- a/src/network/core/tcp_http.cpp +++ b/src/network/core/tcp_http.cpp @@ -311,7 +311,7 @@ int NetworkHTTPSocketHandler::Receive() int n = select(FD_SETSIZE, &read_fd, NULL, NULL, &tv); if (n == -1) return; - for (NetworkHTTPSocketHandler **iter = _http_connections.Begin(); iter < _http_connections.End(); /* nothing */) { + for (auto iter = _http_connections.begin(); iter < _http_connections.end(); /* nothing */) { NetworkHTTPSocketHandler *cur = *iter; if (FD_ISSET(cur->sock, &read_fd)) { @@ -321,7 +321,7 @@ int NetworkHTTPSocketHandler::Receive() if (ret <= 0) { /* Then... the connection can be closed */ cur->CloseConnection(); - _http_connections.Erase(iter); + iter = _http_connections.erase(iter); delete cur; continue; } diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index ec1a91d7ba..a081243572 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -986,7 +986,7 @@ struct SpriteAlignerWindow : Window { case WID_SA_RESET_REL: /* Reset the starting offsets for the current sprite. */ - this->offs_start_map.Erase(this->current_sprite); + this->offs_start_map.erase(this->offs_start_map.begin() + this->current_sprite); this->SetDirty(); break; } diff --git a/src/sortlist_type.h b/src/sortlist_type.h index 74b6f37b35..23a5580180 100644 --- a/src/sortlist_type.h +++ b/src/sortlist_type.h @@ -337,13 +337,12 @@ public: if (!(this->flags & VL_FILTER)) return false; bool changed = false; - for (uint iter = 0; iter < std::vector::size();) { - T *item = &std::vector::operator[](iter); - if (!decide(item, filter_data)) { - this->Erase(item); + for (auto it = std::vector::begin(); it != std::vector::end(); /* Nothing */) { + if (!decide(&*it, filter_data)) { + it = std::vector::erase(it); changed = true; } else { - iter++; + it++; } } diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index f7e2a18249..2dee09fe80 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -3541,8 +3541,8 @@ void DeleteStaleLinks(Station *from) *(vehicles.Append()) = l->GetFirstSharedVehicle(); } - Vehicle **iter = vehicles.Begin(); - while (iter != vehicles.End()) { + auto iter = vehicles.begin(); + while (iter != vehicles.end()) { Vehicle *v = *iter; LinkRefresher::Run(v, false); // Don't allow merging. Otherwise lg might get deleted. @@ -3556,10 +3556,10 @@ void DeleteStaleLinks(Station *from) *iter = next_shared; ++iter; } else { - vehicles.Erase(iter); + iter = vehicles.erase(iter); } - if (iter == vehicles.End()) iter = vehicles.Begin(); + if (iter == vehicles.end()) iter = vehicles.begin(); } } diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 157d571afe..e1f5daa699 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -2133,10 +2133,10 @@ static bool AddNearbyStation(TileIndex tile, void *user_data) /* First check if there were deleted stations here */ for (uint i = 0; i < _deleted_stations_nearby.size(); i++) { - TileAndStation *ts = _deleted_stations_nearby.data() + i; + auto ts = _deleted_stations_nearby.begin() + i; if (ts->tile == tile) { *_stations_nearby_list.Append() = _deleted_stations_nearby[i].station; - _deleted_stations_nearby.Erase(ts); + _deleted_stations_nearby.erase(ts); i--; } } From a0f36a50e6324f570985f5010eb0543ec0673aeb Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Mon, 18 Feb 2019 22:39:06 +0000 Subject: [PATCH 561/622] Codechange: Replaced SmallVector::Append() with std::vector::[push|emplace]_back() --- src/ai/ai_gui.cpp | 2 +- src/airport_gui.cpp | 2 +- src/autoreplace_gui.cpp | 6 +- src/bridge_gui.cpp | 9 +-- src/build_vehicle_gui.cpp | 8 +-- src/company_gui.cpp | 10 ++-- src/core/pool_type.hpp | 2 +- src/core/smallmap_type.hpp | 11 ++-- src/core/smallvec_type.hpp | 30 ++++++---- src/date_gui.cpp | 6 +- src/engine.cpp | 11 ++-- src/fios.h | 3 +- src/game/game_text.cpp | 14 ++--- src/genworld_gui.cpp | 2 +- src/gfx_layout.cpp | 12 ++-- src/graph_gui.cpp | 2 +- src/group_gui.cpp | 6 +- src/hotkeys.cpp | 2 +- src/industry_gui.cpp | 58 ++++++++++--------- src/linkgraph/linkgraph.cpp | 2 +- src/music/midifile.cpp | 23 ++++---- src/network/core/host.cpp | 2 +- src/network/core/tcp_connect.cpp | 2 +- src/network/core/tcp_http.cpp | 2 +- src/network/core/udp.cpp | 6 +- src/network/network.cpp | 6 +- src/network/network_client.cpp | 2 +- src/network/network_content.cpp | 14 ++--- src/network/network_content_gui.cpp | 2 +- src/network/network_gui.cpp | 6 +- src/network/network_server.cpp | 2 +- src/newgrf.cpp | 80 +++++++++++++------------- src/newgrf_commons.cpp | 9 +-- src/newgrf_config.cpp | 8 +-- src/newgrf_engine.cpp | 6 +- src/newgrf_gui.cpp | 12 ++-- src/newgrf_sound.cpp | 2 +- src/object_cmd.cpp | 4 +- src/openttd.cpp | 6 +- src/order_gui.cpp | 2 +- src/os/macosx/string_osx.cpp | 2 +- src/rail_cmd.cpp | 4 +- src/rail_gui.cpp | 4 +- src/saveload/afterload.cpp | 10 ++-- src/saveload/animated_tile_sl.cpp | 4 +- src/saveload/engine_sl.cpp | 3 +- src/saveload/game_sl.cpp | 4 +- src/saveload/labelmaps_sl.cpp | 4 +- src/saveload/linkgraph_sl.cpp | 4 +- src/saveload/oldloader_sl.cpp | 2 +- src/saveload/saveload.cpp | 2 +- src/saveload/waypoint_sl.cpp | 3 +- src/script/squirrel_helper.hpp | 6 +- src/settings.cpp | 4 +- src/settings_gui.cpp | 38 ++++++------- src/settingsgen/settingsgen.cpp | 7 ++- src/signs_gui.cpp | 2 +- src/station_cmd.cpp | 6 +- src/station_gui.cpp | 12 ++-- src/story_gui.cpp | 6 +- src/strgen/strgen_base.cpp | 22 ++++---- src/string.cpp | 18 +++--- src/stringfilter.cpp | 5 +- src/strings.cpp | 2 +- src/texteff.cpp | 18 +++--- src/textfile_gui.cpp | 4 +- src/timetable_cmd.cpp | 4 +- src/toolbar_gui.cpp | 66 +++++++++++----------- src/town_gui.cpp | 2 +- src/train_cmd.cpp | 2 +- src/train_gui.cpp | 3 +- src/tunnelbridge_cmd.cpp | 5 +- src/vehicle.cpp | 4 +- src/vehicle_cmd.cpp | 6 +- src/vehicle_gui.cpp | 15 ++--- src/vehiclelist.cpp | 14 ++--- src/viewport.cpp | 88 +++++++++++++++-------------- src/widgets/dropdown.cpp | 2 +- src/window.cpp | 4 +- 79 files changed, 402 insertions(+), 403 deletions(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 0609696e12..8b00de988e 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -481,7 +481,7 @@ struct AISettingsWindow : public Window { DropDownList *list = new DropDownList(); for (int i = config_item.min_value; i <= config_item.max_value; i++) { - *list->Append() = new DropDownListCharStringItem(config_item.labels->Find(i)->second, i, false); + list->push_back(new DropDownListCharStringItem(config_item.labels->Find(i)->second, i, false)); } ShowDropDownListAt(this, list, old_val, -1, wi_rect, COLOUR_ORANGE, true); diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index 353e080805..7e16717894 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -219,7 +219,7 @@ class BuildAirportWindow : public PickerWindowBase { DropDownList *list = new DropDownList(); for (uint i = 0; i < AirportClass::GetClassCount(); i++) { - *list->Append() = new DropDownListStringItem(AirportClass::Get((AirportClassID)i)->name, i, false); + list->push_back(new DropDownListStringItem(AirportClass::Get((AirportClassID)i)->name, i, false)); } return list; diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index 1286dc5a78..5b6976e674 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -140,7 +140,7 @@ class ReplaceVehicleWindow : public Window { if (!CheckAutoreplaceValidity(this->sel_engine[0], eid, _local_company)) continue; } - *list->Append() = eid; + list->push_back(eid); if (eid == this->sel_engine[side]) selected_engine = eid; // The selected engine is still in the list } this->sel_engine[side] = selected_engine; // update which engine we selected (the same or none, if it's not in the list anymore) @@ -468,8 +468,8 @@ public: case WID_RV_TRAIN_ENGINEWAGON_DROPDOWN: { DropDownList *list = new DropDownList(); - *list->Append() = new DropDownListStringItem(STR_REPLACE_ENGINES, 1, false); - *list->Append() = new DropDownListStringItem(STR_REPLACE_WAGONS, 0, false); + list->push_back(new DropDownListStringItem(STR_REPLACE_ENGINES, 1, false)); + list->push_back(new DropDownListStringItem(STR_REPLACE_WAGONS, 0, false)); ShowDropDownList(this, list, this->replace_engines ? 1 : 0, WID_RV_TRAIN_ENGINEWAGON_DROPDOWN); break; } diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index bbb54551e9..94b709c63c 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -416,12 +416,13 @@ void ShowBuildBridgeWindow(TileIndex start, TileIndex end, TransportType transpo for (BridgeType brd_type = 0; brd_type != MAX_BRIDGES; brd_type++) { if (CheckBridgeAvailability(brd_type, bridge_len).Succeeded()) { /* bridge is accepted, add to list */ - BuildBridgeData *item = bl->Append(); - item->index = brd_type; - item->spec = GetBridgeSpec(brd_type); + /*C++17: BuildBridgeData &item = */ bl->emplace_back(); + BuildBridgeData &item = bl->back(); + item.index = brd_type; + item.spec = GetBridgeSpec(brd_type); /* Add to terraforming & bulldozing costs the cost of the * bridge itself (not computed with DC_QUERY_COST) */ - item->cost = ret.GetCost() + (((int64)tot_bridgedata_len * _price[PR_BUILD_BRIDGE] * item->spec->price) >> 8) + infra_cost; + item.cost = ret.GetCost() + (((int64)tot_bridgedata_len * _price[PR_BUILD_BRIDGE] * item.spec->price) >> 8) + infra_cost; } } } diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index a118b1c995..c3d8743a2d 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1246,7 +1246,7 @@ struct BuildVehicleWindow : Window { /* Filter now! So num_engines and num_wagons is valid */ if (!FilterSingleEngine(eid)) continue; - *this->eng_list.Append() = eid; + this->eng_list.push_back(eid); if (rvi->railveh_type != RAILVEH_WAGON) { num_engines++; @@ -1284,7 +1284,7 @@ struct BuildVehicleWindow : Window { EngineID eid = e->index; if (!IsEngineBuildable(eid, VEH_ROAD, _local_company)) continue; if (!HasBit(this->filter.roadtypes, HasBit(EngInfo(eid)->misc_flags, EF_ROAD_TRAM) ? ROADTYPE_TRAM : ROADTYPE_ROAD)) continue; - *this->eng_list.Append() = eid; + this->eng_list.push_back(eid); if (eid == this->sel_engine) sel_id = eid; } @@ -1302,7 +1302,7 @@ struct BuildVehicleWindow : Window { if (!this->show_hidden_engines && e->IsHidden(_local_company)) continue; EngineID eid = e->index; if (!IsEngineBuildable(eid, VEH_SHIP, _local_company)) continue; - *this->eng_list.Append() = eid; + this->eng_list.push_back(eid); if (eid == this->sel_engine) sel_id = eid; } @@ -1330,7 +1330,7 @@ struct BuildVehicleWindow : Window { /* First VEH_END window_numbers are fake to allow a window open for all different types at once */ if (!this->listview_mode && !CanVehicleUseStation(eid, st)) continue; - *this->eng_list.Append() = eid; + this->eng_list.push_back(eid); if (eid == this->sel_engine) sel_id = eid; } diff --git a/src/company_gui.cpp b/src/company_gui.cpp index b34862f694..a705687b0c 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -606,10 +606,10 @@ private: if (default_livery != NULL) { /* Add COLOUR_END to put the colour out of range, but also allow us to show what the default is */ default_col = (primary ? default_livery->colour1 : default_livery->colour2) + COLOUR_END; - *list->Append() = new DropDownListColourItem(default_col, false); + list->push_back(new DropDownListColourItem(default_col, false)); } for (uint i = 0; i < lengthof(_colour_dropdown); i++) { - *list->Append() = new DropDownListColourItem(i, HasBit(used_colours, i)); + list->push_back(new DropDownListColourItem(i, HasBit(used_colours, i))); } byte sel = (default_livery == NULL || HasBit(livery->in_use, primary ? 0 : 1)) ? (primary ? livery->colour1 : livery->colour2) : default_col; @@ -642,8 +642,8 @@ private: { for (const Group **g = source->Begin(); g != source->End(); g++) { if ((*g)->parent != parent) continue; - *this->groups.Append() = *g; - *this->indents.Append() = indent; + this->groups.push_back(*g); + this->indents.push_back(indent); AddChildren(source, (*g)->index, indent + 1); } } @@ -662,7 +662,7 @@ private: const Group *g; FOR_ALL_GROUPS(g) { if (g->owner == owner && g->vehicle_type == vtype) { - *list.Append() = g; + list.push_back(g); } } diff --git a/src/core/pool_type.hpp b/src/core/pool_type.hpp index 4d20ed1abb..a6f7e4fe8b 100644 --- a/src/core/pool_type.hpp +++ b/src/core/pool_type.hpp @@ -50,7 +50,7 @@ struct PoolBase { */ PoolBase(PoolType pt) : type(pt) { - *PoolBase::GetPools()->Append() = this; + PoolBase::GetPools()->push_back(this); } virtual ~PoolBase(); diff --git a/src/core/smallmap_type.hpp b/src/core/smallmap_type.hpp index 0bd9bd2965..0917c5423c 100644 --- a/src/core/smallmap_type.hpp +++ b/src/core/smallmap_type.hpp @@ -143,9 +143,7 @@ struct SmallMap : SmallVector, S> { inline bool Insert(const T &key, const U &data) { if (this->Contains(key)) return false; - Pair *n = this->Append(); - n->first = key; - n->second = data; + std::vector::emplace_back(key, data); return true; } @@ -160,9 +158,10 @@ struct SmallMap : SmallVector, S> { for (uint i = 0; i < std::vector::size(); i++) { if (key == std::vector::operator[](i).first) return std::vector::operator[](i).second; } - Pair *n = this->Append(); - n->first = key; - return n->second; + /*C++17: Pair &n = */ std::vector::emplace_back(); + Pair &n = std::vector::back(); + n.first = key; + return n.second; } inline void SortByKey() diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index b989d44c5d..5961a96988 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -66,17 +66,6 @@ public: ~SmallVector() = default; - /** - * Append an item and return it. - * @param to_add the number of items to append - * @return pointer to newly allocated item - */ - inline T *Append(uint to_add = 1) - { - std::vector::resize(std::vector::size() + to_add); - return this->End() - to_add; - } - /** * Insert a new item at a specific position into the vector, moving all following items. * @param item Position at which the new item should be inserted @@ -112,7 +101,7 @@ public: inline bool Include(const T &item) { bool is_member = std::find(std::vector::begin(), std::vector::end(), item) != std::vector::end(); - if (!is_member) *this->Append() = item; + if (!is_member) std::vector::emplace_back(item); return is_member; } @@ -157,6 +146,23 @@ public: } }; +/** + * Helper function to extend a vector by more than one element + * Consider using std::back_inserter in new code + * + * @param vec A reference to the vector to be extended + * @param num The number of elements to default-construct + * + * @return Pointer to the first new element + */ +template +inline T* grow(std::vector& vec, std::size_t num) +{ + const std::size_t pos = vec.size(); + vec.resize(pos + num); + return vec.data() + pos; +} + /** * Simple vector template class, with automatic free. diff --git a/src/date_gui.cpp b/src/date_gui.cpp index 53e0cf7359..d55e7e2b34 100644 --- a/src/date_gui.cpp +++ b/src/date_gui.cpp @@ -75,14 +75,14 @@ struct SetDateWindow : Window { case WID_SD_DAY: for (uint i = 0; i < 31; i++) { - *list->Append() = new DropDownListStringItem(STR_DAY_NUMBER_1ST + i, i + 1, false); + list->push_back(new DropDownListStringItem(STR_DAY_NUMBER_1ST + i, i + 1, false)); } selected = this->date.day; break; case WID_SD_MONTH: for (uint i = 0; i < 12; i++) { - *list->Append() = new DropDownListStringItem(STR_MONTH_JAN + i, i, false); + list->push_back(new DropDownListStringItem(STR_MONTH_JAN + i, i, false)); } selected = this->date.month; break; @@ -91,7 +91,7 @@ struct SetDateWindow : Window { for (Year i = this->min_year; i <= this->max_year; i++) { DropDownListParamStringItem *item = new DropDownListParamStringItem(STR_JUST_INT, i, false); item->SetParam(0, i); - *list->Append() = item; + list->push_back(item); } selected = this->date.year; break; diff --git a/src/engine.cpp b/src/engine.cpp index b7be293afd..7412ec639c 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -490,11 +490,12 @@ void EngineOverrideManager::ResetToDefaultMapping() this->clear(); for (VehicleType type = VEH_TRAIN; type <= VEH_AIRCRAFT; type++) { for (uint internal_id = 0; internal_id < _engine_counts[type]; internal_id++) { - EngineIDMapping *eid = this->Append(); - eid->type = type; - eid->grfid = INVALID_GRFID; - eid->internal_id = internal_id; - eid->substitute_id = internal_id; + /*C++17: EngineIDMapping &eid = */ this->emplace_back(); + EngineIDMapping &eid = this->back(); + eid.type = type; + eid.grfid = INVALID_GRFID; + eid.internal_id = internal_id; + eid.substitute_id = internal_id; } } } diff --git a/src/fios.h b/src/fios.h index 85b6b0dd60..b1d260f841 100644 --- a/src/fios.h +++ b/src/fios.h @@ -120,7 +120,8 @@ public: */ inline FiosItem *Append() { - return this->files.Append(); + /*C++17: return &*/ this->files.emplace_back(); + return &this->files.back(); } /** diff --git a/src/game/game_text.cpp b/src/game/game_text.cpp index 781d0dabab..4d67b69553 100644 --- a/src/game/game_text.cpp +++ b/src/game/game_text.cpp @@ -115,7 +115,7 @@ LanguageStrings *ReadRawLanguageStrings(const char *file) while (i > 0 && (buffer[i - 1] == '\r' || buffer[i - 1] == '\n' || buffer[i - 1] == ' ')) i--; buffer[i] = '\0'; - *ret->lines.Append() = stredup(buffer, buffer + to_read - 1); + ret->lines.push_back(stredup(buffer, buffer + to_read - 1)); if (len > to_read) { to_read = 0; @@ -194,7 +194,7 @@ struct TranslationWriter : LanguageWriter { char *dest = MallocT(length + 1); memcpy(dest, buffer, length); dest[length] = '\0'; - *this->strings->Append() = dest; + this->strings->push_back(dest); } }; @@ -212,7 +212,7 @@ struct StringNameWriter : HeaderWriter { void WriteStringID(const char *name, int stringid) { - if (stringid == (int)this->strings->size()) *this->strings->Append() = stredup(name); + if (stringid == (int)this->strings->size()) this->strings->push_back(stredup(name)); } void Finalise(const StringData &data) @@ -246,7 +246,7 @@ public: { if (strcmp(filename, exclude) == 0) return true; - *gs->raw_strings.Append() = ReadRawLanguageStrings(filename); + gs->raw_strings.push_back(ReadRawLanguageStrings(filename)); return true; } }; @@ -269,7 +269,7 @@ GameStrings *LoadTranslations() GameStrings *gs = new GameStrings(); try { - *gs->raw_strings.Append() = ReadRawLanguageStrings(filename); + gs->raw_strings.push_back(ReadRawLanguageStrings(filename)); /* Scan for other language files */ LanguageScanner scanner(gs, filename); @@ -324,8 +324,8 @@ void GameStrings::Compile() translation_reader.ParseFile(); if (_errors != 0) throw std::exception(); - LanguageStrings *compiled = *this->compiled_strings.Append() = new LanguageStrings((*p)->language); - TranslationWriter writer(&compiled->lines); + this->compiled_strings.push_back(new LanguageStrings((*p)->language)); + TranslationWriter writer(&this->compiled_strings.back()->lines); writer.WriteLang(data); } } diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index 4631d02ee4..d4aad62211 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -289,7 +289,7 @@ static DropDownList *BuildMapsizeDropDown() for (uint i = MIN_MAP_SIZE_BITS; i <= MAX_MAP_SIZE_BITS; i++) { DropDownListParamStringItem *item = new DropDownListParamStringItem(STR_JUST_INT, i, false); item->SetParam(0, 1LL << i); - *list->Append() = item; + list->push_back(item); } return list; diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index 786e074080..ee0ba15332 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -150,7 +150,7 @@ public: ICULine(icu::ParagraphLayout::Line *l) : l(l) { for (int i = 0; i < l->countRuns(); i++) { - *this->Append() = new ICUVisualRun(l->getVisualRun(i)); + this->push_back(new ICUVisualRun(l->getVisualRun(i))); } } ~ICULine() { delete l; } @@ -498,7 +498,7 @@ const ParagraphLayouter::Line *FallbackParagraphLayout::NextLine(int max_width) if (*this->buffer == '\0') { /* Only a newline. */ this->buffer = NULL; - *l->Append() = new FallbackVisualRun(this->runs.Begin()->second, this->buffer, 0, 0); + l->push_back(new FallbackVisualRun(this->runs.Begin()->second, this->buffer, 0, 0)); return l; } @@ -527,7 +527,7 @@ const ParagraphLayouter::Line *FallbackParagraphLayout::NextLine(int max_width) if (this->buffer == next_run) { int w = l->GetWidth(); - *l->Append() = new FallbackVisualRun(iter->second, begin, this->buffer - begin, w); + l->push_back(new FallbackVisualRun(iter->second, begin, this->buffer - begin, w)); iter++; assert(iter != this->runs.End()); @@ -574,7 +574,7 @@ const ParagraphLayouter::Line *FallbackParagraphLayout::NextLine(int max_width) if (l->size() == 0 || last_char - begin != 0) { int w = l->GetWidth(); - *l->Append() = new FallbackVisualRun(iter->second, begin, last_char - begin, w); + l->push_back(new FallbackVisualRun(iter->second, begin, last_char - begin, w)); } return l; } @@ -720,7 +720,7 @@ Layouter::Layouter(const char *str, int maxw, TextColour colour, FontSize fontsi /* Copy all lines into a local cache so we can reuse them later on more easily. */ const ParagraphLayouter::Line *l; while ((l = line.layout->NextLine(maxw)) != NULL) { - *this->Append() = l; + this->push_back(l); } } while (c != '\0'); @@ -834,7 +834,7 @@ Font *Layouter::GetFont(FontSize size, TextColour colour) if (it != fonts[size].End()) return it->second; Font *f = new Font(size, colour); - *fonts[size].Append() = FontColourMap::Pair(colour, f); + fonts[size].emplace_back(colour, f); return f; } diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index 1acf7728cc..69bdb3b1fc 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -1140,7 +1140,7 @@ private: const Company *c; FOR_ALL_COMPANIES(c) { - *this->companies.Append() = c; + this->companies.push_back(c); } this->companies.shrink_to_fit(); diff --git a/src/group_gui.cpp b/src/group_gui.cpp index d64f9c51b8..eb7aac0b71 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -129,8 +129,8 @@ private: { for (const Group **g = source->Begin(); g != source->End(); g++) { if ((*g)->parent != parent) continue; - *this->groups.Append() = *g; - *this->indents.Append() = indent; + this->groups.push_back(*g); + this->indents.push_back(indent); AddChildren(source, (*g)->index, indent + 1); } } @@ -175,7 +175,7 @@ private: const Group *g; FOR_ALL_GROUPS(g) { if (g->owner == owner && g->vehicle_type == this->vli.vtype) { - *list.Append() = g; + list.push_back(g); } } diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp index 24e6b6c419..8bec7e400b 100644 --- a/src/hotkeys.cpp +++ b/src/hotkeys.cpp @@ -255,7 +255,7 @@ HotkeyList::HotkeyList(const char *ini_group, Hotkey *items, GlobalHotkeyHandler global_hotkey_handler(global_hotkey_handler), ini_group(ini_group), items(items) { if (_hotkey_lists == NULL) _hotkey_lists = new SmallVector(); - *_hotkey_lists->Append() = this; + _hotkey_lists->push_back(this); } HotkeyList::~HotkeyList() diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 32c62bfa3d..5bcc03bdb1 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1206,7 +1206,7 @@ protected: const Industry *i; FOR_ALL_INDUSTRIES(i) { - *this->industries.Append() = i; + this->industries.push_back(i); } this->industries.shrink_to_fit(); @@ -2415,12 +2415,13 @@ struct IndustryCargoesWindow : public Window { _displayed_industries.set(it); this->fields.clear(); - CargoesRow *row = this->fields.Append(); - row->columns[0].MakeHeader(STR_INDUSTRY_CARGOES_PRODUCERS); - row->columns[1].MakeEmpty(CFT_SMALL_EMPTY); - row->columns[2].MakeEmpty(CFT_SMALL_EMPTY); - row->columns[3].MakeEmpty(CFT_SMALL_EMPTY); - row->columns[4].MakeHeader(STR_INDUSTRY_CARGOES_CUSTOMERS); + /*C++17: CargoesRow &row = */ this->fields.emplace_back(); + CargoesRow &row = this->fields.back(); + row.columns[0].MakeHeader(STR_INDUSTRY_CARGOES_PRODUCERS); + row.columns[1].MakeEmpty(CFT_SMALL_EMPTY); + row.columns[2].MakeEmpty(CFT_SMALL_EMPTY); + row.columns[3].MakeEmpty(CFT_SMALL_EMPTY); + row.columns[4].MakeHeader(STR_INDUSTRY_CARGOES_CUSTOMERS); const IndustrySpec *central_sp = GetIndustrySpec(it); bool houses_supply = HousesCanSupply(central_sp->accepts_cargo, lengthof(central_sp->accepts_cargo)); @@ -2430,12 +2431,13 @@ struct IndustryCargoesWindow : public Window { int num_cust = CountMatchingAcceptingIndustries(central_sp->produced_cargo, lengthof(central_sp->produced_cargo)) + houses_accept; int num_indrows = max(3, max(num_supp, num_cust)); // One is needed for the 'it' industry, and 2 for the cargo labels. for (int i = 0; i < num_indrows; i++) { - CargoesRow *row = this->fields.Append(); - row->columns[0].MakeEmpty(CFT_EMPTY); - row->columns[1].MakeCargo(central_sp->accepts_cargo, lengthof(central_sp->accepts_cargo)); - row->columns[2].MakeEmpty(CFT_EMPTY); - row->columns[3].MakeCargo(central_sp->produced_cargo, lengthof(central_sp->produced_cargo)); - row->columns[4].MakeEmpty(CFT_EMPTY); + /*C++17: CargoesRow &row = */ this->fields.emplace_back(); + CargoesRow &row = this->fields.back(); + row.columns[0].MakeEmpty(CFT_EMPTY); + row.columns[1].MakeCargo(central_sp->accepts_cargo, lengthof(central_sp->accepts_cargo)); + row.columns[2].MakeEmpty(CFT_EMPTY); + row.columns[3].MakeCargo(central_sp->produced_cargo, lengthof(central_sp->produced_cargo)); + row.columns[4].MakeEmpty(CFT_EMPTY); } /* Add central industry. */ int central_row = 1 + num_indrows / 2; @@ -2493,12 +2495,13 @@ struct IndustryCargoesWindow : public Window { _displayed_industries.reset(); this->fields.clear(); - CargoesRow *row = this->fields.Append(); - row->columns[0].MakeHeader(STR_INDUSTRY_CARGOES_PRODUCERS); - row->columns[1].MakeEmpty(CFT_SMALL_EMPTY); - row->columns[2].MakeHeader(STR_INDUSTRY_CARGOES_CUSTOMERS); - row->columns[3].MakeEmpty(CFT_SMALL_EMPTY); - row->columns[4].MakeEmpty(CFT_SMALL_EMPTY); + /*C++17: CargoesRow &row = */ this->fields.emplace_back(); + CargoesRow &row = this->fields.back(); + row.columns[0].MakeHeader(STR_INDUSTRY_CARGOES_PRODUCERS); + row.columns[1].MakeEmpty(CFT_SMALL_EMPTY); + row.columns[2].MakeHeader(STR_INDUSTRY_CARGOES_CUSTOMERS); + row.columns[3].MakeEmpty(CFT_SMALL_EMPTY); + row.columns[4].MakeEmpty(CFT_SMALL_EMPTY); bool houses_supply = HousesCanSupply(&cid, 1); bool houses_accept = HousesCanAccept(&cid, 1); @@ -2506,12 +2509,13 @@ struct IndustryCargoesWindow : public Window { int num_cust = CountMatchingAcceptingIndustries(&cid, 1) + houses_accept; int num_indrows = max(num_supp, num_cust); for (int i = 0; i < num_indrows; i++) { - CargoesRow *row = this->fields.Append(); - row->columns[0].MakeEmpty(CFT_EMPTY); - row->columns[1].MakeCargo(&cid, 1); - row->columns[2].MakeEmpty(CFT_EMPTY); - row->columns[3].MakeEmpty(CFT_EMPTY); - row->columns[4].MakeEmpty(CFT_EMPTY); + /*C++17: CargoesRow &row = */ this->fields.emplace_back(); + CargoesRow &row = this->fields.back(); + row.columns[0].MakeEmpty(CFT_EMPTY); + row.columns[1].MakeCargo(&cid, 1); + row.columns[2].MakeEmpty(CFT_EMPTY); + row.columns[3].MakeEmpty(CFT_EMPTY); + row.columns[4].MakeEmpty(CFT_EMPTY); } this->fields[num_indrows].MakeCargoLabel(0, false); // Add cargo labels at the left bottom. @@ -2708,7 +2712,7 @@ struct IndustryCargoesWindow : public Window { DropDownList *lst = new DropDownList; const CargoSpec *cs; FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) { - *lst->Append() = new DropDownListStringItem(cs->name, cs->Index(), false); + lst->push_back(new DropDownListStringItem(cs->name, cs->Index(), false)); } if (lst->size() == 0) { delete lst; @@ -2725,7 +2729,7 @@ struct IndustryCargoesWindow : public Window { IndustryType ind = _sorted_industry_types[i]; const IndustrySpec *indsp = GetIndustrySpec(ind); if (!indsp->enabled) continue; - *lst->Append() = new DropDownListStringItem(indsp->name, ind, false); + lst->push_back(new DropDownListStringItem(indsp->name, ind, false)); } if (lst->size() == 0) { delete lst; diff --git a/src/linkgraph/linkgraph.cpp b/src/linkgraph/linkgraph.cpp index 532792e7c3..d8cbf9b50a 100644 --- a/src/linkgraph/linkgraph.cpp +++ b/src/linkgraph/linkgraph.cpp @@ -159,7 +159,7 @@ NodeID LinkGraph::AddNode(const Station *st) const GoodsEntry &good = st->goods[this->cargo]; NodeID new_node = this->Size(); - this->nodes.Append(); + this->nodes.emplace_back(); /* Avoid reducing the height of the matrix as that is expensive and we * most likely will increase it again later which is again expensive. */ this->edges.Resize(new_node + 1U, diff --git a/src/music/midifile.cpp b/src/music/midifile.cpp index fb3c187c05..82649679fa 100644 --- a/src/music/midifile.cpp +++ b/src/music/midifile.cpp @@ -21,7 +21,6 @@ #include "../console_func.h" #include "../console_internal.h" - /* SMF reader based on description at: http://www.somascape.org/midi/tech/mfile.html */ @@ -217,7 +216,7 @@ static bool ReadTrackChunk(FILE *file, MidiFile &target) case MIDIST_CONTROLLER: case MIDIST_PITCHBEND: /* 3 byte messages */ - data = block->data.Append(3); + data = grow(block->data, 3); data[0] = status; if (!chunk.ReadBuffer(&data[1], 2)) { return false; @@ -226,7 +225,7 @@ static bool ReadTrackChunk(FILE *file, MidiFile &target) case MIDIST_PROGCHG: case MIDIST_CHANPRESS: /* 2 byte messages */ - data = block->data.Append(2); + data = grow(block->data, 2); data[0] = status; if (!chunk.ReadByte(data[1])) { return false; @@ -267,7 +266,7 @@ static bool ReadTrackChunk(FILE *file, MidiFile &target) if (!chunk.ReadVariableLength(length)) { return false; } - byte *data = block->data.Append(length + 1); + byte *data = grow(block->data, length + 1); data[0] = 0xF0; if (!chunk.ReadBuffer(data + 1, length)) { return false; @@ -275,7 +274,7 @@ static bool ReadTrackChunk(FILE *file, MidiFile &target) if (data[length] != 0xF7) { /* Engage Casio weirdo mode - convert to normal sysex */ running_sysex = true; - *block->data.Append() = 0xF7; + block->data.push_back(0xF7); } else { running_sysex = false; } @@ -285,7 +284,7 @@ static bool ReadTrackChunk(FILE *file, MidiFile &target) if (!chunk.ReadVariableLength(length)) { return false; } - byte *data = block->data.Append(length); + byte *data = grow(block->data, length); if (!chunk.ReadBuffer(data, length)) { return false; } @@ -336,7 +335,7 @@ static bool FixupMidiData(MidiFile &target) merged_blocks.push_back(block); last_ticktime = block.ticktime; } else { - byte *datadest = merged_blocks.back().data.Append(block.data.size()); + byte *datadest = grow(merged_blocks.back().data, block.data.size()); memcpy(datadest, block.data.Begin(), block.data.size()); } } @@ -508,14 +507,14 @@ struct MpsMachine { static void AddMidiData(MidiFile::DataBlock &block, byte b1, byte b2) { - *block.data.Append() = b1; - *block.data.Append() = b2; + block.data.push_back(b1); + block.data.push_back(b2); } static void AddMidiData(MidiFile::DataBlock &block, byte b1, byte b2, byte b3) { - *block.data.Append() = b1; - *block.data.Append() = b2; - *block.data.Append() = b3; + block.data.push_back(b1); + block.data.push_back(b2); + block.data.push_back(b3); } /** diff --git a/src/network/core/host.cpp b/src/network/core/host.cpp index c0365742b0..1ea5389d4f 100644 --- a/src/network/core/host.cpp +++ b/src/network/core/host.cpp @@ -100,7 +100,7 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // GE if (ifa->ifa_broadaddr->sa_family != AF_INET) continue; NetworkAddress addr(ifa->ifa_broadaddr, sizeof(sockaddr)); - if (std::none_of(broadcast->begin(), broadcast->end(), [&addr](NetworkAddress const& elem) -> bool { return elem == addr; })) *broadcast->Append() = addr; + if (std::none_of(broadcast->begin(), broadcast->end(), [&addr](NetworkAddress const& elem) -> bool { return elem == addr; })) broadcast->push_back(addr); } freeifaddrs(ifap); } diff --git a/src/network/core/tcp_connect.cpp b/src/network/core/tcp_connect.cpp index 470d97e682..f3dc2cb9aa 100644 --- a/src/network/core/tcp_connect.cpp +++ b/src/network/core/tcp_connect.cpp @@ -32,7 +32,7 @@ TCPConnecter::TCPConnecter(const NetworkAddress &address) : sock(INVALID_SOCKET), address(address) { - *_tcp_connecters.Append() = this; + _tcp_connecters.push_back(this); if (!ThreadObject::New(TCPConnecter::ThreadEntry, this, &this->thread, "ottd:tcp")) { this->Connect(); } diff --git a/src/network/core/tcp_http.cpp b/src/network/core/tcp_http.cpp index 2d3e89b4e4..abec3fbc87 100644 --- a/src/network/core/tcp_http.cpp +++ b/src/network/core/tcp_http.cpp @@ -63,7 +63,7 @@ NetworkHTTPSocketHandler::NetworkHTTPSocketHandler(SOCKET s, return; } - *_http_connections.Append() = this; + _http_connections.push_back(this); } /** Free whatever needs to be freed. */ diff --git a/src/network/core/udp.cpp b/src/network/core/udp.cpp index db655c0cfa..7babf78d69 100644 --- a/src/network/core/udp.cpp +++ b/src/network/core/udp.cpp @@ -26,14 +26,14 @@ NetworkUDPSocketHandler::NetworkUDPSocketHandler(NetworkAddressList *bind) { if (bind != NULL) { for (NetworkAddress *addr = bind->Begin(); addr != bind->End(); addr++) { - *this->bind.Append() = *addr; + this->bind.push_back(*addr); } } else { /* As hostname NULL and port 0/NULL don't go well when * resolving it we need to add an address for each of * the address families we support. */ - *this->bind.Append() = NetworkAddress(NULL, 0, AF_INET); - *this->bind.Append() = NetworkAddress(NULL, 0, AF_INET6); + this->bind.emplace_back(nullptr, 0, AF_INET); + this->bind.emplace_back(nullptr, 0, AF_INET6); } } diff --git a/src/network/network.cpp b/src/network/network.cpp index 3780258bde..1ddd7478ce 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -633,12 +633,12 @@ void NetworkAddServer(const char *b) void GetBindAddresses(NetworkAddressList *addresses, uint16 port) { for (char **iter = _network_bind_list.Begin(); iter != _network_bind_list.End(); iter++) { - *addresses->Append() = NetworkAddress(*iter, port); + addresses->emplace_back(*iter, port); } /* No address, so bind to everything. */ if (addresses->size() == 0) { - *addresses->Append() = NetworkAddress("", port); + addresses->emplace_back("", port); } } @@ -650,7 +650,7 @@ void NetworkRebuildHostList() _network_host_list.Clear(); for (NetworkGameList *item = _network_game_list; item != NULL; item = item->next) { - if (item->manually) *_network_host_list.Append() = stredup(item->address.GetAddressAsString(false)); + if (item->manually) _network_host_list.push_back(stredup(item->address.GetAddressAsString(false))); } } diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index a99a5069ac..fff4dd328c 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -77,7 +77,7 @@ struct PacketReader : LoadFilter { /* Allocate a new chunk and add the remaining data. */ pbuf += to_write; to_write = in_packet - to_write; - this->buf = *this->blocks.Append() = CallocT(CHUNK); + this->blocks.push_back(this->buf = CallocT(CHUNK)); this->bufe = this->buf + CHUNK; memcpy(this->buf, pbuf, to_write); diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 54798f4b76..fe7905de89 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -165,7 +165,7 @@ bool ClientNetworkContentSocketHandler::Receive_SERVER_INFO(Packet *p) return true; } - *this->infos.Append() = ci; + this->infos.push_back(ci); /* Incoming data means that we might need to reconsider dependencies */ for (ContentIterator iter = this->infos.Begin(); iter != this->infos.End(); iter++) { @@ -278,7 +278,7 @@ void ClientNetworkContentSocketHandler::RequestContentList(ContentVector *cv, bo } } if (!found) { - *this->infos.Append() = ci; + this->infos.push_back(ci); } else { delete ci; } @@ -300,7 +300,7 @@ void ClientNetworkContentSocketHandler::DownloadSelectedContent(uint &files, uin const ContentInfo *ci = *iter; if (!ci->IsSelected() || ci->state == ContentInfo::ALREADY_HERE) continue; - *content.Append() = ci->id; + content.push_back(ci->id); bytes += ci->filesize; } @@ -579,11 +579,11 @@ void ClientNetworkContentSocketHandler::OnReceiveData(const char *data, size_t l if (this->http_response_index == -1) { if (data != NULL) { /* Append the rest of the response. */ - memcpy(this->http_response.Append((uint)length), data, length); + memcpy(grow(this->http_response, (uint)length), data, length); return; } else { /* Make sure the response is properly terminated. */ - *this->http_response.Append() = '\0'; + this->http_response.push_back('\0'); /* And prepare for receiving the rest of the data. */ this->http_response_index = 0; @@ -905,7 +905,7 @@ void ClientNetworkContentSocketHandler::ReverseLookupDependency(ConstContentVect for (uint i = 0; i < ci->dependency_count; i++) { if (ci->dependencies[i] == child->id) { - *parents.Append() = ci; + parents.push_back(ci); break; } } @@ -919,7 +919,7 @@ void ClientNetworkContentSocketHandler::ReverseLookupDependency(ConstContentVect */ void ClientNetworkContentSocketHandler::ReverseLookupTreeDependency(ConstContentVector &tree, const ContentInfo *child) const { - *tree.Append() = child; + tree.push_back(child); /* First find all direct parents. We can't use the "normal" iterator as * we are including stuff into the vector and as such the vector's data diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 109e63c95b..19c075258e 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -391,7 +391,7 @@ class NetworkContentListWindow : public Window, ContentCallback { for (ConstContentIterator iter = _network_content_client.Begin(); iter != _network_content_client.End(); iter++) { if ((*iter)->state == ContentInfo::DOES_NOT_EXIST) all_available = false; - *this->content.Append() = *iter; + this->content.push_back(*iter); } this->SetWidgetDisabledState(WID_NCL_SEARCH_EXTERNAL, this->auto_select && all_available); diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index e3c4555bf5..7b65f6b0c3 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -253,7 +253,7 @@ protected: this->servers.clear(); for (NetworkGameList *ngl = _network_game_list; ngl != NULL; ngl = ngl->next) { - *this->servers.Append() = ngl; + this->servers.push_back(ngl); } /* Apply the filter condition immediately, if a search string has been provided. */ @@ -1737,9 +1737,7 @@ struct NetworkClientListPopupWindow : Window { */ inline void AddAction(StringID name, ClientList_Action_Proc *proc) { - ClientListAction *action = this->actions.Append(); - action->name = name; - action->proc = proc; + this->actions.push_back({name, proc}); } NetworkClientListPopupWindow(WindowDesc *desc, int x, int y, ClientID client_id) : diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 67f4c6fd91..8a1e75d2f2 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -2101,7 +2101,7 @@ uint NetworkServerKickOrBanIP(const char *ip, bool ban) break; } } - if (!contains) *_network_ban_list.Append() = stredup(ip); + if (!contains) _network_ban_list.push_back(stredup(ip)); } uint n = 0; diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 6ff9914413..63296593dc 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -472,10 +472,7 @@ static StringIDMappingVector _string_to_grf_mapping; static void AddStringForMapping(StringID source, StringID *target) { *target = STR_UNDEFINED; - StringIDMapping *item = _string_to_grf_mapping.Append(); - item->grfid = _cur.grffile->grfid; - item->source = source; - item->target = target; + _string_to_grf_mapping.push_back({_cur.grffile->grfid, source, target}); } /** @@ -659,11 +656,12 @@ static Engine *GetNewEngine(const GRFFile *file, VehicleType type, uint16 intern /* Reserve the engine slot */ assert(_engine_mngr.size() == e->index); - EngineIDMapping *eid = _engine_mngr.Append(); - eid->type = type; - eid->grfid = scope_grfid; // Note: this is INVALID_GRFID if dynamic_engines is disabled, so no reservation - eid->internal_id = internal_id; - eid->substitute_id = min(internal_id, _engine_counts[type]); // substitute_id == _engine_counts[subtype] means "no substitute" + _engine_mngr.push_back({ + scope_grfid, // Note: this is INVALID_GRFID if dynamic_engines is disabled, so no reservation + internal_id, + {static_cast(type)}, + static_cast(min(internal_id, _engine_counts[type])) // substitute_id == _engine_counts[subtype] means "no substitute" + }); if (engine_pool_size != Engine::GetPoolSize()) { /* Resize temporary engine data ... */ @@ -1909,18 +1907,19 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte tmp_layout.clear(); for (;;) { /* no relative bounding box support */ - DrawTileSeqStruct *dtss = tmp_layout.Append(); - MemSetT(dtss, 0); + /*C++17: DrawTileSeqStruct &dtss = */ tmp_layout.emplace_back(); + DrawTileSeqStruct &dtss = tmp_layout.back(); + MemSetT(&dtss, 0); - dtss->delta_x = buf->ReadByte(); - if (dtss->IsTerminator()) break; - dtss->delta_y = buf->ReadByte(); - dtss->delta_z = buf->ReadByte(); - dtss->size_x = buf->ReadByte(); - dtss->size_y = buf->ReadByte(); - dtss->size_z = buf->ReadByte(); + dtss.delta_x = buf->ReadByte(); + if (dtss.IsTerminator()) break; + dtss.delta_y = buf->ReadByte(); + dtss.delta_z = buf->ReadByte(); + dtss.size_x = buf->ReadByte(); + dtss.size_y = buf->ReadByte(); + dtss.size_z = buf->ReadByte(); - ReadSpriteLayoutSprite(buf, false, true, false, GSF_STATIONS, &dtss->image); + ReadSpriteLayoutSprite(buf, false, true, false, GSF_STATIONS, &dtss.image); /* On error, bail out immediately. Temporary GRF data was already freed */ if (_cur.skip_sprites < 0) return CIR_DISABLED; } @@ -2594,7 +2593,7 @@ static ChangeInfoResult LoadTranslationTable(uint gvid, int numinfo, ByteReader translation_table.clear(); for (int i = 0; i < numinfo; i++) { uint32 item = buf->ReadDWord(); - *translation_table.Append() = BSWAP32(item); + translation_table.push_back(BSWAP32(item)); } return CIR_SUCCESS; @@ -2799,14 +2798,14 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By if (map.openttd_id >= MAX_NUM_GENDERS) { grfmsg(1, "GlobalVarChangeInfo: Gender name %s is not known, ignoring", name); } else { - *_cur.grffile->language_map[curidx].gender_map.Append() = map; + _cur.grffile->language_map[curidx].gender_map.push_back(map); } } else { map.openttd_id = lang->GetCaseIndex(name); if (map.openttd_id >= MAX_NUM_CASES) { grfmsg(1, "GlobalVarChangeInfo: Case name %s is not known, ignoring", name); } else { - *_cur.grffile->language_map[curidx].case_map.Append() = map; + _cur.grffile->language_map[curidx].case_map.push_back(map); } } newgrf_id = buf->ReadByte(); @@ -4335,7 +4334,7 @@ static ChangeInfoResult RailTypeReserveInfo(uint id, int numinfo, int prop, Byte if (_cur.grffile->railtype_map[id + i] != INVALID_RAILTYPE) { int n = buf->ReadByte(); for (int j = 0; j != n; j++) { - *_railtypes[_cur.grffile->railtype_map[id + i]].alternate_labels.Append() = BSWAP32(buf->ReadDWord()); + _railtypes[_cur.grffile->railtype_map[id + i]].alternate_labels.push_back(BSWAP32(buf->ReadDWord())); } break; } @@ -4796,29 +4795,30 @@ static void NewSpriteGroup(ByteReader *buf) /* Loop through the var adjusts. Unfortunately we don't know how many we have * from the outset, so we shall have to keep reallocing. */ do { - DeterministicSpriteGroupAdjust *adjust = adjusts.Append(); + /*C++17: DeterministicSpriteGroupAdjust &adjust = */ adjusts.emplace_back(); + DeterministicSpriteGroupAdjust &adjust = adjusts.back(); /* The first var adjust doesn't have an operation specified, so we set it to add. */ - adjust->operation = adjusts.size() == 1 ? DSGA_OP_ADD : (DeterministicSpriteGroupAdjustOperation)buf->ReadByte(); - adjust->variable = buf->ReadByte(); - if (adjust->variable == 0x7E) { + adjust.operation = adjusts.size() == 1 ? DSGA_OP_ADD : (DeterministicSpriteGroupAdjustOperation)buf->ReadByte(); + adjust.variable = buf->ReadByte(); + if (adjust.variable == 0x7E) { /* Link subroutine group */ - adjust->subroutine = GetGroupFromGroupID(setid, type, buf->ReadByte()); + adjust.subroutine = GetGroupFromGroupID(setid, type, buf->ReadByte()); } else { - adjust->parameter = IsInsideMM(adjust->variable, 0x60, 0x80) ? buf->ReadByte() : 0; + adjust.parameter = IsInsideMM(adjust.variable, 0x60, 0x80) ? buf->ReadByte() : 0; } varadjust = buf->ReadByte(); - adjust->shift_num = GB(varadjust, 0, 5); - adjust->type = (DeterministicSpriteGroupAdjustType)GB(varadjust, 6, 2); - adjust->and_mask = buf->ReadVarSize(varsize); + adjust.shift_num = GB(varadjust, 0, 5); + adjust.type = (DeterministicSpriteGroupAdjustType)GB(varadjust, 6, 2); + adjust.and_mask = buf->ReadVarSize(varsize); - if (adjust->type != DSGA_TYPE_NONE) { - adjust->add_val = buf->ReadVarSize(varsize); - adjust->divmod_val = buf->ReadVarSize(varsize); + if (adjust.type != DSGA_TYPE_NONE) { + adjust.add_val = buf->ReadVarSize(varsize); + adjust.divmod_val = buf->ReadVarSize(varsize); } else { - adjust->add_val = 0; - adjust->divmod_val = 0; + adjust.add_val = 0; + adjust.divmod_val = 0; } /* Continue reading var adjusts while bit 5 is set. */ @@ -7851,9 +7851,7 @@ static bool HandleParameterInfo(ByteReader *buf) } if (id >= _cur.grfconfig->param_info.size()) { - uint num_to_add = id - _cur.grfconfig->param_info.size() + 1; - GRFParameterInfo **newdata = _cur.grfconfig->param_info.Append(num_to_add); - MemSetT(newdata, 0, num_to_add); + _cur.grfconfig->param_info.resize(id + 1); } if (_cur.grfconfig->param_info[id] == NULL) { _cur.grfconfig->param_info[id] = new GRFParameterInfo(id); @@ -8405,7 +8403,7 @@ static void InitNewGRFFile(const GRFConfig *config) } newfile = new GRFFile(config); - *_grf_files.Append() = _cur.grffile = newfile; + _grf_files.push_back(_cur.grffile = newfile); } /** diff --git a/src/newgrf_commons.cpp b/src/newgrf_commons.cpp index e25f6d0856..e201ca7364 100644 --- a/src/newgrf_commons.cpp +++ b/src/newgrf_commons.cpp @@ -666,7 +666,8 @@ uint32 NewGRFSpriteLayout::PrepareLayout(uint32 orig_offset, uint32 newgrf_groun /* Create a copy of the spritelayout, so we can modify some values. * Also include the groundsprite into the sequence for easier processing. */ - DrawTileSeqStruct *result = result_seq.Append(); + /*C++17: DrawTileSeqStruct *result = &*/ result_seq.emplace_back(); + DrawTileSeqStruct *result = &result_seq.back(); result->image = ground; result->delta_x = 0; result->delta_y = 0; @@ -674,10 +675,10 @@ uint32 NewGRFSpriteLayout::PrepareLayout(uint32 orig_offset, uint32 newgrf_groun const DrawTileSeqStruct *dtss; foreach_draw_tile_seq(dtss, this->seq) { - *result_seq.Append() = *dtss; + result_seq.push_back(*dtss); } - result_seq.Append()->MakeTerminator(); - + result_seq.emplace_back() /*C++17: .MakeTerminator()*/; + result_seq.back().MakeTerminator(); /* Determine the var10 values the action-1-2-3 chains needs to be resolved for, * and apply the default sprite offsets (unless disabled). */ const TileLayoutRegisters *regs = this->registers; diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index 730207c6b0..698084115d 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -85,9 +85,9 @@ GRFConfig::GRFConfig(const GRFConfig &config) : if (config.error != NULL) this->error = new GRFError(*config.error); for (uint i = 0; i < config.param_info.size(); i++) { if (config.param_info[i] == NULL) { - *this->param_info.Append() = NULL; + this->param_info.push_back(NULL); } else { - *this->param_info.Append() = new GRFParameterInfo(*config.param_info[i]); + this->param_info.push_back(new GRFParameterInfo(*config.param_info[i])); } } } @@ -611,9 +611,9 @@ compatible_grf: c->has_param_defaults = f->has_param_defaults; for (uint i = 0; i < f->param_info.size(); i++) { if (f->param_info[i] == NULL) { - *c->param_info.Append() = NULL; + c->param_info.push_back(NULL); } else { - *c->param_info.Append() = new GRFParameterInfo(*f->param_info[i]); + c->param_info.push_back(new GRFParameterInfo(*f->param_info[i])); } } } diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index 07e0f8af77..b2dd4d1a3c 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -1196,9 +1196,7 @@ static SmallVector _list_order_changes; void AlterVehicleListOrder(EngineID engine, uint target) { /* Add the list order change to a queue */ - ListOrderChange *loc = _list_order_changes.Append(); - loc->engine = engine; - loc->target = target; + _list_order_changes.push_back({engine, target}); } /** @@ -1231,7 +1229,7 @@ void CommitVehicleListOrderChanges() SmallVector ordering; Engine *e; FOR_ALL_ENGINES(e) { - *ordering.Append() = e->index; + ordering.push_back(e->index); } QSortT(ordering.Begin(), ordering.size(), EnginePreSort); diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index fb712700c2..0db38e297b 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -378,7 +378,7 @@ struct NewGRFParametersWindow : public Window { DropDownList *list = new DropDownList(); for (uint32 i = par_info->min_value; i <= par_info->max_value; i++) { - *list->Append() = new DropDownListCharStringItem(GetGRFStringFromGRFText(par_info->value_names.Find(i)->second), i, false); + list->push_back(new DropDownListCharStringItem(GetGRFStringFromGRFText(par_info->value_names.Find(i)->second), i, false)); } ShowDropDownListAt(this, list, old_val, -1, wi_rect, COLOUR_ORANGE, true); @@ -927,11 +927,11 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { DropDownList *list = new DropDownList(); /* Add 'None' option for clearing list */ - *list->Append() = new DropDownListStringItem(STR_NONE, -1, false); + list->push_back(new DropDownListStringItem(STR_NONE, -1, false)); for (uint i = 0; i < _grf_preset_list.size(); i++) { if (_grf_preset_list[i] != NULL) { - *list->Append() = new DropDownListCharStringItem(_grf_preset_list[i], i, false); + list->push_back(new DropDownListCharStringItem(_grf_preset_list[i], i, false)); } } @@ -1464,7 +1464,7 @@ private: if (found) continue; if (_settings_client.gui.newgrf_show_old_versions) { - *this->avails.Append() = c; + this->avails.push_back(c); } else { const GRFConfig *best = FindGRFConfig(c->ident.grfid, HasBit(c->flags, GCF_INVALID) ? FGCM_NEWEST : FGCM_NEWEST_VALID); /* @@ -1475,7 +1475,7 @@ private: * show that NewGRF!. */ if (best->version == 0 || best->ident.HasGrfIdentifier(c->ident.grfid, c->ident.md5sum)) { - *this->avails.Append() = c; + this->avails.push_back(c); } } } @@ -1558,7 +1558,7 @@ void ShowMissingContentWindow(const GRFConfig *list) strecpy(ci->name, c->GetName(), lastof(ci->name)); ci->unique_id = BSWAP32(c->ident.grfid); memcpy(ci->md5sum, HasBit(c->flags, GCF_COMPATIBLE) ? c->original_md5sum : c->ident.md5sum, sizeof(ci->md5sum)); - *cv.Append() = ci; + cv.push_back(ci); } ShowNetworkContentListWindow(cv.size() == 0 ? NULL : &cv, CONTENT_TYPE_NEWGRF); } diff --git a/src/newgrf_sound.cpp b/src/newgrf_sound.cpp index dfe7e403ef..e9f1163c69 100644 --- a/src/newgrf_sound.cpp +++ b/src/newgrf_sound.cpp @@ -32,7 +32,7 @@ static SmallVector _sounds; */ SoundEntry *AllocateSound(uint num) { - SoundEntry *sound = _sounds.Append(num); + SoundEntry *sound = grow(_sounds, num); MemSetT(sound, 0, num); return sound; } diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp index 0b18dd4b14..287a146f3d 100644 --- a/src/object_cmd.cpp +++ b/src/object_cmd.cpp @@ -530,9 +530,7 @@ static CommandCost ClearTile_Object(TileIndex tile, DoCommandFlag flags) break; } - ClearedObjectArea *cleared_area = _cleared_object_areas.Append(); - cleared_area->first_tile = tile; - cleared_area->area = ta; + _cleared_object_areas.push_back({tile, ta}); if (flags & DC_EXEC) ReallyClearObjectTile(o); diff --git a/src/openttd.cpp b/src/openttd.cpp index 5478ec5a2c..5c7af2dfcb 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -445,7 +445,7 @@ struct AfterNewGRFScan : NewGRFScanCallback { if (dedicated_host != NULL) { _network_bind_list.Clear(); - *_network_bind_list.Append() = stredup(dedicated_host); + _network_bind_list.push_back(stredup(dedicated_host)); } if (dedicated_port != 0) _settings_client.network.server_port = dedicated_port; @@ -1177,7 +1177,7 @@ static void CheckCaches() SmallVector old_town_caches; Town *t; FOR_ALL_TOWNS(t) { - MemCpyT(old_town_caches.Append(), &t->cache); + old_town_caches.push_back(t->cache); } extern void RebuildTownCaches(); @@ -1195,7 +1195,7 @@ static void CheckCaches() /* Check company infrastructure cache. */ SmallVector old_infrastructure; Company *c; - FOR_ALL_COMPANIES(c) MemCpyT(old_infrastructure.Append(), &c->infrastructure); + FOR_ALL_COMPANIES(c) old_infrastructure.push_back(c->infrastructure); extern void AfterLoadCompanyStats(); AfterLoadCompanyStats(); diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 612c1ba81c..0b1ee2ae66 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -1297,7 +1297,7 @@ public: case WID_O_COND_VARIABLE: { DropDownList *list = new DropDownList(); for (uint i = 0; i < lengthof(_order_conditional_variable); i++) { - *list->Append() = new DropDownListStringItem(STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE + _order_conditional_variable[i], _order_conditional_variable[i], false); + list->push_back(new DropDownListStringItem(STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE + _order_conditional_variable[i], _order_conditional_variable[i], false)); } ShowDropDownList(this, list, this->vehicle->GetOrder(this->OrderGetSel())->GetConditionVariable(), WID_O_COND_VARIABLE); break; diff --git a/src/os/macosx/string_osx.cpp b/src/os/macosx/string_osx.cpp index 261885187b..136542cc18 100644 --- a/src/os/macosx/string_osx.cpp +++ b/src/os/macosx/string_osx.cpp @@ -78,7 +78,7 @@ public: FontMap::const_iterator map = fontMapping.Begin(); while (map < fontMapping.End() - 1 && map->first <= chars.location) map++; - *this->Append() = new CoreTextVisualRun(run, map->second, buff); + this->push_back(new CoreTextVisualRun(run, map->second, buff)); } CFRelease(line); } diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 17df27fc5d..3a24fb65f3 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -1623,7 +1623,7 @@ CommandCost CmdConvertRail(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 if (v != NULL && !HasPowerOnRail(v->railtype, totype)) { /* No power on new rail type, reroute. */ FreeTrainTrackReservation(v); - *vehicles_affected.Append() = v; + vehicles_affected.push_back(v); } } @@ -1705,7 +1705,7 @@ CommandCost CmdConvertRail(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 if (v != NULL && !HasPowerOnRail(v->railtype, totype)) { /* No power on new rail type, reroute. */ FreeTrainTrackReservation(v); - *vehicles_affected.Append() = v; + vehicles_affected.push_back(v); } } diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index a26cc99028..827f244562 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -2007,7 +2007,7 @@ DropDownList *GetRailTypeDropDownList(bool for_replacement, bool all_option) if (all_option) { DropDownListStringItem *item = new DropDownListStringItem(STR_REPLACE_ALL_RAILTYPE, INVALID_RAILTYPE, false); - *list->Append() = item; + list->push_back(item); } Dimension d = { 0, 0 }; @@ -2038,7 +2038,7 @@ DropDownList *GetRailTypeDropDownList(bool for_replacement, bool all_option) } item->SetParam(0, rti->strings.menu_text); item->SetParam(1, rti->max_speed); - *list->Append() = item; + list->push_back(item); } return list; } diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 851eb6a786..43a415c208 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2954,24 +2954,24 @@ bool AfterLoadGame() cur_skip = prev_tile_skip; } - uint *this_skip = skip_frames.Append(); - *this_skip = prev_tile_skip; + /*C++17: uint &this_skip = */ skip_frames.push_back(prev_tile_skip); + uint &this_skip = skip_frames.back(); /* The following 3 curves now take longer than before */ switch (u->state) { case 2: cur_skip++; - if (u->frame <= (roadside ? 9 : 5)) *this_skip = cur_skip; + if (u->frame <= (roadside ? 9 : 5)) this_skip = cur_skip; break; case 4: cur_skip++; - if (u->frame <= (roadside ? 5 : 9)) *this_skip = cur_skip; + if (u->frame <= (roadside ? 5 : 9)) this_skip = cur_skip; break; case 5: cur_skip++; - if (u->frame <= (roadside ? 4 : 2)) *this_skip = cur_skip; + if (u->frame <= (roadside ? 4 : 2)) this_skip = cur_skip; break; default: diff --git a/src/saveload/animated_tile_sl.cpp b/src/saveload/animated_tile_sl.cpp index 36571c418c..5b91852639 100644 --- a/src/saveload/animated_tile_sl.cpp +++ b/src/saveload/animated_tile_sl.cpp @@ -42,14 +42,14 @@ static void Load_ANIT() for (int i = 0; i < 256; i++) { if (anim_list[i] == 0) break; - *_animated_tiles.Append() = anim_list[i]; + _animated_tiles.push_back(anim_list[i]); } return; } uint count = (uint)SlGetFieldLength() / sizeof(*_animated_tiles.Begin()); _animated_tiles.clear(); - _animated_tiles.Append(count); + _animated_tiles.resize(_animated_tiles.size() + count); SlArray(_animated_tiles.Begin(), count, SLE_UINT32); } diff --git a/src/saveload/engine_sl.cpp b/src/saveload/engine_sl.cpp index 87b18336ce..03a086a15d 100644 --- a/src/saveload/engine_sl.cpp +++ b/src/saveload/engine_sl.cpp @@ -190,7 +190,8 @@ static void Load_EIDS() _engine_mngr.clear(); while (SlIterateArray() != -1) { - EngineIDMapping *eid = _engine_mngr.Append(); + /*C++17: EngineIDMapping *eid = &*/ _engine_mngr.emplace_back(); + EngineIDMapping *eid = &_engine_mngr.back(); SlObject(eid, _engine_id_mapping_desc); } } diff --git a/src/saveload/game_sl.cpp b/src/saveload/game_sl.cpp index ff48ab1351..cffff5018d 100644 --- a/src/saveload/game_sl.cpp +++ b/src/saveload/game_sl.cpp @@ -153,10 +153,10 @@ static void Load_GSTR() LanguageStrings *ls = new LanguageStrings(_game_saveload_string != NULL ? _game_saveload_string : ""); for (uint i = 0; i < _game_saveload_strings; i++) { SlObject(NULL, _game_language_string); - *ls->lines.Append() = stredup(_game_saveload_string != NULL ? _game_saveload_string : ""); + ls->lines.push_back(stredup(_game_saveload_string != NULL ? _game_saveload_string : "")); } - *_current_data->raw_strings.Append() = ls; + _current_data->raw_strings.push_back(ls); } /* If there were no strings in the savegame, set GameStrings to NULL */ diff --git a/src/saveload/labelmaps_sl.cpp b/src/saveload/labelmaps_sl.cpp index a25abe722f..3d930e7684 100644 --- a/src/saveload/labelmaps_sl.cpp +++ b/src/saveload/labelmaps_sl.cpp @@ -48,7 +48,7 @@ void AfterLoadLabelMaps() RailType r = GetRailTypeByLabel(_railtype_list[i]); if (r == INVALID_RAILTYPE) r = RAILTYPE_BEGIN; - *railtype_conversion_map.Append() = r; + railtype_conversion_map.push_back(r); } for (TileIndex t = 0; t < MapSize(); t++) { @@ -114,7 +114,7 @@ static void Load_RAIL() while (SlIterateArray() != -1) { SlObject(&lo, _label_object_desc); - *_railtype_list.Append() = (RailTypeLabel)lo.label; + _railtype_list.push_back((RailTypeLabel)lo.label); } } diff --git a/src/saveload/linkgraph_sl.cpp b/src/saveload/linkgraph_sl.cpp index 1ff2470424..842ad6d429 100644 --- a/src/saveload/linkgraph_sl.cpp +++ b/src/saveload/linkgraph_sl.cpp @@ -69,7 +69,7 @@ const SaveLoad *GetLinkGraphJobDesc() char *&address = reinterpret_cast(sl.address); address -= offset_gamesettings; address += offset_component; - *(saveloads.Append()) = sl; + saveloads.push_back(sl); } desc = GetSettingDescription(++setting); } @@ -82,7 +82,7 @@ const SaveLoad *GetLinkGraphJobDesc() int i = 0; do { - *(saveloads.Append()) = job_desc[i++]; + saveloads.push_back(job_desc[i++]); } while (saveloads[saveloads.size() - 1].cmd != SL_END); } diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index 1974bb31fa..7b445858e8 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -651,7 +651,7 @@ static bool LoadOldAnimTileList(LoadgameState *ls, int num) /* The first zero in the loaded array indicates the end of the list. */ for (int i = 0; i < 256; i++) { if (anim_list[i] == 0) break; - *_animated_tiles.Append() = anim_list[i]; + _animated_tiles.push_back(anim_list[i]); } return true; diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 2aa19af818..ee4876fd5c 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -143,7 +143,7 @@ struct MemoryDumper { /* Are we at the end of this chunk? */ if (this->buf == this->bufe) { this->buf = CallocT(MEMORY_CHUNK_SIZE); - *this->blocks.Append() = this->buf; + this->blocks.push_back(this->buf); this->bufe = this->buf + MEMORY_CHUNK_SIZE; } diff --git a/src/saveload/waypoint_sl.cpp b/src/saveload/waypoint_sl.cpp index 47d0c5ab36..9e5d163960 100644 --- a/src/saveload/waypoint_sl.cpp +++ b/src/saveload/waypoint_sl.cpp @@ -178,7 +178,8 @@ static void Load_WAYP() int index; while ((index = SlIterateArray()) != -1) { - OldWaypoint *wp = _old_waypoints.Append(); + /*C++17: OldWaypoint *wp = &*/ _old_waypoints.emplace_back(); + OldWaypoint *wp = &_old_waypoints.back(); memset(wp, 0, sizeof(*wp)); wp->index = index; diff --git a/src/script/squirrel_helper.hpp b/src/script/squirrel_helper.hpp index 8d1ee29fc7..c362601eb2 100644 --- a/src/script/squirrel_helper.hpp +++ b/src/script/squirrel_helper.hpp @@ -117,7 +117,7 @@ namespace SQConvert { sq_getstring(vm, -1, &tmp); char *tmp_str = stredup(tmp); sq_poptop(vm); - *ptr->Append() = (void *)tmp_str; + ptr->push_back((void *)tmp_str); str_validate(tmp_str, tmp_str + strlen(tmp_str)); return tmp_str; } @@ -137,7 +137,7 @@ namespace SQConvert { while (SQ_SUCCEEDED(sq_next(vm, -2))) { SQInteger tmp; if (SQ_SUCCEEDED(sq_getinteger(vm, -1, &tmp))) { - *data.Append() = (int32)tmp; + data.push_back((int32)tmp); } else { sq_pop(vm, 4); throw sq_throwerror(vm, "a member of an array used as parameter to a function is not numeric"); @@ -151,7 +151,7 @@ namespace SQConvert { arr->size = data.size(); memcpy(arr->array, data.Begin(), sizeof(int32) * data.size()); - *ptr->Append() = arr; + ptr->push_back(arr); return arr; } diff --git a/src/settings.cpp b/src/settings.cpp index 8f57b6bda7..2c9fc305e2 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -727,7 +727,7 @@ static void IniLoadSettingList(IniFile *ini, const char *grpname, StringList *li list->Clear(); for (const IniItem *item = group->item; item != NULL; item = item->next) { - if (item->name != NULL) *list->Append() = stredup(item->name); + if (item->name != NULL) list->push_back(stredup(item->name)); } } @@ -1777,7 +1777,7 @@ void GetGRFPresetList(GRFPresetList *list) IniGroup *group; for (group = ini->group; group != NULL; group = group->next) { if (strncmp(group->name, "preset-", 7) == 0) { - *list->Append() = stredup(group->name + 7); + list->push_back(stredup(group->name + 7)); } } diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 8b20bb9f27..da4989e858 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -129,7 +129,7 @@ static DropDownList *BuildSetDropDownList(int *selected_index, bool allow_select DropDownList *list = new DropDownList(); for (int i = 0; i < n; i++) { - *list->Append() = new DropDownListCharStringItem(T::GetSet(i)->name, i, !allow_selection && (*selected_index != i)); + list->push_back(new DropDownListCharStringItem(T::GetSet(i)->name, i, !allow_selection && (*selected_index != i))); } return list; @@ -213,13 +213,13 @@ struct GameOptionsWindow : Window { /* Add non-custom currencies; sorted naturally */ for (uint i = 0; i < CURRENCY_END; items++, i++) { if (i == CURRENCY_CUSTOM) continue; - *list->Append() = new DropDownListStringItem(*items, i, HasBit(disabled, i)); + list->push_back(new DropDownListStringItem(*items, i, HasBit(disabled, i))); } QSortT(list->Begin(), list->size(), DropDownListStringItem::NatSortFunc); /* Append custom currency at the end */ - *list->Append() = new DropDownListItem(-1, false); // separator line - *list->Append() = new DropDownListStringItem(STR_GAME_OPTIONS_CURRENCY_CUSTOM, CURRENCY_CUSTOM, HasBit(disabled, CURRENCY_CUSTOM)); + list->push_back(new DropDownListItem(-1, false)); // separator line + list->push_back(new DropDownListStringItem(STR_GAME_OPTIONS_CURRENCY_CUSTOM, CURRENCY_CUSTOM, HasBit(disabled, CURRENCY_CUSTOM))); break; } @@ -237,7 +237,7 @@ struct GameOptionsWindow : Window { } for (uint i = 0; *items != INVALID_STRING_ID; items++, i++) { - *list->Append() = new DropDownListStringItem(*items, i, HasBit(disabled, i)); + list->push_back(new DropDownListStringItem(*items, i, HasBit(disabled, i))); } break; } @@ -251,20 +251,20 @@ struct GameOptionsWindow : Window { /* Add and sort newgrf townnames generators */ for (int i = 0; i < _nb_grf_names; i++) { int result = _nb_orig_names + i; - *list->Append() = new DropDownListStringItem(_grf_names[i], result, enabled_item != result && enabled_item >= 0); + list->push_back(new DropDownListStringItem(_grf_names[i], result, enabled_item != result && enabled_item >= 0)); } QSortT(list->Begin(), list->size(), DropDownListStringItem::NatSortFunc); int newgrf_size = list->size(); /* Insert newgrf_names at the top of the list */ if (newgrf_size > 0) { - *list->Append() = new DropDownListItem(-1, false); // separator line + list->push_back(new DropDownListItem(-1, false)); // separator line newgrf_size++; } /* Add and sort original townnames generators */ for (int i = 0; i < _nb_orig_names; i++) { - *list->Append() = new DropDownListStringItem(STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH + i, i, enabled_item != i && enabled_item >= 0); + list->push_back(new DropDownListStringItem(STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH + i, i, enabled_item != i && enabled_item >= 0)); } QSortT(list->Begin() + newgrf_size, list->size() - newgrf_size, DropDownListStringItem::NatSortFunc); break; @@ -275,7 +275,7 @@ struct GameOptionsWindow : Window { *selected_index = _settings_client.gui.autosave; const StringID *items = _autosave_dropdown; for (uint i = 0; *items != INVALID_STRING_ID; items++, i++) { - *list->Append() = new DropDownListStringItem(*items, i, false); + list->push_back(new DropDownListStringItem(*items, i, false)); } break; } @@ -284,7 +284,7 @@ struct GameOptionsWindow : Window { list = new DropDownList(); for (uint i = 0; i < _languages.size(); i++) { if (&_languages[i] == _current_language) *selected_index = i; - *list->Append() = new DropDownListStringItem(SPECSTR_LANGUAGE_START + i, i, false); + list->push_back(new DropDownListStringItem(SPECSTR_LANGUAGE_START + i, i, false)); } QSortT(list->Begin(), list->size(), DropDownListStringItem::NatSortFunc); break; @@ -296,7 +296,7 @@ struct GameOptionsWindow : Window { list = new DropDownList(); *selected_index = GetCurRes(); for (int i = 0; i < _num_resolutions; i++) { - *list->Append() = new DropDownListStringItem(SPECSTR_RESOLUTION_START + i, i, false); + list->push_back(new DropDownListStringItem(SPECSTR_RESOLUTION_START + i, i, false)); } break; @@ -305,7 +305,7 @@ struct GameOptionsWindow : Window { *selected_index = ZOOM_LVL_OUT_4X - _gui_zoom; const StringID *items = _gui_zoom_dropdown; for (int i = 0; *items != INVALID_STRING_ID; items++, i++) { - *list->Append() = new DropDownListStringItem(*items, i, _settings_client.gui.zoom_min > ZOOM_LVL_OUT_4X - i); + list->push_back(new DropDownListStringItem(*items, i, _settings_client.gui.zoom_min > ZOOM_LVL_OUT_4X - i)); } break; } @@ -315,7 +315,7 @@ struct GameOptionsWindow : Window { *selected_index = ZOOM_LVL_OUT_4X - _font_zoom; const StringID *items = _font_zoom_dropdown; for (int i = 0; *items != INVALID_STRING_ID; items++, i++) { - *list->Append() = new DropDownListStringItem(*items, i, false); + list->push_back(new DropDownListStringItem(*items, i, false)); } break; } @@ -1964,16 +1964,16 @@ struct GameSettingsWindow : Window { * we don't want to allow comparing with new game's settings. */ bool disabled = mode == RM_CHANGED_AGAINST_NEW && settings_ptr == &_settings_newgame; - *list->Append() = new DropDownListStringItem(_game_settings_restrict_dropdown[mode], mode, disabled); + list->push_back(new DropDownListStringItem(_game_settings_restrict_dropdown[mode], mode, disabled)); } break; case WID_GS_TYPE_DROPDOWN: list = new DropDownList(); - *list->Append() = new DropDownListStringItem(STR_CONFIG_SETTING_TYPE_DROPDOWN_ALL, ST_ALL, false); - *list->Append() = new DropDownListStringItem(_game_mode == GM_MENU ? STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU : STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME, ST_GAME, false); - *list->Append() = new DropDownListStringItem(_game_mode == GM_MENU ? STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU : STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME, ST_COMPANY, false); - *list->Append() = new DropDownListStringItem(STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT, ST_CLIENT, false); + list->push_back(new DropDownListStringItem(STR_CONFIG_SETTING_TYPE_DROPDOWN_ALL, ST_ALL, false)); + list->push_back(new DropDownListStringItem(_game_mode == GM_MENU ? STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU : STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME, ST_GAME, false)); + list->push_back(new DropDownListStringItem(_game_mode == GM_MENU ? STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU : STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME, ST_COMPANY, false)); + list->push_back(new DropDownListStringItem(STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT, ST_CLIENT, false)); break; } return list; @@ -2130,7 +2130,7 @@ struct GameSettingsWindow : Window { DropDownList *list = new DropDownList(); for (int i = sdb->min; i <= (int)sdb->max; i++) { - *list->Append() = new DropDownListStringItem(sdb->str_val + i - sdb->min, i, false); + list->push_back(new DropDownListStringItem(sdb->str_val + i - sdb->min, i, false)); } ShowDropDownListAt(this, list, value, -1, wi_rect, COLOUR_ORANGE, true); diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp index 64901a89f6..1847bedff3 100644 --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -121,9 +121,10 @@ public: text += stored_size; } while (length > 0) { - OutputBuffer *block = this->output_buffer.Append(); - block->Clear(); // Initialize the new block. - int stored_size = block->Add(text, length); + /*C++17: OutputBuffer &block =*/ this->output_buffer.emplace_back(); + OutputBuffer &block = this->output_buffer.back(); + block.Clear(); // Initialize the new block. + int stored_size = block.Add(text, length); length -= stored_size; text += stored_size; } diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index 0a1f0dd5d5..cab19c22f8 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -63,7 +63,7 @@ struct SignList { this->signs.clear(); const Sign *si; - FOR_ALL_SIGNS(si) *this->signs.Append() = si; + FOR_ALL_SIGNS(si) this->signs.push_back(si); this->signs.SetFilterState(true); this->FilterSignList(); diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 2dee09fe80..fcbf514bc8 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -942,7 +942,7 @@ static CommandCost CheckFlatLandRailStation(TileArea tile_area, DoCommandFlag fl if (HasBit(GetRailReservationTrackBits(tile_cur), track)) { Train *v = GetTrainForReservation(tile_cur, track); if (v != NULL) { - *affected_vehicles.Append() = v; + affected_vehicles.push_back(v); } } CommandCost ret = DoCommand(tile_cur, 0, track, flags, CMD_REMOVE_SINGLE_RAIL); @@ -1386,7 +1386,7 @@ CommandCost CmdBuildRailStation(TileIndex tile_org, DoCommandFlag flags, uint32 /* Check for trains having a reservation for this tile. */ Train *v = GetTrainForReservation(tile, AxisToTrack(GetRailStationAxis(tile))); if (v != NULL) { - *affected_vehicles.Append() = v; + affected_vehicles.push_back(v); FreeTrainReservation(v); } } @@ -3538,7 +3538,7 @@ void DeleteStaleLinks(Station *from) } } if (!found_to || !found_from) continue; - *(vehicles.Append()) = l->GetFirstSharedVehicle(); + vehicles.push_back(l->GetFirstSharedVehicle()); } auto iter = vehicles.begin(); diff --git a/src/station_gui.cpp b/src/station_gui.cpp index e1f5daa699..98ac80df4b 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -189,14 +189,14 @@ protected: if (st->goods[j].HasRating()) { num_waiting_cargo++; // count number of waiting cargo if (HasBit(this->cargo_filter, j)) { - *this->stations.Append() = st; + this->stations.push_back(st); break; } } } /* stations without waiting cargo */ if (num_waiting_cargo == 0 && this->include_empty) { - *this->stations.Append() = st; + this->stations.push_back(st); } } } @@ -2135,7 +2135,7 @@ static bool AddNearbyStation(TileIndex tile, void *user_data) for (uint i = 0; i < _deleted_stations_nearby.size(); i++) { auto ts = _deleted_stations_nearby.begin() + i; if (ts->tile == tile) { - *_stations_nearby_list.Append() = _deleted_stations_nearby[i].station; + _stations_nearby_list.push_back(_deleted_stations_nearby[i].station); _deleted_stations_nearby.erase(ts); i--; } @@ -2153,7 +2153,7 @@ static bool AddNearbyStation(TileIndex tile, void *user_data) if (st->owner != _local_company || std::find(_stations_nearby_list.begin(), _stations_nearby_list.end(), sid) != _stations_nearby_list.end()) return false; if (st->rect.BeforeAddRect(ctx->tile, ctx->w, ctx->h, StationRect::ADD_TEST).Succeeded()) { - *_stations_nearby_list.Append() = sid; + _stations_nearby_list.push_back(sid); } return false; // We want to include *all* nearby stations @@ -2187,9 +2187,7 @@ static const T *FindStationsNearby(TileArea ta, bool distant_join) if (T::IsExpected(st) && !st->IsInUse() && st->owner == _local_company) { /* Include only within station spread (yes, it is strictly less than) */ if (max(DistanceMax(ta.tile, st->xy), DistanceMax(TILE_ADDXY(ta.tile, ta.w - 1, ta.h - 1), st->xy)) < _settings_game.station.station_spread) { - TileAndStation *ts = _deleted_stations_nearby.Append(); - ts->tile = st->xy; - ts->station = st->index; + _deleted_stations_nearby.push_back({st->xy, st->index}); /* Add the station when it's within where we're going to build */ if (IsInsideBS(TileX(st->xy), TileX(ctx.tile), ctx.w) && diff --git a/src/story_gui.cpp b/src/story_gui.cpp index 78c8b97930..aed00358d0 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -57,7 +57,7 @@ protected: const StoryPage *p; FOR_ALL_STORY_PAGES(p) { if (this->IsPageAvailable(p)) { - *this->story_pages.Append() = p; + this->story_pages.push_back(p); } } @@ -85,7 +85,7 @@ protected: const StoryPageElement *pe; FOR_ALL_STORY_PAGE_ELEMENTS(pe) { if (pe->page == p->index) { - *this->story_page_elements.Append() = pe; + this->story_page_elements.push_back(pe); } } } @@ -248,7 +248,7 @@ protected: item = str_item; } - *list->Append() = item; + list->push_back(item); page_num++; } diff --git a/src/strgen/strgen_base.cpp b/src/strgen/strgen_base.cpp index 0e75537fb8..12d9938446 100644 --- a/src/strgen/strgen_base.cpp +++ b/src/strgen/strgen_base.cpp @@ -242,7 +242,7 @@ struct Buffer : SmallVector { */ void AppendByte(byte value) { - *this->Append() = value; + this->push_back(value); } /** @@ -252,19 +252,19 @@ struct Buffer : SmallVector { void AppendUtf8(uint32 value) { if (value < 0x80) { - *this->Append() = value; + this->push_back(value); } else if (value < 0x800) { - *this->Append() = 0xC0 + GB(value, 6, 5); - *this->Append() = 0x80 + GB(value, 0, 6); + this->push_back(0xC0 + GB(value, 6, 5)); + this->push_back(0x80 + GB(value, 0, 6)); } else if (value < 0x10000) { - *this->Append() = 0xE0 + GB(value, 12, 4); - *this->Append() = 0x80 + GB(value, 6, 6); - *this->Append() = 0x80 + GB(value, 0, 6); + this->push_back(0xE0 + GB(value, 12, 4)); + this->push_back(0x80 + GB(value, 6, 6)); + this->push_back(0x80 + GB(value, 0, 6)); } else if (value < 0x110000) { - *this->Append() = 0xF0 + GB(value, 18, 3); - *this->Append() = 0x80 + GB(value, 12, 6); - *this->Append() = 0x80 + GB(value, 6, 6); - *this->Append() = 0x80 + GB(value, 0, 6); + this->push_back(0xF0 + GB(value, 18, 3)); + this->push_back(0x80 + GB(value, 12, 6)); + this->push_back(0x80 + GB(value, 6, 6)); + this->push_back(0x80 + GB(value, 0, 6)); } else { strgen_warning("Invalid unicode value U+0x%X", value); } diff --git a/src/string.cpp b/src/string.cpp index 5246f78271..c23202acbb 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -634,8 +634,8 @@ public: this->char_itr = icu::BreakIterator::createCharacterInstance(icu::Locale(_current_language != NULL ? _current_language->isocode : "en"), status); this->word_itr = icu::BreakIterator::createWordInstance(icu::Locale(_current_language != NULL ? _current_language->isocode : "en"), status); - *this->utf16_str.Append() = '\0'; - *this->utf16_to_utf8.Append() = 0; + this->utf16_str.push_back('\0'); + this->utf16_to_utf8.push_back(0); } virtual ~IcuStringIterator() @@ -660,17 +660,17 @@ public: WChar c = Utf8Consume(&s); if (c < 0x10000) { - *this->utf16_str.Append() = (UChar)c; + this->utf16_str.push_back((UChar)c); } else { /* Make a surrogate pair. */ - *this->utf16_str.Append() = (UChar)(0xD800 + ((c - 0x10000) >> 10)); - *this->utf16_str.Append() = (UChar)(0xDC00 + ((c - 0x10000) & 0x3FF)); - *this->utf16_to_utf8.Append() = idx; + this->utf16_str.push_back((UChar)(0xD800 + ((c - 0x10000) >> 10))); + this->utf16_str.push_back((UChar)(0xDC00 + ((c - 0x10000) & 0x3FF))); + this->utf16_to_utf8.push_back(idx); } - *this->utf16_to_utf8.Append() = idx; + this->utf16_to_utf8.push_back(idx); } - *this->utf16_str.Append() = '\0'; - *this->utf16_to_utf8.Append() = s - string_base; + this->utf16_str.push_back('\0'); + this->utf16_to_utf8.push_back(s - string_base); UText text = UTEXT_INITIALIZER; UErrorCode status = U_ZERO_ERROR; diff --git a/src/stringfilter.cpp b/src/stringfilter.cpp index b12abff7ff..e546a4186c 100644 --- a/src/stringfilter.cpp +++ b/src/stringfilter.cpp @@ -76,9 +76,8 @@ void StringFilter::SetFilterTerm(const char *str) /* Add to word */ if (word == NULL) { - word = this->word_index.Append(); - word->start = dest; - word->match = false; + /*C++17: word = &*/ this->word_index.push_back({dest, false}); + word = &this->word_index.back(); } memcpy(dest, pos, len); diff --git a/src/strings.cpp b/src/strings.cpp index 61a5098ab6..c3f3061834 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -1932,7 +1932,7 @@ static void GetLanguageList(const char *path) } else if (GetLanguage(lmd.newgrflangid) != NULL) { DEBUG(misc, 3, "%s's language ID is already known", lmd.file); } else { - *_languages.Append() = lmd; + _languages.push_back(lmd); } } closedir(dir); diff --git a/src/texteff.cpp b/src/texteff.cpp index 92c2017047..c81d9a95d7 100644 --- a/src/texteff.cpp +++ b/src/texteff.cpp @@ -48,20 +48,20 @@ TextEffectID AddTextEffect(StringID msg, int center, int y, uint8 duration, Text for (i = 0; i < _text_effects.size(); i++) { if (_text_effects[i].string_id == INVALID_STRING_ID) break; } - if (i == _text_effects.size()) _text_effects.Append(); + if (i == _text_effects.size()) _text_effects.emplace_back(); - TextEffect *te = _text_effects.data() + i; + TextEffect &te = _text_effects[i]; /* Start defining this object */ - te->string_id = msg; - te->duration = duration; - te->params_1 = GetDParam(0); - te->params_2 = GetDParam(1); - te->mode = mode; + te.string_id = msg; + te.duration = duration; + te.params_1 = GetDParam(0); + te.params_2 = GetDParam(1); + te.mode = mode; /* Make sure we only dirty the new area */ - te->width_normal = 0; - te->UpdatePosition(center, y, msg); + te.width_normal = 0; + te.UpdatePosition(center, y, msg); return i; } diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index e9706c7529..b4911a9682 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -365,11 +365,11 @@ static void Xunzip(byte **bufp, size_t *sizep) str_validate(p, this->text + filesize, SVS_REPLACE_WITH_QUESTION_MARK | SVS_ALLOW_NEWLINE); /* Split the string on newlines. */ - *this->lines.Append() = p; + this->lines.push_back(p); for (; *p != '\0'; p++) { if (*p == '\n') { *p = '\0'; - *this->lines.Append() = p + 1; + this->lines.push_back(p + 1); } } diff --git a/src/timetable_cmd.cpp b/src/timetable_cmd.cpp index dec4f7d442..8107fc3d2f 100644 --- a/src/timetable_cmd.cpp +++ b/src/timetable_cmd.cpp @@ -285,10 +285,10 @@ CommandCost CmdSetTimetableStart(TileIndex tile, DoCommandFlag flags, uint32 p1, if (timetable_all) { for (Vehicle *w = v->orders.list->GetFirstSharedVehicle(); w != NULL; w = w->NextShared()) { - *vehs.Append() = w; + vehs.push_back(w); } } else { - *vehs.Append() = v; + vehs.push_back(v); } int total_duration = v->orders.list->GetTimetableTotalDuration(); diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 7052dc4e2f..eac99f2494 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -198,7 +198,7 @@ static void PopupMainToolbMenu(Window *w, int widget, StringID string, int count { DropDownList *list = new DropDownList(); for (int i = 0; i < count; i++) { - *list->Append() = new DropDownListStringItem(string + i, i, false); + list->push_back(new DropDownListStringItem(string + i, i, false)); } PopupMainToolbMenu(w, widget, list, 0); } @@ -224,27 +224,27 @@ static void PopupMainCompanyToolbMenu(Window *w, int widget, int grey = 0) if (!_networking) break; /* Add the client list button for the companies menu */ - *list->Append() = new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_CLIENT_LIST, CTMN_CLIENT_LIST, false); + list->push_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_CLIENT_LIST, CTMN_CLIENT_LIST, false)); if (_local_company == COMPANY_SPECTATOR) { - *list->Append() = new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_NEW_COMPANY, CTMN_NEW_COMPANY, NetworkMaxCompaniesReached()); + list->push_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_NEW_COMPANY, CTMN_NEW_COMPANY, NetworkMaxCompaniesReached())); } else { - *list->Append() = new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_SPECTATE, CTMN_SPECTATE, NetworkMaxSpectatorsReached()); + list->push_back(new DropDownListStringItem(STR_NETWORK_COMPANY_LIST_SPECTATE, CTMN_SPECTATE, NetworkMaxSpectatorsReached())); } break; case WID_TN_STORY: - *list->Append() = new DropDownListStringItem(STR_STORY_BOOK_SPECTATOR, CTMN_SPECTATOR, false); + list->push_back(new DropDownListStringItem(STR_STORY_BOOK_SPECTATOR, CTMN_SPECTATOR, false)); break; case WID_TN_GOAL: - *list->Append() = new DropDownListStringItem(STR_GOALS_SPECTATOR, CTMN_SPECTATOR, false); + list->push_back(new DropDownListStringItem(STR_GOALS_SPECTATOR, CTMN_SPECTATOR, false)); break; } for (CompanyID c = COMPANY_FIRST; c < MAX_COMPANIES; c++) { if (!Company::IsValidID(c)) continue; - *list->Append() = new DropDownListCompanyItem(c, false, HasBit(grey, c)); + list->push_back(new DropDownListCompanyItem(c, false, HasBit(grey, c))); } PopupMainToolbMenu(w, widget, list, _local_company == COMPANY_SPECTATOR ? (widget == WID_TN_COMPANIES ? CTMN_CLIENT_LIST : CTMN_SPECTATOR) : (int)_local_company); @@ -318,24 +318,24 @@ enum OptionMenuEntries { static CallBackFunction ToolbarOptionsClick(Window *w) { DropDownList *list = new DropDownList(); - *list->Append() = new DropDownListStringItem(STR_SETTINGS_MENU_GAME_OPTIONS, OME_GAMEOPTIONS, false); - *list->Append() = new DropDownListStringItem(STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE, OME_SETTINGS, false); + list->push_back(new DropDownListStringItem(STR_SETTINGS_MENU_GAME_OPTIONS, OME_GAMEOPTIONS, false)); + list->push_back(new DropDownListStringItem(STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE, OME_SETTINGS, false)); /* Changes to the per-AI settings don't get send from the server to the clients. Clients get * the settings once they join but never update it. As such don't show the window at all * to network clients. */ - if (!_networking || _network_server) *list->Append() = new DropDownListStringItem(STR_SETTINGS_MENU_SCRIPT_SETTINGS, OME_SCRIPT_SETTINGS, false); - *list->Append() = new DropDownListStringItem(STR_SETTINGS_MENU_NEWGRF_SETTINGS, OME_NEWGRFSETTINGS, false); - *list->Append() = new DropDownListStringItem(STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS, OME_TRANSPARENCIES, false); - *list->Append() = new DropDownListItem(-1, false); - *list->Append() = new DropDownListCheckedItem(STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED, OME_SHOW_TOWNNAMES, false, HasBit(_display_opt, DO_SHOW_TOWN_NAMES)); - *list->Append() = new DropDownListCheckedItem(STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED, OME_SHOW_STATIONNAMES, false, HasBit(_display_opt, DO_SHOW_STATION_NAMES)); - *list->Append() = new DropDownListCheckedItem(STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED, OME_SHOW_WAYPOINTNAMES, false, HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES)); - *list->Append() = new DropDownListCheckedItem(STR_SETTINGS_MENU_SIGNS_DISPLAYED, OME_SHOW_SIGNS, false, HasBit(_display_opt, DO_SHOW_SIGNS)); - *list->Append() = new DropDownListCheckedItem(STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS, OME_SHOW_COMPETITOR_SIGNS, false, HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS)); - *list->Append() = new DropDownListCheckedItem(STR_SETTINGS_MENU_FULL_ANIMATION, OME_FULL_ANIMATION, false, HasBit(_display_opt, DO_FULL_ANIMATION)); - *list->Append() = new DropDownListCheckedItem(STR_SETTINGS_MENU_FULL_DETAIL, OME_FULL_DETAILS, false, HasBit(_display_opt, DO_FULL_DETAIL)); - *list->Append() = new DropDownListCheckedItem(STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS, OME_TRANSPARENTBUILDINGS, false, IsTransparencySet(TO_HOUSES)); - *list->Append() = new DropDownListCheckedItem(STR_SETTINGS_MENU_TRANSPARENT_SIGNS, OME_SHOW_STATIONSIGNS, false, IsTransparencySet(TO_SIGNS)); + if (!_networking || _network_server) list->push_back(new DropDownListStringItem(STR_SETTINGS_MENU_SCRIPT_SETTINGS, OME_SCRIPT_SETTINGS, false)); + list->push_back(new DropDownListStringItem(STR_SETTINGS_MENU_NEWGRF_SETTINGS, OME_NEWGRFSETTINGS, false)); + list->push_back(new DropDownListStringItem(STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS, OME_TRANSPARENCIES, false)); + list->push_back(new DropDownListItem(-1, false)); + list->push_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED, OME_SHOW_TOWNNAMES, false, HasBit(_display_opt, DO_SHOW_TOWN_NAMES))); + list->push_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED, OME_SHOW_STATIONNAMES, false, HasBit(_display_opt, DO_SHOW_STATION_NAMES))); + list->push_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED, OME_SHOW_WAYPOINTNAMES, false, HasBit(_display_opt, DO_SHOW_WAYPOINT_NAMES))); + list->push_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_SIGNS_DISPLAYED, OME_SHOW_SIGNS, false, HasBit(_display_opt, DO_SHOW_SIGNS))); + list->push_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS, OME_SHOW_COMPETITOR_SIGNS, false, HasBit(_display_opt, DO_SHOW_COMPETITOR_SIGNS))); + list->push_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_FULL_ANIMATION, OME_FULL_ANIMATION, false, HasBit(_display_opt, DO_FULL_ANIMATION))); + list->push_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_FULL_DETAIL, OME_FULL_DETAILS, false, HasBit(_display_opt, DO_FULL_DETAIL))); + list->push_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS, OME_TRANSPARENTBUILDINGS, false, IsTransparencySet(TO_HOUSES))); + list->push_back(new DropDownListCheckedItem(STR_SETTINGS_MENU_TRANSPARENT_SIGNS, OME_SHOW_STATIONSIGNS, false, IsTransparencySet(TO_SIGNS))); ShowDropDownList(w, list, 0, WID_TN_SETTINGS, 140, true, true); if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); @@ -464,10 +464,10 @@ enum MapMenuEntries { static CallBackFunction ToolbarMapClick(Window *w) { DropDownList *list = new DropDownList(); - *list->Append() = new DropDownListStringItem(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP, false); - *list->Append() = new DropDownListStringItem(STR_MAP_MENU_EXTRA_VIEW_PORT, MME_SHOW_EXTRAVIEWPORTS, false); - *list->Append() = new DropDownListStringItem(STR_MAP_MENU_LINGRAPH_LEGEND, MME_SHOW_LINKGRAPH, false); - *list->Append() = new DropDownListStringItem(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS, false); + list->push_back(new DropDownListStringItem(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP, false)); + list->push_back(new DropDownListStringItem(STR_MAP_MENU_EXTRA_VIEW_PORT, MME_SHOW_EXTRAVIEWPORTS, false)); + list->push_back(new DropDownListStringItem(STR_MAP_MENU_LINGRAPH_LEGEND, MME_SHOW_LINKGRAPH, false)); + list->push_back(new DropDownListStringItem(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS, false)); PopupMainToolbMenu(w, WID_TN_SMALL_MAP, list, 0); return CBF_NONE; } @@ -475,11 +475,11 @@ static CallBackFunction ToolbarMapClick(Window *w) static CallBackFunction ToolbarScenMapTownDir(Window *w) { DropDownList *list = new DropDownList(); - *list->Append() = new DropDownListStringItem(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP, false); - *list->Append() = new DropDownListStringItem(STR_MAP_MENU_EXTRA_VIEW_PORT, MME_SHOW_EXTRAVIEWPORTS, false); - *list->Append() = new DropDownListStringItem(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS, false); - *list->Append() = new DropDownListStringItem(STR_TOWN_MENU_TOWN_DIRECTORY, MME_SHOW_TOWNDIRECTORY, false); - *list->Append() = new DropDownListStringItem(STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY, MME_SHOW_INDUSTRYDIRECTORY, false); + list->push_back(new DropDownListStringItem(STR_MAP_MENU_MAP_OF_WORLD, MME_SHOW_SMALLMAP, false)); + list->push_back(new DropDownListStringItem(STR_MAP_MENU_EXTRA_VIEW_PORT, MME_SHOW_EXTRAVIEWPORTS, false)); + list->push_back(new DropDownListStringItem(STR_MAP_MENU_SIGN_LIST, MME_SHOW_SIGNLISTS, false)); + list->push_back(new DropDownListStringItem(STR_TOWN_MENU_TOWN_DIRECTORY, MME_SHOW_TOWNDIRECTORY, false)); + list->push_back(new DropDownListStringItem(STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY, MME_SHOW_INDUSTRYDIRECTORY, false)); PopupMainToolbMenu(w, WID_TE_SMALL_MAP, list, 0); return CBF_NONE; } @@ -897,7 +897,7 @@ static CallBackFunction ToolbarBuildRoadClick(Window *w) DropDownList *list = new DropDownList(); /* Road is always visible and available. */ - *list->Append() = new DropDownListIconItem(SPR_IMG_ROAD_X_DIR, PAL_NONE, STR_ROAD_MENU_ROAD_CONSTRUCTION, ROADTYPE_ROAD, false); + list->push_back(new DropDownListIconItem(SPR_IMG_ROAD_X_DIR, PAL_NONE, STR_ROAD_MENU_ROAD_CONSTRUCTION, ROADTYPE_ROAD, false)); /* Tram is only visible when there will be a tram, and available when that has been introduced. */ Engine *e; @@ -905,7 +905,7 @@ static CallBackFunction ToolbarBuildRoadClick(Window *w) if (!HasBit(e->info.climates, _settings_game.game_creation.landscape)) continue; if (!HasBit(e->info.misc_flags, EF_ROAD_TRAM)) continue; - *list->Append() = new DropDownListIconItem(SPR_IMG_TRAMWAY_X_DIR, PAL_NONE, STR_ROAD_MENU_TRAM_CONSTRUCTION, ROADTYPE_TRAM, !HasBit(c->avail_roadtypes, ROADTYPE_TRAM)); + list->push_back(new DropDownListIconItem(SPR_IMG_TRAMWAY_X_DIR, PAL_NONE, STR_ROAD_MENU_TRAM_CONSTRUCTION, ROADTYPE_TRAM, !HasBit(c->avail_roadtypes, ROADTYPE_TRAM))); break; } ShowDropDownList(w, list, _last_built_roadtype, WID_TN_ROADS, 140, true, true); diff --git a/src/town_gui.cpp b/src/town_gui.cpp index bf8fb4b875..55f65e3207 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -654,7 +654,7 @@ private: const Town *t; FOR_ALL_TOWNS(t) { - *this->towns.Append() = t; + this->towns.push_back(t); } this->towns.shrink_to_fit(); diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index db3773f964..0d4df42f45 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -823,7 +823,7 @@ typedef SmallVector TrainList; */ static void MakeTrainBackup(TrainList &list, Train *t) { - for (; t != NULL; t = t->Next()) *list.Append() = t; + for (; t != NULL; t = t->Next()) list.push_back(t); } /** diff --git a/src/train_gui.cpp b/src/train_gui.cpp index eab6a33e3e..3036096c89 100644 --- a/src/train_gui.cpp +++ b/src/train_gui.cpp @@ -280,7 +280,8 @@ static void GetCargoSummaryOfArticulatedVehicle(const Train *v, CargoSummary *su CargoSummaryItem *item = &*std::find(summary->begin(), summary->end(), new_item); if (item == summary->End()) { - item = summary->Append(); + /*C++17: item = &*/ summary->emplace_back(); + item = &summary->back(); item->cargo = new_item.cargo; item->subtype = new_item.subtype; item->capacity = 0; diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index 06dc24e84f..764551d81f 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -681,9 +681,8 @@ CommandCost CmdBuildTunnel(TileIndex start_tile, DoCommandFlag flags, uint32 p1, * Do this for all tiles (like trees), not only objects. */ ClearedObjectArea *coa = FindClearedObject(end_tile); if (coa == NULL) { - coa = _cleared_object_areas.Append(); - coa->first_tile = end_tile; - coa->area = TileArea(end_tile, 1, 1); + /*C++17: coa = &*/ _cleared_object_areas.push_back({end_tile, TileArea(end_tile, 1, 1)}); + coa = &_cleared_object_areas.back(); } /* Hide the tile from the terraforming command */ diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 0e05d68f2a..f1b7279710 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -2283,9 +2283,7 @@ void Vehicle::GetConsistFreeCapacities(SmallMap &capacities) cons if (v->cargo_cap == 0) continue; SmallPair *pair = capacities.Find(v->cargo_type); if (pair == capacities.End()) { - pair = capacities.Append(); - pair->first = v->cargo_type; - pair->second = v->cargo_cap - v->cargo.StoredCount(); + capacities.push_back({v->cargo_type, v->cargo_cap - v->cargo.StoredCount()}); } else { pair->second += v->cargo_cap - v->cargo.StoredCount(); } diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 636aadb499..8e578cd68d 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -417,11 +417,7 @@ static CommandCost RefitVehicle(Vehicle *v, bool only_this, uint8 num_vehicles, * - We have to call the refit cost callback with the pre-refit configuration of the chain because we want refit and * autorefit to behave the same, and we need its result for auto_refit_allowed. */ - RefitResult *result = refit_result.Append(); - result->v = v; - result->capacity = amount; - result->mail_capacity = mail_capacity; - result->subtype = actual_subtype; + refit_result.push_back({v, amount, mail_capacity, actual_subtype}); } if (flags & DC_EXEC) { diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 4a42d746d8..9fcebd4e66 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -168,13 +168,13 @@ DropDownList *BaseVehicleListWindow::BuildActionDropdownList(bool show_autorepla { DropDownList *list = new DropDownList(); - if (show_autoreplace) *list->Append() = new DropDownListStringItem(STR_VEHICLE_LIST_REPLACE_VEHICLES, ADI_REPLACE, false); - *list->Append() = new DropDownListStringItem(STR_VEHICLE_LIST_SEND_FOR_SERVICING, ADI_SERVICE, false); - *list->Append() = new DropDownListStringItem(this->vehicle_depot_name[this->vli.vtype], ADI_DEPOT, false); + if (show_autoreplace) list->push_back(new DropDownListStringItem(STR_VEHICLE_LIST_REPLACE_VEHICLES, ADI_REPLACE, false)); + list->push_back(new DropDownListStringItem(STR_VEHICLE_LIST_SEND_FOR_SERVICING, ADI_SERVICE, false)); + list->push_back(new DropDownListStringItem(this->vehicle_depot_name[this->vli.vtype], ADI_DEPOT, false)); if (show_group) { - *list->Append() = new DropDownListStringItem(STR_GROUP_ADD_SHARED_VEHICLE, ADI_ADD_SHARED, false); - *list->Append() = new DropDownListStringItem(STR_GROUP_REMOVE_ALL_VEHICLES, ADI_REMOVE_ALL, false); + list->push_back(new DropDownListStringItem(STR_GROUP_ADD_SHARED_VEHICLE, ADI_ADD_SHARED, false)); + list->push_back(new DropDownListStringItem(STR_GROUP_REMOVE_ALL_VEHICLES, ADI_REMOVE_ALL, false)); } return list; @@ -438,10 +438,7 @@ struct RefitWindow : public Window { bool first_vehicle = this->list[current_index].size() == 0; if (first_vehicle) { /* Keeping the current subtype is always an option. It also serves as the option in case of no subtypes */ - RefitOption *option = this->list[current_index].Append(); - option->cargo = cid; - option->subtype = 0xFF; - option->string = STR_EMPTY; + this->list[current_index].push_back({cid, 0xFF, STR_EMPTY}); } /* Check the vehicle's callback mask for cargo suffixes. diff --git a/src/vehiclelist.cpp b/src/vehiclelist.cpp index 39ec90e8b9..c987975732 100644 --- a/src/vehiclelist.cpp +++ b/src/vehiclelist.cpp @@ -85,7 +85,7 @@ void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engine if (t->IsArticulatedPart() || t->IsRearDualheaded()) continue; if (t->track != TRACK_BIT_DEPOT) continue; if (wagons != NULL && t->First()->IsFreeWagon()) { - if (individual_wagons || t->IsFreeWagon()) *wagons->Append() = t; + if (individual_wagons || t->IsFreeWagon()) wagons->push_back(t); continue; } break; @@ -98,7 +98,7 @@ void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engine if (!v->IsPrimaryVehicle()) continue; - *engines->Append() = v; + engines->push_back(v); } /* Ensure the lists are not wasting too much space. If the lists are fresh @@ -128,7 +128,7 @@ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli FOR_VEHICLE_ORDERS(v, order) { if ((order->IsType(OT_GOTO_STATION) || order->IsType(OT_GOTO_WAYPOINT) || order->IsType(OT_IMPLICIT)) && order->GetDestination() == vli.index) { - *list->Append() = v; + list->push_back(v); break; } } @@ -142,7 +142,7 @@ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli if (v == NULL || v->type != vli.vtype || !v->IsPrimaryVehicle()) return false; for (; v != NULL; v = v->NextShared()) { - *list->Append() = v; + list->push_back(v); } break; @@ -151,7 +151,7 @@ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli FOR_ALL_VEHICLES(v) { if (v->type == vli.vtype && v->IsPrimaryVehicle() && v->owner == vli.company && GroupIsInGroup(v->group_id, vli.index)) { - *list->Append() = v; + list->push_back(v); } } break; @@ -161,7 +161,7 @@ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli case VL_STANDARD: FOR_ALL_VEHICLES(v) { if (v->type == vli.vtype && v->owner == vli.company && v->IsPrimaryVehicle()) { - *list->Append() = v; + list->push_back(v); } } break; @@ -173,7 +173,7 @@ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli FOR_VEHICLE_ORDERS(v, order) { if (order->IsType(OT_GOTO_DEPOT) && !(order->GetDepotActionType() & ODATFB_NEAREST_DEPOT) && order->GetDestination() == vli.index) { - *list->Append() = v; + list->push_back(v); break; } } diff --git a/src/viewport.cpp b/src/viewport.cpp index 5d6f58268f..929616ba52 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -499,13 +499,14 @@ static void AddTileSpriteToDraw(SpriteID image, PaletteID pal, int32 x, int32 y, { assert((image & SPRITE_MASK) < MAX_SPRITES); - TileSpriteToDraw *ts = _vd.tile_sprites_to_draw.Append(); - ts->image = image; - ts->pal = pal; - ts->sub = sub; + /*C++17: TileSpriteToDraw &ts = */ _vd.tile_sprites_to_draw.emplace_back(); + TileSpriteToDraw &ts = _vd.tile_sprites_to_draw.back(); + ts.image = image; + ts.pal = pal; + ts.sub = sub; Point pt = RemapCoords(x, y, z); - ts->x = pt.x + extra_offs_x; - ts->y = pt.y + extra_offs_y; + ts.x = pt.x + extra_offs_x; + ts.y = pt.y + extra_offs_y; } /** @@ -708,29 +709,30 @@ void AddSortableSpriteToDraw(SpriteID image, PaletteID pal, int x, int y, int w, return; } - ParentSpriteToDraw *ps = _vd.parent_sprites_to_draw.Append(); - ps->x = tmp_x; - ps->y = tmp_y; + /*C++17: ParentSpriteToDraw &ps = */ _vd.parent_sprites_to_draw.emplace_back(); + ParentSpriteToDraw &ps = _vd.parent_sprites_to_draw.back(); + ps.x = tmp_x; + ps.y = tmp_y; - ps->left = tmp_left; - ps->top = tmp_top; + ps.left = tmp_left; + ps.top = tmp_top; - ps->image = image; - ps->pal = pal; - ps->sub = sub; - ps->xmin = x + bb_offset_x; - ps->xmax = x + max(bb_offset_x, w) - 1; + ps.image = image; + ps.pal = pal; + ps.sub = sub; + ps.xmin = x + bb_offset_x; + ps.xmax = x + max(bb_offset_x, w) - 1; - ps->ymin = y + bb_offset_y; - ps->ymax = y + max(bb_offset_y, h) - 1; + ps.ymin = y + bb_offset_y; + ps.ymax = y + max(bb_offset_y, h) - 1; - ps->zmin = z + bb_offset_z; - ps->zmax = z + max(bb_offset_z, dz) - 1; + ps.zmin = z + bb_offset_z; + ps.zmax = z + max(bb_offset_z, dz) - 1; - ps->comparison_done = false; - ps->first_child = -1; + ps.comparison_done = false; + ps.first_child = -1; - _vd.last_child = &ps->first_child; + _vd.last_child = &ps.first_child; if (_vd.combine_sprites == SPRITE_COMBINE_PENDING) _vd.combine_sprites = SPRITE_COMBINE_ACTIVE; } @@ -826,33 +828,35 @@ void AddChildSpriteScreen(SpriteID image, PaletteID pal, int x, int y, bool tran *_vd.last_child = _vd.child_screen_sprites_to_draw.size(); - ChildScreenSpriteToDraw *cs = _vd.child_screen_sprites_to_draw.Append(); - cs->image = image; - cs->pal = pal; - cs->sub = sub; - cs->x = scale ? x * ZOOM_LVL_BASE : x; - cs->y = scale ? y * ZOOM_LVL_BASE : y; - cs->next = -1; + /*C++17: ChildScreenSpriteToDraw &cs = */ _vd.child_screen_sprites_to_draw.emplace_back(); + ChildScreenSpriteToDraw &cs = _vd.child_screen_sprites_to_draw.back(); + cs.image = image; + cs.pal = pal; + cs.sub = sub; + cs.x = scale ? x * ZOOM_LVL_BASE : x; + cs.y = scale ? y * ZOOM_LVL_BASE : y; + cs.next = -1; /* Append the sprite to the active ChildSprite list. * If the active ParentSprite is a foundation, update last_foundation_child as well. * Note: ChildSprites of foundations are NOT sequential in the vector, as selection sprites are added at last. */ - if (_vd.last_foundation_child[0] == _vd.last_child) _vd.last_foundation_child[0] = &cs->next; - if (_vd.last_foundation_child[1] == _vd.last_child) _vd.last_foundation_child[1] = &cs->next; - _vd.last_child = &cs->next; + if (_vd.last_foundation_child[0] == _vd.last_child) _vd.last_foundation_child[0] = &cs.next; + if (_vd.last_foundation_child[1] == _vd.last_child) _vd.last_foundation_child[1] = &cs.next; + _vd.last_child = &cs.next; } static void AddStringToDraw(int x, int y, StringID string, uint64 params_1, uint64 params_2, Colours colour, uint16 width) { assert(width != 0); - StringSpriteToDraw *ss = _vd.string_sprites_to_draw.Append(); - ss->string = string; - ss->x = x; - ss->y = y; - ss->params[0] = params_1; - ss->params[1] = params_2; - ss->width = width; - ss->colour = colour; + /*C++17: StringSpriteToDraw &ss = */ _vd.string_sprites_to_draw.emplace_back(); + StringSpriteToDraw &ss = _vd.string_sprites_to_draw.back(); + ss.string = string; + ss.x = x; + ss.y = y; + ss.params[0] = params_1; + ss.params[1] = params_2; + ss.width = width; + ss.colour = colour; } @@ -1588,7 +1592,7 @@ void ViewportDoDraw(const ViewPort *vp, int left, int top, int right, int bottom ParentSpriteToDraw *psd_end = _vd.parent_sprites_to_draw.End(); for (ParentSpriteToDraw *it = _vd.parent_sprites_to_draw.Begin(); it != psd_end; it++) { - *_vd.parent_sprites_to_sort.Append() = it; + _vd.parent_sprites_to_sort.push_back(it); } _vp_sprite_sorter(&_vd.parent_sprites_to_sort); diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp index 6acbd79c21..33d59effc4 100644 --- a/src/widgets/dropdown.cpp +++ b/src/widgets/dropdown.cpp @@ -509,7 +509,7 @@ void ShowDropDownMenu(Window *w, const StringID *strings, int selected, int butt for (uint i = 0; strings[i] != INVALID_STRING_ID; i++) { if (!HasBit(hidden_mask, i)) { - *list->Append() = new DropDownListStringItem(strings[i], i, HasBit(disabled_mask, i)); + list->push_back(new DropDownListStringItem(strings[i], i, HasBit(disabled_mask, i))); } } diff --git a/src/window.cpp b/src/window.cpp index 471ac08a2e..a8d1ce75e2 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -109,7 +109,7 @@ WindowDesc::WindowDesc(WindowPosition def_pos, const char *ini_key, int16 def_wi default_height_trad(def_height_trad) { if (_window_descs == NULL) _window_descs = new SmallVector(); - *_window_descs->Append() = this; + _window_descs->push_back(this); } WindowDesc::~WindowDesc() @@ -3242,7 +3242,7 @@ void Window::InvalidateData(int data, bool gui_scope) this->SetDirty(); if (!gui_scope) { /* Schedule GUI-scope invalidation for next redraw. */ - *this->scheduled_invalidation_data.Append() = data; + this->scheduled_invalidation_data.push_back(data); } this->OnInvalidateData(data, gui_scope); } From e0c58bf5ee0f3f4d0563a04de315c09b37f74c6e Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Wed, 20 Feb 2019 18:53:57 +0000 Subject: [PATCH 562/622] Codechange: Removed SmallVector::Insert() --- src/core/smallvec_type.hpp | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 5961a96988..e0596e3385 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -66,20 +66,6 @@ public: ~SmallVector() = default; - /** - * Insert a new item at a specific position into the vector, moving all following items. - * @param item Position at which the new item should be inserted - * @return pointer to the new item - */ - inline T *Insert(T *item) - { - assert(item >= this->Begin() && item <= this->End()); - - size_t start = item - this->Begin(); - std::vector::insert(std::vector::begin() + start); - return this->Begin() + start; - } - /** * Search for the first occurrence of an item. * The '!=' operator of T is used for comparison. From 2bc2de9034d3b75a253b849cf7a703b1a503e200 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Wed, 20 Feb 2019 19:27:10 +0000 Subject: [PATCH 563/622] Codechange: Replaced SmallVector::Find() with std::find() --- src/core/smallvec_type.hpp | 32 +++++++++++++++++------------ src/network/core/host.cpp | 2 +- src/network/network_content_gui.cpp | 17 ++++++--------- src/newgrf.cpp | 6 +++--- src/newgrf_engine.cpp | 4 ++-- src/newgrf_gui.cpp | 6 ++++-- src/newgrf_railtype.cpp | 5 +++-- src/os/windows/string_uniscribe.cpp | 2 +- src/timetable_cmd.cpp | 4 ++-- 9 files changed, 41 insertions(+), 37 deletions(-) diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index e0596e3385..0ab82c4fc9 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -66,18 +66,6 @@ public: ~SmallVector() = default; - /** - * Search for the first occurrence of an item. - * The '!=' operator of T is used for comparison. - * @param item Item to search for - * @return The position of the item, or -1 when not present - */ - inline int FindIndex(const T &item) const - { - auto const it = std::find(std::vector::begin(), std::vector::end(), item); - return it == std::vector::end() ? -1 : it - std::vector::begin(); - } - /** * Tests whether a item is present in the vector, and appends it to the end if not. * The '!=' operator of T is used for comparison. @@ -133,7 +121,25 @@ public: }; /** - * Helper function to extend a vector by more than one element + * Helper function to get the index of an item + * Consider using std::set, std::unordered_set or std::flat_set in new code + * + * @param vec A reference to the vector to be extended + * @param item Reference to the item to be search for + * + * @return Index of element if found, otherwise -1 + */ +template +int find_index(std::vector const& vec, T const& item) +{ + auto const it = std::find(vec.begin(), vec.end(), item); + if (it != vec.end()) return it - vec.begin(); + + return -1; +} + +/** + * Helper function to append N default-constructed elements and get a pointer to the first new element * Consider using std::back_inserter in new code * * @param vec A reference to the vector to be extended diff --git a/src/network/core/host.cpp b/src/network/core/host.cpp index 1ea5389d4f..b1ed71e926 100644 --- a/src/network/core/host.cpp +++ b/src/network/core/host.cpp @@ -136,7 +136,7 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // Wi memcpy(&address, &ifo[j].iiAddress.Address, sizeof(sockaddr)); ((sockaddr_in*)&address)->sin_addr.s_addr = ifo[j].iiAddress.AddressIn.sin_addr.s_addr | ~ifo[j].iiNetmask.AddressIn.sin_addr.s_addr; NetworkAddress addr(address, sizeof(sockaddr)); - if (std::none_of(broadcast->begin(), broadcast->end(), [&addr](NetworkAddress const& elem) -> bool { return elem == addr; })) *broadcast->Append() = addr; + if (std::none_of(broadcast->begin(), broadcast->end(), [&addr](NetworkAddress const& elem) -> bool { return elem == addr; })) broadcast->push_back(addr); } free(ifo); diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 19c075258e..b7237cadd4 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -435,12 +435,8 @@ class NetworkContentListWindow : public Window, ContentCallback { { if (!this->content.Sort()) return; - for (ConstContentIterator iter = this->content.Begin(); iter != this->content.End(); iter++) { - if (*iter == this->selected) { - this->list_pos = iter - this->content.Begin(); - break; - } - } + int idx = find_index(this->content, this->selected); + if (idx >= 0) this->list_pos = idx; } /** Filter content by tags/name */ @@ -478,11 +474,10 @@ class NetworkContentListWindow : public Window, ContentCallback { if (!changed) return; /* update list position */ - for (ConstContentIterator iter = this->content.Begin(); iter != this->content.End(); iter++) { - if (*iter == this->selected) { - this->list_pos = iter - this->content.Begin(); - return; - } + int idx = find_index(this->content, this->selected); + if (idx >= 0) { + this->list_pos = idx; + return; } /* previously selected item not in list anymore */ diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 63296593dc..36a13aaaa3 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -8383,8 +8383,8 @@ static void BuildCargoTranslationMap() _cur.grffile->cargo_map[c] = cs->bitnum; } else { /* Check the translation table for this cargo's label */ - int index = _cur.grffile->cargo_list.FindIndex(cs->label); - if (index >= 0) _cur.grffile->cargo_map[c] = index; + int idx = find_index(_cur.grffile->cargo_list, {cs->label}); + if (idx >= 0) _cur.grffile->cargo_map[c] = idx; } } } @@ -9226,7 +9226,7 @@ static void FinalisePriceBaseMultipliers() GRFFile *dest = GetFileByGRFID(override); if (dest == NULL) continue; - grf_overrides[i] = _grf_files.FindIndex(dest); + grf_overrides[i] = find_index(_grf_files, dest); assert(grf_overrides[i] >= 0); } diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index b2dd4d1a3c..7a0bb04f3b 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -1245,8 +1245,8 @@ void CommitVehicleListOrderChanges() EngineID target = _engine_mngr.GetID(id_source->type, local_target, id_source->grfid); if (target == INVALID_ENGINE) continue; - int source_index = ordering.FindIndex(source); - int target_index = ordering.FindIndex(target); + int source_index = find_index(ordering, source); + int target_index = find_index(ordering, target); assert(source_index >= 0 && target_index >= 0); assert(source_index != target_index); diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 0db38e297b..1473f18779 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -1486,8 +1486,10 @@ private: this->avails.Sort(); if (this->avail_sel != NULL) { - this->avail_pos = this->avails.FindIndex(this->avail_sel); - if (this->avail_pos < 0) this->avail_sel = NULL; + this->avail_pos = find_index(this->avails, this->avail_sel); + if (this->avail_pos == -1) { + this->avail_sel = NULL; + } } this->vscroll2->SetCount(this->avails.size()); // Update the scrollbar diff --git a/src/newgrf_railtype.cpp b/src/newgrf_railtype.cpp index 60ddc19140..c57be5b6cc 100644 --- a/src/newgrf_railtype.cpp +++ b/src/newgrf_railtype.cpp @@ -143,8 +143,9 @@ uint8 GetReverseRailTypeTranslation(RailType railtype, const GRFFile *grffile) /* Look for a matching rail type label in the table */ RailTypeLabel label = GetRailTypeInfo(railtype)->label; - int index = grffile->railtype_list.FindIndex(label); - if (index >= 0) return index; + + int idx = find_index(grffile->railtype_list, label); + if (idx >= 0) return idx; /* If not found, return as invalid */ return 0xFF; diff --git a/src/os/windows/string_uniscribe.cpp b/src/os/windows/string_uniscribe.cpp index f1c62c7d35..ec0e026394 100644 --- a/src/os/windows/string_uniscribe.cpp +++ b/src/os/windows/string_uniscribe.cpp @@ -424,7 +424,7 @@ static std::vector UniscribeItemizeString(UniscribeParagraphLayoutF if (!UniscribeShapeRun(this->text_buffer, run)) return NULL; } - *line->Append() = new UniscribeVisualRun(run, cur_pos); + line->push_back(new UniscribeVisualRun(run, cur_pos)); cur_pos += run.total_advance; } diff --git a/src/timetable_cmd.cpp b/src/timetable_cmd.cpp index 8107fc3d2f..fcc8493e2b 100644 --- a/src/timetable_cmd.cpp +++ b/src/timetable_cmd.cpp @@ -298,10 +298,9 @@ CommandCost CmdSetTimetableStart(TileIndex tile, DoCommandFlag flags, uint32 p1, QSortT(vehs.Begin(), vehs.size(), &VehicleTimetableSorter); } - int base = vehs.FindIndex(v); + int idx = vehs.begin() - std::find(vehs.begin(), vehs.end(), v); for (Vehicle **viter = vehs.Begin(); viter != vehs.End(); viter++) { - int idx = (viter - vehs.Begin()) - base; Vehicle *w = *viter; w->lateness_counter = 0; @@ -309,6 +308,7 @@ CommandCost CmdSetTimetableStart(TileIndex tile, DoCommandFlag flags, uint32 p1, /* Do multiplication, then division to reduce rounding errors. */ w->timetable_start = start_date + idx * total_duration / num_vehs / DAY_TICKS; SetWindowDirty(WC_VEHICLE_TIMETABLE, w->index); + ++idx; } } From 297fd3dda3abe353ebe2fe77c67b011e24d403bc Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Wed, 20 Feb 2019 21:35:41 +0000 Subject: [PATCH 564/622] Codechange: Replaced SmallVector::Include() with include() --- src/animated_tile.cpp | 2 +- src/core/smallvec_type.hpp | 31 +++++++++++++++++------------ src/economy.cpp | 2 +- src/fios.cpp | 2 +- src/gfx.cpp | 2 +- src/hotkeys.cpp | 2 +- src/network/network_content.cpp | 2 +- src/network/network_content.h | 2 +- src/network/network_content_gui.cpp | 2 +- src/rail_cmd.cpp | 2 +- src/station_cmd.cpp | 2 +- src/subsidy.cpp | 2 +- src/vehicle.cpp | 4 ++-- src/vehicle_gui.cpp | 4 ++-- 14 files changed, 33 insertions(+), 28 deletions(-) diff --git a/src/animated_tile.cpp b/src/animated_tile.cpp index eb10b9b8d1..5204547dd3 100644 --- a/src/animated_tile.cpp +++ b/src/animated_tile.cpp @@ -43,7 +43,7 @@ void DeleteAnimatedTile(TileIndex tile) void AddAnimatedTile(TileIndex tile) { MarkTileDirtyByTile(tile); - _animated_tiles.Include(tile); + include(_animated_tiles, tile); } /** diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 0ab82c4fc9..9162c17b99 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -17,6 +17,24 @@ #include #include +/** + * Helper function to append an item to a vector if it is not already contained + * Consider using std::set, std::unordered_set or std::flat_set in new code + * + * @param vec A reference to the vector to be extended + * @param item Reference to the item to be copy-constructed if not found + * + * @return Whether the item was already present + */ +template +inline bool include(std::vector& vec, const T &item) +{ + const bool is_member = std::find(vec.begin(), vec.end(), item) != vec.end(); + if (!is_member) vec.emplace_back(item); + return is_member; +} + + /** * Simple vector template class. * @@ -66,19 +84,6 @@ public: ~SmallVector() = default; - /** - * Tests whether a item is present in the vector, and appends it to the end if not. - * The '!=' operator of T is used for comparison. - * @param item Item to test for - * @return true iff the item is was already present - */ - inline bool Include(const T &item) - { - bool is_member = std::find(std::vector::begin(), std::vector::end(), item) != std::vector::end(); - if (!is_member) std::vector::emplace_back(item); - return is_member; - } - /** * Get the pointer to the first item (const) * diff --git a/src/economy.cpp b/src/economy.cpp index d306fd0bab..1f17612f7d 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1058,7 +1058,7 @@ static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint n if (IndustryTemporarilyRefusesCargo(ind, cargo_type)) continue; /* Insert the industry into _cargo_delivery_destinations, if not yet contained */ - _cargo_delivery_destinations.Include(ind); + include(_cargo_delivery_destinations, ind); uint amount = min(num_pieces, 0xFFFFU - ind->incoming_cargo_waiting[cargo_index]); ind->incoming_cargo_waiting[cargo_index] += amount; diff --git a/src/fios.cpp b/src/fios.cpp index a1369e1cd1..6acb2d891e 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -706,7 +706,7 @@ public: FioFCloseFile(f); - this->Include(id); + include(*this, id); return true; } }; diff --git a/src/gfx.cpp b/src/gfx.cpp index 42bb56400b..dad675772a 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -968,7 +968,7 @@ static void GfxBlitter(const Sprite * const sprite, int x, int y, BlitterMode mo if (topleft <= clicked && clicked <= bottomright) { uint offset = (((size_t)clicked - (size_t)topleft) / (blitter->GetScreenDepth() / 8)) % bp.pitch; if (offset < (uint)bp.width) { - _newgrf_debug_sprite_picker.sprites.Include(sprite_id); + include(_newgrf_debug_sprite_picker.sprites, sprite_id); } } } diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp index 8bec7e400b..39cf4c0a1a 100644 --- a/src/hotkeys.cpp +++ b/src/hotkeys.cpp @@ -248,7 +248,7 @@ Hotkey::Hotkey(const uint16 *default_keycodes, const char *name, int num) : */ void Hotkey::AddKeycode(uint16 keycode) { - this->keycodes.Include(keycode); + include(this->keycodes, keycode); } HotkeyList::HotkeyList(const char *ini_group, Hotkey *items, GlobalHotkeyHandlerFunc global_hotkey_handler) : diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index fe7905de89..617a2bc6b6 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -930,7 +930,7 @@ void ClientNetworkContentSocketHandler::ReverseLookupTreeDependency(ConstContent this->ReverseLookupDependency(parents, tree[i]); for (ConstContentIterator piter = parents.Begin(); piter != parents.End(); piter++) { - tree.Include(*piter); + include(tree, *piter); } } } diff --git a/src/network/network_content.h b/src/network/network_content.h index 7cce7fc0a0..08e7755aae 100644 --- a/src/network/network_content.h +++ b/src/network/network_content.h @@ -140,7 +140,7 @@ public: void Clear(); /** Add a callback to this class */ - void AddCallback(ContentCallback *cb) { this->callbacks.Include(cb); } + void AddCallback(ContentCallback *cb) { include(this->callbacks, cb); } /** Remove a callback */ void RemoveCallback(ContentCallback *cb) { this->callbacks.erase(std::find(this->callbacks.begin(), this->callbacks.end(), cb)); } }; diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index b7237cadd4..8e3ec9686a 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -274,7 +274,7 @@ public: void OnDownloadProgress(const ContentInfo *ci, int bytes) override { BaseNetworkContentDownloadStatusWindow::OnDownloadProgress(ci, bytes); - this->receivedTypes.Include(ci->type); + include(this->receivedTypes, ci->type); /* When downloading is finished change cancel in ok */ if (this->downloaded_bytes == this->total_bytes) { diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 3a24fb65f3..c6548eefba 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -1534,7 +1534,7 @@ static Vehicle *UpdateTrainPowerProc(Vehicle *v, void *data) if (v->type != VEH_TRAIN) return NULL; TrainList *affected_trains = static_cast(data); - affected_trains->Include(Train::From(v)->First()); + include(*affected_trains, Train::From(v)->First()); return NULL; } diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index fcbf514bc8..6811290add 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -1614,7 +1614,7 @@ CommandCost RemoveFromRailBaseStation(TileArea ta, SmallVector &affected DeallocateSpecFromStation(st, specindex); - affected_stations.Include(st); + include(affected_stations, st); if (v != NULL) RestoreTrainReservation(v); } diff --git a/src/subsidy.cpp b/src/subsidy.cpp index eac81e3624..8f823a1ab4 100644 --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -577,7 +577,7 @@ bool CheckSubsidised(CargoID cargo_type, CompanyID company, SourceType src_type, for (TileIndex tile = it; tile != INVALID_TILE; tile = ++it) { if (!IsTileType(tile, MP_HOUSE)) continue; const Town *t = Town::GetByTile(tile); - if (t->cache.part_of_subsidy & POS_DST) towns_near.Include(t); + if (t->cache.part_of_subsidy & POS_DST) include(towns_near, t); } break; } diff --git a/src/vehicle.cpp b/src/vehicle.cpp index f1b7279710..267c204913 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -2899,10 +2899,10 @@ void GetVehicleSet(VehicleSet &set, Vehicle *v, uint8 num_vehicles) for (; u != NULL && num_vehicles > 0; num_vehicles--) { do { /* Include current vehicle in the selection. */ - set.Include(u->index); + include(set, u->index); /* If the vehicle is multiheaded, add the other part too. */ - if (u->IsMultiheaded()) set.Include(u->other_multiheaded_part->index); + if (u->IsMultiheaded()) include(set, u->other_multiheaded_part->index); u = u->Next(); } while (u != NULL && u->IsArticulatedPart()); diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 9fcebd4e66..82403a2d1b 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -238,7 +238,7 @@ byte GetBestFittingSubType(Vehicle *v_from, Vehicle *v_for, CargoID dest_cargo_t for (; v_from != NULL; v_from = v_from->HasArticulatedPart() ? v_from->GetNextArticulatedPart() : NULL) { const Engine *e_from = v_from->GetEngine(); if (!e_from->CanCarryCargo() || !HasBit(e_from->info.callback_mask, CBM_VEHICLE_CARGO_SUFFIX)) continue; - subtypes.Include(GetCargoSubtypeText(v_from)); + include(subtypes, GetCargoSubtypeText(v_from)); } byte ret_refit_cyc = 0; @@ -470,7 +470,7 @@ struct RefitWindow : public Window { option.cargo = cid; option.subtype = refit_cyc; option.string = subtype; - this->list[current_index].Include(option); + include(this->list[current_index], option); } else { /* Intersect the subtypes of earlier vehicles with the subtypes of this vehicle */ if (subtype == STR_EMPTY) { From ab711e6942757d775c08c31a6c32d488feba1dba Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Sun, 17 Feb 2019 11:20:52 +0000 Subject: [PATCH 565/622] Codechange: Replaced SmallVector::[Begin|End]() with std alternatives --- src/animated_tile.cpp | 4 +- src/autoreplace_gui.cpp | 4 +- src/base_media_base.h | 16 ++--- src/company_gui.cpp | 8 +-- src/console_cmds.cpp | 4 +- src/core/pool_func.cpp | 5 +- src/core/smallmap_type.hpp | 13 ++-- src/core/smallvec_type.hpp | 40 ------------ src/economy.cpp | 5 +- src/engine.cpp | 12 ++-- src/engine_gui.cpp | 2 +- src/fios.cpp | 10 +-- src/fios.h | 4 +- src/fios_gui.cpp | 12 ++-- src/fontcache.cpp | 6 +- src/game/game_text.cpp | 19 +++--- src/gfx.cpp | 5 +- src/gfx_layout.cpp | 30 ++++----- src/group_gui.cpp | 8 +-- src/hotkeys.cpp | 14 ++--- src/music/dmusic.cpp | 2 +- src/music/midifile.cpp | 6 +- src/music/win32_m.cpp | 2 +- src/network/core/host.cpp | 6 +- src/network/core/tcp_connect.cpp | 2 +- src/network/core/tcp_http.cpp | 4 +- src/network/core/tcp_listen.h | 22 +++---- src/network/core/udp.cpp | 26 ++++---- src/network/network.cpp | 4 +- src/network/network_client.cpp | 2 +- src/network/network_content.cpp | 90 ++++++++++++-------------- src/network/network_content.h | 4 +- src/network/network_content_gui.cpp | 28 +++++---- src/network/network_gui.cpp | 13 ++-- src/network/network_server.cpp | 4 +- src/network/network_udp.cpp | 6 +- src/newgrf.cpp | 97 +++++++++++++---------------- src/newgrf_commons.cpp | 4 +- src/newgrf_commons.h | 2 +- src/newgrf_config.cpp | 6 +- src/newgrf_debug_gui.cpp | 4 +- src/newgrf_engine.cpp | 17 +++-- src/newgrf_text.cpp | 12 ++-- src/object_cmd.cpp | 5 +- src/os/macosx/string_osx.cpp | 38 +++++------ src/os/windows/string_uniscribe.cpp | 20 +++--- src/rail_cmd.cpp | 4 +- src/saveload/afterload.cpp | 11 ++-- src/saveload/animated_tile_sl.cpp | 8 +-- src/saveload/engine_sl.cpp | 6 +- src/saveload/waypoint_sl.cpp | 60 +++++++++--------- src/script/script_info.cpp | 4 +- src/script/squirrel_helper.hpp | 2 +- src/settings.cpp | 4 +- src/settings_gui.cpp | 14 ++--- src/settingsgen/settingsgen.cpp | 4 +- src/station_cmd.cpp | 6 +- src/story_gui.cpp | 26 +++----- src/strgen/strgen_base.cpp | 2 +- src/string.cpp | 2 +- src/stringfilter.cpp | 14 ++--- src/strings.cpp | 18 +++--- src/subsidy.cpp | 6 +- src/texteff.cpp | 28 ++++----- src/timetable_cmd.cpp | 5 +- src/train_cmd.cpp | 3 +- src/train_gui.cpp | 8 +-- src/tunnelbridge_cmd.cpp | 5 +- src/vehicle.cpp | 6 +- src/vehicle_cmd.cpp | 14 ++--- src/vehicle_gui.cpp | 6 +- src/viewport.cpp | 57 ++++++++--------- src/viewport_sprite_sorter_sse4.cpp | 8 +-- src/widgets/dropdown.cpp | 14 ++--- src/window.cpp | 27 ++++---- 75 files changed, 464 insertions(+), 555 deletions(-) diff --git a/src/animated_tile.cpp b/src/animated_tile.cpp index 5204547dd3..e2a5553711 100644 --- a/src/animated_tile.cpp +++ b/src/animated_tile.cpp @@ -53,8 +53,8 @@ void AnimateAnimatedTiles() { PerformanceAccumulator framerate(PFE_GL_LANDSCAPE); - const TileIndex *ti = _animated_tiles.Begin(); - while (ti < _animated_tiles.End()) { + const TileIndex *ti = _animated_tiles.data(); + while (ti < _animated_tiles.data() + _animated_tiles.size()) { const TileIndex curr = *ti; AnimateTile(curr); /* During the AnimateTile call, DeleteAnimatedTile could have been called, diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index 5b6976e674..133e9fb382 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -183,8 +183,8 @@ class ReplaceVehicleWindow : public Window { this->vscroll[1]->SetCount(this->engines[1].size()); if (this->reset_sel_engine && this->sel_engine[1] != INVALID_ENGINE) { int position = 0; - for (EngineID *it = this->engines[1].Begin(); it != this->engines[1].End(); ++it) { - if (*it == this->sel_engine[1]) break; + for (EngineID &eid : this->engines[1]) { + if (eid == this->sel_engine[1]) break; ++position; } this->vscroll[1]->ScrollTowards(position); diff --git a/src/base_media_base.h b/src/base_media_base.h index bcffa11a08..5655401558 100644 --- a/src/base_media_base.h +++ b/src/base_media_base.h @@ -76,9 +76,9 @@ struct BaseSet { { free(this->name); - for (TranslatedStrings::iterator iter = this->description.Begin(); iter != this->description.End(); iter++) { - free(iter->first); - free(iter->second); + for (auto &pair : this->description) { + free(pair.first); + free(pair.second); } for (uint i = 0; i < NUM_FILES; i++) { @@ -122,16 +122,16 @@ struct BaseSet { { if (isocode != NULL) { /* First the full ISO code */ - for (TranslatedStrings::const_iterator iter = this->description.Begin(); iter != this->description.End(); iter++) { - if (strcmp(iter->first, isocode) == 0) return iter->second; + for (const auto &pair : this->description) { + if (strcmp(pair.first, isocode) == 0) return pair.second; } /* Then the first two characters */ - for (TranslatedStrings::const_iterator iter = this->description.Begin(); iter != this->description.End(); iter++) { - if (strncmp(iter->first, isocode, 2) == 0) return iter->second; + for (const auto &pair : this->description) { + if (strncmp(pair.first, isocode, 2) == 0) return pair.second; } } /* Then fall back */ - return this->description.Begin()->second; + return this->description.front().second; } /** diff --git a/src/company_gui.cpp b/src/company_gui.cpp index a705687b0c..6b67f373ba 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -640,11 +640,11 @@ private: void AddChildren(GUIGroupList *source, GroupID parent, int indent) { - for (const Group **g = source->Begin(); g != source->End(); g++) { - if ((*g)->parent != parent) continue; - this->groups.push_back(*g); + for (const Group *g : *source) { + if (g->parent != parent) continue; + this->groups.push_back(g); this->indents.push_back(indent); - AddChildren(source, (*g)->index, indent + 1); + AddChildren(source, g->index, indent + 1); } } diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 85b2ddbb19..1d3e9c52c4 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -585,8 +585,8 @@ DEF_CONSOLE_CMD(ConBanList) IConsolePrint(CC_DEFAULT, "Banlist: "); uint i = 1; - for (char **iter = _network_ban_list.Begin(); iter != _network_ban_list.End(); iter++, i++) { - IConsolePrintF(CC_DEFAULT, " %d) %s", i, *iter); + for (char *entry : _network_ban_list) { + IConsolePrintF(CC_DEFAULT, " %d) %s", i, entry); } return true; diff --git a/src/core/pool_func.cpp b/src/core/pool_func.cpp index 97f9ad1c78..7a65bf77a4 100644 --- a/src/core/pool_func.cpp +++ b/src/core/pool_func.cpp @@ -31,10 +31,7 @@ */ /* static */ void PoolBase::Clean(PoolType pt) { - PoolVector *pools = PoolBase::GetPools(); - PoolBase **end = pools->End(); - for (PoolBase **ppool = pools->Begin(); ppool != end; ppool++) { - PoolBase *pool = *ppool; + for (PoolBase *pool : *PoolBase::GetPools()) { if (pool->type & pt) pool->CleanPool(); } } diff --git a/src/core/smallmap_type.hpp b/src/core/smallmap_type.hpp index 0917c5423c..8cc96302f3 100644 --- a/src/core/smallmap_type.hpp +++ b/src/core/smallmap_type.hpp @@ -55,12 +55,13 @@ struct SmallMap : SmallVector, S> { * @param key key to find * @return &Pair(key, data) if found, this->End() if not */ - inline const Pair *Find(const T &key) const + inline typename std::vector::const_iterator Find(const T &key) const { - for (uint i = 0; i < std::vector::size(); i++) { - if (key == std::vector::operator[](i).first) return &std::vector::operator[](i); + typename std::vector::const_iterator it; + for (it = std::vector::begin(); it != std::vector::end(); it++) { + if (key == it->first) return it; } - return this->End(); + return it; } /** @@ -114,7 +115,7 @@ struct SmallMap : SmallVector, S> { */ inline void Erase(Pair *pair) { - assert(pair >= this->Begin() && pair < this->End()); + assert(pair >= std::vector::data() && pair < this->End()); auto distance = pair - std::vector::data(); std::vector::erase(std::vector::begin() + distance); } @@ -166,7 +167,7 @@ struct SmallMap : SmallVector, S> { inline void SortByKey() { - QSortT(this->Begin(), std::vector::size(), KeySorter); + QSortT(std::vector::data(), std::vector::size(), KeySorter); } static int CDECL KeySorter(const Pair *a, const Pair *b) diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 9162c17b99..5ec07f2f01 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -83,46 +83,6 @@ public: } ~SmallVector() = default; - - /** - * Get the pointer to the first item (const) - * - * @return the pointer to the first item - */ - inline const T *Begin() const - { - return std::vector::data(); - } - - /** - * Get the pointer to the first item - * - * @return the pointer to the first item - */ - inline T *Begin() - { - return std::vector::data(); - } - - /** - * Get the pointer behind the last valid item (const) - * - * @return the pointer behind the last valid item - */ - inline const T *End() const - { - return std::vector::data() + std::vector::size(); - } - - /** - * Get the pointer behind the last valid item - * - * @return the pointer behind the last valid item - */ - inline T *End() - { - return std::vector::data() + std::vector::size(); - } }; /** diff --git a/src/economy.cpp b/src/economy.cpp index 1f17612f7d..cab605f9af 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1945,9 +1945,8 @@ void LoadUnloadStation(Station *st) } /* Call the production machinery of industries */ - const Industry * const *isend = _cargo_delivery_destinations.End(); - for (Industry **iid = _cargo_delivery_destinations.Begin(); iid != isend; iid++) { - TriggerIndustryProduction(*iid); + for (Industry *iid : _cargo_delivery_destinations) { + TriggerIndustryProduction(iid); } _cargo_delivery_destinations.clear(); } diff --git a/src/engine.cpp b/src/engine.cpp index 7412ec639c..044faa5713 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -511,12 +511,12 @@ void EngineOverrideManager::ResetToDefaultMapping() */ EngineID EngineOverrideManager::GetID(VehicleType type, uint16 grf_local_id, uint32 grfid) { - const EngineIDMapping *end = this->End(); EngineID index = 0; - for (const EngineIDMapping *eid = this->Begin(); eid != end; eid++, index++) { - if (eid->type == type && eid->grfid == grfid && eid->internal_id == grf_local_id) { + for (const EngineIDMapping &eid : *this) { + if (eid.type == type && eid.grfid == grfid && eid.internal_id == grf_local_id) { return index; } + index++; } return INVALID_ENGINE; } @@ -549,14 +549,14 @@ void SetupEngines() _engine_pool.CleanPool(); assert(_engine_mngr.size() >= _engine_mngr.NUM_DEFAULT_ENGINES); - const EngineIDMapping *end = _engine_mngr.End(); uint index = 0; - for (const EngineIDMapping *eid = _engine_mngr.Begin(); eid != end; eid++, index++) { + for (const EngineIDMapping &eid : _engine_mngr) { /* Assert is safe; there won't be more than 256 original vehicles * in any case, and we just cleaned the pool. */ assert(Engine::CanAllocateItem()); - const Engine *e = new Engine(eid->type, eid->internal_id); + const Engine *e = new Engine(eid.type, eid.internal_id); assert(e->index == index); + index++; } } diff --git a/src/engine_gui.cpp b/src/engine_gui.cpp index caf264e3d1..2c2440baf9 100644 --- a/src/engine_gui.cpp +++ b/src/engine_gui.cpp @@ -329,7 +329,7 @@ void EngList_Sort(GUIEngineList *el, EngList_SortTypeFunction compare) /* out-of-bounds access at the next line for size == 0 (even with operator[] at some systems) * generally, do not sort if there are less than 2 items */ if (size < 2) return; - QSortT(el->Begin(), size, compare); + QSortT(el->data(), size, compare); } /** diff --git a/src/fios.cpp b/src/fios.cpp index 6acb2d891e..c27e6d8afd 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -380,7 +380,7 @@ static void FiosGetFileList(SaveLoadOperation fop, fios_getlist_callback_proc *c { SortingBits order = _savegame_sort_order; _savegame_sort_order = SORT_BY_NAME | SORT_ASCENDING; - QSortT(file_list.files.Begin(), file_list.files.size(), CompareFiosItems); + QSortT(file_list.files.data(), file_list.files.size(), CompareFiosItems); _savegame_sort_order = order; } @@ -724,10 +724,10 @@ const char *FindScenario(const ContentInfo *ci, bool md5sum) { _scanner.Scan(false); - for (ScenarioIdentifier *id = _scanner.Begin(); id != _scanner.End(); id++) { - if (md5sum ? (memcmp(id->md5sum, ci->md5sum, sizeof(id->md5sum)) == 0) - : (id->scenid == ci->unique_id)) { - return id->filename; + for (ScenarioIdentifier &id : _scanner) { + if (md5sum ? (memcmp(id.md5sum, ci->md5sum, sizeof(id.md5sum)) == 0) + : (id.scenid == ci->unique_id)) { + return id.filename; } } diff --git a/src/fios.h b/src/fios.h index b1d260f841..cc69178137 100644 --- a/src/fios.h +++ b/src/fios.h @@ -139,7 +139,7 @@ public: */ inline const FiosItem *Begin() const { - return this->files.Begin(); + return this->files.data(); } /** @@ -148,7 +148,7 @@ public: */ inline const FiosItem *End() const { - return this->files.End(); + return this->Begin() + this->Length(); } /** diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index 49c1deac37..b5bcee5e8c 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -57,9 +57,8 @@ void LoadCheckData::Clear() this->current_date = 0; memset(&this->settings, 0, sizeof(this->settings)); - const CompanyPropertiesMap::iterator end = this->companies.End(); - for (CompanyPropertiesMap::iterator it = this->companies.Begin(); it != end; it++) { - delete it->second; + for (auto &pair : this->companies) { + delete pair.second; } companies.clear(); @@ -531,10 +530,9 @@ public: if (y > y_max) break; /* Companies / AIs */ - CompanyPropertiesMap::const_iterator end = _load_check_data.companies.End(); - for (CompanyPropertiesMap::const_iterator it = _load_check_data.companies.Begin(); it != end; it++) { - SetDParam(0, it->first + 1); - const CompanyProperties &c = *it->second; + for (auto &pair : _load_check_data.companies) { + SetDParam(0, pair.first + 1); + const CompanyProperties &c = *pair.second; if (c.name != NULL) { SetDParam(1, STR_JUST_RAW_STRING); SetDParamStr(2, c.name); diff --git a/src/fontcache.cpp b/src/fontcache.cpp index 2811f17989..82a441814f 100644 --- a/src/fontcache.cpp +++ b/src/fontcache.cpp @@ -411,8 +411,8 @@ FreeTypeFontCache::~FreeTypeFontCache() this->face = NULL; this->ClearFontCache(); - for (FontTable::iterator iter = this->font_tables.Begin(); iter != this->font_tables.End(); iter++) { - free(iter->second.second); + for (auto &iter : this->font_tables) { + free(iter.second.second); } } @@ -633,7 +633,7 @@ GlyphID FreeTypeFontCache::MapCharToGlyph(WChar key) const void *FreeTypeFontCache::GetFontTable(uint32 tag, size_t &length) { const FontTable::iterator iter = this->font_tables.Find(tag); - if (iter != this->font_tables.End()) { + if (iter != this->font_tables.data() + this->font_tables.size()) { length = iter->second.first; return iter->second.second; } diff --git a/src/game/game_text.cpp b/src/game/game_text.cpp index 4d67b69553..d57b2bc77f 100644 --- a/src/game/game_text.cpp +++ b/src/game/game_text.cpp @@ -147,7 +147,7 @@ struct StringListReader : StringReader { * @param translation Are we reading a translation? */ StringListReader(StringData &data, const LanguageStrings *strings, bool master, bool translation) : - StringReader(data, strings->language, master, translation), p(strings->lines.Begin()), end(strings->lines.End()) + StringReader(data, strings->language, master, translation), p(strings->lines.data()), end(p + strings->lines.size()) { } @@ -318,13 +318,13 @@ void GameStrings::Compile() StringNameWriter id_writer(&this->string_names); id_writer.WriteHeader(data); - for (LanguageStrings **p = this->raw_strings.Begin(); p != this->raw_strings.End(); p++) { + for (LanguageStrings *p : this->raw_strings) { data.FreeTranslation(); - StringListReader translation_reader(data, *p, false, strcmp((*p)->language, "english") != 0); + StringListReader translation_reader(data, p, false, strcmp(p->language, "english") != 0); translation_reader.ParseFile(); if (_errors != 0) throw std::exception(); - this->compiled_strings.push_back(new LanguageStrings((*p)->language)); + this->compiled_strings.push_back(new LanguageStrings(p->language)); TranslationWriter writer(&this->compiled_strings.back()->lines); writer.WriteLang(data); } @@ -360,10 +360,11 @@ void RegisterGameTranslation(Squirrel *engine) if (SQ_FAILED(sq_get(vm, -2))) return; int idx = 0; - for (const char * const *p = _current_data->string_names.Begin(); p != _current_data->string_names.End(); p++, idx++) { - sq_pushstring(vm, *p, -1); + for (const char * const p : _current_data->string_names) { + sq_pushstring(vm, p, -1); sq_pushinteger(vm, idx); sq_rawset(vm, -3); + idx++; } sq_pop(vm, 2); @@ -391,9 +392,9 @@ void ReconsiderGameScriptLanguage() assert(language != NULL); language++; - for (LanguageStrings **p = _current_data->compiled_strings.Begin(); p != _current_data->compiled_strings.End(); p++) { - if (strcmp((*p)->language, language) == 0) { - _current_data->cur_language = *p; + for (LanguageStrings *p : _current_data->compiled_strings) { + if (strcmp(p->language, language) == 0) { + _current_data->cur_language = p; return; } } diff --git a/src/gfx.cpp b/src/gfx.cpp index dad675772a..df3e5ccb6b 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -511,7 +511,7 @@ int DrawString(int left, int right, int top, const char *str, TextColour colour, Layouter layout(str, INT32_MAX, colour, fontsize); if (layout.size() == 0) return 0; - return DrawLayoutLine(*layout.Begin(), top, left, right, align, underline, true); + return DrawLayoutLine(layout.front(), top, left, right, align, underline, true); } /** @@ -647,8 +647,7 @@ int DrawStringMultiLine(int left, int right, int top, int bottom, const char *st int last_line = top; int first_line = bottom; - for (const ParagraphLayouter::Line **iter = layout.Begin(); iter != layout.End(); iter++) { - const ParagraphLayouter::Line *line = *iter; + for (const ParagraphLayouter::Line *line : layout) { int line_height = line->GetLeading(); if (y >= top && y < bottom) { diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index ee0ba15332..6d4759cfbd 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -196,13 +196,13 @@ public: /* ICU's ParagraphLayout cannot handle empty strings, so fake one. */ buff[0] = ' '; length = 1; - fontMapping.End()[-1].first++; + fontMapping.back().first++; } /* Fill ICU's FontRuns with the right data. */ icu::FontRuns runs(fontMapping.size()); - for (FontMap::iterator iter = fontMapping.Begin(); iter != fontMapping.End(); iter++) { - runs.add(iter->second, iter->first); + for (auto &pair : fontMapping) { + runs.add(pair.second, pair.first); } LEErrorCode status = LE_NO_ERROR; @@ -419,8 +419,8 @@ int FallbackParagraphLayout::FallbackVisualRun::GetLeading() const int FallbackParagraphLayout::FallbackLine::GetLeading() const { int leading = 0; - for (const FallbackVisualRun * const *run = this->Begin(); run != this->End(); run++) { - leading = max(leading, (*run)->GetLeading()); + for (const FallbackVisualRun * const &run : *this) { + leading = max(leading, run->GetLeading()); } return leading; @@ -498,12 +498,12 @@ const ParagraphLayouter::Line *FallbackParagraphLayout::NextLine(int max_width) if (*this->buffer == '\0') { /* Only a newline. */ this->buffer = NULL; - l->push_back(new FallbackVisualRun(this->runs.Begin()->second, this->buffer, 0, 0)); + l->push_back(new FallbackVisualRun(this->runs.front().second, this->buffer, 0, 0)); return l; } int offset = this->buffer - this->buffer_begin; - FontMap::iterator iter = this->runs.Begin(); + FontMap::iterator iter = this->runs.data(); while (iter->first <= offset) { iter++; assert(iter != this->runs.End()); @@ -733,9 +733,9 @@ Layouter::Layouter(const char *str, int maxw, TextColour colour, FontSize fontsi Dimension Layouter::GetBounds() { Dimension d = { 0, 0 }; - for (const ParagraphLayouter::Line **l = this->Begin(); l != this->End(); l++) { - d.width = max(d.width, (*l)->GetWidth()); - d.height += (*l)->GetLeading(); + for (const ParagraphLayouter::Line *l : *this) { + d.width = max(d.width, l->GetWidth()); + d.height += l->GetLeading(); } return d; } @@ -757,12 +757,12 @@ Point Layouter::GetCharPosition(const char *ch) const size_t len = Utf8Decode(&c, str); if (c == '\0' || c == '\n') break; str += len; - index += (*this->Begin())->GetInternalCharLength(c); + index += this->front()->GetInternalCharLength(c); } if (str == ch) { /* Valid character. */ - const ParagraphLayouter::Line *line = *this->Begin(); + const ParagraphLayouter::Line *line = this->front(); /* Pointer to the end-of-string/line marker? Return total line width. */ if (*ch == '\0' || *ch == '\n') { @@ -795,7 +795,7 @@ Point Layouter::GetCharPosition(const char *ch) const */ const char *Layouter::GetCharAtPosition(int x) const { - const ParagraphLayouter::Line *line = *this->Begin(); + const ParagraphLayouter::Line *line = this->front(); for (int run_index = 0; run_index < line->CountRuns(); run_index++) { const ParagraphLayouter::VisualRun *run = line->GetVisualRun(run_index); @@ -844,8 +844,8 @@ Font *Layouter::GetFont(FontSize size, TextColour colour) */ void Layouter::ResetFontCache(FontSize size) { - for (FontColourMap::iterator it = fonts[size].Begin(); it != fonts[size].End(); ++it) { - delete it->second; + for (auto &pair : fonts[size]) { + delete pair.second; } fonts[size].clear(); diff --git a/src/group_gui.cpp b/src/group_gui.cpp index eb7aac0b71..59b5112ff1 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -127,11 +127,11 @@ private: void AddChildren(GUIGroupList *source, GroupID parent, int indent) { - for (const Group **g = source->Begin(); g != source->End(); g++) { - if ((*g)->parent != parent) continue; - this->groups.push_back(*g); + for (const Group *g : *source) { + if (g->parent != parent) continue; + this->groups.push_back(g); this->indents.push_back(indent); - AddChildren(source, (*g)->index, indent + 1); + AddChildren(source, g->index, indent + 1); } } diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp index 39cf4c0a1a..0acc11c473 100644 --- a/src/hotkeys.cpp +++ b/src/hotkeys.cpp @@ -316,11 +316,11 @@ static void SaveLoadHotkeys(bool save) IniFile *ini = new IniFile(); ini->LoadFromDisk(_hotkeys_file, NO_DIRECTORY); - for (HotkeyList **list = _hotkey_lists->Begin(); list != _hotkey_lists->End(); ++list) { + for (HotkeyList *list : *_hotkey_lists) { if (save) { - (*list)->Save(ini); + list->Save(ini); } else { - (*list)->Load(ini); + list->Load(ini); } } @@ -343,11 +343,11 @@ void SaveHotkeysToConfig() void HandleGlobalHotkeys(WChar key, uint16 keycode) { - for (HotkeyList **list = _hotkey_lists->Begin(); list != _hotkey_lists->End(); ++list) { - if ((*list)->global_hotkey_handler == NULL) continue; + for (HotkeyList *list : *_hotkey_lists) { + if (list->global_hotkey_handler == NULL) continue; - int hotkey = (*list)->CheckMatch(keycode, true); - if (hotkey >= 0 && ((*list)->global_hotkey_handler(hotkey) == ES_HANDLED)) return; + int hotkey = list->CheckMatch(keycode, true); + if (hotkey >= 0 && (list->global_hotkey_handler(hotkey) == ES_HANDLED)) return; } } diff --git a/src/music/dmusic.cpp b/src/music/dmusic.cpp index a03a6ec57e..241ab191bf 100644 --- a/src/music/dmusic.cpp +++ b/src/music/dmusic.cpp @@ -751,7 +751,7 @@ static void MidiThreadProc(void *) block_time = playback_start_time + block.realtime * MIDITIME_TO_REFTIME; DEBUG(driver, 9, "DMusic thread: Streaming block " PRINTF_SIZE " (cur=" OTTD_PRINTF64 ", block=" OTTD_PRINTF64 ")", current_block, (long long)(current_time / MS_TO_REFTIME), (long long)(block_time / MS_TO_REFTIME)); - byte *data = block.data.Begin(); + byte *data = block.data.data(); size_t remaining = block.data.size(); byte last_status = 0; while (remaining > 0) { diff --git a/src/music/midifile.cpp b/src/music/midifile.cpp index 82649679fa..97fb2edf80 100644 --- a/src/music/midifile.cpp +++ b/src/music/midifile.cpp @@ -336,7 +336,7 @@ static bool FixupMidiData(MidiFile &target) last_ticktime = block.ticktime; } else { byte *datadest = grow(merged_blocks.back().data, block.data.size()); - memcpy(datadest, block.data.Begin(), block.data.size()); + memcpy(datadest, block.data.data(), block.data.size()); } } std::swap(merged_blocks, target.blocks); @@ -940,8 +940,8 @@ bool MidiFile::WriteSMF(const char *filename) } /* Write each block data command */ - byte *dp = block.data.Begin(); - while (dp < block.data.End()) { + byte *dp = block.data.data(); + while (dp < block.data.data() + block.data.size()) { /* Always zero delta time inside blocks */ if (needtime) { fputc(0, f); diff --git a/src/music/win32_m.cpp b/src/music/win32_m.cpp index 6d88af4a3c..18a3bce3e7 100644 --- a/src/music/win32_m.cpp +++ b/src/music/win32_m.cpp @@ -229,7 +229,7 @@ void CALLBACK TimerCallback(UINT uTimerID, UINT, DWORD_PTR dwUser, DWORD_PTR, DW break; } - byte *data = block.data.Begin(); + byte *data = block.data.data(); size_t remaining = block.data.size(); byte last_status = 0; while (remaining > 0) { diff --git a/src/network/core/host.cpp b/src/network/core/host.cpp index b1ed71e926..35c7ce8ae8 100644 --- a/src/network/core/host.cpp +++ b/src/network/core/host.cpp @@ -200,8 +200,8 @@ void NetworkFindBroadcastIPs(NetworkAddressList *broadcast) /* Now display to the debug all the detected ips */ DEBUG(net, 3, "Detected broadcast addresses:"); int i = 0; - for (NetworkAddress *addr = broadcast->Begin(); addr != broadcast->End(); addr++) { - addr->SetPort(NETWORK_DEFAULT_PORT); - DEBUG(net, 3, "%d) %s", i++, addr->GetHostname()); + for (NetworkAddress &addr : *broadcast) { + addr.SetPort(NETWORK_DEFAULT_PORT); + DEBUG(net, 3, "%d) %s", i++, addr.GetHostname()); } } diff --git a/src/network/core/tcp_connect.cpp b/src/network/core/tcp_connect.cpp index f3dc2cb9aa..d699cf60d0 100644 --- a/src/network/core/tcp_connect.cpp +++ b/src/network/core/tcp_connect.cpp @@ -93,5 +93,5 @@ void TCPConnecter::Connect() /** Kill all connection attempts. */ /* static */ void TCPConnecter::KillAll() { - for (TCPConnecter **iter = _tcp_connecters.Begin(); iter != _tcp_connecters.End(); iter++) (*iter)->killed = true; + for (TCPConnecter *conn : _tcp_connecters) conn->killed = true; } diff --git a/src/network/core/tcp_http.cpp b/src/network/core/tcp_http.cpp index abec3fbc87..cec77fb147 100644 --- a/src/network/core/tcp_http.cpp +++ b/src/network/core/tcp_http.cpp @@ -303,8 +303,8 @@ int NetworkHTTPSocketHandler::Receive() struct timeval tv; FD_ZERO(&read_fd); - for (NetworkHTTPSocketHandler **iter = _http_connections.Begin(); iter < _http_connections.End(); iter++) { - FD_SET((*iter)->sock, &read_fd); + for (NetworkHTTPSocketHandler *handler : _http_connections) { + FD_SET(handler->sock, &read_fd); } tv.tv_sec = tv.tv_usec = 0; // don't block at all. diff --git a/src/network/core/tcp_listen.h b/src/network/core/tcp_listen.h index 55594070be..744f8841fd 100644 --- a/src/network/core/tcp_listen.h +++ b/src/network/core/tcp_listen.h @@ -54,13 +54,13 @@ public: /* Check if the client is banned */ bool banned = false; - for (char **iter = _network_ban_list.Begin(); iter != _network_ban_list.End(); iter++) { - banned = address.IsInNetmask(*iter); + for (char *entry : _network_ban_list) { + banned = address.IsInNetmask(entry); if (banned) { Packet p(Tban_packet); p.PrepareToSend(); - DEBUG(net, 1, "[%s] Banned ip tried to join (%s), refused", Tsocket::GetName(), *iter); + DEBUG(net, 1, "[%s] Banned ip tried to join (%s), refused", Tsocket::GetName(), entry); if (send(s, (const char*)p.buffer, p.size, 0) < 0) { DEBUG(net, 0, "send failed with error %d", GET_LAST_ERROR()); @@ -111,16 +111,16 @@ public: } /* take care of listener port */ - for (SocketList::iterator s = sockets.Begin(); s != sockets.End(); s++) { - FD_SET(s->second, &read_fd); + for (auto &s : sockets) { + FD_SET(s.second, &read_fd); } tv.tv_sec = tv.tv_usec = 0; // don't block at all. if (select(FD_SETSIZE, &read_fd, &write_fd, NULL, &tv) < 0) return false; /* accept clients.. */ - for (SocketList::iterator s = sockets.Begin(); s != sockets.End(); s++) { - if (FD_ISSET(s->second, &read_fd)) AcceptClient(s->second); + for (auto &s : sockets) { + if (FD_ISSET(s.second, &read_fd)) AcceptClient(s.second); } /* read stuff from clients */ @@ -145,8 +145,8 @@ public: NetworkAddressList addresses; GetBindAddresses(&addresses, port); - for (NetworkAddress *address = addresses.Begin(); address != addresses.End(); address++) { - address->Listen(SOCK_STREAM, &sockets); + for (NetworkAddress &address : addresses) { + address.Listen(SOCK_STREAM, &sockets); } if (sockets.size() == 0) { @@ -161,8 +161,8 @@ public: /** Close the sockets we're listening on. */ static void CloseListeners() { - for (SocketList::iterator s = sockets.Begin(); s != sockets.End(); s++) { - closesocket(s->second); + for (auto &s : sockets) { + closesocket(s.second); } sockets.clear(); DEBUG(net, 1, "[%s] closed listeners", Tsocket::GetName()); diff --git a/src/network/core/udp.cpp b/src/network/core/udp.cpp index 7babf78d69..70bb0b9f05 100644 --- a/src/network/core/udp.cpp +++ b/src/network/core/udp.cpp @@ -25,8 +25,8 @@ NetworkUDPSocketHandler::NetworkUDPSocketHandler(NetworkAddressList *bind) { if (bind != NULL) { - for (NetworkAddress *addr = bind->Begin(); addr != bind->End(); addr++) { - this->bind.push_back(*addr); + for (NetworkAddress &addr : *bind) { + this->bind.push_back(addr); } } else { /* As hostname NULL and port 0/NULL don't go well when @@ -47,8 +47,8 @@ bool NetworkUDPSocketHandler::Listen() /* Make sure socket is closed */ this->Close(); - for (NetworkAddress *addr = this->bind.Begin(); addr != this->bind.End(); addr++) { - addr->Listen(SOCK_DGRAM, &this->sockets); + for (NetworkAddress &addr : this->bind) { + addr.Listen(SOCK_DGRAM, &this->sockets); } return this->sockets.size() != 0; @@ -59,8 +59,8 @@ bool NetworkUDPSocketHandler::Listen() */ void NetworkUDPSocketHandler::Close() { - for (SocketList::iterator s = this->sockets.Begin(); s != this->sockets.End(); s++) { - closesocket(s->second); + for (auto &s : this->sockets) { + closesocket(s.second); } this->sockets.clear(); } @@ -82,26 +82,26 @@ void NetworkUDPSocketHandler::SendPacket(Packet *p, NetworkAddress *recv, bool a { if (this->sockets.size() == 0) this->Listen(); - for (SocketList::iterator s = this->sockets.Begin(); s != this->sockets.End(); s++) { + for (auto &s : this->sockets) { /* Make a local copy because if we resolve it we cannot * easily unresolve it so we can resolve it later again. */ NetworkAddress send(*recv); /* Not the same type */ - if (!send.IsFamily(s->first.GetAddress()->ss_family)) continue; + if (!send.IsFamily(s.first.GetAddress()->ss_family)) continue; p->PrepareToSend(); if (broadcast) { /* Enable broadcast */ unsigned long val = 1; - if (setsockopt(s->second, SOL_SOCKET, SO_BROADCAST, (char *) &val, sizeof(val)) < 0) { + if (setsockopt(s.second, SOL_SOCKET, SO_BROADCAST, (char *) &val, sizeof(val)) < 0) { DEBUG(net, 1, "[udp] setting broadcast failed with: %i", GET_LAST_ERROR()); } } /* Send the buffer */ - int res = sendto(s->second, (const char*)p->buffer, p->size, 0, (const struct sockaddr *)send.GetAddress(), send.GetAddressLength()); + int res = sendto(s.second, (const char*)p->buffer, p->size, 0, (const struct sockaddr *)send.GetAddress(), send.GetAddressLength()); DEBUG(net, 7, "[udp] sendto(%s)", send.GetAddressAsString()); /* Check for any errors, but ignore it otherwise */ @@ -116,7 +116,7 @@ void NetworkUDPSocketHandler::SendPacket(Packet *p, NetworkAddress *recv, bool a */ void NetworkUDPSocketHandler::ReceivePackets() { - for (SocketList::iterator s = this->sockets.Begin(); s != this->sockets.End(); s++) { + for (auto &s : this->sockets) { for (int i = 0; i < 1000; i++) { // Do not infinitely loop when DoSing with UDP struct sockaddr_storage client_addr; memset(&client_addr, 0, sizeof(client_addr)); @@ -125,8 +125,8 @@ void NetworkUDPSocketHandler::ReceivePackets() socklen_t client_len = sizeof(client_addr); /* Try to receive anything */ - SetNonBlocking(s->second); // Some OSes seem to lose the non-blocking status of the socket - int nbytes = recvfrom(s->second, (char*)p.buffer, SEND_MTU, 0, (struct sockaddr *)&client_addr, &client_len); + SetNonBlocking(s.second); // Some OSes seem to lose the non-blocking status of the socket + int nbytes = recvfrom(s.second, (char*)p.buffer, SEND_MTU, 0, (struct sockaddr *)&client_addr, &client_len); /* Did we get the bytes for the base header of the packet? */ if (nbytes <= 0) break; // No data, i.e. no packet diff --git a/src/network/network.cpp b/src/network/network.cpp index 1ddd7478ce..be92623e41 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -632,8 +632,8 @@ void NetworkAddServer(const char *b) */ void GetBindAddresses(NetworkAddressList *addresses, uint16 port) { - for (char **iter = _network_bind_list.Begin(); iter != _network_bind_list.End(); iter++) { - addresses->emplace_back(*iter, port); + for (char *iter : _network_bind_list) { + addresses->emplace_back(iter, port); } /* No address, so bind to everything. */ diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index fff4dd328c..12aa3fc0ad 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -110,7 +110,7 @@ struct PacketReader : LoadFilter { { this->read_bytes = 0; - this->block = this->blocks.Begin(); + this->block = this->blocks.data(); this->buf = *this->block++; this->bufe = this->buf + CHUNK; } diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 617a2bc6b6..003ffdb8ba 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -137,8 +137,7 @@ bool ClientNetworkContentSocketHandler::Receive_SERVER_INFO(Packet *p) if (ci->state == ContentInfo::UNSELECTED && ci->filesize == 0) ci->state = ContentInfo::DOES_NOT_EXIST; /* Do we already have a stub for this? */ - for (ContentIterator iter = this->infos.Begin(); iter != this->infos.End(); iter++) { - ContentInfo *ici = *iter; + for (ContentInfo *ici : this->infos) { if (ici->type == ci->type && ici->unique_id == ci->unique_id && memcmp(ci->md5sum, ici->md5sum, sizeof(ci->md5sum)) == 0) { /* Preserve the name if possible */ @@ -168,8 +167,8 @@ bool ClientNetworkContentSocketHandler::Receive_SERVER_INFO(Packet *p) this->infos.push_back(ci); /* Incoming data means that we might need to reconsider dependencies */ - for (ContentIterator iter = this->infos.Begin(); iter != this->infos.End(); iter++) { - this->CheckDependencyState(*iter); + for (ContentInfo *ici : this->infos) { + this->CheckDependencyState(ici); } this->OnReceiveContentInfo(ci); @@ -253,8 +252,7 @@ void ClientNetworkContentSocketHandler::RequestContentList(ContentVector *cv, bo Packet *p = new Packet(send_md5sum ? PACKET_CONTENT_CLIENT_INFO_EXTID_MD5 : PACKET_CONTENT_CLIENT_INFO_EXTID); p->Send_uint8(cv->size()); - for (ContentIterator iter = cv->Begin(); iter != cv->End(); iter++) { - const ContentInfo *ci = *iter; + for (const ContentInfo *ci : *cv) { p->Send_uint8((byte)ci->type); p->Send_uint32(ci->unique_id); if (!send_md5sum) continue; @@ -266,11 +264,9 @@ void ClientNetworkContentSocketHandler::RequestContentList(ContentVector *cv, bo this->SendPacket(p); - for (ContentIterator iter = cv->Begin(); iter != cv->End(); iter++) { - ContentInfo *ci = *iter; + for (ContentInfo *ci : *cv) { bool found = false; - for (ContentIterator iter2 = this->infos.Begin(); iter2 != this->infos.End(); iter2++) { - ContentInfo *ci2 = *iter2; + for (ContentInfo *ci2 : this->infos) { if (ci->type == ci2->type && ci->unique_id == ci2->unique_id && (!send_md5sum || memcmp(ci->md5sum, ci2->md5sum, sizeof(ci->md5sum)) == 0)) { found = true; @@ -296,8 +292,7 @@ void ClientNetworkContentSocketHandler::DownloadSelectedContent(uint &files, uin bytes = 0; ContentIDList content; - for (ContentIterator iter = this->infos.Begin(); iter != this->infos.End(); iter++) { - const ContentInfo *ci = *iter; + for (const ContentInfo *ci : this->infos) { if (!ci->IsSelected() || ci->state == ContentInfo::ALREADY_HERE) continue; content.push_back(ci->id); @@ -333,8 +328,8 @@ void ClientNetworkContentSocketHandler::DownloadSelectedContentHTTP(const Conten const char *lastof = content_request + bytes - 1; char *p = content_request; - for (const ContentID *id = content.Begin(); id != content.End(); id++) { - p += seprintf(p, lastof, "%d\n", *id); + for (const ContentID &id : content) { + p += seprintf(p, lastof, "%d\n", id); } this->http_response_index = -1; @@ -351,7 +346,7 @@ void ClientNetworkContentSocketHandler::DownloadSelectedContentHTTP(const Conten void ClientNetworkContentSocketHandler::DownloadSelectedContentFallback(const ContentIDList &content) { uint count = content.size(); - const ContentID *content_ids = content.Begin(); + const ContentID *content_ids = content.data(); this->Connect(); while (count > 0) { @@ -626,7 +621,7 @@ void ClientNetworkContentSocketHandler::OnReceiveData(const char *data, size_t l #define check_and_terminate(p) { check_not_null(p); *(p) = '\0'; } for (;;) { - char *str = this->http_response.Begin() + this->http_response_index; + char *str = this->http_response.data() + this->http_response_index; char *p = strchr(str, '\n'); check_and_terminate(p); @@ -713,7 +708,7 @@ ClientNetworkContentSocketHandler::~ClientNetworkContentSocketHandler() delete this->curInfo; if (this->curFile != NULL) fclose(this->curFile); - for (ContentIterator iter = this->infos.Begin(); iter != this->infos.End(); iter++) delete *iter; + for (ContentInfo *ci : this->infos) delete ci; } /** Connect to the content server. */ @@ -807,8 +802,7 @@ void ClientNetworkContentSocketHandler::DownloadContentInfo(ContentID cid) */ ContentInfo *ClientNetworkContentSocketHandler::GetContent(ContentID cid) { - for (ContentIterator iter = this->infos.Begin(); iter != this->infos.End(); iter++) { - ContentInfo *ci = *iter; + for (ContentInfo *ci : this->infos) { if (ci->id == cid) return ci; } return NULL; @@ -844,8 +838,7 @@ void ClientNetworkContentSocketHandler::Unselect(ContentID cid) /** Select everything we can select */ void ClientNetworkContentSocketHandler::SelectAll() { - for (ContentIterator iter = this->infos.Begin(); iter != this->infos.End(); iter++) { - ContentInfo *ci = *iter; + for (ContentInfo *ci : this->infos) { if (ci->state == ContentInfo::UNSELECTED) { ci->state = ContentInfo::SELECTED; this->CheckDependencyState(ci); @@ -856,8 +849,7 @@ void ClientNetworkContentSocketHandler::SelectAll() /** Select everything that's an update for something we've got */ void ClientNetworkContentSocketHandler::SelectUpgrade() { - for (ContentIterator iter = this->infos.Begin(); iter != this->infos.End(); iter++) { - ContentInfo *ci = *iter; + for (ContentInfo *ci : this->infos) { if (ci->state == ContentInfo::UNSELECTED && ci->upgrade) { ci->state = ContentInfo::SELECTED; this->CheckDependencyState(ci); @@ -868,8 +860,7 @@ void ClientNetworkContentSocketHandler::SelectUpgrade() /** Unselect everything that we've not downloaded so far. */ void ClientNetworkContentSocketHandler::UnselectAll() { - for (ContentIterator iter = this->infos.Begin(); iter != this->infos.End(); iter++) { - ContentInfo *ci = *iter; + for (ContentInfo *ci : this->infos) { if (ci->IsSelected() && ci->state != ContentInfo::ALREADY_HERE) ci->state = ContentInfo::UNSELECTED; } } @@ -899,8 +890,7 @@ void ClientNetworkContentSocketHandler::ToggleSelectedState(const ContentInfo *c */ void ClientNetworkContentSocketHandler::ReverseLookupDependency(ConstContentVector &parents, const ContentInfo *child) const { - for (ConstContentIterator iter = this->infos.Begin(); iter != this->infos.End(); iter++) { - const ContentInfo *ci = *iter; + for (const ContentInfo * const &ci : this->infos) { if (ci == child) continue; for (uint i = 0; i < ci->dependency_count; i++) { @@ -929,8 +919,8 @@ void ClientNetworkContentSocketHandler::ReverseLookupTreeDependency(ConstContent ConstContentVector parents; this->ReverseLookupDependency(parents, tree[i]); - for (ConstContentIterator piter = parents.Begin(); piter != parents.End(); piter++) { - include(tree, *piter); + for (const ContentInfo *ci : parents) { + include(tree, ci); } } } @@ -965,8 +955,7 @@ void ClientNetworkContentSocketHandler::CheckDependencyState(ContentInfo *ci) * we automatically selected them. */ ConstContentVector parents; this->ReverseLookupDependency(parents, ci); - for (ConstContentIterator iter = parents.Begin(); iter != parents.End(); iter++) { - const ContentInfo *c = *iter; + for (const ContentInfo *c : parents) { if (!c->IsSelected()) continue; this->Unselect(c->id); @@ -987,9 +976,9 @@ void ClientNetworkContentSocketHandler::CheckDependencyState(ContentInfo *ci) /* First check whether anything depends on us */ int sel_count = 0; bool force_selection = false; - for (ConstContentIterator iter = parents.Begin(); iter != parents.End(); iter++) { - if ((*iter)->IsSelected()) sel_count++; - if ((*iter)->state == ContentInfo::SELECTED) force_selection = true; + for (const ContentInfo *ci : parents) { + if (ci->IsSelected()) sel_count++; + if (ci->state == ContentInfo::SELECTED) force_selection = true; } if (sel_count == 0) { /* Nothing depends on us */ @@ -1004,8 +993,8 @@ void ClientNetworkContentSocketHandler::CheckDependencyState(ContentInfo *ci) this->ReverseLookupTreeDependency(parents, c); /* Is there anything that is "force" selected?, if so... we're done. */ - for (ConstContentIterator iter = parents.Begin(); iter != parents.End(); iter++) { - if ((*iter)->state != ContentInfo::SELECTED) continue; + for (const ContentInfo *ci : parents) { + if (ci->state != ContentInfo::SELECTED) continue; force_selection = true; break; @@ -1018,12 +1007,11 @@ void ClientNetworkContentSocketHandler::CheckDependencyState(ContentInfo *ci) * After that's done run over them once again to test their children * to unselect. Don't do it immediately because it'll do exactly what * we're doing now. */ - for (ConstContentIterator iter = parents.Begin(); iter != parents.End(); iter++) { - const ContentInfo *c = *iter; + for (const ContentInfo *c : parents) { if (c->state == ContentInfo::AUTOSELECTED) this->Unselect(c->id); } - for (ConstContentIterator iter = parents.Begin(); iter != parents.End(); iter++) { - this->CheckDependencyState(this->GetContent((*iter)->id)); + for (const ContentInfo *c : parents) { + this->CheckDependencyState(this->GetContent(c->id)); } } } @@ -1031,7 +1019,7 @@ void ClientNetworkContentSocketHandler::CheckDependencyState(ContentInfo *ci) /** Clear all downloaded content information. */ void ClientNetworkContentSocketHandler::Clear() { - for (ContentIterator iter = this->infos.Begin(); iter != this->infos.End(); iter++) delete *iter; + for (ContentInfo *c : this->infos) delete c; this->infos.clear(); this->requested.clear(); @@ -1041,37 +1029,37 @@ void ClientNetworkContentSocketHandler::Clear() void ClientNetworkContentSocketHandler::OnConnect(bool success) { - for (ContentCallback **iter = this->callbacks.Begin(); iter != this->callbacks.End(); /* nothing */) { + for (auto iter = this->callbacks.begin(); iter != this->callbacks.end(); /* nothing */) { ContentCallback *cb = *iter; cb->OnConnect(success); - if (iter != this->callbacks.End() && *iter == cb) iter++; + if (iter != this->callbacks.end() && *iter == cb) iter++; } } void ClientNetworkContentSocketHandler::OnDisconnect() { - for (ContentCallback **iter = this->callbacks.Begin(); iter != this->callbacks.End(); /* nothing */) { + for (auto iter = this->callbacks.begin(); iter != this->callbacks.end(); /* nothing */) { ContentCallback *cb = *iter; cb->OnDisconnect(); - if (iter != this->callbacks.End() && *iter == cb) iter++; + if (iter != this->callbacks.end() && *iter == cb) iter++; } } void ClientNetworkContentSocketHandler::OnReceiveContentInfo(const ContentInfo *ci) { - for (ContentCallback **iter = this->callbacks.Begin(); iter != this->callbacks.End(); /* nothing */) { + for (auto iter = this->callbacks.begin(); iter != this->callbacks.end(); /* nothing */) { ContentCallback *cb = *iter; cb->OnReceiveContentInfo(ci); - if (iter != this->callbacks.End() && *iter == cb) iter++; + if (iter != this->callbacks.end() && *iter == cb) iter++; } } void ClientNetworkContentSocketHandler::OnDownloadProgress(const ContentInfo *ci, int bytes) { - for (ContentCallback **iter = this->callbacks.Begin(); iter != this->callbacks.End(); /* nothing */) { + for (auto iter = this->callbacks.begin(); iter != this->callbacks.end(); /* nothing */) { ContentCallback *cb = *iter; cb->OnDownloadProgress(ci, bytes); - if (iter != this->callbacks.End() && *iter == cb) iter++; + if (iter != this->callbacks.end() && *iter == cb) iter++; } } @@ -1082,9 +1070,9 @@ void ClientNetworkContentSocketHandler::OnDownloadComplete(ContentID cid) ci->state = ContentInfo::ALREADY_HERE; } - for (ContentCallback **iter = this->callbacks.Begin(); iter != this->callbacks.End(); /* nothing */) { + for (auto iter = this->callbacks.begin(); iter != this->callbacks.end(); /* nothing */) { ContentCallback *cb = *iter; cb->OnDownloadComplete(cid); - if (iter != this->callbacks.End() && *iter == cb) iter++; + if (iter != this->callbacks.end() && *iter == cb) iter++; } } diff --git a/src/network/network_content.h b/src/network/network_content.h index 08e7755aae..26300c4ca2 100644 --- a/src/network/network_content.h +++ b/src/network/network_content.h @@ -131,11 +131,11 @@ public: /** Get the number of content items we know locally. */ uint Length() const { return this->infos.size(); } /** Get the begin of the content inf iterator. */ - ConstContentIterator Begin() const { return this->infos.Begin(); } + ConstContentIterator Begin() const { return this->infos.data(); } /** Get the nth position of the content inf iterator. */ ConstContentIterator Get(uint32 index) const { return this->infos.data() + index; } /** Get the end of the content inf iterator. */ - ConstContentIterator End() const { return this->infos.End(); } + ConstContentIterator End() const { return this->Begin() + this->Length(); } void Clear(); diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 8e3ec9686a..9ea56d7471 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -176,8 +176,8 @@ public: ~NetworkContentDownloadStatusWindow() { TarScanner::Mode mode = TarScanner::NONE; - for (ContentType *iter = this->receivedTypes.Begin(); iter != this->receivedTypes.End(); iter++) { - switch (*iter) { + for (auto ctype : this->receivedTypes) { + switch (ctype) { case CONTENT_TYPE_AI: case CONTENT_TYPE_AI_LIBRARY: /* AI::Rescan calls the scanner. */ @@ -210,8 +210,8 @@ public: TarScanner::DoScan(mode); /* Tell all the backends about what we've downloaded */ - for (ContentType *iter = this->receivedTypes.Begin(); iter != this->receivedTypes.End(); iter++) { - switch (*iter) { + for (auto ctype : this->receivedTypes) { + switch (ctype) { case CONTENT_TYPE_AI: case CONTENT_TYPE_AI_LIBRARY: AI::Rescan(); @@ -333,8 +333,7 @@ class NetworkContentListWindow : public Window, ContentCallback { pos = strecpy(pos, "do=searchgrfid&q=", last); bool first = true; - for (ConstContentIterator iter = this->content.Begin(); iter != this->content.End(); iter++) { - const ContentInfo *ci = *iter; + for (const ContentInfo *ci : this->content) { if (ci->state != ContentInfo::DOES_NOT_EXIST) continue; if (!first) pos = strecpy(pos, ",", last); @@ -635,8 +634,13 @@ public: int sprite_y_offset = WD_MATRIX_TOP + (line_height - this->checkbox_size.height) / 2 - 1; int text_y_offset = WD_MATRIX_TOP + (line_height - FONT_HEIGHT_NORMAL) / 2; uint y = r.top; - int cnt = 0; - for (ConstContentIterator iter = this->content.data() + this->vscroll->GetPosition(); iter != this->content.End() && cnt < this->vscroll->GetCapacity(); iter++, cnt++) { + + auto iter = this->content.begin() + this->vscroll->GetPosition(); + auto end = iter + this->vscroll->GetCapacity(); + if (end > this->content.end()) + end = this->content.end(); + + for (/**/; iter != end; iter++) { const ContentInfo *ci = *iter; if (ci == this->selected) GfxFillRect(r.left + 1, y + 1, r.right - 1, y + this->resize.step_height - 1, PC_GREY); @@ -761,8 +765,7 @@ public: char buf[DRAW_STRING_BUFFER] = ""; char *p = buf; - for (ConstContentIterator iter = tree.Begin(); iter != tree.End(); iter++) { - const ContentInfo *ci = *iter; + for (const ContentInfo *ci : tree) { if (ci == this->selected || ci->state != ContentInfo::SELECTED) continue; p += seprintf(p, lastof(buf), buf == p ? "%s" : ", %s", ci->name); @@ -985,8 +988,7 @@ public: this->filesize_sum = 0; bool show_select_all = false; bool show_select_upgrade = false; - for (ConstContentIterator iter = this->content.Begin(); iter != this->content.End(); iter++) { - const ContentInfo *ci = *iter; + for (const ContentInfo *ci : this->content) { switch (ci->state) { case ContentInfo::SELECTED: case ContentInfo::AUTOSELECTED: @@ -1158,7 +1160,7 @@ void ShowNetworkContentListWindow(ContentVector *cv, ContentType type1, ContentT ShowErrorMessage(STR_CONTENT_NO_ZLIB, STR_CONTENT_NO_ZLIB_SUB, WL_ERROR); /* Connection failed... clean up the mess */ if (cv != NULL) { - for (ContentIterator iter = cv->Begin(); iter != cv->End(); iter++) delete *iter; + for (ContentInfo *ci : *cv) delete ci; } #endif /* WITH_ZLIB */ } diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 7b65f6b0c3..a8dd2aa526 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1045,8 +1045,8 @@ void ShowNetworkGameWindow() if (first) { first = false; /* Add all servers from the config file to our list. */ - for (char **iter = _network_host_list.Begin(); iter != _network_host_list.End(); iter++) { - NetworkAddServer(*iter); + for (char *iter : _network_host_list) { + NetworkAddServer(iter); } } @@ -1783,8 +1783,8 @@ struct NetworkClientListPopupWindow : Window { void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { Dimension d = *size; - for (const ClientListAction *action = this->actions.Begin(); action != this->actions.End(); action++) { - d = maxdim(GetStringBoundingBox(action->name), d); + for (const ClientListAction &action : this->actions) { + d = maxdim(GetStringBoundingBox(action.name), d); } d.height *= this->actions.size(); @@ -1798,7 +1798,7 @@ struct NetworkClientListPopupWindow : Window { /* Draw the actions */ int sel = this->sel_index; int y = r.top + WD_FRAMERECT_TOP; - for (const ClientListAction *action = this->actions.Begin(); action != this->actions.End(); action++, y += FONT_HEIGHT_NORMAL) { + for (const ClientListAction &action : this->actions) { TextColour colour; if (sel-- == 0) { // Selected item, highlight it GfxFillRect(r.left + 1, y, r.right - 1, y + FONT_HEIGHT_NORMAL - 1, PC_BLACK); @@ -1807,7 +1807,8 @@ struct NetworkClientListPopupWindow : Window { colour = TC_BLACK; } - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, action->name, colour); + DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, action.name, colour); + y += FONT_HEIGHT_NORMAL; } } diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 8a1e75d2f2..36dde0f2cf 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -2095,8 +2095,8 @@ uint NetworkServerKickOrBanIP(const char *ip, bool ban) /* Add address to ban-list */ if (ban) { bool contains = false; - for (char **iter = _network_ban_list.Begin(); iter != _network_ban_list.End(); iter++) { - if (strcmp(*iter, ip) == 0) { + for (char *iter : _network_ban_list) { + if (strcmp(iter, ip) == 0) { contains = true; break; } diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp index b416ee98e3..2d7ee2d3cf 100644 --- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -495,12 +495,12 @@ void ClientNetworkUDPSocketHandler::HandleIncomingNetworkGameInfoGRFConfig(GRFCo /** Broadcast to all ips */ static void NetworkUDPBroadCast(NetworkUDPSocketHandler *socket) { - for (NetworkAddress *addr = _broadcast_list.Begin(); addr != _broadcast_list.End(); addr++) { + for (NetworkAddress &addr : _broadcast_list) { Packet p(PACKET_UDP_CLIENT_FIND_SERVER); - DEBUG(net, 4, "[udp] broadcasting to %s", addr->GetHostname()); + DEBUG(net, 4, "[udp] broadcasting to %s", addr.GetHostname()); - socket->SendPacket(&p, addr, true, true); + socket->SendPacket(&p, &addr, true, true); } } diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 36a13aaaa3..8507d9d611 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -391,9 +391,8 @@ void CDECL grfmsg(int severity, const char *str, ...) */ static GRFFile *GetFileByGRFID(uint32 grfid) { - const GRFFile * const *end = _grf_files.End(); - for (GRFFile * const *file = _grf_files.Begin(); file != end; file++) { - if ((*file)->grfid == grfid) return *file; + for (GRFFile * const file : _grf_files) { + if (file->grfid == grfid) return file; } return NULL; } @@ -405,9 +404,8 @@ static GRFFile *GetFileByGRFID(uint32 grfid) */ static GRFFile *GetFileByFilename(const char *filename) { - const GRFFile * const *end = _grf_files.End(); - for (GRFFile * const *file = _grf_files.Begin(); file != end; file++) { - if (strcmp((*file)->filename, filename) == 0) return *file; + for (GRFFile * const file : _grf_files) { + if (strcmp(file->filename, filename) == 0) return file; } return NULL; } @@ -1923,7 +1921,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte /* On error, bail out immediately. Temporary GRF data was already freed */ if (_cur.skip_sprites < 0) return CIR_DISABLED; } - dts->Clone(tmp_layout.Begin()); + dts->Clone(tmp_layout.data()); } break; @@ -4826,7 +4824,7 @@ static void NewSpriteGroup(ByteReader *buf) group->num_adjusts = adjusts.size(); group->adjusts = MallocT(group->num_adjusts); - MemCpyT(group->adjusts, adjusts.Begin(), group->num_adjusts); + MemCpyT(group->adjusts, adjusts.data(), group->num_adjusts); std::vector ranges; ranges.resize(buf->ReadByte()); @@ -8094,9 +8092,8 @@ static void InitializeGRFSpecial() /** Reset and clear all NewGRF stations */ static void ResetCustomStations() { - const GRFFile * const *end = _grf_files.End(); - for (GRFFile **file = _grf_files.Begin(); file != end; file++) { - StationSpec **&stations = (*file)->stations; + for (GRFFile * const file : _grf_files) { + StationSpec **&stations = file->stations; if (stations == NULL) continue; for (uint i = 0; i < NUM_STATIONS_PER_GRF; i++) { if (stations[i] == NULL) continue; @@ -8129,9 +8126,8 @@ static void ResetCustomStations() /** Reset and clear all NewGRF houses */ static void ResetCustomHouses() { - const GRFFile * const *end = _grf_files.End(); - for (GRFFile **file = _grf_files.Begin(); file != end; file++) { - HouseSpec **&housespec = (*file)->housespec; + for (GRFFile * const file : _grf_files) { + HouseSpec **&housespec = file->housespec; if (housespec == NULL) continue; for (uint i = 0; i < NUM_HOUSES_PER_GRF; i++) { free(housespec[i]); @@ -8145,9 +8141,8 @@ static void ResetCustomHouses() /** Reset and clear all NewGRF airports */ static void ResetCustomAirports() { - const GRFFile * const *end = _grf_files.End(); - for (GRFFile **file = _grf_files.Begin(); file != end; file++) { - AirportSpec **aslist = (*file)->airportspec; + for (GRFFile * const file : _grf_files) { + AirportSpec **aslist = file->airportspec; if (aslist != NULL) { for (uint i = 0; i < NUM_AIRPORTS_PER_GRF; i++) { AirportSpec *as = aslist[i]; @@ -8166,10 +8161,10 @@ static void ResetCustomAirports() } } free(aslist); - (*file)->airportspec = NULL; + file->airportspec = NULL; } - AirportTileSpec **&airporttilespec = (*file)->airtspec; + AirportTileSpec **&airporttilespec = file->airtspec; if (airporttilespec != NULL) { for (uint i = 0; i < NUM_AIRPORTTILES_PER_GRF; i++) { free(airporttilespec[i]); @@ -8183,10 +8178,9 @@ static void ResetCustomAirports() /** Reset and clear all NewGRF industries */ static void ResetCustomIndustries() { - const GRFFile * const *end = _grf_files.End(); - for (GRFFile **file = _grf_files.Begin(); file != end; file++) { - IndustrySpec **&industryspec = (*file)->industryspec; - IndustryTileSpec **&indtspec = (*file)->indtspec; + for (GRFFile * const file : _grf_files) { + IndustrySpec **&industryspec = file->industryspec; + IndustryTileSpec **&indtspec = file->indtspec; /* We are verifiying both tiles and industries specs loaded from the grf file * First, let's deal with industryspec */ @@ -8223,9 +8217,8 @@ static void ResetCustomIndustries() /** Reset and clear all NewObjects */ static void ResetCustomObjects() { - const GRFFile * const *end = _grf_files.End(); - for (GRFFile **file = _grf_files.Begin(); file != end; file++) { - ObjectSpec **&objectspec = (*file)->objectspec; + for (GRFFile * const file : _grf_files) { + ObjectSpec **&objectspec = file->objectspec; if (objectspec == NULL) continue; for (uint i = 0; i < NUM_OBJECTS_PER_GRF; i++) { free(objectspec[i]); @@ -8239,9 +8232,8 @@ static void ResetCustomObjects() /** Reset and clear all NewGRFs */ static void ResetNewGRF() { - const GRFFile * const *end = _grf_files.End(); - for (GRFFile **file = _grf_files.Begin(); file != end; file++) { - delete *file; + for (GRFFile * const file : _grf_files) { + delete file; } _grf_files.clear(); @@ -8760,9 +8752,8 @@ static void FinaliseHouseArray() * On the other hand, why 1930? Just 'fix' the houses with the lowest * minimum introduction date to 0. */ - const GRFFile * const *end = _grf_files.End(); - for (GRFFile **file = _grf_files.Begin(); file != end; file++) { - HouseSpec **&housespec = (*file)->housespec; + for (GRFFile * const file : _grf_files) { + HouseSpec **&housespec = file->housespec; if (housespec == NULL) continue; for (int i = 0; i < NUM_HOUSES_PER_GRF; i++) { @@ -8774,7 +8765,7 @@ static void FinaliseHouseArray() const HouseSpec *next2 = (i + 2 < NUM_HOUSES_PER_GRF ? housespec[i + 2] : NULL); const HouseSpec *next3 = (i + 3 < NUM_HOUSES_PER_GRF ? housespec[i + 3] : NULL); - if (!IsHouseSpecValid(hs, next1, next2, next3, (*file)->filename)) continue; + if (!IsHouseSpecValid(hs, next1, next2, next3, file->filename)) continue; _house_mngr.SetEntitySpec(hs); } @@ -8823,10 +8814,9 @@ static void FinaliseHouseArray() */ static void FinaliseIndustriesArray() { - const GRFFile * const *end = _grf_files.End(); - for (GRFFile **file = _grf_files.Begin(); file != end; file++) { - IndustrySpec **&industryspec = (*file)->industryspec; - IndustryTileSpec **&indtspec = (*file)->indtspec; + for (GRFFile * const file : _grf_files) { + IndustrySpec **&industryspec = file->industryspec; + IndustryTileSpec **&indtspec = file->indtspec; if (industryspec != NULL) { for (int i = 0; i < NUM_INDUSTRYTYPES_PER_GRF; i++) { IndustrySpec *indsp = industryspec[i]; @@ -8894,9 +8884,8 @@ static void FinaliseIndustriesArray() */ static void FinaliseObjectsArray() { - const GRFFile * const *end = _grf_files.End(); - for (GRFFile **file = _grf_files.Begin(); file != end; file++) { - ObjectSpec **&objectspec = (*file)->objectspec; + for (GRFFile * const file : _grf_files) { + ObjectSpec **&objectspec = file->objectspec; if (objectspec != NULL) { for (int i = 0; i < NUM_OBJECTS_PER_GRF; i++) { if (objectspec[i] != NULL && objectspec[i]->grf_prop.grffile != NULL && objectspec[i]->enabled) { @@ -8914,9 +8903,8 @@ static void FinaliseObjectsArray() */ static void FinaliseAirportsArray() { - const GRFFile * const *end = _grf_files.End(); - for (GRFFile **file = _grf_files.Begin(); file != end; file++) { - AirportSpec **&airportspec = (*file)->airportspec; + for (GRFFile * const file : _grf_files) { + AirportSpec **&airportspec = file->airportspec; if (airportspec != NULL) { for (int i = 0; i < NUM_AIRPORTS_PER_GRF; i++) { if (airportspec[i] != NULL && airportspec[i]->enabled) { @@ -8925,7 +8913,7 @@ static void FinaliseAirportsArray() } } - AirportTileSpec **&airporttilespec = (*file)->airtspec; + AirportTileSpec **&airporttilespec = file->airtspec; if (airporttilespec != NULL) { for (uint i = 0; i < NUM_AIRPORTTILES_PER_GRF; i++) { if (airporttilespec[i] != NULL && airporttilespec[i]->enabled) { @@ -9286,10 +9274,9 @@ static void FinalisePriceBaseMultipliers() } /* Apply fallback prices for grf version < 8 */ - const GRFFile * const *end = _grf_files.End(); - for (GRFFile **file = _grf_files.Begin(); file != end; file++) { - if ((*file)->grf_version >= 8) continue; - PriceMultipliers &price_base_multipliers = (*file)->price_base_multipliers; + for (GRFFile * const file : _grf_files) { + if (file->grf_version >= 8) continue; + PriceMultipliers &price_base_multipliers = file->price_base_multipliers; for (Price p = PR_BEGIN; p < PR_END; p++) { Price fallback_price = _price_base_specs[p].fallback_price; if (fallback_price != INVALID_PRICE && price_base_multipliers[p] == INVALID_PRICE_MODIFIER) { @@ -9301,21 +9288,21 @@ static void FinalisePriceBaseMultipliers() } /* Decide local/global scope of price base multipliers */ - for (GRFFile **file = _grf_files.Begin(); file != end; file++) { - PriceMultipliers &price_base_multipliers = (*file)->price_base_multipliers; + for (GRFFile * const file : _grf_files) { + PriceMultipliers &price_base_multipliers = file->price_base_multipliers; for (Price p = PR_BEGIN; p < PR_END; p++) { if (price_base_multipliers[p] == INVALID_PRICE_MODIFIER) { /* No multiplier was set; set it to a neutral value */ price_base_multipliers[p] = 0; } else { - if (!HasBit((*file)->grf_features, _price_base_specs[p].grf_feature)) { + if (!HasBit(file->grf_features, _price_base_specs[p].grf_feature)) { /* The grf does not define any objects of the feature, * so it must be a difficulty setting. Apply it globally */ - DEBUG(grf, 3, "'%s' sets global price base multiplier %d", (*file)->filename, p); + DEBUG(grf, 3, "'%s' sets global price base multiplier %d", file->filename, p); SetPriceBaseMultiplier(p, price_base_multipliers[p]); price_base_multipliers[p] = 0; } else { - DEBUG(grf, 3, "'%s' sets local price base multiplier %d", (*file)->filename, p); + DEBUG(grf, 3, "'%s' sets local price base multiplier %d", file->filename, p); } } } @@ -9327,8 +9314,8 @@ extern void InitGRFTownGeneratorNames(); /** Finish loading NewGRFs and execute needed post-processing */ static void AfterLoadGRFs() { - for (StringIDMapping *it = _string_to_grf_mapping.Begin(); it != _string_to_grf_mapping.End(); it++) { - *it->target = MapGRFStringID(it->grfid, it->source); + for (StringIDMapping &it : _string_to_grf_mapping) { + *it.target = MapGRFStringID(it.grfid, it.source); } _string_to_grf_mapping.clear(); diff --git a/src/newgrf_commons.cpp b/src/newgrf_commons.cpp index e201ca7364..5626c6543e 100644 --- a/src/newgrf_commons.cpp +++ b/src/newgrf_commons.cpp @@ -683,7 +683,7 @@ uint32 NewGRFSpriteLayout::PrepareLayout(uint32 orig_offset, uint32 newgrf_groun * and apply the default sprite offsets (unless disabled). */ const TileLayoutRegisters *regs = this->registers; bool ground = true; - foreach_draw_tile_seq(result, result_seq.Begin()) { + foreach_draw_tile_seq(result, result_seq.data()) { TileLayoutFlags flags = TLF_NOTHING; if (regs != NULL) flags = regs->flags; @@ -737,7 +737,7 @@ void NewGRFSpriteLayout::ProcessRegisters(uint8 resolved_var10, uint32 resolved_ DrawTileSeqStruct *result; const TileLayoutRegisters *regs = this->registers; bool ground = true; - foreach_draw_tile_seq(result, result_seq.Begin()) { + foreach_draw_tile_seq(result, result_seq.data()) { TileLayoutFlags flags = TLF_NOTHING; if (regs != NULL) flags = regs->flags; diff --git a/src/newgrf_commons.h b/src/newgrf_commons.h index a5cedf429b..c7ca609fa9 100644 --- a/src/newgrf_commons.h +++ b/src/newgrf_commons.h @@ -164,7 +164,7 @@ struct NewGRFSpriteLayout : ZeroedMemoryAllocator, DrawTileSprites { */ const DrawTileSeqStruct *GetLayout(PalSpriteID *ground) const { - DrawTileSeqStruct *front = result_seq.Begin(); + DrawTileSeqStruct *front = result_seq.data(); *ground = front->image; return front + 1; } diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index 698084115d..e346a4a823 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -182,9 +182,9 @@ void GRFConfig::SetSuitablePalette() */ void GRFConfig::FinalizeParameterInfo() { - for (GRFParameterInfo **info = this->param_info.Begin(); info != this->param_info.End(); ++info) { - if (*info == NULL) continue; - (*info)->Finalize(); + for (GRFParameterInfo *info : this->param_info) { + if (info == NULL) continue; + info->Finalize(); } } diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index a081243572..f8745440c1 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -840,8 +840,8 @@ struct SpriteAlignerWindow : Window { /* Relative offset is new absolute offset - starting absolute offset. * Show 0, 0 as the relative offsets if entry is not in the map (meaning they have not been changed yet). */ - const SmallPair *key_offs_pair = this->offs_start_map.Find(this->current_sprite); - if (key_offs_pair != this->offs_start_map.End()) { + const auto key_offs_pair = this->offs_start_map.Find(this->current_sprite); + if (key_offs_pair != this->offs_start_map.end()) { SetDParam(0, spr->x_offs - key_offs_pair->second.first); SetDParam(1, spr->y_offs - key_offs_pair->second.second); } else { diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index 7a0bb04f3b..0c7e4314b8 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -1231,13 +1231,12 @@ void CommitVehicleListOrderChanges() FOR_ALL_ENGINES(e) { ordering.push_back(e->index); } - QSortT(ordering.Begin(), ordering.size(), EnginePreSort); + QSortT(ordering.data(), ordering.size(), EnginePreSort); /* Apply Insertion-Sort operations */ - const ListOrderChange *end = _list_order_changes.End(); - for (const ListOrderChange *it = _list_order_changes.Begin(); it != end; ++it) { - EngineID source = it->engine; - uint local_target = it->target; + for (const ListOrderChange &it : _list_order_changes) { + EngineID source = it.engine; + uint local_target = it.target; const EngineIDMapping *id_source = _engine_mngr.data() + source; if (id_source->internal_id == local_target) continue; @@ -1251,7 +1250,7 @@ void CommitVehicleListOrderChanges() assert(source_index >= 0 && target_index >= 0); assert(source_index != target_index); - EngineID *list = ordering.Begin(); + EngineID *list = ordering.data(); if (source_index < target_index) { --target_index; for (int i = source_index; i < target_index; ++i) list[i] = list[i + 1]; @@ -1263,10 +1262,10 @@ void CommitVehicleListOrderChanges() } /* Store final sort-order */ - const EngineID *idend = ordering.End(); uint index = 0; - for (const EngineID *it = ordering.Begin(); it != idend; ++it, ++index) { - Engine::Get(*it)->list_position = index; + for (const EngineID &eid : ordering) { + Engine::Get(eid)->list_position = index; + ++index; } /* Clear out the queue */ diff --git a/src/newgrf_text.cpp b/src/newgrf_text.cpp index b92b84355a..57f2ce5e4c 100644 --- a/src/newgrf_text.cpp +++ b/src/newgrf_text.cpp @@ -168,8 +168,8 @@ static byte _currentLangID = GRFLX_ENGLISH; ///< by default, english is used. int LanguageMap::GetMapping(int newgrf_id, bool gender) const { const SmallVector &map = gender ? this->gender_map : this->case_map; - for (const Mapping *m = map.Begin(); m != map.End(); m++) { - if (m->newgrf_id == newgrf_id) return m->openttd_id; + for (const Mapping &m : map) { + if (m.newgrf_id == newgrf_id) return m.openttd_id; } return -1; } @@ -183,8 +183,8 @@ int LanguageMap::GetMapping(int newgrf_id, bool gender) const int LanguageMap::GetReverseMapping(int openttd_id, bool gender) const { const SmallVector &map = gender ? this->gender_map : this->case_map; - for (const Mapping *m = map.Begin(); m != map.End(); m++) { - if (m->openttd_id == openttd_id) return m->newgrf_id; + for (const Mapping &m : map) { + if (m.openttd_id == openttd_id) return m.newgrf_id; } return -1; } @@ -194,8 +194,8 @@ struct UnmappedChoiceList : ZeroedMemoryAllocator { /** Clean everything up. */ ~UnmappedChoiceList() { - for (SmallPair *p = this->strings.Begin(); p < this->strings.End(); p++) { - free(p->second); + for (SmallPair p : this->strings) { + free(p.second); } } diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp index 287a146f3d..26f0fc4e80 100644 --- a/src/object_cmd.cpp +++ b/src/object_cmd.cpp @@ -453,9 +453,8 @@ ClearedObjectArea *FindClearedObject(TileIndex tile) { TileArea ta = TileArea(tile, 1, 1); - const ClearedObjectArea *end = _cleared_object_areas.End(); - for (ClearedObjectArea *coa = _cleared_object_areas.Begin(); coa != end; coa++) { - if (coa->area.Intersects(ta)) return coa; + for (ClearedObjectArea &coa : _cleared_object_areas) { + if (coa.area.Intersects(ta)) return &coa; } return NULL; diff --git a/src/os/macosx/string_osx.cpp b/src/os/macosx/string_osx.cpp index 136542cc18..51cf50ea07 100644 --- a/src/os/macosx/string_osx.cpp +++ b/src/os/macosx/string_osx.cpp @@ -75,8 +75,8 @@ public: /* Extract font information for this run. */ CFRange chars = CTRunGetStringRange(run); - FontMap::const_iterator map = fontMapping.Begin(); - while (map < fontMapping.End() - 1 && map->first <= chars.location) map++; + auto map = fontMapping.begin(); + while (map < fontMapping.end() - 1 && map->first <= chars.location) map++; this->push_back(new CoreTextVisualRun(run, map->second, buff)); } @@ -137,8 +137,8 @@ static CTRunDelegateCallbacks _sprite_font_callback = { if (length == 0) return NULL; /* Can't layout our in-built sprite fonts. */ - for (FontMap::const_iterator i = fontMapping.Begin(); i != fontMapping.End(); i++) { - if (i->second->fc->IsBuiltInFont()) return NULL; + for (const auto &i : fontMapping) { + if (i.second->fc->IsBuiltInFont()) return NULL; } /* Make attributed string with embedded font information. */ @@ -152,31 +152,31 @@ static CTRunDelegateCallbacks _sprite_font_callback = { /* Apply font and colour ranges to our string. This is important to make sure * that we get proper glyph boundaries on style changes. */ int last = 0; - for (FontMap::const_iterator i = fontMapping.Begin(); i != fontMapping.End(); i++) { - if (i->first - last == 0) continue; + for (const auto &i : fontMapping) { + if (i.first - last == 0) continue; - if (_font_cache[i->second->fc->GetSize()] == NULL) { + if (_font_cache[i.second->fc->GetSize()] == NULL) { /* Cache font information. */ - CFStringRef font_name = CFStringCreateWithCString(kCFAllocatorDefault, i->second->fc->GetFontName(), kCFStringEncodingUTF8); - _font_cache[i->second->fc->GetSize()] = CTFontCreateWithName(font_name, i->second->fc->GetFontSize(), NULL); + CFStringRef font_name = CFStringCreateWithCString(kCFAllocatorDefault, i.second->fc->GetFontName(), kCFStringEncodingUTF8); + _font_cache[i.second->fc->GetSize()] = CTFontCreateWithName(font_name, i.second->fc->GetFontSize(), NULL); CFRelease(font_name); } - CFAttributedStringSetAttribute(str, CFRangeMake(last, i->first - last), kCTFontAttributeName, _font_cache[i->second->fc->GetSize()]); + CFAttributedStringSetAttribute(str, CFRangeMake(last, i.first - last), kCTFontAttributeName, _font_cache[i.second->fc->GetSize()]); - CGColorRef color = CGColorCreateGenericGray((uint8)i->second->colour / 255.0f, 1.0f); // We don't care about the real colours, just that they are different. - CFAttributedStringSetAttribute(str, CFRangeMake(last, i->first - last), kCTForegroundColorAttributeName, color); + CGColorRef color = CGColorCreateGenericGray((uint8)i.second->colour / 255.0f, 1.0f); // We don't care about the real colours, just that they are different. + CFAttributedStringSetAttribute(str, CFRangeMake(last, i.first - last), kCTForegroundColorAttributeName, color); CGColorRelease(color); /* Install a size callback for our special sprite glyphs. */ - for (ssize_t c = last; c < i->first; c++) { + for (ssize_t c = last; c < i.first; c++) { if (buff[c] >= SCC_SPRITE_START && buff[c] <= SCC_SPRITE_END) { - CTRunDelegateRef del = CTRunDelegateCreate(&_sprite_font_callback, (void *)(size_t)(buff[c] | (i->second->fc->GetSize() << 24))); + CTRunDelegateRef del = CTRunDelegateCreate(&_sprite_font_callback, (void *)(size_t)(buff[c] | (i.second->fc->GetSize() << 24))); CFAttributedStringSetAttribute(str, CFRangeMake(c, 1), kCTRunDelegateAttributeName, del); CFRelease(del); } } - last = i->first; + last = i.first; } CFAttributedStringEndEditing(str); @@ -243,8 +243,8 @@ CoreTextParagraphLayout::CoreTextVisualRun::CoreTextVisualRun(CTRunRef run, Font int CoreTextParagraphLayout::CoreTextLine::GetLeading() const { int leading = 0; - for (const CoreTextVisualRun * const *run = this->Begin(); run != this->End(); run++) { - leading = max(leading, (*run)->GetLeading()); + for (const CoreTextVisualRun * const &run : *this) { + leading = max(leading, run->GetLeading()); } return leading; @@ -259,8 +259,8 @@ int CoreTextParagraphLayout::CoreTextLine::GetWidth() const if (this->size() == 0) return 0; int total_width = 0; - for (const CoreTextVisualRun * const *run = this->Begin(); run != this->End(); run++) { - total_width += (*run)->GetAdvance(); + for (const CoreTextVisualRun * const &run : *this) { + total_width += run->GetAdvance(); } return total_width; diff --git a/src/os/windows/string_uniscribe.cpp b/src/os/windows/string_uniscribe.cpp index ec0e026394..a3fd35d0ad 100644 --- a/src/os/windows/string_uniscribe.cpp +++ b/src/os/windows/string_uniscribe.cpp @@ -282,8 +282,8 @@ static std::vector UniscribeItemizeString(UniscribeParagraphLayoutF if (length == 0) return NULL; /* Can't layout our in-built sprite fonts. */ - for (FontMap::const_iterator i = fontMapping.Begin(); i != fontMapping.End(); i++) { - if (i->second->fc->IsBuiltInFont()) return NULL; + for (auto const &pair : fontMapping) { + if (pair.second->fc->IsBuiltInFont()) return NULL; } /* Itemize text. */ @@ -296,12 +296,12 @@ static std::vector UniscribeItemizeString(UniscribeParagraphLayoutF int cur_pos = 0; std::vector::iterator cur_item = items.begin(); - for (FontMap::const_iterator i = fontMapping.Begin(); i != fontMapping.End(); i++) { - while (cur_pos < i->first && cur_item != items.end() - 1) { + for (auto const &i : fontMapping) { + while (cur_pos < i.first && cur_item != items.end() - 1) { /* Add a range that spans the intersection of the remaining item and font run. */ - int stop_pos = min(i->first, (cur_item + 1)->iCharPos); + int stop_pos = min(i.first, (cur_item + 1)->iCharPos); assert(stop_pos - cur_pos > 0); - ranges.push_back(UniscribeRun(cur_pos, stop_pos - cur_pos, i->second, cur_item->a)); + ranges.push_back(UniscribeRun(cur_pos, stop_pos - cur_pos, i.second, cur_item->a)); /* Shape the range. */ if (!UniscribeShapeRun(buff, ranges.back())) { @@ -448,8 +448,8 @@ static std::vector UniscribeItemizeString(UniscribeParagraphLayoutF int UniscribeParagraphLayout::UniscribeLine::GetLeading() const { int leading = 0; - for (const UniscribeVisualRun * const *run = this->Begin(); run != this->End(); run++) { - leading = max(leading, (*run)->GetLeading()); + for (const UniscribeVisualRun *run : *this) { + leading = max(leading, run->GetLeading()); } return leading; @@ -462,8 +462,8 @@ int UniscribeParagraphLayout::UniscribeLine::GetLeading() const int UniscribeParagraphLayout::UniscribeLine::GetWidth() const { int length = 0; - for (const UniscribeVisualRun * const *run = this->Begin(); run != this->End(); run++) { - length += (*run)->GetAdvance(); + for (const UniscribeVisualRun *run : *this) { + length += run->GetAdvance(); } return length; diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index c6548eefba..8e996bbe3c 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -1754,8 +1754,8 @@ CommandCost CmdConvertRail(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 if (flags & DC_EXEC) { /* Railtype changed, update trains as when entering different track */ - for (Train **v = affected_trains.Begin(); v != affected_trains.End(); v++) { - (*v)->ConsistChanged(CCF_TRACK); + for (Train *v : affected_trains) { + v->ConsistChanged(CCF_TRACK); } } diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 43a415c208..3efed69e45 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2197,12 +2197,12 @@ bool AfterLoadGame() extern SmallVector _animated_tiles; - for (TileIndex *tile = _animated_tiles.Begin(); tile < _animated_tiles.End(); /* Nothing */) { + for (auto tile = _animated_tiles.begin(); tile < _animated_tiles.end(); /* Nothing */) { /* Remove if tile is not animated */ bool remove = _tile_type_procs[GetTileType(*tile)]->animate_tile_proc == NULL; /* and remove if duplicate */ - for (TileIndex *j = _animated_tiles.Begin(); !remove && j < tile; j++) { + for (auto j = _animated_tiles.begin(); !remove && j < tile; j++) { remove = *tile == *j; } @@ -2981,9 +2981,12 @@ bool AfterLoadGame() while (cur_skip > skip_frames[0]) { RoadVehicle *u = v; RoadVehicle *prev = NULL; - for (uint *it = skip_frames.Begin(); it != skip_frames.End(); ++it, prev = u, u = u->Next()) { + for (uint sf : skip_frames) { extern bool IndividualRoadVehicleController(RoadVehicle *v, const RoadVehicle *prev); - if (*it >= cur_skip) IndividualRoadVehicleController(u, prev); + if (sf >= cur_skip) IndividualRoadVehicleController(u, prev); + + prev = u; + u = u->Next(); } cur_skip--; } diff --git a/src/saveload/animated_tile_sl.cpp b/src/saveload/animated_tile_sl.cpp index 5b91852639..4d4ed69a96 100644 --- a/src/saveload/animated_tile_sl.cpp +++ b/src/saveload/animated_tile_sl.cpp @@ -25,8 +25,8 @@ extern SmallVector _animated_tiles; */ static void Save_ANIT() { - SlSetLength(_animated_tiles.size() * sizeof(*_animated_tiles.Begin())); - SlArray(_animated_tiles.Begin(), _animated_tiles.size(), SLE_UINT32); + SlSetLength(_animated_tiles.size() * sizeof(_animated_tiles.front())); + SlArray(_animated_tiles.data(), _animated_tiles.size(), SLE_UINT32); } /** @@ -47,10 +47,10 @@ static void Load_ANIT() return; } - uint count = (uint)SlGetFieldLength() / sizeof(*_animated_tiles.Begin()); + uint count = (uint)SlGetFieldLength() / sizeof(_animated_tiles.front()); _animated_tiles.clear(); _animated_tiles.resize(_animated_tiles.size() + count); - SlArray(_animated_tiles.Begin(), count, SLE_UINT32); + SlArray(_animated_tiles.data(), count, SLE_UINT32); } /** diff --git a/src/saveload/engine_sl.cpp b/src/saveload/engine_sl.cpp index 03a086a15d..891e307834 100644 --- a/src/saveload/engine_sl.cpp +++ b/src/saveload/engine_sl.cpp @@ -177,11 +177,11 @@ static const SaveLoad _engine_id_mapping_desc[] = { static void Save_EIDS() { - const EngineIDMapping *end = _engine_mngr.End(); uint index = 0; - for (EngineIDMapping *eid = _engine_mngr.Begin(); eid != end; eid++, index++) { + for (EngineIDMapping &eid : _engine_mngr) { SlSetArrayIndex(index); - SlObject(eid, _engine_id_mapping_desc); + SlObject(&eid, _engine_id_mapping_desc); + index++; } } diff --git a/src/saveload/waypoint_sl.cpp b/src/saveload/waypoint_sl.cpp index 9e5d163960..d7701c8af8 100644 --- a/src/saveload/waypoint_sl.cpp +++ b/src/saveload/waypoint_sl.cpp @@ -52,10 +52,10 @@ static void UpdateWaypointOrder(Order *o) { if (!o->IsType(OT_GOTO_WAYPOINT)) return; - for (OldWaypoint *wp = _old_waypoints.Begin(); wp != _old_waypoints.End(); wp++) { - if (wp->index != o->GetDestination()) continue; + for (OldWaypoint &wp : _old_waypoints) { + if (wp.index != o->GetDestination()) continue; - o->SetDestination((DestinationID)wp->new_index); + o->SetDestination((DestinationID)wp.new_index); return; } } @@ -71,25 +71,25 @@ void MoveWaypointsToBaseStations() * id which was stored in m4 is now saved as a grf/id reference in the * waypoint struct. */ if (IsSavegameVersionBefore(SLV_17)) { - for (OldWaypoint *wp = _old_waypoints.Begin(); wp != _old_waypoints.End(); wp++) { - if (wp->delete_ctr != 0) continue; // The waypoint was deleted + for (OldWaypoint &wp : _old_waypoints) { + if (wp.delete_ctr != 0) continue; // The waypoint was deleted /* Waypoint indices were not added to the map prior to this. */ - _m[wp->xy].m2 = (StationID)wp->index; + _m[wp.xy].m2 = (StationID)wp.index; - if (HasBit(_m[wp->xy].m3, 4)) { - wp->spec = StationClass::Get(STAT_CLASS_WAYP)->GetSpec(_m[wp->xy].m4 + 1); + if (HasBit(_m[wp.xy].m3, 4)) { + wp.spec = StationClass::Get(STAT_CLASS_WAYP)->GetSpec(_m[wp.xy].m4 + 1); } } } else { /* As of version 17, we recalculate the custom graphic ID of waypoints * from the GRF ID / station index. */ - for (OldWaypoint *wp = _old_waypoints.Begin(); wp != _old_waypoints.End(); wp++) { + for (OldWaypoint &wp : _old_waypoints) { StationClass* stclass = StationClass::Get(STAT_CLASS_WAYP); for (uint i = 0; i < stclass->GetSpecCount(); i++) { const StationSpec *statspec = stclass->GetSpec(i); - if (statspec != NULL && statspec->grf_prop.grffile->grfid == wp->grfid && statspec->grf_prop.local_id == wp->localidx) { - wp->spec = statspec; + if (statspec != NULL && statspec->grf_prop.grffile->grfid == wp.grfid && statspec->grf_prop.local_id == wp.localidx) { + wp.spec = statspec; break; } } @@ -99,19 +99,19 @@ void MoveWaypointsToBaseStations() if (!Waypoint::CanAllocateItem(_old_waypoints.size())) SlError(STR_ERROR_TOO_MANY_STATIONS_LOADING); /* All saveload conversions have been done. Create the new waypoints! */ - for (OldWaypoint *wp = _old_waypoints.Begin(); wp != _old_waypoints.End(); wp++) { - Waypoint *new_wp = new Waypoint(wp->xy); - new_wp->town = wp->town; - new_wp->town_cn = wp->town_cn; - new_wp->name = wp->name; + for (OldWaypoint &wp : _old_waypoints) { + Waypoint *new_wp = new Waypoint(wp.xy); + new_wp->town = wp.town; + new_wp->town_cn = wp.town_cn; + new_wp->name = wp.name; new_wp->delete_ctr = 0; // Just reset delete counter for once. - new_wp->build_date = wp->build_date; - new_wp->owner = wp->owner; + new_wp->build_date = wp.build_date; + new_wp->owner = wp.owner; new_wp->string_id = STR_SV_STNAME_WAYPOINT; - TileIndex t = wp->xy; - if (IsTileType(t, MP_RAILWAY) && GetRailTileType(t) == 2 /* RAIL_TILE_WAYPOINT */ && _m[t].m2 == wp->index) { + TileIndex t = wp.xy; + if (IsTileType(t, MP_RAILWAY) && GetRailTileType(t) == 2 /* RAIL_TILE_WAYPOINT */ && _m[t].m2 == wp.index) { /* The tile might've been reserved! */ bool reserved = !IsSavegameVersionBefore(SLV_100) && HasBit(_m[t].m5, 4); @@ -122,13 +122,13 @@ void MoveWaypointsToBaseStations() SetRailStationReservation(t, reserved); - if (wp->spec != NULL) { - SetCustomStationSpecIndex(t, AllocateSpecToStation(wp->spec, new_wp, true)); + if (wp.spec != NULL) { + SetCustomStationSpecIndex(t, AllocateSpecToStation(wp.spec, new_wp, true)); } new_wp->rect.BeforeAddTile(t, StationRect::ADD_FORCE); } - wp->new_index = new_wp->index; + wp.new_index = new_wp->index; } /* Update the orders of vehicles */ @@ -189,15 +189,15 @@ static void Load_WAYP() static void Ptrs_WAYP() { - for (OldWaypoint *wp = _old_waypoints.Begin(); wp != _old_waypoints.End(); wp++) { - SlObject(wp, _old_waypoint_desc); + for (OldWaypoint &wp : _old_waypoints) { + SlObject(&wp, _old_waypoint_desc); if (IsSavegameVersionBefore(SLV_12)) { - wp->town_cn = (wp->string_id & 0xC000) == 0xC000 ? (wp->string_id >> 8) & 0x3F : 0; - wp->town = ClosestTownFromTile(wp->xy, UINT_MAX); + wp.town_cn = (wp.string_id & 0xC000) == 0xC000 ? (wp.string_id >> 8) & 0x3F : 0; + wp.town = ClosestTownFromTile(wp.xy, UINT_MAX); } else if (IsSavegameVersionBefore(SLV_122)) { /* Only for versions 12 .. 122 */ - if (!Town::IsValidID(wp->town_index)) { + if (!Town::IsValidID(wp.town_index)) { /* Upon a corrupted waypoint we'll likely get here. The next step will be to * loop over all Ptrs procs to NULL the pointers. However, we don't know * whether we're in the NULL or "normal" Ptrs proc. So just clear the list @@ -206,10 +206,10 @@ static void Ptrs_WAYP() _old_waypoints.clear(); SlErrorCorrupt("Referencing invalid Town"); } - wp->town = Town::Get(wp->town_index); + wp.town = Town::Get(wp.town_index); } if (IsSavegameVersionBefore(SLV_84)) { - wp->name = CopyFromOldName(wp->string_id); + wp.name = CopyFromOldName(wp.string_id); } } } diff --git a/src/script/script_info.cpp b/src/script/script_info.cpp index b95c6e366d..47ff2ee5f9 100644 --- a/src/script/script_info.cpp +++ b/src/script/script_info.cpp @@ -26,8 +26,8 @@ ScriptInfo::~ScriptInfo() free((*it).name); free((*it).description); if (it->labels != NULL) { - for (LabelMapping::iterator it2 = (*it).labels->Begin(); it2 != (*it).labels->End(); it2++) { - free(it2->second); + for (auto &lbl_map : *(*it).labels) { + free(lbl_map.second); } delete it->labels; } diff --git a/src/script/squirrel_helper.hpp b/src/script/squirrel_helper.hpp index c362601eb2..775fe142ee 100644 --- a/src/script/squirrel_helper.hpp +++ b/src/script/squirrel_helper.hpp @@ -149,7 +149,7 @@ namespace SQConvert { Array *arr = (Array*)MallocT(sizeof(Array) + sizeof(int32) * data.size()); arr->size = data.size(); - memcpy(arr->array, data.Begin(), sizeof(int32) * data.size()); + memcpy(arr->array, data.data(), sizeof(int32) * data.size()); ptr->push_back(arr); return arr; diff --git a/src/settings.cpp b/src/settings.cpp index 2c9fc305e2..546b137a14 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -747,8 +747,8 @@ static void IniSaveSettingList(IniFile *ini, const char *grpname, StringList *li if (group == NULL || list == NULL) return; group->Clear(); - for (char **iter = list->Begin(); iter != list->End(); iter++) { - group->GetItem(*iter, true)->SetValue(""); + for (char *iter : *list) { + group->GetItem(iter, true)->SetValue(""); } } diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index da4989e858..cfed29d4d0 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -215,7 +215,7 @@ struct GameOptionsWindow : Window { if (i == CURRENCY_CUSTOM) continue; list->push_back(new DropDownListStringItem(*items, i, HasBit(disabled, i))); } - QSortT(list->Begin(), list->size(), DropDownListStringItem::NatSortFunc); + QSortT(list->data(), list->size(), DropDownListStringItem::NatSortFunc); /* Append custom currency at the end */ list->push_back(new DropDownListItem(-1, false)); // separator line @@ -253,7 +253,7 @@ struct GameOptionsWindow : Window { int result = _nb_orig_names + i; list->push_back(new DropDownListStringItem(_grf_names[i], result, enabled_item != result && enabled_item >= 0)); } - QSortT(list->Begin(), list->size(), DropDownListStringItem::NatSortFunc); + QSortT(list->data(), list->size(), DropDownListStringItem::NatSortFunc); int newgrf_size = list->size(); /* Insert newgrf_names at the top of the list */ @@ -266,7 +266,7 @@ struct GameOptionsWindow : Window { for (int i = 0; i < _nb_orig_names; i++) { list->push_back(new DropDownListStringItem(STR_GAME_OPTIONS_TOWN_NAME_ORIGINAL_ENGLISH + i, i, enabled_item != i && enabled_item >= 0)); } - QSortT(list->Begin() + newgrf_size, list->size() - newgrf_size, DropDownListStringItem::NatSortFunc); + QSortT(list->data() + newgrf_size, list->size() - newgrf_size, DropDownListStringItem::NatSortFunc); break; } @@ -286,7 +286,7 @@ struct GameOptionsWindow : Window { if (&_languages[i] == _current_language) *selected_index = i; list->push_back(new DropDownListStringItem(SPECSTR_LANGUAGE_START + i, i, false)); } - QSortT(list->Begin(), list->size(), DropDownListStringItem::NatSortFunc); + QSortT(list->data(), list->size(), DropDownListStringItem::NatSortFunc); break; } @@ -432,11 +432,11 @@ struct GameOptionsWindow : Window { DropDownList *list = this->BuildDropDownList(widget, &selected); if (list != NULL) { /* Find the biggest item for the default size. */ - for (const DropDownListItem * const *it = list->Begin(); it != list->End(); it++) { + for (const DropDownListItem * const ddli : *list) { Dimension string_dim; - int width = (*it)->Width(); + int width = ddli->Width(); string_dim.width = width + padding.width; - string_dim.height = (*it)->Height(width) + padding.height; + string_dim.height = ddli->Height(width) + padding.height; *size = maxdim(*size, string_dim); } delete list; diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp index 1847bedff3..f52fe54268 100644 --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -136,8 +136,8 @@ public: */ void Write(FILE *out_fp) const { - for (const OutputBuffer *out_data = this->output_buffer.Begin(); out_data != this->output_buffer.End(); out_data++) { - out_data->Write(out_fp); + for (const OutputBuffer &out_data : output_buffer) { + out_data.Write(out_fp); } } diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 6811290add..63e3384b04 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -1622,8 +1622,7 @@ CommandCost RemoveFromRailBaseStation(TileArea ta, SmallVector &affected if (quantity == 0) return error.Failed() ? error : CommandCost(STR_ERROR_THERE_IS_NO_STATION); - for (T **stp = affected_stations.Begin(); stp != affected_stations.End(); stp++) { - T *st = *stp; + for (T *st : affected_stations) { /* now we need to make the "spanned" area of the railway station smaller * if we deleted something at the edges. @@ -1667,8 +1666,7 @@ CommandCost CmdRemoveFromRailStation(TileIndex start, DoCommandFlag flags, uint3 if (ret.Failed()) return ret; /* Do all station specific functions here. */ - for (Station **stp = affected_stations.Begin(); stp != affected_stations.End(); stp++) { - Station *st = *stp; + for (Station *st : affected_stations) { if (st->train_station.tile == INVALID_TILE) SetWindowWidgetDirty(WC_STATION_VIEW, st->index, WID_SV_TRAINS); st->MarkTilesDirty(false); diff --git a/src/story_gui.cpp b/src/story_gui.cpp index aed00358d0..5679bbdc6b 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -130,8 +130,7 @@ protected: int GetSelPageNum() const { int page_number = 0; - for (const StoryPage *const*iter = this->story_pages.Begin(); iter != this->story_pages.End(); iter++) { - const StoryPage *p = *iter; + for (const StoryPage *p : this->story_pages) { if (p->index == this->selected_page_id) { return page_number; } @@ -148,7 +147,7 @@ protected: /* Verify that the selected page exist. */ if (!_story_page_pool.IsValidID(this->selected_page_id)) return false; - return (*this->story_pages.Begin())->index == this->selected_page_id; + return this->story_pages.front()->index == this->selected_page_id; } /** @@ -160,7 +159,7 @@ protected: if (!_story_page_pool.IsValidID(this->selected_page_id)) return false; if (this->story_pages.size() <= 1) return true; - const StoryPage *last = *(this->story_pages.End() - 1); + const StoryPage *last = this->story_pages.back(); return last->index == this->selected_page_id; } @@ -195,8 +194,7 @@ protected: /* Find the last available page which is previous to the current selected page. */ const StoryPage *last_available; last_available = NULL; - for (const StoryPage *const*iter = this->story_pages.Begin(); iter != this->story_pages.End(); iter++) { - const StoryPage *p = *iter; + for (const StoryPage *p : this->story_pages) { if (p->index == this->selected_page_id) { if (last_available == NULL) return; // No previous page available. this->SetSelectedPage(last_available->index); @@ -214,12 +212,12 @@ protected: if (!_story_page_pool.IsValidID(this->selected_page_id)) return; /* Find selected page. */ - for (const StoryPage *const*iter = this->story_pages.Begin(); iter != this->story_pages.End(); iter++) { + for (auto iter = this->story_pages.begin(); iter != this->story_pages.end(); iter++) { const StoryPage *p = *iter; if (p->index == this->selected_page_id) { /* Select the page after selected page. */ iter++; - if (iter != this->story_pages.End()) { + if (iter != this->story_pages.end()) { this->SetSelectedPage((*iter)->index); } return; @@ -234,8 +232,7 @@ protected: { DropDownList *list = new DropDownList(); uint16 page_num = 1; - for (const StoryPage *const*iter = this->story_pages.Begin(); iter != this->story_pages.End(); iter++) { - const StoryPage *p = *iter; + for (const StoryPage *p : this->story_pages) { bool current_page = p->index == this->selected_page_id; DropDownListStringItem *item = NULL; if (p->title != NULL) { @@ -353,8 +350,7 @@ protected: uint height = GetHeadHeight(max_width); /* Body */ - for (const StoryPageElement **iter = this->story_page_elements.Begin(); iter != this->story_page_elements.End(); iter++) { - const StoryPageElement *pe = *iter; + for (const StoryPageElement *pe : this->story_page_elements) { height += element_vertical_dist; height += GetPageElementHeight(*pe, max_width); } @@ -532,8 +528,7 @@ public: y_offset = DrawStringMultiLine(0, right - x, y_offset, bottom - y, STR_STORY_BOOK_TITLE, TC_BLACK, SA_TOP | SA_HOR_CENTER); /* Page elements */ - for (const StoryPageElement *const*iter = this->story_page_elements.Begin(); iter != this->story_page_elements.End(); iter++) { - const StoryPageElement *const pe = *iter; + for (const StoryPageElement *const pe : this->story_page_elements) { y_offset += line_height; // margin to previous element switch (pe->type) { @@ -650,8 +645,7 @@ public: /* Detect if a page element was clicked. */ uint y = head_height; uint element_vertical_dist = FONT_HEIGHT_NORMAL; - for (const StoryPageElement *const*iter = this->story_page_elements.Begin(); iter != this->story_page_elements.End(); iter++) { - const StoryPageElement *const pe = *iter; + for (const StoryPageElement *const pe : this->story_page_elements) { y += element_vertical_dist; // margin row diff --git a/src/strgen/strgen_base.cpp b/src/strgen/strgen_base.cpp index 12d9938446..6c835782c8 100644 --- a/src/strgen/strgen_base.cpp +++ b/src/strgen/strgen_base.cpp @@ -1045,7 +1045,7 @@ void LanguageWriter::WriteLang(const StringData &data) if (cmdp != NULL) PutCommandString(&buffer, cmdp); this->WriteLength(buffer.size()); - this->Write(buffer.Begin(), buffer.size()); + this->Write(buffer.data(), buffer.size()); buffer.clear(); } } diff --git a/src/string.cpp b/src/string.cpp index c23202acbb..72254a877b 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -674,7 +674,7 @@ public: UText text = UTEXT_INITIALIZER; UErrorCode status = U_ZERO_ERROR; - utext_openUChars(&text, this->utf16_str.Begin(), this->utf16_str.size() - 1, &status); + utext_openUChars(&text, this->utf16_str.data(), this->utf16_str.size() - 1, &status); this->char_itr->setText(&text, status); this->word_itr->setText(&text, status); this->char_itr->first(); diff --git a/src/stringfilter.cpp b/src/stringfilter.cpp index e546a4186c..88eb5f28ad 100644 --- a/src/stringfilter.cpp +++ b/src/stringfilter.cpp @@ -91,9 +91,8 @@ void StringFilter::SetFilterTerm(const char *str) void StringFilter::ResetState() { this->word_matches = 0; - const WordState *end = this->word_index.End(); - for (WordState *it = this->word_index.Begin(); it != end; ++it) { - it->match = false; + for (WordState &ws : this->word_index) { + ws.match = false; } } @@ -110,11 +109,10 @@ void StringFilter::AddLine(const char *str) if (str == NULL) return; bool match_case = this->case_sensitive != NULL && *this->case_sensitive; - const WordState *end = this->word_index.End(); - for (WordState *it = this->word_index.Begin(); it != end; ++it) { - if (!it->match) { - if ((match_case ? strstr(str, it->start) : strcasestr(str, it->start)) != NULL) { - it->match = true; + for (WordState &ws : this->word_index) { + if (!ws.match) { + if ((match_case ? strstr(str, ws.start) : strcasestr(str, ws.start)) != NULL) { + ws.match = true; this->word_matches++; } } diff --git a/src/strings.cpp b/src/strings.cpp index c3f3061834..204c68c204 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -1876,8 +1876,8 @@ int CDECL StringIDSorter(const StringID *a, const StringID *b) */ const LanguageMetadata *GetLanguage(byte newgrflangid) { - for (const LanguageMetadata *lang = _languages.Begin(); lang != _languages.End(); lang++) { - if (newgrflangid == lang->newgrflangid) return lang; + for (const LanguageMetadata &lang : _languages) { + if (newgrflangid == lang.newgrflangid) return ⟨ } return NULL; @@ -1960,22 +1960,22 @@ void InitializeLanguagePacks() const LanguageMetadata *chosen_language = NULL; ///< Matching the language in the configuration file or the current locale const LanguageMetadata *language_fallback = NULL; ///< Using pt_PT for pt_BR locale when pt_BR is not available - const LanguageMetadata *en_GB_fallback = _languages.Begin(); ///< Fallback when no locale-matching language has been found + const LanguageMetadata *en_GB_fallback = _languages.data(); ///< Fallback when no locale-matching language has been found /* Find a proper language. */ - for (const LanguageMetadata *lng = _languages.Begin(); lng != _languages.End(); lng++) { + for (const LanguageMetadata &lng : _languages) { /* We are trying to find a default language. The priority is by * configuration file, local environment and last, if nothing found, * English. */ - const char *lang_file = strrchr(lng->file, PATHSEPCHAR) + 1; + const char *lang_file = strrchr(lng.file, PATHSEPCHAR) + 1; if (strcmp(lang_file, _config_language_file) == 0) { - chosen_language = lng; + chosen_language = &lng; break; } - if (strcmp (lng->isocode, "en_GB") == 0) en_GB_fallback = lng; - if (strncmp(lng->isocode, lang, 5) == 0) chosen_language = lng; - if (strncmp(lng->isocode, lang, 2) == 0) language_fallback = lng; + if (strcmp (lng.isocode, "en_GB") == 0) en_GB_fallback = &lng; + if (strncmp(lng.isocode, lang, 5) == 0) chosen_language = &lng; + if (strncmp(lng.isocode, lang, 2) == 0) language_fallback = &lng; } /* We haven't found the language in the config nor the one in the locale. diff --git a/src/subsidy.cpp b/src/subsidy.cpp index 8f823a1ab4..a61d6f1ce9 100644 --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -601,9 +601,9 @@ bool CheckSubsidised(CargoID cargo_type, CompanyID company, SourceType src_type, } break; case ST_TOWN: - for (const Town * const *tp = towns_near.Begin(); tp != towns_near.End(); tp++) { - if (s->dst == (*tp)->index) { - assert((*tp)->cache.part_of_subsidy & POS_DST); + for (const Town *tp : towns_near) { + if (s->dst == tp->index) { + assert(tp->cache.part_of_subsidy & POS_DST); subsidised = true; if (!s->IsAwarded()) s->AwardTo(company); } diff --git a/src/texteff.cpp b/src/texteff.cpp index c81d9a95d7..6827d980f0 100644 --- a/src/texteff.cpp +++ b/src/texteff.cpp @@ -89,20 +89,19 @@ void MoveAllTextEffects(uint delta_ms) uint count = texteffecttimer.CountElapsed(delta_ms); if (count == 0) return; - const TextEffect *end = _text_effects.End(); - for (TextEffect *te = _text_effects.Begin(); te != end; te++) { - if (te->string_id == INVALID_STRING_ID) continue; - if (te->mode != TE_RISING) continue; + for (TextEffect &te : _text_effects) { + if (te.string_id == INVALID_STRING_ID) continue; + if (te.mode != TE_RISING) continue; - if (te->duration < count) { - te->Reset(); + if (te.duration < count) { + te.Reset(); continue; } - te->MarkDirty(ZOOM_LVL_OUT_8X); - te->duration -= count; - te->top -= count * ZOOM_LVL_BASE; - te->MarkDirty(ZOOM_LVL_OUT_8X); + te.MarkDirty(ZOOM_LVL_OUT_8X); + te.duration -= count; + te.top -= count * ZOOM_LVL_BASE; + te.MarkDirty(ZOOM_LVL_OUT_8X); } } @@ -117,11 +116,10 @@ void DrawTextEffects(DrawPixelInfo *dpi) /* Don't draw the text effects when zoomed out a lot */ if (dpi->zoom > ZOOM_LVL_OUT_8X) return; - const TextEffect *end = _text_effects.End(); - for (TextEffect *te = _text_effects.Begin(); te != end; te++) { - if (te->string_id == INVALID_STRING_ID) continue; - if (te->mode == TE_RISING || (_settings_client.gui.loading_indicators && !IsTransparencySet(TO_LOADING))) { - ViewportAddString(dpi, ZOOM_LVL_OUT_8X, te, te->string_id, te->string_id - 1, STR_NULL, te->params_1, te->params_2); + for (TextEffect &te : _text_effects) { + if (te.string_id == INVALID_STRING_ID) continue; + if (te.mode == TE_RISING || (_settings_client.gui.loading_indicators && !IsTransparencySet(TO_LOADING))) { + ViewportAddString(dpi, ZOOM_LVL_OUT_8X, &te, te.string_id, te.string_id - 1, STR_NULL, te.params_1, te.params_2); } } } diff --git a/src/timetable_cmd.cpp b/src/timetable_cmd.cpp index fcc8493e2b..7e718c717d 100644 --- a/src/timetable_cmd.cpp +++ b/src/timetable_cmd.cpp @@ -295,13 +295,12 @@ CommandCost CmdSetTimetableStart(TileIndex tile, DoCommandFlag flags, uint32 p1, int num_vehs = vehs.size(); if (num_vehs >= 2) { - QSortT(vehs.Begin(), vehs.size(), &VehicleTimetableSorter); + QSortT(vehs.data(), vehs.size(), &VehicleTimetableSorter); } int idx = vehs.begin() - std::find(vehs.begin(), vehs.end(), v); - for (Vehicle **viter = vehs.Begin(); viter != vehs.End(); viter++) { - Vehicle *w = *viter; + for (Vehicle *w : vehs) { w->lateness_counter = 0; ClrBit(w->vehicle_flags, VF_TIMETABLE_STARTED); diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 0d4df42f45..6ce1131844 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -837,8 +837,7 @@ static void RestoreTrainBackup(TrainList &list) Train *prev = NULL; /* Iterate over the list and rebuild it. */ - for (Train **iter = list.Begin(); iter != list.End(); iter++) { - Train *t = *iter; + for (Train *t : list) { if (prev != NULL) { prev->SetNext(t); } else if (t->Previous() != NULL) { diff --git a/src/train_gui.cpp b/src/train_gui.cpp index 3036096c89..427d45dea4 100644 --- a/src/train_gui.cpp +++ b/src/train_gui.cpp @@ -278,10 +278,10 @@ static void GetCargoSummaryOfArticulatedVehicle(const Train *v, CargoSummary *su new_item.subtype = GetCargoSubtypeText(v); if (new_item.cargo == INVALID_CARGO && new_item.subtype == STR_EMPTY) continue; - CargoSummaryItem *item = &*std::find(summary->begin(), summary->end(), new_item); - if (item == summary->End()) { - /*C++17: item = &*/ summary->emplace_back(); - item = &summary->back(); + auto item = std::find(summary->begin(), summary->end(), new_item); + if (item == summary->end()) { + summary->emplace_back(); + item = summary->end() - 1; item->cargo = new_item.cargo; item->subtype = new_item.subtype; item->capacity = 0; diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index 764551d81f..79011a3bd5 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -698,8 +698,9 @@ CommandCost CmdBuildTunnel(TileIndex start_tile, DoCommandFlag flags, uint32 p1, * Deliberately clear the coa pointer to avoid leaving dangling pointers which could * inadvertently be dereferenced. */ - assert(coa >= _cleared_object_areas.Begin() && coa < _cleared_object_areas.End()); - size_t coa_index = coa - _cleared_object_areas.Begin(); + ClearedObjectArea *begin = _cleared_object_areas.data(); + assert(coa >= begin && coa < begin + _cleared_object_areas.size()); + size_t coa_index = coa - begin; assert(coa_index < UINT_MAX); // more than 2**32 cleared areas would be a bug in itself coa = NULL; diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 267c204913..9f15d9be05 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1028,15 +1028,15 @@ void CallVehicleTicks() } Backup cur_company(_current_company, FILE_LINE); - for (AutoreplaceMap::iterator it = _vehicles_to_autoreplace.Begin(); it != _vehicles_to_autoreplace.End(); it++) { - v = it->first; + for (auto &it : _vehicles_to_autoreplace) { + v = it.first; /* Autoreplace needs the current company set as the vehicle owner */ cur_company.Change(v->owner); /* Start vehicle if we stopped them in VehicleEnteredDepotThisTick() * We need to stop them between VehicleEnteredDepotThisTick() and here or we risk that * they are already leaving the depot again before being replaced. */ - if (it->second) v->vehstatus &= ~VS_STOPPED; + if (it.second) v->vehstatus &= ~VS_STOPPED; /* Store the position of the effect as the vehicle pointer will become invalid later */ int x = v->x_pos; diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 8e578cd68d..872c9458ca 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -422,17 +422,17 @@ static CommandCost RefitVehicle(Vehicle *v, bool only_this, uint8 num_vehicles, if (flags & DC_EXEC) { /* Store the result */ - for (RefitResult *result = refit_result.Begin(); result != refit_result.End(); result++) { - Vehicle *u = result->v; - u->refit_cap = (u->cargo_type == new_cid) ? min(result->capacity, u->refit_cap) : 0; + for (RefitResult &result : refit_result) { + Vehicle *u = result.v; + u->refit_cap = (u->cargo_type == new_cid) ? min(result.capacity, u->refit_cap) : 0; if (u->cargo.TotalCount() > u->refit_cap) u->cargo.Truncate(u->cargo.TotalCount() - u->refit_cap); u->cargo_type = new_cid; - u->cargo_cap = result->capacity; - u->cargo_subtype = result->subtype; + u->cargo_cap = result.capacity; + u->cargo_subtype = result.subtype; if (u->type == VEH_AIRCRAFT) { Vehicle *w = u->Next(); - w->refit_cap = min(w->refit_cap, result->mail_capacity); - w->cargo_cap = result->mail_capacity; + w->refit_cap = min(w->refit_cap, result.mail_capacity); + w->cargo_cap = result.mail_capacity; if (w->cargo.TotalCount() > w->refit_cap) w->cargo.Truncate(w->cargo.TotalCount() - w->refit_cap); } } diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 82403a2d1b..9b6c68a36e 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -106,8 +106,8 @@ const StringID BaseVehicleListWindow::vehicle_depot_name[] = { uint GetUnitNumberDigits(VehicleList &vehicles) { uint unitnumber = 0; - for (const Vehicle **v = vehicles.Begin(); v != vehicles.End(); v++) { - unitnumber = max(unitnumber, (*v)->unitnumber); + for (const Vehicle *v : vehicles) { + unitnumber = max(unitnumber, v->unitnumber); } if (unitnumber >= 10000) return 5; @@ -194,7 +194,7 @@ void BaseVehicleListWindow::SortVehicleList() void DepotSortList(VehicleList *list) { if (list->size() < 2) return; - QSortT(list->Begin(), list->size(), &VehicleNumberSorter); + QSortT(list->data(), list->size(), &VehicleNumberSorter); } /** draw the vehicle profit button in the vehicle list window. */ diff --git a/src/viewport.cpp b/src/viewport.cpp index 929616ba52..892e94d603 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -628,8 +628,8 @@ static void AddCombinedSprite(SpriteID image, PaletteID pal, int x, int y, int z pt.y + spr->y_offs + spr->height <= _vd.dpi.top) return; - const ParentSpriteToDraw *pstd = _vd.parent_sprites_to_draw.End() - 1; - AddChildSpriteScreen(image, pal, pt.x - pstd->left, pt.y - pstd->top, false, sub, false); + const ParentSpriteToDraw &pstd = _vd.parent_sprites_to_draw.back(); + AddChildSpriteScreen(image, pal, pt.x - pstd.left, pt.y - pstd.top, false, sub, false); } /** @@ -1393,9 +1393,8 @@ void ViewportSign::MarkDirty(ZoomLevel maxzoom) const static void ViewportDrawTileSprites(const TileSpriteToDrawVector *tstdv) { - const TileSpriteToDraw *tsend = tstdv->End(); - for (const TileSpriteToDraw *ts = tstdv->Begin(); ts != tsend; ++ts) { - DrawSpriteViewport(ts->image, ts->pal, ts->x, ts->y, ts->sub); + for (const TileSpriteToDraw &ts : *tstdv) { + DrawSpriteViewport(ts.image, ts.pal, ts.x, ts.y, ts.sub); } } @@ -1408,8 +1407,8 @@ static bool ViewportSortParentSpritesChecker() /** Sort parent sprites pointer array */ static void ViewportSortParentSprites(ParentSpriteToSortVector *psdv) { - ParentSpriteToDraw **psdvend = psdv->End(); - ParentSpriteToDraw **psd = psdv->Begin(); + auto psdvend = psdv->end(); + auto psd = psdv->begin(); while (psd != psdvend) { ParentSpriteToDraw *ps = *psd; @@ -1420,7 +1419,7 @@ static void ViewportSortParentSprites(ParentSpriteToSortVector *psdv) ps->comparison_done = true; - for (ParentSpriteToDraw **psd2 = psd + 1; psd2 != psdvend; psd2++) { + for (auto psd2 = psd + 1; psd2 != psdvend; psd2++) { ParentSpriteToDraw *ps2 = *psd2; if (ps2->comparison_done) continue; @@ -1455,7 +1454,7 @@ static void ViewportSortParentSprites(ParentSpriteToSortVector *psdv) /* Move ps2 in front of ps */ ParentSpriteToDraw *temp = ps2; - for (ParentSpriteToDraw **psd3 = psd2; psd3 > psd; psd3--) { + for (auto psd3 = psd2; psd3 > psd; psd3--) { *psd3 = *(psd3 - 1); } *psd = temp; @@ -1465,9 +1464,7 @@ static void ViewportSortParentSprites(ParentSpriteToSortVector *psdv) static void ViewportDrawParentSprites(const ParentSpriteToSortVector *psd, const ChildScreenSpriteToDrawVector *csstdv) { - const ParentSpriteToDraw * const *psd_end = psd->End(); - for (const ParentSpriteToDraw * const *it = psd->Begin(); it != psd_end; it++) { - const ParentSpriteToDraw *ps = *it; + for (const ParentSpriteToDraw *ps : *psd) { if (ps->image != SPR_EMPTY_BOUNDING_BOX) DrawSpriteViewport(ps->image, ps->pal, ps->x, ps->y, ps->sub); int child_idx = ps->first_child; @@ -1485,9 +1482,7 @@ static void ViewportDrawParentSprites(const ParentSpriteToSortVector *psd, const */ static void ViewportDrawBoundingBoxes(const ParentSpriteToSortVector *psd) { - const ParentSpriteToDraw * const *psd_end = psd->End(); - for (const ParentSpriteToDraw * const *it = psd->Begin(); it != psd_end; it++) { - const ParentSpriteToDraw *ps = *it; + for (const ParentSpriteToDraw *ps : *psd) { Point pt1 = RemapCoords(ps->xmax + 1, ps->ymax + 1, ps->zmax + 1); // top front corner Point pt2 = RemapCoords(ps->xmin , ps->ymax + 1, ps->zmax + 1); // top left corner Point pt3 = RemapCoords(ps->xmax + 1, ps->ymin , ps->zmax + 1); // top right corner @@ -1524,38 +1519,37 @@ static void ViewportDrawDirtyBlocks() static void ViewportDrawStrings(ZoomLevel zoom, const StringSpriteToDrawVector *sstdv) { - const StringSpriteToDraw *ssend = sstdv->End(); - for (const StringSpriteToDraw *ss = sstdv->Begin(); ss != ssend; ++ss) { + for (const StringSpriteToDraw &ss : *sstdv) { TextColour colour = TC_BLACK; - bool small = HasBit(ss->width, 15); - int w = GB(ss->width, 0, 15); - int x = UnScaleByZoom(ss->x, zoom); - int y = UnScaleByZoom(ss->y, zoom); + bool small = HasBit(ss.width, 15); + int w = GB(ss.width, 0, 15); + int x = UnScaleByZoom(ss.x, zoom); + int y = UnScaleByZoom(ss.y, zoom); int h = VPSM_TOP + (small ? FONT_HEIGHT_SMALL : FONT_HEIGHT_NORMAL) + VPSM_BOTTOM; - SetDParam(0, ss->params[0]); - SetDParam(1, ss->params[1]); + SetDParam(0, ss.params[0]); + SetDParam(1, ss.params[1]); - if (ss->colour != INVALID_COLOUR) { + if (ss.colour != INVALID_COLOUR) { /* Do not draw signs nor station names if they are set invisible */ - if (IsInvisibilitySet(TO_SIGNS) && ss->string != STR_WHITE_SIGN) continue; + if (IsInvisibilitySet(TO_SIGNS) && ss.string != STR_WHITE_SIGN) continue; - if (IsTransparencySet(TO_SIGNS) && ss->string != STR_WHITE_SIGN) { + if (IsTransparencySet(TO_SIGNS) && ss.string != STR_WHITE_SIGN) { /* Don't draw the rectangle. * Real colours need the TC_IS_PALETTE_COLOUR flag. * Otherwise colours from _string_colourmap are assumed. */ - colour = (TextColour)_colour_gradient[ss->colour][6] | TC_IS_PALETTE_COLOUR; + colour = (TextColour)_colour_gradient[ss.colour][6] | TC_IS_PALETTE_COLOUR; } else { /* Draw the rectangle if 'transparent station signs' is off, * or if we are drawing a general text sign (STR_WHITE_SIGN). */ DrawFrameRect( - x, y, x + w, y + h, ss->colour, + x, y, x + w, y + h, ss.colour, IsTransparencySet(TO_SIGNS) ? FR_TRANSPARENT : FR_NONE ); } } - DrawString(x + VPSM_LEFT, x + w - 1 - VPSM_RIGHT, y + VPSM_TOP, ss->string, colour, SA_HOR_CENTER); + DrawString(x + VPSM_LEFT, x + w - 1 - VPSM_RIGHT, y + VPSM_TOP, ss.string, colour, SA_HOR_CENTER); } } @@ -1590,9 +1584,8 @@ void ViewportDoDraw(const ViewPort *vp, int left, int top, int right, int bottom if (_vd.tile_sprites_to_draw.size() != 0) ViewportDrawTileSprites(&_vd.tile_sprites_to_draw); - ParentSpriteToDraw *psd_end = _vd.parent_sprites_to_draw.End(); - for (ParentSpriteToDraw *it = _vd.parent_sprites_to_draw.Begin(); it != psd_end; it++) { - _vd.parent_sprites_to_sort.push_back(it); + for (auto &psd : _vd.parent_sprites_to_draw) { + _vd.parent_sprites_to_sort.push_back(&psd); } _vp_sprite_sorter(&_vd.parent_sprites_to_sort); diff --git a/src/viewport_sprite_sorter_sse4.cpp b/src/viewport_sprite_sorter_sse4.cpp index fb78c51c86..212ff12e68 100644 --- a/src/viewport_sprite_sorter_sse4.cpp +++ b/src/viewport_sprite_sorter_sse4.cpp @@ -29,8 +29,8 @@ void ViewportSortParentSpritesSSE41(ParentSpriteToSortVector *psdv) { const __m128i mask_ptest = _mm_setr_epi8(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0); - ParentSpriteToDraw ** const psdvend = psdv->End(); - ParentSpriteToDraw **psd = psdv->Begin(); + auto const psdvend = psdv->end(); + auto psd = psdv->begin(); while (psd != psdvend) { ParentSpriteToDraw * const ps = *psd; @@ -41,7 +41,7 @@ void ViewportSortParentSpritesSSE41(ParentSpriteToSortVector *psdv) ps->comparison_done = true; - for (ParentSpriteToDraw **psd2 = psd + 1; psd2 != psdvend; psd2++) { + for (auto psd2 = psd + 1; psd2 != psdvend; psd2++) { ParentSpriteToDraw * const ps2 = *psd2; if (ps2->comparison_done) continue; @@ -85,7 +85,7 @@ void ViewportSortParentSpritesSSE41(ParentSpriteToSortVector *psdv) /* Move ps2 in front of ps */ ParentSpriteToDraw * const temp = ps2; - for (ParentSpriteToDraw **psd3 = psd2; psd3 > psd; psd3--) { + for (auto psd3 = psd2; psd3 > psd; psd3--) { *psd3 = *(psd3 - 1); } *psd = temp; diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp index 33d59effc4..7c59cca7a5 100644 --- a/src/widgets/dropdown.cpp +++ b/src/widgets/dropdown.cpp @@ -174,8 +174,7 @@ struct DropdownWindow : Window { /* Total length of list */ int list_height = 0; - for (const DropDownListItem * const *it = list->Begin(); it != list->End(); ++it) { - const DropDownListItem *item = *it; + for (const DropDownListItem *item : *list) { list_height += item->Height(items_width); } @@ -230,13 +229,10 @@ struct DropdownWindow : Window { int width = nwi->current_x - 4; int pos = this->vscroll->GetPosition(); - const DropDownList *list = this->list; - - for (const DropDownListItem * const *it = list->Begin(); it != list->End(); ++it) { + for (const DropDownListItem *item : *this->list) { /* Skip items that are scrolled up */ if (--pos >= 0) continue; - const DropDownListItem *item = *it; int item_height = item->Height(width); if (y < item_height) { @@ -259,8 +255,7 @@ struct DropdownWindow : Window { int y = r.top + 2; int pos = this->vscroll->GetPosition(); - for (const DropDownListItem * const *it = this->list->Begin(); it != this->list->End(); ++it) { - const DropDownListItem *item = *it; + for (const DropDownListItem *item : *this->list) { int item_height = item->Height(r.right - r.left + 1); /* Skip items that are scrolled up */ @@ -389,8 +384,7 @@ void ShowDropDownListAt(Window *w, const DropDownList *list, int selected, int b /* Total height of list */ uint height = 0; - for (const DropDownListItem * const *it = list->Begin(); it != list->End(); ++it) { - const DropDownListItem *item = *it; + for (const DropDownListItem *item : *list) { height += item->Height(width); if (auto_width) max_item_width = max(max_item_width, item->Width() + 5); } diff --git a/src/window.cpp b/src/window.cpp index a8d1ce75e2..9366b92eb8 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -144,9 +144,9 @@ void WindowDesc::LoadFromConfig() { IniFile *ini = new IniFile(); ini->LoadFromDisk(_windows_file, NO_DIRECTORY); - for (WindowDesc **it = _window_descs->Begin(); it != _window_descs->End(); ++it) { - if ((*it)->ini_key == NULL) continue; - IniLoadWindowSettings(ini, (*it)->ini_key, *it); + for (WindowDesc *wd : *_window_descs) { + if (wd->ini_key == NULL) continue; + IniLoadWindowSettings(ini, wd->ini_key, wd); } delete ini; } @@ -166,13 +166,13 @@ static int CDECL DescSorter(WindowDesc * const *a, WindowDesc * const *b) void WindowDesc::SaveToConfig() { /* Sort the stuff to get a nice ini file on first write */ - QSortT(_window_descs->Begin(), _window_descs->size(), DescSorter); + QSortT(_window_descs->data(), _window_descs->size(), DescSorter); IniFile *ini = new IniFile(); ini->LoadFromDisk(_windows_file, NO_DIRECTORY); - for (WindowDesc **it = _window_descs->Begin(); it != _window_descs->End(); ++it) { - if ((*it)->ini_key == NULL) continue; - IniSaveWindowSettings(ini, (*it)->ini_key, *it); + for (WindowDesc *wd : *_window_descs) { + if (wd->ini_key == NULL) continue; + IniSaveWindowSettings(ini, wd->ini_key, wd); } ini->SaveToDisk(_windows_file); delete ini; @@ -330,8 +330,8 @@ Scrollbar *Window::GetScrollbar(uint widnum) */ const QueryString *Window::GetQueryString(uint widnum) const { - const SmallMap::Pair *query = this->querystrings.Find(widnum); - return query != this->querystrings.End() ? query->second : NULL; + auto query = this->querystrings.Find(widnum); + return query != this->querystrings.end() ? query->second : NULL; } /** @@ -1944,8 +1944,8 @@ static void DecreaseWindowCounters() } /* Handle editboxes */ - for (SmallMap::Pair *it = w->querystrings.Begin(); it != w->querystrings.End(); ++it) { - it->second->HandleEditBox(w, it->first); + for (SmallMap::Pair &pair : w->querystrings) { + pair.second->HandleEditBox(w, pair.first); } w->OnMouseLoop(); @@ -3252,8 +3252,9 @@ void Window::InvalidateData(int data, bool gui_scope) */ void Window::ProcessScheduledInvalidations() { - for (int *data = this->scheduled_invalidation_data.Begin(); this->window_class != WC_INVALID && data != this->scheduled_invalidation_data.End(); data++) { - this->OnInvalidateData(*data, true); + for (int data : this->scheduled_invalidation_data) { + if (this->window_class == WC_INVALID) break; + this->OnInvalidateData(data, true); } this->scheduled_invalidation_data.clear(); } From 6570f7989f5c1fc5a1276505a8e6efce7838efd9 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Sun, 3 Mar 2019 15:20:29 +0000 Subject: [PATCH 566/622] Codechange: Declare SmallVector as an alias for std::vector --- src/core/smallvec_type.hpp | 41 +++----------------------------------- 1 file changed, 3 insertions(+), 38 deletions(-) diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 5ec07f2f01..6f86e11cc0 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -45,45 +45,10 @@ inline bool include(std::vector& vec, const T &item) * @tparam T The type of the items stored * @tparam S The steps of allocation */ + + template -class SmallVector : public std::vector { -public: - SmallVector() = default; - - /** - * Copy constructor. - * @param other The other vector to copy. - */ - SmallVector(const SmallVector &other) = default; - - /** - * Generic copy constructor. - * @param other The other vector to copy. - */ - template - SmallVector(const SmallVector &other) : std::vector(other) - { - } - - /** - * Assignment. - * @param other The other vector to assign. - */ - SmallVector &operator=(const SmallVector &other) = default; - - /** - * Generic assignment. - * @param other The other vector to assign. - */ - template - SmallVector &operator=(const SmallVector &other) - { - std::vector::operator=(other); - return *this; - } - - ~SmallVector() = default; -}; +using SmallVector = std::vector; /** * Helper function to get the index of an item From c01a2e2a81d8e7bcd47d46292ed0b7d452081c31 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Sun, 3 Mar 2019 17:30:09 +0000 Subject: [PATCH 567/622] Codechange: Removed SmallVector completely --- src/animated_tile.cpp | 2 +- src/company_gui.cpp | 2 +- src/core/pool_type.hpp | 2 +- src/core/smallmap_type.hpp | 2 +- src/core/smallstack_type.hpp | 2 +- src/core/smallvec_type.hpp | 27 +++++---------------------- src/economy.cpp | 2 +- src/engine_base.h | 2 +- src/fios.cpp | 2 +- src/fios.h | 2 +- src/group_gui.cpp | 2 +- src/hotkeys.cpp | 4 ++-- src/hotkeys.h | 2 +- src/industry_cmd.cpp | 2 +- src/industry_gui.cpp | 2 +- src/language.h | 2 +- src/linkgraph/linkgraph.h | 2 +- src/linkgraph/linkgraphjob.h | 2 +- src/music/midifile.hpp | 2 +- src/network/core/address.h | 2 +- src/network/core/tcp_connect.cpp | 2 +- src/network/core/tcp_http.cpp | 2 +- src/network/network_content.h | 10 +++++----- src/network/network_content_gui.cpp | 2 +- src/network/network_gui.cpp | 2 +- src/newgrf.cpp | 8 ++++---- src/newgrf.h | 4 ++-- src/newgrf_commons.cpp | 2 +- src/newgrf_commons.h | 2 +- src/newgrf_config.h | 2 +- src/newgrf_debug.h | 2 +- src/newgrf_debug_gui.cpp | 4 ++-- src/newgrf_engine.cpp | 4 ++-- src/newgrf_sound.cpp | 2 +- src/newgrf_text.cpp | 4 ++-- src/newgrf_text.h | 4 ++-- src/object_base.h | 2 +- src/object_cmd.cpp | 2 +- src/openttd.cpp | 4 ++-- src/rail.h | 2 +- src/rail_cmd.cpp | 4 ++-- src/saveload/afterload.cpp | 4 ++-- src/saveload/animated_tile_sl.cpp | 2 +- src/saveload/labelmaps_sl.cpp | 4 ++-- src/saveload/linkgraph_sl.cpp | 2 +- src/saveload/oldloader_sl.cpp | 2 +- src/saveload/waypoint_sl.cpp | 2 +- src/script/squirrel_helper.hpp | 4 ++-- src/settingsgen/settingsgen.cpp | 2 +- src/sortlist_type.h | 2 +- src/station_cmd.cpp | 14 +++++++------- src/station_gui.cpp | 4 ++-- src/strgen/strgen_base.cpp | 2 +- src/string.cpp | 4 ++-- src/stringfilter_type.h | 2 +- src/subsidy.cpp | 2 +- src/texteff.cpp | 2 +- src/textfile_gui.h | 12 ++++++------ src/timetable_cmd.cpp | 2 +- src/train_cmd.cpp | 2 +- src/train_gui.cpp | 2 +- src/vehicle_cmd.cpp | 3 +-- src/vehicle_func.h | 2 +- src/vehicle_gui.cpp | 4 ++-- src/vehiclelist.h | 2 +- src/viewport.cpp | 8 ++++---- src/viewport_sprite_sorter.h | 2 +- src/window.cpp | 4 ++-- src/window_gui.h | 2 +- 69 files changed, 109 insertions(+), 127 deletions(-) diff --git a/src/animated_tile.cpp b/src/animated_tile.cpp index e2a5553711..24543529df 100644 --- a/src/animated_tile.cpp +++ b/src/animated_tile.cpp @@ -19,7 +19,7 @@ #include "safeguards.h" /** The table/list with animated tiles. */ -SmallVector _animated_tiles; +std::vector _animated_tiles; /** * Removes the given tile from the animated tile table. diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 6b67f373ba..e5dbc86a42 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -562,7 +562,7 @@ private: uint rows; uint line_height; GUIGroupList groups; - SmallVector indents; + std::vector indents; Scrollbar *vscroll; void ShowColourDropDownMenu(uint32 widget) diff --git a/src/core/pool_type.hpp b/src/core/pool_type.hpp index a6f7e4fe8b..38f314ebbf 100644 --- a/src/core/pool_type.hpp +++ b/src/core/pool_type.hpp @@ -26,7 +26,7 @@ enum PoolType { }; DECLARE_ENUM_AS_BIT_SET(PoolType) -typedef SmallVector PoolVector; ///< Vector of pointers to PoolBase +typedef std::vector PoolVector; ///< Vector of pointers to PoolBase /** Base class for base of all pools. */ struct PoolBase { diff --git a/src/core/smallmap_type.hpp b/src/core/smallmap_type.hpp index 8cc96302f3..debd4165e6 100644 --- a/src/core/smallmap_type.hpp +++ b/src/core/smallmap_type.hpp @@ -40,7 +40,7 @@ struct SmallPair { * @see SmallVector */ template -struct SmallMap : SmallVector, S> { +struct SmallMap : std::vector > { typedef ::SmallPair Pair; typedef Pair *iterator; typedef const Pair *const_iterator; diff --git a/src/core/smallstack_type.hpp b/src/core/smallstack_type.hpp index 5a9d329a9f..c273fdec46 100644 --- a/src/core/smallstack_type.hpp +++ b/src/core/smallstack_type.hpp @@ -87,7 +87,7 @@ private: Tindex first_free; ThreadMutex *mutex; - SmallVector data; + std::vector data; }; /** diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 6f86e11cc0..19dab22286 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -34,22 +34,6 @@ inline bool include(std::vector& vec, const T &item) return is_member; } - -/** - * Simple vector template class. - * - * @note There are no asserts in the class so you have - * to care about that you grab an item which is - * inside the list. - * - * @tparam T The type of the items stored - * @tparam S The steps of allocation - */ - - -template -using SmallVector = std::vector; - /** * Helper function to get the index of an item * Consider using std::set, std::unordered_set or std::flat_set in new code @@ -73,19 +57,18 @@ int find_index(std::vector const& vec, T const& item) * Consider using std::back_inserter in new code * * @param vec A reference to the vector to be extended - * @param num The number of elements to default-construct + * @param num Number of elements to be default-constructed * * @return Pointer to the first new element */ template -inline T* grow(std::vector& vec, std::size_t num) +T* grow(std::vector& vec, std::size_t num) { - const std::size_t pos = vec.size(); + std::size_t const pos = vec.size(); vec.resize(pos + num); return vec.data() + pos; } - /** * Simple vector template class, with automatic free. * @@ -97,7 +80,7 @@ inline T* grow(std::vector& vec, std::size_t num) * @param S The steps of allocation */ template -class AutoFreeSmallVector : public SmallVector { +class AutoFreeSmallVector : public std::vector { public: ~AutoFreeSmallVector() { @@ -128,7 +111,7 @@ public: * @param S The steps of allocation */ template -class AutoDeleteSmallVector : public SmallVector { +class AutoDeleteSmallVector : public std::vector { public: ~AutoDeleteSmallVector() { diff --git a/src/economy.cpp b/src/economy.cpp index cab605f9af..d1ebd8a042 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -77,7 +77,7 @@ static inline int32 BigMulS(const int32 a, const int32 b, const uint8 shift) return (int32)((int64)a * (int64)b >> shift); } -typedef SmallVector SmallIndustryList; +typedef std::vector SmallIndustryList; /** * Score info, values used for computing the detailed performance rating. diff --git a/src/engine_base.h b/src/engine_base.h index 25c6bfbeb9..aaf88d9453 100644 --- a/src/engine_base.h +++ b/src/engine_base.h @@ -156,7 +156,7 @@ struct EngineIDMapping { * Stores the mapping of EngineID to the internal id of newgrfs. * Note: This is not part of Engine, as the data in the EngineOverrideManager and the engine pool get resetted in different cases. */ -struct EngineOverrideManager : SmallVector { +struct EngineOverrideManager : std::vector { static const uint NUM_DEFAULT_ENGINES; ///< Number of default entries void ResetToDefaultMapping(); diff --git a/src/fios.cpp b/src/fios.cpp index c27e6d8afd..cb157492e9 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -655,7 +655,7 @@ struct ScenarioIdentifier { /** * Scanner to find the unique IDs of scenarios */ -class ScenarioScanner : protected FileScanner, public SmallVector { +class ScenarioScanner : protected FileScanner, public std::vector { bool scanned; ///< Whether we've already scanned public: /** Initialise */ diff --git a/src/fios.h b/src/fios.h index cc69178137..52d85ad9b5 100644 --- a/src/fios.h +++ b/src/fios.h @@ -198,7 +198,7 @@ public: void BuildFileList(AbstractFileType abstract_filetype, SaveLoadOperation fop); const FiosItem *FindItem(const char *file); - SmallVector files; ///< The list of files. + std::vector files; ///< The list of files. }; enum SortingBits { diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 59b5112ff1..ca0b194f38 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -121,7 +121,7 @@ private: uint tiny_step_height; ///< Step height for the group list Scrollbar *group_sb; - SmallVector indents; ///< Indentation levels + std::vector indents; ///< Indentation levels Dimension column_size[VGC_END]; ///< Size of the columns in the group list. diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp index 0acc11c473..3093a8229a 100644 --- a/src/hotkeys.cpp +++ b/src/hotkeys.cpp @@ -24,7 +24,7 @@ char *_hotkeys_file; * List of all HotkeyLists. * This is a pointer to ensure initialisation order with the various static HotkeyList instances. */ -static SmallVector *_hotkey_lists = NULL; +static std::vector *_hotkey_lists = NULL; /** String representation of a keycode */ struct KeycodeNames { @@ -254,7 +254,7 @@ void Hotkey::AddKeycode(uint16 keycode) HotkeyList::HotkeyList(const char *ini_group, Hotkey *items, GlobalHotkeyHandlerFunc global_hotkey_handler) : global_hotkey_handler(global_hotkey_handler), ini_group(ini_group), items(items) { - if (_hotkey_lists == NULL) _hotkey_lists = new SmallVector(); + if (_hotkey_lists == NULL) _hotkey_lists = new std::vector(); _hotkey_lists->push_back(this); } diff --git a/src/hotkeys.h b/src/hotkeys.h index 25a489b3f3..fd729a47a9 100644 --- a/src/hotkeys.h +++ b/src/hotkeys.h @@ -29,7 +29,7 @@ struct Hotkey { const char *name; int num; - SmallVector keycodes; + std::vector keycodes; }; #define HOTKEY_LIST_END Hotkey((uint16)0, NULL, -1) diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 403e57a96f..c20b0a05bb 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1884,7 +1884,7 @@ static CommandCost CreateNewIndustryHelper(TileIndex tile, IndustryType type, Do *ip = NULL; - SmallVector object_areas(_cleared_object_areas); + std::vector object_areas(_cleared_object_areas); CommandCost ret = CheckIfIndustryTilesAreFree(tile, it, itspec_index, type, random_initial_bits, founder, creation_type, &custom_shape_check); _cleared_object_areas = object_areas; if (ret.Failed()) return ret; diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 5bcc03bdb1..ce8ac7fa30 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -2155,7 +2155,7 @@ next_cargo: ; struct IndustryCargoesWindow : public Window { static const int HOR_TEXT_PADDING, VERT_TEXT_PADDING; - typedef SmallVector Fields; + typedef std::vector Fields; Fields fields; ///< Fields to display in the #WID_IC_PANEL. uint ind_cargo; ///< If less than #NUM_INDUSTRYTYPES, an industry type, else a cargo id + NUM_INDUSTRYTYPES. diff --git a/src/language.h b/src/language.h index 8df59f74ff..be2d37084b 100644 --- a/src/language.h +++ b/src/language.h @@ -96,7 +96,7 @@ struct LanguageMetadata : public LanguagePackHeader { }; /** Type for the list of language meta data. */ -typedef SmallVector LanguageList; +typedef std::vector LanguageList; /** The actual list of language meta data. */ extern LanguageList _languages; diff --git a/src/linkgraph/linkgraph.h b/src/linkgraph/linkgraph.h index 1900c0b1f5..3283eb9bf2 100644 --- a/src/linkgraph/linkgraph.h +++ b/src/linkgraph/linkgraph.h @@ -435,7 +435,7 @@ public: void RemoveEdge(NodeID to); }; - typedef SmallVector NodeVector; + typedef std::vector NodeVector; typedef SmallMatrix EdgeMatrix; /** Minimum effective distance for timeout calculation. */ diff --git a/src/linkgraph/linkgraphjob.h b/src/linkgraph/linkgraphjob.h index b4587a7842..b47dd70b9b 100644 --- a/src/linkgraph/linkgraphjob.h +++ b/src/linkgraph/linkgraphjob.h @@ -50,7 +50,7 @@ private: void Init(uint supply); }; - typedef SmallVector NodeAnnotationVector; + typedef std::vector NodeAnnotationVector; typedef SmallMatrix EdgeAnnotationMatrix; friend const SaveLoad *GetLinkGraphJobDesc(); diff --git a/src/music/midifile.hpp b/src/music/midifile.hpp index 0016be86ca..e0e5170b7f 100644 --- a/src/music/midifile.hpp +++ b/src/music/midifile.hpp @@ -24,7 +24,7 @@ struct MidiFile { struct DataBlock { uint32 ticktime; ///< tick number since start of file this block should be triggered at uint32 realtime; ///< real-time (microseconds) since start of file this block should be triggered at - SmallVector data; ///< raw midi data contained in block + std::vector data; ///< raw midi data contained in block DataBlock(uint32 _ticktime = 0) : ticktime(_ticktime) { } }; struct TempoChange { diff --git a/src/network/core/address.h b/src/network/core/address.h index b5c78c79b7..f6d7870bf6 100644 --- a/src/network/core/address.h +++ b/src/network/core/address.h @@ -18,7 +18,7 @@ #include "../../core/smallmap_type.hpp" class NetworkAddress; -typedef SmallVector NetworkAddressList; ///< Type for a list of addresses. +typedef std::vector NetworkAddressList; ///< Type for a list of addresses. typedef SmallMap SocketList; ///< Type for a mapping between address and socket. /** diff --git a/src/network/core/tcp_connect.cpp b/src/network/core/tcp_connect.cpp index d699cf60d0..d76042821a 100644 --- a/src/network/core/tcp_connect.cpp +++ b/src/network/core/tcp_connect.cpp @@ -19,7 +19,7 @@ #include "../../safeguards.h" /** List of connections that are currently being created */ -static SmallVector _tcp_connecters; +static std::vector _tcp_connecters; /** * Create a new connecter for the given address diff --git a/src/network/core/tcp_http.cpp b/src/network/core/tcp_http.cpp index cec77fb147..3e9cc81415 100644 --- a/src/network/core/tcp_http.cpp +++ b/src/network/core/tcp_http.cpp @@ -21,7 +21,7 @@ #include "../../safeguards.h" /** List of open HTTP connections. */ -static SmallVector _http_connections; +static std::vector _http_connections; /** * Start the querying diff --git a/src/network/network_content.h b/src/network/network_content.h index 26300c4ca2..e62c921e6a 100644 --- a/src/network/network_content.h +++ b/src/network/network_content.h @@ -16,9 +16,9 @@ #include "core/tcp_http.h" /** Vector with content info */ -typedef SmallVector ContentVector; +typedef std::vector ContentVector; /** Vector with constant content info */ -typedef SmallVector ConstContentVector; +typedef std::vector ConstContentVector; /** Iterator for the content vector */ typedef ContentInfo **ContentIterator; @@ -66,11 +66,11 @@ struct ContentCallback { */ class ClientNetworkContentSocketHandler : public NetworkContentSocketHandler, ContentCallback, HTTPCallback { protected: - typedef SmallVector ContentIDList; ///< List of content IDs to (possibly) select. - SmallVector callbacks; ///< Callbacks to notify "the world" + typedef std::vector ContentIDList; ///< List of content IDs to (possibly) select. + std::vector callbacks; ///< Callbacks to notify "the world" ContentIDList requested; ///< ContentIDs we already requested (so we don't do it again) ContentVector infos; ///< All content info we received - SmallVector http_response; ///< The HTTP response to the requests we've been doing + std::vector http_response; ///< The HTTP response to the requests we've been doing int http_response_index; ///< Where we are, in the response, with handling it FILE *curFile; ///< Currently downloaded file diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 9ea56d7471..09168185ac 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -160,7 +160,7 @@ void BaseNetworkContentDownloadStatusWindow::OnDownloadProgress(const ContentInf /** Window for showing the download status of content */ struct NetworkContentDownloadStatusWindow : public BaseNetworkContentDownloadStatusWindow { private: - SmallVector receivedTypes; ///< Types we received so we can update their cache + std::vector receivedTypes; ///< Types we received so we can update their cache public: /** diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index a8dd2aa526..b35e915286 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1728,7 +1728,7 @@ struct NetworkClientListPopupWindow : Window { uint sel_index; ClientID client_id; Point desired_location; - SmallVector actions; ///< Actions to execute + std::vector actions; ///< Actions to execute /** * Add an action to the list of actions to execute. diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 8507d9d611..e45f34b76e 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -65,7 +65,7 @@ * served as subject to the initial testing of this codec. */ /** List of all loaded GRF files */ -static SmallVector _grf_files; +static std::vector _grf_files; /** Miscellaneous GRF features, set by Action 0x0D, parameter 0x9E */ byte _misc_grf_features = 0; @@ -459,7 +459,7 @@ struct StringIDMapping { StringID source; ///< Source StringID (GRF local). StringID *target; ///< Destination for mapping result. }; -typedef SmallVector StringIDMappingVector; +typedef std::vector StringIDMappingVector; static StringIDMappingVector _string_to_grf_mapping; /** @@ -1901,7 +1901,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte /* On error, bail out immediately. Temporary GRF data was already freed */ if (_cur.skip_sprites < 0) return CIR_DISABLED; - static SmallVector tmp_layout; + static std::vector tmp_layout; tmp_layout.clear(); for (;;) { /* no relative bounding box support */ @@ -4787,7 +4787,7 @@ static void NewSpriteGroup(ByteReader *buf) case 2: group->size = DSG_SIZE_DWORD; varsize = 4; break; } - static SmallVector adjusts; + static std::vector adjusts; adjusts.clear(); /* Loop through the var adjusts. Unfortunately we don't know how many we have diff --git a/src/newgrf.h b/src/newgrf.h index 1ab55dd044..d58fe870fe 100644 --- a/src/newgrf.h +++ b/src/newgrf.h @@ -122,10 +122,10 @@ struct GRFFile : ZeroedMemoryAllocator { GRFLabel *label; ///< Pointer to the first label. This is a linked list, not an array. - SmallVector cargo_list; ///< Cargo translation table (local ID -> label) + std::vector cargo_list; ///< Cargo translation table (local ID -> label) uint8 cargo_map[NUM_CARGO]; ///< Inverse cargo translation table (CargoID -> local ID) - SmallVector railtype_list; ///< Railtype translation table + std::vector railtype_list; ///< Railtype translation table RailTypeByte railtype_map[RAILTYPE_END]; CanalProperties canal_local_properties[CF_END]; ///< Canal properties as set by this NewGRF diff --git a/src/newgrf_commons.cpp b/src/newgrf_commons.cpp index 5626c6543e..e05217fee9 100644 --- a/src/newgrf_commons.cpp +++ b/src/newgrf_commons.cpp @@ -579,7 +579,7 @@ bool Convert8bitBooleanCallback(const GRFFile *grffile, uint16 cbid, uint16 cb_r } -/* static */ SmallVector NewGRFSpriteLayout::result_seq; +/* static */ std::vector NewGRFSpriteLayout::result_seq; /** * Clone the building sprites of a spritelayout. diff --git a/src/newgrf_commons.h b/src/newgrf_commons.h index c7ca609fa9..819e84451c 100644 --- a/src/newgrf_commons.h +++ b/src/newgrf_commons.h @@ -170,7 +170,7 @@ struct NewGRFSpriteLayout : ZeroedMemoryAllocator, DrawTileSprites { } private: - static SmallVector result_seq; ///< Temporary storage when preprocessing spritelayouts. + static std::vector result_seq; ///< Temporary storage when preprocessing spritelayouts. }; /** diff --git a/src/newgrf_config.h b/src/newgrf_config.h index 4266dd1fdf..6396fa368c 100644 --- a/src/newgrf_config.h +++ b/src/newgrf_config.h @@ -172,7 +172,7 @@ struct GRFConfig : ZeroedMemoryAllocator { uint8 num_params; ///< Number of used parameters uint8 num_valid_params; ///< NOSAVE: Number of valid parameters (action 0x14) uint8 palette; ///< GRFPalette, bitset - SmallVector param_info; ///< NOSAVE: extra information about the parameters + std::vector param_info; ///< NOSAVE: extra information about the parameters bool has_param_defaults; ///< NOSAVE: did this newgrf specify any defaults for it's parameters struct GRFConfig *next; ///< NOSAVE: Next item in the linked list diff --git a/src/newgrf_debug.h b/src/newgrf_debug.h index 6e514c4ce1..b73c93266f 100644 --- a/src/newgrf_debug.h +++ b/src/newgrf_debug.h @@ -29,7 +29,7 @@ struct NewGrfDebugSpritePicker { NewGrfDebugSpritePickerMode mode; ///< Current state void *clicked_pixel; ///< Clicked pixel (pointer to blitter buffer) uint32 click_time; ///< Realtime tick when clicked to detect next frame - SmallVector sprites; ///< Sprites found + std::vector sprites; ///< Sprites found }; extern NewGrfDebugSpritePicker _newgrf_debug_sprite_picker; diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index f8745440c1..2ea9a6d88d 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -47,7 +47,7 @@ #include "safeguards.h" /** The sprite picker. */ -NewGrfDebugSpritePicker _newgrf_debug_sprite_picker = { SPM_NONE, NULL, 0, SmallVector() }; +NewGrfDebugSpritePicker _newgrf_debug_sprite_picker = { SPM_NONE, NULL, 0, std::vector() }; /** * Get the feature index related to the window number. @@ -894,7 +894,7 @@ struct SpriteAlignerWindow : Window { const NWidgetBase *nwid = this->GetWidget(widget); int step_size = nwid->resize_y; - SmallVector &list = _newgrf_debug_sprite_picker.sprites; + std::vector &list = _newgrf_debug_sprite_picker.sprites; int max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), list.size()); int y = r.top + WD_FRAMERECT_TOP; diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index 0c7e4314b8..a9929540a9 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -1185,7 +1185,7 @@ struct ListOrderChange { uint target; ///< local ID }; -static SmallVector _list_order_changes; +static std::vector _list_order_changes; /** * Record a vehicle ListOrderChange. @@ -1226,7 +1226,7 @@ static int CDECL EnginePreSort(const EngineID *a, const EngineID *b) void CommitVehicleListOrderChanges() { /* Pre-sort engines by scope-grfid and local index */ - SmallVector ordering; + std::vector ordering; Engine *e; FOR_ALL_ENGINES(e) { ordering.push_back(e->index); diff --git a/src/newgrf_sound.cpp b/src/newgrf_sound.cpp index e9f1163c69..c37d6b4ed4 100644 --- a/src/newgrf_sound.cpp +++ b/src/newgrf_sound.cpp @@ -22,7 +22,7 @@ #include "safeguards.h" -static SmallVector _sounds; +static std::vector _sounds; /** diff --git a/src/newgrf_text.cpp b/src/newgrf_text.cpp index 57f2ce5e4c..e1f73a5c3c 100644 --- a/src/newgrf_text.cpp +++ b/src/newgrf_text.cpp @@ -167,7 +167,7 @@ static byte _currentLangID = GRFLX_ENGLISH; ///< by default, english is used. */ int LanguageMap::GetMapping(int newgrf_id, bool gender) const { - const SmallVector &map = gender ? this->gender_map : this->case_map; + const std::vector &map = gender ? this->gender_map : this->case_map; for (const Mapping &m : map) { if (m.newgrf_id == newgrf_id) return m.openttd_id; } @@ -182,7 +182,7 @@ int LanguageMap::GetMapping(int newgrf_id, bool gender) const */ int LanguageMap::GetReverseMapping(int openttd_id, bool gender) const { - const SmallVector &map = gender ? this->gender_map : this->case_map; + const std::vector &map = gender ? this->gender_map : this->case_map; for (const Mapping &m : map) { if (m.openttd_id == openttd_id) return m.newgrf_id; } diff --git a/src/newgrf_text.h b/src/newgrf_text.h index 033967d307..601535d991 100644 --- a/src/newgrf_text.h +++ b/src/newgrf_text.h @@ -57,8 +57,8 @@ struct LanguageMap { * the genders/cases/plural OpenTTD IDs to the NewGRF's internal IDs. In this * case a NewGRF developer/translator might want a different translation for * both cases. Thus we are basically implementing a multi-map. */ - SmallVector gender_map; ///< Mapping of NewGRF and OpenTTD IDs for genders. - SmallVector case_map; ///< Mapping of NewGRF and OpenTTD IDs for cases. + std::vector gender_map; ///< Mapping of NewGRF and OpenTTD IDs for genders. + std::vector case_map; ///< Mapping of NewGRF and OpenTTD IDs for cases. int plural_form; ///< The plural form used for this language. int GetMapping(int newgrf_id, bool gender) const; diff --git a/src/object_base.h b/src/object_base.h index 47e5a7f94c..228eeaa2dc 100644 --- a/src/object_base.h +++ b/src/object_base.h @@ -92,6 +92,6 @@ struct ClearedObjectArea { }; ClearedObjectArea *FindClearedObject(TileIndex tile); -extern SmallVector _cleared_object_areas; +extern std::vector _cleared_object_areas; #endif /* OBJECT_BASE_H */ diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp index 26f0fc4e80..92e6d6ab2a 100644 --- a/src/object_cmd.cpp +++ b/src/object_cmd.cpp @@ -442,7 +442,7 @@ static void ReallyClearObjectTile(Object *o) delete o; } -SmallVector _cleared_object_areas; +std::vector _cleared_object_areas; /** * Find the entry in _cleared_object_areas which occupies a certain tile. diff --git a/src/openttd.cpp b/src/openttd.cpp index 5c7af2dfcb..29319236af 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1174,7 +1174,7 @@ static void CheckCaches() if (_debug_desync_level <= 1) return; /* Check the town caches. */ - SmallVector old_town_caches; + std::vector old_town_caches; Town *t; FOR_ALL_TOWNS(t) { old_town_caches.push_back(t->cache); @@ -1193,7 +1193,7 @@ static void CheckCaches() } /* Check company infrastructure cache. */ - SmallVector old_infrastructure; + std::vector old_infrastructure; Company *c; FOR_ALL_COMPANIES(c) old_infrastructure.push_back(c->infrastructure); diff --git a/src/rail.h b/src/rail.h index ac5805d098..b08f0650a0 100644 --- a/src/rail.h +++ b/src/rail.h @@ -118,7 +118,7 @@ enum RailFenceOffset { }; /** List of rail type labels. */ -typedef SmallVector RailTypeLabelList; +typedef std::vector RailTypeLabelList; /** * This struct contains all the info that is needed to draw and construct tracks. diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 8e996bbe3c..4257b5258f 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -41,7 +41,7 @@ #include "safeguards.h" /** Helper type for lists/vectors of trains */ -typedef SmallVector TrainList; +typedef std::vector TrainList; RailtypeInfo _railtypes[RAILTYPE_END]; RailType _sorted_railtypes[RAILTYPE_END]; @@ -1603,7 +1603,7 @@ CommandCost CmdConvertRail(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 continue; } - SmallVector vehicles_affected; + std::vector vehicles_affected; /* Vehicle on the tile when not converting Rail <-> ElRail * Tunnels and bridges have special check later */ diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 3efed69e45..b4e3ce9865 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2195,7 +2195,7 @@ bool AfterLoadGame() /* Animated tiles would sometimes not be actually animated or * in case of old savegames duplicate. */ - extern SmallVector _animated_tiles; + extern std::vector _animated_tiles; for (auto tile = _animated_tiles.begin(); tile < _animated_tiles.end(); /* Nothing */) { /* Remove if tile is not animated */ @@ -2939,7 +2939,7 @@ bool AfterLoadGame() * So, make articulated parts catch up. */ RoadVehicle *v; bool roadside = _settings_game.vehicle.road_side == 1; - SmallVector skip_frames; + std::vector skip_frames; FOR_ALL_ROADVEHICLES(v) { if (!v->IsFrontEngine()) continue; skip_frames.clear(); diff --git a/src/saveload/animated_tile_sl.cpp b/src/saveload/animated_tile_sl.cpp index 4d4ed69a96..f82950c50f 100644 --- a/src/saveload/animated_tile_sl.cpp +++ b/src/saveload/animated_tile_sl.cpp @@ -18,7 +18,7 @@ #include "../safeguards.h" -extern SmallVector _animated_tiles; +extern std::vector _animated_tiles; /** * Save the ANIT chunk. diff --git a/src/saveload/labelmaps_sl.cpp b/src/saveload/labelmaps_sl.cpp index 3d930e7684..dd71f1c3e7 100644 --- a/src/saveload/labelmaps_sl.cpp +++ b/src/saveload/labelmaps_sl.cpp @@ -17,7 +17,7 @@ #include "../safeguards.h" -static SmallVector _railtype_list; +static std::vector _railtype_list; /** * Test if any saved rail type labels are different to the currently loaded @@ -42,7 +42,7 @@ static bool NeedRailTypeConversion() void AfterLoadLabelMaps() { if (NeedRailTypeConversion()) { - SmallVector railtype_conversion_map; + std::vector railtype_conversion_map; for (uint i = 0; i < _railtype_list.size(); i++) { RailType r = GetRailTypeByLabel(_railtype_list[i]); diff --git a/src/saveload/linkgraph_sl.cpp b/src/saveload/linkgraph_sl.cpp index 842ad6d429..90c056ebaa 100644 --- a/src/saveload/linkgraph_sl.cpp +++ b/src/saveload/linkgraph_sl.cpp @@ -51,7 +51,7 @@ const SaveLoad *GetLinkGraphDesc() */ const SaveLoad *GetLinkGraphJobDesc() { - static SmallVector saveloads; + static std::vector saveloads; static const char *prefix = "linkgraph."; /* Build the SaveLoad array on first call and don't touch it later on */ diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index 7b445858e8..a93006f1fa 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -491,7 +491,7 @@ static inline uint RemapOrderIndex(uint x) return _savegame_type == SGT_TTO ? (x - 0x1AC4) / 2 : (x - 0x1C18) / 2; } -extern SmallVector _animated_tiles; +extern std::vector _animated_tiles; extern char *_old_name_array; static uint32 _old_town_index; diff --git a/src/saveload/waypoint_sl.cpp b/src/saveload/waypoint_sl.cpp index d7701c8af8..1670864676 100644 --- a/src/saveload/waypoint_sl.cpp +++ b/src/saveload/waypoint_sl.cpp @@ -42,7 +42,7 @@ struct OldWaypoint { }; /** Temporary array with old waypoints. */ -static SmallVector _old_waypoints; +static std::vector _old_waypoints; /** * Update the waypoint orders to get the new waypoint ID. diff --git a/src/script/squirrel_helper.hpp b/src/script/squirrel_helper.hpp index 775fe142ee..add6b49c1b 100644 --- a/src/script/squirrel_helper.hpp +++ b/src/script/squirrel_helper.hpp @@ -29,7 +29,7 @@ namespace SQConvert { * comes out of scope. Useful to make sure you can use stredup(), * without leaking memory. */ - struct SQAutoFreePointers : SmallVector { + struct SQAutoFreePointers : std::vector { ~SQAutoFreePointers() { for (uint i = 0; i < std::vector::size(); i++) free(std::vector::operator[](i)); @@ -132,7 +132,7 @@ namespace SQConvert { sq_pushobject(vm, obj); sq_pushnull(vm); - SmallVector data; + std::vector data; while (SQ_SUCCEEDED(sq_next(vm, -2))) { SQInteger tmp; diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp index f52fe54268..bf41161b41 100644 --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -152,7 +152,7 @@ private: return num_blocks > 0 && this->output_buffer[num_blocks - 1].HasRoom(); } - typedef SmallVector OutputBufferVector; ///< Vector type for output buffers. + typedef std::vector OutputBufferVector; ///< Vector type for output buffers. OutputBufferVector output_buffer; ///< Vector of blocks containing the stored output. }; diff --git a/src/sortlist_type.h b/src/sortlist_type.h index 23a5580180..f5036903be 100644 --- a/src/sortlist_type.h +++ b/src/sortlist_type.h @@ -47,7 +47,7 @@ struct Filtering { * @tparam F Type of data fed as additional value to the filter function. @see FilterFunction */ template -class GUIList : public SmallVector { +class GUIList : public std::vector { public: typedef int CDECL SortFunction(const T*, const T*); ///< Signature of sort function. typedef bool CDECL FilterFunction(const T*, F); ///< Signature of filter function. diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 63e3384b04..5dfba2d196 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -887,7 +887,7 @@ static CommandCost CheckFlatLandAirport(AirportTileTableIterator tile_iter, DoCo * @param numtracks Number of platforms. * @return The cost in case of success, or an error code if it failed. */ -static CommandCost CheckFlatLandRailStation(TileArea tile_area, DoCommandFlag flags, Axis axis, StationID *station, RailType rt, SmallVector &affected_vehicles, StationClassID spec_class, byte spec_index, byte plat_len, byte numtracks) +static CommandCost CheckFlatLandRailStation(TileArea tile_area, DoCommandFlag flags, Axis axis, StationID *station, RailType rt, std::vector &affected_vehicles, StationClassID spec_class, byte spec_index, byte plat_len, byte numtracks) { CommandCost cost(EXPENSES_CONSTRUCTION); int allowed_z = -1; @@ -1310,7 +1310,7 @@ CommandCost CmdBuildRailStation(TileIndex tile_org, DoCommandFlag flags, uint32 /* Make sure the area below consists of clear tiles. (OR tiles belonging to a certain rail station) */ StationID est = INVALID_STATION; - SmallVector affected_vehicles; + std::vector affected_vehicles; /* Clear the land below the station. */ CommandCost cost = CheckFlatLandRailStation(new_location, flags, axis, &est, rt, affected_vehicles, spec_class, spec_index, plat_len, numtracks); if (cost.Failed()) return cost; @@ -1547,7 +1547,7 @@ restart: * @return the number of cleared tiles or an error. */ template -CommandCost RemoveFromRailBaseStation(TileArea ta, SmallVector &affected_stations, DoCommandFlag flags, Money removal_cost, bool keep_rail) +CommandCost RemoveFromRailBaseStation(TileArea ta, std::vector &affected_stations, DoCommandFlag flags, Money removal_cost, bool keep_rail) { /* Count of the number of tiles removed */ int quantity = 0; @@ -1660,7 +1660,7 @@ CommandCost CmdRemoveFromRailStation(TileIndex start, DoCommandFlag flags, uint3 if (start >= MapSize() || end >= MapSize()) return CMD_ERROR; TileArea ta(start, end); - SmallVector affected_stations; + std::vector affected_stations; CommandCost ret = RemoveFromRailBaseStation(ta, affected_stations, flags, _price[PR_CLEAR_STATION_RAIL], HasBit(p2, 0)); if (ret.Failed()) return ret; @@ -1694,7 +1694,7 @@ CommandCost CmdRemoveFromRailWaypoint(TileIndex start, DoCommandFlag flags, uint if (start >= MapSize() || end >= MapSize()) return CMD_ERROR; TileArea ta(start, end); - SmallVector affected_stations; + std::vector affected_stations; return RemoveFromRailBaseStation(ta, affected_stations, flags, _price[PR_CLEAR_WAYPOINT_RAIL], HasBit(p2, 0)); } @@ -1727,7 +1727,7 @@ CommandCost RemoveRailStation(T *st, DoCommandFlag flags, Money removal_cost) TILE_AREA_LOOP(tile, ta) { /* only remove tiles that are actually train station tiles */ if (st->TileBelongsToRailStation(tile)) { - SmallVector affected_stations; // dummy + std::vector affected_stations; // dummy CommandCost ret = RemoveFromRailBaseStation(TileArea(tile, 1, 1), affected_stations, flags, removal_cost, false); if (ret.Failed()) return ret; cost.AddCost(ret); @@ -3521,7 +3521,7 @@ void DeleteStaleLinks(Station *from) /* Have all vehicles refresh their next hops before deciding to * remove the node. */ OrderList *l; - SmallVector vehicles; + std::vector vehicles; FOR_ALL_ORDER_LISTS(l) { bool found_from = false; bool found_to = false; diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 98ac80df4b..92c186a2ec 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -2116,8 +2116,8 @@ struct TileAndStation { StationID station; ///< StationID }; -static SmallVector _deleted_stations_nearby; -static SmallVector _stations_nearby_list; +static std::vector _deleted_stations_nearby; +static std::vector _stations_nearby_list; /** * Add station on this tile to _stations_nearby_list if it's fully within the diff --git a/src/strgen/strgen_base.cpp b/src/strgen/strgen_base.cpp index 6c835782c8..f0dc03aa0b 100644 --- a/src/strgen/strgen_base.cpp +++ b/src/strgen/strgen_base.cpp @@ -235,7 +235,7 @@ static ParsedCommandStruct _cur_pcs; static int _cur_argidx; /** The buffer for writing a single string. */ -struct Buffer : SmallVector { +struct Buffer : std::vector { /** * Convenience method for adding a byte. * @param value The value to add. diff --git a/src/string.cpp b/src/string.cpp index 72254a877b..7c16489bf5 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -624,8 +624,8 @@ class IcuStringIterator : public StringIterator icu::BreakIterator *char_itr; ///< ICU iterator for characters. icu::BreakIterator *word_itr; ///< ICU iterator for words. - SmallVector utf16_str; ///< UTF-16 copy of the string. - SmallVector utf16_to_utf8; ///< Mapping from UTF-16 code point position to index in the UTF-8 source string. + std::vector utf16_str; ///< UTF-16 copy of the string. + std::vector utf16_to_utf8; ///< Mapping from UTF-16 code point position to index in the UTF-8 source string. public: IcuStringIterator() : char_itr(NULL), word_itr(NULL) diff --git a/src/stringfilter_type.h b/src/stringfilter_type.h index 4dad55aaaa..0a4a464c7f 100644 --- a/src/stringfilter_type.h +++ b/src/stringfilter_type.h @@ -39,7 +39,7 @@ private: }; const char *filter_buffer; ///< Parsed filter string. Words separated by 0. - SmallVector word_index; ///< Word index and filter state. + std::vector word_index; ///< Word index and filter state. uint word_matches; ///< Summary of filter state: Number of words matched. const bool *case_sensitive; ///< Match case-sensitively (usually a static variable). diff --git a/src/subsidy.cpp b/src/subsidy.cpp index a61d6f1ce9..2b851048b4 100644 --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -564,7 +564,7 @@ bool CheckSubsidised(CargoID cargo_type, CompanyID company, SourceType src_type, /* Remember all towns near this station (at least one house in its catchment radius) * which are destination of subsidised path. Do that only if needed */ - SmallVector towns_near; + std::vector towns_near; if (!st->rect.IsEmpty()) { Subsidy *s; FOR_ALL_SUBSIDIES(s) { diff --git a/src/texteff.cpp b/src/texteff.cpp index 6827d980f0..5e8c749858 100644 --- a/src/texteff.cpp +++ b/src/texteff.cpp @@ -37,7 +37,7 @@ struct TextEffect : public ViewportSign { } }; -static SmallVector _text_effects; ///< Text effects are stored there +static std::vector _text_effects; ///< Text effects are stored there /* Text Effects */ TextEffectID AddTextEffect(StringID msg, int center, int y, uint8 duration, TextEffectMode mode) diff --git a/src/textfile_gui.h b/src/textfile_gui.h index b7bcb2db75..b572fe09ca 100644 --- a/src/textfile_gui.h +++ b/src/textfile_gui.h @@ -21,12 +21,12 @@ const char *GetTextfile(TextfileType type, Subdirectory dir, const char *filenam /** Window for displaying a textfile */ struct TextfileWindow : public Window, MissingGlyphSearcher { - TextfileType file_type; ///< Type of textfile to view. - Scrollbar *vscroll; ///< Vertical scrollbar. - Scrollbar *hscroll; ///< Horizontal scrollbar. - char *text; ///< Lines of text from the NewGRF's textfile. - SmallVector lines; ///< #text, split into lines in a table with lines. - uint search_iterator; ///< Iterator for the font check search. + TextfileType file_type; ///< Type of textfile to view. + Scrollbar *vscroll; ///< Vertical scrollbar. + Scrollbar *hscroll; ///< Horizontal scrollbar. + char *text; ///< Lines of text from the NewGRF's textfile. + std::vector lines; ///< #text, split into lines in a table with lines. + uint search_iterator; ///< Iterator for the font check search. static const int TOP_SPACING = WD_FRAMETEXT_TOP; ///< Additional spacing at the top of the #WID_TF_BACKGROUND widget. static const int BOTTOM_SPACING = WD_FRAMETEXT_BOTTOM; ///< Additional spacing at the bottom of the #WID_TF_BACKGROUND widget. diff --git a/src/timetable_cmd.cpp b/src/timetable_cmd.cpp index 7e718c717d..6524260ff0 100644 --- a/src/timetable_cmd.cpp +++ b/src/timetable_cmd.cpp @@ -281,7 +281,7 @@ CommandCost CmdSetTimetableStart(TileIndex tile, DoCommandFlag flags, uint32 p1, if (timetable_all && !v->orders.list->IsCompleteTimetable()) return CMD_ERROR; if (flags & DC_EXEC) { - SmallVector vehs; + std::vector vehs; if (timetable_all) { for (Vehicle *w = v->orders.list->GetFirstSharedVehicle(); w != NULL; w = w->NextShared()) { diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 6ce1131844..008d515576 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -814,7 +814,7 @@ static Train *FindGoodVehiclePos(const Train *src) } /** Helper type for lists/vectors of trains */ -typedef SmallVector TrainList; +typedef std::vector TrainList; /** * Make a backup of a train into a train list. diff --git a/src/train_gui.cpp b/src/train_gui.cpp index 427d45dea4..31b7a2ec0f 100644 --- a/src/train_gui.cpp +++ b/src/train_gui.cpp @@ -186,7 +186,7 @@ static const uint TRAIN_DETAILS_MIN_INDENT = 32; ///< Minimum indent level in th static const uint TRAIN_DETAILS_MAX_INDENT = 72; ///< Maximum indent level in the train details window; wider than this and we start on a new line /** Container for the cargo summary information. */ -typedef SmallVector CargoSummary; +typedef std::vector CargoSummary; /** Reused container of cargo details */ static CargoSummary _cargo_summary; diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 872c9458ca..919173ac17 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -346,8 +346,7 @@ static CommandCost RefitVehicle(Vehicle *v, bool only_this, uint8 num_vehicles, v = v->First(); } - static SmallVector refit_result; - refit_result.clear(); + std::vector refit_result; v->InvalidateNewGRFCacheOfChain(); byte actual_subtype = new_subtype; diff --git a/src/vehicle_func.h b/src/vehicle_func.h index 17ec9e28da..b4e1c0074e 100644 --- a/src/vehicle_func.h +++ b/src/vehicle_func.h @@ -175,7 +175,7 @@ bool CanVehicleUseStation(const Vehicle *v, const struct Station *st); void ReleaseDisastersTargetingVehicle(VehicleID vehicle); -typedef SmallVector VehicleSet; +typedef std::vector VehicleSet; void GetVehicleSet(VehicleSet &set, Vehicle *v, uint8 num_vehicles); void CheckCargoCapacity(Vehicle *v); diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 9b6c68a36e..34fcdc159f 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -233,7 +233,7 @@ byte GetBestFittingSubType(Vehicle *v_from, Vehicle *v_for, CargoID dest_cargo_t v_for = v_for->GetFirstEnginePart(); /* Create a list of subtypes used by the various parts of v_for */ - static SmallVector subtypes; + static std::vector subtypes; subtypes.clear(); for (; v_from != NULL; v_from = v_from->HasArticulatedPart() ? v_from->GetNextArticulatedPart() : NULL) { const Engine *e_from = v_from->GetEngine(); @@ -317,7 +317,7 @@ struct RefitOption { } }; -typedef SmallVector SubtypeList; ///< List of refit subtypes associated to a cargo. +typedef std::vector SubtypeList; ///< List of refit subtypes associated to a cargo. /** * Draw the list of available refit options for a consist and highlight the selected refit option (if any). diff --git a/src/vehiclelist.h b/src/vehiclelist.h index 996c8c007f..ed817b71c7 100644 --- a/src/vehiclelist.h +++ b/src/vehiclelist.h @@ -52,7 +52,7 @@ struct VehicleListIdentifier { }; /** A list of vehicles. */ -typedef SmallVector VehicleList; +typedef std::vector VehicleList; bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &identifier); void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engine_list, VehicleList *wagon_list, bool individual_wagons = false); diff --git a/src/viewport.cpp b/src/viewport.cpp index 892e94d603..4c9507bcac 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -153,10 +153,10 @@ enum SpriteCombineMode { SPRITE_COMBINE_ACTIVE, ///< %Sprite combining is active. #AddSortableSpriteToDraw outputs child sprites. }; -typedef SmallVector TileSpriteToDrawVector; -typedef SmallVector StringSpriteToDrawVector; -typedef SmallVector ParentSpriteToDrawVector; -typedef SmallVector ChildScreenSpriteToDrawVector; +typedef std::vector TileSpriteToDrawVector; +typedef std::vector StringSpriteToDrawVector; +typedef std::vector ParentSpriteToDrawVector; +typedef std::vector ChildScreenSpriteToDrawVector; /** Data structure storing rendering information */ struct ViewportDrawer { diff --git a/src/viewport_sprite_sorter.h b/src/viewport_sprite_sorter.h index 324ece3020..24241565e7 100644 --- a/src/viewport_sprite_sorter.h +++ b/src/viewport_sprite_sorter.h @@ -41,7 +41,7 @@ struct ParentSpriteToDraw { bool comparison_done; ///< Used during sprite sorting: true if sprite has been compared with all other sprites }; -typedef SmallVector ParentSpriteToSortVector; +typedef std::vector ParentSpriteToSortVector; /** Type for method for checking whether a viewport sprite sorter exists. */ typedef bool (*VpSorterChecker)(); diff --git a/src/window.cpp b/src/window.cpp index 9366b92eb8..891eafb5e3 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -85,7 +85,7 @@ SpecialMouseMode _special_mouse_mode; ///< Mode of the mouse. * List of all WindowDescs. * This is a pointer to ensure initialisation order with the various static WindowDesc instances. */ -static SmallVector *_window_descs = NULL; +static std::vector *_window_descs = NULL; /** Config file to store WindowDesc */ char *_windows_file; @@ -108,7 +108,7 @@ WindowDesc::WindowDesc(WindowPosition def_pos, const char *ini_key, int16 def_wi default_width_trad(def_width_trad), default_height_trad(def_height_trad) { - if (_window_descs == NULL) _window_descs = new SmallVector(); + if (_window_descs == NULL) _window_descs = new std::vector(); _window_descs->push_back(this); } diff --git a/src/window_gui.h b/src/window_gui.h index b2bba675b2..63793b0ef4 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -281,7 +281,7 @@ protected: void InitializePositionSize(int x, int y, int min_width, int min_height); virtual void FindWindowPlacementAndResize(int def_width, int def_height); - SmallVector scheduled_invalidation_data; ///< Data of scheduled OnInvalidateData() calls. + std::vector scheduled_invalidation_data; ///< Data of scheduled OnInvalidateData() calls. public: Window(WindowDesc *desc); From cc62f4163f230ed82ef3b04187987d3e380cd570 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Mon, 4 Mar 2019 20:49:33 +0000 Subject: [PATCH 568/622] Cleanup: Remove unused size template parameters from SmallMap and Auto[Free|Delete]SmallVector --- src/core/smallmap_type.hpp | 2 +- src/core/smallvec_type.hpp | 8 +++--- src/game/game_text.hpp | 6 ++--- src/gfx_layout.cpp | 6 ++--- src/gfx_layout.h | 2 +- src/music/midifile.hpp | 4 +-- src/network/core/address.h | 2 +- src/network/network_client.cpp | 2 +- src/network/network_content.h | 10 ++++---- src/newgrf.h | 4 +-- src/newgrf_config.h | 38 ++++++++++++++--------------- src/newgrf_debug.h | 2 +- src/newgrf_text.h | 2 +- src/os/macosx/string_osx.cpp | 2 +- src/os/windows/string_uniscribe.cpp | 2 +- src/saveload/saveload.cpp | 6 ++--- src/settings_func.h | 2 +- src/stringfilter_type.h | 2 +- src/town_cmd.cpp | 2 +- src/vehicle.cpp | 2 +- src/widgets/dropdown_type.h | 2 +- 21 files changed, 53 insertions(+), 55 deletions(-) diff --git a/src/core/smallmap_type.hpp b/src/core/smallmap_type.hpp index debd4165e6..d7a9a38322 100644 --- a/src/core/smallmap_type.hpp +++ b/src/core/smallmap_type.hpp @@ -39,7 +39,7 @@ struct SmallPair { * * @see SmallVector */ -template +template struct SmallMap : std::vector > { typedef ::SmallPair Pair; typedef Pair *iterator; diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index 19dab22286..e71edf89ff 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -77,9 +77,8 @@ T* grow(std::vector& vec, std::size_t num) * inside the list. * * @param T The type of the items stored, must be a pointer - * @param S The steps of allocation */ -template +template class AutoFreeSmallVector : public std::vector { public: ~AutoFreeSmallVector() @@ -108,9 +107,8 @@ public: * inside the list. * * @param T The type of the items stored, must be a pointer - * @param S The steps of allocation */ -template +template class AutoDeleteSmallVector : public std::vector { public: ~AutoDeleteSmallVector() @@ -131,6 +129,6 @@ public: } }; -typedef AutoFreeSmallVector StringList; ///< Type for a list of strings. +typedef AutoFreeSmallVector StringList; ///< Type for a list of strings. #endif /* SMALLVEC_TYPE_HPP */ diff --git a/src/game/game_text.hpp b/src/game/game_text.hpp index 14da7d9b2e..11c63b5abb 100644 --- a/src/game/game_text.hpp +++ b/src/game/game_text.hpp @@ -32,9 +32,9 @@ struct GameStrings { uint version; ///< The version of the language strings. LanguageStrings *cur_language; ///< The current (compiled) language. - AutoDeleteSmallVector raw_strings; ///< The raw strings per language, first must be English/the master language!. - AutoDeleteSmallVector compiled_strings; ///< The compiled strings per language, first must be English/the master language!. - StringList string_names; ///< The names of the compiled strings. + AutoDeleteSmallVector raw_strings; ///< The raw strings per language, first must be English/the master language!. + AutoDeleteSmallVector compiled_strings; ///< The compiled strings per language, first must be English/the master language!. + StringList string_names; ///< The names of the compiled strings. void Compile(); }; diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index 6d4759cfbd..f09b87efa9 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -124,7 +124,7 @@ le_bool Font::getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &poin /** * Wrapper for doing layouts with ICU. */ -class ICUParagraphLayout : public AutoDeleteSmallVector, public ParagraphLayouter { +class ICUParagraphLayout : public AutoDeleteSmallVector, public ParagraphLayouter { icu::ParagraphLayout *p; ///< The actual ICU paragraph layout. public: /** Visual run contains data about the bit of text with the same font. */ @@ -143,7 +143,7 @@ public: }; /** A single line worth of VisualRuns. */ - class ICULine : public AutoDeleteSmallVector, public ParagraphLayouter::Line { + class ICULine : public AutoDeleteSmallVector, public ParagraphLayouter::Line { icu::ParagraphLayout::Line *l; ///< The actual ICU line. public: @@ -269,7 +269,7 @@ public: }; /** A single line worth of VisualRuns. */ - class FallbackLine : public AutoDeleteSmallVector, public ParagraphLayouter::Line { + class FallbackLine : public AutoDeleteSmallVector, public ParagraphLayouter::Line { public: int GetLeading() const; int GetWidth() const; diff --git a/src/gfx_layout.h b/src/gfx_layout.h index 6f611d6e66..93cc6fb2da 100644 --- a/src/gfx_layout.h +++ b/src/gfx_layout.h @@ -150,7 +150,7 @@ public: * * It also accounts for the memory allocations and frees. */ -class Layouter : public AutoDeleteSmallVector { +class Layouter : public AutoDeleteSmallVector { const char *string; ///< Pointer to the original string. /** Key into the linecache */ diff --git a/src/music/midifile.hpp b/src/music/midifile.hpp index e0e5170b7f..4d362a1be2 100644 --- a/src/music/midifile.hpp +++ b/src/music/midifile.hpp @@ -22,8 +22,8 @@ struct MusicSongInfo; struct MidiFile { struct DataBlock { - uint32 ticktime; ///< tick number since start of file this block should be triggered at - uint32 realtime; ///< real-time (microseconds) since start of file this block should be triggered at + uint32 ticktime; ///< tick number since start of file this block should be triggered at + uint32 realtime; ///< real-time (microseconds) since start of file this block should be triggered at std::vector data; ///< raw midi data contained in block DataBlock(uint32 _ticktime = 0) : ticktime(_ticktime) { } }; diff --git a/src/network/core/address.h b/src/network/core/address.h index f6d7870bf6..2f26a3d00f 100644 --- a/src/network/core/address.h +++ b/src/network/core/address.h @@ -19,7 +19,7 @@ class NetworkAddress; typedef std::vector NetworkAddressList; ///< Type for a list of addresses. -typedef SmallMap SocketList; ///< Type for a mapping between address and socket. +typedef SmallMap SocketList; ///< Type for a mapping between address and socket. /** * Wrapper for (un)resolved network addresses; there's no reason to transform diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 12aa3fc0ad..7b658e8b5a 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -41,7 +41,7 @@ struct PacketReader : LoadFilter { static const size_t CHUNK = 32 * 1024; ///< 32 KiB chunks of memory. - AutoFreeSmallVector blocks; ///< Buffer with blocks of allocated memory. + AutoFreeSmallVector blocks; ///< Buffer with blocks of allocated memory. byte *buf; ///< Buffer we're going to write to/read from. byte *bufe; ///< End of the buffer we write to/read from. byte **block; ///< The block we're reading from/writing to. diff --git a/src/network/network_content.h b/src/network/network_content.h index e62c921e6a..29a25f2597 100644 --- a/src/network/network_content.h +++ b/src/network/network_content.h @@ -67,11 +67,11 @@ struct ContentCallback { class ClientNetworkContentSocketHandler : public NetworkContentSocketHandler, ContentCallback, HTTPCallback { protected: typedef std::vector ContentIDList; ///< List of content IDs to (possibly) select. - std::vector callbacks; ///< Callbacks to notify "the world" - ContentIDList requested; ///< ContentIDs we already requested (so we don't do it again) - ContentVector infos; ///< All content info we received - std::vector http_response; ///< The HTTP response to the requests we've been doing - int http_response_index; ///< Where we are, in the response, with handling it + std::vector callbacks; ///< Callbacks to notify "the world" + ContentIDList requested; ///< ContentIDs we already requested (so we don't do it again) + ContentVector infos; ///< All content info we received + std::vector http_response; ///< The HTTP response to the requests we've been doing + int http_response_index; ///< Where we are, in the response, with handling it FILE *curFile; ///< Currently downloaded file ContentInfo *curInfo; ///< Information about the currently downloaded file diff --git a/src/newgrf.h b/src/newgrf.h index d58fe870fe..e99b733476 100644 --- a/src/newgrf.h +++ b/src/newgrf.h @@ -122,10 +122,10 @@ struct GRFFile : ZeroedMemoryAllocator { GRFLabel *label; ///< Pointer to the first label. This is a linked list, not an array. - std::vector cargo_list; ///< Cargo translation table (local ID -> label) + std::vector cargo_list; ///< Cargo translation table (local ID -> label) uint8 cargo_map[NUM_CARGO]; ///< Inverse cargo translation table (CargoID -> local ID) - std::vector railtype_list; ///< Railtype translation table + std::vector railtype_list; ///< Railtype translation table RailTypeByte railtype_map[RAILTYPE_END]; CanalProperties canal_local_properties[CF_END]; ///< Canal properties as set by this NewGRF diff --git a/src/newgrf_config.h b/src/newgrf_config.h index 6396fa368c..88110f0ed5 100644 --- a/src/newgrf_config.h +++ b/src/newgrf_config.h @@ -133,7 +133,7 @@ struct GRFParameterInfo { byte param_nr; ///< GRF parameter to store content in byte first_bit; ///< First bit to use in the GRF parameter byte num_bit; ///< Number of bits to use for this parameter - SmallMap value_names; ///< Names for each value. + SmallMap value_names; ///< Names for each value. bool complete_labels; ///< True if all values have a label. uint32 GetValue(struct GRFConfig *config) const; @@ -155,27 +155,27 @@ struct GRFConfig : ZeroedMemoryAllocator { GRFConfig(const GRFConfig &config); ~GRFConfig(); - GRFIdentifier ident; ///< grfid and md5sum to uniquely identify newgrfs - uint8 original_md5sum[16]; ///< MD5 checksum of original file if only a 'compatible' file was loaded - char *filename; ///< Filename - either with or without full path - GRFTextWrapper *name; ///< NOSAVE: GRF name (Action 0x08) - GRFTextWrapper *info; ///< NOSAVE: GRF info (author, copyright, ...) (Action 0x08) - GRFTextWrapper *url; ///< NOSAVE: URL belonging to this GRF. - GRFError *error; ///< NOSAVE: Error/Warning during GRF loading (Action 0x0B) + GRFIdentifier ident; ///< grfid and md5sum to uniquely identify newgrfs + uint8 original_md5sum[16]; ///< MD5 checksum of original file if only a 'compatible' file was loaded + char *filename; ///< Filename - either with or without full path + GRFTextWrapper *name; ///< NOSAVE: GRF name (Action 0x08) + GRFTextWrapper *info; ///< NOSAVE: GRF info (author, copyright, ...) (Action 0x08) + GRFTextWrapper *url; ///< NOSAVE: URL belonging to this GRF. + GRFError *error; ///< NOSAVE: Error/Warning during GRF loading (Action 0x0B) - uint32 version; ///< NOSAVE: Version a NewGRF can set so only the newest NewGRF is shown - uint32 min_loadable_version; ///< NOSAVE: Minimum compatible version a NewGRF can define - uint8 flags; ///< NOSAVE: GCF_Flags, bitset - GRFStatus status; ///< NOSAVE: GRFStatus, enum - uint32 grf_bugs; ///< NOSAVE: bugs in this GRF in this run, @see enum GRFBugs - uint32 param[0x80]; ///< GRF parameters - uint8 num_params; ///< Number of used parameters - uint8 num_valid_params; ///< NOSAVE: Number of valid parameters (action 0x14) - uint8 palette; ///< GRFPalette, bitset + uint32 version; ///< NOSAVE: Version a NewGRF can set so only the newest NewGRF is shown + uint32 min_loadable_version; ///< NOSAVE: Minimum compatible version a NewGRF can define + uint8 flags; ///< NOSAVE: GCF_Flags, bitset + GRFStatus status; ///< NOSAVE: GRFStatus, enum + uint32 grf_bugs; ///< NOSAVE: bugs in this GRF in this run, @see enum GRFBugs + uint32 param[0x80]; ///< GRF parameters + uint8 num_params; ///< Number of used parameters + uint8 num_valid_params; ///< NOSAVE: Number of valid parameters (action 0x14) + uint8 palette; ///< GRFPalette, bitset std::vector param_info; ///< NOSAVE: extra information about the parameters - bool has_param_defaults; ///< NOSAVE: did this newgrf specify any defaults for it's parameters + bool has_param_defaults; ///< NOSAVE: did this newgrf specify any defaults for it's parameters - struct GRFConfig *next; ///< NOSAVE: Next item in the linked list + struct GRFConfig *next; ///< NOSAVE: Next item in the linked list void CopyParams(const GRFConfig &src); diff --git a/src/newgrf_debug.h b/src/newgrf_debug.h index b73c93266f..dac97726da 100644 --- a/src/newgrf_debug.h +++ b/src/newgrf_debug.h @@ -29,7 +29,7 @@ struct NewGrfDebugSpritePicker { NewGrfDebugSpritePickerMode mode; ///< Current state void *clicked_pixel; ///< Clicked pixel (pointer to blitter buffer) uint32 click_time; ///< Realtime tick when clicked to detect next frame - std::vector sprites; ///< Sprites found + std::vector sprites; ///< Sprites found }; extern NewGrfDebugSpritePicker _newgrf_debug_sprite_picker; diff --git a/src/newgrf_text.h b/src/newgrf_text.h index 601535d991..141e1536f1 100644 --- a/src/newgrf_text.h +++ b/src/newgrf_text.h @@ -59,7 +59,7 @@ struct LanguageMap { * both cases. Thus we are basically implementing a multi-map. */ std::vector gender_map; ///< Mapping of NewGRF and OpenTTD IDs for genders. std::vector case_map; ///< Mapping of NewGRF and OpenTTD IDs for cases. - int plural_form; ///< The plural form used for this language. + int plural_form; ///< The plural form used for this language. int GetMapping(int newgrf_id, bool gender) const; int GetReverseMapping(int openttd_id, bool gender) const; diff --git a/src/os/macosx/string_osx.cpp b/src/os/macosx/string_osx.cpp index 51cf50ea07..e14ca4183b 100644 --- a/src/os/macosx/string_osx.cpp +++ b/src/os/macosx/string_osx.cpp @@ -65,7 +65,7 @@ public: }; /** A single line worth of VisualRuns. */ - class CoreTextLine : public AutoDeleteSmallVector, public ParagraphLayouter::Line { + class CoreTextLine : public AutoDeleteSmallVector, public ParagraphLayouter::Line { public: CoreTextLine(CTLineRef line, const FontMap &fontMapping, const CoreTextParagraphLayoutFactory::CharType *buff) { diff --git a/src/os/windows/string_uniscribe.cpp b/src/os/windows/string_uniscribe.cpp index a3fd35d0ad..5cba9a3d8b 100644 --- a/src/os/windows/string_uniscribe.cpp +++ b/src/os/windows/string_uniscribe.cpp @@ -106,7 +106,7 @@ public: }; /** A single line worth of VisualRuns. */ - class UniscribeLine : public AutoDeleteSmallVector, public ParagraphLayouter::Line { + class UniscribeLine : public AutoDeleteSmallVector, public ParagraphLayouter::Line { public: virtual int GetLeading() const; virtual int GetWidth() const; diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index ee4876fd5c..c97087224b 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -125,9 +125,9 @@ struct ReadBuffer { /** Container for dumping the savegame (quickly) to memory. */ struct MemoryDumper { - AutoFreeSmallVector blocks; ///< Buffer with blocks of allocated memory. - byte *buf; ///< Buffer we're going to write to. - byte *bufe; ///< End of the buffer we write to. + AutoFreeSmallVector blocks; ///< Buffer with blocks of allocated memory. + byte *buf; ///< Buffer we're going to write to. + byte *bufe; ///< End of the buffer we write to. /** Initialise our variables. */ MemoryDumper() : buf(NULL), bufe(NULL) diff --git a/src/settings_func.h b/src/settings_func.h index ee63e2bf4c..a16c31c207 100644 --- a/src/settings_func.h +++ b/src/settings_func.h @@ -30,7 +30,7 @@ void IniSaveWindowSettings(IniFile *ini, const char *grpname, void *desc); /* Functions to load and save NewGRF settings to a separate * configuration file, used for presets. */ -typedef AutoFreeSmallVector GRFPresetList; +typedef AutoFreeSmallVector GRFPresetList; void GetGRFPresetList(GRFPresetList *list); struct GRFConfig *LoadGRFPresetFromConfig(const char *config_name); diff --git a/src/stringfilter_type.h b/src/stringfilter_type.h index 0a4a464c7f..5ba8e876b6 100644 --- a/src/stringfilter_type.h +++ b/src/stringfilter_type.h @@ -39,7 +39,7 @@ private: }; const char *filter_buffer; ///< Parsed filter string. Words separated by 0. - std::vector word_index; ///< Word index and filter state. + std::vector word_index; ///< Word index and filter state. uint word_matches; ///< Summary of filter state: Number of words matched. const bool *case_sensitive; ///< Match case-sensitively (usually a static variable). diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 35ef97e940..be5af4acff 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -3457,7 +3457,7 @@ Town *ClosestTownFromTile(TileIndex tile, uint threshold) } static bool _town_rating_test = false; ///< If \c true, town rating is in test-mode. -static SmallMap _town_test_ratings; ///< Map of towns to modified ratings, while in town rating test-mode. +static SmallMap _town_test_ratings; ///< Map of towns to modified ratings, while in town rating test-mode. /** * Switch the town rating to test-mode, to allow commands to be tested without affecting current ratings. diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 9f15d9be05..856fc6737c 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -688,7 +688,7 @@ void ResetVehicleColourMap() * List of vehicles that should check for autoreplace this tick. * Mapping of vehicle -> leave depot immediately after autoreplace. */ -typedef SmallMap AutoreplaceMap; +typedef SmallMap AutoreplaceMap; static AutoreplaceMap _vehicles_to_autoreplace; void InitializeVehicles() diff --git a/src/widgets/dropdown_type.h b/src/widgets/dropdown_type.h index 56510b0abe..d8e9b90288 100644 --- a/src/widgets/dropdown_type.h +++ b/src/widgets/dropdown_type.h @@ -98,7 +98,7 @@ public: /** * A drop down list is a collection of drop down list items. */ -typedef AutoDeleteSmallVector DropDownList; +typedef AutoDeleteSmallVector DropDownList; void ShowDropDownListAt(Window *w, const DropDownList *list, int selected, int button, Rect wi_rect, Colours wi_colour, bool auto_width = false, bool instant_close = false); From 03ca3190c9b73de3e43fe1e7e2293b8c1e3aa3d5 Mon Sep 17 00:00:00 2001 From: Henry Wilson Date: Wed, 13 Mar 2019 20:55:31 +0000 Subject: [PATCH 569/622] Codechange: Use range-based for-loop in Auto[Free|Delete]SmallVector --- src/core/smallvec_type.hpp | 8 ++++---- src/script/squirrel_helper.hpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index e71edf89ff..f43265ebe8 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -91,8 +91,8 @@ public: */ inline void Clear() { - for (uint i = 0; i < std::vector::size(); i++) { - free(std::vector::operator[](i)); + for (T p : *this) { + free(p); } std::vector::clear(); @@ -121,8 +121,8 @@ public: */ inline void Clear() { - for (uint i = 0; i < std::vector::size(); i++) { - delete std::vector::operator[](i); + for (T p : *this) { + delete p; } std::vector::clear(); diff --git a/src/script/squirrel_helper.hpp b/src/script/squirrel_helper.hpp index add6b49c1b..10f04f945a 100644 --- a/src/script/squirrel_helper.hpp +++ b/src/script/squirrel_helper.hpp @@ -32,7 +32,7 @@ namespace SQConvert { struct SQAutoFreePointers : std::vector { ~SQAutoFreePointers() { - for (uint i = 0; i < std::vector::size(); i++) free(std::vector::operator[](i)); + for (void * p : *this) free(p); } }; From e453572b6ab9feeacd4fcbd660d954aec44c4777 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Mon, 25 Mar 2019 22:45:32 +0000 Subject: [PATCH 570/622] Codechange: Initialise a few variables that -flto seems to think could possibly be uninitialised --- src/order_base.h | 2 +- src/strings.cpp | 3 ++- src/vehicle_cmd.cpp | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/order_base.h b/src/order_base.h index 0def7b0bcd..b11c20d8e6 100644 --- a/src/order_base.h +++ b/src/order_base.h @@ -50,7 +50,7 @@ private: public: Order *next; ///< Pointer to next order. If NULL, end of list - Order() : refit_cargo(CT_NO_REFIT), max_speed(UINT16_MAX) {} + Order() : flags(0), refit_cargo(CT_NO_REFIT), max_speed(UINT16_MAX) {} ~Order(); Order(uint32 packed); diff --git a/src/strings.cpp b/src/strings.cpp index 204c68c204..c3669e5dc5 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -118,7 +118,8 @@ void SetDParamMaxValue(uint n, uint64 max_value, uint min_count, FontSize size) */ void SetDParamMaxDigits(uint n, uint count, FontSize size) { - uint front, next; + uint front = 0; + uint next = 0; GetBroadestDigit(&front, &next, size); uint64 val = count > 1 ? front : next; for (; count > 1; count--) { diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 919173ac17..059f608379 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -131,7 +131,7 @@ CommandCost CmdBuildVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint DoCommandFlag subflags = flags; if (refitting) subflags |= DC_EXEC; - Vehicle *v; + Vehicle *v = NULL; switch (type) { case VEH_TRAIN: value.AddCost(CmdBuildRailVehicle(tile, subflags, e, GB(p1, 24, 8), &v)); break; case VEH_ROAD: value.AddCost(CmdBuildRoadVehicle(tile, subflags, e, GB(p1, 24, 8), &v)); break; From 7c81f8e0764db47d09581a232a501a95825a138f Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Mon, 25 Mar 2019 22:47:12 +0000 Subject: [PATCH 571/622] Codechange: Simplify refit cargo filter condition and stop mixing enum types --- src/build_vehicle_gui.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index c3d8743a2d..33cabe98ae 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1163,8 +1163,8 @@ struct BuildVehicleWindow : Window { void SelectEngine(EngineID engine) { - bool refit = this->cargo_filter[this->cargo_filter_criteria] != CF_ANY && this->cargo_filter[this->cargo_filter_criteria] != CF_NONE; - CargoID cargo = refit ? this->cargo_filter[this->cargo_filter_criteria] : CT_INVALID; + CargoID cargo = this->cargo_filter[this->cargo_filter_criteria]; + if (cargo == CF_ANY) cargo = CF_NONE; this->sel_engine = engine; this->SetBuyVehicleText(); @@ -1419,8 +1419,8 @@ struct BuildVehicleWindow : Window { EngineID sel_eng = this->sel_engine; if (sel_eng != INVALID_ENGINE) { CommandCallback *callback = (this->vehicle_type == VEH_TRAIN && RailVehInfo(sel_eng)->railveh_type == RAILVEH_WAGON) ? CcBuildWagon : CcBuildPrimaryVehicle; - bool refit = this->cargo_filter[this->cargo_filter_criteria] != CF_ANY && this->cargo_filter[this->cargo_filter_criteria] != CF_NONE; - CargoID cargo = refit ? this->cargo_filter[this->cargo_filter_criteria] : CT_INVALID; + CargoID cargo = this->cargo_filter[this->cargo_filter_criteria]; + if (cargo == CF_ANY) cargo = CF_NONE; DoCommandP(this->window_number, sel_eng | (cargo << 24), 0, GetCmdBuildVeh(this->vehicle_type), callback); } break; From a065d4623e0f3dc507125aea688b120b02ed4e1b Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Mon, 25 Mar 2019 22:47:50 +0000 Subject: [PATCH 572/622] Codechange: Move 2 constants into the ifdef where they're used --- src/os/windows/crashlog_win.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/os/windows/crashlog_win.cpp b/src/os/windows/crashlog_win.cpp index 6bcaed837e..458a761631 100644 --- a/src/os/windows/crashlog_win.cpp +++ b/src/os/windows/crashlog_win.cpp @@ -26,9 +26,6 @@ #include "../../safeguards.h" -static const uint MAX_SYMBOL_LEN = 512; -static const uint MAX_FRAMES = 64; - /* printf format specification for 32/64-bit addresses. */ #ifdef _M_AMD64 #define PRINTF_PTR "0x%016IX" @@ -322,6 +319,9 @@ static char *PrintModuleInfo(char *output, const char *last, HMODULE mod) } #if defined(_MSC_VER) +static const uint MAX_SYMBOL_LEN = 512; +static const uint MAX_FRAMES = 64; + #pragma warning(disable:4091) #include #pragma warning(default:4091) From 427d9d483fcd7e3c8dae8e9c84832c9e6bb34b50 Mon Sep 17 00:00:00 2001 From: glx22 Date: Tue, 26 Mar 2019 22:50:56 +0100 Subject: [PATCH 573/622] Fix #6564: enforce types of arguments for station name strings (#7419) --- src/strings.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/strings.cpp b/src/strings.cpp index c3669e5dc5..be45a098b3 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -76,7 +76,10 @@ int64 StringParameters::GetInt64(WChar type) return 0; } if (this->type != NULL) { - assert(this->type[this->offset] == 0 || this->type[this->offset] == type); + if (this->type[this->offset] != 0 && this->type[this->offset] != type) { + DEBUG(misc, 0, "Trying to read string parameter with wrong type"); + return 0; + } this->type[this->offset] = type; } return this->data[this->offset++]; @@ -1415,8 +1418,9 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg } } - int64 args_array[] = {STR_TOWN_NAME, st->town->index, st->index}; - StringParameters tmp_params(args_array); + uint64 args_array[] = {STR_TOWN_NAME, st->town->index, st->index}; + WChar types_array[] = {0, SCC_TOWN_NAME, SCC_NUM}; + StringParameters tmp_params(args_array, 3, types_array); buff = GetStringWithArgs(buff, str, &tmp_params, last); } break; From b913c92aa77fb5f435d3f8795d0f6eae3e4ae132 Mon Sep 17 00:00:00 2001 From: stormcone <48624099+stormcone@users.noreply.github.com> Date: Tue, 26 Mar 2019 22:59:43 +0100 Subject: [PATCH 574/622] Fix #7165: Missed 'Append() --> push_back()' replacement --- src/network/core/host.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/core/host.cpp b/src/network/core/host.cpp index 35c7ce8ae8..2bf862a4f5 100644 --- a/src/network/core/host.cpp +++ b/src/network/core/host.cpp @@ -76,7 +76,7 @@ static void NetworkFindBroadcastIPsInternal(NetworkAddressList *broadcast) // BE memset(&address, 0, sizeof(address)); ((sockaddr_in*)&address)->sin_addr.s_addr = htonl(ip | ~netmask); NetworkAddress addr(address, sizeof(sockaddr)); - if (std::none_of(broadcast->begin(), broadcast->end(), [&addr](NetworkAddress const& elem) -> bool { return elem == addr; })) *broadcast->Append() = addr; + if (std::none_of(broadcast->begin(), broadcast->end(), [&addr](NetworkAddress const& elem) -> bool { return elem == addr; })) broadcast->push_back(addr); } if (read < 0) { break; From ed9005690a77a9bdfe334f79f6df0c421975161d Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Tue, 26 Mar 2019 23:57:54 +0000 Subject: [PATCH 575/622] Fix #7421: Don't (directly) dereference std::vector::end() in SmallMap --- src/core/smallmap_type.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/smallmap_type.hpp b/src/core/smallmap_type.hpp index d7a9a38322..5eb94e23a2 100644 --- a/src/core/smallmap_type.hpp +++ b/src/core/smallmap_type.hpp @@ -79,12 +79,12 @@ struct SmallMap : std::vector > { inline const Pair *End() const { - return &*std::vector::end(); + return std::vector::data() + std::vector::size(); } inline Pair *End() { - return &*std::vector::end(); + return std::vector::data() + std::vector::size(); } From a393c9469545f4bd1e6e2fd1a593d35bb98f16ca Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Tue, 26 Mar 2019 00:17:33 +0000 Subject: [PATCH 576/622] Change #5977: Use specific error message when attempting to create a circular group hierarchy (3298) --- src/group_cmd.cpp | 2 +- src/lang/english.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp index bd99aa1272..3c9b3850a3 100644 --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -449,7 +449,7 @@ CommandCost CmdAlterGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 /* Ensure request parent isn't child of group. * This is the only place that infinite loops are prevented. */ - if (GroupIsInGroup(pg->index, g->index)) return CMD_ERROR; + if (GroupIsInGroup(pg->index, g->index)) return_cmd_error(STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION); } if (flags & DC_EXEC) { diff --git a/src/lang/english.txt b/src/lang/english.txt index 2e01e3a2d5..032801ae5b 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -4473,6 +4473,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Can't cr STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Can't delete this group... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Can't rename group... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Can't set parent group... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... loops in the group hierarchy are not allowed STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Can't remove all vehicles from this group... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Can't add the vehicle to this group... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Can't add shared vehicles to group... From 8890436af1e9dbff7279dd3cf4c3659a3ad973d6 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Tue, 26 Mar 2019 00:07:20 +0000 Subject: [PATCH 577/622] Add #6189: Groups now count the total number of vehicles in subgroups (3298) --- src/group.h | 3 +++ src/group_cmd.cpp | 54 ++++++++++++++++++++++++++++++++++++++++++++ src/group_gui.cpp | 34 +++++++++++++++++++--------- src/lang/english.txt | 2 ++ 4 files changed, 82 insertions(+), 11 deletions(-) diff --git a/src/group.h b/src/group.h index ea4f7e130e..8bb8d794fb 100644 --- a/src/group.h +++ b/src/group.h @@ -100,6 +100,9 @@ static inline bool IsAllGroupID(GroupID id_g) uint GetGroupNumEngines(CompanyID company, GroupID id_g, EngineID id_e); +uint GetGroupNumVehicle(CompanyID company, GroupID id_g, VehicleType type); +uint GetGroupNumProfitVehicle(CompanyID company, GroupID id_g, VehicleType type); +Money GetGroupProfitLastYear(CompanyID company, GroupID id_g, VehicleType type); void SetTrainGroupID(Train *v, GroupID grp); void UpdateTrainGroupID(Train *v); diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp index 3c9b3850a3..bb86c6b344 100644 --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -808,6 +808,60 @@ uint GetGroupNumEngines(CompanyID company, GroupID id_g, EngineID id_e) return count + GroupStatistics::Get(company, id_g, e->type).num_engines[id_e]; } +/** + * Get the number of vehicles in the group with GroupID + * id_g and its sub-groups. + * @param company The company the group belongs to + * @param id_g The GroupID of the group used + * @param type The vehicle type of the group + * @return The number of vehicles in the group + */ +uint GetGroupNumVehicle(CompanyID company, GroupID id_g, VehicleType type) +{ + uint count = 0; + const Group *g; + FOR_ALL_GROUPS(g) { + if (g->parent == id_g) count += GetGroupNumVehicle(company, g->index, type); + } + return count + GroupStatistics::Get(company, id_g, type).num_vehicle; +} + +/** + * Get the number of vehicles above profit minimum age in the group with GroupID + * id_g and its sub-groups. + * @param company The company the group belongs to + * @param id_g The GroupID of the group used + * @param type The vehicle type of the group + * @return The number of vehicles above profit minimum age in the group + */ +uint GetGroupNumProfitVehicle(CompanyID company, GroupID id_g, VehicleType type) +{ + uint count = 0; + const Group *g; + FOR_ALL_GROUPS(g) { + if (g->parent == id_g) count += GetGroupNumProfitVehicle(company, g->index, type); + } + return count + GroupStatistics::Get(company, id_g, type).num_profit_vehicle; +} + +/** + * Get last year's profit for the group with GroupID + * id_g and its sub-groups. + * @param company The company the group belongs to + * @param id_g The GroupID of the group used + * @param type The vehicle type of the group + * @return Last year's profit for the group + */ +Money GetGroupProfitLastYear(CompanyID company, GroupID id_g, VehicleType type) +{ + Money sum = 0; + const Group *g; + FOR_ALL_GROUPS(g) { + if (g->parent == id_g) sum += GetGroupProfitLastYear(company, g->index, type); + } + return sum + GroupStatistics::Get(company, id_g, type).profit_last_year; +} + void RemoveAllGroupsForCompany(const CompanyID company) { Group *g; diff --git a/src/group_gui.cpp b/src/group_gui.cpp index ca0b194f38..97c310e6f6 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -213,8 +213,10 @@ private: } this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_PROFIT].height); - SetDParamMaxValue(0, GroupStatistics::Get(this->vli.company, ALL_GROUP, this->vli.vtype).num_vehicle, 3, FS_SMALL); - this->column_size[VGC_NUMBER] = GetStringBoundingBox(STR_TINY_COMMA); + int num_vehicle = GetGroupNumVehicle(this->vli.company, ALL_GROUP, this->vli.vtype); + SetDParamMaxValue(0, num_vehicle, 3, FS_SMALL); + SetDParamMaxValue(1, num_vehicle, 3, FS_SMALL); + this->column_size[VGC_NUMBER] = GetStringBoundingBox(STR_GROUP_COUNT_WITH_SUBGROUP); this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_NUMBER].height); this->tiny_step_height += WD_MATRIX_TOP; @@ -275,11 +277,13 @@ private: /* draw the profit icon */ x = rtl ? x - 2 - this->column_size[VGC_PROFIT].width : x + 2 + this->column_size[VGC_AUTOREPLACE].width; SpriteID spr; - if (stats.num_profit_vehicle == 0) { + uint num_profit_vehicle = GetGroupNumProfitVehicle(this->vli.company, g_id, this->vli.vtype); + Money profit_last_year = GetGroupProfitLastYear(this->vli.company, g_id, this->vli.vtype); + if (num_profit_vehicle == 0) { spr = SPR_PROFIT_NA; - } else if (stats.profit_last_year < 0) { + } else if (profit_last_year < 0) { spr = SPR_PROFIT_NEGATIVE; - } else if (stats.profit_last_year < 10000 * stats.num_profit_vehicle) { // TODO magic number + } else if (profit_last_year < (Money) 10000 * num_profit_vehicle) { // TODO magic number spr = SPR_PROFIT_SOME; } else { spr = SPR_PROFIT_LOT; @@ -288,8 +292,16 @@ private: /* draw the number of vehicles of the group */ x = rtl ? x - 2 - this->column_size[VGC_NUMBER].width : x + 2 + this->column_size[VGC_PROFIT].width; - SetDParam(0, stats.num_vehicle); - DrawString(x, x + this->column_size[VGC_NUMBER].width - 1, y + (this->tiny_step_height - this->column_size[VGC_NUMBER].height) / 2, STR_TINY_COMMA, colour, SA_RIGHT | SA_FORCE); + int num_vehicle_with_subgroups = GetGroupNumVehicle(this->vli.company, g_id, this->vli.vtype); + int num_vehicle = GroupStatistics::Get(this->vli.company, g_id, this->vli.vtype).num_vehicle; + if (IsAllGroupID(g_id) || IsDefaultGroupID(g_id) || num_vehicle_with_subgroups == num_vehicle) { + SetDParam(0, num_vehicle); + DrawString(x, x + this->column_size[VGC_NUMBER].width - 1, y + (this->tiny_step_height - this->column_size[VGC_NUMBER].height) / 2, STR_TINY_COMMA, colour, SA_RIGHT | SA_FORCE); + } else { + SetDParam(0, num_vehicle); + SetDParam(1, num_vehicle_with_subgroups - num_vehicle); + DrawString(x, x + this->column_size[VGC_NUMBER].width - 1, y + (this->tiny_step_height - this->column_size[VGC_NUMBER].height) / 2, STR_GROUP_COUNT_WITH_SUBGROUP, colour, SA_RIGHT | SA_FORCE); + } } /** @@ -463,12 +475,12 @@ public: SetDParam(2, this->vehicles.size()); SetDParam(3, this->vehicles.size()); } else { - const Group *g = Group::Get(this->vli.index); + uint num_vehicle = GetGroupNumVehicle(this->vli.company, this->vli.index, this->vli.vtype); SetDParam(0, STR_GROUP_NAME); - SetDParam(1, g->index); - SetDParam(2, g->statistics.num_vehicle); - SetDParam(3, g->statistics.num_vehicle); + SetDParam(1, this->vli.index); + SetDParam(2, num_vehicle); + SetDParam(3, num_vehicle); } break; } diff --git a/src/lang/english.txt b/src/lang/english.txt index 032801ae5b..61fa2a91ba 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -3437,6 +3437,8 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Ungrouped road STR_GROUP_DEFAULT_SHIPS :Ungrouped ships STR_GROUP_DEFAULT_AIRCRAFTS :Ungrouped aircraft +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groups - click on a group to list all vehicles of this group. Drag and drop groups to arrange hierarchy. STR_GROUP_CREATE_TOOLTIP :{BLACK}Click to create a group STR_GROUP_DELETE_TOOLTIP :{BLACK}Delete the selected group From 49f7332b758f0fdcc70c2798a91fc1f0a4010971 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Tue, 26 Mar 2019 00:35:01 +0000 Subject: [PATCH 578/622] Feature #6053: Collapsible vehicle groups (3298) --- src/group.h | 2 ++ src/group_cmd.cpp | 1 + src/group_gui.cpp | 58 ++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 55 insertions(+), 6 deletions(-) diff --git a/src/group.h b/src/group.h index 8bb8d794fb..4c51e6ebd3 100644 --- a/src/group.h +++ b/src/group.h @@ -73,6 +73,8 @@ struct Group : GroupPool::PoolItem<&_group_pool> { Livery livery; ///< Custom colour scheme for vehicles in this group GroupStatistics statistics; ///< NOSAVE: Statistics and caches on the vehicles in the group. + bool folded; ///< NOSAVE: Is this group folded in the group view? + GroupID parent; ///< Parent group Group(CompanyID owner = INVALID_COMPANY); diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp index bb86c6b344..6939af88bf 100644 --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -298,6 +298,7 @@ void PropagateChildLivery(const Group *g) Group::Group(Owner owner) { this->owner = owner; + this->folded = false; } Group::~Group() diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 97c310e6f6..cc545ad8ff 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -103,6 +103,7 @@ class VehicleGroupWindow : public BaseVehicleListWindow { private: /* Columns in the group list */ enum ListColumns { + VGC_FOLD, ///< Fold / Unfold button. VGC_NAME, ///< Group name. VGC_PROTECT, ///< Autoreplace protect icon. VGC_AUTOREPLACE, ///< Autoreplace active icon. @@ -131,7 +132,14 @@ private: if (g->parent != parent) continue; this->groups.push_back(g); this->indents.push_back(indent); - AddChildren(source, g->index, indent + 1); + if (g->folded) { + /* Test if this group has children at all. If not, the folded flag should be cleared to avoid lingering unfold buttons in the list. */ + auto child = std::find_if(source->begin(), source->end(), [g](const Group *child){ return child->parent == g->index; }); + bool has_children = child != source->end(); + Group::Get(g->index)->folded = has_children; + } else { + AddChildren(source, g->index, indent + 1); + } } } @@ -194,9 +202,12 @@ private: */ uint ComputeGroupInfoSize() { + this->column_size[VGC_FOLD] = maxdim(GetSpriteSize(SPR_CIRCLE_FOLDED), GetSpriteSize(SPR_CIRCLE_UNFOLDED)); + this->tiny_step_height = this->column_size[VGC_FOLD].height; + this->column_size[VGC_NAME] = maxdim(GetStringBoundingBox(STR_GROUP_DEFAULT_TRAINS + this->vli.vtype), GetStringBoundingBox(STR_GROUP_ALL_TRAINS + this->vli.vtype)); this->column_size[VGC_NAME].width = max(170u, this->column_size[VGC_NAME].width); - this->tiny_step_height = this->column_size[VGC_NAME].height; + this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_NAME].height); this->column_size[VGC_PROTECT] = GetSpriteSize(SPR_GROUP_REPLACE_PROTECT); this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_PROTECT].height); @@ -222,6 +233,7 @@ private: this->tiny_step_height += WD_MATRIX_TOP; return WD_FRAMERECT_LEFT + 8 + + this->column_size[VGC_FOLD].width + 2 + this->column_size[VGC_NAME].width + 8 + this->column_size[VGC_PROTECT].width + 2 + this->column_size[VGC_AUTOREPLACE].width + 2 + @@ -238,8 +250,9 @@ private: * @param g_id Group to list. * @param indent Indentation level. * @param protection Whether autoreplace protection is set. + * @param has_children Whether the group has children and should have a fold / unfold button. */ - void DrawGroupInfo(int y, int left, int right, GroupID g_id, int indent = 0, bool protection = false) const + void DrawGroupInfo(int y, int left, int right, GroupID g_id, int indent = 0, bool protection = false, bool has_children = false) const { /* Highlight the group if a vehicle is dragged over it */ if (g_id == this->group_over) { @@ -253,6 +266,12 @@ private: const GroupStatistics &stats = GroupStatistics::Get(this->vli.company, g_id, this->vli.vtype); bool rtl = _current_text_dir == TD_RTL; + /* draw fold / unfold button */ + int x = rtl ? right - WD_FRAMERECT_RIGHT - 8 - this->column_size[VGC_FOLD].width + 1 : left + WD_FRAMERECT_LEFT + 8; + if (has_children) { + DrawSprite(Group::Get(g_id)->folded ? SPR_CIRCLE_FOLDED : SPR_CIRCLE_UNFOLDED, PAL_NONE, rtl ? x - indent : x + indent, y + (this->tiny_step_height - this->column_size[VGC_FOLD].height) / 2); + } + /* draw group name */ StringID str; if (IsAllGroupID(g_id)) { @@ -263,7 +282,7 @@ private: SetDParam(0, g_id); str = STR_GROUP_NAME; } - int x = rtl ? right - WD_FRAMERECT_RIGHT - 8 - this->column_size[VGC_NAME].width + 1 : left + WD_FRAMERECT_LEFT + 8; + x = rtl ? x - 2 - this->column_size[VGC_NAME].width : x + 2 + this->column_size[VGC_FOLD].width; DrawString(x + (rtl ? 0 : indent), x + this->column_size[VGC_NAME].width - 1 - (rtl ? indent : 0), y + (this->tiny_step_height - this->column_size[VGC_NAME].height) / 2, str, colour); /* draw autoreplace protection */ @@ -283,7 +302,7 @@ private: spr = SPR_PROFIT_NA; } else if (profit_last_year < 0) { spr = SPR_PROFIT_NEGATIVE; - } else if (profit_last_year < (Money) 10000 * num_profit_vehicle) { // TODO magic number + } else if (profit_last_year < (Money)10000 * num_profit_vehicle) { // TODO magic number spr = SPR_PROFIT_SOME; } else { spr = SPR_PROFIT_LOT; @@ -598,7 +617,7 @@ public: assert(g->owner == this->owner); - DrawGroupInfo(y1, r.left, r.right, g->index, this->indents[i] * LEVEL_WIDTH, g->replace_protection); + DrawGroupInfo(y1, r.left, r.right, g->index, this->indents[i] * LEVEL_WIDTH, g->replace_protection, g->folded || (i + 1 < (int)this->groups.size() && indents[i + 1] > this->indents[i])); y1 += this->tiny_step_height; } @@ -672,6 +691,33 @@ public: uint id_g = this->group_sb->GetScrolledRowFromWidget(pt.y, this, WID_GL_LIST_GROUP, 0, this->tiny_step_height); if (id_g >= this->groups.size()) return; + if (groups[id_g]->folded || (id_g + 1 < this->groups.size() && this->indents[id_g + 1] > this->indents[id_g])) { + /* The group has children, check if the user clicked the fold / unfold button. */ + NWidgetCore *group_display = this->GetWidget(widget); + int x = _current_text_dir == TD_RTL ? + group_display->pos_x + group_display->current_x - WD_FRAMERECT_RIGHT - 8 - this->indents[id_g] * LEVEL_WIDTH - this->column_size[VGC_FOLD].width : + group_display->pos_x + WD_FRAMERECT_LEFT + 8 + this->indents[id_g] * LEVEL_WIDTH; + if (click_count > 1 || (pt.x >= x && pt.x < (int)(x + this->column_size[VGC_FOLD].width))) { + + GroupID g = this->vli.index; + if (!IsAllGroupID(g) && !IsDefaultGroupID(g)) { + do { + g = Group::Get(g)->parent; + if (g == groups[id_g]->index) { + this->vli.index = g; + break; + } + } while (g != INVALID_GROUP); + } + + Group::Get(groups[id_g]->index)->folded = !groups[id_g]->folded; + this->groups.ForceRebuild(); + + this->SetDirty(); + break; + } + } + this->group_sel = this->vli.index = this->groups[id_g]->index; SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this); From 1a4c7a4e545e275a60be1617e55d7ea4f65264f9 Mon Sep 17 00:00:00 2001 From: "Johannes E. Krause" Date: Sun, 24 Mar 2019 18:03:18 +0100 Subject: [PATCH 579/622] Cleanup: use switch for industry cargo vars --- src/newgrf_industries.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/newgrf_industries.cpp b/src/newgrf_industries.cpp index 980059cabb..19664fa6d2 100644 --- a/src/newgrf_industries.cpp +++ b/src/newgrf_industries.cpp @@ -312,12 +312,14 @@ static uint32 GetCountAndDistanceOfClosestInstance(byte param_setID, byte layout CargoID cargo = GetCargoTranslation(parameter, this->ro.grffile); int index = this->industry->GetCargoProducedIndex(cargo); if (index < 0) return 0; // invalid cargo - if (variable == 0x69) return this->industry->produced_cargo_waiting[index]; - if (variable == 0x6A) return this->industry->this_month_production[index]; - if (variable == 0x6B) return this->industry->this_month_transported[index]; - if (variable == 0x6C) return this->industry->last_month_production[index]; - if (variable == 0x6D) return this->industry->last_month_transported[index]; - NOT_REACHED(); + switch (variable) { + case 0x69: return this->industry->produced_cargo_waiting[index]; + case 0x6A: return this->industry->this_month_production[index]; + case 0x6B: return this->industry->this_month_transported[index]; + case 0x6C: return this->industry->last_month_production[index]; + case 0x6D: return this->industry->last_month_transported[index]; + default: NOT_REACHED(); + } } From fdaf67d9246342f55a40d3d4ce8740e3dc53e265 Mon Sep 17 00:00:00 2001 From: "Johannes E. Krause" Date: Sun, 24 Mar 2019 18:32:39 +0100 Subject: [PATCH 580/622] Add: [Newgrf] Some 60+ Vars for industries that were missed in #6867 --- src/newgrf_industries.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/newgrf_industries.cpp b/src/newgrf_industries.cpp index 19664fa6d2..457b06f675 100644 --- a/src/newgrf_industries.cpp +++ b/src/newgrf_industries.cpp @@ -308,7 +308,9 @@ static uint32 GetCountAndDistanceOfClosestInstance(byte param_setID, byte layout case 0x6A: case 0x6B: case 0x6C: - case 0x6D: { + case 0x6D: + case 0x70: + case 0x71: { CargoID cargo = GetCargoTranslation(parameter, this->ro.grffile); int index = this->industry->GetCargoProducedIndex(cargo); if (index < 0) return 0; // invalid cargo @@ -318,6 +320,8 @@ static uint32 GetCountAndDistanceOfClosestInstance(byte param_setID, byte layout case 0x6B: return this->industry->this_month_transported[index]; case 0x6C: return this->industry->last_month_production[index]; case 0x6D: return this->industry->last_month_transported[index]; + case 0x70: return this->industry->production_rate[index]; + case 0x71: return this->industry->last_month_pct_transported[index]; default: NOT_REACHED(); } } From e817951bfdc229b404d5fec188c67f5202a0e774 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 27 Mar 2019 19:45:44 +0100 Subject: [PATCH 581/622] Update: Translations from eints finnish: 2 changes by hpiirai english (us): 17 changes by Supercheese luxembourgish: 10 changes by Phreeze dutch: 20 changes by JanWillem norwegian (bokmal): 2 changes by Leifbk latin: 16 changes by Supercheese portuguese: 3 changes by JayCity --- src/lang/afrikaans.txt | 1 + src/lang/arabic_egypt.txt | 1 + src/lang/basque.txt | 1 + src/lang/belarusian.txt | 1 + src/lang/brazilian_portuguese.txt | 1 + src/lang/bulgarian.txt | 1 + src/lang/catalan.txt | 1 + src/lang/croatian.txt | 1 + src/lang/czech.txt | 1 + src/lang/danish.txt | 1 + src/lang/dutch.txt | 39 ++++++++++++++++-------------- src/lang/english_AU.txt | 1 + src/lang/english_US.txt | 21 +++++++++++++--- src/lang/esperanto.txt | 1 + src/lang/estonian.txt | 1 + src/lang/faroese.txt | 1 + src/lang/finnish.txt | 3 +++ src/lang/french.txt | 1 + src/lang/gaelic.txt | 1 + src/lang/galician.txt | 1 + src/lang/german.txt | 1 + src/lang/greek.txt | 1 + src/lang/hebrew.txt | 1 + src/lang/hungarian.txt | 1 + src/lang/icelandic.txt | 1 + src/lang/indonesian.txt | 1 + src/lang/irish.txt | 1 + src/lang/italian.txt | 1 + src/lang/japanese.txt | 1 + src/lang/korean.txt | 1 + src/lang/latin.txt | 19 +++++++++++++-- src/lang/latvian.txt | 1 + src/lang/lithuanian.txt | 1 + src/lang/luxembourgish.txt | 11 +++++++++ src/lang/malay.txt | 1 + src/lang/norwegian_bokmal.txt | 3 +++ src/lang/norwegian_nynorsk.txt | 1 + src/lang/polish.txt | 1 + src/lang/portuguese.txt | 5 +++- src/lang/romanian.txt | 1 + src/lang/russian.txt | 1 + src/lang/serbian.txt | 1 + src/lang/simplified_chinese.txt | 1 + src/lang/slovak.txt | 1 + src/lang/slovenian.txt | 1 + src/lang/spanish.txt | 1 + src/lang/spanish_MX.txt | 1 + src/lang/swedish.txt | 1 + src/lang/tamil.txt | 1 + src/lang/thai.txt | 1 + src/lang/traditional_chinese.txt | 1 + src/lang/turkish.txt | 1 + src/lang/ukrainian.txt | 1 + src/lang/unfinished/chuvash.txt | 1 + src/lang/unfinished/frisian.txt | 1 + src/lang/unfinished/ido.txt | 1 + src/lang/unfinished/macedonian.txt | 1 + src/lang/unfinished/maltese.txt | 1 + src/lang/unfinished/marathi.txt | 1 + src/lang/unfinished/persian.txt | 1 + src/lang/unfinished/urdu.txt | 1 + src/lang/vietnamese.txt | 1 + src/lang/welsh.txt | 1 + 63 files changed, 133 insertions(+), 24 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index ae2f77bee2..0b7d4aaef2 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -3331,6 +3331,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Ongegroepeerde STR_GROUP_DEFAULT_SHIPS :Ongegroepeerde skepe STR_GROUP_DEFAULT_AIRCRAFTS :Ongegroepeerde vliegtuig + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groepe - klik op 'n groep om alle voertuie in hierdie groep te lys. Sleep en los om te rangskik volgens hiërargie. STR_GROUP_CREATE_TOOLTIP :{BLACK}Klik om groep te skep STR_GROUP_DELETE_TOOLTIP :{BLACK}Vee uit die gekose groep diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 694f5643a6..af79f630fb 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -2859,6 +2859,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :لاتنتمي STR_GROUP_DEFAULT_SHIPS :مركبة لاتنتمي لأي مجموعة STR_GROUP_DEFAULT_AIRCRAFTS :طائرة لاتنتمي لأي مجموعة + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}المجموعات: اضغط على اي مجموعة لعرض مركباتها . اسحب للترتيب . STR_GROUP_CREATE_TOOLTIP :{BLACK}أضغط لإنشاء مجموعة STR_GROUP_DELETE_TOOLTIP :{BLACK}أحذف المجموعة المختارة diff --git a/src/lang/basque.txt b/src/lang/basque.txt index d390de5bf2..67125293f0 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -3219,6 +3219,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Taldeetan ez da STR_GROUP_DEFAULT_SHIPS :Taldeetan ez dauden itsasontziak STR_GROUP_DEFAULT_AIRCRAFTS :Taldeetan ez dauden hegazkinak + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Taldeak - Taldean klikatu taldearen ibilgailuak zerrendatzeko STR_GROUP_CREATE_TOOLTIP :{BLACK}Klikatu taldea sortzeko STR_GROUP_DELETE_TOOLTIP :{BLACK}Aukeratutako taldea ezabatu diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 887dace4b5..2d05e68230 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -3683,6 +3683,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Бяз груп STR_GROUP_DEFAULT_SHIPS :Бяз групы STR_GROUP_DEFAULT_AIRCRAFTS :Бяз групы + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Ґрупы — клікніце па назьве ґрупы, каб убачыць сьпіс транспарту ў гэтай ґрупе. Націсьніце ды перацягвайце ґрупы, каб упарадкаваць гіерархію. STR_GROUP_CREATE_TOOLTIP :{BLACK}Стварыць групу STR_GROUP_DELETE_TOOLTIP :{BLACK}Выдаліць выбраную групу diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index cf75f47507..d7a4178c09 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -3393,6 +3393,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Automóveis sem STR_GROUP_DEFAULT_SHIPS :Embarcações sem grupo STR_GROUP_DEFAULT_AIRCRAFTS :Aeronaves sem grupo + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - Clique em um grupo para listar seus veículos. Clique e arraste para organizar a hierarquia. STR_GROUP_CREATE_TOOLTIP :{BLACK}Clique para criar um grupo STR_GROUP_DELETE_TOOLTIP :{BLACK}Remove o grupo selecionado diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 661589024b..004240b2d6 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -3261,6 +3261,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Безгруп STR_GROUP_DEFAULT_SHIPS :Безгрупни кораби STR_GROUP_DEFAULT_AIRCRAFTS :Безгрупни самолети + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Групи - Щракни на група за да видиш списък на всички превозни средства от тази група STR_GROUP_CREATE_TOOLTIP :{BLACK}Щракни да създадеш група STR_GROUP_DELETE_TOOLTIP :{BLACK}Изтрий избраната група diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 8d91307d03..413e189dd9 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -3435,6 +3435,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Vehicles desagr STR_GROUP_DEFAULT_SHIPS :Vaixells desagrupats STR_GROUP_DEFAULT_AIRCRAFTS :Avions desagrupats + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grups - Clica en un grup per llistar tots els vehicles d'aquest grup. Arrossega i solta per a canviar-ne la jerarquia. STR_GROUP_CREATE_TOOLTIP :{BLACK}Clica per crear un grup STR_GROUP_DELETE_TOOLTIP :{BLACK}Elimina el grup seleccionat diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index e494d10803..88408adc11 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -3533,6 +3533,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Negrupirana ces STR_GROUP_DEFAULT_SHIPS :Negrupirani brodovi STR_GROUP_DEFAULT_AIRCRAFTS :Negrupirani zrakoplovi + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupe - kliknite na grupu kako bi izlistali sva vozila ove grupe. Povucite i prenesite grupe za postavljanje hijerarhije. STR_GROUP_CREATE_TOOLTIP :{BLACK}Klikni za kreiranje grupe STR_GROUP_DELETE_TOOLTIP :{BLACK}Obriši odabranu grupu diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 6ce6c2f1fe..06600fa4da 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -3453,6 +3453,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Nezařazená si STR_GROUP_DEFAULT_SHIPS :Nezařazené lodě STR_GROUP_DEFAULT_AIRCRAFTS :Nezařazená letadla + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Skupiny - Kliknutím na skupinu se zobrazí seznam vozidel ve skupině. Přetáhnutím skupin je uspořádáš. STR_GROUP_CREATE_TOOLTIP :{BLACK}Kliknutím vytvoříš skupinu STR_GROUP_DELETE_TOOLTIP :{BLACK}Vymazat vybranou skupinu diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 5ff50a961c..dbd2e43a3a 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -3437,6 +3437,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Ikke-grupperede STR_GROUP_DEFAULT_SHIPS :Ikke-grupperede skibe STR_GROUP_DEFAULT_AIRCRAFTS :Ikke-grupperede fly + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupper - klik på en gruppe for at vise alle køretøjer i gruppen STR_GROUP_CREATE_TOOLTIP :{BLACK}Klik for at oprette en gruppe STR_GROUP_DELETE_TOOLTIP :{BLACK}Slet den valgte gruppe diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index ffb7e914d3..aadc6d996a 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -2364,7 +2364,7 @@ STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Stations STR_STATION_BUILD_ORIENTATION :{BLACK}Richting STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP :{BLACK}Kies richting van treinstation STR_STATION_BUILD_NUMBER_OF_TRACKS :{BLACK}Aantal sporen -STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Selecteer aantal perrons voor station +STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Selecteer het aantal sporen voor het treinstation STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}Perronlengte STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Selecteer lengte van station STR_STATION_BUILD_DRAG_DROP :{BLACK}Slepen @@ -2441,8 +2441,8 @@ STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Selectee # Road vehicle station construction window STR_STATION_BUILD_BUS_ORIENTATION :{WHITE}Richting van bushalte STR_STATION_BUILD_BUS_ORIENTATION_TOOLTIP :{BLACK}Selecteer richting van bushalte -STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Richting van vrachtwagenlaadhal -STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Selecteer richting van vrachtwagenlaadhal +STR_STATION_BUILD_TRUCK_ORIENTATION :{WHITE}Richting van vrachtwagenperron +STR_STATION_BUILD_TRUCK_ORIENTATION_TOOLTIP :{BLACK}Selecteer richting van vrachtwagenperron STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION :{WHITE}Richting van passagierstramhalte STR_STATION_BUILD_PASSENGER_TRAM_ORIENTATION_TOOLTIP :{BLACK}Selecteer richting van passagierstramhalte STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Richting van vrachttramhalte @@ -2594,7 +2594,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Bedrijf # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Landinformatie -STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Sloopkosten: {LTBLUE}Niet mogelijk +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} STR_LAND_AREA_INFORMATION_OWNER_N_A :Geen @@ -2965,10 +2965,10 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Vorige s STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Doorgaan met de vorige normale sprite, alle pseudo-/herkleur-/lettertype-sprites overslaan; bij het einde terug naar het begin STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Voorbeeld van de huidige sprite. De uitlijning wordt genegeerd bij het weergeven van deze sprite. STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Sprite verplaatsen, dit verandert X en Y offsets. Ctr+klik om de sprite 8 eenheden per keer te verplaatsen. -STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Herstel relatief -STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Herstel de huidige relative offsets -STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X offset: {NUM}, Y offset: {NUM} (Absoluut) -STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}X offset: {NUM}, Y offset: {NUM} (Relatief) +STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Relatief herstellen +STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Herstel de huidige relatieve offsets +STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X-offset: {NUM}, Y-offset: {NUM} (absoluut) +STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}X-offset: {NUM}, Y-offset: {NUM} (relatief) STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Sprite kiezen STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Kies een sprite van een willekeurige plaats op het scherm @@ -3084,7 +3084,7 @@ STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_ STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Stad groeit iedere {ORANGE}{COMMA}{BLACK}{NBSP}dag{P "" en} 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_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_LOCAL_AUTHORITY_BUTTON :{BLACK}Gemeente STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Geef informatie over de gemeente weer @@ -3193,8 +3193,8 @@ STR_STATION_LIST_CAPTION :{WHITE}{COMPANY STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} STR_STATION_LIST_NONE :{YELLOW}- Geen - -STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Kies alle faciliteiten -STR_STATION_LIST_SELECT_ALL_TYPES :{BLACK}Kies alle vrachttypen (inclusief niet-wachtende vracht) +STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Alle faciliteiten selecteren +STR_STATION_LIST_SELECT_ALL_TYPES :{BLACK}Selecteer alle vrachttypen (inclusief niet-wachtende vracht) STR_STATION_LIST_NO_WAITING_CARGO :{BLACK}Er wacht geen vracht van enig type # Station view window @@ -3210,16 +3210,16 @@ STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}Acceptee STR_STATION_VIEW_EXCLUSIVE_RIGHTS_SELF :{BLACK}Dit station heeft exclusieve transportrechten in deze gemeente. STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPANY}{BLACK} kocht exclusieve transportrechten in deze gemeente -STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Rangen -STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Bekijk stationsreputaties +STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Scores +STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Bekijk de score van stations STR_STATION_VIEW_SUPPLY_RATINGS_TITLE :{BLACK}Maandelijkse levering en lokale waardering: STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%) STR_STATION_VIEW_GROUP :{BLACK}Groeperen op -STR_STATION_VIEW_WAITING_STATION :Station: Wachtend -STR_STATION_VIEW_WAITING_AMOUNT :Hoeveelheid: Wachtend -STR_STATION_VIEW_PLANNED_STATION :Station: Gepland -STR_STATION_VIEW_PLANNED_AMOUNT :Hoeveelheid: Gepland +STR_STATION_VIEW_WAITING_STATION :Station: wachtend +STR_STATION_VIEW_WAITING_AMOUNT :Hoeveelheid: wachtend +STR_STATION_VIEW_PLANNED_STATION :Station: gepland +STR_STATION_VIEW_PLANNED_AMOUNT :Hoeveelheid: gepland STR_STATION_VIEW_FROM :{YELLOW}{CARGO_SHORT} van {STATION} STR_STATION_VIEW_VIA :{YELLOW}{CARGO_SHORT} via {STATION} STR_STATION_VIEW_TO :{YELLOW}{CARGO_SHORT} naar {STATION} @@ -3437,6 +3437,8 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Niet-gegroepeer STR_GROUP_DEFAULT_SHIPS :Niet-gegroepeerde schepen STR_GROUP_DEFAULT_AIRCRAFTS :Niet-gegroepeerde vliegtuigen +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groepen - Klik op een groep voor een lijst van alle voertuigen in deze groep. Klik en sleep om hiërarchie te beheren STR_GROUP_CREATE_TOOLTIP :{BLACK}Klik om een groep te creëren STR_GROUP_DELETE_TOOLTIP :{BLACK}Verwijder de geselecteerde groep @@ -4345,7 +4347,7 @@ STR_ERROR_THERE_IS_NO_STATION :{WHITE}...er is STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}Verwijder eerst treinstation STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}Verwijder eerst busstation -STR_ERROR_MUST_DEMOLISH_TRUCK_STATION_FIRST :{WHITE}Verwijder eerst vrachtwagenlaadhal +STR_ERROR_MUST_DEMOLISH_TRUCK_STATION_FIRST :{WHITE}Verwijder eerst vrachtwagenperron STR_ERROR_MUST_DEMOLISH_PASSENGER_TRAM_STATION_FIRST :{WHITE}Verwijder eerst passagierstramstation STR_ERROR_MUST_DEMOLISH_CARGO_TRAM_STATION_FIRST :{WHITE}Verwijder eerst vrachttramhalte STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Verwijder eerst haven @@ -4473,6 +4475,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Kan groe STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Kan deze groep niet verwijderen... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Kan deze groep niet hernoemen... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Kan huidige groep niet instellen... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... lussen in de groepshiërarchie zijn niet toegestaan STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Kan niet alle voertuigen van deze groep verwijderen... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Kan niet alle voertuigen aan deze groep toevoegen... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Kan niet alle gedeelde voertuigen aan deze groep toevoegen... diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index d260a6a80e..529c1e03c5 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -3297,6 +3297,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Ungrouped road STR_GROUP_DEFAULT_SHIPS :Ungrouped ships STR_GROUP_DEFAULT_AIRCRAFTS :Ungrouped aircraft + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groups - click on a group to list all vehicles of this group. Drag and drop groups to arrange hierarchy. STR_GROUP_CREATE_TOOLTIP :{BLACK}Click to create a group STR_GROUP_DELETE_TOOLTIP :{BLACK}Delete the selected group diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 0d8b1b7127..8259ae8076 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1184,6 +1184,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Allow terraform STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Allow terraforming under buildings and tracks without removing them STR_CONFIG_SETTING_CATCHMENT :Allow more realistically sized catchment areas: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Have differently sized catchment areas for different types of stations and airports +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Company stations can serve industries with attached neutral stations: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :When enabled, industries with attached stations (such as Oil Rigs) may also be served by company owned stations built nearby. When disabled, these industries may only be served by their attached stations. Any nearby company stations won't be able to serve them, nor will the attached station serve anything else other than the industry STR_CONFIG_SETTING_EXTRADYNAMITE :Allow removal of more town-owned roads, bridges and tunnels: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Make it easier to remove town-owned infrastructure and buildings STR_CONFIG_SETTING_TRAIN_LENGTH :Maximum length of trains: {STRING} @@ -2137,7 +2139,7 @@ STR_NETWORK_CHAT_ALL :[All] {STRING}: STR_NETWORK_CHAT_OSKTITLE :{BLACK}Enter text for network chat # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}No network devices found or compiled without ENABLE_NETWORK +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}No network devices found STR_NETWORK_ERROR_NOSERVER :{WHITE}Could not find any network games STR_NETWORK_ERROR_NOCONNECTION :{WHITE}The server didn't answer the request STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Could not connect due to NewGRF mismatch @@ -2956,11 +2958,11 @@ STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF v # Sprite aligner window STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aligning sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Next sprite -STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Proceed to the next normal sprite, skipping any pseudo/recolour/font sprites and wrapping around from the last sprite to the first +STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Proceed to the next normal sprite, skipping any pseudo/recolor/font sprites and wrapping around from the last sprite to the first STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Go to sprite STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Go to the given sprite. If the sprite is not a normal sprite, proceed to the next normal sprite STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Previous sprite -STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Proceed to the previous normal sprite, skipping any pseudo/recolour/font sprites and wrapping around from the first sprite to the last +STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Proceed to the previous normal sprite, skipping any pseudo/recolor/font sprites and wrapping around from the first sprite to the last STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representation of the currently selected sprite. The alignment is ignored when drawing this sprite STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Move the sprite around, changing the X and Y offsets. Ctrl+Click to move the sprite eight units at a time STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Reset relative @@ -3030,6 +3032,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF ' STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Cargo/refit information for '{1:ENGINE}' differs from purchase list after construction. This might cause autorenew/-replace to fail refitting correctly STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' caused an endless loop in the production callback STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback {1:HEX} returned unknown/invalid result {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' returned invalid cargo type in the production callback at {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : @@ -3434,6 +3437,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Ungrouped road STR_GROUP_DEFAULT_SHIPS :Ungrouped ships STR_GROUP_DEFAULT_AIRCRAFTS :Ungrouped aircraft + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groups - click on a group to list all vehicles of this group. Drag and drop groups to arrange hierarchy. STR_GROUP_CREATE_TOOLTIP :{BLACK}Click to create a group STR_GROUP_DELETE_TOOLTIP :{BLACK}Delete the selected group @@ -3466,6 +3470,7 @@ STR_BUY_VEHICLE_SHIP_CAPTION :New Ships STR_BUY_VEHICLE_AIRCRAFT_CAPTION :New Aircraft STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} Weight: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} (Refit Cost: {GOLD}{CURRENCY_LONG}{BLACK}) Weight: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Speed: {GOLD}{VELOCITY}{BLACK} Power: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Speed: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Speed on ocean: {GOLD}{VELOCITY} @@ -3476,8 +3481,10 @@ STR_PURCHASE_INFO_REFITTABLE :(refittable) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Designed: {GOLD}{NUM}{BLACK} Life: {GOLD}{COMMA} year{P "" s} STR_PURCHASE_INFO_RELIABILITY :{BLACK}Max. Reliability: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Cost: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} (Refit Cost: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Weight: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} Speed: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Cost: {GOLD}{CURRENCY_LONG}{BLACK} (Refit Cost: {GOLD}{CURRENCY_LONG}{BLACK}) Speed: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacity: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Powered Wagons: {GOLD}+{POWER}{BLACK} Weight: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Refittable to: {GOLD}{STRING} @@ -3498,12 +3505,20 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Buy Vehi STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Buy Ship STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Buy Aircraft +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Buy and Refit Vehicle +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Buy and Refit Vehicle +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Buy and Refit Ship +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Buy and Refit Aircraft STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Buy the highlighted train vehicle. Shift+Click shows estimated cost without purchase STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Buy the highlighted road vehicle. Shift+Click shows estimated cost without purchase STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Buy the highlighted ship. Shift+Click shows estimated cost without purchase STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Buy the highlighted aircraft. Shift+Click shows estimated cost without purchase +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Buy and refit the highlighted train vehicle. Shift+Click shows estimated cost without purchase +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Buy and refit the highlighted road vehicle. Shift+Click shows estimated cost without purchase +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Buy and refit the highlighted ship. Shift+Click shows estimated cost without purchase +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Buy and refit the highlighted aircraft. Shift+Click shows estimated cost without purchase STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Rename STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Rename diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index c82efa0e07..688d713afd 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -2772,6 +2772,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Sengrupaj strat STR_GROUP_DEFAULT_SHIPS :Sengrupaj ŝipoj STR_GROUP_DEFAULT_AIRCRAFTS :Sengrupaj aviadiloj + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupoj - klaku grupon por listigi ĉiujn veturilojn de tiu ĉi grupo. Trenu/faligu grupojn por ordigi ĝin STR_GROUP_CREATE_TOOLTIP :{BLACK}Klaku por krei grupon STR_GROUP_DELETE_TOOLTIP :{BLACK}Viŝu la selektitan grupon diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index d60c39bd81..537f11557a 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -3408,6 +3408,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Rühmitamata s STR_GROUP_DEFAULT_SHIPS :Rühmitamata laevad STR_GROUP_DEFAULT_AIRCRAFTS :Rühmitamata õhusõidukid + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Rühm - Klõpsa rühmal, et kõiki seal olevaid sõidukeid järjestada STR_GROUP_CREATE_TOOLTIP :{BLACK}Klõpsa rühma loomiseks STR_GROUP_DELETE_TOOLTIP :{BLACK}Eemalda valitud rühm diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 55849f11be..4073b2515b 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -2963,6 +2963,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Óbólkaði akf STR_GROUP_DEFAULT_SHIPS :Óbólkaði skip STR_GROUP_DEFAULT_AIRCRAFTS :Óbólkaði flogfør + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Bólkar - trýst á ein bólk fyri at síggja øll flutningstól í hesum bólki STR_GROUP_CREATE_TOOLTIP :{BLACK}Trýst fyri at gera ein bólk STR_GROUP_DELETE_TOOLTIP :{BLACK}Strika valda bólkin diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 42e3fdb45b..86ba45386a 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -3437,6 +3437,8 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Muut ajoneuvot STR_GROUP_DEFAULT_SHIPS :Muut laivat STR_GROUP_DEFAULT_AIRCRAFTS :Muut lentokoneet +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Ryhmät – napsauta ryhmää nähdäksesi kaikki kulkuneuvot tässä ryhmässä. Järjestä ryhmiä vetämällä ja pudottamalla. STR_GROUP_CREATE_TOOLTIP :{BLACK}Luo ryhmä STR_GROUP_DELETE_TOOLTIP :{BLACK}Poista valittu ryhmä @@ -4473,6 +4475,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Ei voi l STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Ryhmää ei voi poistaa. STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Ryhmää ei voi nimetä. STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Pääryhmää ei voi määrittää... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... ryhmähierarkiassa ei saa olla silmukoita STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Ryhmän kaikkia kulkuneuvoja ei voi poistaa. STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Ei voi lisätä kulkuneuvoa ryhmään. STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Ei voi lisätä jaettuja kulkuneuvoja ryhmään. diff --git a/src/lang/french.txt b/src/lang/french.txt index aa70db7716..4ad86768c6 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -3432,6 +3432,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Véhicules rout STR_GROUP_DEFAULT_SHIPS :Navires non groupés STR_GROUP_DEFAULT_AIRCRAFTS :Aéronefs non groupés + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groupes - Cliquer sur un groupe pour lister tous les véhicules de ce groupe. Glisser et déposer les groupes pour les hiérarchiser. STR_GROUP_CREATE_TOOLTIP :{BLACK}Créer un groupe de véhicules STR_GROUP_DELETE_TOOLTIP :{BLACK}Supprimer le groupe sélectionné diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 0fbc2328aa..1a946afdfe 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -3612,6 +3612,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Carbadan-rathai STR_GROUP_DEFAULT_SHIPS :Longan gun bhuidheann STR_GROUP_DEFAULT_AIRCRAFTS :Carbadan-adhair gun bhuidheann + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Buidhnean - briog air buidheann gus a h-uile carbad a tha sa bhuidheann seo a shealltainn. Slaod buidhnean ’s leig às iad gus an rangachd atharrachadh. STR_GROUP_CREATE_TOOLTIP :{BLACK}Briog gus buidheann a chruthachadh STR_GROUP_DELETE_TOOLTIP :{BLACK}Sguab às dhan bhuidheann a thagh thu diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 7320dc9820..149e29e497 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -3338,6 +3338,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Vehículos de e STR_GROUP_DEFAULT_SHIPS :Barcos sen agrupar STR_GROUP_DEFAULT_AIRCRAFTS :Avións sen agrupar + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - Pincha nun grupo para ver unha lista de tódolos vehículos dese grupo STR_GROUP_CREATE_TOOLTIP :{BLACK}Pincha para crear un grupo STR_GROUP_DELETE_TOOLTIP :{BLACK}Borrar o grupo seleccionado diff --git a/src/lang/german.txt b/src/lang/german.txt index 1092b12da1..35d02e8d16 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -3416,6 +3416,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Ungruppierte St STR_GROUP_DEFAULT_SHIPS :Ungruppierte Schiffe STR_GROUP_DEFAULT_AIRCRAFTS :Ungruppierte Flugzeuge + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Gruppen - Klick auf eine Gruppe zeigt Liste aller Fahrzeuge der Gruppe an STR_GROUP_CREATE_TOOLTIP :{BLACK}Neue Gruppe erstellen STR_GROUP_DELETE_TOOLTIP :{BLACK}Ausgewählte Gruppe löschen diff --git a/src/lang/greek.txt b/src/lang/greek.txt index d2fab2ac1e..aed86f55d4 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -3544,6 +3544,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Μη ομαδο STR_GROUP_DEFAULT_SHIPS :Μη ομαδοποιημένα πλοία STR_GROUP_DEFAULT_AIRCRAFTS :Μη ομαδοποιημένα αεροσκάφη + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Ομάδες - πατήστε σε μία ομάδα για να δείτε όλα τα οχήματα που της ανήκουν. Σύρετε ομάδες για να ρυθμίσετε την ιεραρχία. STR_GROUP_CREATE_TOOLTIP :{BLACK}Πατήστε για δημιουργήσετε ομάδα STR_GROUP_DELETE_TOOLTIP :{BLACK}Διαγραφή της επιλεγμένης ομάδας diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 726c91ceeb..bda99e0d2c 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -3391,6 +3391,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :רכבים לא STR_GROUP_DEFAULT_SHIPS :כלי שייט לא משוייכים STR_GROUP_DEFAULT_AIRCRAFTS :כלי טייס לא משוייכים + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}קבוצות – לחץ על קבוצה לצפייה בכל הכלים השייכים אליה. גרור כדי לסדר הירארכיה. STR_GROUP_CREATE_TOOLTIP :{BLACK}לחץ ליצירת קבוצה חדשה STR_GROUP_DELETE_TOOLTIP :{BLACK}מחק את הקבוצה שנבחרה diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index ad4f8f7017..6956ee09a3 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -3501,6 +3501,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Csoportosítatl STR_GROUP_DEFAULT_SHIPS :Csoportosítatlan hajók STR_GROUP_DEFAULT_AIRCRAFTS :Csoportosítatlan repülők + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Csoportok - Kattints a csoport nevére a járművek listázásához. Húzással a csoportokat hierarchiába rendezheted. STR_GROUP_CREATE_TOOLTIP :{BLACK}Csoport létrehozásához kattints ide STR_GROUP_DELETE_TOOLTIP :{BLACK}Kijelölt csoport törlése diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 3efad55181..92a28d1bcd 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -3121,6 +3121,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Hóplausar bifr STR_GROUP_DEFAULT_SHIPS :Hóplaus skip STR_GROUP_DEFAULT_AIRCRAFTS :Hóplausar flugvélar + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Hópar - Smelltu á hóp til að skrifa öll farartæki í þessum hóp STR_GROUP_CREATE_TOOLTIP :{BLACK}Smelltu til að búa til hóp STR_GROUP_DELETE_TOOLTIP :{BLACK}Eyða völdum hóp diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index b682f23c04..2e063a29c5 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -3366,6 +3366,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Kendaraan tanpa STR_GROUP_DEFAULT_SHIPS :Kapal tanpa kelompok STR_GROUP_DEFAULT_AIRCRAFTS :Pesawat tanpa kelompok + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Kelompok - Klik salah satu untuk melihat daftar kendaraan pada kelompok tersebut STR_GROUP_CREATE_TOOLTIP :{BLACK}Klik untuk membuat kelompok STR_GROUP_DELETE_TOOLTIP :{BLACK}Hapus kelompok terpilih diff --git a/src/lang/irish.txt b/src/lang/irish.txt index dcc0a5729b..483657f303 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -3330,6 +3330,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Feithiclí bót STR_GROUP_DEFAULT_SHIPS :Longa nach bhfuil i ngrúpa STR_GROUP_DEFAULT_AIRCRAFTS :Aerárthaigh nach bhfuil i ngrúpa + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grúpaí - cliceáil ar ghrúpa le gach feithicil sa ghrúpa seo a liostú STR_GROUP_CREATE_TOOLTIP :{BLACK}Cliceáil le grúpa a chruthú STR_GROUP_DELETE_TOOLTIP :{BLACK}Scrios an grúpa roghnaithe diff --git a/src/lang/italian.txt b/src/lang/italian.txt index d0232ddc6d..915c0b162d 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -3460,6 +3460,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Automezzi senza STR_GROUP_DEFAULT_SHIPS :Navi senza gruppo STR_GROUP_DEFAULT_AIRCRAFTS :Aeromobili senza gruppo + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Gruppi - fare clic su un gruppo per elencare tutti i suoi veicoli. Trascinare i gruppi per organizzarli in gerarchia. STR_GROUP_CREATE_TOOLTIP :{BLACK}Fare clic per creare un gruppo STR_GROUP_DELETE_TOOLTIP :{BLACK}Elimina il gruppo selezionato diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index bfddda4e69..011c6cd02d 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -3332,6 +3332,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :グループ化 STR_GROUP_DEFAULT_SHIPS :グループ化されていない船舶 STR_GROUP_DEFAULT_AIRCRAFTS :グループ化されていない航空機 + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}グループ - クリックするとこのグループに所属する全車両一覧を表示します。ドラック&ドロップで順序を並べ替えられます STR_GROUP_CREATE_TOOLTIP :{BLACK}新規のグループを作成します STR_GROUP_DELETE_TOOLTIP :{BLACK}選択したグループを削除します diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 7e7780f2b4..ddf59ff007 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -3438,6 +3438,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :그룹에 속 STR_GROUP_DEFAULT_SHIPS :그룹에 속하지 않은 선박 STR_GROUP_DEFAULT_AIRCRAFTS :그룹에 속하지 않은 항공기 + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}그룹 - 클릭해서 그룹에 속한 차량을 모두 나열합니다. 상하위 그룹을 바꾸려면 드래그 앤 드롭하십시오. STR_GROUP_CREATE_TOOLTIP :{BLACK}그룹 만들기 STR_GROUP_DELETE_TOOLTIP :{BLACK}선택한 그룹 삭제 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 56f05fe299..422dbedba7 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -2901,9 +2901,17 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} MMII-MMXIX Manus OpenTTD # Framerate display window +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_AI :{BLACK} IA {NUM} {STRING} ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_AI :IA {NUM} {STRING} ############ End of leave-in-this-order @@ -2929,6 +2937,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Ludi ind STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nulla indicia parabilia STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Series colans: STR_SAVELOAD_OSKTITLE :{BLACK}Inscribe nomen ludi @@ -3505,6 +3514,9 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Movere c STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Quantitas productionis: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Haec industria mox claudetur! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Postulat: {YELLOW}{STRING.acc}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Fabricat: {YELLOW}{STRING.acc}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Postulat: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING.acc}{BLACK}{3:STRING} @@ -3558,6 +3570,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Vehicula viaria STR_GROUP_DEFAULT_SHIPS :Naves sine grege STR_GROUP_DEFAULT_AIRCRAFTS :Aeroplana sine grege + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Greges - preme in gregem ut index vehiculorum huius gregis ostendeatur. Trahe poneque greges ut ordinentur. STR_GROUP_CREATE_TOOLTIP :{BLACK}Preme ut grex creatur STR_GROUP_DELETE_TOOLTIP :{BLACK}Delere gregem electam @@ -3621,8 +3634,10 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Emere Ve STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Emere Navem STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Emere Aeroplanum -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Emere reficereque vehiculum -STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Emere reficereque aeroplanum +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Emere Reficereque Vehiculum +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Emere Reficereque Vehiculum +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Emere Reficereque Navem +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Emere Reficereque Aeroplanum STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Emere vehiculum ferriviarium electum. Shift+Preme ut pretium monstretur sine emptione STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Emere vehiculum viarium electum. Shift+Preme ut pretium monstretur sine emptione diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 4c5dd5e273..9635ed054b 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -3274,6 +3274,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Negrupēti auto STR_GROUP_DEFAULT_SHIPS :Negrupēti kuģi STR_GROUP_DEFAULT_AIRCRAFTS :Negrupēti lidaparāti + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupas - klikšķināt uz grupas, lai iegūtu tās transportlīdzekļu sarakstu STR_GROUP_CREATE_TOOLTIP :{BLACK}Klikšķināt, lai izveidotu grupu STR_GROUP_DELETE_TOOLTIP :{BLACK}Dzēst izvēlēto grupu diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index e7dfead7b6..68bc4f9657 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -3549,6 +3549,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Nesugrupuoti au STR_GROUP_DEFAULT_SHIPS :Nesugrupuoti laivai STR_GROUP_DEFAULT_AIRCRAFTS :Nesugrupuoti lėktuvai + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupės - Spragtelk ant grupės jai priklausančių transporto priemonių peržiūrai STR_GROUP_CREATE_TOOLTIP :{BLACK}Spragtelk, kad sukurti grupę STR_GROUP_DELETE_TOOLTIP :{BLACK}Pašalinti pasirinktą grupę diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 4c285de396..6b024f6f5b 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -465,6 +465,7 @@ STR_TOOLBAR_SOUND_MUSIC :Sound/Musik ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Läscht Meldung/Neiegkeet STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Meldungshistorie +STR_NEWS_MENU_DELETE_ALL_MESSAGES :All Message läschen ############ range ends here ############ range for about menu starts @@ -990,6 +991,7 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Duebel STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Véierfach +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Schrëftgréisst STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Véierfach @@ -1262,6 +1264,7 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Déi Ast STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Infrastrukturënnerhalt {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Wann ugeschalt, kaschten Infrastrukturen Ennerhaltskäschten. D'Käschten wuessen iwwerproportional zu der Netzwierkgréisst, an treffen sou grouss Firmen méi wéi klenger +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Firmefaarw um Start: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Fluchhäfen lafen nie of: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Wann ugeschalt, bleift all Fluchhafentyp säit senger Aféierung bestoen @@ -1346,6 +1349,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Faarf vum Terra STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Gréng STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Donkelgréng STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Mof +STR_CONFIG_SETTING_SCROLLMODE :Usiicht-Scrollverhalen: {STRING} STR_CONFIG_SETTING_SCROLLMODE_LMB :Kaart mat der lénker Maustast bewegen STR_CONFIG_SETTING_SMOOTH_SCROLLING :Feine Scrolling: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Kontrolléiert wéi d'Haptusiicht op eng bestëmmten Positioun scrollt, wann een op déi kléng Kaart klickt oder en Befehl fir ob en spezifescht Objet ze scrollen gëtt. Wann ugeschalt, gëtt bis dohin gescrollt, wann ausgeschalt, spréngt d'Vue op den Zielobjet @@ -2696,6 +2700,7 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 D'OpenTTD team # Framerate display window +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Unzuel Gameticks déi pro Sekonn simuléiert ginn. STR_FRAMERATE_AVERAGE :{WHITE}Mëttel STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms @@ -2703,10 +2708,12 @@ STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMA STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} Biller/s STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GL_TRAINS :{BLACK} Zuchticks: STR_FRAMERATE_GL_ROADVEHS :{BLACK} Stroossegefierer Ticken: STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Linkgrafik-Verzögerung: STR_FRAMERATE_DRAWING :{BLACK}Graphikrendering: STR_FRAMERATE_VIDEO :{BLACK}Video-output: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Gamescript: ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GL_ROADVEHS :Stroossegefierer Ticken @@ -2854,6 +2861,7 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Versioun STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Min. kompatibel Versioun: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palette: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Standard (S) / 32 bpp STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Legacy (W) STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameter: {SILVER}{STRING} @@ -3001,6 +3009,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Gëff en STR_TOWN_DIRECTORY_CAPTION :{WHITE}Stied STR_TOWN_DIRECTORY_NONE :{ORANGE}- Keng - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Stad){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Stiednimm - klick op den Numm fir d'Usiicht drop ze zentréieren. Ctrl+Klick erstellt eng nei Usiicht vun der Stad STR_TOWN_POPULATION :{BLACK}Weltbevölkerung: {COMMA} @@ -3365,6 +3374,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Ongruppéiert S STR_GROUP_DEFAULT_SHIPS :Ongruppéiert Schëffer STR_GROUP_DEFAULT_AIRCRAFTS :Ongruppéiert Fligeren + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Gruppen - klick op eng Grupp fir d'Gefierer aus der Grupp ze gesinn. Per Drag and Drop d'Hierarchie änneren. STR_GROUP_CREATE_TOOLTIP :{BLACK}Klick fir eng Grupp ze maachen STR_GROUP_DELETE_TOOLTIP :{BLACK}Déi ungewielte Grupp läschen @@ -3815,6 +3825,7 @@ STR_ORDER_CONDITIONAL_AGE :Alter (Joer) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Brauch eng Revisioun STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Ëmmer STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Reschtlaafzäit (Joer) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Maximal Zouverlässegkeet STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Wéi Gefierdaten verglach solle ginn STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :ass gläich diff --git a/src/lang/malay.txt b/src/lang/malay.txt index faf57b8906..be78dc3d99 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -3031,6 +3031,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Kenderaan jalan STR_GROUP_DEFAULT_SHIPS :Kapal yang belum berkumpulan STR_GROUP_DEFAULT_AIRCRAFTS :Pesawat yang belum berkumpulan + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Kumpulan - klik sebuah kumpulan untuk menyenaraikan semua kenderaan di dalam kumpulan tersebut. Tarik dan lepaskan kumpulan untuk menyusun kumpulan mengikut heirarki STR_GROUP_CREATE_TOOLTIP :{BLACK}Klik untuk mewujudkan kumpulan STR_GROUP_DELETE_TOOLTIP :{BLACK}Padamkan kumpulan yang telah dipilih diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index dd824edef8..3baf2badd9 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -3441,6 +3441,8 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Ugrupperte kjø STR_GROUP_DEFAULT_SHIPS :Ugrupperte skip STR_GROUP_DEFAULT_AIRCRAFTS :Ugrupperte luftfartøy +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupper - Klikk på en gruppe for å se alle kjøretøy i gruppen. Dra og slipp grupper for å arrangere dem hierarkisk STR_GROUP_CREATE_TOOLTIP :{BLACK}Klikk for å opprette en gruppe STR_GROUP_DELETE_TOOLTIP :{BLACK}Fjern den valgte gruppen @@ -4478,6 +4480,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Kan ikke STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Kan ikke slette denne gruppen... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Kan ikke gi nytt navn på denne gruppen... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Kan ikke sette foreldregruppe... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... løkker i gruppehierarkiet er ikke tillatt STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Kan ikke fjerne alle kjøretøy fra denne gruppen... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Kan ikke legge til kjøretøyet i denne gruppen... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Kan ikke legge til delte kjøretøyer i gruppen... diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 787a42d7f6..4342821243 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -3249,6 +3249,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :køyretøy utan STR_GROUP_DEFAULT_SHIPS :Ugrupperte skip STR_GROUP_DEFAULT_AIRCRAFTS :Luftfartøy utan gruppe + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupper - Klikk på ei gruppe for å få ei liste over alle køyretøya i den STR_GROUP_CREATE_TOOLTIP :{BLACK}Klikk for å lage ei gruppe STR_GROUP_DELETE_TOOLTIP :{BLACK}Slett den valde gruppa diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 4ec0ada640..cd2121671b 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3775,6 +3775,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Pojazdy bez gru STR_GROUP_DEFAULT_SHIPS :Statki bez grupy STR_GROUP_DEFAULT_AIRCRAFTS :Samoloty bez grupy + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupy - kliknij na grupę, aby wyświetlić wszystkie pojazdy z grupy. Przeciągnij i upuść grupy, aby dostosować hierarchię. STR_GROUP_CREATE_TOOLTIP :{BLACK}Kliknij aby stworzyć grupę STR_GROUP_DELETE_TOOLTIP :{BLACK}Usuń zaznaczoną grupę diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index d5e5d9b643..77e1f1e91b 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1809,7 +1809,7 @@ STR_OSNAME_SUNOS :SunOS # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Abandonar jogo STR_ABANDON_GAME_QUERY :{YELLOW}Tem a certeza que deseja abandonar este jogo? -STR_ABANDON_SCENARIO_QUERY :{YELLOW}Tem a certeza que deseja abandonar este cenário ? +STR_ABANDON_SCENARIO_QUERY :{YELLOW}Tem a certeza que deseja abandonar este cenário? # Cheat window STR_CHEATS :{WHITE}Truques @@ -3438,6 +3438,8 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Veículos rodov STR_GROUP_DEFAULT_SHIPS :Barcos sem grupo STR_GROUP_DEFAULT_AIRCRAFTS :Aeronaves sem grupo +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - clique num grupo para listar todos os veículos contidos STR_GROUP_CREATE_TOOLTIP :{BLACK}Clique para criar um grupo STR_GROUP_DELETE_TOOLTIP :{BLACK}Remover o grupo seleccionado @@ -4474,6 +4476,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Impossí STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Impossível remover este grupo... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Impossível renomear o grupo... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Não é possível definir grupo parente... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... não são permitidos ciclos na hierarquia de grupos STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Não é possível remover todos os veículos deste grupo... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Impossível adicionar o veículo a este grupo... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Impossível adicionar veículos com ordens partilhadas ao grupo... diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 1aabd80fa4..a4149798ad 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -3314,6 +3314,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Vehicule rutier STR_GROUP_DEFAULT_SHIPS :Nave negrupate STR_GROUP_DEFAULT_AIRCRAFTS :Aeronave negrupate + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupuri - click pe un grup pentru lista completă a vehiculelor acestuia STR_GROUP_CREATE_TOOLTIP :{BLACK}Click pentru a creea un grup STR_GROUP_DELETE_TOOLTIP :{BLACK}Şterge grupul selectat diff --git a/src/lang/russian.txt b/src/lang/russian.txt index dae1be714b..c81f258a08 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -3617,6 +3617,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Без груп STR_GROUP_DEFAULT_SHIPS :Без группы STR_GROUP_DEFAULT_AIRCRAFTS :Без группы + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Щёлкните по имени группы для отображения списка транспорта. Можно создавать вложенные группы с помощью перетаскивания. STR_GROUP_CREATE_TOOLTIP :{BLACK}Создать группу STR_GROUP_DELETE_TOOLTIP :{BLACK}Удалить выбранную группу diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 57c172f64e..36cac2be76 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -3544,6 +3544,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Negrupisana dru STR_GROUP_DEFAULT_SHIPS :Negrupisani brodovi STR_GROUP_DEFAULT_AIRCRAFTS :Negrupisane letilice + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupe - klikom na grupu se prikazuje spisak vozila u grupi. Hijerarhija grupa se uređuje metodom "prevuci i pusti" STR_GROUP_CREATE_TOOLTIP :{BLACK}Klikom se pravi nova grupa STR_GROUP_DELETE_TOOLTIP :{BLACK}Briše se označena grupa diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 7235f8e55d..3e2767e48b 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -3357,6 +3357,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :未分组汽车 STR_GROUP_DEFAULT_SHIPS :未分组船只 STR_GROUP_DEFAULT_AIRCRAFTS :未分组飞机 + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}组 - 点击一个组别以显示所有隶属此组的车辆。拖曳组别标签以重新排列组别的次序和层级。 STR_GROUP_CREATE_TOOLTIP :{BLACK}创建分组 STR_GROUP_DELETE_TOOLTIP :{BLACK}删除分组 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 0540846b61..47005d904b 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -3398,6 +3398,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Nezaradené voz STR_GROUP_DEFAULT_SHIPS :Nezaradené lode STR_GROUP_DEFAULT_AIRCRAFTS :Nezaradené lietadlá + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Skupiny - klikni na skupinu pre zobrazenie všetkých vozidiel skupiny. Ťahaj a Pusti pre usporiadanie hierarchiu v skupine STR_GROUP_CREATE_TOOLTIP :{BLACK}Klikni pre vytvorenie skupiny STR_GROUP_DELETE_TOOLTIP :{BLACK}Zrušiť vybranú skupinu diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index dc98d79e62..7a86e2bc20 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -3484,6 +3484,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Cestna vozila b STR_GROUP_DEFAULT_SHIPS :Ladje brez skupine STR_GROUP_DEFAULT_AIRCRAFTS :Letala brez skupine + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Skupine - Klikni na skupino za seznam vseh vozil v skupini STR_GROUP_CREATE_TOOLTIP :{BLACK}Klikni za ustvarit skupino STR_GROUP_DELETE_TOOLTIP :{BLACK}Izbriši izbrano skupino diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index cb1b91d1b4..82918400a8 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -3384,6 +3384,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Vehículos de c STR_GROUP_DEFAULT_SHIPS :Barcos sin agrupar STR_GROUP_DEFAULT_AIRCRAFTS :Aeronaves sin agrupar + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos - Click en un grupo para ver la lista de sus vehículos. Es posible arrastrar grupos para modificar su jerarquía. STR_GROUP_CREATE_TOOLTIP :{BLACK}Click para crear un grupo STR_GROUP_DELETE_TOOLTIP :{BLACK}Borrar el grupo seleccionado diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index bc0ec7d5bb..13efafbf8c 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -3431,6 +3431,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Vehículos de c STR_GROUP_DEFAULT_SHIPS :Barcos sin agrupar STR_GROUP_DEFAULT_AIRCRAFTS :Aeronaves sin agrupar + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupos: Clic en un grupo para ver los vehículos incluidos. Arrastrar y soltar para reorganizar los grupos. STR_GROUP_CREATE_TOOLTIP :{BLACK}Clic para crear un grupo STR_GROUP_DELETE_TOOLTIP :{BLACK}Eliminar el grupo seleccionado diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 5a18425d3f..0cb8ef4974 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -3415,6 +3415,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Ogrupperade vä STR_GROUP_DEFAULT_SHIPS :Ogrupperade skepp STR_GROUP_DEFAULT_AIRCRAFTS :Ogrupperade flygmaskiner + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupper - klicka på en grupp för att lista alla fordon i gruppen. Dra och släpp grupper för att ordna hierarkin. STR_GROUP_CREATE_TOOLTIP :{BLACK}Klicka för att skapa en grupp STR_GROUP_DELETE_TOOLTIP :{BLACK}Ta bort vald grupp diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index da1a772df0..ae2767d7f7 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -2952,6 +2952,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :குழுவ STR_GROUP_DEFAULT_SHIPS :குழுவில் இல்லாத கப்பல்கள் STR_GROUP_DEFAULT_AIRCRAFTS :குழுவில் இல்லாத விமானம் + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}குழுக்கள் - குழுவில் உள்ள அனைத்து வாகனங்களினை பார்க்க அக்குழுவினை சொடுக்கவும் STR_GROUP_CREATE_TOOLTIP :{BLACK}ஓர் குழுவினை உருவாக்க சொடுக்கவும் STR_GROUP_DELETE_TOOLTIP :{BLACK}தேர்ந்தெடுக்கப்பட்ட குழுவின் பெயரினை நீக்கவும் diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 78c26c65b0..209a2db326 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -3262,6 +3262,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :พาหนะ STR_GROUP_DEFAULT_SHIPS :พาหนะที่ไม่ได้จัดกลุ่ม STR_GROUP_DEFAULT_AIRCRAFTS :พาหนะที่ไม่ได้จัดกลุ่ม + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}กลุ่ม - คลิ๊กที่กลุ่มเพื่อดูรายการยานพาหนะในกลุ่ม STR_GROUP_CREATE_TOOLTIP :{BLACK}กดเพื่อสร้างกลุ่ม STR_GROUP_DELETE_TOOLTIP :{BLACK}ลบกลุ่มที่เลือก diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index b3f1b63f51..79da3fe2fc 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -3330,6 +3330,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :未分組的車 STR_GROUP_DEFAULT_SHIPS :未分組的船舶 STR_GROUP_DEFAULT_AIRCRAFTS :未分組的飛機 + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}群組 - 點選群組以顯示其中的運輸工具清單。拖曳群組標籤以排列群組的次序和層級。 STR_GROUP_CREATE_TOOLTIP :{BLACK}點選可建立群組 STR_GROUP_DELETE_TOOLTIP :{BLACK}移除所選群組 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 270a30a91c..a9d1002e0f 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -3424,6 +3424,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Gruplanmamış STR_GROUP_DEFAULT_SHIPS :Gruplanmamış gemiler STR_GROUP_DEFAULT_AIRCRAFTS :Gruplanmamış uçaklar + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Gruplar - gruba ait araçları listelemek için grubun üzerine tıklayın. Hiyerarşiyi düzenlemek için grupları sürükleyip bırakın. STR_GROUP_CREATE_TOOLTIP :{BLACK}Grup oluşturmak için tıklayın STR_GROUP_DELETE_TOOLTIP :{BLACK}Seçili grubu sil diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 452c0f9783..54c3e01b1b 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -3566,6 +3566,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Незгруп STR_GROUP_DEFAULT_SHIPS :Незгруповані кораблі STR_GROUP_DEFAULT_AIRCRAFTS :Незгруповані літаки + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Групи - клацніть мишою на групі, щоб побачити список транспорту цієї групи. Перетягуйте групи, щоб змінити ієрархію. STR_GROUP_CREATE_TOOLTIP :{BLACK}Клацніть мишою, щоб створити групу STR_GROUP_DELETE_TOOLTIP :{BLACK}Стерти вибрану групу diff --git a/src/lang/unfinished/chuvash.txt b/src/lang/unfinished/chuvash.txt index e7b0adbda5..2e3b4fff56 100644 --- a/src/lang/unfinished/chuvash.txt +++ b/src/lang/unfinished/chuvash.txt @@ -1134,6 +1134,7 @@ STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ҫу + # Build vehicle window diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index 8b02042810..d9ecf58120 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -3072,6 +3072,7 @@ STR_GROUP_ALL_AIRCRAFTS :Alle fleantugen STR_GROUP_DEFAULT_SHIPS :Net groepearre skepen + STR_GROUP_CREATE_TOOLTIP :{BLACK}Klik om in groep oan te meitsje STR_GROUP_DELETE_TOOLTIP :{BLACK}Smit de selektearre groep fuort STR_GROUP_RENAME_TOOLTIP :{BLACK}Feroarje de namme fan de selektearre groep diff --git a/src/lang/unfinished/ido.txt b/src/lang/unfinished/ido.txt index f850fc769a..f964e28eab 100644 --- a/src/lang/unfinished/ido.txt +++ b/src/lang/unfinished/ido.txt @@ -972,6 +972,7 @@ STR_GROUP_DEFAULT_AIRCRAFTS :Negrupigita aer + # Build vehicle window diff --git a/src/lang/unfinished/macedonian.txt b/src/lang/unfinished/macedonian.txt index b927c74a82..3039736660 100644 --- a/src/lang/unfinished/macedonian.txt +++ b/src/lang/unfinished/macedonian.txt @@ -1448,6 +1448,7 @@ STR_VEHICLE_LIST_SEND_SHIP_TO_DEPOT :Испрати + # Build vehicle window STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Шински возила diff --git a/src/lang/unfinished/maltese.txt b/src/lang/unfinished/maltese.txt index f66ee02a6d..343ab042a8 100644 --- a/src/lang/unfinished/maltese.txt +++ b/src/lang/unfinished/maltese.txt @@ -844,6 +844,7 @@ STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURREN + # Build vehicle window diff --git a/src/lang/unfinished/marathi.txt b/src/lang/unfinished/marathi.txt index a79303bcbf..fdd7d99191 100644 --- a/src/lang/unfinished/marathi.txt +++ b/src/lang/unfinished/marathi.txt @@ -1304,6 +1304,7 @@ STR_GROUP_ALL_AIRCRAFTS :सर्व + STR_GROUP_REMOVE_ALL_VEHICLES :सगळे वाहने काढा diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index 4d54b92cfd..858154e392 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -2938,6 +2938,7 @@ STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :فرستادن + # Build vehicle window STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :قطار جدید STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :قطار جدید مونوریل diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index 25bc51f680..e0a900abad 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -2337,6 +2337,7 @@ STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}فہرس # Group window + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}گروپ ۔ اس گروپ ک تمام گاڑیاں دیکھنے کے لیے اسے دبایں۔ پکڑ کے اوپر نیچے بھی کر سکتے ہیں۔ diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 652ae6ef3e..ec75b457aa 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -3396,6 +3396,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Xe ôtô chưa STR_GROUP_DEFAULT_SHIPS :Tày thuỷ chưa lập nhóm STR_GROUP_DEFAULT_AIRCRAFTS :Máy bay chưa lập nhóm + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Nhóm - chọn nhóm để hiển thị các phương tiện thuộc nhóm. Kéo thả nhóm để sắp xếp lại danh sách. STR_GROUP_CREATE_TOOLTIP :{BLACK}Ấn vào để tạo nhóm STR_GROUP_DELETE_TOOLTIP :{BLACK}Xoá nhóm đã chọn diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 172f11f7a3..c36e45cf90 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -3337,6 +3337,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Cerbydau ffordd STR_GROUP_DEFAULT_SHIPS :Llongau heb eu grwpio STR_GROUP_DEFAULT_AIRCRAFTS :Awyrenau heb eu grwpio + STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grŵp - cliciwch ar grŵp i restru pob cerbyd yn y grŵp hwn. Gallwch glico a llusgo grwpiau i drefnu'r hierarchaeth. STR_GROUP_CREATE_TOOLTIP :{BLACK}Cliciwch i greu grŵp STR_GROUP_DELETE_TOOLTIP :{BLACK}Dileu'r grŵp a ddewiswyd From 66dd7c3879123bb99b712375b66b577f81d53a96 Mon Sep 17 00:00:00 2001 From: glx22 Date: Thu, 28 Mar 2019 00:09:33 +0100 Subject: [PATCH 582/622] Fix: MSVC warnings (#7423) --- src/autoreplace_gui.cpp | 6 +++--- src/bridge_gui.cpp | 2 +- src/build_vehicle_gui.cpp | 4 ++-- src/company_gui.cpp | 4 ++-- src/core/math_func.hpp | 8 ++++---- src/core/sort_func.hpp | 4 ++-- src/depot_gui.cpp | 10 +++++----- src/engine_gui.cpp | 2 +- src/fios.cpp | 2 +- src/fios.h | 10 +++++----- src/fios_gui.cpp | 8 ++++---- src/gfx.cpp | 2 +- src/gfx_layout.cpp | 2 +- src/group_gui.cpp | 10 +++++----- src/industry_gui.cpp | 2 +- src/linkgraph/linkgraph.h | 2 +- src/music/win32_m.cpp | 6 +++--- src/network/network_content.cpp | 8 ++++---- src/network/network_content.h | 2 +- src/network/network_content_gui.cpp | 6 +++--- src/network/network_gui.cpp | 8 ++++---- src/newgrf.cpp | 4 ++-- src/newgrf_debug_gui.cpp | 4 ++-- src/newgrf_gui.cpp | 12 ++++++------ src/newgrf_sound.cpp | 2 +- src/os/windows/string_uniscribe.cpp | 2 +- src/saveload/game_sl.cpp | 2 +- src/script/api/script_road.cpp | 6 +++--- src/script/squirrel_helper_type.hpp | 2 +- src/settings_gui.cpp | 2 +- src/signs_gui.cpp | 4 ++-- src/station_gui.cpp | 6 +++--- src/strgen/strgen_base.cpp | 6 +++--- src/textfile_gui.cpp | 2 +- src/timetable_cmd.cpp | 2 +- src/town_gui.cpp | 2 +- src/vehicle_gui.cpp | 4 ++-- src/viewport.cpp | 4 ++-- src/widgets/dropdown.cpp | 2 +- 39 files changed, 88 insertions(+), 88 deletions(-) diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index 133e9fb382..78c2fdc31c 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -160,7 +160,7 @@ class ReplaceVehicleWindow : public Window { if (this->engines[0].NeedRebuild()) { /* We need to rebuild the left engines list */ this->GenerateReplaceVehList(true); - this->vscroll[0]->SetCount(this->engines[0].size()); + this->vscroll[0]->SetCount((uint)this->engines[0].size()); if (this->reset_sel_engine && this->sel_engine[0] == INVALID_ENGINE && this->engines[0].size() != 0) { this->sel_engine[0] = this->engines[0][0]; } @@ -180,7 +180,7 @@ class ReplaceVehicleWindow : public Window { } /* Regenerate the list on the right. Note: This resets sel_engine[1] to INVALID_ENGINE, if it is no longer available. */ this->GenerateReplaceVehList(false); - this->vscroll[1]->SetCount(this->engines[1].size()); + this->vscroll[1]->SetCount((uint)this->engines[1].size()); if (this->reset_sel_engine && this->sel_engine[1] != INVALID_ENGINE) { int position = 0; for (EngineID &eid : this->engines[1]) { @@ -384,7 +384,7 @@ public: case WID_RV_RIGHT_MATRIX: { int side = (widget == WID_RV_LEFT_MATRIX) ? 0 : 1; EngineID start = this->vscroll[side]->GetPosition(); // what is the offset for the start (scrolling) - EngineID end = min(this->vscroll[side]->GetCapacity() + start, this->engines[side].size()); + EngineID end = min(this->vscroll[side]->GetCapacity() + start, (uint)this->engines[side].size()); /* Do the actual drawing */ DrawEngineList((VehicleType)this->window_number, r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index 94b709c63c..f6f47276c0 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -153,7 +153,7 @@ public: this->bridges->NeedResort(); this->SortBridgeList(); - this->vscroll->SetCount(bl->size()); + this->vscroll->SetCount((uint)bl->size()); } ~BuildBridgeWindow() diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 33cabe98ae..b671efde74 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1529,7 +1529,7 @@ struct BuildVehicleWindow : Window { { switch (widget) { case WID_BV_LIST: - DrawEngineList(this->vehicle_type, r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, &this->eng_list, this->vscroll->GetPosition(), min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->eng_list.size()), this->sel_engine, false, DEFAULT_GROUP); + DrawEngineList(this->vehicle_type, r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, r.top + WD_FRAMERECT_TOP, &this->eng_list, this->vscroll->GetPosition(), min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), (uint)this->eng_list.size()), this->sel_engine, false, DEFAULT_GROUP); break; case WID_BV_SORT_ASCENDING_DESCENDING: @@ -1541,7 +1541,7 @@ struct BuildVehicleWindow : Window { void OnPaint() override { this->GenerateBuildList(); - this->vscroll->SetCount(this->eng_list.size()); + this->vscroll->SetCount((uint)this->eng_list.size()); this->SetWidgetsDisabledState(this->sel_engine == INVALID_ENGINE, WID_BV_SHOW_HIDE, WID_BV_BUILD, WID_BV_RENAME, WIDGET_LIST_END); diff --git a/src/company_gui.cpp b/src/company_gui.cpp index e5dbc86a42..a3f8a24b6c 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -686,7 +686,7 @@ private: } } } else { - this->rows = this->groups.size(); + this->rows = (uint)this->groups.size(); } this->vscroll->SetCount(this->rows); @@ -902,7 +902,7 @@ public: } } } else { - uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->groups.size()); + uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), (uint)this->groups.size()); for (uint i = this->vscroll->GetPosition(); i < max; ++i) { const Group *g = this->groups[i]; SetDParam(0, g->index); diff --git a/src/core/math_func.hpp b/src/core/math_func.hpp index 4a19033f45..0b51d6bbff 100644 --- a/src/core/math_func.hpp +++ b/src/core/math_func.hpp @@ -247,9 +247,9 @@ static inline T Delta(const T a, const T b) * @return True if the value is in the interval, false else. */ template -static inline bool IsInsideBS(const T x, const uint base, const uint size) +static inline bool IsInsideBS(const T x, const size_t base, const size_t size) { - return (uint)(x - base) < size; + return (size_t)(x - base) < size; } /** @@ -263,9 +263,9 @@ static inline bool IsInsideBS(const T x, const uint base, const uint size) * @see IsInsideBS() */ template -static inline bool IsInsideMM(const T x, const uint min, const uint max) +static inline bool IsInsideMM(const T x, const size_t min, const size_t max) { - return (uint)(x - min) < (max - min); + return (size_t)(x - min) < (max - min); } /** diff --git a/src/core/sort_func.hpp b/src/core/sort_func.hpp index 470a0ccf4d..f3ac73a666 100644 --- a/src/core/sort_func.hpp +++ b/src/core/sort_func.hpp @@ -25,7 +25,7 @@ * @param desc Sort descending. */ template -static inline void QSortT(T *base, uint num, int (CDECL *comparator)(const T*, const T*), bool desc = false) +static inline void QSortT(T *base, size_t num, int (CDECL *comparator)(const T*, const T*), bool desc = false) { if (num < 2) return; @@ -49,7 +49,7 @@ static inline void QSortT(T *base, uint num, int (CDECL *comparator)(const T*, c * @param desc Sort descending. */ template -static inline void GSortT(T *base, uint num, int (CDECL *comparator)(const T*, const T*), bool desc = false) +static inline void GSortT(T *base, size_t num, int (CDECL *comparator)(const T*, const T*), bool desc = false) { if (num < 2) return; diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index 2b5879116f..ffab68536e 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -398,7 +398,7 @@ struct DepotWindow : Window { uint16 rows_in_display = wid->current_y / wid->resize_y; uint16 num = this->vscroll->GetPosition() * this->num_columns; - int maxval = min(this->vehicle_list.size(), num + (rows_in_display * this->num_columns)); + int maxval = min((uint)this->vehicle_list.size(), num + (rows_in_display * this->num_columns)); int y; for (y = r.top + 1; num < maxval; y += this->resize.step_height) { // Draw the rows for (byte i = 0; i < this->num_columns && num < maxval; i++, num++) { @@ -413,7 +413,7 @@ struct DepotWindow : Window { } } - maxval = min(this->vehicle_list.size() + this->wagon_list.size(), (this->vscroll->GetPosition() * this->num_columns) + (rows_in_display * this->num_columns)); + maxval = min((uint)this->vehicle_list.size() + (uint)this->wagon_list.size(), (this->vscroll->GetPosition() * this->num_columns) + (rows_in_display * this->num_columns)); /* Draw the train wagons without an engine in front. */ for (; num < maxval; num++, y += this->resize.step_height) { @@ -483,7 +483,7 @@ struct DepotWindow : Window { /* Skip vehicles that are scrolled off the list */ if (this->type == VEH_TRAIN) x += this->hscroll->GetPosition(); } else { - pos -= this->vehicle_list.size(); + pos -= (uint)this->vehicle_list.size(); *veh = this->wagon_list[pos]; /* free wagons don't have an initial loco. */ x -= ScaleGUITrad(VEHICLEINFO_FULL_VEHICLE_WIDTH); @@ -734,11 +734,11 @@ struct DepotWindow : Window { max_width = max(max_width, width); } /* Always have 1 empty row, so people can change the setting of the train */ - this->vscroll->SetCount(this->vehicle_list.size() + this->wagon_list.size() + 1); + this->vscroll->SetCount((uint)this->vehicle_list.size() + (uint)this->wagon_list.size() + 1); /* Always make it longer than the longest train, so you can attach vehicles at the end, and also see the next vertical tile separator line */ this->hscroll->SetCount(max_width + ScaleGUITrad(2 * VEHICLEINFO_FULL_VEHICLE_WIDTH + 1)); } else { - this->vscroll->SetCount(CeilDiv(this->vehicle_list.size(), this->num_columns)); + this->vscroll->SetCount(CeilDiv((uint)this->vehicle_list.size(), this->num_columns)); } /* Setup disabled buttons. */ diff --git a/src/engine_gui.cpp b/src/engine_gui.cpp index 2c2440baf9..4e9dc30d96 100644 --- a/src/engine_gui.cpp +++ b/src/engine_gui.cpp @@ -325,7 +325,7 @@ void DrawVehicleEngine(int left, int right, int preferred_x, int y, EngineID eng */ void EngList_Sort(GUIEngineList *el, EngList_SortTypeFunction compare) { - uint size = el->size(); + size_t size = el->size(); /* out-of-bounds access at the next line for size == 0 (even with operator[] at some systems) * generally, do not sort if there are less than 2 items */ if (size < 2) return; diff --git a/src/fios.cpp b/src/fios.cpp index cb157492e9..54ad54b112 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -342,7 +342,7 @@ static void FiosGetFileList(SaveLoadOperation fop, fios_getlist_callback_proc *c struct dirent *dirent; DIR *dir; FiosItem *fios; - int sort_start; + size_t sort_start; char d_name[sizeof(fios->name)]; file_list.Clear(); diff --git a/src/fios.h b/src/fios.h index 52d85ad9b5..6ae0550d11 100644 --- a/src/fios.h +++ b/src/fios.h @@ -128,7 +128,7 @@ public: * Get the number of files in the list. * @return The number of files stored in the list. */ - inline uint Length() const + inline size_t Length() const { return this->files.size(); } @@ -155,7 +155,7 @@ public: * Get a pointer to the indicated file information. File information must exist. * @return Address of the indicated existing file information. */ - inline const FiosItem *Get(uint index) const + inline const FiosItem *Get(size_t index) const { return this->files.data() + index; } @@ -164,12 +164,12 @@ public: * Get a pointer to the indicated file information. File information must exist. * @return Address of the indicated existing file information. */ - inline FiosItem *Get(uint index) + inline FiosItem *Get(size_t index) { return this->files.data() + index; } - inline const FiosItem &operator[](uint index) const + inline const FiosItem &operator[](size_t index) const { return this->files[index]; } @@ -178,7 +178,7 @@ public: * Get a reference to the indicated file information. File information must exist. * @return The requested file information. */ - inline FiosItem &operator[](uint index) + inline FiosItem &operator[](size_t index) { return this->files[index]; } diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index b5bcee5e8c..7a194054f5 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -244,8 +244,8 @@ static const TextColour _fios_colours[] = { */ static void SortSaveGameList(FileList &file_list) { - uint sort_start = 0; - uint sort_end = 0; + size_t sort_start = 0; + size_t sort_end = 0; /* Directories are always above the files (FIOS_TYPE_DIR) * Drives (A:\ (windows only) are always under the files (FIOS_TYPE_DRIVE) @@ -260,7 +260,7 @@ static void SortSaveGameList(FileList &file_list) } } - uint s_amount = file_list.Length() - sort_start - sort_end; + size_t s_amount = file_list.Length() - sort_start - sort_end; QSortT(file_list.Get(sort_start), s_amount, CompareFiosItems); } @@ -782,7 +782,7 @@ public: _fios_path_changed = true; this->fios_items.BuildFileList(this->abstract_filetype, this->fop); - this->vscroll->SetCount(this->fios_items.Length()); + this->vscroll->SetCount((uint)this->fios_items.Length()); this->selected = NULL; _load_check_data.Clear(); diff --git a/src/gfx.cpp b/src/gfx.cpp index df3e5ccb6b..72d3fcd67b 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -574,7 +574,7 @@ int GetStringLineCount(StringID str, int maxw) GetString(buffer, str, lastof(buffer)); Layouter layout(buffer, maxw); - return layout.size(); + return (uint)layout.size(); } /** diff --git a/src/gfx_layout.cpp b/src/gfx_layout.cpp index f09b87efa9..124f1218a2 100644 --- a/src/gfx_layout.cpp +++ b/src/gfx_layout.cpp @@ -449,7 +449,7 @@ int FallbackParagraphLayout::FallbackLine::GetWidth() const */ int FallbackParagraphLayout::FallbackLine::CountRuns() const { - return this->size(); + return (uint)this->size(); } /** diff --git a/src/group_gui.cpp b/src/group_gui.cpp index cc545ad8ff..ecc95064fa 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -514,8 +514,8 @@ public: this->BuildGroupList(this->owner); - this->group_sb->SetCount(this->groups.size()); - this->vscroll->SetCount(this->vehicles.size()); + this->group_sb->SetCount((uint)this->groups.size()); + this->vscroll->SetCount((uint)this->vehicles.size()); /* The drop down menu is out, *but* it may not be used, retract it. */ if (this->vehicles.size() == 0 && this->IsWidgetLowered(WID_GL_MANAGE_VEHICLES_DROPDOWN)) { @@ -575,7 +575,7 @@ public: Money this_year = 0; Money last_year = 0; uint32 occupancy = 0; - uint32 vehicle_count = this->vehicles.size(); + size_t vehicle_count = this->vehicles.size(); for (uint i = 0; i < vehicle_count; i++) { const Vehicle *v = this->vehicles[i]; @@ -611,7 +611,7 @@ public: case WID_GL_LIST_GROUP: { int y1 = r.top + WD_FRAMERECT_TOP; - int max = min(this->group_sb->GetPosition() + this->group_sb->GetCapacity(), this->groups.size()); + int max = min(this->group_sb->GetPosition() + this->group_sb->GetCapacity(), (uint)this->groups.size()); for (int i = this->group_sb->GetPosition(); i < max; ++i) { const Group *g = this->groups[i]; @@ -635,7 +635,7 @@ public: if (this->vli.index != ALL_GROUP) { /* Mark vehicles which are in sub-groups */ int y = r.top; - uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->vehicles.size()); + uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), (uint)this->vehicles.size()); for (uint i = this->vscroll->GetPosition(); i < max; ++i) { const Vehicle *v = this->vehicles[i]; if (v->group_id != this->vli.index) { diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index ce8ac7fa30..eff0a5f73d 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1211,7 +1211,7 @@ protected: this->industries.shrink_to_fit(); this->industries.RebuildDone(); - this->vscroll->SetCount(this->industries.size()); // Update scrollbar as well. + this->vscroll->SetCount((uint)this->industries.size()); // Update scrollbar as well. } if (!this->industries.Sort()) return; diff --git a/src/linkgraph/linkgraph.h b/src/linkgraph/linkgraph.h index 3283eb9bf2..7f2561e754 100644 --- a/src/linkgraph/linkgraph.h +++ b/src/linkgraph/linkgraph.h @@ -496,7 +496,7 @@ public: * Get the current size of the component. * @return Size. */ - inline uint Size() const { return this->nodes.size(); } + inline uint Size() const { return (uint)this->nodes.size(); } /** * Get date of last compression. diff --git a/src/music/win32_m.cpp b/src/music/win32_m.cpp index 18a3bce3e7..bdba202f2e 100644 --- a/src/music/win32_m.cpp +++ b/src/music/win32_m.cpp @@ -42,7 +42,7 @@ static struct { MidiFile current_file; ///< file currently being played from PlaybackSegment current_segment; ///< segment info for current playback - DWORD playback_start_time; ///< timestamp current file began playback + size_t playback_start_time; ///< timestamp current file began playback size_t current_block; ///< next block index to send MidiFile next_file; ///< upcoming file to play PlaybackSegment next_segment; ///< segment info for upcoming file @@ -184,7 +184,7 @@ void CALLBACK TimerCallback(UINT uTimerID, UINT, DWORD_PTR dwUser, DWORD_PTR, DW /* find first block after start time and pretend playback started earlier * this is to allow all blocks prior to the actual start to still affect playback, * as they may contain important controller and program changes */ - uint preload_bytes = 0; + size_t preload_bytes = 0; for (size_t bl = 0; bl < _midi.current_file.blocks.size(); bl++) { MidiFile::DataBlock &block = _midi.current_file.blocks[bl]; preload_bytes += block.data.size(); @@ -210,7 +210,7 @@ void CALLBACK TimerCallback(UINT uTimerID, UINT, DWORD_PTR dwUser, DWORD_PTR, DW /* play pending blocks */ DWORD current_time = timeGetTime(); - DWORD playback_time = current_time - _midi.playback_start_time; + size_t playback_time = current_time - _midi.playback_start_time; while (_midi.current_block < _midi.current_file.blocks.size()) { MidiFile::DataBlock &block = _midi.current_file.blocks[_midi.current_block]; diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 003ffdb8ba..19235c8c72 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -250,7 +250,7 @@ void ClientNetworkContentSocketHandler::RequestContentList(ContentVector *cv, bo (sizeof(uint8) + sizeof(uint32) + (send_md5sum ? /*sizeof(ContentInfo::md5sum)*/16 : 0))); Packet *p = new Packet(send_md5sum ? PACKET_CONTENT_CLIENT_INFO_EXTID_MD5 : PACKET_CONTENT_CLIENT_INFO_EXTID); - p->Send_uint8(cv->size()); + p->Send_uint8((uint8)cv->size()); for (const ContentInfo *ci : *cv) { p->Send_uint8((byte)ci->type); @@ -299,7 +299,7 @@ void ClientNetworkContentSocketHandler::DownloadSelectedContent(uint &files, uin bytes += ci->filesize; } - files = content.size(); + files = (uint)content.size(); /* If there's nothing to download, do nothing. */ if (files == 0) return; @@ -317,7 +317,7 @@ void ClientNetworkContentSocketHandler::DownloadSelectedContent(uint &files, uin */ void ClientNetworkContentSocketHandler::DownloadSelectedContentHTTP(const ContentIDList &content) { - uint count = content.size(); + uint count = (uint)content.size(); /* Allocate memory for the whole request. * Requests are "id\nid\n..." (as strings), so assume the maximum ID, @@ -345,7 +345,7 @@ void ClientNetworkContentSocketHandler::DownloadSelectedContentHTTP(const Conten */ void ClientNetworkContentSocketHandler::DownloadSelectedContentFallback(const ContentIDList &content) { - uint count = content.size(); + uint count = (uint)content.size(); const ContentID *content_ids = content.data(); this->Connect(); diff --git a/src/network/network_content.h b/src/network/network_content.h index 29a25f2597..fb81925d20 100644 --- a/src/network/network_content.h +++ b/src/network/network_content.h @@ -129,7 +129,7 @@ public: void CheckDependencyState(ContentInfo *ci); /** Get the number of content items we know locally. */ - uint Length() const { return this->infos.size(); } + uint Length() const { return (uint)this->infos.size(); } /** Get the begin of the content inf iterator. */ ConstContentIterator Begin() const { return this->infos.data(); } /** Get the nth position of the content inf iterator. */ diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 09168185ac..40f1966e4e 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -400,7 +400,7 @@ class NetworkContentListWindow : public Window, ContentCallback { this->content.RebuildDone(); this->SortContentList(); - this->vscroll->SetCount(this->content.size()); // Update the scrollbar + this->vscroll->SetCount((int)this->content.size()); // Update the scrollbar this->ScrollToSelected(); } @@ -813,7 +813,7 @@ public: case WID_NCL_NAME: if (this->content.SortType() == widget - WID_NCL_CHECKBOX) { this->content.ToggleSortOrder(); - if (this->content.size() > 0) this->list_pos = this->content.size() - this->list_pos - 1; + if (this->content.size() > 0) this->list_pos = (int)this->content.size() - this->list_pos - 1; } else { this->content.SetSortType(widget - WID_NCL_CHECKBOX); this->content.ForceResort(); @@ -888,7 +888,7 @@ public: break; case WKC_END: /* jump to end */ - this->list_pos = this->content.size() - 1; + this->list_pos = (int)this->content.size() - 1; break; case WKC_SPACE: diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index b35e915286..0fd707676b 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -269,7 +269,7 @@ protected: this->servers.shrink_to_fit(); this->servers.RebuildDone(); - this->vscroll->SetCount(this->servers.size()); + this->vscroll->SetCount((int)this->servers.size()); /* Sort the list of network games as requested. */ this->servers.Sort(); @@ -710,7 +710,7 @@ public: case WID_NG_INFO: // Connectivity (green dot) if (this->servers.SortType() == widget - WID_NG_NAME) { this->servers.ToggleSortOrder(); - if (this->list_pos != SLP_INVALID) this->list_pos = this->servers.size() - this->list_pos - 1; + if (this->list_pos != SLP_INVALID) this->list_pos = (ServerListPosition)this->servers.size() - this->list_pos - 1; } else { this->servers.SetSortType(widget - WID_NG_NAME); this->servers.ForceResort(); @@ -847,7 +847,7 @@ public: break; case WKC_END: /* jump to end */ - this->list_pos = this->servers.size() - 1; + this->list_pos = (ServerListPosition)this->servers.size() - 1; break; default: NOT_REACHED(); } @@ -1787,7 +1787,7 @@ struct NetworkClientListPopupWindow : Window { d = maxdim(GetStringBoundingBox(action.name), d); } - d.height *= this->actions.size(); + d.height *= (uint)this->actions.size(); d.width += WD_FRAMERECT_LEFT + WD_FRAMERECT_RIGHT; d.height += WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM; *size = d; diff --git a/src/newgrf.cpp b/src/newgrf.cpp index e45f34b76e..0a526e50b2 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -4822,7 +4822,7 @@ static void NewSpriteGroup(ByteReader *buf) /* Continue reading var adjusts while bit 5 is set. */ } while (HasBit(varadjust, 5)); - group->num_adjusts = adjusts.size(); + group->num_adjusts = (uint)adjusts.size(); group->adjusts = MallocT(group->num_adjusts); MemCpyT(group->adjusts, adjusts.data(), group->num_adjusts); @@ -9202,7 +9202,7 @@ static void FinalisePriceBaseMultipliers() static const uint32 override_features = (1 << GSF_TRAINS) | (1 << GSF_ROADVEHICLES) | (1 << GSF_SHIPS) | (1 << GSF_AIRCRAFT); /* Evaluate grf overrides */ - int num_grfs = _grf_files.size(); + int num_grfs = (uint)_grf_files.size(); int *grf_overrides = AllocaM(int, num_grfs); for (int i = 0; i < num_grfs; i++) { grf_overrides[i] = -1; diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index 2ea9a6d88d..69eaa4afad 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -895,7 +895,7 @@ struct SpriteAlignerWindow : Window { int step_size = nwid->resize_y; std::vector &list = _newgrf_debug_sprite_picker.sprites; - int max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), list.size()); + int max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), (uint)list.size()); int y = r.top + WD_FRAMERECT_TOP; for (int i = this->vscroll->GetPosition(); i < max; i++) { @@ -1015,7 +1015,7 @@ struct SpriteAlignerWindow : Window { if (data == 1) { /* Sprite picker finished */ this->RaiseWidget(WID_SA_PICKER); - this->vscroll->SetCount(_newgrf_debug_sprite_picker.sprites.size()); + this->vscroll->SetCount((uint)_newgrf_debug_sprite_picker.sprites.size()); } } diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index 1473f18779..bd5d07a86a 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -882,7 +882,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { int offset_y = (step_height - FONT_HEIGHT_NORMAL) / 2; uint y = r.top + WD_FRAMERECT_TOP; uint min_index = this->vscroll2->GetPosition(); - uint max_index = min(min_index + this->vscroll2->GetCapacity(), this->avails.size()); + uint max_index = min(min_index + this->vscroll2->GetCapacity(), (uint)this->avails.size()); for (uint i = min_index; i < max_index; i++) { const GRFConfig *c = this->avails[i]; @@ -1328,7 +1328,7 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { case WKC_END: /* jump to end */ - this->avail_pos = this->avails.size() - 1; + this->avail_pos = (uint)this->avails.size() - 1; break; default: @@ -1492,7 +1492,7 @@ private: } } - this->vscroll2->SetCount(this->avails.size()); // Update the scrollbar + this->vscroll2->SetCount((uint)this->avails.size()); // Update the scrollbar } /** @@ -2067,7 +2067,7 @@ struct SavePresetWindow : public Window { this->vscroll = this->GetScrollbar(WID_SVP_SCROLLBAR); this->FinishInitNested(0); - this->vscroll->SetCount(this->presets.size()); + this->vscroll->SetCount((uint)this->presets.size()); this->SetFocusedWidget(WID_SVP_EDITBOX); if (initial_text != NULL) this->presetname_editbox.text.Assign(initial_text); } @@ -2087,7 +2087,7 @@ struct SavePresetWindow : public Window { size->width = max(size->width, d.width + WD_FRAMETEXT_LEFT + WD_FRAMETEXT_RIGHT); resize->height = max(resize->height, d.height); } - size->height = ClampU(this->presets.size(), 5, 20) * resize->height + 1; + size->height = ClampU((uint)this->presets.size(), 5, 20) * resize->height + 1; break; } } @@ -2103,7 +2103,7 @@ struct SavePresetWindow : public Window { int offset_y = (step_height - FONT_HEIGHT_NORMAL) / 2; uint y = r.top + WD_FRAMERECT_TOP; uint min_index = this->vscroll->GetPosition(); - uint max_index = min(min_index + this->vscroll->GetCapacity(), this->presets.size()); + uint max_index = min(min_index + this->vscroll->GetCapacity(), (uint)this->presets.size()); for (uint i = min_index; i < max_index; i++) { if ((int)i == this->selected) GfxFillRect(r.left + 1, y, r.right - 1, y + step_height - 2, PC_DARK_BLUE); diff --git a/src/newgrf_sound.cpp b/src/newgrf_sound.cpp index c37d6b4ed4..0a04f4400a 100644 --- a/src/newgrf_sound.cpp +++ b/src/newgrf_sound.cpp @@ -56,7 +56,7 @@ SoundEntry *GetSound(SoundID index) uint GetNumSounds() { - return _sounds.size(); + return (uint)_sounds.size(); } diff --git a/src/os/windows/string_uniscribe.cpp b/src/os/windows/string_uniscribe.cpp index 5cba9a3d8b..1d17b02d7e 100644 --- a/src/os/windows/string_uniscribe.cpp +++ b/src/os/windows/string_uniscribe.cpp @@ -110,7 +110,7 @@ public: public: virtual int GetLeading() const; virtual int GetWidth() const; - virtual int CountRuns() const { return this->size(); } + virtual int CountRuns() const { return (uint)this->size(); } virtual const VisualRun *GetVisualRun(int run) const { return this->at(run); } int GetInternalCharLength(WChar c) const diff --git a/src/saveload/game_sl.cpp b/src/saveload/game_sl.cpp index cffff5018d..d2a968717a 100644 --- a/src/saveload/game_sl.cpp +++ b/src/saveload/game_sl.cpp @@ -132,7 +132,7 @@ static const SaveLoad _game_language_string[] = { static void SaveReal_GSTR(LanguageStrings *ls) { _game_saveload_string = ls->language; - _game_saveload_strings = ls->lines.size(); + _game_saveload_strings = (uint)ls->lines.size(); SlObject(NULL, _game_language_header); for (uint i = 0; i < _game_saveload_strings; i++) { diff --git a/src/script/api/script_road.cpp b/src/script/api/script_road.cpp index 3dd1453b68..44972cdeac 100644 --- a/src/script/api/script_road.cpp +++ b/src/script/api/script_road.cpp @@ -245,7 +245,7 @@ static int32 LookupWithBuildOnSlopes(::Slope slope, Array *existing, int32 start /* Now perform the actual rotation. */ for (int j = 0; j < base_rotate; j++) { - for (int i = 0; i < existing->size; i++) { + for (size_t i = 0; i < existing->size; i++) { existing->array[i] = RotateNeighbour(existing->array[i]); } start = RotateNeighbour(start); @@ -256,7 +256,7 @@ static int32 LookupWithBuildOnSlopes(::Slope slope, Array *existing, int32 start RoadBits start_roadbits = NeighbourToRoadBits(start); RoadBits new_roadbits = start_roadbits | NeighbourToRoadBits(end); RoadBits existing_roadbits = ROAD_NONE; - for (int i = 0; i < existing->size; i++) { + for (size_t i = 0; i < existing->size; i++) { existing_roadbits |= NeighbourToRoadBits(existing->array[i]); } @@ -354,7 +354,7 @@ static bool NormaliseTileOffset(int32 *tile) /* The start tile and end tile cannot be the same tile either. */ if (start == end) return -1; - for (int i = 0; i < existing->size; i++) { + for (size_t i = 0; i < existing->size; i++) { if (!NormaliseTileOffset(&existing->array[i])) return -1; } diff --git a/src/script/squirrel_helper_type.hpp b/src/script/squirrel_helper_type.hpp index 946a59547a..a42cd79a93 100644 --- a/src/script/squirrel_helper_type.hpp +++ b/src/script/squirrel_helper_type.hpp @@ -14,7 +14,7 @@ /** Definition of a simple array. */ struct Array { - int32 size; ///< The size of the array. + size_t size; ///< The size of the array. int32 array[]; ///< The data of the array. }; diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index cfed29d4d0..c15f075ecf 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -255,7 +255,7 @@ struct GameOptionsWindow : Window { } QSortT(list->data(), list->size(), DropDownListStringItem::NatSortFunc); - int newgrf_size = list->size(); + size_t newgrf_size = list->size(); /* Insert newgrf_names at the top of the list */ if (newgrf_size > 0) { list->push_back(new DropDownListItem(-1, false)); // separator line diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index cab19c22f8..64fbcad800 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -310,7 +310,7 @@ struct SignListWindow : Window, SignList { { if (this->signs.NeedRebuild()) { this->BuildSignsList(); - this->vscroll->SetCount(this->signs.size()); + this->vscroll->SetCount((uint)this->signs.size()); this->SetWidgetDirty(WID_SIL_CAPTION); } this->SortSignsList(); @@ -471,7 +471,7 @@ struct SignWindow : Window, SignList { /* Search through the list for the current sign, excluding * - the first sign if we want the previous sign or * - the last sign if we want the next sign */ - uint end = this->signs.size() - (next ? 1 : 0); + size_t end = this->signs.size() - (next ? 1 : 0); for (uint i = next ? 0 : 1; i < end; i++) { if (this->cur_sign == this->signs[i]->index) { /* We've found the current sign, so return the sign before/after it */ diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 92c186a2ec..edd02d6aef 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -205,7 +205,7 @@ protected: this->stations.shrink_to_fit(); this->stations.RebuildDone(); - this->vscroll->SetCount(this->stations.size()); // Update the scrollbar + this->vscroll->SetCount((uint)this->stations.size()); // Update the scrollbar } /** Sort stations by their name */ @@ -411,7 +411,7 @@ public: case WID_STL_LIST: { bool rtl = _current_text_dir == TD_RTL; - int max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->stations.size()); + int max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), (uint)this->stations.size()); int y = r.top + WD_FRAMERECT_TOP; for (int i = this->vscroll->GetPosition(); i < max; ++i) { // do until max number of stations of owner const Station *st = this->stations[i]; @@ -2331,7 +2331,7 @@ struct SelectStationWindow : Window { { if (!gui_scope) return; FindStationsNearby(this->area, true); - this->vscroll->SetCount(_stations_nearby_list.size() + 1); + this->vscroll->SetCount((uint)_stations_nearby_list.size() + 1); this->SetDirty(); } }; diff --git a/src/strgen/strgen_base.cpp b/src/strgen/strgen_base.cpp index f0dc03aa0b..00c3fb9f68 100644 --- a/src/strgen/strgen_base.cpp +++ b/src/strgen/strgen_base.cpp @@ -1029,14 +1029,14 @@ void LanguageWriter::WriteLang(const StringData &data) for (c = casep; c != NULL; c = c->next) { buffer.AppendByte(c->caseidx); /* Make some space for the 16-bit length */ - uint pos = buffer.size(); + uint pos = (uint)buffer.size(); buffer.AppendByte(0); buffer.AppendByte(0); /* Write string */ PutCommandString(&buffer, c->string); buffer.AppendByte(0); // terminate with a zero /* Fill in the length */ - uint size = buffer.size() - (pos + 2); + uint size = (uint)buffer.size() - (pos + 2); buffer[pos + 0] = GB(size, 8, 8); buffer[pos + 1] = GB(size, 0, 8); } @@ -1044,7 +1044,7 @@ void LanguageWriter::WriteLang(const StringData &data) if (cmdp != NULL) PutCommandString(&buffer, cmdp); - this->WriteLength(buffer.size()); + this->WriteLength((uint)buffer.size()); this->Write(buffer.data(), buffer.size()); buffer.clear(); } diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index b4911a9682..b70d183bdb 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -116,7 +116,7 @@ void TextfileWindow::SetupScrollbars() for (uint i = 0; i < this->lines.size(); i++) { max_length = max(max_length, GetStringBoundingBox(this->lines[i], FS_MONO).width); } - this->vscroll->SetCount(this->lines.size() * FONT_HEIGHT_MONO); + this->vscroll->SetCount((uint)this->lines.size() * FONT_HEIGHT_MONO); this->hscroll->SetCount(max_length + WD_FRAMETEXT_LEFT + WD_FRAMETEXT_RIGHT); } diff --git a/src/timetable_cmd.cpp b/src/timetable_cmd.cpp index 6524260ff0..c6c5afe9b5 100644 --- a/src/timetable_cmd.cpp +++ b/src/timetable_cmd.cpp @@ -292,7 +292,7 @@ CommandCost CmdSetTimetableStart(TileIndex tile, DoCommandFlag flags, uint32 p1, } int total_duration = v->orders.list->GetTimetableTotalDuration(); - int num_vehs = vehs.size(); + int num_vehs = (uint)vehs.size(); if (num_vehs >= 2) { QSortT(vehs.data(), vehs.size(), &VehicleTimetableSorter); diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 55f65e3207..cf5d430260 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -659,7 +659,7 @@ private: this->towns.shrink_to_fit(); this->towns.RebuildDone(); - this->vscroll->SetCount(this->towns.size()); // Update scrollbar as well. + this->vscroll->SetCount((uint)this->towns.size()); // Update scrollbar as well. } /* Always sort the towns. */ this->last_town = NULL; diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 34fcdc159f..647ab44f59 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -133,7 +133,7 @@ void BaseVehicleListWindow::BuildVehicleList() this->unitnumber_digits = GetUnitNumberDigits(this->vehicles); this->vehicles.RebuildDone(); - this->vscroll->SetCount(this->vehicles.size()); + this->vscroll->SetCount((uint)this->vehicles.size()); } /** @@ -1386,7 +1386,7 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int int vehicle_button_x = rtl ? right - GetSpriteSize(SPR_PROFIT_LOT).width : left; int y = r.top; - uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), this->vehicles.size()); + uint max = min(this->vscroll->GetPosition() + this->vscroll->GetCapacity(), (uint)this->vehicles.size()); for (uint i = this->vscroll->GetPosition(); i < max; ++i) { const Vehicle *v = this->vehicles[i]; StringID str; diff --git a/src/viewport.cpp b/src/viewport.cpp index 4c9507bcac..9bbe6a4623 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -599,7 +599,7 @@ void OffsetGroundSprite(int x, int y) } /* _vd.last_child == NULL if foundation sprite was clipped by the viewport bounds */ - if (_vd.last_child != NULL) _vd.foundation[_vd.foundation_part] = _vd.parent_sprites_to_draw.size() - 1; + if (_vd.last_child != NULL) _vd.foundation[_vd.foundation_part] = (uint)_vd.parent_sprites_to_draw.size() - 1; _vd.foundation_offset[_vd.foundation_part].x = x * ZOOM_LVL_BASE; _vd.foundation_offset[_vd.foundation_part].y = y * ZOOM_LVL_BASE; @@ -826,7 +826,7 @@ void AddChildSpriteScreen(SpriteID image, PaletteID pal, int x, int y, bool tran pal = PALETTE_TO_TRANSPARENT; } - *_vd.last_child = _vd.child_screen_sprites_to_draw.size(); + *_vd.last_child = (uint)_vd.child_screen_sprites_to_draw.size(); /*C++17: ChildScreenSpriteToDraw &cs = */ _vd.child_screen_sprites_to_draw.emplace_back(); ChildScreenSpriteToDraw &cs = _vd.child_screen_sprites_to_draw.back(); diff --git a/src/widgets/dropdown.cpp b/src/widgets/dropdown.cpp index 7c59cca7a5..d0ad6bc465 100644 --- a/src/widgets/dropdown.cpp +++ b/src/widgets/dropdown.cpp @@ -412,7 +412,7 @@ void ShowDropDownListAt(Window *w, const DropDownList *list, int selected, int b /* If the dropdown doesn't fully fit, we need a dropdown. */ if (height > available_height) { scroll = true; - uint avg_height = height / list->size(); + uint avg_height = height / (uint)list->size(); /* Check at least there is space for one item. */ assert(available_height >= avg_height); From 7fb77ff35a124f2533d4c467e289fbd2ec936fbd Mon Sep 17 00:00:00 2001 From: PeterN Date: Wed, 27 Mar 2019 23:10:02 +0000 Subject: [PATCH 583/622] Fix: Incorrect display of industry production around tiles. (#7426) Display of industry production around tiles (as shown when placing a station) did not take account of the station catchment changes, so still showed production from an industry even if it was not covered by a tile. This is fixed by making a set of nearby industries that are covered, instead of looping over all possible industries. --- bin/ai/regression/tst_regression/result.txt | 4 ++-- src/station_cmd.cpp | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/bin/ai/regression/tst_regression/result.txt b/bin/ai/regression/tst_regression/result.txt index cda888d297..58736c68b8 100644 --- a/bin/ai/regression/tst_regression/result.txt +++ b/bin/ai/regression/tst_regression/result.txt @@ -8536,7 +8536,6 @@ ERROR: IsEnd() is invalid as Begin() is never called --TileList_IndustryProducing-- Count(): 92 Location ListDump: - 46920 => 1 46919 => 1 46918 => 1 46917 => 1 @@ -8545,7 +8544,6 @@ ERROR: IsEnd() is invalid as Begin() is never called 46914 => 1 46913 => 1 46912 => 1 - 46911 => 1 46664 => 1 46663 => 1 46662 => 1 @@ -8628,6 +8626,8 @@ ERROR: IsEnd() is invalid as Begin() is never called 44353 => 1 44352 => 1 44351 => 1 + 46920 => 0 + 46911 => 0 --TileList_StationType-- Count(): 4 diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 5dfba2d196..7a939cd8bb 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -512,21 +512,21 @@ CargoArray GetProductionAroundTiles(TileIndex tile, int w, int h, int rad) assert(w > 0); assert(h > 0); + std::set industries; TileArea ta(TileXY(x1, y1), TileXY(x2 - 1, y2 - 1)); /* Loop over all tiles to get the produced cargo of * everything except industries */ - TILE_AREA_LOOP(tile, ta) AddProducedCargo(tile, produced); + TILE_AREA_LOOP(tile, ta) { + if (IsTileType(tile, MP_INDUSTRY)) industries.insert(GetIndustryIndex(tile)); + AddProducedCargo(tile, produced); + } - /* Loop over the industries. They produce cargo for - * anything that is within 'rad' from their bounding - * box. As such if you have e.g. a oil well the tile - * area loop might not hit an industry tile while - * the industry would produce cargo for the station. + /* Loop over the seen industries. They produce cargo for + * anything that is within 'rad' of any one of their tiles. */ - const Industry *i; - FOR_ALL_INDUSTRIES(i) { - if (!ta.Intersects(i->location)) continue; + for (IndustryID industry : industries) { + const Industry *i = Industry::Get(industry); /* Skip industry with neutral station */ if (i->neutral_station != NULL && !_settings_game.station.serve_neutral_industries) continue; From ee260e4704edf4da23cd6cdf06b8b045badd3f7c Mon Sep 17 00:00:00 2001 From: stormcone <48624099+stormcone@users.noreply.github.com> Date: Wed, 27 Mar 2019 22:53:50 +0100 Subject: [PATCH 584/622] Fix #7165: SmallMap::Erase(key) does not work correctly --- src/core/smallmap_type.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/smallmap_type.hpp b/src/core/smallmap_type.hpp index 5eb94e23a2..7cd6357ee6 100644 --- a/src/core/smallmap_type.hpp +++ b/src/core/smallmap_type.hpp @@ -128,10 +128,10 @@ struct SmallMap : std::vector > { */ inline bool Erase(const T &key) { - auto pair = std::find(this->begin(), this->end(), key); - if (pair == this->end()) return false; + auto *pair = this->Find(key); + if (pair == this->End()) return false; - std::vector::erase(pair); + this->Erase(pair); return true; } From 21d9e87b46445dcb7828d1272f03e768ee67c37d Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Thu, 28 Mar 2019 00:15:51 +0100 Subject: [PATCH 585/622] Fix #7165: Const overload SmallMap::Contains(key) compared wrong types. Const and non-const Find() have different return types. --- src/core/smallmap_type.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/smallmap_type.hpp b/src/core/smallmap_type.hpp index 7cd6357ee6..bdb6ed475b 100644 --- a/src/core/smallmap_type.hpp +++ b/src/core/smallmap_type.hpp @@ -95,7 +95,7 @@ struct SmallMap : std::vector > { */ inline bool Contains(const T &key) const { - return this->Find(key) != this->End(); + return this->Find(key) != std::vector::end(); } /** From cd3767bec236abb696f047e2e4cb7cd671bde2bd Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 28 Mar 2019 19:45:46 +0100 Subject: [PATCH 586/622] Update: Translations from eints luxembourgish: 29 changes by Phreeze russian: 2 changes by Lone_Wolf latin: 4 changes by Supercheese portuguese: 1 change by JayCity --- src/lang/latin.txt | 4 ++++ src/lang/luxembourgish.txt | 34 +++++++++++++++++++++++++++++----- src/lang/portuguese.txt | 2 +- src/lang/russian.txt | 2 ++ 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 422dbedba7..d824f9a5b2 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -3644,6 +3644,10 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Emere ve STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Emere navem electam. Shift+Preme ut pretium monstretur sine emptione STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Emere aeroplanum electum. Shift+Preme ut pretium monstretur sine emptione +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Emere et reficere vehiculum ferriviarium electum. Shift+Preme ut pretium monstretur sine emptione +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Emere et reficere vehiculum viarium electum. Shift+Preme ut pretium monstretur sine emptione +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Emere et reficere navem electam. Shift+Preme ut pretium monstretur sine emptione +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Emere et reficere aeroplanum electum. Shift+Preme ut pretium monstretur sine emptione STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Renominare STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Renominare diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 6b024f6f5b..610e939239 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -190,6 +190,7 @@ STR_COLOUR_BROWN :Brong STR_COLOUR_GREY :Gro STR_COLOUR_WHITE :Wäiss STR_COLOUR_RANDOM :Zoufälleg +STR_COLOUR_DEFAULT :Standard # Units used in OpenTTD STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mph @@ -463,7 +464,7 @@ STR_TOOLBAR_SOUND_MUSIC :Sound/Musik ############ range ends here ############ range for message menu starts -STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Läscht Meldung/Neiegkeet +STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Lescht Meldung/Neiegkeet STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Meldungshistorie STR_NEWS_MENU_DELETE_ALL_MESSAGES :All Message läschen ############ range ends here @@ -929,6 +930,8 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Südafrikanesch STR_GAME_OPTIONS_CURRENCY_CUSTOM :Eegen... STR_GAME_OPTIONS_CURRENCY_GEL :Georgesche Lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Iranësche Rial (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Neie Russesche Rubel (RUB) +STR_GAME_OPTIONS_CURRENCY_MXN :Mexikanesche Peso (MXN) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Stroossegefierer @@ -994,6 +997,7 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Véierfach STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Schrëftgréisst STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Duebel Gréisst STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Véierfach STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basis Grafikset @@ -1272,12 +1276,12 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Wann ugeschalt, STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Warnen wann en Gefier verluer ass: {STRING} STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT :Messagen uweisen wann Gefierer keen Wee op hiert Ziel fannen STR_CONFIG_SETTING_ORDER_REVIEW :Opträg vun de Gefierer nopréifen: {STRING} -STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :Wann ugeschalt, ginn d'Opträg vu Gefierer periodesch kontrolléiert, an e puer evident Fehler ginn mat enger Noriichtenmessage gemellt wann se fonnt ginn +STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :Wann ugeschalt, ginn d'Opträg vu Gefierer periodesch kontrolléiert, an e puer evident Fehler ginn mat engem Noriichtenmessage gemellt wann se fonnt ginn STR_CONFIG_SETTING_ORDER_REVIEW_OFF :Nee STR_CONFIG_SETTING_ORDER_REVIEW_EXDEPOT :Jo, mee net déi gestoppten Gefierer STR_CONFIG_SETTING_ORDER_REVIEW_ON :Vun allen Gefierer STR_CONFIG_SETTING_WARN_INCOME_LESS :Warnen wann en Gefier en negativt Akommes huet: {STRING} -STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Wann ugeschalt, gëtt eng Noorichtenmessage gesent , wann en Gefier een Joer laang keen Profit gemeet huet +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Wann ugeschalt, gëtt e Noorichtemessage gesent, wann e Gefier ee Joer laang kee Profit gemeet huet STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Gefierer lafen nie of: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Wann ugeschalt, bleiwen all Modeller vu Gefierer éiweg verfügbar STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Gefier automatesch ernéieren wann et al gëtt: {STRING} @@ -1350,6 +1354,8 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Gréng STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Donkelgréng STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Mof STR_CONFIG_SETTING_SCROLLMODE :Usiicht-Scrollverhalen: {STRING} +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Verhalen beim Scrolle vun der Kaart +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :D'Usiicht mat der rietser Maustast bewegen, Maus-Positioun gespaart STR_CONFIG_SETTING_SCROLLMODE_LMB :Kaart mat der lénker Maustast bewegen STR_CONFIG_SETTING_SMOOTH_SCROLLING :Feine Scrolling: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Kontrolléiert wéi d'Haptusiicht op eng bestëmmten Positioun scrollt, wann een op déi kléng Kaart klickt oder en Befehl fir ob en spezifescht Objet ze scrollen gëtt. Wann ugeschalt, gëtt bis dohin gescrollt, wann ausgeschalt, spréngt d'Vue op den Zielobjet @@ -2376,7 +2382,7 @@ STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Wee-Sign STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Einbahn-Wee-Signal (Elektresch){}En Einbahn-Signal erlaabt méi wéi een Zuch zur selwechter Zäit an engem Block ze sin, wann den Zuch en Wee op en sécheren Stop-Punkt reservéiren kann. Einbahn-Signaler kënnen net vun der falscher Säit duerchfuer ginn STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Signal konvertéiren{}Wann gewielt, gëtt en geklickten Signal an dat gewielten Signal konvertéiert, Ctrl+Klick wiesselt tëscht de Varianten. Shift weist ongeféier Konvertéirungskäschten STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Dicht vu Signaler beim Zéien -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Setzt Signaldicht erof +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Setzt Signaldistanz erof STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Setzt Signaldicht erop # Bridge selection window @@ -2700,25 +2706,34 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT} 2002-2019 D'OpenTTD team # Framerate display window +STR_FRAMERATE_CAPTION :{WHITE}Biller pro Sekonn STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Unzuel Gameticks déi pro Sekonn simuléiert ginn. +STR_FRAMERATE_CURRENT :{WHITE}Aktuell STR_FRAMERATE_AVERAGE :{WHITE}Mëttel STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} Biller/s STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} Biller/s STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! +STR_FRAMERATE_GAMELOOP :{BLACK}Spill total: STR_FRAMERATE_GL_TRAINS :{BLACK} Zuchticks: STR_FRAMERATE_GL_ROADVEHS :{BLACK} Stroossegefierer Ticken: STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Linkgrafik-Verzögerung: STR_FRAMERATE_DRAWING :{BLACK}Graphikrendering: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Welt-Usiichten: STR_FRAMERATE_VIDEO :{BLACK}Video-output: STR_FRAMERATE_GAMESCRIPT :{BLACK} Gamescript: ############ End of leave-in-this-order ############ Leave those lines in this order!! +STR_FRAMETIME_CAPTION_GAMELOOP :Spill-Loop +STR_FRAMETIME_CAPTION_GL_ECONOMY :Wuerenhandling +STR_FRAMETIME_CAPTION_GL_TRAINS :Zuchticks STR_FRAMETIME_CAPTION_GL_ROADVEHS :Stroossegefierer Ticken STR_FRAMETIME_CAPTION_GL_SHIPS :Schëffticker STR_FRAMETIME_CAPTION_SOUND :Soundmixing +STR_FRAMETIME_CAPTION_GAMESCRIPT :Spill-Script ############ End of leave-in-this-order @@ -2744,6 +2759,7 @@ STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Detailer STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Keng Informatioun do STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Datei iwwerschreiwen STR_SAVELOAD_OSKTITLE :{BLACK}Gëff dem Spillstand en Numm @@ -2864,6 +2880,7 @@ STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palette: STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Standard (S) / 32 bpp STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Legacy (W) STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameter: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Keng STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Keng Info verfügbar STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Datei net fonnt. @@ -3017,6 +3034,7 @@ STR_TOWN_POPULATION :{BLACK}Weltbev STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Stad) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Awunner: {ORANGE}{COMMA}{BLACK} Haiser: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} leschte Mount: {ORANGE}{COMMA}{BLACK} Max: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Gidder gebraucht fir Stadwuesstem: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} gebraucht STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} gebraucht am Wanter @@ -3117,6 +3135,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Klick op # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Storybuch STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Globalt Storybuch +STR_STORY_BOOK_SPECTATOR :Globalt Storybuch STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Säit {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Géi op eng spezifësch Säit andems se aus der Dropdownlëscht ausgewielt gëtt @@ -3315,12 +3334,13 @@ STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Industri # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} -STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produktioun läschte Mount: +STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Produktioun leschte Mount: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% transportéiert) STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Zentréiert d'Siicht op d'Industrie. Ctrl+Klick erstellt eng nei Usiicht op d'Industrie STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktiounslevel: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}D'Industrie annoncéiert dass se zougemaach gëtt +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Brauch: STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{STRING}{BLACK}{3:STRING} @@ -3374,6 +3394,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Ongruppéiert S STR_GROUP_DEFAULT_SHIPS :Ongruppéiert Schëffer STR_GROUP_DEFAULT_AIRCRAFTS :Ongruppéiert Fligeren +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Gruppen - klick op eng Grupp fir d'Gefierer aus der Grupp ze gesinn. Per Drag and Drop d'Hierarchie änneren. STR_GROUP_CREATE_TOOLTIP :{BLACK}Klick fir eng Grupp ze maachen @@ -3418,6 +3439,7 @@ STR_PURCHASE_INFO_REFITTABLE :(ëmbaubar) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Designt: {GOLD}{NUM}{BLACK} Liewenszäit: {GOLD}{COMMA} Joer STR_PURCHASE_INFO_RELIABILITY :{BLACK}Max. Zouverläss.: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Käschten: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Käschten: {GOLD}{CURRENCY_LONG}{BLACK} (Embaukäschten: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Gewiicht: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Käschten: {GOLD}{CURRENCY_LONG}{BLACK} Geschw.: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapazitéit: {GOLD}{CARGO_LONG}, {CARGO_LONG} @@ -3439,6 +3461,7 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Gefier k STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Schëff kafen STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Fliger kafen +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Gefierer kafen an embauen STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Keeft den ungewielten Zuch. Shift+Klick weist ongeféier Käschten ouni Kaf STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Keeft dat ugewielte Stroossegefier. Shift+Klick weist ongeféier Käschten ouni Kaf @@ -4510,6 +4533,7 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Original Transp STR_BASESOUNDS_WIN_DESCRIPTION :Original Transport Tycoon Deluxe Windows Editioun Sound. STR_BASESOUNDS_NONE_DESCRIPTION :E Soundpack ouni iergendee Sound. STR_BASEMUSIC_WIN_DESCRIPTION :Original Transport Tycoon Deluxe Windows Editioun Musik. +STR_BASEMUSIC_DOS_DESCRIPTION :Original Transport Tycoon Deluxe DOS Editioun Musik. STR_BASEMUSIC_TTO_DESCRIPTION :Original Transport Tycoon (Original/World Editor) DOS Editioun-Musik. STR_BASEMUSIC_NONE_DESCRIPTION :E Musikpack ouni aktuell Musik. diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 77e1f1e91b..0d1dcd8e18 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1291,7 +1291,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Veículos nunca STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Quando activo, todos os modelos de veículos permanecerão disponíveis para sempre após a sua introdução STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Auto-renovação de veículos quando ficam velhos: {STRING} STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Quando activo, um veículo a chegar ao fim de vida é automaticamente substituído quando as condições de renovação estão reunidas -STR_CONFIG_SETTING_AUTORENEW_MONTHS :Renovar automaticamente quando um veículo chega a {STRING} de idade +STR_CONFIG_SETTING_AUTORENEW_MONTHS :Renovar automaticamente quando um veículo chega a {STRING} a idade máxima STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Idade relativa a partir da qual um veículo deva ser indicado para auto-renovação STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} {P "mês" "meses"} antes STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} {P "mês" "meses"} após diff --git a/src/lang/russian.txt b/src/lang/russian.txt index c81f258a08..22476579be 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -3617,6 +3617,7 @@ 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}Создать группу @@ -4664,6 +4665,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Нево STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Невозможно удалить группу... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Невозможно переименовать группу... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Невозможно установить корректное вложение групп... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... кольцевые зависимости в иерархии групп недопустимы STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Невозможно удалить весь транспорт из группы... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Невозможно добавить транспорт в группу... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Невозможно добавить транспорт с общим маршрутом в группу... From acb09eb9a828a8da4243db4c26dd67b49993d063 Mon Sep 17 00:00:00 2001 From: glx22 Date: Thu, 28 Mar 2019 21:25:21 +0100 Subject: [PATCH 587/622] Fix: [Win64] settingsgen MSVC compile warnings (#7432) --- src/settingsgen/settingsgen.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp index bf41161b41..02a0d1a9af 100644 --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -41,7 +41,7 @@ void NORETURN CDECL error(const char *s, ...) exit(1); } -static const int OUTPUT_BLOCK_SIZE = 16000; ///< Block size of the buffer in #OutputBuffer. +static const size_t OUTPUT_BLOCK_SIZE = 16000; ///< Block size of the buffer in #OutputBuffer. /** Output buffer for a block of data. */ class OutputBuffer { @@ -58,10 +58,9 @@ public: * @param length Length of the text in bytes. * @return Number of bytes actually stored. */ - int Add(const char *text, int length) + size_t Add(const char *text, size_t length) { - int store_size = min(length, OUTPUT_BLOCK_SIZE - this->size); - assert(store_size >= 0); + size_t store_size = min(length, OUTPUT_BLOCK_SIZE - this->size); assert(store_size <= OUTPUT_BLOCK_SIZE); MemCpyT(this->data + this->size, text, store_size); this->size += store_size; @@ -74,7 +73,7 @@ public: */ void Write(FILE *out_fp) const { - if (fwrite(this->data, 1, this->size, out_fp) != (size_t)this->size) { + if (fwrite(this->data, 1, this->size, out_fp) != this->size) { fprintf(stderr, "Error: Cannot write output\n"); } } @@ -88,7 +87,7 @@ public: return this->size < OUTPUT_BLOCK_SIZE; } - int size; ///< Number of bytes stored in \a data. + size_t size; ///< Number of bytes stored in \a data. char data[OUTPUT_BLOCK_SIZE]; ///< Stored data. }; @@ -111,12 +110,12 @@ public: * @param text Text to store. * @param length Length of the text in bytes, \c 0 means 'length of the string'. */ - void Add(const char *text, int length = 0) + void Add(const char *text, size_t length = 0) { if (length == 0) length = strlen(text); if (length > 0 && this->BufferHasRoom()) { - int stored_size = this->output_buffer[this->output_buffer.size() - 1].Add(text, length); + size_t stored_size = this->output_buffer[this->output_buffer.size() - 1].Add(text, length); length -= stored_size; text += stored_size; } @@ -124,7 +123,7 @@ public: /*C++17: OutputBuffer &block =*/ this->output_buffer.emplace_back(); OutputBuffer &block = this->output_buffer.back(); block.Clear(); // Initialize the new block. - int stored_size = block.Add(text, length); + size_t stored_size = block.Add(text, length); length -= stored_size; text += stored_size; } @@ -148,7 +147,7 @@ private: */ bool BufferHasRoom() const { - uint num_blocks = this->output_buffer.size(); + size_t num_blocks = this->output_buffer.size(); return num_blocks > 0 && this->output_buffer[num_blocks - 1].HasRoom(); } From 9244dad3f111b19950350f165dc2f61a62425f44 Mon Sep 17 00:00:00 2001 From: PeterN Date: Fri, 29 Mar 2019 17:42:32 +0000 Subject: [PATCH 588/622] Fix #7434: Incorrect use of vector iterator. (#7437) --- src/network/network_content_gui.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 40f1966e4e..b2e0dd795f 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -636,9 +636,8 @@ public: uint y = r.top; auto iter = this->content.begin() + this->vscroll->GetPosition(); - auto end = iter + this->vscroll->GetCapacity(); - if (end > this->content.end()) - end = this->content.end(); + size_t last = this->vscroll->GetPosition() + this->vscroll->GetCapacity(); + auto end = (last < this->content.size()) ? this->content.begin() + last : this->content.end(); for (/**/; iter != end; iter++) { const ContentInfo *ci = *iter; From b6e3e30d86e66e84d52e94a9f91b9952ae699ab5 Mon Sep 17 00:00:00 2001 From: PeterN Date: Fri, 29 Mar 2019 17:43:06 +0000 Subject: [PATCH 589/622] Codechange: Distance between town and airport has already just been found, so use it. (#7427) Previously the distance was thrown away, only to be expensively recalculated again. --- src/script/api/script_airport.cpp | 14 ++++++++------ src/station_cmd.cpp | 27 ++++++++++++++------------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/script/api/script_airport.cpp b/src/script/api/script_airport.cpp index 8e19d257df..dab868b750 100644 --- a/src/script/api/script_airport.cpp +++ b/src/script/api/script_airport.cpp @@ -130,8 +130,8 @@ /* static */ int ScriptAirport::GetNoiseLevelIncrease(TileIndex tile, AirportType type) { - extern Town *AirportGetNearestTown(const AirportSpec *as, const TileIterator &it); - extern uint8 GetAirportNoiseLevelForTown(const AirportSpec *as, TileIterator &it, TileIndex town_tile); + extern Town *AirportGetNearestTown(const AirportSpec *as, const TileIterator &it, uint &mindist); + extern uint8 GetAirportNoiseLevelForDistance(const AirportSpec *as, uint distance); if (!::IsValidTile(tile)) return -1; if (!IsAirportInformationAvailable(type)) return -1; @@ -139,8 +139,9 @@ if (_settings_game.economy.station_noise_level) { const AirportSpec *as = ::AirportSpec::Get(type); AirportTileTableIterator it(as->table[0], tile); - const Town *t = AirportGetNearestTown(as, it); - return GetAirportNoiseLevelForTown(as, it, t->xy); + uint dist; + AirportGetNearestTown(as, it, dist); + return GetAirportNoiseLevelForDistance(as, dist); } return 1; @@ -148,13 +149,14 @@ /* static */ TownID ScriptAirport::GetNearestTown(TileIndex tile, AirportType type) { - extern Town *AirportGetNearestTown(const AirportSpec *as, const TileIterator &it); + extern Town *AirportGetNearestTown(const AirportSpec *as, const TileIterator &it, uint &mindist); if (!::IsValidTile(tile)) return INVALID_TOWN; if (!IsAirportInformationAvailable(type)) return INVALID_TOWN; const AirportSpec *as = AirportSpec::Get(type); - return AirportGetNearestTown(as, AirportTileTableIterator(as->table[0], tile))->index; + uint dist; + return AirportGetNearestTown(as, AirportTileTableIterator(as->table[0], tile), dist)->index; } /* static */ uint16 ScriptAirport::GetMaintenanceCostFactor(AirportType type) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 7a939cd8bb..b15fc15438 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -2164,18 +2164,15 @@ static uint GetMinimalAirportDistanceToTile(TileIterator &it, TileIndex town_til * The further you get, the less noise you generate. * So all those folks at city council can now happily slee... work in their offices * @param as airport information - * @param it An iterator over all airport tiles. - * @param town_tile TileIndex of town's center, the one who will receive the airport's candidature + * @param distance minimum distance between town and airport * @return the noise that will be generated, according to distance */ -uint8 GetAirportNoiseLevelForTown(const AirportSpec *as, TileIterator &it, TileIndex town_tile) +uint8 GetAirportNoiseLevelForDistance(const AirportSpec *as, uint distance) { /* 0 cannot be accounted, and 1 is the lowest that can be reduced from town. * So no need to go any further*/ if (as->noise_level < 2) return as->noise_level; - uint distance = GetMinimalAirportDistanceToTile(it, town_tile); - /* The steps for measuring noise reduction are based on the "magical" (and arbitrary) 8 base distance * adding the town_council_tolerance 4 times, as a way to graduate, depending of the tolerance. * Basically, it says that the less tolerant a town is, the bigger the distance before @@ -2196,13 +2193,14 @@ uint8 GetAirportNoiseLevelForTown(const AirportSpec *as, TileIterator &it, TileI * If two towns have the same distance, town with lower index is returned. * @param as airport's description * @param it An iterator over all airport tiles + * @param[out] mindist Minimum distance to town * @return nearest town to airport */ -Town *AirportGetNearestTown(const AirportSpec *as, const TileIterator &it) +Town *AirportGetNearestTown(const AirportSpec *as, const TileIterator &it, uint &mindist) { Town *t, *nearest = NULL; uint add = as->size_x + as->size_y - 2; // GetMinimalAirportDistanceToTile can differ from DistanceManhattan by this much - uint mindist = UINT_MAX - add; // prevent overflow + mindist = UINT_MAX - add; // prevent overflow FOR_ALL_TOWNS(t) { if (DistanceManhattan(t->xy, it) < mindist + add) { // avoid calling GetMinimalAirportDistanceToTile too often TileIterator *copy = it.Clone(); @@ -2231,8 +2229,9 @@ void UpdateAirportsNoise() if (st->airport.tile != INVALID_TILE && st->airport.type != AT_OILRIG) { const AirportSpec *as = st->airport.GetSpec(); AirportTileIterator it(st); - Town *nearest = AirportGetNearestTown(as, it); - nearest->noise_reached += GetAirportNoiseLevelForTown(as, it, nearest->xy); + uint dist; + Town *nearest = AirportGetNearestTown(as, it, dist); + nearest->noise_reached += GetAirportNoiseLevelForDistance(as, dist); } } } @@ -2285,8 +2284,9 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint if (cost.Failed()) return cost; /* The noise level is the noise from the airport and reduce it to account for the distance to the town center. */ - Town *nearest = AirportGetNearestTown(as, iter); - uint newnoise_level = GetAirportNoiseLevelForTown(as, iter, nearest->xy); + uint dist; + Town *nearest = AirportGetNearestTown(as, iter, dist); + uint newnoise_level = GetAirportNoiseLevelForDistance(as, dist); /* Check if local auth would allow a new airport */ StringID authority_refuse_message = STR_NULL; @@ -2405,8 +2405,9 @@ static CommandCost RemoveAirport(TileIndex tile, DoCommandFlag flags) * And as for construction, always remove it, even if the setting is not set, in order to avoid the * need of recalculation */ AirportTileIterator it(st); - Town *nearest = AirportGetNearestTown(as, it); - nearest->noise_reached -= GetAirportNoiseLevelForTown(as, it, nearest->xy); + uint dist; + Town *nearest = AirportGetNearestTown(as, it, dist); + nearest->noise_reached -= GetAirportNoiseLevelForDistance(as, dist); } TILE_AREA_LOOP(tile_cur, st->airport) { From 1d14e31be3f9762d179a3a0d9b2a3aad29fdbec4 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 29 Mar 2019 19:45:45 +0100 Subject: [PATCH 590/622] Update: Translations from eints korean: 14 changes by telk5093 --- src/lang/korean.txt | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index ddf59ff007..9e53f801da 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -3438,6 +3438,7 @@ 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}그룹 만들기 @@ -3471,6 +3472,7 @@ STR_BUY_VEHICLE_SHIP_CAPTION :새 선박 STR_BUY_VEHICLE_AIRCRAFT_CAPTION :새 항공기 STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}가격: {GOLD}{CURRENCY_LONG}{BLACK} 중량: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}가격: {GOLD}{CURRENCY_LONG}{BLACK} (개조 가격: {GOLD}{CURRENCY_LONG}{BLACK}) 무게: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}속력: {GOLD}{VELOCITY}{BLACK} 힘: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}속력: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}바다에서 속력: {GOLD}{VELOCITY} @@ -3481,8 +3483,10 @@ 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} @@ -3503,12 +3507,20 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}차량 STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}선박 구입 STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}항공기 구입 +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}차량 구입 및 개조 +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}차량 구입 및 개조 +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}선박 구입 및 개조 +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}항공기 구입 및 개조 -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}선택된 차량을 구입합니다. SHIFT+클릭으로 예상 구입 가격을 볼 수 있습니다. +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}선택된 차량을 구입합니다. SHIFT+클릭으로 예상 구입 비용을 볼 수 있습니다. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}선택한 차량을 구입합니다. Shift+클릭하면 예상 구입 비용을 볼 수 있습니다. STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}선택한 선박을 구입합니다. SHIFT+클릭으로 예상 구입 비용을 볼 수 있습니다. STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}선택한 항공기를 구입합니다. SHIFT+클릭으로 예상 구입 비용을 볼 수 있습니다. +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}선택한 차량을 구입하고 개조합니다. SHIFT+클릭하면 예상 비용을 볼 수 있습니다. +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+클릭하면 예상 비용을 볼 수 있습니다. STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}이름 STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}이름 지정 @@ -4464,6 +4476,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}그룹 STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}이 그룹을 지울 수 없습니다... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}그룹의 이름을 바꿀 수 없습니다. STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}상위 그룹으로 설정할 수 없습니다... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... 상위 그룹을 하위 그룹 아래로 옮길 수 없습니다. STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}이 그룹의 모든 차량을 제거할 수 없습니다. STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}이 그룹에 차량을 추가할 수 없습니다... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}이 그룹에 공유된 차량을 추가할 수 없습니다... From ed51fba7eddaa24bbfb099321581a7d04cf2855b Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Fri, 29 Mar 2019 19:00:43 +0000 Subject: [PATCH 591/622] Change: Dark Blue company and water were indistinguishable in small map. (#7436) --- src/smallmap_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 41848cdf0e..df2430105a 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -47,7 +47,7 @@ static const uint8 PC_GRASS_LAND = 0x54; ///< Dark green palette colour for static const uint8 PC_BARE_LAND = 0x37; ///< Brown palette colour for bare land. static const uint8 PC_FIELDS = 0x25; ///< Light brown palette colour for fields. static const uint8 PC_TREES = 0x57; ///< Green palette colour for trees. -static const uint8 PC_WATER = 0xCA; ///< Dark blue palette colour for water. +static const uint8 PC_WATER = 0xC9; ///< Dark blue palette colour for water. /** Macro for ordinary entry of LegendAndColour */ #define MK(a, b) {a, b, INVALID_INDUSTRYTYPE, 0, INVALID_COMPANY, true, false, false} From 3118f1430f67894f85e305946ac25d08a1021203 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 30 Mar 2019 19:45:46 +0100 Subject: [PATCH 592/622] Update: Translations from eints italian: 25 changes by lorenzodv portuguese: 3 changes by JayCity --- src/lang/italian.txt | 30 +++++++++++++++++++++++++----- src/lang/portuguese.txt | 6 +++--- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 915c0b162d..4631a1934b 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1208,6 +1208,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Consenti rimode STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Consente la rimodellazione del terreno sotto edifici e rotaie senza doverli rimuovere STR_CONFIG_SETTING_CATCHMENT :Consenti aree di copertura più realistiche: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Usa aree di copertura di dimensioni differenti a seconda del tipo di stazione o aeroporto +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Le stazioni delle compagnie possono servire le industrie con stazioni neutrali: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Se abilitato, le industrie con una stazione incorporata (come le piattaforme petrolifere) possono essere servite anche dalle stazioni di proprietà delle compagnie costruite nelle vicinanze. Se disabilitato, queste industrie possono essere servite dalla loro stazione incorporata. Nessuna stazione vicina potrà servirle, né la stazione incorporata potrà servire altro che la sua industria. STR_CONFIG_SETTING_EXTRADYNAMITE :Consenti la rimozione di strade, ponti, etc. delle città: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Rende più facile la rimozione di infrastrutture ed edifici di proprietà delle città STR_CONFIG_SETTING_TRAIN_LENGTH :Lunghezza massima dei treni: {STRING} @@ -1224,8 +1226,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Pendenza dei ri STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Pendenza salite per gli automezzi: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Pendenza dei riquadri inclinati percepita dagli automezzi. I valori più elevati rendono più difficile risalire le colline -STR_CONFIG_SETTING_FORBID_90_DEG :Impedisci a treni e navi di curvare a 90 gradi: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Le curve a 90 gradi avvengono quando un binario orizzontale è seguito direttamente da un binario verticale nel riquadro adiacente, facendo sì che un treno che attraversa il bordo fra i riquadri curvi di 90 gradi invece dei 45 gradi delle altre combinazioni di binari. L'impostazione si applica anche al raggio di virata delle navi +STR_CONFIG_SETTING_FORBID_90_DEG :Impedisci ai treni di curvare a 90 gradi: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :Le curve a 90 gradi avvengono quando un binario orizzontale è seguito direttamente da un binario verticale nel riquadro adiacente, facendo sì che un treno che attraversa il bordo fra i riquadri curvi di 90 gradi invece dei 45 gradi delle altre combinazioni di binari STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Consenti di unire stazioni non direttamente adiacenti: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Consente di aggiungere nuove parti a una stazione senza toccare direttamente le parti esistenti. Richiede l'uso di CTRL+clic per posizionare le nuove parti STR_CONFIG_SETTING_INFLATION :Inflazione: {STRING} @@ -1281,8 +1283,8 @@ STR_CONFIG_SETTING_PLANE_SPEED :Fattore di velo STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Imposta la velocità relativa degli aeroplani in confronto agli altri tipi di veicolo, in modo da ridurre i ricavi del trasporto via aria STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Numero di incidenti aerei: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Imposta la probabilità del verificarsi di un incidente aereo -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Nessuno +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Imposta la probabilità del verificarsi di un incidente aereo casuale.{}* Gli aerei grandi corrono comunque il rischio di schiantarsi quando atterrano nei piccoli aeroporti +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Nessuno* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Ridotto STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normale STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Consenti fermate passanti sulle strade delle città: {STRING} @@ -1607,6 +1609,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Abilitando ques STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Non permessa STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Permessa STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Permessa, disposizione strade personalizzata +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Generazione passeggeri e posta: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Quantità di carichi (passeggeri e posta) prodotta dalle case in relazione alla popolazione della città.{}Quadratica: Una città grande il doppio genera il quadruplo di passeggeri.{}Lineare: Una città grande il doppio genera il doppio di passeggeri. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadratica (originale) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineare STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Collocazione di alberi durante la partita: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controlla la comparsa casuale di alberi durante una partita. Può influenzare le industrie che dipendono dalla crescita degli alberi, come le segherie @@ -2157,7 +2163,7 @@ STR_NETWORK_CHAT_ALL :[Tutti] {STRING STR_NETWORK_CHAT_OSKTITLE :{BLACK}Inserire il messaggio # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Nessun dispositivo di rete trovato o compilato senza ENABLE_NETWORK +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Nessun dispositivo di rete trovato STR_NETWORK_ERROR_NOSERVER :{WHITE}Impossibile trovare partite in rete STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Il server non ha risposto alla richiesta STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Impossibile connettersi a causa di file NewGRF differenti @@ -3056,6 +3062,7 @@ STR_NEWGRF_BUGGY :{WHITE}Informaz STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}I dati su carico e riadattamento di '{1:ENGINE}' sono diversi da quelli indicati prima della costruzione. Il rinnovo/rimpiazzo automatico potrebbe non riuscire STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' ha causato un ciclo infinito nel callback di produzione STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Il callback {1:HEX} ha restituito il risultato sconosciuto o non valido {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' ha restituito un tipo di carico non valido nel callback di produzione a {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : @@ -3460,6 +3467,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Automezzi senza STR_GROUP_DEFAULT_SHIPS :Navi senza gruppo STR_GROUP_DEFAULT_AIRCRAFTS :Aeromobili senza gruppo +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Gruppi - fare clic su un gruppo per elencare tutti i suoi veicoli. Trascinare i gruppi per organizzarli in gerarchia. STR_GROUP_CREATE_TOOLTIP :{BLACK}Fare clic per creare un gruppo @@ -3493,6 +3501,7 @@ STR_BUY_VEHICLE_SHIP_CAPTION :Nuove navi STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nuovo aeromobile STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Costo: {GOLD}{CURRENCY_LONG}{BLACK} Peso: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Costo: {GOLD}{CURRENCY_LONG}{BLACK} (Costo riadattamento: {GOLD}{CURRENCY_LONG}{BLACK}) Peso: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Velocità: {GOLD}{VELOCITY}{BLACK} Potenza: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Velocità: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Velocità sull'oceano: {GOLD}{VELOCITY} @@ -3503,8 +3512,10 @@ STR_PURCHASE_INFO_REFITTABLE :(riadattabile) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Progettato nel: {GOLD}{NUM}{BLACK} Vita: {GOLD}{COMMA} ann{P o i} STR_PURCHASE_INFO_RELIABILITY :{BLACK}Affidabilità massima: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Costo: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Costo: {GOLD}{CURRENCY_LONG}{BLACK} (Costo riadattamento: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Peso: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Costo: {GOLD}{CURRENCY_LONG}{BLACK} Velocità: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Costo: {GOLD}{CURRENCY_LONG}{BLACK} (Costo riadattamento: {GOLD}{CURRENCY_LONG}{BLACK}) Velocità: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacità: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagoni motorizzati: {GOLD}+{POWER}{BLACK} Peso: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Riadattabile per: {GOLD}{STRING} @@ -3525,12 +3536,20 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Compra v STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Compra nave STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Compra aeromobile +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Compra e riadatta veicolo +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Compra e riadatta veicolo +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Compra e riadatta nave +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Compra e riadatta aeromobile STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Compra il veicolo ferroviario selezionato. MAIUSC+clic mostra il costo stimato senza comprare STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Compra l'automezzo selezionato. MAIUSC+clic mostra il costo stimato senza comprare STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Compra la nave selezionata. MAIUSC+clic mostra il costo stimato senza comprare STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Compra l'aeromobile selezionato. MAIUSC+clic mostra il costo stimato senza comprare +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Compra e riadatta il veicolo ferroviario selezionato. MAIUSC+clic mostra il costo stimato senza comprare +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Compra e riadatta l'automezzo selezionato. MAIUSC+clic mostra il costo stimato senza comprare +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Compra e riadatta la nave selezionata. MAIUSC+clic mostra il costo stimato senza comprare +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Compra e riadatta l'aeromobile selezionato. MAIUSC+clic mostra il costo stimato senza comprare STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Rinomina STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Rinomina @@ -4486,6 +4505,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Impossib STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Impossibile eliminare il gruppo... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Impossibile rinominare il gruppo... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Impossibile impostare il gruppo contenitore... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... non sono ammessi cicli nella gerarchia dei gruppi STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Impossibile rimuovere tutti i veicoli del gruppo... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Impossibile aggiungere il veicolo al gruppo... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Impossibile aggiungere veicoli condivisi al gruppo... diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 0d1dcd8e18..0c8361e54c 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -77,7 +77,7 @@ STR_CARGO_SINGULAR_COPPER_ORE :Minério de Cob STR_CARGO_SINGULAR_MAIZE :Milho STR_CARGO_SINGULAR_FRUIT :Fruta STR_CARGO_SINGULAR_DIAMOND :Diamantes -STR_CARGO_SINGULAR_FOOD :Alimentos +STR_CARGO_SINGULAR_FOOD :Alimento STR_CARGO_SINGULAR_PAPER :Papel STR_CARGO_SINGULAR_GOLD :Ouro STR_CARGO_SINGULAR_WATER :Água @@ -2916,8 +2916,8 @@ STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Paleta: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Padrão (D) STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Padrão (D) / 32 bpp -STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Legacy (W) -STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Legacy (W) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Antiga (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Antiga (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parâmetros: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PARAMETER_NONE :Nenhum From 0cf25e84df31401a38da462094c8fa576512369e Mon Sep 17 00:00:00 2001 From: frosch Date: Sat, 30 Mar 2019 20:56:43 +0100 Subject: [PATCH 593/622] Fix #7447, 3357cac847: Action 4 has feature 48 'original strings'. (#7449) --- src/newgrf.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 0a526e50b2..0b3a2cc3d7 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -5686,7 +5686,7 @@ static void FeatureNewName(ByteReader *buf) bool new_scheme = _cur.grffile->grf_version >= 7; uint8 feature = buf->ReadByte(); - if (feature >= GSF_END) { + if (feature >= GSF_END && feature != 0x48) { grfmsg(1, "FeatureNewName: Unsupported feature 0x%02X, skipping", feature); return; } From 66c60e52bac69b752f1dd7b7c599577fcbfa17a1 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sat, 30 Mar 2019 08:46:21 +0100 Subject: [PATCH 594/622] Change: [SDL] Do not offer video smaller than 640x480 --- src/video/sdl_v.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index 54502dfae7..62bbb33012 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -223,6 +223,7 @@ static void GetVideoModes() for (int i = 0; modes[i]; i++) { uint w = modes[i]->w; uint h = modes[i]->h; + if (w < 640 || h < 480) continue; // reject too small resolutions int j; for (j = 0; j < n; j++) { if (_resolutions[j].width == w && _resolutions[j].height == h) break; @@ -234,6 +235,7 @@ static void GetVideoModes() if (++n == lengthof(_resolutions)) break; } } + if (n == 0) usererror("No usable screen resolutions found!\n"); _num_resolutions = n; SortResolutions(_num_resolutions); } From df673e9b2cd1e7eb1a5654f45409ddf18bf4fd87 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sun, 10 Mar 2019 19:45:49 +0100 Subject: [PATCH 595/622] Fix: Fluidsynth should not try to lock sample data in memory --- src/music/fluidsynth.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/music/fluidsynth.cpp b/src/music/fluidsynth.cpp index 6baeb899bc..49e50eb9e0 100644 --- a/src/music/fluidsynth.cpp +++ b/src/music/fluidsynth.cpp @@ -58,6 +58,8 @@ const char *MusicDriver_FluidSynth::Start(const char * const *param) /* Create the settings. */ _midi.settings = new_fluid_settings(); if (!_midi.settings) return "Could not create midi settings"; + /* Don't try to lock sample data in memory, OTTD usually does not run with privileges allowing that */ + fluid_settings_setint(_midi.settings, "synth.lock-memory", 0); /* Create the synthesizer. */ _midi.synth = new_fluid_synth(_midi.settings); From e93630541de1eb0f4ec9b3474eddf39914ceada2 Mon Sep 17 00:00:00 2001 From: glx22 Date: Sat, 30 Mar 2019 22:12:25 +0100 Subject: [PATCH 596/622] Fix #7433: don't use AirportSpec substitute if it's not set (#7435) --- src/newgrf_airport.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/newgrf_airport.cpp b/src/newgrf_airport.cpp index 14af15a371..46f15b0e1c 100644 --- a/src/newgrf_airport.cpp +++ b/src/newgrf_airport.cpp @@ -100,6 +100,7 @@ AirportSpec AirportSpec::specs[NUM_AIRPORTS]; ///< Airport specifications. assert(type < lengthof(AirportSpec::specs)); const AirportSpec *as = &AirportSpec::specs[type]; if (type >= NEW_AIRPORT_OFFSET && !as->enabled) { + if (_airport_mngr.GetGRFID(type) == 0) return as; byte subst_id = _airport_mngr.GetSubstituteID(type); if (subst_id == AT_INVALID) return as; as = &AirportSpec::specs[subst_id]; From 423aea5c32c1cca5e59f5c994730aeb4ff09a56f Mon Sep 17 00:00:00 2001 From: Andy Date: Sat, 30 Mar 2019 21:22:11 +0000 Subject: [PATCH 597/622] Change: adjust Violet smallmap colour 1 shade darker, to compensate for legibility against darker blue of sea introduced by #7436 --- src/smallmap_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index df2430105a..5286d2d635 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -274,7 +274,7 @@ struct SmallMapColourScheme { static SmallMapColourScheme _heightmap_schemes[] = { {NULL, _green_map_heights, lengthof(_green_map_heights), MKCOLOUR_XXXX(0x54)}, ///< Green colour scheme. {NULL, _dark_green_map_heights, lengthof(_dark_green_map_heights), MKCOLOUR_XXXX(0x62)}, ///< Dark green colour scheme. - {NULL, _violet_map_heights, lengthof(_violet_map_heights), MKCOLOUR_XXXX(0x82)}, ///< Violet colour scheme. + {NULL, _violet_map_heights, lengthof(_violet_map_heights), MKCOLOUR_XXXX(0x81)}, ///< Violet colour scheme. }; /** From 32fda83d3916197a46215c83ddd85b2e50128a02 Mon Sep 17 00:00:00 2001 From: PeterN Date: Sat, 30 Mar 2019 22:19:50 +0000 Subject: [PATCH 598/622] Fix aa7ca7fe6: Linkgraph node index order must be maintained due to other references. (#7431) Linkgraph nodes require a specific order that was maintained by swapping just the last element for the node to be removed. std::vector::erase() changed this to removing the node is then shuffling the remain items down, which upsets other references to this indices. This is fixed by switching back to the original swap & pop method. --- src/linkgraph/linkgraph.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/linkgraph/linkgraph.cpp b/src/linkgraph/linkgraph.cpp index d8cbf9b50a..234b0be605 100644 --- a/src/linkgraph/linkgraph.cpp +++ b/src/linkgraph/linkgraph.cpp @@ -139,7 +139,10 @@ void LinkGraph::RemoveNode(NodeID id) node_edges[id] = node_edges[last_node]; } Station::Get(this->nodes[last_node].station)->goods[this->cargo].node = id; - this->nodes.erase(this->nodes.begin() + id); + /* Erase node by swapping with the last element. Node index is referenced + * directly from station goods entries so the order and position must remain. */ + this->nodes[id] = this->nodes.back(); + this->nodes.pop_back(); this->edges.EraseColumn(id); /* Not doing EraseRow here, as having the extra invalid row doesn't hurt * and removing it would trigger a lot of memmove. The data has already From e1069eee05b648a64ff5dac3dd5701b01cfa2034 Mon Sep 17 00:00:00 2001 From: PeterN Date: Sat, 30 Mar 2019 22:20:26 +0000 Subject: [PATCH 599/622] Codechange: Check airport layout would fit within map bounds before iterating tiles. (#7429) --- src/newgrf_airport.cpp | 18 ++++++++++++++++++ src/newgrf_airport.h | 1 + src/script/api/script_airport.cpp | 6 +++++- src/station_cmd.cpp | 1 + 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/newgrf_airport.cpp b/src/newgrf_airport.cpp index 46f15b0e1c..615292aef6 100644 --- a/src/newgrf_airport.cpp +++ b/src/newgrf_airport.cpp @@ -130,6 +130,24 @@ bool AirportSpec::IsAvailable() const return _cur_year <= this->max_year; } +/** + * Check if the airport would be within the map bounds at the given tile. + * @param table Selected layout table. This affects airport rotation, and therefore dimenions. + * @param tile Top corner of the airport. + * @return true iff the airport would be within the map bounds at the given tile. + */ +bool AirportSpec::IsWithinMapBounds(byte table, TileIndex tile) const +{ + if (table >= this->num_table) return false; + + byte w = this->size_x; + byte h = this->size_y; + if (this->rotation[table] == DIR_E || this->rotation[table] == DIR_W) Swap(w, h); + + return TileX(tile) + w < MapSizeX() && + TileY(tile) + h < MapSizeY(); +} + /** * This function initializes the airportspec array. */ diff --git a/src/newgrf_airport.h b/src/newgrf_airport.h index 867362e9ad..7b752e741a 100644 --- a/src/newgrf_airport.h +++ b/src/newgrf_airport.h @@ -123,6 +123,7 @@ struct AirportSpec { static AirportSpec *GetWithoutOverride(byte type); bool IsAvailable() const; + bool IsWithinMapBounds(byte table, TileIndex index) const; static void ResetAirports(); diff --git a/src/script/api/script_airport.cpp b/src/script/api/script_airport.cpp index dab868b750..7d80f97afa 100644 --- a/src/script/api/script_airport.cpp +++ b/src/script/api/script_airport.cpp @@ -136,8 +136,10 @@ if (!::IsValidTile(tile)) return -1; if (!IsAirportInformationAvailable(type)) return -1; + const AirportSpec *as = ::AirportSpec::Get(type); + if (!as->IsWithinMapBounds(0, tile)) return -1; + if (_settings_game.economy.station_noise_level) { - const AirportSpec *as = ::AirportSpec::Get(type); AirportTileTableIterator it(as->table[0], tile); uint dist; AirportGetNearestTown(as, it, dist); @@ -155,6 +157,8 @@ if (!IsAirportInformationAvailable(type)) return INVALID_TOWN; const AirportSpec *as = AirportSpec::Get(type); + if (!as->IsWithinMapBounds(0, tile)) return INVALID_TOWN; + uint dist; return AirportGetNearestTown(as, AirportTileTableIterator(as->table[0], tile), dist)->index; } diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index b15fc15438..a79480448a 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -2268,6 +2268,7 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint /* Check if a valid, buildable airport was chosen for construction */ const AirportSpec *as = AirportSpec::Get(airport_type); if (!as->IsAvailable() || layout >= as->num_table) return CMD_ERROR; + if (!as->IsWithinMapBounds(layout, tile)) return CMD_ERROR; Direction rotation = as->rotation[layout]; int w = as->size_x; From 6d1cc142c2390b3466a91de19d16e55bf1ee19f8 Mon Sep 17 00:00:00 2001 From: PeterN Date: Sun, 31 Mar 2019 02:05:23 +0100 Subject: [PATCH 600/622] Change: Shorten engine rail type drop down in autoreplace window. (#7448) In the autoreplace window, the rail type drop down is for choosing engines of the given time. Many rail types do not have engines specifically designed for them, and are merely compatible with other rail types. This list is thus unwieldy and many options have no engines available. As this drop down is for choosing _engine_ rail type rather than compatible rail types, we can list just the rail types explicitly listed by engines. --- src/rail.cpp | 43 +++++++++++++++++++++++++++++++++++++++---- src/rail.h | 3 ++- src/rail_gui.cpp | 28 ++++++++++++++-------------- 3 files changed, 55 insertions(+), 19 deletions(-) diff --git a/src/rail.cpp b/src/rail.cpp index c97dfb53c2..f2870c1eb9 100644 --- a/src/rail.cpp +++ b/src/rail.cpp @@ -262,13 +262,14 @@ RailTypes AddDateIntroducedRailTypes(RailTypes current, Date date) /** * Get the rail types the given company can build. * @param company the company to get the rail types for. + * @param introduces If true, include rail types introduced by other rail types * @return the rail types. */ -RailTypes GetCompanyRailtypes(CompanyID company) +RailTypes GetCompanyRailtypes(CompanyID company, bool introduces) { RailTypes rts = RAILTYPES_NONE; - Engine *e; + const Engine *e; FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) { const EngineInfo *ei = &e->info; @@ -278,12 +279,46 @@ RailTypes GetCompanyRailtypes(CompanyID company) if (rvi->railveh_type != RAILVEH_WAGON) { assert(rvi->railtype < RAILTYPE_END); - rts |= GetRailTypeInfo(rvi->railtype)->introduces_railtypes; + if (introduces) { + rts |= GetRailTypeInfo(rvi->railtype)->introduces_railtypes; + } else { + SetBit(rts, rvi->railtype); + } } } } - return AddDateIntroducedRailTypes(rts, _date); + if (introduces) return AddDateIntroducedRailTypes(rts, _date); + return rts; +} + +/** + * Get list of rail types, regardless of company availability. + * @param introduces If true, include rail types introduced by other rail types + * @return the rail types. + */ +RailTypes GetRailTypes(bool introduces) +{ + RailTypes rts = RAILTYPES_NONE; + + const Engine *e; + FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) { + const EngineInfo *ei = &e->info; + if (!HasBit(ei->climates, _settings_game.game_creation.landscape)) continue; + + const RailVehicleInfo *rvi = &e->u.rail; + if (rvi->railveh_type != RAILVEH_WAGON) { + assert(rvi->railtype < RAILTYPE_END); + if (introduces) { + rts |= GetRailTypeInfo(rvi->railtype)->introduces_railtypes; + } else { + SetBit(rts, rvi->railtype); + } + } + } + + if (introduces) return AddDateIntroducedRailTypes(rts, MAX_DAY); + return rts; } /** diff --git a/src/rail.h b/src/rail.h index b08f0650a0..004593ce7c 100644 --- a/src/rail.h +++ b/src/rail.h @@ -455,7 +455,8 @@ bool ValParamRailtype(const RailType rail); RailTypes AddDateIntroducedRailTypes(RailTypes current, Date date); RailType GetBestRailtype(const CompanyID company); -RailTypes GetCompanyRailtypes(const CompanyID c); +RailTypes GetCompanyRailtypes(CompanyID company, bool introduces = true); +RailTypes GetRailTypes(bool introduces); RailType GetRailTypeByLabel(RailTypeLabel label, bool allow_alternate_labels = true); diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 827f244562..176e8e6efb 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1989,20 +1989,20 @@ void InitializeRailGUI() */ DropDownList *GetRailTypeDropDownList(bool for_replacement, bool all_option) { - RailTypes used_railtypes = RAILTYPES_NONE; - - /* Find the used railtypes. */ - Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) { - if (!HasBit(e->info.climates, _settings_game.game_creation.landscape)) continue; - - used_railtypes |= GetRailTypeInfo(e->u.rail.railtype)->introduces_railtypes; - } - - /* Get the date introduced railtypes as well. */ - used_railtypes = AddDateIntroducedRailTypes(used_railtypes, MAX_DAY); + RailTypes used_railtypes; + RailTypes avail_railtypes; const Company *c = Company::Get(_local_company); + + /* Find the used railtypes. */ + if (for_replacement) { + avail_railtypes = GetCompanyRailtypes(c->index, false); + used_railtypes = GetRailTypes(false); + } else { + avail_railtypes = c->avail_railtypes; + used_railtypes = GetRailTypes(true); + } + DropDownList *list = new DropDownList(); if (all_option) { @@ -2030,9 +2030,9 @@ DropDownList *GetRailTypeDropDownList(bool for_replacement, bool all_option) StringID str = for_replacement ? rti->strings.replace_text : (rti->max_speed > 0 ? STR_TOOLBAR_RAILTYPE_VELOCITY : STR_JUST_STRING); DropDownListParamStringItem *item; if (for_replacement) { - item = new DropDownListParamStringItem(str, rt, !HasBit(c->avail_railtypes, rt)); + item = new DropDownListParamStringItem(str, rt, !HasBit(avail_railtypes, rt)); } else { - DropDownListIconItem *iconitem = new DropDownListIconItem(rti->gui_sprites.build_x_rail, PAL_NONE, str, rt, !HasBit(c->avail_railtypes, rt)); + DropDownListIconItem *iconitem = new DropDownListIconItem(rti->gui_sprites.build_x_rail, PAL_NONE, str, rt, !HasBit(avail_railtypes, rt)); iconitem->SetDimension(d); item = iconitem; } From d0e8060182503627e17b74b4fa4c2b2637020f1a Mon Sep 17 00:00:00 2001 From: glx Date: Sun, 31 Mar 2019 03:15:20 +0200 Subject: [PATCH 601/622] Fix 6fc60d8c4f: forgot to update API changelog --- src/script/api/ai_changelog.hpp | 2 ++ src/script/api/game_changelog.hpp | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index 3735908011..c6a790f865 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -24,6 +24,8 @@ * \li AIGroup::SetSecondaryColour * \li AIGroup::GetPrimaryColour * \li AIGroup::GetSecondaryColour + * \li AIVehicle::BuildVehicleWithRefit + * \li AIVehicle::GetBuildWithRefitCapacity * * \b 1.9.0 * diff --git a/src/script/api/game_changelog.hpp b/src/script/api/game_changelog.hpp index 1ba2549734..04bc893c18 100644 --- a/src/script/api/game_changelog.hpp +++ b/src/script/api/game_changelog.hpp @@ -19,6 +19,10 @@ * * This version is not yet released. The following changes are not set in stone yet. * + * API additions: + * \li GSVehicle::BuildVehicleWithRefit + * \li GSVehicle::GetBuildWithRefitCapacity + * * \b 1.9.0 * * API additions: From 66bed86bbb76ff799e79df1796535f592af81a1f Mon Sep 17 00:00:00 2001 From: peter1138 Date: Mon, 25 Feb 2019 13:07:22 +0000 Subject: [PATCH 602/622] Fix #7062, Revert 7af53d7588: Don't test ship max order distance when pathfinding. --- src/ship_cmd.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index c04d3e1e2f..6c2d09a161 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -466,8 +466,8 @@ static Track ChooseShipTrack(Ship *v, TileIndex tile, DiagDirection enterdir, Tr bool path_found = true; Track track; - if (v->dest_tile == 0 || DistanceManhattan(tile, v->dest_tile) > SHIP_MAX_ORDER_DISTANCE + 5) { - /* No destination or destination too far, don't invoke pathfinder. */ + if (v->dest_tile == 0) { + /* No destination, don't invoke pathfinder. */ track = TrackBitsToTrack(v->state); if (!IsDiagonalTrack(track)) track = TrackToOppositeTrack(track); if (!HasBit(tracks, track)) track = FindFirstTrack(tracks); From f656f5e8eb8835aad2ad19ca9ade253666b17089 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Mon, 25 Feb 2019 13:07:29 +0000 Subject: [PATCH 603/622] Change: Remove ship max order distance. It is skipped when NPF is in use. It is trivial to work around by adding and removing dummy orders. It is mostly alleviated by the ship path cache in YAPF. --- src/order_cmd.cpp | 37 ------------------------------------- src/ship.h | 2 -- 2 files changed, 39 deletions(-) diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index dae6e58ad6..2bfe5d29bf 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -23,7 +23,6 @@ #include "core/random_func.hpp" #include "aircraft.h" #include "roadveh.h" -#include "ship.h" #include "station_base.h" #include "waypoint_base.h" #include "company_base.h" @@ -900,42 +899,6 @@ CommandCost CmdInsertOrder(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 if (!Order::CanAllocateItem()) return_cmd_error(STR_ERROR_NO_MORE_SPACE_FOR_ORDERS); if (v->orders.list == NULL && !OrderList::CanAllocateItem()) return_cmd_error(STR_ERROR_NO_MORE_SPACE_FOR_ORDERS); - if (v->type == VEH_SHIP && _settings_game.pf.pathfinder_for_ships != VPF_NPF) { - /* Make sure the new destination is not too far away from the previous */ - const Order *prev = NULL; - uint n = 0; - - /* Find the last goto station or depot order before the insert location. - * If the order is to be inserted at the beginning of the order list this - * finds the last order in the list. */ - const Order *o; - FOR_VEHICLE_ORDERS(v, o) { - switch (o->GetType()) { - case OT_GOTO_STATION: - case OT_GOTO_DEPOT: - case OT_GOTO_WAYPOINT: - prev = o; - break; - - default: break; - } - if (++n == sel_ord && prev != NULL) break; - } - if (prev != NULL) { - uint dist; - if (new_order.IsType(OT_CONDITIONAL)) { - /* The order is not yet inserted, so we have to do the first iteration here. */ - dist = GetOrderDistance(prev, v->GetOrder(new_order.GetConditionSkipToOrder()), v); - } else { - dist = GetOrderDistance(prev, &new_order, v); - } - - if (dist >= SHIP_MAX_ORDER_DISTANCE) { - return_cmd_error(STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION); - } - } - } - if (flags & DC_EXEC) { Order *new_o = new Order(); new_o->AssignOrder(new_order); diff --git a/src/ship.h b/src/ship.h index 60d4466d68..6f818efb2c 100644 --- a/src/ship.h +++ b/src/ship.h @@ -57,8 +57,6 @@ struct Ship FINAL : public SpecializedVehicle { void SetDestTile(TileIndex tile); }; -static const uint SHIP_MAX_ORDER_DISTANCE = 130; - /** * Iterate over all ships. * @param var The variable used for iteration. From f0336f1f170ae4ef3a3bb98435b33807fbadad7a Mon Sep 17 00:00:00 2001 From: peter1138 Date: Mon, 25 Feb 2019 17:38:11 +0000 Subject: [PATCH 604/622] Codechange: Remove ship max order distance from script API. --- src/script/api/script_engine.cpp | 3 --- src/script/api/script_vehicle.cpp | 3 --- 2 files changed, 6 deletions(-) diff --git a/src/script/api/script_engine.cpp b/src/script/api/script_engine.cpp index 1fe16321b5..c564cee972 100644 --- a/src/script/api/script_engine.cpp +++ b/src/script/api/script_engine.cpp @@ -256,9 +256,6 @@ if (!IsValidEngine(engine_id)) return 0; switch (GetVehicleType(engine_id)) { - case ScriptVehicle::VT_WATER: - return _settings_game.pf.pathfinder_for_ships != VPF_NPF ? 129 : 0; - case ScriptVehicle::VT_AIR: return ::Engine::Get(engine_id)->GetRange() * ::Engine::Get(engine_id)->GetRange(); diff --git a/src/script/api/script_vehicle.cpp b/src/script/api/script_vehicle.cpp index 46fae0a917..f5023d12ce 100644 --- a/src/script/api/script_vehicle.cpp +++ b/src/script/api/script_vehicle.cpp @@ -472,9 +472,6 @@ const ::Vehicle *v = ::Vehicle::Get(vehicle_id); switch (v->type) { - case VEH_SHIP: - return _settings_game.pf.pathfinder_for_ships != VPF_NPF ? 129 : 0; - case VEH_AIRCRAFT: return ::Aircraft::From(v)->acache.cached_max_range_sqr; From cb449049ff74d83fb13ec4e7b4f52911ad9deb2b Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 31 Mar 2019 19:45:45 +0200 Subject: [PATCH 605/622] Update: Translations from eints english (us): 3 changes by Supercheese spanish (mexican): 18 changes by Absay hungarian: 2 changes by Brumi latin: 33 changes by Supercheese --- src/lang/english_US.txt | 4 +++- src/lang/hungarian.txt | 2 ++ src/lang/latin.txt | 34 +++++++++++++++++++++++++++++++++- src/lang/spanish_MX.txt | 20 ++++++++++++++++++-- 4 files changed, 56 insertions(+), 4 deletions(-) diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 8259ae8076..62193bd46a 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1184,7 +1184,7 @@ STR_CONFIG_SETTING_AUTOSLOPE :Allow terraform STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Allow terraforming under buildings and tracks without removing them STR_CONFIG_SETTING_CATCHMENT :Allow more realistically sized catchment areas: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Have differently sized catchment areas for different types of stations and airports -STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Company stations can serve industries with attached neutral stations: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Company stations can serve industries that have built-in neutral stations: {STRING} STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :When enabled, industries with attached stations (such as Oil Rigs) may also be served by company owned stations built nearby. When disabled, these industries may only be served by their attached stations. Any nearby company stations won't be able to serve them, nor will the attached station serve anything else other than the industry STR_CONFIG_SETTING_EXTRADYNAMITE :Allow removal of more town-owned roads, bridges and tunnels: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Make it easier to remove town-owned infrastructure and buildings @@ -3437,6 +3437,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Ungrouped road STR_GROUP_DEFAULT_SHIPS :Ungrouped ships STR_GROUP_DEFAULT_AIRCRAFTS :Ungrouped aircraft +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groups - click on a group to list all vehicles of this group. Drag and drop groups to arrange hierarchy. STR_GROUP_CREATE_TOOLTIP :{BLACK}Click to create a group @@ -4474,6 +4475,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Can't cr STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Can't delete this group... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Can't rename group... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Can't set parent group... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... loops in the group hierarchy are not allowed STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Can't remove all vehicles from this group... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Can't add the vehicle to this group... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Can't add shared vehicles to group... diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 6956ee09a3..eae7abaec9 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -3501,6 +3501,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Csoportosítatl STR_GROUP_DEFAULT_SHIPS :Csoportosítatlan hajók STR_GROUP_DEFAULT_AIRCRAFTS :Csoportosítatlan repülők +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Csoportok - Kattints a csoport nevére a járművek listázásához. Húzással a csoportokat hierarchiába rendezheted. STR_GROUP_CREATE_TOOLTIP :{BLACK}Csoport létrehozásához kattints ide @@ -4538,6 +4539,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Csoport STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Csoport törlése sikertelen... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Csoport átnevezése sikertelen... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Nem teheted ezt a csoportot a másik alcsoportjává... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... kört okozna a csoporthierarchiában STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Csoport járműveinek törlése sikertelen... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Jármű hozzáadása a csoporthoz sikertelen... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Megosztott jármű csoporthoz való hozzáadása sikertelen... diff --git a/src/lang/latin.txt b/src/lang/latin.txt index d824f9a5b2..bb8d584085 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -1005,6 +1005,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Praeses) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}Novum oppidum {1:TOWN} constructum expensis a {0:STRING} comparatis! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Novum oppidum nomine {TOWN} conditum! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Nov{G us a um i ae a} {STRING} construitur apud {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}Nov{G us a um i ae a} {STRING} adsit{G 0 us a um i ae a} apud {TOWN}! @@ -1176,11 +1177,16 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :alia STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Magnitudo interfaciei STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Eligere magnitudinem interfaciei adhibendam -STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Solita +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Simplex STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Duplex STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Quadruplex +STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Magnitudo Litterarum +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Eligere magnitudinem litterarum adhibendam +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Simplex +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Duplex +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Quadruplex STR_GAME_OPTIONS_BASE_GRF :{BLACK}Fundamentum graphicum STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Eligere fundamentum graphicum adhibendum @@ -1364,6 +1370,7 @@ STR_CONFIG_SETTING_AUTOSLOPE :Sinere terram p STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Sinere terram plasmare sub aedificia et vias; tum necesse non est aedificia viasve removere STR_CONFIG_SETTING_CATCHMENT :Sinere magnitudines regionum acceptionis magis realisticas esse: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Si electa, aeroportus et alii stationum typi habent meliores regiones acceptionis +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Stationes societatum licet operari industriis quae proprias stationes habent: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE :Sinere plures vias, pontes, et cuniculos removere in oppidis: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Si electa, infrastructura et aedificia oppidorum sunt magis facilia remotu STR_CONFIG_SETTING_TRAIN_LENGTH :Longitudo traminum maxima: {STRING} @@ -1449,6 +1456,8 @@ STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Non lice STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Tuitio infrastructurae: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Electa, infrastructura prodit expensa tuitionis. Expensa crescunt celerius quam pro portione magnitudini retis, ergo societates magnae affectantur magis quam parvae +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Societatis color initialis: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Eligere colorem initialem societatis STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Aeroportus numquam recedunt: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Electa, omnes aeroportuum typi permanent post introductionem @@ -1761,6 +1770,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Electa, licet l STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Non licet STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Licet STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Licet, atque propria dispositio oppidi +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Productionis urbani modus: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Quot onera aedificia oppidorum faciunt.{}Modus quadraticus: Oppidum duplarum incolarum, quadruplex faciat vectores.{}Modus linearis: Oppidum duplarum incolarum, duplex faciat vectores. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadraticus (originalis) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linearis STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Positio arborum in ludo: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Quomodo arbores apparent intra ludum. Forsitan industriae afficiuntur quibus necesse sunt arbores, e.g. castra lignatorum @@ -2262,6 +2275,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Disiunge STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servatrum tutum est. Tesseram inscribe STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Societas tuta est. Tesseram inscribe +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Index clientum # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Index clientum @@ -2902,6 +2916,7 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_CURRENT :{WHITE}Currens STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms @@ -2938,6 +2953,8 @@ STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Nulla in STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} STR_SAVELOAD_FILTER_TITLE :{BLACK}Series colans: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Superscribere Fasciculo +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Esne certus te velle superscribere huic fasciculo? STR_SAVELOAD_OSKTITLE :{BLACK}Inscribe nomen ludi @@ -3055,7 +3072,12 @@ STR_NEWGRF_SETTINGS_VERSION :{BLACK}Editio: STR_NEWGRF_SETTINGS_MIN_VERSION :{BLACK}Editio congrua minima: {SILVER}{NUM} STR_NEWGRF_SETTINGS_MD5SUM :{BLACK}MD5sum: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Coloris tabula: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Solita (D) +STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Solita (D) / 32 bpp +STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Antiqua (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Antiqua (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parametra: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Nulla STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Nulla indicia parabilia STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Par fasciculus non inventus @@ -3136,6 +3158,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Lectio post ter STR_NEWGRF_ERROR_GRM_FAILED :Opes GRF desideratae non parabiles (spiritus {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} neglectus est a {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Irrita/ignota dispositio spiritus (spiritus {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Nimis elementa in indice possessionum (spiritus {3:NUM}, elementum {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Revocatio productionis industriae irrita (spiritus {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Maxime Cavendum Est! @@ -3167,6 +3191,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF ' STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Indicium oneris/reficiendi '{1:ENGINE}' post constructionem differt eo quod est in indice emptionis. Ergo fortasse autoredemptio/automutatio non possit reficere STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' facit ut versatur ad infinitum in revocatione productionis STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Revocatio {1:HEX} reddidit conlationem ignotam irritamve {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' reddidit onus irritum in revocatione productionis apud {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : @@ -3310,6 +3335,7 @@ STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Preme in # Story book window STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Librum Fabularum STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Librum Fabularum Universale +STR_STORY_BOOK_SPECTATOR :Librum Fabularum Universale STR_STORY_BOOK_TITLE :{YELLOW}{STRING} STR_STORY_BOOK_GENERIC_PAGE_ITEM :Pagina {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Salire ad quamdam paginam eligendo eam in hac indice @@ -3570,6 +3596,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Vehicula viaria STR_GROUP_DEFAULT_SHIPS :Naves sine grege STR_GROUP_DEFAULT_AIRCRAFTS :Aeroplana sine grege +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Greges - preme in gregem ut index vehiculorum huius gregis ostendeatur. Trahe poneque greges ut ordinentur. STR_GROUP_CREATE_TOOLTIP :{BLACK}Preme ut grex creatur @@ -3603,6 +3630,7 @@ STR_BUY_VEHICLE_SHIP_CAPTION :Naves Novae STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Aeroplana Nova STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Pretium: {GOLD}{CURRENCY_LONG}{BLACK} Pondus: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Pretium: {GOLD}{CURRENCY_LONG}{BLACK} (Pretium Reficiendi: {GOLD}{CURRENCY_LONG}{BLACK}) Pondus: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Velocitas: {GOLD}{VELOCITY}{BLACK} Potestas: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Velocitas: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Velocitas in mare: {GOLD}{VELOCITY} @@ -3613,12 +3641,15 @@ STR_PURCHASE_INFO_REFITTABLE :(refectabilis) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Productum: {GOLD}{NUM}{BLACK} Aetas: {GOLD}{COMMA} ann{P us i} STR_PURCHASE_INFO_RELIABILITY :{BLACK}Constantia Maxima: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Pretium: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Pretium: {GOLD}{CURRENCY_LONG}{BLACK} (Pretium Reficiendi: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Pondus: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Pretium: {GOLD}{CURRENCY_LONG}{BLACK} Velocitas: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Pretium: {GOLD}{CURRENCY_LONG}{BLACK} (Pretium Reficiendi: {GOLD}{CURRENCY_LONG}{BLACK}) Velocitas: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacitas: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Currus Potentiati: {GOLD}+{POWER}{BLACK} Pondus: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Refectabilis: {GOLD}{STRING.dat} STR_PURCHASE_INFO_ALL_TYPES :Omnibus onerum typis +STR_PURCHASE_INFO_NONE :Nulla STR_PURCHASE_INFO_ALL_BUT :Omnibus praeterquam {CARGO_LIST.dat} STR_PURCHASE_INFO_MAX_TE :{BLACK}Vis Tractionis Maxima: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Max. distantia volatus: {GOLD}{COMMA} tegulas @@ -4028,6 +4059,7 @@ STR_ORDER_CONDITIONAL_AGE :aetas (annorum) STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :ministrandum STR_ORDER_CONDITIONAL_UNCONDITIONALLY :semper STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :aetas reliqua (anni) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Constantia maxima STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Quomodo valores electi componuntur indicio vehiculi STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :aequalis est diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 13efafbf8c..04eb6c7fdb 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1258,7 +1258,7 @@ STR_CONFIG_SETTING_PLANE_SPEED :Factor de veloc STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Establece la velocidad relativa de las aeronaves comparada con la de otros vehículos para reducir las utilidades de transportación aérea STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1/{COMMA} STR_CONFIG_SETTING_PLANE_CRASHES :Cantidad de accidentes aéreos: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Probabilidad de que ocurran accidentes aéreos +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Probabilidad de que ocurran accidentes aéreos.{}* Las aeronaves grandes son más propensas a accidentes en areopuertos pequeños STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Ninguno* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Reducida STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal @@ -1584,6 +1584,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Los jugadores p STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Prohibido STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Permitido STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Permitido, diseño urbano personalizado +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Generación de cargamento en pueblios: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Cantidad de cargamento producido por las casas con relación a la población.{}Crecimiento cuadrado: un pueblo de doble tamaño genera el cuádruple de pasajeros.{}Crecimiento lineal: un pueblo de doble tamaño genera el doble de pasajeros. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Cuadrado +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineal STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Crecimiento de árboles durante la partida: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Controlar la aparición aleatoria de árboles durante la partida. Esto puede afectar industrias que dependen del crecimiento de árboles, como los aserraderos @@ -2134,7 +2138,7 @@ STR_NETWORK_CHAT_ALL :[Todos] {STRING STR_NETWORK_CHAT_OSKTITLE :{BLACK}Introducir mensaje para el chat en red # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}No se encontraron ni compilaron dispositivos sin soporte de red +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}No se encontraron dispositivos de red STR_NETWORK_ERROR_NOSERVER :{WHITE}No se pudo encontrar ninguna partida en red STR_NETWORK_ERROR_NOCONNECTION :{WHITE}El servidor no responde a la petición STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}No se pudo conectar debido a incompatibilidad de NewGRF @@ -3027,6 +3031,7 @@ STR_NEWGRF_BUGGY :{WHITE}El NewGR STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}La información de cargamento o reequipamiento para '{1:ENGINE}' difiere de la lista de compra después de la construcción. Esto puede causar que la renovación y el reemplazo automático no haga el reequipamiento correcta STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' ha causado un bucle sin fin en la llamada de producción STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}La llamada {1:HEX} devolvió un resultado desconocido o no válido {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' retornó un tipo inválido de cargamento en la llamada de producción en {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : @@ -3464,6 +3469,7 @@ STR_BUY_VEHICLE_SHIP_CAPTION :Nuevos barcos STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nuevas aeronaves STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Costo: {GOLD}{CURRENCY_LONG}{BLACK} Peso: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Costo: {GOLD}{CURRENCY_LONG}{BLACK} (Costo de reformación: {GOLD}{CURRENCY_LONG}{BLACK}) Peso: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Velocidad: {GOLD}{VELOCITY}{BLACK} Potencia: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Velocidad: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Velocidad en océano: {GOLD}{VELOCITY} @@ -3474,8 +3480,10 @@ STR_PURCHASE_INFO_REFITTABLE :(reequipable) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Diseñado: {GOLD}{NUM}{BLACK} Duración: {GOLD}{COMMA} año{P "" s} STR_PURCHASE_INFO_RELIABILITY :{BLACK}Máx. fiabilidad: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Costo: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Costo: {GOLD}{CURRENCY_LONG}{BLACK} (Costo de reformación: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Peso: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Costo: {GOLD}{CURRENCY_LONG}{BLACK} Velocidad: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Costo: {GOLD}{CURRENCY_LONG}{BLACK} (Costo de reformación: {GOLD}{CURRENCY_LONG}{BLACK}) Velocidad: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacidad: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Vagones con motor: {GOLD}+{POWER}{BLACK} Peso: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Reforma: {GOLD}{STRING} @@ -3496,12 +3504,20 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Comprar STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Comprar STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Comprar +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar y reformar tren +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar y reformar vehículo +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar y reformar barco +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar y reformar aeronave STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar el tren elegido. Mayús+Clic muestra una estimación del precio sin realizar la compra STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar el vehículo de carretera elegido. Mayús+Clic muestra una estimación del precio sin realizar la compra STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar el barco elegido. Mayús+Clic muestra una estimación del precio sin realizar la compra STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar la aeronave elegida. Mayús+Clic muestra una estimación del precio sin realizar la compra +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar y reformar tren seleccionado. Mayús+Clic muestra una estimación del precio sin realizar la compra +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar y reformar vehículo seleccionado. Mayús+Clic muestra una estimación del precio sin realizar la compra +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar y reformar barco seleccionado. Mayús+Clic muestra una estimación del precio sin realizar la compra +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar y reformar areonave seleccionada. Mayús+Clic muestra una estimación del precio sin realizar la compra STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Cambiar nombre STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Cambiar nombre From 92d5835495f56a0f145a18d428764737d39be920 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 1 Apr 2019 19:45:46 +0200 Subject: [PATCH 606/622] Update: Translations from eints dutch: 2 changes by JanWillem french: 19 changes by glx --- src/lang/dutch.txt | 4 ++-- src/lang/french.txt | 22 +++++++++++++++++++--- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index aadc6d996a..a4c5e772fd 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -98,7 +98,7 @@ STR_QUANTITY_NOTHING : STR_QUANTITY_PASSENGERS :{COMMA}{NBSP}passagier{P "" s} STR_QUANTITY_COAL :{WEIGHT_LONG} kolen STR_QUANTITY_MAIL :{COMMA}{NBSP}zak{P "" ken} post -STR_QUANTITY_OIL :{VOLUME_LONG} Vaten olie +STR_QUANTITY_OIL :{VOLUME_LONG} vaten olie STR_QUANTITY_LIVESTOCK :{COMMA}{NBSP}stuk{P "" s} vee STR_QUANTITY_GOODS :{COMMA}{NBSP}krat{P "" ten} goederen STR_QUANTITY_GRAIN :{WEIGHT_LONG} graan @@ -2857,7 +2857,7 @@ STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Verander # Map generation progress STR_GENERATION_WORLD :{WHITE}Bezig met wereldontwikkeling... STR_GENERATION_ABORT :{BLACK}Stop -STR_GENERATION_ABORT_CAPTION :{WHITE}Stop Wereldontwikkeling +STR_GENERATION_ABORT_CAPTION :{WHITE}Wereldontwikkeling stoppen STR_GENERATION_ABORT_MESSAGE :{YELLOW}Weet je zeker dat je de actie wilt stoppen? STR_GENERATION_PROGRESS :{WHITE}{NUM}% compleet STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} diff --git a/src/lang/french.txt b/src/lang/french.txt index 4ad86768c6..4fedabb414 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1185,7 +1185,8 @@ STR_CONFIG_SETTING_AUTOSLOPE :Terrassement so STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Autoriser le terrassement sous les bâtiments et les voies sans les retirer STR_CONFIG_SETTING_CATCHMENT :Autoriser des zones de desserte plus réalistes{NBSP}: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Les zones de desserte ont des tailles différentes selon les types de stations et d'aéroports -STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Si activé, les industries avec une station intégré (comme les plateformes pétrolière) peuvent aussi être servi par les stations des compagnies construites à proximité. Si désactivé, ces industries peuvent uniquement être servi par leur station intégré. Aucune station de compagnie ne pourra servir cette industrie, et la station intégré ne pourra servir que pour cette industrie. +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Les stations des compagnies peuvent desservir les industries avec une station intégrée{NBSP}: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Si activé, les industries avec une station intégrée (comme les plateformes pétrolières) peuvent aussi être desservies par les stations des compagnies construites à proximité. Si désactivé, ces industries peuvent uniquement être desservies par leur station intégrée. Aucune station de compagnie ne pourra desservir cette industrie, et la station intégrée ne desservira que cette industrie. STR_CONFIG_SETTING_EXTRADYNAMITE :Permettre le retrait de plus d'éléments possédés par une ville{NBSP}: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Simplifier le retrait d'éléments possédés par une ville STR_CONFIG_SETTING_TRAIN_LENGTH :Longueur maximum des trains{NBSP}: {STRING} @@ -1585,6 +1586,10 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Activer ce para STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Interdit STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Autorisé STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Autorisé, y compris l'agencement personnalisé des routes +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Génération des marchandises des villes{NBSP}: {STRING} +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Combien de marchandises sont produites par les maisons dans les villes, relativement à la population globale de la ville.{}Croissance quadratique{NBSP}: une ville deux fois plus grande génère quatre fois plus de passagers.{}Croissance linéaire{NBSP}: une ville deux fois plus grande génère deux fois plus de passagers. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadratique (original) +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linéaire STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Plantation d'arbres durant la partie{NBSP}: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Contrôle l'apparition aléatoire des arbres durant la partie. Cela peut affecter les industries qui dépendent de la croissance des arbres, par exemple les scieries @@ -2135,7 +2140,7 @@ STR_NETWORK_CHAT_ALL :[Tous] {STRING} STR_NETWORK_CHAT_OSKTITLE :{BLACK}Entrer le texte du clavardage # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Aucun périphérique réseau trouvé ou programme compilé sans ENABLE_NETWORK +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Aucun périphérique réseau trouvé STR_NETWORK_ERROR_NOSERVER :{WHITE}Aucune partie réseau n'a été trouvée STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Le serveur n'a pas répondu à la requête STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Échec de la connexion{NBSP}: NewGRF requis @@ -3028,6 +3033,7 @@ STR_NEWGRF_BUGGY :{WHITE}Le modul STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Les informations de cargaison/réaménagement pour "{1:ENGINE}" après sa construction sont différentes de celles de la liste d'achat. Cela peut causer un échec de réaménagement lors de l'auto-renouvellement/remplacement. STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}"{1:STRING}" a causé une boucle infinie dans la fonction de rappel de production STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback {1:HEX} a retourné un résultat invalide {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' a renvoyé un type de cargaison invalide dans la fonction de rappel de production à {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : @@ -3432,6 +3438,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Véhicules rout STR_GROUP_DEFAULT_SHIPS :Navires non groupés STR_GROUP_DEFAULT_AIRCRAFTS :Aéronefs non groupés +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groupes - Cliquer sur un groupe pour lister tous les véhicules de ce groupe. Glisser et déposer les groupes pour les hiérarchiser. STR_GROUP_CREATE_TOOLTIP :{BLACK}Créer un groupe de véhicules @@ -3465,6 +3472,7 @@ STR_BUY_VEHICLE_SHIP_CAPTION :Nouveaux navire STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nouvel aéronef STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Prix{NBSP}: {GOLD}{CURRENCY_LONG}{BLACK} − Poids{NBSP}: {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Coût{NBSP}: {GOLD}{CURRENCY_LONG}{BLACK} (Coût de réaménagement{NBSP}: {GOLD}{CURRENCY_LONG}{BLACK}) Poids{NBSP}: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Vitesse{NBSP}: {GOLD}{VELOCITY}{BLACK} − Puissance{NBSP}: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Vitesse{NBSP}: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Vitesse sur l'océan{NBSP}: {GOLD}{VELOCITY} @@ -3475,8 +3483,10 @@ STR_PURCHASE_INFO_REFITTABLE :(réaménageabl STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Conçu en{NBSP}: {GOLD}{NUM}{BLACK} − Durée de vie{NBSP}: {GOLD}{COMMA} an{P "" s} STR_PURCHASE_INFO_RELIABILITY :{BLACK}Fiabilité max.{NBSP}: {GOLD}{COMMA}{NBSP}% STR_PURCHASE_INFO_COST :{BLACK}Prix{NBSP}: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Coût{NBSP}: {GOLD}{CURRENCY_LONG}{BLACK} (Coût de réaménagement{NBSP}: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Poids{NBSP}: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Prix{NBSP}: {GOLD}{CURRENCY_LONG}{BLACK} − Vitesse{NBSP}: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Coût{NBSP}: {GOLD}{CURRENCY_LONG}{BLACK} (Coût de réaménagement{NBSP}: {GOLD}{CURRENCY_LONG}{BLACK}) Vitesse{NBSP}: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Capacité{NBSP}: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Wagons motorisés{NBSP}: {GOLD}+{POWER}{BLACK} − Poids{NBSP}: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Réaménageable pour{NBSP}: {GOLD}{STRING} @@ -3498,14 +3508,19 @@ STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Acheter STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Acheter STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :Achat et réaménagement du véhicule +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Acheter et réaménager STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :Acheter et réaménager le bateau +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Acheter et réaménager STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Acheter le véhicule sélectionné.{}Shift-clic pour afficher seulement le coût estimé. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Acheter le véhicule sélectionné.{}Shift-clic pour afficher seulement le coût estimé. STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Acheter le navire sélectionné.{}Shift-clic pour afficher seulement le coût estimé. STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Acheter l'aéronef sélectionné.{}Shift-clic pour afficher seulement le coût estimé. -STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :Acheter et réaménager le véhicule ferroviaire sélectionné. Shift+Click montre une estimation du coût sans acheter le véhicule. +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Acheter et réaménager le véhicule sélectionné.{}Shift-clic pour afficher seulement le coût estimé. +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Acheter et réaménager le véhicule sélectionné.{}Shift-clic pour afficher seulement le coût estimé. +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Acheter et réaménager le navire sélectionné.{}Shift-clic pour afficher seulement le coût estimé. +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Acheter et réaménager l'aéronef sélectionné.{}Shift-clic pour afficher seulement le coût estimé. STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Renommer STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Renommer @@ -4461,6 +4476,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Impossib STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Impossible de supprimer ce groupe... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Impossible de renommer le groupe... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Impossible de définir le groupe parent... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... les boucles ne sont pas autorisées dans la hiérarchie de groupe STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Impossible de retirer tous les véhicules de ce groupe... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Impossible d'ajouter le véhicule à ce groupe... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Impossible d'ajouter les véhicules partagés à ce groupe... From cebdd721467834efa7dc50583b4d835d0905b8a1 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Mon, 1 Apr 2019 18:22:54 +0200 Subject: [PATCH 607/622] Fix #7440: Remove town sign when deleting town, not add it once more --- src/town_cmd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index be5af4acff..d918fbceda 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -2871,7 +2871,7 @@ CommandCost CmdDeleteTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 /* The town destructor will delete the other things related to the town. */ if (flags & DC_EXEC) { _town_kdtree.Remove(t->index); - _viewport_sign_kdtree.Insert(ViewportSignKdtreeItem::MakeTown(t->index)); + _viewport_sign_kdtree.Remove(ViewportSignKdtreeItem::MakeTown(t->index)); delete t; } From 24fc25164a7c4efbf78d28ce9a3dbc22d1f45f5f Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 2 Apr 2019 19:45:45 +0200 Subject: [PATCH 608/622] Update: Translations from eints french: 3 changes by glx croatian: 17 changes by VoyagerOne --- src/lang/croatian.txt | 21 +++++++++++++++++---- src/lang/french.txt | 6 +++--- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 88408adc11..ba1ea05aa6 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -3121,7 +3121,7 @@ STR_NEWGRF_LIST_MISSING :{RED}Nedostaju STR_NEWGRF_BROKEN :{WHITE}Ponašanje NewGRF '{0:STRING}' će vjerojatno uzrokovati deharmonizaciju i/ili rušenje igre STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Promijenjen status motoriziranog vagona za '{1:ENGINE}' kad vozilo nije u spremištu. STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Ovo mijenja dužinu vozila za '{1:ENGINE}' kada vozilo nije unutar spremišta -STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Promijenilo je kapacitet vozila za '{1:ENGINE}' kada nije u spremšta ili se remontira +STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Promijenilo je kapacitet vozila za '{1:ENGINE}' kada nije u spremištu ili se prenamjenjuje STR_BROKEN_VEHICLE_LENGTH :{WHITE}Vlak'{VEHICLE}' koji pripada tvrtci '{COMPANY}' neispravne je dužine. Uzrok problema je vjerojatno u NewGRF datotekama. Igra će se možda deharmonizirati ili srušiti STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' daje netočne informacije @@ -3533,6 +3533,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Negrupirana ces STR_GROUP_DEFAULT_SHIPS :Negrupirani brodovi STR_GROUP_DEFAULT_AIRCRAFTS :Negrupirani zrakoplovi +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Grupe - kliknite na grupu kako bi izlistali sva vozila ove grupe. Povucite i prenesite grupe za postavljanje hijerarhije. STR_GROUP_CREATE_TOOLTIP :{BLACK}Klikni za kreiranje grupe @@ -3566,6 +3567,7 @@ STR_BUY_VEHICLE_SHIP_CAPTION :Novi brodovi STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Novi zrakoplov STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Cijena: {GOLD}{CURRENCY_LONG}{BLACK} Težina {GOLD}{WEIGHT_SHORT} +STR_PURCHASE_INFO_COST_REFIT_WEIGHT :{BLACK}Cijena : {GOLD}{CURRENCY_LONG}{BLACK} (Cijena prenamjene: {GOLD}{CURRENCY_LONG}{BLACK}) Težina: {GOLD}{WEIGHT_SHORT} STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Brzina: {GOLD}{VELOCITY}{BLACK} Snaga: {GOLD}{POWER} STR_PURCHASE_INFO_SPEED :{BLACK}Brzina: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Brzina na oceanu: {GOLD}{VELOCITY} @@ -3576,8 +3578,10 @@ STR_PURCHASE_INFO_REFITTABLE :(prenamjenjiv) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Dizajnirano: {GOLD}{NUM}{BLACK} Životni vijek: {GOLD}{COMMA} godina STR_PURCHASE_INFO_RELIABILITY :{BLACK}Najveća pouzdanost: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Cijena: {GOLD}{CURRENCY_LONG} +STR_PURCHASE_INFO_COST_REFIT :{BLACK}Cijena: {GOLD}{CURRENCY_LONG}{BLACK} (Cijena prenamjene: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Težina: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Trošak: {GOLD}{CURRENCY_LONG}{BLACK} Brzina: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Cijena: {GOLD}{CURRENCY_LONG}{BLACK} (Cijena prenamjene: {GOLD}{CURRENCY_LONG}{BLACK}) Brzina: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Nosivost: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK} Pokretni vagoni:.{GOLD}+{POWER}{BLACK} Težina: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Prenamjenjivo u: {GOLD}{STRING} @@ -3598,12 +3602,20 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Kupi voz STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Kupi brod STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Kupi zrakoplov +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kupi i prenamijeni vozilo +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kupi i prenamijeni vozilo +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kupi i prenamijeni brod +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Kupi i prenamijeni zrakoplov STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Kupi označeni vlak. Shift+Klik prikazuje trošak bez kupnje. STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Kupi označeno cestovno vozilo. Shift+Klik prikazuje trošak bez kupnje. STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Kupi označeni brod. Shift+Klik prikazuje trošak bez kupnje. STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Kupi označeni zrakoplov. Shift+Klik prikazuje trošak bez kupnje. +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kupi i prenamijeni označeni vlak. Shift+Klik prikazuje trošak bez kupnje. +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kupi i prenamijeni označeno cestovno vozilo. Shift+Klik prikazuje trošak bez kupnje. +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kupi i prenamijeni označeni brod. Shift+Klik prikazuje trošak bez kupnje. +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Kupi i prenamijeni označeni zrakoplov. Shift+Klik prikazuje trošak bez kupnje. STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Preimenuj STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_BUTTON :{BLACK}Preimenuj @@ -3907,9 +3919,9 @@ STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}Nosivost STR_REFIT_CAPTION :{WHITE}{VEHICLE} (Prenamijeni) STR_REFIT_TITLE :{GOLD}Odaberi vrstu tereta za prijevoz: STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Nova nosivost: {GOLD}{CARGO_LONG}{}{BLACK}Cijena prenamjene: {RED}{CURRENCY_LONG} -STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Novi kapacitet: {GOLD}{CARGO_LONG}{}{BLACK}Prihod od remonta: {GREEN}{CURRENCY_LONG} -STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Novi kapacitet: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Trošak remonta: {RED}{CURRENCY_LONG} -STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Novi kapacitet: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Prihod od remonta: {GREEN}{CURRENCY_LONG} +STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Novi kapacitet: {GOLD}{CARGO_LONG}{}{BLACK}Prihod od prenamjene: {GREEN}{CURRENCY_LONG} +STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Novi kapacitet: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Cijena prenamjene: {RED}{CURRENCY_LONG} +STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Novi kapacitet: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Prihod od prenamjene: {GREEN}{CURRENCY_LONG} STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Odaberi vozila za remont. Povlačenje mišem dopušta odabir više vozila. Klik na prazninu će označiti cijelo vozilo. Ctrl+Klik će označiti vozilo i niz koji slijedi. STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Odaberi vrstu tereta koju će vlak prevoziti @@ -4559,6 +4571,7 @@ STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Nije mog STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Nije moguće obrisati ovu grupu... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Nije moguće preimenovati ovu grupu... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Ne može se postaviti matična grupa... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... petlje u grupnoj hijerarhiji nisu dozvoljene STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Nije moguće ukloniti sva vozila iz ove grupe... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Nije moguće dodati vozila u ovu grupu STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Nije moguće dodati dijeljena vozila u grupu... diff --git a/src/lang/french.txt b/src/lang/french.txt index 4fedabb414..da51ab78d4 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -3026,14 +3026,14 @@ STR_NEWGRF_LIST_MISSING :{RED}Modules ma STR_NEWGRF_BROKEN :{WHITE}Le comportement du NewGRF "{0:STRING}" peut provoquer des erreurs de synchronisation et/ou des plantages STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Il a modifié l'état de wagon motorisé pour "{1:ENGINE}" en dehors du dépôt STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Il a modifié la longueur de véhicule pour "{1:ENGINE}" en dehors du dépôt -STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Il a changé la capacité pour '{1:ENGINE}' hors d'un dépôt ou d'un réaménagement +STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Il a changé la capacité pour "{1:ENGINE}" hors d'un dépôt ou d'un réaménagement STR_BROKEN_VEHICLE_LENGTH :{WHITE}Le train "{VEHICLE}" appartenant à "{COMPANY}" a une longueur invalide. Cela est probablement dû à des problèmes avec des NewGRFs, et peut provoquer des erreurs de synchronisation ou planter le jeu. STR_NEWGRF_BUGGY :{WHITE}Le module NewGRF "{0:STRING}" fournit une information incorrecte STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Les informations de cargaison/réaménagement pour "{1:ENGINE}" après sa construction sont différentes de celles de la liste d'achat. Cela peut causer un échec de réaménagement lors de l'auto-renouvellement/remplacement. STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}"{1:STRING}" a causé une boucle infinie dans la fonction de rappel de production -STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback {1:HEX} a retourné un résultat invalide {2:HEX} -STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' a renvoyé un type de cargaison invalide dans la fonction de rappel de production à {2:HEX} +STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}La fonction de rappel {1:HEX} a retourné un résultat invalide {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}"{1:STRING}" a renvoyé un type de cargaison invalide dans la fonction de rappel de production à {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : From c99f731f89533071669769f3d89950667f3be8f4 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Mon, 1 Apr 2019 20:15:49 +0200 Subject: [PATCH 609/622] Update: documentation updates from 1.9 branch --- changelog.txt | 32 ++++++++++++++++++++++++++++++++ os/debian/changelog | 18 ++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/changelog.txt b/changelog.txt index 1d9f8947ea..b181431ff6 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,33 @@ +1.9.0 (2019-04-01) +------------------------------------------------------------------------ +- Fix #7411: Use industry production callback (if used) on initial industry cargo generation (#7412) + + +1.9.0-RC2 (2019-03-24) +------------------------------------------------------------------------ +- Fix #7400: WaterClass for tree tiles was not converted for old saves preventing industry creation (#7405) +- Fix: Filtered file list did not scroll properly (#7402) +- Fix #7391: Don't invalidate go to depot orders of non-aircraft when invalidating hangar orders that happen to share IDs (#7392) +- Fix #7386: Measurement tooltip for tunnels, aqueducts & docks did not display or flickered (#7389) +- Fix: Wrong company performance rating when money exceeds INT_MAX (#7382) +- Fix: Permit loading of industry production callback with invalid cargo type (#7364) +- Fix: Spelling for a few real town names (#7338) +- Fix: Runway too short for large aircraft message should not depend on plane crashes setting (#7325) +- Fix #7334: Ship lost after crossing bridge due to path cache not being consumed while on final bridge end (#7335) + + +1.9.0-RC1 (2019-03-03) +------------------------------------------------------------------------ +- Add: Various AI/GS functions for vehicle groups (#7225) +- Change: Synchronise introduction date and reliability randomness across vehicles with the same base introduction date (#7147) +- Change: Allow towns to build bridges over rails and one-way roads (#7291) +- Fix: Detection of coast tiles with trees on them (#7309) +- Fix: Emergency netsave saved the title game instead of the broken game in question (#7298) +- Fix: Company livery window showed incorrect groups when opened in multiplayer (#7288) +- Fix: Unable to select last group in open livery window (#7283) +- Fix: Goto hangar orders were not invalidated when rebuilding airports (#7100) + + 1.9.0-beta3 (2019-02-24) ------------------------------------------------------------------------ - Feature: Option to adjust font size separately from GUI size (#7003) @@ -24,10 +54,12 @@ - Fix #7197: Invalidate depot buttons when necessary (#7212) - Doc: [AI] UnshareOrders empties the orders list of the vehicle + 1.9.0-beta2 (2019-02-09) ------------------------------------------------------------------------ - Fix: Non-Windows builds did not get correct git hash + 1.9.0-beta1 (2019-02-09) ------------------------------------------------------------------------ Note: OpenTTD was migrated to GitHub for 1.9, so SVN revision and FlySpray numbers have been replaced with Pull Requests and Issue numbers diff --git a/os/debian/changelog b/os/debian/changelog index 858c15371b..8c3b0cbf90 100644 --- a/os/debian/changelog +++ b/os/debian/changelog @@ -1,3 +1,21 @@ +openttd (1.9.0-0) unstable; urgency=low + + * New upstream release 1.9.0 + + -- OpenTTD Mon, 01 Apr 2019 00:00:00 +0200 + +openttd (1.9.0~RC2-0) unstable; urgency=low + + * New upstream release 1.9.0-RC2 + + -- OpenTTD Sun, 24 Mar 2019 23:00:00 +0000 + +openttd (1.9.0~RC1-0) unstable; urgency=low + + * New upstream release 1.9.0-RC1 + + -- OpenTTD Sun, 3 Mar 2019 23:00:00 +0000 + openttd (1.9.0~beta3-0) unstable; urgency=low * New upstream release 1.9.0-beta3 From 8114bad0334f856e2d55be9fb5eb05c46c039960 Mon Sep 17 00:00:00 2001 From: peter1138 Date: Thu, 4 Apr 2019 22:37:18 +0100 Subject: [PATCH 610/622] Fix #7469: Desync when using build and refit feature. --- src/vehicle_cmd.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 059f608379..eb7fc96548 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -31,6 +31,7 @@ #include "ship.h" #include "newgrf.h" #include "company_base.h" +#include "core/random_func.hpp" #include "table/strings.h" @@ -131,6 +132,11 @@ CommandCost CmdBuildVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint DoCommandFlag subflags = flags; if (refitting) subflags |= DC_EXEC; + /* Vehicle construction needs random bits, so we have to save the random + * seeds to prevent desyncs. */ + SavedRandomSeeds saved_seeds; + if (flags != subflags) SaveRandomSeeds(&saved_seeds); + Vehicle *v = NULL; switch (type) { case VEH_TRAIN: value.AddCost(CmdBuildRailVehicle(tile, subflags, e, GB(p1, 24, 8), &v)); break; @@ -179,6 +185,8 @@ CommandCost CmdBuildVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1, uint } } + if (flags != subflags) RestoreRandomSeeds(saved_seeds); + return value; } From fb6e31ca43b10b40fcaf1db0596dfaa48a1ecf20 Mon Sep 17 00:00:00 2001 From: Samu Date: Fri, 5 Apr 2019 00:19:18 +0100 Subject: [PATCH 611/622] Cleanup 3f32711: Don't apply forbid 90 deg turn settings for ships. --- src/ship_cmd.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 6c2d09a161..93019020ad 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -509,8 +509,6 @@ static inline TrackBits GetAvailShipTracks(TileIndex tile, DiagDirection dir, Tr { TrackBits tracks = GetTileShipTrackStatus(tile) & DiagdirReachesTracks(dir); - if (_settings_game.pf.forbid_90_deg) tracks &= ~TrackCrossesTracks(TrackdirToTrack(trackdir)); - return tracks; } From a1e492d0d8970217800ebd78d328c9ddf0f13a31 Mon Sep 17 00:00:00 2001 From: glx22 Date: Fri, 5 Apr 2019 15:11:52 +0200 Subject: [PATCH 612/622] Fix #7439: don't overwrite CompanyRemoveReason with ClientID (#7465) --- src/ai/ai_gui.cpp | 2 +- src/company_cmd.cpp | 9 ++++----- src/console_cmds.cpp | 6 +++--- src/economy.cpp | 2 +- src/network/network_server.cpp | 4 ++-- 5 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 8b00de988e..2730070c32 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -1282,7 +1282,7 @@ struct AIDebugWindow : public Window { case WID_AID_RELOAD_TOGGLE: if (ai_debug_company == OWNER_DEITY) break; /* First kill the company of the AI, then start a new one. This should start the current AI again */ - DoCommandP(0, CCA_DELETE | ai_debug_company << 16, CRR_MANUAL, CMD_COMPANY_CTRL); + DoCommandP(0, CCA_DELETE | ai_debug_company << 16 | CRR_MANUAL << 24, 0, CMD_COMPANY_CTRL); DoCommandP(0, CCA_NEW_AI | ai_debug_company << 16, 0, CMD_COMPANY_CTRL); break; diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 4d8750851f..df0588f919 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -807,10 +807,9 @@ void CompanyAdminRemove(CompanyID company_id, CompanyRemoveReason reason) * @param flags operation to perform * @param p1 various functionality * - bits 0..15: CompanyCtrlAction - * - bits 16..24: CompanyID - * @param p2 various depending on CompanyCtrlAction - * - bits 0..31: ClientID (with CCA_NEW) - * - bits 0..1: CompanyRemoveReason (with CCA_DELETE) + * - bits 16..23: CompanyID + * - bits 24..31: CompanyRemoveReason (with CCA_DELETE) + * @param p2 ClientID * @param text unused * @return the cost of this operation or an error */ @@ -880,7 +879,7 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 } case CCA_DELETE: { // Delete a company - CompanyRemoveReason reason = (CompanyRemoveReason)GB(p2, 0, 2); + CompanyRemoveReason reason = (CompanyRemoveReason)GB(p1, 24, 8); if (reason >= CRR_END) return CMD_ERROR; Company *c = Company::GetIfValid(company_id); diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 1d3e9c52c4..00b9536946 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -825,7 +825,7 @@ DEF_CONSOLE_CMD(ConResetCompany) } /* It is safe to remove this company */ - DoCommandP(0, CCA_DELETE | index << 16, CRR_MANUAL, CMD_COMPANY_CTRL); + DoCommandP(0, CCA_DELETE | index << 16 | CRR_MANUAL << 24, 0, CMD_COMPANY_CTRL); IConsolePrint(CC_DEFAULT, "Company deleted."); return true; @@ -1200,7 +1200,7 @@ DEF_CONSOLE_CMD(ConReloadAI) } /* First kill the company of the AI, then start a new one. This should start the current AI again */ - DoCommandP(0, CCA_DELETE | company_id << 16, CRR_MANUAL, CMD_COMPANY_CTRL); + DoCommandP(0, CCA_DELETE | company_id << 16 | CRR_MANUAL << 24, 0,CMD_COMPANY_CTRL); DoCommandP(0, CCA_NEW_AI | company_id << 16, 0, CMD_COMPANY_CTRL); IConsolePrint(CC_DEFAULT, "AI reloaded."); @@ -1237,7 +1237,7 @@ DEF_CONSOLE_CMD(ConStopAI) } /* Now kill the company of the AI. */ - DoCommandP(0, CCA_DELETE | company_id << 16, CRR_MANUAL, CMD_COMPANY_CTRL); + DoCommandP(0, CCA_DELETE | company_id << 16 | CRR_MANUAL << 24, 0, CMD_COMPANY_CTRL); IConsolePrint(CC_DEFAULT, "AI stopped, company deleted."); return true; diff --git a/src/economy.cpp b/src/economy.cpp index d1ebd8a042..07dec815a6 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -640,7 +640,7 @@ static void CompanyCheckBankrupt(Company *c) * that changing the current company is okay. In case of single * player we are sure (the above check) that we are not the local * company and thus we won't be moved. */ - if (!_networking || _network_server) DoCommandP(0, CCA_DELETE | (c->index << 16), CRR_BANKRUPT, CMD_COMPANY_CTRL); + if (!_networking || _network_server) DoCommandP(0, CCA_DELETE | (c->index << 16) | (CRR_BANKRUPT << 24), 0, CMD_COMPANY_CTRL); break; } } diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 36dde0f2cf..1bcd7ca127 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -1673,7 +1673,7 @@ static void NetworkAutoCleanCompanies() /* Is the company empty for autoclean_unprotected-months, and is there no protection? */ if (_settings_client.network.autoclean_unprotected != 0 && _network_company_states[c->index].months_empty > _settings_client.network.autoclean_unprotected && StrEmpty(_network_company_states[c->index].password)) { /* Shut the company down */ - DoCommandP(0, CCA_DELETE | c->index << 16, CRR_AUTOCLEAN, CMD_COMPANY_CTRL); + DoCommandP(0, CCA_DELETE | c->index << 16 | CRR_AUTOCLEAN << 24, 0, CMD_COMPANY_CTRL); IConsolePrintF(CC_DEFAULT, "Auto-cleaned company #%d with no password", c->index + 1); } /* Is the company empty for autoclean_protected-months, and there is a protection? */ @@ -1687,7 +1687,7 @@ static void NetworkAutoCleanCompanies() /* Is the company empty for autoclean_novehicles-months, and has no vehicles? */ if (_settings_client.network.autoclean_novehicles != 0 && _network_company_states[c->index].months_empty > _settings_client.network.autoclean_novehicles && vehicles_in_company[c->index] == 0) { /* Shut the company down */ - DoCommandP(0, CCA_DELETE | c->index << 16, CRR_AUTOCLEAN, CMD_COMPANY_CTRL); + DoCommandP(0, CCA_DELETE | c->index << 16 | CRR_AUTOCLEAN << 24, 0, CMD_COMPANY_CTRL); IConsolePrintF(CC_DEFAULT, "Auto-cleaned company #%d with no vehicles", c->index + 1); } } else { From 90a91f1d0daf4e043d3ee3212eb77c19c7247e1d Mon Sep 17 00:00:00 2001 From: glx22 Date: Fri, 5 Apr 2019 21:07:06 +0200 Subject: [PATCH 613/622] Fix: [MSVC] don't force SDK version (#7474) --- projects/generate_vs142.vcxproj | 1 - projects/settingsgen_vs142.vcxproj | 1 - projects/strgen_vs142.vcxproj | 1 - 3 files changed, 3 deletions(-) diff --git a/projects/generate_vs142.vcxproj b/projects/generate_vs142.vcxproj index 3e55d7a1d4..7230676cb5 100644 --- a/projects/generate_vs142.vcxproj +++ b/projects/generate_vs142.vcxproj @@ -10,7 +10,6 @@ generate {2F31FD79-D1AC-43C4-89F3-B0D5E4E53E34} generate - 8.1 diff --git a/projects/settingsgen_vs142.vcxproj b/projects/settingsgen_vs142.vcxproj index ca0418c15c..23a4e18562 100644 --- a/projects/settingsgen_vs142.vcxproj +++ b/projects/settingsgen_vs142.vcxproj @@ -10,7 +10,6 @@ settingsgen {E9548DE9-F089-49B7-93A6-30BE2CC311C7} settings - 8.1 diff --git a/projects/strgen_vs142.vcxproj b/projects/strgen_vs142.vcxproj index 5329d68daa..eb0657a30b 100644 --- a/projects/strgen_vs142.vcxproj +++ b/projects/strgen_vs142.vcxproj @@ -10,7 +10,6 @@ strgen {A133A442-BD0A-4ADE-B117-AD7545E4BDD1} strgen - 8.1 From 3b86f54fc739510277f434c68e17a93ab6448ed4 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Mon, 1 Apr 2019 00:55:37 +0200 Subject: [PATCH 614/622] Fix: [OSX] .mm files are C++ files, not C files. --- Makefile.src.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile.src.in b/Makefile.src.in index a64a5d5dff..3a4db6c171 100644 --- a/Makefile.src.in +++ b/Makefile.src.in @@ -139,7 +139,7 @@ $(OBJS_CPP:%.o=%.d): %.d: $(SRC_DIR)/%.cpp $(FILE_DEP) $(OBJS_MM:%.o=%.d): %.d: $(SRC_DIR)/%.mm $(FILE_DEP) $(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.mm=%.mm)' - $(Q)$(CC_HOST) $(CFLAGS) -MM $< | sed 's@^$(@F:%.d=%.o):@$@ $(@:%.d=%.o):@' > $@ + $(Q)$(CXX_HOST) $(CFLAGS) $(CXXFLAGS) -MM $< | sed 's@^$(@F:%.d=%.o):@$@ $(@:%.d=%.o):@' > $@ $(OBJS_RC:%.o=%.d): %.d: $(SRC_DIR)/%.rc $(FILE_DEP) $(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.rc=%.rc)' @@ -249,7 +249,7 @@ $(filter %sse4.o, $(OBJS_CPP)): %.o: $(SRC_DIR)/%.cpp $(DEP_MASK) $(FILE_DEP) $(OBJS_MM): %.o: $(SRC_DIR)/%.mm $(DEP_MASK) $(FILE_DEP) $(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.mm=%.mm)' - $(Q)$(CC_HOST) $(CFLAGS) -c -o $@ $< + $(Q)$(CXX_HOST) $(CFLAGS) $(CXXFLAGS) -c -o $@ $< $(OBJS_RC): %.o: $(SRC_DIR)/%.rc $(FILE_DEP) $(E) '$(STAGE) Compiling resource $(<:$(SRC_DIR)/%.rc=%.rc)' From 05f4e7360886e36b221ef5c3af4426625a3de686 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Mon, 11 Mar 2019 00:45:39 +0100 Subject: [PATCH 615/622] Codechange: Replace custom mutex code with C++11 mutex'es. A conforming compiler with a valid -header is expected. Most parts of the code assume that locking a mutex will never fail unexpectedly, which is generally true on all common platforms that don't just pretend to be C++11. The use of condition variables in driver code is checked. --- src/core/smallstack_type.hpp | 17 +++---- src/genworld.cpp | 21 ++++---- src/genworld_gui.cpp | 8 +-- src/gfx.cpp | 8 +-- src/music/dmusic.cpp | 10 ++-- src/network/network_gamelist.cpp | 10 ++-- src/network/network_server.cpp | 36 +++++-------- src/network/network_udp.cpp | 23 ++++----- src/newgrf_config.cpp | 28 +++++----- src/openttd.cpp | 14 ++++- src/progress.cpp | 8 +-- src/progress.h | 16 ++++-- src/thread/thread.h | 67 ------------------------ src/thread/thread_none.cpp | 5 -- src/thread/thread_os2.cpp | 56 -------------------- src/thread/thread_pthread.cpp | 81 ----------------------------- src/thread/thread_win32.cpp | 56 -------------------- src/video/sdl_v.cpp | 62 ++++++++++++++--------- src/video/win32_v.cpp | 87 ++++++++++++++++++-------------- 19 files changed, 187 insertions(+), 426 deletions(-) diff --git a/src/core/smallstack_type.hpp b/src/core/smallstack_type.hpp index c273fdec46..6aded5a759 100644 --- a/src/core/smallstack_type.hpp +++ b/src/core/smallstack_type.hpp @@ -13,7 +13,7 @@ #define SMALLSTACK_TYPE_HPP #include "smallvec_type.hpp" -#include "../thread/thread.h" +#include /** * A simplified pool which stores values instead of pointers and doesn't @@ -23,15 +23,14 @@ template class SimplePool { public: - inline SimplePool() : first_unused(0), first_free(0), mutex(ThreadMutex::New()) {} - inline ~SimplePool() { delete this->mutex; } + inline SimplePool() : first_unused(0), first_free(0) {} /** * Get the mutex. We don't lock the mutex in the pool methods as the * SmallStack isn't necessarily in a consistent state after each method. * @return Mutex. */ - inline ThreadMutex *GetMutex() { return this->mutex; } + inline std::mutex &GetMutex() { return this->mutex; } /** * Get the item at position index. @@ -86,7 +85,7 @@ private: Tindex first_unused; Tindex first_free; - ThreadMutex *mutex; + std::mutex mutex; std::vector data; }; @@ -196,7 +195,7 @@ public: inline void Push(const Titem &item) { if (this->value != Tinvalid) { - ThreadMutexLocker lock(SmallStack::GetPool().GetMutex()); + std::lock_guard lock(SmallStack::GetPool().GetMutex()); Tindex new_item = SmallStack::GetPool().Create(); if (new_item != Tmax_size) { PooledSmallStack &pushed = SmallStack::GetPool().Get(new_item); @@ -219,7 +218,7 @@ public: if (this->next == Tmax_size) { this->value = Tinvalid; } else { - ThreadMutexLocker lock(SmallStack::GetPool().GetMutex()); + std::lock_guard lock(SmallStack::GetPool().GetMutex()); PooledSmallStack &popped = SmallStack::GetPool().Get(this->next); this->value = popped.value; if (popped.branch_count == 0) { @@ -258,7 +257,7 @@ public: { if (item == Tinvalid || item == this->value) return true; if (this->next != Tmax_size) { - ThreadMutexLocker lock(SmallStack::GetPool().GetMutex()); + std::lock_guard lock(SmallStack::GetPool().GetMutex()); const SmallStack *in_list = this; do { in_list = static_cast( @@ -282,7 +281,7 @@ protected: inline void Branch() { if (this->next != Tmax_size) { - ThreadMutexLocker lock(SmallStack::GetPool().GetMutex()); + std::lock_guard lock(SmallStack::GetPool().GetMutex()); ++(SmallStack::GetPool().Get(this->next).branch_count); } } diff --git a/src/genworld.cpp b/src/genworld.cpp index 25d6a7bd9d..64caf3b89a 100644 --- a/src/genworld.cpp +++ b/src/genworld.cpp @@ -34,6 +34,7 @@ #include "game/game.hpp" #include "game/game_instance.hpp" #include "string_func.h" +#include "thread/thread.h" #include "safeguards.h" @@ -98,9 +99,10 @@ static void _GenerateWorld(void *) /* Make sure everything is done via OWNER_NONE. */ Backup _cur_company(_current_company, OWNER_NONE, FILE_LINE); + std::unique_lock lock(_modal_progress_work_mutex, std::defer_lock); try { _generating_world = true; - _modal_progress_work_mutex->BeginCritical(); + lock.lock(); if (_network_dedicated) DEBUG(net, 1, "Generating map, please wait..."); /* Set the Random() seed to generation_seed so we produce the same map with the same seed */ if (_settings_game.game_creation.generation_seed == GENERATE_NEW_SEED) _settings_game.game_creation.generation_seed = _settings_newgame.game_creation.generation_seed = InteractiveRandom(); @@ -194,7 +196,7 @@ static void _GenerateWorld(void *) IncreaseGeneratingWorldProgress(GWP_GAME_START); CleanupGeneration(); - _modal_progress_work_mutex->EndCritical(); + lock.unlock(); ShowNewGRFError(); @@ -210,7 +212,6 @@ static void _GenerateWorld(void *) BasePersistentStorageArray::SwitchMode(PSM_LEAVE_GAMELOOP, true); if (_cur_company.IsValid()) _cur_company.Restore(); _generating_world = false; - _modal_progress_work_mutex->EndCritical(); throw; } } @@ -243,15 +244,15 @@ void WaitTillGeneratedWorld() { if (_gw.thread == NULL) return; - _modal_progress_work_mutex->EndCritical(); - _modal_progress_paint_mutex->EndCritical(); + _modal_progress_work_mutex.unlock(); + _modal_progress_paint_mutex.unlock(); _gw.quit_thread = true; _gw.thread->Join(); delete _gw.thread; _gw.thread = NULL; _gw.threaded = false; - _modal_progress_work_mutex->BeginCritical(); - _modal_progress_paint_mutex->BeginCritical(); + _modal_progress_work_mutex.lock(); + _modal_progress_paint_mutex.lock(); } /** @@ -331,12 +332,12 @@ void GenerateWorld(GenWorldMode mode, uint size_x, uint size_y, bool reset_setti _gw.thread = NULL; } - if (!VideoDriver::GetInstance()->HasGUI() || !ThreadObject::New(&_GenerateWorld, NULL, &_gw.thread, "ottd:genworld")) { + if (!UseThreadedModelProgress() || !VideoDriver::GetInstance()->HasGUI() || !ThreadObject::New(&_GenerateWorld, NULL, &_gw.thread, "ottd:genworld")) { DEBUG(misc, 1, "Cannot create genworld thread, reverting to single-threaded mode"); _gw.threaded = false; - _modal_progress_work_mutex->EndCritical(); + _modal_progress_work_mutex.unlock(); _GenerateWorld(NULL); - _modal_progress_work_mutex->BeginCritical(); + _modal_progress_work_mutex.lock(); return; } diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index d4aad62211..697ce382d7 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -1321,10 +1321,10 @@ static void _SetGeneratingWorldProgress(GenWorldProgress cls, uint progress, uin * paint thread. The 'other' thread already has the paint thread rights so * this ensures us that we are waiting until the paint thread is done * before we reacquire the mapgen rights */ - _modal_progress_work_mutex->EndCritical(); - _modal_progress_paint_mutex->BeginCritical(); - _modal_progress_work_mutex->BeginCritical(); - _modal_progress_paint_mutex->EndCritical(); + _modal_progress_work_mutex.unlock(); + _modal_progress_paint_mutex.lock(); + _modal_progress_work_mutex.lock(); + _modal_progress_paint_mutex.unlock(); _gws.timer = _realtime_tick; } diff --git a/src/gfx.cpp b/src/gfx.cpp index 72d3fcd67b..b7e31a3845 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -1308,8 +1308,8 @@ void DrawDirtyBlocks() if (HasModalProgress()) { /* We are generating the world, so release our rights to the map and * painting while we are waiting a bit. */ - _modal_progress_paint_mutex->EndCritical(); - _modal_progress_work_mutex->EndCritical(); + _modal_progress_paint_mutex.unlock(); + _modal_progress_work_mutex.unlock(); /* Wait a while and update _realtime_tick so we are given the rights */ if (!IsFirstModalProgressLoop()) CSleep(MODAL_PROGRESS_REDRAW_TIMEOUT); @@ -1317,9 +1317,9 @@ void DrawDirtyBlocks() /* Modal progress thread may need blitter access while we are waiting for it. */ VideoDriver::GetInstance()->ReleaseBlitterLock(); - _modal_progress_paint_mutex->BeginCritical(); + _modal_progress_paint_mutex.lock(); VideoDriver::GetInstance()->AcquireBlitterLock(); - _modal_progress_work_mutex->BeginCritical(); + _modal_progress_work_mutex.lock(); /* When we ended with the modal progress, do not draw the blocks. * Simply let the next run do so, otherwise we would be loading diff --git a/src/music/dmusic.cpp b/src/music/dmusic.cpp index 241ab191bf..4b9a22c724 100644 --- a/src/music/dmusic.cpp +++ b/src/music/dmusic.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include "../safeguards.h" @@ -142,7 +143,7 @@ static ThreadObject *_dmusic_thread = NULL; /** Event to signal the thread that it should look at a state change. */ static HANDLE _thread_event = NULL; /** Lock access to playback data that is not thread-safe. */ -static ThreadMutex *_thread_mutex = NULL; +static std::mutex _thread_mutex; /** The direct music object manages buffers and ports. */ static IDirectMusic *_music = NULL; @@ -655,7 +656,7 @@ static void MidiThreadProc(void *) DEBUG(driver, 2, "DMusic thread: Starting playback"); { /* New scope to limit the time the mutex is locked. */ - ThreadMutexLocker lock(_thread_mutex); + std::lock_guard lock(_thread_mutex); current_file.MoveFrom(_playback.next_file); std::swap(_playback.next_segment, current_segment); @@ -1167,8 +1168,6 @@ const char *MusicDriver_DMusic::Start(const char * const *parm) /* Create playback thread and synchronization primitives. */ _thread_event = CreateEvent(NULL, FALSE, FALSE, NULL); if (_thread_event == NULL) return "Can't create thread shutdown event"; - _thread_mutex = ThreadMutex::New(); - if (_thread_mutex == NULL) return "Can't create thread mutex"; if (!ThreadObject::New(&MidiThreadProc, this, &_dmusic_thread, "ottd:dmusic")) return "Can't create MIDI output thread"; @@ -1223,7 +1222,6 @@ void MusicDriver_DMusic::Stop() } CloseHandle(_thread_event); - delete _thread_mutex; CoUninitialize(); } @@ -1231,7 +1229,7 @@ void MusicDriver_DMusic::Stop() void MusicDriver_DMusic::PlaySong(const MusicSongInfo &song) { - ThreadMutexLocker lock(_thread_mutex); + std::lock_guard lock(_thread_mutex); if (!_playback.next_file.LoadSong(song)) return; diff --git a/src/network/network_gamelist.cpp b/src/network/network_gamelist.cpp index 6c65c52c98..c67fba5ec3 100644 --- a/src/network/network_gamelist.cpp +++ b/src/network/network_gamelist.cpp @@ -15,17 +15,17 @@ #include "../stdafx.h" #include "../debug.h" #include "../window_func.h" -#include "../thread/thread.h" #include "network_internal.h" #include "network_udp.h" #include "network_gamelist.h" +#include #include "../safeguards.h" NetworkGameList *_network_game_list = NULL; /** Mutex for handling delayed insertion/querying of servers. */ -static ThreadMutex *_network_game_list_mutex = ThreadMutex::New(); +static std::mutex _network_game_list_mutex; /** The games to insert when the GUI thread has time for us. */ static NetworkGameList *_network_game_delayed_insertion_list = NULL; @@ -36,16 +36,15 @@ static NetworkGameList *_network_game_delayed_insertion_list = NULL; */ void NetworkGameListAddItemDelayed(NetworkGameList *item) { - _network_game_list_mutex->BeginCritical(); + std::lock_guard lock(_network_game_list_mutex); item->next = _network_game_delayed_insertion_list; _network_game_delayed_insertion_list = item; - _network_game_list_mutex->EndCritical(); } /** Perform the delayed (thread safe) insertion into the game list */ static void NetworkGameListHandleDelayedInsert() { - _network_game_list_mutex->BeginCritical(); + std::lock_guard lock(_network_game_list_mutex); while (_network_game_delayed_insertion_list != NULL) { NetworkGameList *ins_item = _network_game_delayed_insertion_list; _network_game_delayed_insertion_list = ins_item->next; @@ -66,7 +65,6 @@ static void NetworkGameListHandleDelayedInsert() } free(ins_item); } - _network_game_list_mutex->EndCritical(); } /** diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 1bcd7ca127..97da64bd3b 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -30,6 +30,8 @@ #include "../core/pool_func.hpp" #include "../core/random_func.hpp" #include "../rev.h" +#include +#include #include "../safeguards.h" @@ -58,7 +60,8 @@ struct PacketWriter : SaveFilter { Packet *current; ///< The packet we're currently writing to. size_t total_size; ///< Total size of the compressed savegame. Packet *packets; ///< Packet queue of the savegame; send these "slowly" to the client. - ThreadMutex *mutex; ///< Mutex for making threaded saving safe. + std::mutex mutex; ///< Mutex for making threaded saving safe. + std::condition_variable exit_sig; ///< Signal for threaded destruction of this packet writer. /** * Create the packet writer. @@ -66,17 +69,14 @@ struct PacketWriter : SaveFilter { */ PacketWriter(ServerNetworkGameSocketHandler *cs) : SaveFilter(NULL), cs(cs), current(NULL), total_size(0), packets(NULL) { - this->mutex = ThreadMutex::New(); } /** Make sure everything is cleaned up. */ ~PacketWriter() { - if (this->mutex != NULL) this->mutex->BeginCritical(); + std::unique_lock lock(this->mutex); - if (this->cs != NULL && this->mutex != NULL) { - this->mutex->WaitForSignal(); - } + if (this->cs != NULL) this->exit_sig.wait(lock); /* This must all wait until the Destroy function is called. */ @@ -87,11 +87,6 @@ struct PacketWriter : SaveFilter { } delete this->current; - - if (this->mutex != NULL) this->mutex->EndCritical(); - - delete this->mutex; - this->mutex = NULL; } /** @@ -106,13 +101,12 @@ struct PacketWriter : SaveFilter { */ void Destroy() { - if (this->mutex != NULL) this->mutex->BeginCritical(); + std::unique_lock lock(this->mutex); this->cs = NULL; - if (this->mutex != NULL) this->mutex->SendSignal(); - - if (this->mutex != NULL) this->mutex->EndCritical(); + this->exit_sig.notify_all(); + lock.unlock(); /* Make sure the saving is completely cancelled. Yes, * we need to handle the save finish as well as the @@ -138,14 +132,12 @@ struct PacketWriter : SaveFilter { */ Packet *PopPacket() { - if (this->mutex != NULL) this->mutex->BeginCritical(); + std::lock_guard lock(this->mutex); Packet *p = this->packets; this->packets = p->next; p->next = NULL; - if (this->mutex != NULL) this->mutex->EndCritical(); - return p; } @@ -170,7 +162,7 @@ struct PacketWriter : SaveFilter { if (this->current == NULL) this->current = new Packet(PACKET_SERVER_MAP_DATA); - if (this->mutex != NULL) this->mutex->BeginCritical(); + std::lock_guard lock(this->mutex); byte *bufe = buf + size; while (buf != bufe) { @@ -185,8 +177,6 @@ struct PacketWriter : SaveFilter { } } - if (this->mutex != NULL) this->mutex->EndCritical(); - this->total_size += size; } @@ -195,7 +185,7 @@ struct PacketWriter : SaveFilter { /* We want to abort the saving when the socket is closed. */ if (this->cs == NULL) SlError(STR_NETWORK_ERROR_LOSTCONNECTION); - if (this->mutex != NULL) this->mutex->BeginCritical(); + std::lock_guard lock(this->mutex); /* Make sure the last packet is flushed. */ this->AppendQueue(); @@ -208,8 +198,6 @@ struct PacketWriter : SaveFilter { Packet *p = new Packet(PACKET_SERVER_MAP_SIZE); p->Send_uint32((uint32)this->total_size); this->cs->NetworkTCPSocketHandler::SendPacket(p); - - if (this->mutex != NULL) this->mutex->EndCritical(); } }; diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp index 2d7ee2d3cf..df8c59aac6 100644 --- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -29,13 +29,14 @@ #include "../newgrf_text.h" #include "../strings_func.h" #include "table/strings.h" +#include #include "core/udp.h" #include "../safeguards.h" /** Mutex for all out threaded udp resolution and such. */ -static ThreadMutex *_network_udp_mutex = ThreadMutex::New(); +static std::mutex _network_udp_mutex; /** Session key to register ourselves to the master server */ static uint64 _session_key = 0; @@ -80,11 +81,11 @@ static void NetworkUDPQueryServer(NetworkAddress *address, bool needs_mutex, boo item->manually = manually; NetworkGameListAddItemDelayed(item); - if (needs_mutex) _network_udp_mutex->BeginCritical(); + std::unique_lock lock(_network_udp_mutex, std::defer_lock); + if (needs_mutex) lock.lock(); /* Init the packet */ Packet p(PACKET_UDP_CLIENT_FIND_SERVER); if (_udp_client_socket != NULL) _udp_client_socket->SendPacket(&p, address); - if (needs_mutex) _network_udp_mutex->EndCritical(); } /** @@ -549,9 +550,8 @@ static void NetworkUDPRemoveAdvertiseThread(void *pntr) p.Send_uint8 (NETWORK_MASTER_SERVER_VERSION); p.Send_uint16(_settings_client.network.server_port); - _network_udp_mutex->BeginCritical(); + std::lock_guard lock(_network_udp_mutex); if (_udp_master_socket != NULL) _udp_master_socket->SendPacket(&p, &out_addr, true); - _network_udp_mutex->EndCritical(); } /** @@ -603,9 +603,8 @@ static void NetworkUDPAdvertiseThread(void *pntr) p.Send_uint16(_settings_client.network.server_port); p.Send_uint64(_session_key); - _network_udp_mutex->BeginCritical(); + std::lock_guard lock(_network_udp_mutex); if (_udp_master_socket != NULL) _udp_master_socket->SendPacket(&p, &out_addr, true); - _network_udp_mutex->EndCritical(); } /** @@ -660,7 +659,7 @@ void NetworkUDPInitialize() DEBUG(net, 1, "[udp] initializing listeners"); assert(_udp_client_socket == NULL && _udp_server_socket == NULL && _udp_master_socket == NULL); - _network_udp_mutex->BeginCritical(); + std::lock_guard lock(_network_udp_mutex); _udp_client_socket = new ClientNetworkUDPSocketHandler(); @@ -674,13 +673,12 @@ void NetworkUDPInitialize() _network_udp_server = false; _network_udp_broadcast = 0; - _network_udp_mutex->EndCritical(); } /** Close all UDP related stuff. */ void NetworkUDPClose() { - _network_udp_mutex->BeginCritical(); + std::lock_guard lock(_network_udp_mutex); _udp_server_socket->Close(); _udp_master_socket->Close(); _udp_client_socket->Close(); @@ -690,7 +688,6 @@ void NetworkUDPClose() _udp_client_socket = NULL; _udp_server_socket = NULL; _udp_master_socket = NULL; - _network_udp_mutex->EndCritical(); _network_udp_server = false; _network_udp_broadcast = 0; @@ -700,7 +697,7 @@ void NetworkUDPClose() /** Receive the UDP packets. */ void NetworkBackgroundUDPLoop() { - _network_udp_mutex->BeginCritical(); + std::lock_guard lock(_network_udp_mutex); if (_network_udp_server) { _udp_server_socket->ReceivePackets(); @@ -709,6 +706,4 @@ void NetworkBackgroundUDPLoop() _udp_client_socket->ReceivePackets(); if (_network_udp_broadcast > 0) _network_udp_broadcast--; } - - _network_udp_mutex->EndCritical(); } diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index e346a4a823..feb23648a9 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -21,6 +21,7 @@ #include "video/video_driver.hpp" #include "strings_func.h" #include "textfile_gui.h" +#include "thread/thread.h" #include "fileio_func.h" #include "fios.h" @@ -682,18 +683,18 @@ bool GRFFileScanner::AddFile(const char *filename, size_t basepath_length, const this->num_scanned++; if (this->next_update <= _realtime_tick) { - _modal_progress_work_mutex->EndCritical(); - _modal_progress_paint_mutex->BeginCritical(); + _modal_progress_work_mutex.unlock(); + _modal_progress_paint_mutex.lock(); const char *name = NULL; if (c->name != NULL) name = GetGRFStringFromGRFText(c->name->text); if (name == NULL) name = c->filename; UpdateNewGRFScanStatus(this->num_scanned, name); - _modal_progress_work_mutex->BeginCritical(); - _modal_progress_paint_mutex->EndCritical(); + _modal_progress_work_mutex.lock(); + _modal_progress_paint_mutex.unlock(); - this->next_update = _realtime_tick + 200; + this->next_update = _realtime_tick + MODAL_PROGRESS_REDRAW_TIMEOUT; } if (!added) { @@ -725,7 +726,7 @@ static int CDECL GRFSorter(GRFConfig * const *p1, GRFConfig * const *p2) */ void DoScanNewGRFFiles(void *callback) { - _modal_progress_work_mutex->BeginCritical(); + std::unique_lock lock_work(_modal_progress_work_mutex); ClearGRFConfigList(&_all_grfs); TarScanner::DoScan(TarScanner::NEWGRF); @@ -760,8 +761,8 @@ void DoScanNewGRFFiles(void *callback) NetworkAfterNewGRFScan(); } - _modal_progress_work_mutex->EndCritical(); - _modal_progress_paint_mutex->BeginCritical(); + lock_work.unlock(); + std::lock_guard lock_paint(_modal_progress_paint_mutex); /* Yes... these are the NewGRF windows */ InvalidateWindowClassesData(WC_SAVELOAD, 0, true); @@ -771,7 +772,6 @@ void DoScanNewGRFFiles(void *callback) DeleteWindowByClass(WC_MODAL_PROGRESS); SetModalProgress(false); MarkWholeScreenDirty(); - _modal_progress_paint_mutex->EndCritical(); } /** @@ -785,12 +785,12 @@ void ScanNewGRFFiles(NewGRFScanCallback *callback) /* Only then can we really start, especially by marking the whole screen dirty. Get those other windows hidden!. */ MarkWholeScreenDirty(); - if (!VideoDriver::GetInstance()->HasGUI() || !ThreadObject::New(&DoScanNewGRFFiles, callback, NULL, "ottd:newgrf-scan")) { - _modal_progress_work_mutex->EndCritical(); - _modal_progress_paint_mutex->EndCritical(); + if (!UseThreadedModelProgress() || !VideoDriver::GetInstance()->HasGUI() || !ThreadObject::New(&DoScanNewGRFFiles, callback, NULL, "ottd:newgrf-scan")) { + _modal_progress_work_mutex.unlock(); + _modal_progress_paint_mutex.unlock(); DoScanNewGRFFiles(callback); - _modal_progress_paint_mutex->BeginCritical(); - _modal_progress_work_mutex->BeginCritical(); + _modal_progress_paint_mutex.lock(); + _modal_progress_work_mutex.lock(); } else { UpdateNewGRFScanStatus(0, NULL); } diff --git a/src/openttd.cpp b/src/openttd.cpp index 29319236af..180de64b0d 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -68,6 +68,7 @@ #include "linkgraph/linkgraphschedule.h" #include +#include #include "safeguards.h" @@ -547,6 +548,9 @@ int openttd_main(int argc, char *argv[]) extern bool _dedicated_forks; _dedicated_forks = false; + std::unique_lock modal_work_lock(_modal_progress_work_mutex, std::defer_lock); + std::unique_lock modal_paint_lock(_modal_progress_paint_mutex, std::defer_lock); + _game_mode = GM_MENU; _switch_mode = SM_MENU; _config_file = NULL; @@ -830,8 +834,14 @@ int openttd_main(int argc, char *argv[]) free(musicdriver); /* Take our initial lock on whatever we might want to do! */ - _modal_progress_paint_mutex->BeginCritical(); - _modal_progress_work_mutex->BeginCritical(); + try { + modal_work_lock.lock(); + modal_paint_lock.lock(); + } catch (const std::system_error&) { + /* If there is some error we assume that threads aren't usable on the system we run. */ + extern bool _use_threaded_modal_progress; // From progress.cpp + _use_threaded_modal_progress = false; + } GenerateWorld(GWM_EMPTY, 64, 64); // Make the viewport initialization happy WaitTillGeneratedWorld(); diff --git a/src/progress.cpp b/src/progress.cpp index b498be109b..923f1ef83f 100644 --- a/src/progress.cpp +++ b/src/progress.cpp @@ -10,17 +10,19 @@ /** @file progress.cpp Functions for modal progress windows. */ #include "stdafx.h" -#include "thread/thread.h" +#include "progress.h" #include "safeguards.h" /** Are we in a modal progress or not? */ bool _in_modal_progress = false; bool _first_in_modal_loop = false; +/** Threading usable for modal progress? */ +bool _use_threaded_modal_progress = true; /** Rights for the performing work. */ -ThreadMutex *_modal_progress_work_mutex = ThreadMutex::New(); +std::mutex _modal_progress_work_mutex; /** Rights for the painting. */ -ThreadMutex *_modal_progress_paint_mutex = ThreadMutex::New(); +std::mutex _modal_progress_paint_mutex; /** * Set the modal progress state. diff --git a/src/progress.h b/src/progress.h index eec369b23c..2a9d73b038 100644 --- a/src/progress.h +++ b/src/progress.h @@ -12,7 +12,7 @@ #ifndef PROGRESS_H #define PROGRESS_H -#include "thread/thread.h" +#include static const uint MODAL_PROGRESS_REDRAW_TIMEOUT = 200; ///< Timeout between redraws @@ -26,10 +26,20 @@ static inline bool HasModalProgress() return _in_modal_progress; } +/** + * Check if we can use a thread for modal progress. + * @return Threading usable? + */ +static inline bool UseThreadedModelProgress() +{ + extern bool _use_threaded_modal_progress; + return _use_threaded_modal_progress; +} + bool IsFirstModalProgressLoop(); void SetModalProgress(bool state); -extern class ThreadMutex *_modal_progress_work_mutex; -extern class ThreadMutex *_modal_progress_paint_mutex; +extern std::mutex _modal_progress_work_mutex; +extern std::mutex _modal_progress_paint_mutex; #endif /* PROGRESS_H */ diff --git a/src/thread/thread.h b/src/thread/thread.h index 07831bb4ba..eca825e25e 100644 --- a/src/thread/thread.h +++ b/src/thread/thread.h @@ -50,73 +50,6 @@ public: static bool New(OTTDThreadFunc proc, void *param, ThreadObject **thread = NULL, const char *name = NULL); }; -/** - * Cross-platform Mutex - */ -class ThreadMutex { -public: - /** - * Create a new mutex. - */ - static ThreadMutex *New(); - - /** - * Virtual Destructor to avoid compiler warnings. - */ - virtual ~ThreadMutex() {}; - - /** - * Begin the critical section - * @param allow_recursive Whether recursive locking is intentional. - * If false, NOT_REACHED() will be called when the mutex is already locked - * by the current thread. - */ - virtual void BeginCritical(bool allow_recursive = false) = 0; - - /** - * End of the critical section - * @param allow_recursive Whether recursive unlocking is intentional. - * If false, NOT_REACHED() will be called when the mutex was locked more - * than once by the current thread. - */ - virtual void EndCritical(bool allow_recursive = false) = 0; - - /** - * Wait for a signal to be send. - * @pre You must be in the critical section. - * @note While waiting the critical section is left. - * @post You will be in the critical section. - */ - virtual void WaitForSignal() = 0; - - /** - * Send a signal and wake the 'thread' that was waiting for it. - */ - virtual void SendSignal() = 0; -}; - -/** - * Simple mutex locker to keep a mutex locked until the locker goes out of scope. - */ -class ThreadMutexLocker { -public: - /** - * Lock the mutex and keep it locked for the life time of this object. - * @param mutex Mutex to be locked. - */ - ThreadMutexLocker(ThreadMutex *mutex) : mutex(mutex) { mutex->BeginCritical(); } - - /** - * Unlock the mutex. - */ - ~ThreadMutexLocker() { this->mutex->EndCritical(); } - -private: - ThreadMutexLocker(const ThreadMutexLocker &) { NOT_REACHED(); } - ThreadMutexLocker &operator=(const ThreadMutexLocker &) { NOT_REACHED(); return *this; } - ThreadMutex *mutex; -}; - /** * Get number of processor cores in the system, including HyperThreading or similar. * @return Total number of processor cores. diff --git a/src/thread/thread_none.cpp b/src/thread/thread_none.cpp index 91eb50b113..83ae52d460 100644 --- a/src/thread/thread_none.cpp +++ b/src/thread/thread_none.cpp @@ -28,8 +28,3 @@ public: virtual void WaitForSignal() {} virtual void SendSignal() {} }; - -/* static */ ThreadMutex *ThreadMutex::New() -{ - return new ThreadMutex_None(); -} diff --git a/src/thread/thread_os2.cpp b/src/thread/thread_os2.cpp index 976283f231..72ee080d6d 100644 --- a/src/thread/thread_os2.cpp +++ b/src/thread/thread_os2.cpp @@ -89,59 +89,3 @@ private: if (thread != NULL) *thread = to; return true; } - -/** - * OS/2 version of ThreadMutex. - */ -class ThreadMutex_OS2 : public ThreadMutex { -private: - HMTX mutex; ///< The mutex. - HEV event; ///< Event for waiting. - uint recursive_count; ///< Recursive lock count. - -public: - ThreadMutex_OS2() : recursive_count(0) - { - DosCreateMutexSem(NULL, &mutex, 0, FALSE); - DosCreateEventSem(NULL, &event, 0, FALSE); - } - - ~ThreadMutex_OS2() override - { - DosCloseMutexSem(mutex); - DosCloseEventSem(event); - } - - void BeginCritical(bool allow_recursive = false) override - { - /* os2 mutex is recursive by itself */ - DosRequestMutexSem(mutex, (unsigned long) SEM_INDEFINITE_WAIT); - this->recursive_count++; - if (!allow_recursive && this->recursive_count != 1) NOT_REACHED(); - } - - void EndCritical(bool allow_recursive = false) override - { - if (!allow_recursive && this->recursive_count != 1) NOT_REACHED(); - this->recursive_count--; - DosReleaseMutexSem(mutex); - } - - void WaitForSignal() override - { - assert(this->recursive_count == 1); // Do we need to call Begin/EndCritical multiple times otherwise? - this->EndCritical(); - DosWaitEventSem(event, SEM_INDEFINITE_WAIT); - this->BeginCritical(); - } - - void SendSignal() override - { - DosPostEventSem(event); - } -}; - -/* static */ ThreadMutex *ThreadMutex::New() -{ - return new ThreadMutex_OS2(); -} diff --git a/src/thread/thread_pthread.cpp b/src/thread/thread_pthread.cpp index afb259183e..50fefb5311 100644 --- a/src/thread/thread_pthread.cpp +++ b/src/thread/thread_pthread.cpp @@ -108,84 +108,3 @@ private: if (thread != NULL) *thread = to; return true; } - -/** - * POSIX pthread version of ThreadMutex. - */ -class ThreadMutex_pthread : public ThreadMutex { -private: - pthread_mutex_t mutex; ///< The actual mutex. - pthread_cond_t condition; ///< Data for conditional waiting. - pthread_mutexattr_t attr; ///< Attributes set for the mutex. - pthread_t owner; ///< Owning thread of the mutex. - uint recursive_count; ///< Recursive lock count. - -public: - ThreadMutex_pthread() : owner(0), recursive_count(0) - { - pthread_mutexattr_init(&this->attr); - pthread_mutexattr_settype(&this->attr, PTHREAD_MUTEX_ERRORCHECK); - pthread_mutex_init(&this->mutex, &this->attr); - pthread_cond_init(&this->condition, NULL); - } - - ~ThreadMutex_pthread() override - { - int err = pthread_cond_destroy(&this->condition); - assert(err != EBUSY); - err = pthread_mutex_destroy(&this->mutex); - assert(err != EBUSY); - } - - bool IsOwnedByCurrentThread() const - { - return this->owner == pthread_self(); - } - - void BeginCritical(bool allow_recursive = false) override - { - /* pthread mutex is not recursive by itself */ - if (this->IsOwnedByCurrentThread()) { - if (!allow_recursive) NOT_REACHED(); - } else { - int err = pthread_mutex_lock(&this->mutex); - assert(err == 0); - assert(this->recursive_count == 0); - this->owner = pthread_self(); - } - this->recursive_count++; - } - - void EndCritical(bool allow_recursive = false) override - { - assert(this->IsOwnedByCurrentThread()); - if (!allow_recursive && this->recursive_count != 1) NOT_REACHED(); - this->recursive_count--; - if (this->recursive_count != 0) return; - this->owner = 0; - int err = pthread_mutex_unlock(&this->mutex); - assert(err == 0); - } - - void WaitForSignal() override - { - uint old_recursive_count = this->recursive_count; - this->recursive_count = 0; - this->owner = 0; - int err = pthread_cond_wait(&this->condition, &this->mutex); - assert(err == 0); - this->owner = pthread_self(); - this->recursive_count = old_recursive_count; - } - - void SendSignal() override - { - int err = pthread_cond_signal(&this->condition); - assert(err == 0); - } -}; - -/* static */ ThreadMutex *ThreadMutex::New() -{ - return new ThreadMutex_pthread(); -} diff --git a/src/thread/thread_win32.cpp b/src/thread/thread_win32.cpp index 506faa069e..fc7a85a91c 100644 --- a/src/thread/thread_win32.cpp +++ b/src/thread/thread_win32.cpp @@ -109,59 +109,3 @@ private: if (thread != NULL) *thread = to; return true; } - -/** - * Win32 thread version of ThreadMutex. - */ -class ThreadMutex_Win32 : public ThreadMutex { -private: - CRITICAL_SECTION critical_section; ///< The critical section we would enter. - HANDLE event; ///< Event for signalling. - uint recursive_count; ///< Recursive lock count. - -public: - ThreadMutex_Win32() : recursive_count(0) - { - InitializeCriticalSection(&this->critical_section); - this->event = CreateEvent(NULL, FALSE, FALSE, NULL); - } - - ~ThreadMutex_Win32() override - { - DeleteCriticalSection(&this->critical_section); - CloseHandle(this->event); - } - - void BeginCritical(bool allow_recursive = false) override - { - /* windows mutex is recursive by itself */ - EnterCriticalSection(&this->critical_section); - this->recursive_count++; - if (!allow_recursive && this->recursive_count != 1) NOT_REACHED(); - } - - void EndCritical(bool allow_recursive = false) override - { - if (!allow_recursive && this->recursive_count != 1) NOT_REACHED(); - this->recursive_count--; - LeaveCriticalSection(&this->critical_section); - } - - void WaitForSignal() override - { - assert(this->recursive_count == 1); // Do we need to call Begin/EndCritical multiple times otherwise? - this->EndCritical(); - WaitForSingleObject(this->event, INFINITE); - this->BeginCritical(); - } - - void SendSignal() override - { - SetEvent(this->event); - } -}; - -/* static */ ThreadMutex *ThreadMutex::New() -{ - return new ThreadMutex_Win32(); -} diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index 62bbb33012..b1609f7b37 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -25,6 +25,8 @@ #include "../framerate_type.h" #include "sdl_v.h" #include +#include +#include #include "../safeguards.h" @@ -39,7 +41,9 @@ static bool _draw_threaded; /** Thread used to 'draw' to the screen, i.e. push data to the screen. */ static ThreadObject *_draw_thread = NULL; /** Mutex to keep the access to the shared memory controlled. */ -static ThreadMutex *_draw_mutex = NULL; +static std::recursive_mutex *_draw_mutex = NULL; +/** Signal to draw the next frame. */ +static std::condition_variable_any *_draw_signal = NULL; /** Should we keep continue drawing? */ static volatile bool _draw_continue; static Palette _local_palette; @@ -172,20 +176,19 @@ static void DrawSurfaceToScreen() static void DrawSurfaceToScreenThread(void *) { /* First tell the main thread we're started */ - _draw_mutex->BeginCritical(); - _draw_mutex->SendSignal(); + std::unique_lock lock(*_draw_mutex); + _draw_signal->notify_one(); /* Now wait for the first thing to draw! */ - _draw_mutex->WaitForSignal(); + _draw_signal->wait(*_draw_mutex); while (_draw_continue) { CheckPaletteAnim(); /* Then just draw and wait till we stop */ DrawSurfaceToScreen(); - _draw_mutex->WaitForSignal(); + _draw_signal->wait(lock); } - _draw_mutex->EndCritical(); _draw_thread->Exit(); } @@ -668,26 +671,31 @@ void VideoDriver_SDL::MainLoop() CheckPaletteAnim(); + std::unique_lock draw_lock; if (_draw_threaded) { /* Initialise the mutex first, because that's the thing we *need* * directly in the newly created thread. */ - _draw_mutex = ThreadMutex::New(); + _draw_mutex = new std::recursive_mutex(); if (_draw_mutex == NULL) { _draw_threaded = false; } else { - _draw_mutex->BeginCritical(); + draw_lock = std::unique_lock(*_draw_mutex); + _draw_signal = new std::condition_variable_any(); _draw_continue = true; _draw_threaded = ThreadObject::New(&DrawSurfaceToScreenThread, NULL, &_draw_thread, "ottd:draw-sdl"); /* Free the mutex if we won't be able to use it. */ if (!_draw_threaded) { - _draw_mutex->EndCritical(); + draw_lock.unlock(); + draw_lock.release(); delete _draw_mutex; + delete _draw_signal; _draw_mutex = NULL; + _draw_signal = NULL; } else { /* Wait till the draw mutex has started itself. */ - _draw_mutex->WaitForSignal(); + _draw_signal->wait(*_draw_mutex); } } } @@ -752,19 +760,19 @@ void VideoDriver_SDL::MainLoop() /* The gameloop is the part that can run asynchronously. The rest * except sleeping can't. */ - if (_draw_mutex != NULL) _draw_mutex->EndCritical(); + if (_draw_mutex != NULL) draw_lock.unlock(); GameLoop(); - if (_draw_mutex != NULL) _draw_mutex->BeginCritical(); + if (_draw_mutex != NULL) draw_lock.lock(); UpdateWindows(); _local_palette = _cur_palette; } else { /* Release the thread while sleeping */ - if (_draw_mutex != NULL) _draw_mutex->EndCritical(); + if (_draw_mutex != NULL) draw_lock.unlock(); CSleep(1); - if (_draw_mutex != NULL) _draw_mutex->BeginCritical(); + if (_draw_mutex != NULL) draw_lock.lock(); NetworkDrawChatMessage(); DrawMouseCursor(); @@ -772,7 +780,7 @@ void VideoDriver_SDL::MainLoop() /* End of the critical part. */ if (_draw_mutex != NULL && !HasModalProgress()) { - _draw_mutex->SendSignal(); + _draw_signal->notify_one(); } else { /* Oh, we didn't have threads, then just draw unthreaded */ CheckPaletteAnim(); @@ -784,29 +792,34 @@ void VideoDriver_SDL::MainLoop() _draw_continue = false; /* Sending signal if there is no thread blocked * is very valid and results in noop */ - _draw_mutex->SendSignal(); - _draw_mutex->EndCritical(); + _draw_signal->notify_one(); + if (draw_lock.owns_lock()) draw_lock.unlock(); + draw_lock.release(); _draw_thread->Join(); delete _draw_mutex; + delete _draw_signal; delete _draw_thread; _draw_mutex = NULL; + _draw_signal = NULL; _draw_thread = NULL; } } bool VideoDriver_SDL::ChangeResolution(int w, int h) { - if (_draw_mutex != NULL) _draw_mutex->BeginCritical(true); - bool ret = CreateMainSurface(w, h); - if (_draw_mutex != NULL) _draw_mutex->EndCritical(true); - return ret; + std::unique_lock lock; + if (_draw_mutex != NULL) lock = std::unique_lock(*_draw_mutex); + + return CreateMainSurface(w, h); } bool VideoDriver_SDL::ToggleFullscreen(bool fullscreen) { - if (_draw_mutex != NULL) _draw_mutex->BeginCritical(true); + std::unique_lock lock; + if (_draw_mutex != NULL) lock = std::unique_lock(*_draw_mutex); + _fullscreen = fullscreen; GetVideoModes(); // get the list of available video modes bool ret = _num_resolutions != 0 && CreateMainSurface(_cur_resolution.width, _cur_resolution.height); @@ -816,7 +829,6 @@ bool VideoDriver_SDL::ToggleFullscreen(bool fullscreen) _fullscreen ^= true; } - if (_draw_mutex != NULL) _draw_mutex->EndCritical(true); return ret; } @@ -827,12 +839,12 @@ bool VideoDriver_SDL::AfterBlitterChange() void VideoDriver_SDL::AcquireBlitterLock() { - if (_draw_mutex != NULL) _draw_mutex->BeginCritical(true); + if (_draw_mutex != NULL) _draw_mutex->lock(); } void VideoDriver_SDL::ReleaseBlitterLock() { - if (_draw_mutex != NULL) _draw_mutex->EndCritical(true); + if (_draw_mutex != NULL) _draw_mutex->unlock(); } #endif /* WITH_SDL */ diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index 6cee4fef28..ef7bc89e2c 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -27,6 +27,8 @@ #include "win32_v.h" #include #include +#include +#include #include "../safeguards.h" @@ -68,9 +70,9 @@ static bool _draw_threaded; /** Thread used to 'draw' to the screen, i.e. push data to the screen. */ static ThreadObject *_draw_thread = NULL; /** Mutex to keep the access to the shared memory controlled. */ -static ThreadMutex *_draw_mutex = NULL; -/** Event that is signaled when the drawing thread has finished initializing. */ -static HANDLE _draw_thread_initialized = NULL; +static std::recursive_mutex *_draw_mutex = NULL; +/** Signal to draw the next frame. */ +static std::condition_variable_any *_draw_signal = NULL; /** Should we keep continue drawing? */ static volatile bool _draw_continue; /** Local copy of the palette for use in the drawing thread. */ @@ -396,11 +398,11 @@ static void PaintWindow(HDC dc) static void PaintWindowThread(void *) { /* First tell the main thread we're started */ - _draw_mutex->BeginCritical(); - SetEvent(_draw_thread_initialized); + std::unique_lock lock(*_draw_mutex); + _draw_signal->notify_one(); /* Now wait for the first thing to draw! */ - _draw_mutex->WaitForSignal(); + _draw_signal->wait(*_draw_mutex); while (_draw_continue) { /* Convert update region from logical to device coordinates. */ @@ -422,10 +424,9 @@ static void PaintWindowThread(void *) /* Flush GDI buffer to ensure drawing here doesn't conflict with any GDI usage in the main WndProc. */ GdiFlush(); - _draw_mutex->WaitForSignal(); + _draw_signal->wait(*_draw_mutex); } - _draw_mutex->EndCritical(); _draw_thread->Exit(); } @@ -658,7 +659,7 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP /* Mark the window as updated, otherwise Windows would send more WM_PAINT messages. */ ValidateRect(hwnd, NULL); - _draw_mutex->SendSignal(); + _draw_signal->notify_one(); } else { PAINTSTRUCT ps; @@ -1189,28 +1190,36 @@ void VideoDriver_Win32::MainLoop() uint32 last_cur_ticks = cur_ticks; uint32 next_tick = cur_ticks + MILLISECONDS_PER_TICK; + std::unique_lock draw_lock; + if (_draw_threaded) { /* Initialise the mutex first, because that's the thing we *need* * directly in the newly created thread. */ - _draw_mutex = ThreadMutex::New(); - _draw_thread_initialized = CreateEvent(NULL, FALSE, FALSE, NULL); - if (_draw_mutex == NULL || _draw_thread_initialized == NULL) { + try { + _draw_signal = new std::condition_variable_any(); + _draw_mutex = new std::recursive_mutex(); + } catch (...) { _draw_threaded = false; - } else { + } + + if (_draw_threaded) { + draw_lock = std::unique_lock(*_draw_mutex); + _draw_continue = true; _draw_threaded = ThreadObject::New(&PaintWindowThread, NULL, &_draw_thread, "ottd:draw-win32"); /* Free the mutex if we won't be able to use it. */ if (!_draw_threaded) { + draw_lock.unlock(); + draw_lock.release(); delete _draw_mutex; + delete _draw_signal; _draw_mutex = NULL; - CloseHandle(_draw_thread_initialized); - _draw_thread_initialized = NULL; + _draw_signal = NULL; } else { DEBUG(driver, 1, "Threaded drawing enabled"); /* Wait till the draw thread has started itself. */ - WaitForSingleObject(_draw_thread_initialized, INFINITE); - _draw_mutex->BeginCritical(); + _draw_signal->wait(*_draw_mutex); } } } @@ -1227,7 +1236,7 @@ void VideoDriver_Win32::MainLoop() if (EditBoxInGlobalFocus()) TranslateMessage(&mesg); DispatchMessage(&mesg); } - if (_exit_game) return; + if (_exit_game) break; #if defined(_DEBUG) if (_wnd.has_focus && GetAsyncKeyState(VK_SHIFT) < 0 && @@ -1270,9 +1279,9 @@ void VideoDriver_Win32::MainLoop() /* The game loop is the part that can run asynchronously. * The rest except sleeping can't. */ - if (_draw_threaded) _draw_mutex->EndCritical(); + if (_draw_threaded) draw_lock.unlock(); GameLoop(); - if (_draw_threaded) _draw_mutex->BeginCritical(); + if (_draw_threaded) draw_lock.lock(); if (_force_full_redraw) MarkWholeScreenDirty(); @@ -1283,9 +1292,9 @@ void VideoDriver_Win32::MainLoop() GdiFlush(); /* Release the thread while sleeping */ - if (_draw_threaded) _draw_mutex->EndCritical(); + if (_draw_threaded) draw_lock.unlock(); Sleep(1); - if (_draw_threaded) _draw_mutex->BeginCritical(); + if (_draw_threaded) draw_lock.lock(); NetworkDrawChatMessage(); DrawMouseCursor(); @@ -1296,35 +1305,38 @@ void VideoDriver_Win32::MainLoop() _draw_continue = false; /* Sending signal if there is no thread blocked * is very valid and results in noop */ - _draw_mutex->SendSignal(); - _draw_mutex->EndCritical(); + _draw_signal->notify_all(); + if (draw_lock.owns_lock()) draw_lock.unlock(); + draw_lock.release(); _draw_thread->Join(); - CloseHandle(_draw_thread_initialized); delete _draw_mutex; + delete _draw_signal; delete _draw_thread; + + _draw_mutex = NULL; } } bool VideoDriver_Win32::ChangeResolution(int w, int h) { - if (_draw_mutex != NULL) _draw_mutex->BeginCritical(true); + std::unique_lock lock; + if (_draw_mutex != NULL) lock = std::unique_lock(*_draw_mutex); + if (_window_maximize) ShowWindow(_wnd.main_wnd, SW_SHOWNORMAL); _wnd.width = _wnd.width_org = w; _wnd.height = _wnd.height_org = h; - bool ret = this->MakeWindow(_fullscreen); // _wnd.fullscreen screws up ingame resolution switching - if (_draw_mutex != NULL) _draw_mutex->EndCritical(true); - return ret; + return this->MakeWindow(_fullscreen); // _wnd.fullscreen screws up ingame resolution switching } bool VideoDriver_Win32::ToggleFullscreen(bool full_screen) { - if (_draw_mutex != NULL) _draw_mutex->BeginCritical(true); - bool ret = this->MakeWindow(full_screen); - if (_draw_mutex != NULL) _draw_mutex->EndCritical(true); - return ret; + std::unique_lock lock; + if (_draw_mutex != NULL) lock = std::unique_lock(*_draw_mutex); + + return this->MakeWindow(full_screen); } bool VideoDriver_Win32::AfterBlitterChange() @@ -1334,19 +1346,20 @@ bool VideoDriver_Win32::AfterBlitterChange() void VideoDriver_Win32::AcquireBlitterLock() { - if (_draw_mutex != NULL) _draw_mutex->BeginCritical(true); + if (_draw_mutex != NULL) _draw_mutex->lock(); } void VideoDriver_Win32::ReleaseBlitterLock() { - if (_draw_mutex != NULL) _draw_mutex->EndCritical(true); + if (_draw_mutex != NULL) _draw_mutex->unlock(); } void VideoDriver_Win32::EditBoxLostFocus() { - if (_draw_mutex != NULL) _draw_mutex->BeginCritical(true); + std::unique_lock lock; + if (_draw_mutex != NULL) lock = std::unique_lock(*_draw_mutex); + CancelIMEComposition(_wnd.main_wnd); SetCompositionPos(_wnd.main_wnd); SetCandidatePos(_wnd.main_wnd); - if (_draw_mutex != NULL) _draw_mutex->EndCritical(true); } From 05bc2ed7cbe07cb4cd535932f10778b35f72e944 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 17 Mar 2019 01:59:46 +0100 Subject: [PATCH 616/622] Codechange: Replace custom thread code with C++11 thread objects. We assume a conforming C++11 compiler environment that has a valid -header. Failure to run a real thread is handled gracefully. --- projects/openttd_vs140.vcxproj | 3 +- projects/openttd_vs140.vcxproj.filters | 5 +- projects/openttd_vs141.vcxproj | 3 +- projects/openttd_vs141.vcxproj.filters | 5 +- projects/openttd_vs142.vcxproj | 3 +- projects/openttd_vs142.vcxproj.filters | 5 +- source.list | 15 +--- src/genworld.cpp | 22 ++--- src/genworld.h | 3 +- src/linkgraph/linkgraphjob.cpp | 10 +-- src/linkgraph/linkgraphjob.h | 6 +- src/linkgraph/linkgraphschedule.cpp | 8 +- src/linkgraph/linkgraphschedule.h | 2 +- src/music/dmusic.cpp | 12 +-- src/network/core/tcp.h | 3 +- src/network/core/tcp_connect.cpp | 8 +- src/network/network_server.h | 1 - src/network/network_udp.cpp | 61 ++++---------- src/newgrf_config.cpp | 9 +- src/openttd.cpp | 1 + src/os/os2/os2.cpp | 5 ++ src/os/unix/unix.cpp | 26 +++++- src/os/windows/win32.cpp | 7 +- src/os/windows/win32.h | 6 -- src/saveload/saveload.cpp | 25 ++---- src/sound/win32_s.cpp | 3 +- src/thread.h | 78 +++++++++++++++++ src/thread/thread.h | 59 ------------- src/thread/thread_none.cpp | 30 ------- src/thread/thread_os2.cpp | 91 -------------------- src/thread/thread_pthread.cpp | 110 ------------------------ src/thread/thread_win32.cpp | 111 ------------------------- src/video/dedicated_v.cpp | 3 +- src/video/sdl_v.cpp | 15 ++-- src/video/win32_v.cpp | 14 ++-- 35 files changed, 191 insertions(+), 577 deletions(-) create mode 100644 src/thread.h delete mode 100644 src/thread/thread.h delete mode 100644 src/thread/thread_none.cpp delete mode 100644 src/thread/thread_os2.cpp delete mode 100644 src/thread/thread_pthread.cpp delete mode 100644 src/thread/thread_win32.cpp diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index 473dfcda40..f437e2c891 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -1334,8 +1334,7 @@ - - + diff --git a/projects/openttd_vs140.vcxproj.filters b/projects/openttd_vs140.vcxproj.filters index 9a468836b0..399894b73e 100644 --- a/projects/openttd_vs140.vcxproj.filters +++ b/projects/openttd_vs140.vcxproj.filters @@ -3090,12 +3090,9 @@ Windows files - + Threading - - Threading - diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj index 2a963bfa20..89b9d0217f 100644 --- a/projects/openttd_vs141.vcxproj +++ b/projects/openttd_vs141.vcxproj @@ -1334,8 +1334,7 @@ - - + diff --git a/projects/openttd_vs141.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters index 9a468836b0..399894b73e 100644 --- a/projects/openttd_vs141.vcxproj.filters +++ b/projects/openttd_vs141.vcxproj.filters @@ -3090,12 +3090,9 @@ Windows files - + Threading - - Threading - diff --git a/projects/openttd_vs142.vcxproj b/projects/openttd_vs142.vcxproj index f4c76e0978..a3ac8fd368 100644 --- a/projects/openttd_vs142.vcxproj +++ b/projects/openttd_vs142.vcxproj @@ -1334,8 +1334,7 @@ - - + diff --git a/projects/openttd_vs142.vcxproj.filters b/projects/openttd_vs142.vcxproj.filters index 9a468836b0..399894b73e 100644 --- a/projects/openttd_vs142.vcxproj.filters +++ b/projects/openttd_vs142.vcxproj.filters @@ -3090,12 +3090,9 @@ Windows files - + Threading - - Threading - diff --git a/source.list b/source.list index 3055816876..5496edc55a 100644 --- a/source.list +++ b/source.list @@ -1173,17 +1173,4 @@ sound/null_s.cpp #end # Threading -thread/thread.h -#if USE_THREADS - #if WIN32 - thread/thread_win32.cpp - #else - #if OS2 - thread/thread_os2.cpp - #else - thread/thread_pthread.cpp - #end - #end -#else - thread/thread_none.cpp -#end +thread.h diff --git a/src/genworld.cpp b/src/genworld.cpp index 64caf3b89a..ee8768b62a 100644 --- a/src/genworld.cpp +++ b/src/genworld.cpp @@ -34,7 +34,7 @@ #include "game/game.hpp" #include "game/game_instance.hpp" #include "string_func.h" -#include "thread/thread.h" +#include "thread.h" #include "safeguards.h" @@ -94,7 +94,7 @@ static void CleanupGeneration() /** * The internal, real, generate function. */ -static void _GenerateWorld(void *) +static void _GenerateWorld() { /* Make sure everything is done via OWNER_NONE. */ Backup _cur_company(_current_company, OWNER_NONE, FILE_LINE); @@ -242,14 +242,12 @@ void GenerateWorldSetAbortCallback(GWAbortProc *proc) */ void WaitTillGeneratedWorld() { - if (_gw.thread == NULL) return; + if (!_gw.thread.joinable()) return; _modal_progress_work_mutex.unlock(); _modal_progress_paint_mutex.unlock(); _gw.quit_thread = true; - _gw.thread->Join(); - delete _gw.thread; - _gw.thread = NULL; + _gw.thread.join(); _gw.threaded = false; _modal_progress_work_mutex.lock(); _modal_progress_paint_mutex.lock(); @@ -284,7 +282,7 @@ void HandleGeneratingWorldAbortion() CleanupGeneration(); - if (_gw.thread != NULL) _gw.thread->Exit(); + if (_gw.thread.joinable() && _gw.thread.get_id() == std::this_thread::get_id()) throw OTTDThreadExitSignal(); SwitchToMode(_switch_mode); } @@ -326,17 +324,13 @@ void GenerateWorld(GenWorldMode mode, uint size_x, uint size_y, bool reset_setti SetupColoursAndInitialWindow(); SetObjectToPlace(SPR_CURSOR_ZZZ, PAL_NONE, HT_NONE, WC_MAIN_WINDOW, 0); - if (_gw.thread != NULL) { - _gw.thread->Join(); - delete _gw.thread; - _gw.thread = NULL; - } + if (_gw.thread.joinable()) _gw.thread.join(); - if (!UseThreadedModelProgress() || !VideoDriver::GetInstance()->HasGUI() || !ThreadObject::New(&_GenerateWorld, NULL, &_gw.thread, "ottd:genworld")) { + if (!UseThreadedModelProgress() || !VideoDriver::GetInstance()->HasGUI() || !StartNewThread(&_gw.thread, "ottd:genworld", &_GenerateWorld)) { DEBUG(misc, 1, "Cannot create genworld thread, reverting to single-threaded mode"); _gw.threaded = false; _modal_progress_work_mutex.unlock(); - _GenerateWorld(NULL); + _GenerateWorld(); _modal_progress_work_mutex.lock(); return; } diff --git a/src/genworld.h b/src/genworld.h index 1b1c806e09..ce6b39bd99 100644 --- a/src/genworld.h +++ b/src/genworld.h @@ -13,6 +13,7 @@ #define GENWORLD_H #include "company_type.h" +#include /** Constants related to world generation */ enum LandscapeGenerator { @@ -61,7 +62,7 @@ struct GenWorldInfo { uint size_y; ///< Y-size of the map GWDoneProc *proc; ///< Proc that is called when done (can be NULL) GWAbortProc *abortp; ///< Proc that is called when aborting (can be NULL) - class ThreadObject *thread; ///< The thread we are in (can be NULL) + std::thread thread; ///< The thread we are in (joinable if a thread was created) }; /** Current stage of world generation process */ diff --git a/src/linkgraph/linkgraphjob.cpp b/src/linkgraph/linkgraphjob.cpp index fcc9dce780..5b86838207 100644 --- a/src/linkgraph/linkgraphjob.cpp +++ b/src/linkgraph/linkgraphjob.cpp @@ -39,7 +39,6 @@ LinkGraphJob::LinkGraphJob(const LinkGraph &orig) : * This is on purpose. */ link_graph(orig), settings(_settings_game.linkgraph), - thread(NULL), join_date(_date + _settings_game.linkgraph.recalc_time) { } @@ -61,8 +60,7 @@ void LinkGraphJob::EraseFlows(NodeID from) */ void LinkGraphJob::SpawnThread() { - if (!ThreadObject::New(&(LinkGraphSchedule::Run), this, &this->thread, "ottd:linkgraph")) { - this->thread = NULL; + if (!StartNewThread(&this->thread, "ottd:linkgraph", &(LinkGraphSchedule::Run), this)) { /* Of course this will hang a bit. * On the other hand, if you want to play games which make this hang noticably * on a platform without threads then you'll probably get other problems first. @@ -79,10 +77,8 @@ void LinkGraphJob::SpawnThread() */ void LinkGraphJob::JoinThread() { - if (this->thread != NULL) { - this->thread->Join(); - delete this->thread; - this->thread = NULL; + if (this->thread.joinable()) { + this->thread.join(); } } diff --git a/src/linkgraph/linkgraphjob.h b/src/linkgraph/linkgraphjob.h index b47dd70b9b..e52d2412de 100644 --- a/src/linkgraph/linkgraphjob.h +++ b/src/linkgraph/linkgraphjob.h @@ -12,7 +12,7 @@ #ifndef LINKGRAPHJOB_H #define LINKGRAPHJOB_H -#include "../thread/thread.h" +#include "../thread.h" #include "linkgraph.h" #include @@ -59,7 +59,7 @@ private: protected: const LinkGraph link_graph; ///< Link graph to by analyzed. Is copied when job is started and mustn't be modified later. const LinkGraphSettings settings; ///< Copy of _settings_game.linkgraph at spawn time. - ThreadObject *thread; ///< Thread the job is running in or NULL if it's running in the main thread. + std::thread thread; ///< Thread the job is running in or a default-constructed thread if it's running in the main thread. Date join_date; ///< Date when the job is to be joined. NodeAnnotationVector nodes; ///< Extra node data necessary for link graph calculation. EdgeAnnotationMatrix edges; ///< Extra edge data necessary for link graph calculation. @@ -266,7 +266,7 @@ public: * Bare constructor, only for save/load. link_graph, join_date and actually * settings have to be brutally const-casted in order to populate them. */ - LinkGraphJob() : settings(_settings_game.linkgraph), thread(NULL), + LinkGraphJob() : settings(_settings_game.linkgraph), join_date(INVALID_DATE) {} LinkGraphJob(const LinkGraph &orig); diff --git a/src/linkgraph/linkgraphschedule.cpp b/src/linkgraph/linkgraphschedule.cpp index 8c508d8173..c5f797f184 100644 --- a/src/linkgraph/linkgraphschedule.cpp +++ b/src/linkgraph/linkgraphschedule.cpp @@ -69,13 +69,11 @@ void LinkGraphSchedule::JoinNext() } /** - * Run all handlers for the given Job. This method is tailored to - * ThreadObject::New. - * @param j Pointer to a link graph job. + * Run all handlers for the given Job. + * @param job Pointer to a link graph job. */ -/* static */ void LinkGraphSchedule::Run(void *j) +/* static */ void LinkGraphSchedule::Run(LinkGraphJob *job) { - LinkGraphJob *job = (LinkGraphJob *)j; for (uint i = 0; i < lengthof(instance.handlers); ++i) { instance.handlers[i]->Run(*job); } diff --git a/src/linkgraph/linkgraphschedule.h b/src/linkgraph/linkgraphschedule.h index ec22be3161..b7dfa9793f 100644 --- a/src/linkgraph/linkgraphschedule.h +++ b/src/linkgraph/linkgraphschedule.h @@ -53,7 +53,7 @@ public: static const uint SPAWN_JOIN_TICK = 21; ///< Tick when jobs are spawned or joined every day. static LinkGraphSchedule instance; - static void Run(void *j); + static void Run(LinkGraphJob *job); static void Clear(); void SpawnNext(); diff --git a/src/music/dmusic.cpp b/src/music/dmusic.cpp index 4b9a22c724..bf8657ef45 100644 --- a/src/music/dmusic.cpp +++ b/src/music/dmusic.cpp @@ -19,7 +19,7 @@ #include "../debug.h" #include "../os/windows/win32.h" #include "../core/mem_func.hpp" -#include "../thread/thread.h" +#include "../thread.h" #include "../fileio_func.h" #include "../base_media_base.h" #include "dmusic.h" @@ -139,7 +139,7 @@ static struct { } _playback; /** Handle to our worker thread. */ -static ThreadObject *_dmusic_thread = NULL; +static std::thread _dmusic_thread; /** Event to signal the thread that it should look at a state change. */ static HANDLE _thread_event = NULL; /** Lock access to playback data that is not thread-safe. */ @@ -597,7 +597,7 @@ static void TransmitNotesOff(IDirectMusicBuffer *buffer, REFERENCE_TIME block_ti Sleep(Clamp((block_time - cur_time) / MS_TO_REFTIME, 5, 1000)); } -static void MidiThreadProc(void *) +static void MidiThreadProc() { DEBUG(driver, 2, "DMusic: Entering playback thread"); @@ -1169,7 +1169,7 @@ const char *MusicDriver_DMusic::Start(const char * const *parm) _thread_event = CreateEvent(NULL, FALSE, FALSE, NULL); if (_thread_event == NULL) return "Can't create thread shutdown event"; - if (!ThreadObject::New(&MidiThreadProc, this, &_dmusic_thread, "ottd:dmusic")) return "Can't create MIDI output thread"; + if (!StartNewThread(&_dmusic_thread, "ottd:dmusic", &MidiThreadProc)) return "Can't create MIDI output thread"; return NULL; } @@ -1183,10 +1183,10 @@ MusicDriver_DMusic::~MusicDriver_DMusic() void MusicDriver_DMusic::Stop() { - if (_dmusic_thread != NULL) { + if (_dmusic_thread.joinable()) { _playback.shutdown = true; SetEvent(_thread_event); - _dmusic_thread->Join(); + _dmusic_thread.join(); } /* Unloaded any instruments we loaded. */ diff --git a/src/network/core/tcp.h b/src/network/core/tcp.h index 243ec042d2..f9e1e00cbd 100644 --- a/src/network/core/tcp.h +++ b/src/network/core/tcp.h @@ -63,7 +63,6 @@ public: */ class TCPConnecter { private: - class ThreadObject *thread; ///< Thread used to create the TCP connection bool connected; ///< Whether we succeeded in making the connection bool aborted; ///< Whether we bailed out (i.e. connection making failed) bool killed; ///< Whether we got killed @@ -71,7 +70,7 @@ private: void Connect(); - static void ThreadEntry(void *param); + static void ThreadEntry(TCPConnecter *param); protected: /** Address we're connecting to */ diff --git a/src/network/core/tcp_connect.cpp b/src/network/core/tcp_connect.cpp index d76042821a..d923688b15 100644 --- a/src/network/core/tcp_connect.cpp +++ b/src/network/core/tcp_connect.cpp @@ -12,7 +12,7 @@ */ #include "../../stdafx.h" -#include "../../thread/thread.h" +#include "../../thread.h" #include "tcp.h" @@ -33,7 +33,7 @@ TCPConnecter::TCPConnecter(const NetworkAddress &address) : address(address) { _tcp_connecters.push_back(this); - if (!ThreadObject::New(TCPConnecter::ThreadEntry, this, &this->thread, "ottd:tcp")) { + if (!StartNewThread(NULL, "ottd:tcp", &TCPConnecter::ThreadEntry, this)) { this->Connect(); } } @@ -53,9 +53,9 @@ void TCPConnecter::Connect() * Entry point for the new threads. * @param param the TCPConnecter instance to call Connect on. */ -/* static */ void TCPConnecter::ThreadEntry(void *param) +/* static */ void TCPConnecter::ThreadEntry(TCPConnecter *param) { - static_cast(param)->Connect(); + param->Connect(); } /** diff --git a/src/network/network_server.h b/src/network/network_server.h index f35192a116..f13691fcd9 100644 --- a/src/network/network_server.h +++ b/src/network/network_server.h @@ -14,7 +14,6 @@ #include "network_internal.h" #include "core/tcp_listen.h" -#include "../thread/thread.h" class ServerNetworkGameSocketHandler; /** Make the code look slightly nicer/simpler. */ diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp index df8c59aac6..7674036e78 100644 --- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -24,7 +24,7 @@ #include "network.h" #include "../core/endian_func.hpp" #include "../company_base.h" -#include "../thread/thread.h" +#include "../thread.h" #include "../rev.h" #include "../newgrf_text.h" #include "../strings_func.h" @@ -49,35 +49,19 @@ NetworkUDPSocketHandler *_udp_client_socket = NULL; ///< udp client socket NetworkUDPSocketHandler *_udp_server_socket = NULL; ///< udp server socket NetworkUDPSocketHandler *_udp_master_socket = NULL; ///< udp master socket -/** Simpler wrapper struct for NetworkUDPQueryServerThread */ -struct NetworkUDPQueryServerInfo : NetworkAddress { - bool manually; ///< Did we connect manually or not? - - /** - * Create the structure. - * @param address The address of the server to query. - * @param manually Whether the address was entered manually. - */ - NetworkUDPQueryServerInfo(const NetworkAddress &address, bool manually) : - NetworkAddress(address), - manually(manually) - { - } -}; - /** * Helper function doing the actual work for querying the server. * @param address The address of the server. * @param needs_mutex Whether we need to acquire locks when sending the packet or not. * @param manually Whether the address was entered manually. */ -static void NetworkUDPQueryServer(NetworkAddress *address, bool needs_mutex, bool manually) +static void DoNetworkUDPQueryServer(NetworkAddress &address, bool needs_mutex, bool manually) { /* Clear item in gamelist */ NetworkGameList *item = CallocT(1); - address->GetAddressAsString(item->info.server_name, lastof(item->info.server_name)); - strecpy(item->info.hostname, address->GetHostname(), lastof(item->info.hostname)); - item->address = *address; + address.GetAddressAsString(item->info.server_name, lastof(item->info.server_name)); + strecpy(item->info.hostname, address.GetHostname(), lastof(item->info.hostname)); + item->address = address; item->manually = manually; NetworkGameListAddItemDelayed(item); @@ -85,19 +69,7 @@ static void NetworkUDPQueryServer(NetworkAddress *address, bool needs_mutex, boo if (needs_mutex) lock.lock(); /* Init the packet */ Packet p(PACKET_UDP_CLIENT_FIND_SERVER); - if (_udp_client_socket != NULL) _udp_client_socket->SendPacket(&p, address); -} - -/** - * Threaded part for resolving the IP of a server and querying it. - * @param pntr the NetworkUDPQueryServerInfo. - */ -static void NetworkUDPQueryServerThread(void *pntr) -{ - NetworkUDPQueryServerInfo *info = (NetworkUDPQueryServerInfo*)pntr; - NetworkUDPQueryServer(info, true, info->manually); - - delete info; + if (_udp_client_socket != NULL) _udp_client_socket->SendPacket(&p, &address); } /** @@ -107,9 +79,8 @@ static void NetworkUDPQueryServerThread(void *pntr) */ void NetworkUDPQueryServer(NetworkAddress address, bool manually) { - NetworkUDPQueryServerInfo *info = new NetworkUDPQueryServerInfo(address, manually); - if (address.IsResolved() || !ThreadObject::New(NetworkUDPQueryServerThread, info, NULL, "ottd:udp-query")) { - NetworkUDPQueryServerThread(info); + if (address.IsResolved() || !StartNewThread(NULL, "ottd:udp-query", &DoNetworkUDPQueryServer, std::move(address), true, std::move(manually))) { + DoNetworkUDPQueryServer(address, true, manually); } } @@ -429,7 +400,7 @@ void ClientNetworkUDPSocketHandler::Receive_MASTER_RESPONSE_LIST(Packet *p, Netw /* Somehow we reached the end of the packet */ if (this->HasClientQuit()) return; - NetworkUDPQueryServer(&addr, false, false); + DoNetworkUDPQueryServer(addr, false, false); } } } @@ -535,9 +506,8 @@ void NetworkUDPSearchGame() /** * Thread entry point for de-advertising. - * @param pntr unused. */ -static void NetworkUDPRemoveAdvertiseThread(void *pntr) +static void NetworkUDPRemoveAdvertiseThread() { DEBUG(net, 1, "[udp] removing advertise from master server"); @@ -563,16 +533,15 @@ void NetworkUDPRemoveAdvertise(bool blocking) /* Check if we are advertising */ if (!_networking || !_network_server || !_network_udp_server) return; - if (blocking || !ThreadObject::New(NetworkUDPRemoveAdvertiseThread, NULL, NULL, "ottd:udp-advert")) { - NetworkUDPRemoveAdvertiseThread(NULL); + if (blocking || !StartNewThread(NULL, "ottd:udp-advert", &NetworkUDPRemoveAdvertiseThread)) { + NetworkUDPRemoveAdvertiseThread(); } } /** * Thread entry point for advertising. - * @param pntr unused. */ -static void NetworkUDPAdvertiseThread(void *pntr) +static void NetworkUDPAdvertiseThread() { /* Find somewhere to send */ NetworkAddress out_addr(NETWORK_MASTER_SERVER_HOST, NETWORK_MASTER_SERVER_PORT); @@ -645,8 +614,8 @@ void NetworkUDPAdvertise() if (_next_advertisement < _last_advertisement) _next_advertisement = UINT32_MAX; if (_next_retry < _last_advertisement) _next_retry = UINT32_MAX; - if (!ThreadObject::New(NetworkUDPAdvertiseThread, NULL, NULL, "ottd:udp-advert")) { - NetworkUDPAdvertiseThread(NULL); + if (!StartNewThread(NULL, "ottd:udp-advert", &NetworkUDPAdvertiseThread)) { + NetworkUDPAdvertiseThread(); } } diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index feb23648a9..acde37063b 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -21,7 +21,8 @@ #include "video/video_driver.hpp" #include "strings_func.h" #include "textfile_gui.h" -#include "thread/thread.h" +#include "thread.h" +#include "newgrf_config.h" #include "fileio_func.h" #include "fios.h" @@ -724,7 +725,7 @@ static int CDECL GRFSorter(GRFConfig * const *p1, GRFConfig * const *p2) * Really perform the scan for all NewGRFs. * @param callback The callback to call after the scanning is complete. */ -void DoScanNewGRFFiles(void *callback) +void DoScanNewGRFFiles(NewGRFScanCallback *callback) { std::unique_lock lock_work(_modal_progress_work_mutex); @@ -767,7 +768,7 @@ void DoScanNewGRFFiles(void *callback) /* Yes... these are the NewGRF windows */ InvalidateWindowClassesData(WC_SAVELOAD, 0, true); InvalidateWindowData(WC_GAME_OPTIONS, WN_GAME_OPTIONS_NEWGRF_STATE, GOID_NEWGRF_RESCANNED, true); - if (callback != NULL) ((NewGRFScanCallback*)callback)->OnNewGRFsScanned(); + if (callback != NULL) callback->OnNewGRFsScanned(); DeleteWindowByClass(WC_MODAL_PROGRESS); SetModalProgress(false); @@ -785,7 +786,7 @@ void ScanNewGRFFiles(NewGRFScanCallback *callback) /* Only then can we really start, especially by marking the whole screen dirty. Get those other windows hidden!. */ MarkWholeScreenDirty(); - if (!UseThreadedModelProgress() || !VideoDriver::GetInstance()->HasGUI() || !ThreadObject::New(&DoScanNewGRFFiles, callback, NULL, "ottd:newgrf-scan")) { + if (!UseThreadedModelProgress() || !VideoDriver::GetInstance()->HasGUI() || !StartNewThread(NULL, "ottd:newgrf-scan", &DoScanNewGRFFiles, (NewGRFScanCallback *)callback)) { // Without the seemingly superfluous cast, strange compiler errors ensue. _modal_progress_work_mutex.unlock(); _modal_progress_paint_mutex.unlock(); DoScanNewGRFFiles(callback); diff --git a/src/openttd.cpp b/src/openttd.cpp index 180de64b0d..9fd672916e 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -857,6 +857,7 @@ int openttd_main(int argc, char *argv[]) VideoDriver::GetInstance()->MainLoop(); WaitTillSaved(); + WaitTillGeneratedWorld(); // Make sure any generate world threads have been joined. /* only save config if we have to */ if (save_config) { diff --git a/src/os/os2/os2.cpp b/src/os/os2/os2.cpp index 7b34f528a6..9d01a99b87 100644 --- a/src/os/os2/os2.cpp +++ b/src/os/os2/os2.cpp @@ -18,6 +18,7 @@ #include "../../core/random_func.hpp" #include "../../string_func.h" #include "../../textbuf_gui.h" +#include "../../thread.h" #include "table/strings.h" @@ -226,3 +227,7 @@ void OSOpenBrowser(const char *url) // stub only DEBUG(misc, 0, "Failed to open url: %s", url); } + +void SetCurrentThreadName(const char *) +{ +} diff --git a/src/os/unix/unix.cpp b/src/os/unix/unix.cpp index 2f982dea06..024dc86274 100644 --- a/src/os/unix/unix.cpp +++ b/src/os/unix/unix.cpp @@ -17,6 +17,7 @@ #include "../../debug.h" #include "../../string_func.h" #include "../../fios.h" +#include "../../thread.h" #include @@ -43,11 +44,17 @@ #include #endif +#ifndef NO_THREADS +#include +#endif + #if defined(__APPLE__) - #if defined(WITH_SDL) +# if defined(WITH_SDL) /* the mac implementation needs this file included in the same file as main() */ - #include - #endif +# include +# endif + +# include "../macosx/macos.h" #endif #include "../../safeguards.h" @@ -317,4 +324,15 @@ void OSOpenBrowser(const char *url) DEBUG(misc, 0, "Failed to open url: %s", url); exit(0); } -#endif +#endif /* __APPLE__ */ + +void SetCurrentThreadName(const char *threadName) { +#if !defined(NO_THREADS) && defined(__GLIBC__) +#if __GLIBC_PREREQ(2, 12) + if (threadName) pthread_setname_np(pthread_self(), threadName); +#endif /* __GLIBC_PREREQ(2, 12) */ +#endif /* !defined(NO_THREADS) && defined(__GLIBC__) */ +#if defined(__APPLE__) + MacOSSetThreadName(threadName); +#endif /* defined(__APPLE__) */ +} diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp index 4a49555492..2a72ca1c5f 100644 --- a/src/os/windows/win32.cpp +++ b/src/os/windows/win32.cpp @@ -30,6 +30,7 @@ #include #include #include "../../language.h" +#include "../../thread.h" #include "../../safeguards.h" @@ -816,12 +817,12 @@ PACK_N(struct THREADNAME_INFO { /** * Signal thread name to any attached debuggers. */ -void SetWin32ThreadName(DWORD dwThreadID, const char* threadName) +void SetCurrentThreadName(const char *threadName) { THREADNAME_INFO info; info.dwType = 0x1000; info.szName = threadName; - info.dwThreadID = dwThreadID; + info.dwThreadID = -1; info.dwFlags = 0; #pragma warning(push) @@ -832,4 +833,6 @@ void SetWin32ThreadName(DWORD dwThreadID, const char* threadName) } #pragma warning(pop) } +#else +void SetCurrentThreadName(const char *) {} #endif diff --git a/src/os/windows/win32.h b/src/os/windows/win32.h index 4f813c4a6f..23e216762c 100644 --- a/src/os/windows/win32.h +++ b/src/os/windows/win32.h @@ -39,12 +39,6 @@ HRESULT OTTDSHGetFolderPath(HWND, int, HANDLE, DWORD, LPTSTR); #define SHGFP_TYPE_CURRENT 0 #endif /* __MINGW32__ */ -#ifdef _MSC_VER -void SetWin32ThreadName(DWORD dwThreadID, const char* threadName); -#else -static inline void SetWin32ThreadName(DWORD dwThreadID, const char* threadName) {} -#endif - void Win32SetCurrentLocaleName(const char *iso_code); int OTTDStringCompare(const char *s1, const char *s2); diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index c97087224b..95690f6af3 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -26,7 +26,7 @@ #include "../stdafx.h" #include "../debug.h" #include "../station_base.h" -#include "../thread/thread.h" +#include "../thread.h" #include "../town.h" #include "../network/network.h" #include "../window_func.h" @@ -372,7 +372,7 @@ void NORETURN SlErrorCorruptFmt(const char *format, ...) typedef void (*AsyncSaveFinishProc)(); ///< Callback for when the savegame loading is finished. static AsyncSaveFinishProc _async_save_finish = NULL; ///< Callback to call when the savegame loading is finished. -static ThreadObject *_save_thread; ///< The thread we're using to compress and write a savegame +static std::thread _save_thread; ///< The thread we're using to compress and write a savegame /** * Called by save thread to tell we finished saving. @@ -397,10 +397,8 @@ void ProcessAsyncSaveFinish() _async_save_finish = NULL; - if (_save_thread != NULL) { - _save_thread->Join(); - delete _save_thread; - _save_thread = NULL; + if (_save_thread.joinable()) { + _save_thread.join(); } } @@ -2486,19 +2484,11 @@ static SaveOrLoadResult SaveFileToDisk(bool threaded) } } -/** Thread run function for saving the file to disk. */ -static void SaveFileToDiskThread(void *arg) -{ - SaveFileToDisk(true); -} - void WaitTillSaved() { - if (_save_thread == NULL) return; + if (!_save_thread.joinable()) return; - _save_thread->Join(); - delete _save_thread; - _save_thread = NULL; + _save_thread.join(); /* Make sure every other state is handled properly as well. */ ProcessAsyncSaveFinish(); @@ -2525,7 +2515,8 @@ static SaveOrLoadResult DoSave(SaveFilter *writer, bool threaded) SlSaveChunks(); SaveFileStart(); - if (!threaded || !ThreadObject::New(&SaveFileToDiskThread, NULL, &_save_thread, "ottd:savegame")) { + + if (!threaded || !StartNewThread(&_save_thread, "ottd:savegame", &SaveFileToDisk, true)) { if (threaded) DEBUG(sl, 1, "Cannot create savegame thread, reverting to single-threaded mode..."); SaveOrLoadResult result = SaveFileToDisk(false); diff --git a/src/sound/win32_s.cpp b/src/sound/win32_s.cpp index c9c1a8afdc..493ed7fc17 100644 --- a/src/sound/win32_s.cpp +++ b/src/sound/win32_s.cpp @@ -20,6 +20,7 @@ #include #include #include "../os/windows/win32.h" +#include "../thread.h" #include "../safeguards.h" @@ -42,7 +43,7 @@ static void PrepareHeader(WAVEHDR *hdr) static DWORD WINAPI SoundThread(LPVOID arg) { - SetWin32ThreadName(-1, "ottd:win-sound"); + SetCurrentThreadName("ottd:win-sound"); do { for (WAVEHDR *hdr = _wave_hdr; hdr != endof(_wave_hdr); hdr++) { diff --git a/src/thread.h b/src/thread.h new file mode 100644 index 0000000000..086e2f51ec --- /dev/null +++ b/src/thread.h @@ -0,0 +1,78 @@ +/* $Id$ */ + +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file thread.h Base of all threads. */ + +#ifndef THREAD_H +#define THREAD_H + +#include "debug.h" +#include +#include + +/** Signal used for signalling we knowingly want to end the thread. */ +class OTTDThreadExitSignal { }; + + +/** + * Get number of processor cores in the system, including HyperThreading or similar. + * @return Total number of processor cores. + */ +uint GetCPUCoreCount(); + +/** + * Name the thread this function is called on for the debugger. + * @param name Name to set for the thread.. + */ +void SetCurrentThreadName(const char *name); + + +/** + * Start a new thread. + * @tparam TFn Type of the function to call on the thread. + * @tparam TArgs Type of the parameters of the thread function. + * @param thr Pointer to a thread object; may be \c NULL if a detached thread is wanted. + * @param name Name of the thread. + * @param _Fx Function to call on the thread. + * @param _Ax Arguments for the thread function. + * @return True if the thread was successfully started, false otherwise. + */ +template +inline bool StartNewThread(std::thread *thr, const char *name, TFn&& _Fx, TArgs&&... _Ax) +{ +#ifndef NO_THREADS + try { + std::thread t([] (const char *name, TFn&& F, TArgs&&... A) { + SetCurrentThreadName(name); + try { + /* Call user function with the given arguments. */ + F(A...); + } catch (OTTDThreadExitSignal&) { + } catch (...) { + NOT_REACHED(); + } + }, name, std::forward(_Fx), std::forward(_Ax)...); + + if (thr != NULL) { + *thr = std::move(t); + } else { + t.detach(); + } + + return true; + } catch (const std::system_error& e) { + /* Something went wrong, the system we are running on might not support threads. */ + DEBUG(misc, 1, "Can't create thread '%s': %s", name, e.what()); + } +#endif + + return false; +} + +#endif /* THREAD_H */ diff --git a/src/thread/thread.h b/src/thread/thread.h deleted file mode 100644 index eca825e25e..0000000000 --- a/src/thread/thread.h +++ /dev/null @@ -1,59 +0,0 @@ -/* $Id$ */ - -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/** @file thread.h Base of all threads. */ - -#ifndef THREAD_H -#define THREAD_H - -/** Definition of all thread entry functions. */ -typedef void (*OTTDThreadFunc)(void *); - -/** Signal used for signalling we knowingly want to end the thread. */ -class OTTDThreadExitSignal { }; - -/** - * A Thread Object which works on all our supported OSes. - */ -class ThreadObject { -public: - /** - * Virtual destructor to allow 'delete' operator to work properly. - */ - virtual ~ThreadObject() {}; - - /** - * Exit this thread. - */ - virtual bool Exit() = 0; - - /** - * Join this thread. - */ - virtual void Join() = 0; - - /** - * Create a thread; proc will be called as first function inside the thread, - * with optional params. - * @param proc The procedure to call inside the thread. - * @param param The params to give with 'proc'. - * @param thread Place to store a pointer to the thread in. May be NULL. - * @param name A name for the thread. May be NULL. - * @return True if the thread was started correctly. - */ - static bool New(OTTDThreadFunc proc, void *param, ThreadObject **thread = NULL, const char *name = NULL); -}; - -/** - * Get number of processor cores in the system, including HyperThreading or similar. - * @return Total number of processor cores. - */ -uint GetCPUCoreCount(); - -#endif /* THREAD_H */ diff --git a/src/thread/thread_none.cpp b/src/thread/thread_none.cpp deleted file mode 100644 index 83ae52d460..0000000000 --- a/src/thread/thread_none.cpp +++ /dev/null @@ -1,30 +0,0 @@ -/* $Id$ */ - -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/** @file thread_none.cpp No-Threads-Available implementation of Threads */ - -#include "../stdafx.h" -#include "thread.h" - -#include "../safeguards.h" - -/* static */ bool ThreadObject::New(OTTDThreadFunc proc, void *param, ThreadObject **thread, const char *name) -{ - if (thread != NULL) *thread = NULL; - return false; -} - -/** Mutex that doesn't do locking because it ain't needed when there're no threads */ -class ThreadMutex_None : public ThreadMutex { -public: - virtual void BeginCritical(bool allow_recursive = false) {} - virtual void EndCritical(bool allow_recursive = false) {} - virtual void WaitForSignal() {} - virtual void SendSignal() {} -}; diff --git a/src/thread/thread_os2.cpp b/src/thread/thread_os2.cpp deleted file mode 100644 index 72ee080d6d..0000000000 --- a/src/thread/thread_os2.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/* $Id$ */ - -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/** @file thread_os2.cpp OS/2 implementation of Threads. */ - -#include "../stdafx.h" -#include "thread.h" - -#define INCL_DOS -#include -#include - -#include "../safeguards.h" - -/** - * OS/2 version for ThreadObject. - */ -class ThreadObject_OS2 : public ThreadObject { -private: - TID thread; ///< System thread identifier. - OTTDThreadFunc proc; ///< External thread procedure. - void *param; ///< Parameter for the external thread procedure. - bool self_destruct; ///< Free ourselves when done? - -public: - /** - * Create a thread and start it, calling proc(param). - */ - ThreadObject_OS2(OTTDThreadFunc proc, void *param, bool self_destruct) : - thread(0), - proc(proc), - param(param), - self_destruct(self_destruct) - { - thread = _beginthread(stThreadProc, NULL, 1048576, this); - } - - bool Exit() override - { - _endthread(); - return true; - } - - void Join() override - { - DosWaitThread(&this->thread, DCWW_WAIT); - this->thread = 0; - } -private: - /** - * On thread creation, this function is called, which calls the real startup - * function. This to get back into the correct instance again. - */ - static void stThreadProc(void *thr) - { - ((ThreadObject_OS2 *)thr)->ThreadProc(); - } - - /** - * A new thread is created, and this function is called. Call the custom - * function of the creator of the thread. - */ - void ThreadProc() - { - /* Call the proc of the creator to continue this thread */ - try { - this->proc(this->param); - } catch (OTTDThreadExitSignal e) { - } catch (...) { - NOT_REACHED(); - } - - if (self_destruct) { - this->Exit(); - delete this; - } - } -}; - -/* static */ bool ThreadObject::New(OTTDThreadFunc proc, void *param, ThreadObject **thread, const char *name) -{ - ThreadObject *to = new ThreadObject_OS2(proc, param, thread == NULL); - if (thread != NULL) *thread = to; - return true; -} diff --git a/src/thread/thread_pthread.cpp b/src/thread/thread_pthread.cpp deleted file mode 100644 index 50fefb5311..0000000000 --- a/src/thread/thread_pthread.cpp +++ /dev/null @@ -1,110 +0,0 @@ -/* $Id$ */ - -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/** @file thread_pthread.cpp POSIX pthread implementation of Threads. */ - -#include "../stdafx.h" -#include "thread.h" -#include -#include - -#if defined(__APPLE__) -#include "../os/macosx/macos.h" -#endif - -#include "../safeguards.h" - -/** - * POSIX pthread version for ThreadObject. - */ -class ThreadObject_pthread : public ThreadObject { -private: - pthread_t thread; ///< System thread identifier. - OTTDThreadFunc proc; ///< External thread procedure. - void *param; ///< Parameter for the external thread procedure. - bool self_destruct; ///< Free ourselves when done? - const char *name; ///< Name for the thread - -public: - /** - * Create a pthread and start it, calling proc(param). - */ - ThreadObject_pthread(OTTDThreadFunc proc, void *param, bool self_destruct, const char *name) : - thread(0), - proc(proc), - param(param), - self_destruct(self_destruct), - name(name) - { - pthread_create(&this->thread, NULL, &stThreadProc, this); - } - - bool Exit() override - { - assert(pthread_self() == this->thread); - /* For now we terminate by throwing an error, gives much cleaner cleanup */ - throw OTTDThreadExitSignal(); - } - - void Join() override - { - /* You cannot join yourself */ - assert(pthread_self() != this->thread); - pthread_join(this->thread, NULL); - this->thread = 0; - } -private: - /** - * On thread creation, this function is called, which calls the real startup - * function. This to get back into the correct instance again. - */ - static void *stThreadProc(void *thr) - { - ThreadObject_pthread *self = (ThreadObject_pthread *) thr; -#if defined(__GLIBC__) -#if __GLIBC_PREREQ(2, 12) - if (self->name) { - pthread_setname_np(pthread_self(), self->name); - } -#endif -#endif -#if defined(__APPLE__) - MacOSSetThreadName(self->name); -#endif - self->ThreadProc(); - pthread_exit(NULL); - } - - /** - * A new thread is created, and this function is called. Call the custom - * function of the creator of the thread. - */ - void ThreadProc() - { - /* Call the proc of the creator to continue this thread */ - try { - this->proc(this->param); - } catch (OTTDThreadExitSignal) { - } catch (...) { - NOT_REACHED(); - } - - if (self_destruct) { - pthread_detach(pthread_self()); - delete this; - } - } -}; - -/* static */ bool ThreadObject::New(OTTDThreadFunc proc, void *param, ThreadObject **thread, const char *name) -{ - ThreadObject *to = new ThreadObject_pthread(proc, param, thread == NULL, name); - if (thread != NULL) *thread = to; - return true; -} diff --git a/src/thread/thread_win32.cpp b/src/thread/thread_win32.cpp deleted file mode 100644 index fc7a85a91c..0000000000 --- a/src/thread/thread_win32.cpp +++ /dev/null @@ -1,111 +0,0 @@ -/* $Id$ */ - -/* - * This file is part of OpenTTD. - * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. - * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . - */ - -/** @file thread_win32.cpp Win32 thread implementation of Threads. */ - -#include "../stdafx.h" -#include "thread.h" -#include "../debug.h" -#include "../core/alloc_func.hpp" -#include -#include -#include -#include "../os/windows/win32.h" - -#include "../safeguards.h" - -/** - * Win32 thread version for ThreadObject. - */ -class ThreadObject_Win32 : public ThreadObject { -private: - HANDLE thread; ///< System thread identifier. - uint id; ///< Thread identifier. - OTTDThreadFunc proc; ///< External thread procedure. - void *param; ///< Parameter for the external thread procedure. - bool self_destruct; ///< Free ourselves when done? - const char *name; ///< Thread name. - -public: - /** - * Create a win32 thread and start it, calling proc(param). - */ - ThreadObject_Win32(OTTDThreadFunc proc, void *param, bool self_destruct, const char *name) : - thread(NULL), - id(0), - proc(proc), - param(param), - self_destruct(self_destruct), - name(name) - { - this->thread = (HANDLE)_beginthreadex(NULL, 0, &stThreadProc, this, CREATE_SUSPENDED, &this->id); - if (this->thread == NULL) return; - ResumeThread(this->thread); - } - - ~ThreadObject_Win32() override - { - if (this->thread != NULL) { - CloseHandle(this->thread); - this->thread = NULL; - } - } - - bool Exit() override - { - assert(GetCurrentThreadId() == this->id); - /* For now we terminate by throwing an error, gives much cleaner cleanup */ - throw OTTDThreadExitSignal(); - } - - void Join() override - { - /* You cannot join yourself */ - assert(GetCurrentThreadId() != this->id); - WaitForSingleObject(this->thread, INFINITE); - } - -private: - /** - * On thread creation, this function is called, which calls the real startup - * function. This to get back into the correct instance again. - */ - static uint CALLBACK stThreadProc(void *thr) - { - ((ThreadObject_Win32 *)thr)->ThreadProc(); - return 0; - } - - /** - * A new thread is created, and this function is called. Call the custom - * function of the creator of the thread. - */ - void ThreadProc() - { -#ifdef _MSC_VER - /* Set thread name for debuggers. Has to be done from the thread due to a race condition in older MS debuggers. */ - SetWin32ThreadName(-1, this->name); -#endif - try { - this->proc(this->param); - } catch (OTTDThreadExitSignal) { - } catch (...) { - NOT_REACHED(); - } - - if (self_destruct) delete this; - } -}; - -/* static */ bool ThreadObject::New(OTTDThreadFunc proc, void *param, ThreadObject **thread, const char *name) -{ - ThreadObject *to = new ThreadObject_Win32(proc, param, thread == NULL, name); - if (thread != NULL) *thread = to; - return true; -} diff --git a/src/video/dedicated_v.cpp b/src/video/dedicated_v.cpp index 58d7d04e0b..e0096c8936 100644 --- a/src/video/dedicated_v.cpp +++ b/src/video/dedicated_v.cpp @@ -73,6 +73,7 @@ static void DedicatedSignalHandler(int sig) # include # include # include "../os/windows/win32.h" +# include "../thread.h" static HANDLE _hInputReady, _hWaitForInputHandling; static HANDLE _hThread; // Thread to close static char _win_console_thread_buffer[200]; @@ -80,7 +81,7 @@ static char _win_console_thread_buffer[200]; /* Windows Console thread. Just loop and signal when input has been received */ static void WINAPI CheckForConsoleInput() { - SetWin32ThreadName(-1, "ottd:win-console"); + SetCurrentThreadName("ottd:win-console"); DWORD nb; HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index b1609f7b37..5e3fb45529 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -17,7 +17,7 @@ #include "../rev.h" #include "../blitter/factory.hpp" #include "../network/network.h" -#include "../thread/thread.h" +#include "../thread.h" #include "../progress.h" #include "../core/random_func.hpp" #include "../core/math_func.hpp" @@ -38,8 +38,6 @@ static bool _all_modes; /** Whether the drawing is/may be done in a separate thread. */ static bool _draw_threaded; -/** Thread used to 'draw' to the screen, i.e. push data to the screen. */ -static ThreadObject *_draw_thread = NULL; /** Mutex to keep the access to the shared memory controlled. */ static std::recursive_mutex *_draw_mutex = NULL; /** Signal to draw the next frame. */ @@ -173,7 +171,7 @@ static void DrawSurfaceToScreen() } } -static void DrawSurfaceToScreenThread(void *) +static void DrawSurfaceToScreenThread() { /* First tell the main thread we're started */ std::unique_lock lock(*_draw_mutex); @@ -188,8 +186,6 @@ static void DrawSurfaceToScreenThread(void *) DrawSurfaceToScreen(); _draw_signal->wait(lock); } - - _draw_thread->Exit(); } static const Dimension _default_resolutions[] = { @@ -671,6 +667,7 @@ void VideoDriver_SDL::MainLoop() CheckPaletteAnim(); + std::thread draw_thread; std::unique_lock draw_lock; if (_draw_threaded) { /* Initialise the mutex first, because that's the thing we *need* @@ -683,7 +680,7 @@ void VideoDriver_SDL::MainLoop() _draw_signal = new std::condition_variable_any(); _draw_continue = true; - _draw_threaded = ThreadObject::New(&DrawSurfaceToScreenThread, NULL, &_draw_thread, "ottd:draw-sdl"); + _draw_threaded = StartNewThread(&draw_thread, "ottd:draw-sdl", &DrawSurfaceToScreenThread); /* Free the mutex if we won't be able to use it. */ if (!_draw_threaded) { @@ -795,15 +792,13 @@ void VideoDriver_SDL::MainLoop() _draw_signal->notify_one(); if (draw_lock.owns_lock()) draw_lock.unlock(); draw_lock.release(); - _draw_thread->Join(); + draw_thread.join(); delete _draw_mutex; delete _draw_signal; - delete _draw_thread; _draw_mutex = NULL; _draw_signal = NULL; - _draw_thread = NULL; } } diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index ef7bc89e2c..5aec329b21 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -19,7 +19,7 @@ #include "../core/math_func.hpp" #include "../core/random_func.hpp" #include "../texteff.hpp" -#include "../thread/thread.h" +#include "../thread.h" #include "../progress.h" #include "../window_gui.h" #include "../window_func.h" @@ -67,8 +67,6 @@ DWORD _imm_props; /** Whether the drawing is/may be done in a separate thread. */ static bool _draw_threaded; -/** Thread used to 'draw' to the screen, i.e. push data to the screen. */ -static ThreadObject *_draw_thread = NULL; /** Mutex to keep the access to the shared memory controlled. */ static std::recursive_mutex *_draw_mutex = NULL; /** Signal to draw the next frame. */ @@ -395,7 +393,7 @@ static void PaintWindow(HDC dc) DeleteDC(dc2); } -static void PaintWindowThread(void *) +static void PaintWindowThread() { /* First tell the main thread we're started */ std::unique_lock lock(*_draw_mutex); @@ -426,8 +424,6 @@ static void PaintWindowThread(void *) _draw_signal->wait(*_draw_mutex); } - - _draw_thread->Exit(); } /** Forward key presses to the window system. */ @@ -1190,6 +1186,7 @@ void VideoDriver_Win32::MainLoop() uint32 last_cur_ticks = cur_ticks; uint32 next_tick = cur_ticks + MILLISECONDS_PER_TICK; + std::thread draw_thread; std::unique_lock draw_lock; if (_draw_threaded) { @@ -1206,7 +1203,7 @@ void VideoDriver_Win32::MainLoop() draw_lock = std::unique_lock(*_draw_mutex); _draw_continue = true; - _draw_threaded = ThreadObject::New(&PaintWindowThread, NULL, &_draw_thread, "ottd:draw-win32"); + _draw_threaded = StartNewThread(&draw_thread, "ottd:draw-win32", &PaintWindowThread); /* Free the mutex if we won't be able to use it. */ if (!_draw_threaded) { @@ -1308,11 +1305,10 @@ void VideoDriver_Win32::MainLoop() _draw_signal->notify_all(); if (draw_lock.owns_lock()) draw_lock.unlock(); draw_lock.release(); - _draw_thread->Join(); + draw_thread.join(); delete _draw_mutex; delete _draw_signal; - delete _draw_thread; _draw_mutex = NULL; } From 94c5269fa772304112b7c40d2c84794056f87717 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 17 Mar 2019 11:05:38 +0100 Subject: [PATCH 617/622] Codechange: Use atomic variables for thread synchronization where useful. --- src/network/network_gamelist.cpp | 19 ++++++++----------- src/saveload/saveload.cpp | 18 +++++++++--------- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/src/network/network_gamelist.cpp b/src/network/network_gamelist.cpp index c67fba5ec3..e9fc5f943e 100644 --- a/src/network/network_gamelist.cpp +++ b/src/network/network_gamelist.cpp @@ -18,16 +18,14 @@ #include "network_internal.h" #include "network_udp.h" #include "network_gamelist.h" -#include +#include #include "../safeguards.h" NetworkGameList *_network_game_list = NULL; -/** Mutex for handling delayed insertion/querying of servers. */ -static std::mutex _network_game_list_mutex; /** The games to insert when the GUI thread has time for us. */ -static NetworkGameList *_network_game_delayed_insertion_list = NULL; +static std::atomic _network_game_delayed_insertion_list(NULL); /** * Add a new item to the linked gamelist, but do it delayed in the next tick @@ -36,18 +34,17 @@ static NetworkGameList *_network_game_delayed_insertion_list = NULL; */ void NetworkGameListAddItemDelayed(NetworkGameList *item) { - std::lock_guard lock(_network_game_list_mutex); - item->next = _network_game_delayed_insertion_list; - _network_game_delayed_insertion_list = item; + item->next = _network_game_delayed_insertion_list.load(std::memory_order_relaxed); + while (!_network_game_delayed_insertion_list.compare_exchange_weak(item->next, item, std::memory_order_acq_rel)) {} } /** Perform the delayed (thread safe) insertion into the game list */ static void NetworkGameListHandleDelayedInsert() { - std::lock_guard lock(_network_game_list_mutex); - while (_network_game_delayed_insertion_list != NULL) { - NetworkGameList *ins_item = _network_game_delayed_insertion_list; - _network_game_delayed_insertion_list = ins_item->next; + while (true) { + NetworkGameList *ins_item = _network_game_delayed_insertion_list.load(std::memory_order_relaxed); + while (ins_item != NULL && !_network_game_delayed_insertion_list.compare_exchange_weak(ins_item, ins_item->next, std::memory_order_acq_rel)) {} + if (ins_item == NULL) break; // No item left. NetworkGameList *item = NetworkGameListAddItem(ins_item->address); diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 95690f6af3..721631fe68 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -45,6 +45,7 @@ #include "../string_func.h" #include "../fios.h" #include "../error.h" +#include #include "table/strings.h" @@ -370,9 +371,9 @@ void NORETURN SlErrorCorruptFmt(const char *format, ...) } -typedef void (*AsyncSaveFinishProc)(); ///< Callback for when the savegame loading is finished. -static AsyncSaveFinishProc _async_save_finish = NULL; ///< Callback to call when the savegame loading is finished. -static std::thread _save_thread; ///< The thread we're using to compress and write a savegame +typedef void (*AsyncSaveFinishProc)(); ///< Callback for when the savegame loading is finished. +static std::atomic _async_save_finish; ///< Callback to call when the savegame loading is finished. +static std::thread _save_thread; ///< The thread we're using to compress and write a savegame /** * Called by save thread to tell we finished saving. @@ -381,9 +382,9 @@ static std::thread _save_thread; ///< The thread we're usin static void SetAsyncSaveFinish(AsyncSaveFinishProc proc) { if (_exit_game) return; - while (_async_save_finish != NULL) CSleep(10); + while (_async_save_finish.load(std::memory_order_acquire) != NULL) CSleep(10); - _async_save_finish = proc; + _async_save_finish.store(proc, std::memory_order_release); } /** @@ -391,11 +392,10 @@ static void SetAsyncSaveFinish(AsyncSaveFinishProc proc) */ void ProcessAsyncSaveFinish() { - if (_async_save_finish == NULL) return; + AsyncSaveFinishProc proc = _async_save_finish.exchange(NULL, std::memory_order_acq_rel); + if (proc == NULL) return; - _async_save_finish(); - - _async_save_finish = NULL; + proc(); if (_save_thread.joinable()) { _save_thread.join(); From ae748166d06e756a0a6abab582dc341494a9b2da Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 17 Mar 2019 11:05:53 +0100 Subject: [PATCH 618/622] Codechange: Use platform independent C++11 function for sleeping on a thread. --- src/gfx.cpp | 1 + src/gfx_func.h | 1 - src/music/extmidi.cpp | 1 + src/network/network_client.cpp | 1 + src/os/os2/os2.cpp | 9 --------- src/os/unix/unix.cpp | 8 -------- src/os/windows/win32.cpp | 6 ------ src/thread.h | 9 +++++++++ src/video/allegro_v.cpp | 1 + src/video/cocoa/event.mm | 1 + src/video/cocoa/fullscreen.mm | 3 ++- src/video/dedicated_v.cpp | 1 + 12 files changed, 17 insertions(+), 25 deletions(-) diff --git a/src/gfx.cpp b/src/gfx.cpp index b7e31a3845..f1b91c16eb 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -21,6 +21,7 @@ #include "network/network_func.h" #include "window_func.h" #include "newgrf_debug.h" +#include "thread.h" #include "table/palettes.h" #include "table/string_colours.h" diff --git a/src/gfx_func.h b/src/gfx_func.h index 9f7cb9153d..2abbcd2a87 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -75,7 +75,6 @@ void HandleKeypress(uint keycode, WChar key); void HandleTextInput(const char *str, bool marked = false, const char *caret = NULL, const char *insert_location = NULL, const char *replacement_end = NULL); void HandleCtrlChanged(); void HandleMouseEvents(); -void CSleep(int milliseconds); void UpdateWindows(); void DrawMouseCursor(); diff --git a/src/music/extmidi.cpp b/src/music/extmidi.cpp index 9d07761b73..f7fc454dff 100644 --- a/src/music/extmidi.cpp +++ b/src/music/extmidi.cpp @@ -18,6 +18,7 @@ #include "../gfx_func.h" #include "extmidi.h" #include "../base_media_base.h" +#include "../thread.h" #include "midifile.hpp" #include #include diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 7b658e8b5a..8c68b98f87 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -29,6 +29,7 @@ #include "network_base.h" #include "network_client.h" #include "../core/backup_type.hpp" +#include "../thread.h" #include "table/strings.h" diff --git a/src/os/os2/os2.cpp b/src/os/os2/os2.cpp index 9d01a99b87..b62e83e5ef 100644 --- a/src/os/os2/os2.cpp +++ b/src/os/os2/os2.cpp @@ -205,15 +205,6 @@ bool GetClipboardContents(char *buffer, const char *last) } -void CSleep(int milliseconds) -{ -#ifndef __INNOTEK_LIBC__ - delay(milliseconds); -#else - usleep(milliseconds * 1000); -#endif -} - const char *FS2OTTD(const char *name) {return name;} const char *OTTD2FS(const char *name) {return name;} diff --git a/src/os/unix/unix.cpp b/src/os/unix/unix.cpp index 024dc86274..e20a6c1b5c 100644 --- a/src/os/unix/unix.cpp +++ b/src/os/unix/unix.cpp @@ -273,14 +273,6 @@ bool GetClipboardContents(char *buffer, const char *last) #endif -/* multi os compatible sleep function */ - -void CSleep(int milliseconds) -{ - usleep(milliseconds * 1000); -} - - #ifndef __APPLE__ uint GetCPUCoreCount() { diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp index 2a72ca1c5f..9847de5670 100644 --- a/src/os/windows/win32.cpp +++ b/src/os/windows/win32.cpp @@ -544,12 +544,6 @@ bool GetClipboardContents(char *buffer, const char *last) } -void CSleep(int milliseconds) -{ - Sleep(milliseconds); -} - - /** * Convert to OpenTTD's encoding from that of the local environment. * When the project is built in UNICODE, the system codepage is irrelevant and diff --git a/src/thread.h b/src/thread.h index 086e2f51ec..cd26082214 100644 --- a/src/thread.h +++ b/src/thread.h @@ -20,6 +20,15 @@ class OTTDThreadExitSignal { }; +/** + * Sleep on the current thread for a defined time. + * @param milliseconds Time to sleep for in milliseconds. + */ +inline void CSleep(int milliseconds) +{ + std::this_thread::sleep_for(std::chrono::milliseconds(milliseconds)); +} + /** * Get number of processor cores in the system, including HyperThreading or similar. * @return Total number of processor cores. diff --git a/src/video/allegro_v.cpp b/src/video/allegro_v.cpp index 53a42393ee..c21f88d672 100644 --- a/src/video/allegro_v.cpp +++ b/src/video/allegro_v.cpp @@ -25,6 +25,7 @@ #include "../core/random_func.hpp" #include "../core/math_func.hpp" #include "../framerate_type.h" +#include "../thread.h" #include "allegro_v.h" #include diff --git a/src/video/cocoa/event.mm b/src/video/cocoa/event.mm index de812a70d6..a8108b561a 100644 --- a/src/video/cocoa/event.mm +++ b/src/video/cocoa/event.mm @@ -37,6 +37,7 @@ #include "../../core/math_func.hpp" #include "../../texteff.hpp" #include "../../window_func.h" +#include "../../thread.h" #import /* gettimeofday */ diff --git a/src/video/cocoa/fullscreen.mm b/src/video/cocoa/fullscreen.mm index 860866b336..3ce22133d2 100644 --- a/src/video/cocoa/fullscreen.mm +++ b/src/video/cocoa/fullscreen.mm @@ -30,6 +30,7 @@ #include "../../core/sort_func.hpp" #include "cocoa_v.h" #include "../../gfx_func.h" +#include "../../thread.h" #include "../../os/macosx/macos.h" /** @@ -174,7 +175,7 @@ class FullscreenSubdriver : public CocoaSubdriver { double adjustment = (target - position) / linesPerSecond; - CSleep((uint32)(adjustment * 1000)); + CSleep((uint32)adjustment * 1000); } diff --git a/src/video/dedicated_v.cpp b/src/video/dedicated_v.cpp index e0096c8936..5af900080f 100644 --- a/src/video/dedicated_v.cpp +++ b/src/video/dedicated_v.cpp @@ -22,6 +22,7 @@ #include "../company_func.h" #include "../core/random_func.hpp" #include "../saveload/saveload.h" +#include "../thread.h" #include "dedicated_v.h" #ifdef __OS2__ From 967b27a2c12953da3584f4eaade37f94effc007a Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 17 Mar 2019 15:14:17 +0100 Subject: [PATCH 619/622] Codechange: C++11 STL has a function for getting the number of CPU cores. --- src/os/macosx/macos.mm | 17 ----------------- src/os/os2/os2.cpp | 5 ----- src/os/unix/unix.cpp | 29 ----------------------------- src/os/windows/win32.cpp | 8 -------- src/thread.h | 6 ------ src/video/win32_v.cpp | 2 +- 6 files changed, 1 insertion(+), 66 deletions(-) diff --git a/src/os/macosx/macos.mm b/src/os/macosx/macos.mm index 7fb71fe9ee..ae9d86ee8b 100644 --- a/src/os/macosx/macos.mm +++ b/src/os/macosx/macos.mm @@ -206,23 +206,6 @@ bool GetClipboardContents(char *buffer, const char *last) } #endif -uint GetCPUCoreCount() -{ - uint count = 1; -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) - if (MacOSVersionIsAtLeast(10, 5, 0)) { - count = (uint)[ [ NSProcessInfo processInfo ] activeProcessorCount ]; - } else -#endif - { -#if (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) - count = MPProcessorsScheduled(); -#endif - } - - return count; -} - /** * Check if a font is a monospace font. * @param name Name of the font. diff --git a/src/os/os2/os2.cpp b/src/os/os2/os2.cpp index b62e83e5ef..70c75a410f 100644 --- a/src/os/os2/os2.cpp +++ b/src/os/os2/os2.cpp @@ -208,11 +208,6 @@ bool GetClipboardContents(char *buffer, const char *last) const char *FS2OTTD(const char *name) {return name;} const char *OTTD2FS(const char *name) {return name;} -uint GetCPUCoreCount() -{ - return 1; -} - void OSOpenBrowser(const char *url) { // stub only diff --git a/src/os/unix/unix.cpp b/src/os/unix/unix.cpp index e20a6c1b5c..aa63019f6a 100644 --- a/src/os/unix/unix.cpp +++ b/src/os/unix/unix.cpp @@ -274,35 +274,6 @@ bool GetClipboardContents(char *buffer, const char *last) #ifndef __APPLE__ -uint GetCPUCoreCount() -{ - uint count = 1; -#ifdef HAS_SYSCTL - int ncpu = 0; - size_t len = sizeof(ncpu); - -#ifdef OPENBSD - int name[2]; - name[0] = CTL_HW; - name[1] = HW_NCPU; - if (sysctl(name, 2, &ncpu, &len, NULL, 0) < 0) { - ncpu = 0; - } -#else - if (sysctlbyname("hw.availcpu", &ncpu, &len, NULL, 0) < 0) { - sysctlbyname("hw.ncpu", &ncpu, &len, NULL, 0); - } -#endif /* #ifdef OPENBSD */ - - if (ncpu > 0) count = ncpu; -#elif defined(_SC_NPROCESSORS_ONLN) - long res = sysconf(_SC_NPROCESSORS_ONLN); - if (res > 0) count = res; -#endif - - return count; -} - void OSOpenBrowser(const char *url) { pid_t child_pid = fork(); diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp index 9847de5670..d2cc434a28 100644 --- a/src/os/windows/win32.cpp +++ b/src/os/windows/win32.cpp @@ -725,14 +725,6 @@ const char *GetCurrentLocale(const char *) return retbuf; } -uint GetCPUCoreCount() -{ - SYSTEM_INFO info; - - GetSystemInfo(&info); - return info.dwNumberOfProcessors; -} - static WCHAR _cur_iso_locale[16] = L""; diff --git a/src/thread.h b/src/thread.h index cd26082214..53548cc068 100644 --- a/src/thread.h +++ b/src/thread.h @@ -29,12 +29,6 @@ inline void CSleep(int milliseconds) std::this_thread::sleep_for(std::chrono::milliseconds(milliseconds)); } -/** - * Get number of processor cores in the system, including HyperThreading or similar. - * @return Total number of processor cores. - */ -uint GetCPUCoreCount(); - /** * Name the thread this function is called on for the debugger. * @param name Name to set for the thread.. diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index 5aec329b21..382c0d8fc6 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -1149,7 +1149,7 @@ const char *VideoDriver_Win32::Start(const char * const *parm) MarkWholeScreenDirty(); - _draw_threaded = GetDriverParam(parm, "no_threads") == NULL && GetDriverParam(parm, "no_thread") == NULL && GetCPUCoreCount() > 1; + _draw_threaded = GetDriverParam(parm, "no_threads") == NULL && GetDriverParam(parm, "no_thread") == NULL && std::thread::hardware_concurrency() > 1; return NULL; } From 3e608afa6c5ae615855afa99dea5fa727d1ae765 Mon Sep 17 00:00:00 2001 From: glx22 Date: Sun, 7 Apr 2019 21:52:30 +0200 Subject: [PATCH 620/622] Fix: [Windows] OpenTTD window may be inactive when an error happens (#7482) --- src/os/windows/win32.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp index d2cc434a28..ae78407acf 100644 --- a/src/os/windows/win32.cpp +++ b/src/os/windows/win32.cpp @@ -79,7 +79,7 @@ bool LoadLibraryList(Function proc[], const char *dll) void ShowOSErrorBox(const char *buf, bool system) { MyShowCursor(true); - MessageBox(GetActiveWindow(), OTTD2FS(buf), _T("Error!"), MB_ICONSTOP); + MessageBox(GetActiveWindow(), OTTD2FS(buf), _T("Error!"), MB_ICONSTOP | MB_TASKMODAL); } void OSOpenBrowser(const char *url) From bc9b47d2e56808b9e74b016fa1e544b4f2d4e1b5 Mon Sep 17 00:00:00 2001 From: kiwitreekor Date: Wed, 3 Apr 2019 03:23:19 +0900 Subject: [PATCH 621/622] Fix #6222: Advanced sprite layout sometimes showed incorrect railtype ground tile --- src/station_cmd.cpp | 8 ++++++++ src/table/sprites.h | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index a79480448a..873be3be56 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -2681,21 +2681,29 @@ bool SplitGroundSpriteForOverlay(const TileInfo *ti, SpriteID *ground, RailTrack bool snow_desert; switch (*ground) { case SPR_RAIL_TRACK_X: + case SPR_MONO_TRACK_X: + case SPR_MGLV_TRACK_X: snow_desert = false; *overlay_offset = RTO_X; break; case SPR_RAIL_TRACK_Y: + case SPR_MONO_TRACK_Y: + case SPR_MGLV_TRACK_Y: snow_desert = false; *overlay_offset = RTO_Y; break; case SPR_RAIL_TRACK_X_SNOW: + case SPR_MONO_TRACK_X_SNOW: + case SPR_MGLV_TRACK_X_SNOW: snow_desert = true; *overlay_offset = RTO_X; break; case SPR_RAIL_TRACK_Y_SNOW: + case SPR_MONO_TRACK_Y_SNOW: + case SPR_MGLV_TRACK_Y_SNOW: snow_desert = true; *overlay_offset = RTO_Y; break; diff --git a/src/table/sprites.h b/src/table/sprites.h index da3bc76271..a573269975 100644 --- a/src/table/sprites.h +++ b/src/table/sprites.h @@ -402,8 +402,11 @@ static const SpriteID SPR_MONO_SINGLE_SOUTH = 1090; static const SpriteID SPR_MONO_SINGLE_EAST = 1091; static const SpriteID SPR_MONO_SINGLE_WEST = 1092; static const SpriteID SPR_MONO_TRACK_Y = 1093; +static const SpriteID SPR_MONO_TRACK_X = 1094; static const SpriteID SPR_MONO_TRACK_BASE = 1100; static const SpriteID SPR_MONO_TRACK_N_S = 1117; +static const SpriteID SPR_MONO_TRACK_Y_SNOW = 1119; +static const SpriteID SPR_MONO_TRACK_X_SNOW = 1120; static const SpriteID SPR_MGLV_SINGLE_X = 1169; static const SpriteID SPR_MGLV_SINGLE_Y = 1170; static const SpriteID SPR_MGLV_SINGLE_NORTH = 1171; @@ -411,7 +414,10 @@ static const SpriteID SPR_MGLV_SINGLE_SOUTH = 1172; static const SpriteID SPR_MGLV_SINGLE_EAST = 1173; static const SpriteID SPR_MGLV_SINGLE_WEST = 1174; static const SpriteID SPR_MGLV_TRACK_Y = 1175; +static const SpriteID SPR_MGLV_TRACK_X = 1176; static const SpriteID SPR_MGLV_TRACK_BASE = 1182; +static const SpriteID SPR_MGLV_TRACK_Y_SNOW = 1184; +static const SpriteID SPR_MGLV_TRACK_X_SNOW = 1185; static const SpriteID SPR_MGLV_TRACK_N_S = 1199; static const SpriteID SPR_WAYPOINT_X_1 = SPR_OPENTTD_BASE + 78; static const SpriteID SPR_WAYPOINT_X_2 = SPR_OPENTTD_BASE + 79; From 812886ca618b39b36e85f23e5056398e26123645 Mon Sep 17 00:00:00 2001 From: PeterN Date: Mon, 8 Apr 2019 19:20:43 +0100 Subject: [PATCH 622/622] Fix #7478: Don't remove NewGRF objects on company take-over. (#7483) --- src/object_cmd.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp index 92e6d6ab2a..a57aa57f05 100644 --- a/src/object_cmd.cpp +++ b/src/object_cmd.cpp @@ -768,9 +768,10 @@ static void ChangeTileOwner_Object(TileIndex tile, Owner old_owner, Owner new_ow bool do_clear = false; - if (IsObjectType(tile, OBJECT_OWNED_LAND) && new_owner != INVALID_OWNER) { + ObjectType type = GetObjectType(tile); + if ((type == OBJECT_OWNED_LAND || type >= NEW_OBJECT_OFFSET) && new_owner != INVALID_OWNER) { SetTileOwner(tile, new_owner); - } else if (IsObjectType(tile, OBJECT_STATUE)) { + } else if (type == OBJECT_STATUE) { Town *t = Object::GetByTile(tile)->town; ClrBit(t->statues, old_owner); if (new_owner != INVALID_OWNER && !HasBit(t->statues, new_owner)) {
      trees XXXX XXXX XXXX XXXXOOO~ ~~~~OXX~ ~~~~ OOOO OOOX XXXX XXXX ~~XX XXXX OOOO OOOO