mirror of https://github.com/OpenTTD/OpenTTD
Merge branch 'master' into master
commit
e849f81502
|
@ -2022,7 +2022,7 @@ STR_CONFIG_SETTING_SOFT_LIMIT :Maksimālais lo
|
||||||
STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Atvērtu nepielipušo logu skaits, pirms tie tiek automātiski aizvērti lai atbrīvotu vietu jauniem logiem
|
STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Atvērtu nepielipušo logu skaits, pirms tie tiek automātiski aizvērti lai atbrīvotu vietu jauniem logiem
|
||||||
STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA}
|
STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA}
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :izslēgts
|
STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :Izslēgts
|
||||||
|
|
||||||
STR_CONFIG_SETTING_ZOOM_MIN :Maksimālais pietuvinājuma līmenis: {STRING}
|
STR_CONFIG_SETTING_ZOOM_MIN :Maksimālais pietuvinājuma līmenis: {STRING}
|
||||||
STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Maksimālais pietuvinājuma līmenis skatvietām. Ir jāievēro ka paaugstinot pietuvinājuma līmeni, pieaug operatīvās atmiņas izlietojums
|
STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT :Maksimālais pietuvinājuma līmenis skatvietām. Ir jāievēro ka paaugstinot pietuvinājuma līmeni, pieaug operatīvās atmiņas izlietojums
|
||||||
|
|
|
@ -452,6 +452,12 @@ STR_SETTINGS_MENU_SANDBOX_OPTIONS :Sandbox Optioun
|
||||||
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Transparenz Optiounen
|
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Transparenz Optiounen
|
||||||
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Stiednimm uweisen
|
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Stiednimm uweisen
|
||||||
STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Statiounsnimm uweisen
|
STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Statiounsnimm uweisen
|
||||||
|
STR_SETTINGS_MENU_STATION_NAMES_TRAIN :Garen
|
||||||
|
STR_SETTINGS_MENU_STATION_NAMES_LORRY :Camionsgaren
|
||||||
|
STR_SETTINGS_MENU_STATION_NAMES_BUS :Busarrêten
|
||||||
|
STR_SETTINGS_MENU_STATION_NAMES_SHIP :Hafen
|
||||||
|
STR_SETTINGS_MENU_STATION_NAMES_PLANE :Fluchhäfen
|
||||||
|
STR_SETTINGS_MENU_STATION_NAMES_GHOST :Geescht
|
||||||
STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Weepunktnimm uweisen
|
STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Weepunktnimm uweisen
|
||||||
STR_SETTINGS_MENU_SIGNS_DISPLAYED :Schëlder uweisen
|
STR_SETTINGS_MENU_SIGNS_DISPLAYED :Schëlder uweisen
|
||||||
STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Géignerschëlder an Nimm uweisen
|
STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Géignerschëlder an Nimm uweisen
|
||||||
|
@ -1017,6 +1023,7 @@ STR_GAME_OPTIONS_CURRENCY_IDR :Indonesesch Rup
|
||||||
STR_GAME_OPTIONS_CURRENCY_MYR :Malaysesche Ringgit
|
STR_GAME_OPTIONS_CURRENCY_MYR :Malaysesche Ringgit
|
||||||
STR_GAME_OPTIONS_CURRENCY_LVL :Lettesch Lat
|
STR_GAME_OPTIONS_CURRENCY_LVL :Lettesch Lat
|
||||||
STR_GAME_OPTIONS_CURRENCY_PTE :Portugieseschen Escudo
|
STR_GAME_OPTIONS_CURRENCY_PTE :Portugieseschen Escudo
|
||||||
|
STR_GAME_OPTIONS_CURRENCY_UAH :Ukrainesch Hryvnia
|
||||||
|
|
||||||
STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Autospäicheren
|
STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Autospäicheren
|
||||||
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Wiel den Intervall aus fir d'Autospäicherung
|
STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Wiel den Intervall aus fir d'Autospäicherung
|
||||||
|
@ -1210,7 +1217,7 @@ STR_CITY_APPROVAL_TOLERANT :Tolerant
|
||||||
STR_CITY_APPROVAL_HOSTILE :Feindlech
|
STR_CITY_APPROVAL_HOSTILE :Feindlech
|
||||||
STR_CITY_APPROVAL_PERMISSIVE :Fräizügeg (keng Auswierkung op Firmenactiounen)
|
STR_CITY_APPROVAL_PERMISSIVE :Fräizügeg (keng Auswierkung op Firmenactiounen)
|
||||||
|
|
||||||
STR_WARNING_NO_SUITABLE_AI :{WHITE}Keng KI fonnt...{}KI kënnen iwwert den 'Online Content' system downgeload ginn
|
STR_WARNING_NO_SUITABLE_AI :{WHITE}Keng KI fonnt...{}{}KI kënnen iwwert den 'Online Content' system downgeload ginn
|
||||||
|
|
||||||
# Settings tree window
|
# Settings tree window
|
||||||
STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Astellungen
|
STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Astellungen
|
||||||
|
@ -1923,7 +1930,8 @@ STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nie
|
||||||
|
|
||||||
STR_CONFIG_SETTING_ECONOMY_TYPE :Wiertschaftstyp: {STRING}
|
STR_CONFIG_SETTING_ECONOMY_TYPE :Wiertschaftstyp: {STRING}
|
||||||
###length 2
|
###length 2
|
||||||
STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :"Glaat" suergt fir méi oft a kleng Produktiounsännerungen. "Agefruer" stoppt jeglech Ännerungen an der Wiertschaft an Industrieschléissungen. Dës Astellunge kinnten keen Afloss hunn, wann en NewGRF benotzt gëtt
|
STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :"Glaat" suergt fir méi oft a kleng Produktiounsännerungen. "Agefruer" stoppt jeglech Ännerungen an der Wiertschaft an Industrieschléissungen. Dës Astellunge kinnten keen Afloss hunn, wann en NewGRF benotzt gëtt.{}{}Industrieproduktioun pro Mount kinnt nach emmer variabel ausgesinn wann d'Ekonomie agefruer ass, wëll d'Produktioun a fixen Intervalle ugefrot gëtt an dat net exakt de equivalent zu de Méint ass
|
||||||
|
STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT_PERIOD :"Glaat" suergt fir méi oft a kleng Produktiounsännerungen. "Agefruer" stoppt jeglech Ännerungen an der Wiertschaft an Industrieschléissungen. Dës Astellunge kinnten keen Afloss hunn, wann en NewGRF benotzt gëtt.{}{}Industrieproduktioun pro Minut kinnt nach emmer variabel ausgesinn wann d'Ekonomie agefruer ass, wëll d'Produktioun a fixen Intervalle ugefrot gëtt an dat net exakt de equivalent zu Minuten ass
|
||||||
|
|
||||||
###length 3
|
###length 3
|
||||||
STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original
|
STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original
|
||||||
|
@ -1966,19 +1974,24 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Zoufälleg
|
||||||
STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Stied däerfen Stroossen bauen: {STRING}
|
STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Stied däerfen Stroossen bauen: {STRING}
|
||||||
STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Erlaabt Stied Stroossen ze bauen fir ze wuessen. Ausschalten fir d'Stiedréid dorun ze hënneren fir Stroossen selwer ze bauen
|
STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Erlaabt Stied Stroossen ze bauen fir ze wuessen. Ausschalten fir d'Stiedréid dorun ze hënneren fir Stroossen selwer ze bauen
|
||||||
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Stied dierfe Barrière bauen: {STRING}
|
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Stied dierfe Barrière bauen: {STRING}
|
||||||
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Wann dës Astellung ugeschalt ass, kënnen Stied Stroossen iwwert Schinne bauen
|
STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Wann dës Astellung ugeschalt ass, kënne Stied Stroossen iwwert Schinne bauen
|
||||||
|
|
||||||
STR_CONFIG_SETTING_NOISE_LEVEL :Limitéier de Bau vu Fluchhäfen geméiss dem Kaméidisniveau: {STRING}
|
STR_CONFIG_SETTING_NOISE_LEVEL :Limitéier de Bau vu Fluchhäfen geméiss dem Kaméidisniveau: {STRING}
|
||||||
STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Erlaabt de Stied de Bau vu Fluchhäfen opgront vum Kaméidisniveau ze blockéiren, wat sech op d'Gréisst vun der Stad an d'Gréisst an Distanz vum Fluchhafe baséiert. Wann dat ausgeschalt ass, erlaabt d'Stad zwee Fluchhäfen ausser d'Gemengenastellung ass "Fräizügeg"
|
STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Erlaabt de Stied de Bau vu Fluchhäfen opgront vum Kaméidisniveau ze blockéiren, wat sech op d'Gréisst vun der Stad an d'Gréisst an Distanz vum Fluchhafe baséiert. Wann dat ausgeschalt ass, erlaabt d'Stad zwee Fluchhäfen ausser d'Gemengenastellung ass "Fräizügeg"
|
||||||
|
|
||||||
STR_CONFIG_SETTING_TOWN_FOUNDING :Stiedgrënnung am Spill: {STRING}
|
STR_CONFIG_SETTING_TOWN_FOUNDING :Stiedgrënnung am Spill: {STRING}
|
||||||
STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Wann dës Astellung ugeschalt ass, kënnen Spiller nei Stied am Spill grënnen
|
STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Wann dës Astellung ugeschalt ass, kënne Spiller nei Stied am Spill grënnen
|
||||||
###length 3
|
###length 3
|
||||||
STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Verbueden
|
STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Verbueden
|
||||||
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Erlaabt
|
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Erlaabt
|
||||||
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Erlaabt, eegene Stad-Layout
|
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Erlaabt, eegene Stad-Layout
|
||||||
|
|
||||||
|
STR_CONFIG_SETTING_HOUSE_PLACER :Individuell Haiser plazéiren: {STRING}
|
||||||
|
STR_CONFIG_SETTING_HOUSE_PLACER_HELPTEXT :Wann des Astellung ugeschalt ass, kënne Spiller Haiser manuell plazéiren
|
||||||
###length 3
|
###length 3
|
||||||
|
STR_CONFIG_SETTING_HOUSE_PLACER_FORBIDDEN :Verbueden
|
||||||
|
STR_CONFIG_SETTING_HOUSE_PLACER_ALLOWED :Erlabt
|
||||||
|
STR_CONFIG_SETTING_HOUSE_PLACER_FULLY_CONSTRUCTED :Erlabt, fäerdeg gebaut
|
||||||
|
|
||||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Duerfwuerengeneratioun: {STRING}
|
STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Duerfwuerengeneratioun: {STRING}
|
||||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Wéivill Wuere produzéiert ginn, relativ zur Bevölkerung vum Duerf.{}Quadratesche Wuesstum: En duebel sou grousst Duerf, generéiert véier mol souvill Passagéier.{}Lineare Wuesstum: En duebel sou grousst Duerf, generéiert duebel souvill Passagéier
|
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Wéivill Wuere produzéiert ginn, relativ zur Bevölkerung vum Duerf.{}Quadratesche Wuesstum: En duebel sou grousst Duerf, generéiert véier mol souvill Passagéier.{}Lineare Wuesstum: En duebel sou grousst Duerf, generéiert duebel souvill Passagéier
|
||||||
|
@ -2007,7 +2020,7 @@ STR_CONFIG_SETTING_SOFT_LIMIT :Maximal Unzuel
|
||||||
STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Unzuel un net-gepinnten openen Fënster befier al Fënsteren automatesch zougemaach ginn fir nei Plaz ze man fir nei Fënsteren
|
STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Unzuel un net-gepinnten openen Fënster befier al Fënsteren automatesch zougemaach ginn fir nei Plaz ze man fir nei Fënsteren
|
||||||
STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA}
|
STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA}
|
||||||
###setting-zero-is-special
|
###setting-zero-is-special
|
||||||
STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :ausgeschalt
|
STR_CONFIG_SETTING_SOFT_LIMIT_DISABLED :Ausgeschalt
|
||||||
|
|
||||||
STR_CONFIG_SETTING_ZOOM_MIN :Maximale Razoom Level: {STRING}
|
STR_CONFIG_SETTING_ZOOM_MIN :Maximale Razoom Level: {STRING}
|
||||||
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_MIN_HELPTEXT :Maximal Razoomstuf fir Usiichtsfënsteren. Et gëtt méi Späicher gebraucht wann d'Stufen ze grouss ginn
|
||||||
|
@ -2192,7 +2205,7 @@ STR_INTRO_HIGHSCORE :{BLACK}Beschtel
|
||||||
STR_INTRO_HELP :{BLACK}Hëllef & Handbuch
|
STR_INTRO_HELP :{BLACK}Hëllef & Handbuch
|
||||||
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Astellungen
|
STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Astellungen
|
||||||
STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF Astellungen
|
STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF Astellungen
|
||||||
STR_INTRO_ONLINE_CONTENT :{BLACK}Check Online Inhalt
|
STR_INTRO_ONLINE_CONTENT :{BLACK}Online Content
|
||||||
STR_INTRO_AI_SETTINGS :{BLACK}KI Astellungen
|
STR_INTRO_AI_SETTINGS :{BLACK}KI Astellungen
|
||||||
STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}Spillscriptastellungen
|
STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}Spillscriptastellungen
|
||||||
STR_INTRO_QUIT :{BLACK}Eraus
|
STR_INTRO_QUIT :{BLACK}Eraus
|
||||||
|
@ -2241,6 +2254,7 @@ STR_HELP_WINDOW_README :{BLACK}Readme
|
||||||
STR_HELP_WINDOW_CHANGELOG :{BLACK}Changelog
|
STR_HELP_WINDOW_CHANGELOG :{BLACK}Changelog
|
||||||
STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}Bekannte Bugs
|
STR_HELP_WINDOW_KNOWN_BUGS :{BLACK}Bekannte Bugs
|
||||||
STR_HELP_WINDOW_LICENSE :{BLACK}Lizenz
|
STR_HELP_WINDOW_LICENSE :{BLACK}Lizenz
|
||||||
|
STR_HELP_WINDOW_FONTS :{BLACK}Schrëften
|
||||||
STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD
|
STR_HELP_WINDOW_MAIN_WEBSITE :{BLACK}OpenTTD
|
||||||
STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}Handbuch / Wiki
|
STR_HELP_WINDOW_MANUAL_WIKI :{BLACK}Handbuch / Wiki
|
||||||
STR_HELP_WINDOW_BUGTRACKER :{BLACK}E Bug melden
|
STR_HELP_WINDOW_BUGTRACKER :{BLACK}E Bug melden
|
||||||
|
@ -2629,13 +2643,14 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :warden op d'Akt
|
||||||
STR_NETWORK_MESSAGE_CLIENT_LEAVING :verloossen
|
STR_NETWORK_MESSAGE_CLIENT_LEAVING :verloossen
|
||||||
STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} ass dem Spill bäigetrueden
|
STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} ass dem Spill bäigetrueden
|
||||||
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} ass an d'Spill komm (Client #{NUM})
|
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} ass an d'Spill komm (Client #{NUM})
|
||||||
|
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} ass bei d'Firma {STRING} gaang
|
||||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} ass als Zuschauer do
|
STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} ass als Zuschauer do
|
||||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} huet eng nei Firma gegrënnt (#{NUM})
|
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} huet eng nei Firma gegrënnt (#{NUM})
|
||||||
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} huet d'Spill verlooss ({STRING})
|
STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} huet d'Spill verlooss ({STRING})
|
||||||
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} huet säin Numm op {STRING} gewiesselt
|
STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} huet säin Numm op {STRING} gewiesselt
|
||||||
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} huet {CURRENCY_LONG} der Firma {STRING} ginn
|
STR_NETWORK_MESSAGE_GIVE_MONEY :*** {STRING} huet {CURRENCY_LONG} der Firma {STRING} ginn
|
||||||
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}De Server huet d'Sessioun zougemaach
|
STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}De Server huet d'Sessioun zougemaach
|
||||||
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}De Server gëtt nei gestart...{}W.e.g. waarden...
|
STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}De Server gëtt nei gestart...{}{}W.e.g. waarden...
|
||||||
STR_NETWORK_MESSAGE_KICKED :*** {STRING} gouf gekickt. Grond: ({STRING})
|
STR_NETWORK_MESSAGE_KICKED :*** {STRING} gouf gekickt. Grond: ({STRING})
|
||||||
|
|
||||||
STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Server Registration huet net geklappt
|
STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Server Registration huet net geklappt
|
||||||
|
@ -2644,7 +2659,7 @@ STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}De Serve
|
||||||
STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Aner Spiller wäerte sech net op de Server verbanne kënnen
|
STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Aner Spiller wäerte sech net op de Server verbanne kënnen
|
||||||
|
|
||||||
# Content downloading window
|
# Content downloading window
|
||||||
STR_CONTENT_TITLE :{WHITE}Lueden Inhalt erof
|
STR_CONTENT_TITLE :{WHITE}Online Content
|
||||||
STR_CONTENT_TYPE_CAPTION :{BLACK}Typ
|
STR_CONTENT_TYPE_CAPTION :{BLACK}Typ
|
||||||
STR_CONTENT_TYPE_CAPTION_TOOLTIP :{BLACK}Typ vum Inhalt
|
STR_CONTENT_TYPE_CAPTION_TOOLTIP :{BLACK}Typ vum Inhalt
|
||||||
STR_CONTENT_NAME_CAPTION :{BLACK}Numm
|
STR_CONTENT_NAME_CAPTION :{BLACK}Numm
|
||||||
|
@ -2843,6 +2858,7 @@ STR_HOUSE_PICKER_YEARS_FROM :{BLACK}Joer: {O
|
||||||
STR_HOUSE_PICKER_YEARS_UNTIL :{BLACK}Joer: {ORANGE}Bis {NUM}
|
STR_HOUSE_PICKER_YEARS_UNTIL :{BLACK}Joer: {ORANGE}Bis {NUM}
|
||||||
STR_HOUSE_PICKER_SIZE :{BLACK}Gréisst: {ORANGE}{NUM}x{NUM} Felder
|
STR_HOUSE_PICKER_SIZE :{BLACK}Gréisst: {ORANGE}{NUM}x{NUM} Felder
|
||||||
STR_HOUSE_PICKER_CARGO_ACCEPTED :{BLACK}Akzeptéiert Wuer: {ORANGE}
|
STR_HOUSE_PICKER_CARGO_ACCEPTED :{BLACK}Akzeptéiert Wuer: {ORANGE}
|
||||||
|
STR_HOUSE_PICKER_CARGO_PRODUCED :{BLACK}Produzéiert Wuer: {ORANGE}{CARGO_LIST}
|
||||||
|
|
||||||
STR_HOUSE_PICKER_CLASS_ZONE1 :Rand
|
STR_HOUSE_PICKER_CLASS_ZONE1 :Rand
|
||||||
STR_HOUSE_PICKER_CLASS_ZONE2 :Ausseberäich
|
STR_HOUSE_PICKER_CLASS_ZONE2 :Ausseberäich
|
||||||
|
@ -2850,6 +2866,10 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Aner Viruerter
|
||||||
STR_HOUSE_PICKER_CLASS_ZONE4 :Bannescht Viruerter
|
STR_HOUSE_PICKER_CLASS_ZONE4 :Bannescht Viruerter
|
||||||
STR_HOUSE_PICKER_CLASS_ZONE5 :Stadzentrum
|
STR_HOUSE_PICKER_CLASS_ZONE5 :Stadzentrum
|
||||||
|
|
||||||
|
STR_HOUSE_PICKER_PROTECT_TITLE :Upgrades verhënneren
|
||||||
|
STR_HOUSE_PICKER_PROTECT_TOOLTIP :Wiel aus ob dëst Haus firun engem Ersetze geschützt gëtt wann d'Stad wiisst
|
||||||
|
STR_HOUSE_PICKER_PROTECT_OFF :Aus
|
||||||
|
STR_HOUSE_PICKER_PROTECT_ON :Un
|
||||||
|
|
||||||
STR_STATION_CLASS_DFLT :Standard
|
STR_STATION_CLASS_DFLT :Standard
|
||||||
STR_STATION_CLASS_DFLT_STATION :Standardstatioun
|
STR_STATION_CLASS_DFLT_STATION :Standardstatioun
|
||||||
|
@ -2883,6 +2903,7 @@ STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Stroosse
|
||||||
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Bréckenauswiel - Wiel deng Bréck aus
|
STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Bréckenauswiel - Wiel deng Bréck aus
|
||||||
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
|
STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING}
|
||||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
|
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY}
|
||||||
|
STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{STRING},{} {WHITE}{CURRENCY_LONG}
|
||||||
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG}
|
||||||
STR_BRIDGE_NAME_SUSPENSION_STEEL :Stolen Hängebréck
|
STR_BRIDGE_NAME_SUSPENSION_STEEL :Stolen Hängebréck
|
||||||
STR_BRIDGE_NAME_GIRDER_STEEL :Stoldréier Bréck
|
STR_BRIDGE_NAME_GIRDER_STEEL :Stoldréier Bréck
|
||||||
|
@ -2941,7 +2962,7 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Wueren-T
|
||||||
# Waterways toolbar (last two for SE only)
|
# Waterways toolbar (last two for SE only)
|
||||||
STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Waasserstroosse bauen
|
STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Waasserstroosse bauen
|
||||||
STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Waasserstroossen
|
STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Waasserstroossen
|
||||||
STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Kanäl bauen. Dréck Shift fir nëmmen déi ongeféier Käschten unzeweisen
|
STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Kanäl bauen. Ctrl+Klick+Zéien fir wielt d'Areal diagonal aus. Dréck Shift fir nëmmen déi ongeféier Käschten unzeweisen
|
||||||
STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Schleise bauen. Dréck Shift fir nëmmen déi ongeféier Käschten unzeweisen
|
STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Schleise bauen. Dréck Shift fir nëmmen déi ongeféier Käschten unzeweisen
|
||||||
STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Schëffsschapp bauen (fir Schëffer ze bauen an ze reparéiren). Dréck Shift fir nëmmen déi ongeféier Käschten unzeweisen
|
STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Schëffsschapp bauen (fir Schëffer ze bauen an ze reparéiren). Dréck Shift fir nëmmen déi ongeféier Käschten unzeweisen
|
||||||
STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Schëffsdock bauen. Ctrl aktivéiert ubaue vu Statiounen. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen
|
STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Schëffsdock bauen. Ctrl aktivéiert ubaue vu Statiounen. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen
|
||||||
|
@ -3126,6 +3147,8 @@ STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Tramtyp:
|
||||||
STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Schinne-Geschw.-Limit: {LTBLUE}{VELOCITY}
|
STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Schinne-Geschw.-Limit: {LTBLUE}{VELOCITY}
|
||||||
STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Stroosse-Geschw.-Limit: {LTBLUE}{VELOCITY}
|
STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Stroosse-Geschw.-Limit: {LTBLUE}{VELOCITY}
|
||||||
STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Tram-Geschw.-Limit: {LTBLUE}{VELOCITY}
|
STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Tram-Geschw.-Limit: {LTBLUE}{VELOCITY}
|
||||||
|
STR_LAND_AREA_INFORMATION_TOWN_CAN_UPGRADE :{BLACK}Stad kann upgraden: {LTBLUE}Jo
|
||||||
|
STR_LAND_AREA_INFORMATION_TOWN_CANNOT_UPGRADE :{BLACK}Stad kann upgraden: {LTBLUE}Nee
|
||||||
|
|
||||||
# Description of land area of different tiles
|
# Description of land area of different tiles
|
||||||
STR_LAI_CLEAR_DESCRIPTION_ROCKS :Fielsen
|
STR_LAI_CLEAR_DESCRIPTION_ROCKS :Fielsen
|
||||||
|
@ -3134,6 +3157,9 @@ STR_LAI_CLEAR_DESCRIPTION_BARE_LAND :Eidelt Land
|
||||||
STR_LAI_CLEAR_DESCRIPTION_GRASS :Gras
|
STR_LAI_CLEAR_DESCRIPTION_GRASS :Gras
|
||||||
STR_LAI_CLEAR_DESCRIPTION_FIELDS :Felder
|
STR_LAI_CLEAR_DESCRIPTION_FIELDS :Felder
|
||||||
STR_LAI_CLEAR_DESCRIPTION_DESERT :Wüst
|
STR_LAI_CLEAR_DESCRIPTION_DESERT :Wüst
|
||||||
|
STR_LAI_CLEAR_DESCRIPTION_SNOWY_ROCKS :Schnéibedeckt Fielsen
|
||||||
|
STR_LAI_CLEAR_DESCRIPTION_SNOWY_ROUGH_LAND :Schnéibedeckt knubbelegt Land
|
||||||
|
STR_LAI_CLEAR_DESCRIPTION_SNOWY_GRASS :Schnéibedeckt Gras
|
||||||
|
|
||||||
STR_LAI_RAIL_DESCRIPTION_TRACK :Schinn
|
STR_LAI_RAIL_DESCRIPTION_TRACK :Schinn
|
||||||
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Schinn mat Blocksignaler
|
STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Schinn mat Blocksignaler
|
||||||
|
@ -3605,17 +3631,17 @@ STR_NEWGRF_LIST_COMPATIBLE :{YELLOW}Kompati
|
||||||
STR_NEWGRF_LIST_MISSING :{RED}Dateien feelen
|
STR_NEWGRF_LIST_MISSING :{RED}Dateien feelen
|
||||||
|
|
||||||
# NewGRF 'it's broken' warnings
|
# NewGRF 'it's broken' warnings
|
||||||
STR_NEWGRF_BROKEN :{WHITE}Verhalen vun der NewGRF '{0:STRING}' kann Desyncs oder Crashen verursachen
|
STR_NEWGRF_BROKEN :{WHITE}Verhalen vun der NewGRF '{PUSH_COLOUR}{0:STRING}{POP_COLOUR}' kann Desyncs oder Crashen verursachen
|
||||||
STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Ännert den Zoustand fir '{1:ENGINE}' wann net an engem Schapp
|
STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Ännert den Zoustand fir '{PUSH_COLOUR}{1:ENGINE}{POP_COLOUR}' wann net an engem Schapp
|
||||||
STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Ännert d'Gefierlängt fir '{1:ENGINE}' wann net an engem Schapp
|
STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Ännert d'Gefierlängt fir '{PUSH_COLOUR}{1:ENGINE}{POP_COLOUR}' wann net an engem Schapp
|
||||||
STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Geännerte Gefierkapazitéit vun '{1:ENGINE}' wann net an engem Schapp oder amgaang emgebaut ze ginn
|
STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Geännerte Gefierkapazitéit vun '{PUSH_COLOUR}{1:ENGINE}{POP_COLOUR}' wann net an engem Schapp oder amgaang emgebaut ze ginn
|
||||||
STR_BROKEN_VEHICLE_LENGTH :{WHITE}Zuch'{VEHICLE}' vun der Firma '{COMPANY}' huet eng falsch Längt. Et kënnt wahrscheinlech wéinst den NewGRFs. Spill kann desyncroniséiren oder ofstierzen
|
STR_BROKEN_VEHICLE_LENGTH :{WHITE}Zuch'{VEHICLE}' vun der Firma '{COMPANY}' huet eng falsch Längt. Et kënnt wahrscheinlech wéinst den NewGRFs. Spill kann desyncroniséiren oder ofstierzen
|
||||||
|
|
||||||
STR_NEWGRF_BUGGY :{WHITE}NewGRF '{0:STRING}' huet Fehlinformatiounen
|
STR_NEWGRF_BUGGY :{WHITE}NewGRF '{PUSH_COLOUR}{0:STRING}{POP_COLOUR}' huet Fehlinformatiounen
|
||||||
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Cargo/refit Informatioun fir '{1:ENGINE}' ass anescht wéi an der Kaflëscht no der Constructioun. Dëst kann en Autoerneirung/-ersetzen Feeler oprufen
|
STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Cargo/refit Informatioun fir '{PUSH_COLOUR}{1:ENGINE}{POP_COLOUR}' ass anescht wéi an der Kaflëscht no der Constructioun. Dëst kann en Autoerneirung/-ersetzen Feeler oprufen
|
||||||
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' huet eng Endlosschläif am Production callback verursaacht
|
STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{PUSH_COLOUR}{1:STRING}{POP_COLOUR}' huet eng Endlosschläif am Production callback verursaacht
|
||||||
STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback {1:HEX} huet en onbekannten/invalid Resultat {2:HEX}
|
STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback {1:HEX} huet en onbekannten/invalid Resultat {2:HEX}
|
||||||
STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' huet en ongültegen Wuerentyp am Production-callback bei {2:HEX}
|
STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{PUSH_COLOUR}{1:STRING}{POP_COLOUR}' huet en ongültegen Wuerentyp am Production-callback bei {2:HEX}
|
||||||
|
|
||||||
# 'User removed essential NewGRFs'-placeholders for stuff without specs
|
# 'User removed essential NewGRFs'-placeholders for stuff without specs
|
||||||
STR_NEWGRF_INVALID_CARGO :<invalid Wuer>
|
STR_NEWGRF_INVALID_CARGO :<invalid Wuer>
|
||||||
|
@ -4011,6 +4037,10 @@ STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produzé
|
||||||
STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
|
STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING}
|
||||||
|
|
||||||
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Brauch:
|
STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Brauch:
|
||||||
|
STR_INDUSTRY_VIEW_ACCEPT_CARGO_SUFFIX :{YELLOW}{0:STRING}{BLACK}{3:STRING}
|
||||||
|
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_SUFFIX :{YELLOW}{0:STRING}{BLACK}: {1:CARGO_SHORT} warden{3:STRING}
|
||||||
|
STR_INDUSTRY_VIEW_ACCEPT_CARGO_NOSUFFIX :{YELLOW}{0:STRING}
|
||||||
|
STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT_NOSUFFIX :{YELLOW}{0:STRING}{BLACK}: {1:CARGO_SHORT} warden
|
||||||
|
|
||||||
STR_CONFIG_GAME_PRODUCTION :{WHITE}D'Produktioun änneren (Multipel vun 8, bis op 2040)
|
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%)
|
STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Änner de Produktiounslevel (Prozenter, bis zu 800%)
|
||||||
|
@ -4668,54 +4698,56 @@ STR_ORDER_ROAD_VEHICLE_DEPOT :Stroossegefier-
|
||||||
STR_ORDER_SHIP_DEPOT :Schëffswerft
|
STR_ORDER_SHIP_DEPOT :Schëffswerft
|
||||||
###next-name-looks-similar
|
###next-name-looks-similar
|
||||||
|
|
||||||
|
STR_ORDER_GO_TO_NEAREST_HANGAR_FORMAT :{STRING} den noosten Hangar
|
||||||
|
STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} den noosten {STRING}
|
||||||
STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT}
|
STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT}
|
||||||
|
|
||||||
STR_ORDER_REFIT_ORDER :(Ëmbau op {STRING})
|
STR_ORDER_REFIT_ORDER :{SPACE}(Ëmbau op {STRING})
|
||||||
STR_ORDER_REFIT_STOP_ORDER :(Ëmbau op {STRING} an stoppen)
|
STR_ORDER_REFIT_STOP_ORDER :{SPACE}(Ëmbau op {STRING} an stoppen)
|
||||||
STR_ORDER_STOP_ORDER :(Stop)
|
STR_ORDER_STOP_ORDER :{SPACE}(Stop)
|
||||||
|
|
||||||
STR_ORDER_WAIT_TO_UNBUNCH :(Warden fir ze verspreeën)
|
STR_ORDER_WAIT_TO_UNBUNCH :{SPACE}(Warden fir ze verspreeën)
|
||||||
|
|
||||||
STR_ORDER_GO_TO_STATION :{STRING} {STATION}
|
STR_ORDER_GO_TO_STATION :{STRING} {STATION}
|
||||||
STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Statioun kann net benotzt ginn){POP_COLOUR} {STRING} {STATION}
|
STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Statioun kann net benotzt ginn){POP_COLOUR} {STRING} {STATION}
|
||||||
|
|
||||||
STR_ORDER_IMPLICIT :(Implizit)
|
STR_ORDER_IMPLICIT :{SPACE}(Implizit)
|
||||||
|
|
||||||
STR_ORDER_FULL_LOAD :(Voll lueden)
|
STR_ORDER_FULL_LOAD :{SPACE}(Voll lueden)
|
||||||
STR_ORDER_FULL_LOAD_ANY :(Voll lueden mat all Wuer)
|
STR_ORDER_FULL_LOAD_ANY :{SPACE}(Voll lueden mat all Wuer)
|
||||||
STR_ORDER_NO_LOAD :(Net lueden)
|
STR_ORDER_NO_LOAD :{SPACE}(Net lueden)
|
||||||
STR_ORDER_UNLOAD :(Entlueden an Luedung huelen)
|
STR_ORDER_UNLOAD :{SPACE}(Entlueden an Luedung huelen)
|
||||||
STR_ORDER_UNLOAD_FULL_LOAD :(Entlueden an erem voll lueden)
|
STR_ORDER_UNLOAD_FULL_LOAD :{SPACE}(Entlueden an erem voll lueden)
|
||||||
STR_ORDER_UNLOAD_FULL_LOAD_ANY :(Entlueden an mat all Wuer voll lueden)
|
STR_ORDER_UNLOAD_FULL_LOAD_ANY :{SPACE}(Entlueden an mat all Wuer voll lueden)
|
||||||
STR_ORDER_UNLOAD_NO_LOAD :(Entlueden an eidel loosen)
|
STR_ORDER_UNLOAD_NO_LOAD :{SPACE}(Entlueden an eidel loosen)
|
||||||
STR_ORDER_TRANSFER :(Transferéieren an Lueden)
|
STR_ORDER_TRANSFER :{SPACE}(Transferéieren an Lueden)
|
||||||
STR_ORDER_TRANSFER_FULL_LOAD :(Transferéieren an voll lueden)
|
STR_ORDER_TRANSFER_FULL_LOAD :{SPACE}(Transferéieren an voll lueden)
|
||||||
STR_ORDER_TRANSFER_FULL_LOAD_ANY :(Transferéieren an mat all Wuer voll lueden)
|
STR_ORDER_TRANSFER_FULL_LOAD_ANY :{SPACE}(Transferéieren an mat all Wuer voll lueden)
|
||||||
STR_ORDER_TRANSFER_NO_LOAD :(Transferéieren an eidel loosen)
|
STR_ORDER_TRANSFER_NO_LOAD :{SPACE}(Transferéieren an eidel loosen)
|
||||||
STR_ORDER_NO_UNLOAD :(Net entlueden an Wueren lueden)
|
STR_ORDER_NO_UNLOAD :{SPACE}(Net entlueden an Wueren lueden)
|
||||||
STR_ORDER_NO_UNLOAD_FULL_LOAD :(Net entlueden an op voll Beluedung waarden)
|
STR_ORDER_NO_UNLOAD_FULL_LOAD :{SPACE}(Net entlueden an op voll Beluedung waarden)
|
||||||
STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :(Net entlueden an op iergendeng voll Beluedung waarden)
|
STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :{SPACE}(Net entlueden an op iergendeng voll Beluedung waarden)
|
||||||
STR_ORDER_NO_UNLOAD_NO_LOAD :(Keen Ent- an Belueden)
|
STR_ORDER_NO_UNLOAD_NO_LOAD :{SPACE}(Keen Ent- an Belueden)
|
||||||
|
|
||||||
STR_ORDER_AUTO_REFIT :(Embauen op {STRING})
|
STR_ORDER_AUTO_REFIT :{SPACE}(Embauen op {STRING})
|
||||||
STR_ORDER_FULL_LOAD_REFIT :(Voll lueden mat ëmbauen op {STRING})
|
STR_ORDER_FULL_LOAD_REFIT :{SPACE}(Voll lueden mat ëmbauen op {STRING})
|
||||||
STR_ORDER_FULL_LOAD_ANY_REFIT :(Voll lueden mat all Wueren mat ëmbauen op {STRING})
|
STR_ORDER_FULL_LOAD_ANY_REFIT :{SPACE}(Voll lueden mat all Wueren mat ëmbauen op {STRING})
|
||||||
STR_ORDER_UNLOAD_REFIT :(Entlueden an Wueren lueden mat Embauen op {STRING})
|
STR_ORDER_UNLOAD_REFIT :{SPACE}(Entlueden an Wueren lueden mat Embauen op {STRING})
|
||||||
STR_ORDER_UNLOAD_FULL_LOAD_REFIT :(Entlueden an op voll Luedung waarden mat Embauen op {STRING})
|
STR_ORDER_UNLOAD_FULL_LOAD_REFIT :{SPACE}(Entlueden an op voll Luedung waarden mat Embauen op {STRING})
|
||||||
STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :(Entlueden an waard op iergendeng Volluedung mat Embauen op {STRING})
|
STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :{SPACE}(Entlueden an waard op iergendeng Volluedung mat Embauen op {STRING})
|
||||||
STR_ORDER_TRANSFER_REFIT :(Transfer an lued Wueren mat Auto-Embauen zu {STRING})
|
STR_ORDER_TRANSFER_REFIT :{SPACE}(Transfer an lued Wueren mat Auto-Embauen zu {STRING})
|
||||||
STR_ORDER_TRANSFER_FULL_LOAD_REFIT :(Transfer an waard op Vollueden mat Auto-Embauen op {STRING})
|
STR_ORDER_TRANSFER_FULL_LOAD_REFIT :{SPACE}(Transfer an waard op Vollueden mat Auto-Embauen op {STRING})
|
||||||
STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :(Transfer an waard op iergendeng Volluedung mat Auto-Embauen op {STRING})
|
STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :{SPACE}(Transfer an waard op iergendeng Volluedung mat Auto-Embauen op {STRING})
|
||||||
STR_ORDER_NO_UNLOAD_REFIT :(Keen Entlueden an huel Wueren mat Auto-Embauen op {STRING})
|
STR_ORDER_NO_UNLOAD_REFIT :{SPACE}(Keen Entlueden an huel Wueren mat Auto-Embauen op {STRING})
|
||||||
STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :(Keen Entlueden an waard op Vollueden mat Auto-Embauen op {STRING})
|
STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :{SPACE}(Keen Entlueden an waard op Vollueden mat Auto-Embauen op {STRING})
|
||||||
STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(Keen Entlueden an waard op iergendend Volluedung mat Auto-Embauen op {STRING})
|
STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :{SPACE}(Keen Entlueden an waard op iergendend Volluedung mat Auto-Embauen op {STRING})
|
||||||
|
|
||||||
STR_ORDER_AUTO_REFIT_ANY :verfügbar Wueren
|
STR_ORDER_AUTO_REFIT_ANY :verfügbar Wueren
|
||||||
|
|
||||||
###length 3
|
###length 3
|
||||||
STR_ORDER_STOP_LOCATION_NEAR_END :[noosten Enn]
|
STR_ORDER_STOP_LOCATION_NEAR_END :{SPACE}[no um Enn]
|
||||||
STR_ORDER_STOP_LOCATION_MIDDLE :[Mëtt]
|
STR_ORDER_STOP_LOCATION_MIDDLE :{SPACE}[Mëtt]
|
||||||
STR_ORDER_STOP_LOCATION_FAR_END :[wäit Enn]
|
STR_ORDER_STOP_LOCATION_FAR_END :{SPACE}[wäit Enn]
|
||||||
|
|
||||||
STR_ORDER_OUT_OF_RANGE :{RED} (Nächst Destinatioun ass ze wäit fort)
|
STR_ORDER_OUT_OF_RANGE :{RED} (Nächst Destinatioun ass ze wäit fort)
|
||||||
|
|
||||||
|
@ -4740,8 +4772,8 @@ STR_TIMETABLE_TRAVEL_FOR :Ënnerwee währ
|
||||||
STR_TIMETABLE_TRAVEL_FOR_SPEED :Fiert während {STRING} mat maximal {VELOCITY}
|
STR_TIMETABLE_TRAVEL_FOR_SPEED :Fiert während {STRING} mat maximal {VELOCITY}
|
||||||
STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Fuer (während {STRING}, ouni Zäitplang)
|
STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Fuer (während {STRING}, ouni Zäitplang)
|
||||||
STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Fuer (während {STRING}, ouni Zäitplang) mat maximal {VELOCITY}
|
STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Fuer (während {STRING}, ouni Zäitplang) mat maximal {VELOCITY}
|
||||||
STR_TIMETABLE_STAY_FOR_ESTIMATED :(bleif während {STRING}, ouni Zäitplang)
|
STR_TIMETABLE_STAY_FOR_ESTIMATED :{SPACE}(waard {STRING}, ouni Zäitplang)
|
||||||
STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(fuer während {STRING}, ouni Zäitplang)
|
STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :{SPACE}(fuer während {STRING}, ouni Zäitplang)
|
||||||
STR_TIMETABLE_STAY_FOR :an bleif fir {STRING}
|
STR_TIMETABLE_STAY_FOR :an bleif fir {STRING}
|
||||||
STR_TIMETABLE_AND_TRAVEL_FOR :an ënnerwee während {STRING}
|
STR_TIMETABLE_AND_TRAVEL_FOR :an ënnerwee während {STRING}
|
||||||
|
|
||||||
|
@ -4762,12 +4794,14 @@ STR_TIMETABLE_START_SECONDS_QUERY :Sekonne bis den
|
||||||
|
|
||||||
STR_TIMETABLE_CHANGE_TIME :{BLACK}Zäit wiesselen
|
STR_TIMETABLE_CHANGE_TIME :{BLACK}Zäit wiesselen
|
||||||
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Änner Zäit déi den ugewielten Optrag brauche soll. Ctrl+Klick ännert d'Zäit fir all Opträg
|
STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Änner Zäit déi den ugewielten Optrag brauche soll. Ctrl+Klick ännert d'Zäit fir all Opträg
|
||||||
|
STR_TIMETABLE_CHANGE_TIME_QUERY :Zäit änneren
|
||||||
|
|
||||||
STR_TIMETABLE_CLEAR_TIME :{BLACK}Zäit läschen
|
STR_TIMETABLE_CLEAR_TIME :{BLACK}Zäit läschen
|
||||||
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Läsch Zäit fir de gewielten Optrag. Ctrl+Klick läscht d'Zäite fir all opträg
|
STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Läsch Zäit fir de gewielten Optrag. Ctrl+Klick läscht d'Zäite fir all opträg
|
||||||
|
|
||||||
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Änner de Geschwindegkeetslimit
|
STR_TIMETABLE_CHANGE_SPEED :{BLACK}Änner de Geschwindegkeetslimit
|
||||||
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Änner d'maximal Reesgeschwindëgkeet fir de gewielten Optrag. Ctrl+Klick ännert d'Geschwindegkeet fir all Opträg
|
STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Änner d'maximal Reesgeschwindëgkeet fir de gewielten Optrag. Ctrl+Klick ännert d'Geschwindegkeet fir all Opträg
|
||||||
|
STR_TIMETABLE_CHANGE_SPEED_QUERY :Geschwindegkeetslimit änneren
|
||||||
|
|
||||||
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Geschwindegkeetslimit läschen
|
STR_TIMETABLE_CLEAR_SPEED :{BLACK}Geschwindegkeetslimit läschen
|
||||||
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Maximal Reesgeschwindegkeet vum gewielten Optrag läschen. Ctrl+Klick läscht d'Geschwindegkeet fir all Opträg
|
STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Maximal Reesgeschwindegkeet vum gewielten Optrag läschen. Ctrl+Klick läscht d'Geschwindegkeet fir all Opträg
|
||||||
|
@ -4873,7 +4907,7 @@ STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap-
|
||||||
|
|
||||||
# Script Parameters
|
# Script Parameters
|
||||||
STR_AI_SETTINGS_CAPTION_AI :KI
|
STR_AI_SETTINGS_CAPTION_AI :KI
|
||||||
STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Spill-Script
|
STR_AI_SETTINGS_CAPTION_GAMESCRIPT :{WHITE}Spill-Script-Parameter
|
||||||
STR_AI_SETTINGS_CLOSE :{BLACK}Zoumaachen
|
STR_AI_SETTINGS_CLOSE :{BLACK}Zoumaachen
|
||||||
STR_AI_SETTINGS_RESET :{BLACK}Reset
|
STR_AI_SETTINGS_RESET :{BLACK}Reset
|
||||||
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
|
STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING}
|
||||||
|
@ -4934,7 +4968,7 @@ STR_GAME_SAVELOAD_NOT_AVAILABLE :<keen do>
|
||||||
STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Spill gouf an enger Versioun ouni Tram support gesaved. All Tram gouf wechgeholl
|
STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Spill gouf an enger Versioun ouni Tram support gesaved. All Tram gouf wechgeholl
|
||||||
|
|
||||||
# Map generation messages
|
# Map generation messages
|
||||||
STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Kaartenerstellung ofgebrach...{}... keng passend Stadplazen
|
STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Kaartenerstellung ofgebrach...{}{}... keng passend Stadplazen
|
||||||
STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... et ass keng Stad an dësem Szenario
|
STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... et ass keng Stad an dësem Szenario
|
||||||
|
|
||||||
STR_ERROR_PNGMAP :{WHITE}Kann d'Landschaft net vum PNG lueden...
|
STR_ERROR_PNGMAP :{WHITE}Kann d'Landschaft net vum PNG lueden...
|
||||||
|
@ -4963,6 +4997,7 @@ STR_ERROR_SCREENSHOT_FAILED :{WHITE}Screensh
|
||||||
|
|
||||||
# Error message titles
|
# Error message titles
|
||||||
STR_ERROR_MESSAGE_CAPTION :{YELLOW}Meldung
|
STR_ERROR_MESSAGE_CAPTION :{YELLOW}Meldung
|
||||||
|
STR_ERROR_MESSAGE_CAPTION_OTHER_COMPANY :{YELLOW}Matdeelung vun {COMPANY}
|
||||||
|
|
||||||
# Generic construction errors
|
# Generic construction errors
|
||||||
STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}Ausserhalb vun der Kaart
|
STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}Ausserhalb vun der Kaart
|
||||||
|
@ -4981,6 +5016,7 @@ STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}... Limi
|
||||||
STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... Limit fir d'Raume vu Felder erreecht
|
STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... Limit fir d'Raume vu Felder erreecht
|
||||||
STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}... Limit fir Beem ze planzen erreecht
|
STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}... Limit fir Beem ze planzen erreecht
|
||||||
STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}Numm muss eenzegarteg sinn
|
STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}Numm muss eenzegarteg sinn
|
||||||
|
STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}{STRING} am Wee
|
||||||
STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Net erlaabt an der Paus
|
STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Net erlaabt an der Paus
|
||||||
|
|
||||||
# Local authority errors
|
# Local authority errors
|
||||||
|
@ -5023,7 +5059,7 @@ STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... ze n
|
||||||
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... ze vill Stied
|
STR_ERROR_TOO_MANY_TOWNS :{WHITE}... ze vill Stied
|
||||||
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... et ass keng Plaz méi op der Kaart
|
STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... et ass keng Plaz méi op der Kaart
|
||||||
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Stroossenarbeschten amgaangen
|
STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Stroossenarbeschten amgaangen
|
||||||
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kann des Stad net läschen...{}Eng Statioun oder Schapp huet den Numm vun dëser Stad oder en Stéck dat der Stad gehéiert kann net ewechgeholl ginn
|
STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Kann des Stad net läschen...{}{}Eng Statioun oder Schapp huet den Numm vun dëser Stad oder en Stéck dat der Stad gehéiert kann net ewechgeholl ginn
|
||||||
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... et gëtt keng gëeegent Plaz fir eng Statu am Stadzentrum
|
STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... et gëtt keng gëeegent Plaz fir eng Statu am Stadzentrum
|
||||||
STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Kann d'Haus net bauen...
|
STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Kann d'Haus net bauen...
|
||||||
|
|
||||||
|
@ -5297,8 +5333,16 @@ STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Kann Sch
|
||||||
STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Kann de Fliger net verkafen...
|
STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Kann de Fliger net verkafen...
|
||||||
|
|
||||||
###length VEHICLE_TYPES
|
###length VEHICLE_TYPES
|
||||||
|
STR_ERROR_CAN_T_SELL_ALL_TRAIN :{WHITE}Kann net all Zich verkafen...
|
||||||
|
STR_ERROR_CAN_T_SELL_ALL_ROAD_VEHICLE :{WHITE}Kann net all Gefierer verkafen...
|
||||||
|
STR_ERROR_CAN_T_SELL_ALL_SHIP :{WHITE}Kann net all Schëffer verkafen...
|
||||||
|
STR_ERROR_CAN_T_SELL_ALL_AIRCRAFT :{WHITE}Kann all Fligeren net verkafen...
|
||||||
|
|
||||||
###length VEHICLE_TYPES
|
###length VEHICLE_TYPES
|
||||||
|
STR_ERROR_CAN_T_AUTOREPLACE_TRAIN :{WHITE}Kann Zich net automatesch ersetzen...
|
||||||
|
STR_ERROR_CAN_T_AUTOREPLACE_ROAD_VEHICLE :{WHITE}Ka Gefierer net automatesch ersetzen...
|
||||||
|
STR_ERROR_CAN_T_AUTOREPLACE_SHIP :{WHITE}Ka Schëffer net automatesch ersetzen...
|
||||||
|
STR_ERROR_CAN_T_AUTOREPLACE_AIRCRAFT :{WHITE}Ka Fliger net automatesch ersetzen...
|
||||||
|
|
||||||
STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Ze vill Gefierer am Spill
|
STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Ze vill Gefierer am Spill
|
||||||
STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}De Service-Intervall kann net geännert ginn...
|
STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}De Service-Intervall kann net geännert ginn...
|
||||||
|
@ -5818,7 +5862,7 @@ STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STR
|
||||||
STR_SAVEGAME_NAME_SPECTATOR :Zuschauer, {1:STRING}
|
STR_SAVEGAME_NAME_SPECTATOR :Zuschauer, {1:STRING}
|
||||||
|
|
||||||
# Viewport strings
|
# Viewport strings
|
||||||
STR_VIEWPORT_TOWN_POP :{WHITE}{TOWN} ({COMMA})
|
STR_VIEWPORT_TOWN_POP :{TOWN} ({COMMA})
|
||||||
STR_VIEWPORT_STATION :{STATION} {STATION_FEATURES}
|
STR_VIEWPORT_STATION :{STATION} {STATION_FEATURES}
|
||||||
|
|
||||||
# Simple strings to get specific types of data
|
# Simple strings to get specific types of data
|
||||||
|
@ -5880,3 +5924,4 @@ STR_SHIP :{BLACK}{SHIP}
|
||||||
|
|
||||||
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
STR_TOOLBAR_RAILTYPE_VELOCITY :{STRING} ({VELOCITY})
|
||||||
|
|
||||||
|
STR_BADGE_NAME_LIST :{STRING}: {GOLD}{STRING}
|
||||||
|
|
|
@ -945,40 +945,40 @@ void FinaliseCargoArray()
|
||||||
* @param filename The filename of the newgrf this house was defined in.
|
* @param filename The filename of the newgrf this house was defined in.
|
||||||
* @return Whether the given housespec is valid.
|
* @return Whether the given housespec is valid.
|
||||||
*/
|
*/
|
||||||
static bool IsHouseSpecValid(HouseSpec *hs, const HouseSpec *next1, const HouseSpec *next2, const HouseSpec *next3, const std::string &filename)
|
static bool IsHouseSpecValid(HouseSpec &hs, const HouseSpec *next1, const HouseSpec *next2, const HouseSpec *next3, const std::string &filename)
|
||||||
{
|
{
|
||||||
if ((hs->building_flags.Any(BUILDING_HAS_2_TILES) &&
|
if ((hs.building_flags.Any(BUILDING_HAS_2_TILES) &&
|
||||||
(next1 == nullptr || !next1->enabled || next1->building_flags.Any(BUILDING_HAS_1_TILE))) ||
|
(next1 == nullptr || !next1->enabled || next1->building_flags.Any(BUILDING_HAS_1_TILE))) ||
|
||||||
(hs->building_flags.Any(BUILDING_HAS_4_TILES) &&
|
(hs.building_flags.Any(BUILDING_HAS_4_TILES) &&
|
||||||
(next2 == nullptr || !next2->enabled || next2->building_flags.Any(BUILDING_HAS_1_TILE) ||
|
(next2 == nullptr || !next2->enabled || next2->building_flags.Any(BUILDING_HAS_1_TILE) ||
|
||||||
next3 == nullptr || !next3->enabled || next3->building_flags.Any(BUILDING_HAS_1_TILE)))) {
|
next3 == nullptr || !next3->enabled || next3->building_flags.Any(BUILDING_HAS_1_TILE)))) {
|
||||||
hs->enabled = false;
|
hs.enabled = false;
|
||||||
if (!filename.empty()) Debug(grf, 1, "FinaliseHouseArray: {} defines house {} as multitile, but no suitable tiles follow. Disabling house.", filename, hs->grf_prop.local_id);
|
if (!filename.empty()) Debug(grf, 1, "FinaliseHouseArray: {} defines house {} as multitile, but no suitable tiles follow. Disabling house.", filename, hs.grf_prop.local_id);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Some places sum population by only counting north tiles. Other places use all tiles causing desyncs.
|
/* Some places sum population by only counting north tiles. Other places use all tiles causing desyncs.
|
||||||
* As the newgrf specs define population to be zero for non-north tiles, we just disable the offending house.
|
* As the newgrf specs define population to be zero for non-north tiles, we just disable the offending house.
|
||||||
* If you want to allow non-zero populations somewhen, make sure to sum the population of all tiles in all places. */
|
* If you want to allow non-zero populations somewhen, make sure to sum the population of all tiles in all places. */
|
||||||
if ((hs->building_flags.Any(BUILDING_HAS_2_TILES) && next1->population != 0) ||
|
if ((hs.building_flags.Any(BUILDING_HAS_2_TILES) && next1->population != 0) ||
|
||||||
(hs->building_flags.Any(BUILDING_HAS_4_TILES) && (next2->population != 0 || next3->population != 0))) {
|
(hs.building_flags.Any(BUILDING_HAS_4_TILES) && (next2->population != 0 || next3->population != 0))) {
|
||||||
hs->enabled = false;
|
hs.enabled = false;
|
||||||
if (!filename.empty()) Debug(grf, 1, "FinaliseHouseArray: {} defines multitile house {} with non-zero population on additional tiles. Disabling house.", filename, hs->grf_prop.local_id);
|
if (!filename.empty()) Debug(grf, 1, "FinaliseHouseArray: {} defines multitile house {} with non-zero population on additional tiles. Disabling house.", filename, hs.grf_prop.local_id);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Substitute type is also used for override, and having an override with a different size causes crashes.
|
/* Substitute type is also used for override, and having an override with a different size causes crashes.
|
||||||
* This check should only be done for NewGRF houses because grf_prop.subst_id is not set for original houses.*/
|
* This check should only be done for NewGRF houses because grf_prop.subst_id is not set for original houses.*/
|
||||||
if (!filename.empty() && (hs->building_flags & BUILDING_HAS_1_TILE) != (HouseSpec::Get(hs->grf_prop.subst_id)->building_flags & BUILDING_HAS_1_TILE)) {
|
if (!filename.empty() && (hs.building_flags & BUILDING_HAS_1_TILE) != (HouseSpec::Get(hs.grf_prop.subst_id)->building_flags & BUILDING_HAS_1_TILE)) {
|
||||||
hs->enabled = false;
|
hs.enabled = false;
|
||||||
Debug(grf, 1, "FinaliseHouseArray: {} defines house {} with different house size then it's substitute type. Disabling house.", filename, hs->grf_prop.local_id);
|
Debug(grf, 1, "FinaliseHouseArray: {} defines house {} with different house size then it's substitute type. Disabling house.", filename, hs.grf_prop.local_id);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make sure that additional parts of multitile houses are not available. */
|
/* Make sure that additional parts of multitile houses are not available. */
|
||||||
if (!hs->building_flags.Any(BUILDING_HAS_1_TILE) && (hs->building_availability & HZ_ZONALL) != 0 && (hs->building_availability & HZ_CLIMALL) != 0) {
|
if (!hs.building_flags.Any(BUILDING_HAS_1_TILE) && (hs.building_availability & HZ_ZONALL) != 0 && (hs.building_availability & HZ_CLIMALL) != 0) {
|
||||||
hs->enabled = false;
|
hs.enabled = false;
|
||||||
if (!filename.empty()) Debug(grf, 1, "FinaliseHouseArray: {} defines house {} without a size but marked it as available. Disabling house.", filename, hs->grf_prop.local_id);
|
if (!filename.empty()) Debug(grf, 1, "FinaliseHouseArray: {} defines house {} without a size but marked it as available. Disabling house.", filename, hs.grf_prop.local_id);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1027,12 +1027,12 @@ static void FinaliseHouseArray()
|
||||||
* On the other hand, why 1930? Just 'fix' the houses with the lowest
|
* On the other hand, why 1930? Just 'fix' the houses with the lowest
|
||||||
* minimum introduction date to 0.
|
* minimum introduction date to 0.
|
||||||
*/
|
*/
|
||||||
for (const auto &file : _grf_files) {
|
for (auto &file : _grf_files) {
|
||||||
if (file.housespec.empty()) continue;
|
if (file.housespec.empty()) continue;
|
||||||
|
|
||||||
size_t num_houses = file.housespec.size();
|
size_t num_houses = file.housespec.size();
|
||||||
for (size_t i = 0; i < num_houses; i++) {
|
for (size_t i = 0; i < num_houses; i++) {
|
||||||
HouseSpec *hs = file.housespec[i].get();
|
auto &hs = file.housespec[i];
|
||||||
|
|
||||||
if (hs == nullptr) continue;
|
if (hs == nullptr) continue;
|
||||||
|
|
||||||
|
@ -1040,10 +1040,14 @@ static void FinaliseHouseArray()
|
||||||
const HouseSpec *next2 = (i + 2 < num_houses ? file.housespec[i + 2].get() : nullptr);
|
const HouseSpec *next2 = (i + 2 < num_houses ? file.housespec[i + 2].get() : nullptr);
|
||||||
const HouseSpec *next3 = (i + 3 < num_houses ? file.housespec[i + 3].get() : nullptr);
|
const HouseSpec *next3 = (i + 3 < num_houses ? file.housespec[i + 3].get() : nullptr);
|
||||||
|
|
||||||
if (!IsHouseSpecValid(hs, next1, next2, next3, file.filename)) continue;
|
if (!IsHouseSpecValid(*hs, next1, next2, next3, file.filename)) continue;
|
||||||
|
|
||||||
_house_mngr.SetEntitySpec(hs);
|
_house_mngr.SetEntitySpec(std::move(*hs));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Won't be used again */
|
||||||
|
file.housespec.clear();
|
||||||
|
file.housespec.shrink_to_fit();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < HouseSpec::Specs().size(); i++) {
|
for (size_t i = 0; i < HouseSpec::Specs().size(); i++) {
|
||||||
|
@ -1054,7 +1058,7 @@ static void FinaliseHouseArray()
|
||||||
|
|
||||||
/* We need to check all houses again to we are sure that multitile houses
|
/* We need to check all houses again to we are sure that multitile houses
|
||||||
* did get consecutive IDs and none of the parts are missing. */
|
* did get consecutive IDs and none of the parts are missing. */
|
||||||
if (!IsHouseSpecValid(hs, next1, next2, next3, std::string{})) {
|
if (!IsHouseSpecValid(*hs, next1, next2, next3, std::string{})) {
|
||||||
/* GetHouseNorthPart checks 3 houses that are directly before
|
/* GetHouseNorthPart checks 3 houses that are directly before
|
||||||
* it in the house pool. If any of those houses have multi-tile
|
* it in the house pool. If any of those houses have multi-tile
|
||||||
* flags set it assumes it's part of a multitile house. Since
|
* flags set it assumes it's part of a multitile house. Since
|
||||||
|
@ -1096,18 +1100,24 @@ static void FinaliseHouseArray()
|
||||||
*/
|
*/
|
||||||
static void FinaliseIndustriesArray()
|
static void FinaliseIndustriesArray()
|
||||||
{
|
{
|
||||||
for (const auto &file : _grf_files) {
|
for (auto &file : _grf_files) {
|
||||||
for (const auto &indsp : file.industryspec) {
|
for (auto &indsp : file.industryspec) {
|
||||||
if (indsp == nullptr || !indsp->enabled) continue;
|
if (indsp == nullptr || !indsp->enabled) continue;
|
||||||
|
|
||||||
_industry_mngr.SetEntitySpec(indsp.get());
|
_industry_mngr.SetEntitySpec(std::move(*indsp));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const auto &indtsp : file.indtspec) {
|
for (auto &indtsp : file.indtspec) {
|
||||||
if (indtsp != nullptr) {
|
if (indtsp != nullptr) {
|
||||||
_industile_mngr.SetEntitySpec(indtsp.get());
|
_industile_mngr.SetEntitySpec(std::move(*indtsp));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Won't be used again */
|
||||||
|
file.industryspec.clear();
|
||||||
|
file.industryspec.shrink_to_fit();
|
||||||
|
file.indtspec.clear();
|
||||||
|
file.indtspec.shrink_to_fit();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto &indsp : _industry_specs) {
|
for (auto &indsp : _industry_specs) {
|
||||||
|
@ -1144,12 +1154,16 @@ static void FinaliseIndustriesArray()
|
||||||
*/
|
*/
|
||||||
static void FinaliseObjectsArray()
|
static void FinaliseObjectsArray()
|
||||||
{
|
{
|
||||||
for (const auto &file : _grf_files) {
|
for (auto &file : _grf_files) {
|
||||||
for (auto &objectspec : file.objectspec) {
|
for (auto &objectspec : file.objectspec) {
|
||||||
if (objectspec != nullptr && objectspec->grf_prop.HasGrfFile() && objectspec->IsEnabled()) {
|
if (objectspec != nullptr && objectspec->grf_prop.HasGrfFile() && objectspec->IsEnabled()) {
|
||||||
_object_mngr.SetEntitySpec(objectspec.get());
|
_object_mngr.SetEntitySpec(std::move(*objectspec));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Won't be used again */
|
||||||
|
file.objectspec.clear();
|
||||||
|
file.objectspec.shrink_to_fit();
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjectSpec::BindToClasses();
|
ObjectSpec::BindToClasses();
|
||||||
|
@ -1162,18 +1176,24 @@ static void FinaliseObjectsArray()
|
||||||
*/
|
*/
|
||||||
static void FinaliseAirportsArray()
|
static void FinaliseAirportsArray()
|
||||||
{
|
{
|
||||||
for (const auto &file : _grf_files) {
|
for (auto &file : _grf_files) {
|
||||||
for (auto &as : file.airportspec) {
|
for (auto &as : file.airportspec) {
|
||||||
if (as != nullptr && as->enabled) {
|
if (as != nullptr && as->enabled) {
|
||||||
_airport_mngr.SetEntitySpec(as.get());
|
_airport_mngr.SetEntitySpec(std::move(*as));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto &ats : file.airtspec) {
|
for (auto &ats : file.airtspec) {
|
||||||
if (ats != nullptr && ats->enabled) {
|
if (ats != nullptr && ats->enabled) {
|
||||||
_airporttile_mngr.SetEntitySpec(ats.get());
|
_airporttile_mngr.SetEntitySpec(std::move(*ats));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Won't be used again */
|
||||||
|
file.airportspec.clear();
|
||||||
|
file.airportspec.shrink_to_fit();
|
||||||
|
file.airtspec.clear();
|
||||||
|
file.airtspec.shrink_to_fit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -134,22 +134,22 @@ void BindAirportSpecs()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void AirportOverrideManager::SetEntitySpec(AirportSpec *as)
|
void AirportOverrideManager::SetEntitySpec(AirportSpec &&as)
|
||||||
{
|
{
|
||||||
uint8_t airport_id = this->AddEntityID(as->grf_prop.local_id, as->grf_prop.grfid, as->grf_prop.subst_id);
|
uint8_t airport_id = this->AddEntityID(as.grf_prop.local_id, as.grf_prop.grfid, as.grf_prop.subst_id);
|
||||||
|
|
||||||
if (airport_id == this->invalid_id) {
|
if (airport_id == this->invalid_id) {
|
||||||
GrfMsg(1, "Airport.SetEntitySpec: Too many airports allocated. Ignoring.");
|
GrfMsg(1, "Airport.SetEntitySpec: Too many airports allocated. Ignoring.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
*AirportSpec::GetWithoutOverride(airport_id) = *as;
|
AirportSpec::specs[airport_id] = std::move(as);
|
||||||
|
|
||||||
/* Now add the overrides. */
|
/* Now add the overrides. */
|
||||||
for (int i = 0; i < this->max_offset; i++) {
|
for (int i = 0; i < this->max_offset; i++) {
|
||||||
AirportSpec *overridden_as = AirportSpec::GetWithoutOverride(i);
|
AirportSpec *overridden_as = AirportSpec::GetWithoutOverride(i);
|
||||||
|
|
||||||
if (this->entity_overrides[i] != as->grf_prop.local_id || this->grfid_overrides[i] != as->grf_prop.grfid) continue;
|
if (this->entity_overrides[i] != AirportSpec::specs[airport_id].grf_prop.local_id || this->grfid_overrides[i] != AirportSpec::specs[airport_id].grf_prop.grfid) continue;
|
||||||
|
|
||||||
overridden_as->grf_prop.override_id = airport_id;
|
overridden_as->grf_prop.override_id = airport_id;
|
||||||
overridden_as->enabled = false;
|
overridden_as->enabled = false;
|
||||||
|
|
|
@ -141,6 +141,8 @@ struct AirportSpec : NewGRFSpecBase<AirportClassID> {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static AirportSpec specs[NUM_AIRPORTS]; ///< Specs of the airports.
|
static AirportSpec specs[NUM_AIRPORTS]; ///< Specs of the airports.
|
||||||
|
|
||||||
|
friend void AirportOverrideManager::SetEntitySpec(AirportSpec &&as);
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Information related to airport classes. */
|
/** Information related to airport classes. */
|
||||||
|
|
|
@ -66,22 +66,22 @@ void AirportTileSpec::ResetAirportTiles()
|
||||||
_airporttile_mngr.ResetOverride();
|
_airporttile_mngr.ResetOverride();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AirportTileOverrideManager::SetEntitySpec(const AirportTileSpec *airpts)
|
void AirportTileOverrideManager::SetEntitySpec(AirportTileSpec &&airpts)
|
||||||
{
|
{
|
||||||
StationGfx airpt_id = this->AddEntityID(airpts->grf_prop.local_id, airpts->grf_prop.grfid, airpts->grf_prop.subst_id);
|
StationGfx airpt_id = this->AddEntityID(airpts.grf_prop.local_id, airpts.grf_prop.grfid, airpts.grf_prop.subst_id);
|
||||||
|
|
||||||
if (airpt_id == this->invalid_id) {
|
if (airpt_id == this->invalid_id) {
|
||||||
GrfMsg(1, "AirportTile.SetEntitySpec: Too many airport tiles allocated. Ignoring.");
|
GrfMsg(1, "AirportTile.SetEntitySpec: Too many airport tiles allocated. Ignoring.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
AirportTileSpec::tiles[airpt_id] = *airpts;
|
AirportTileSpec::tiles[airpt_id] = std::move(airpts);
|
||||||
|
|
||||||
/* Now add the overrides. */
|
/* Now add the overrides. */
|
||||||
for (int i = 0; i < this->max_offset; i++) {
|
for (int i = 0; i < this->max_offset; i++) {
|
||||||
AirportTileSpec *overridden_airpts = &AirportTileSpec::tiles[i];
|
AirportTileSpec *overridden_airpts = &AirportTileSpec::tiles[i];
|
||||||
|
|
||||||
if (this->entity_overrides[i] != airpts->grf_prop.local_id || this->grfid_overrides[i] != airpts->grf_prop.grfid) continue;
|
if (this->entity_overrides[i] != AirportTileSpec::tiles[airpt_id].grf_prop.local_id || this->grfid_overrides[i] != AirportTileSpec::tiles[airpt_id].grf_prop.grfid) continue;
|
||||||
|
|
||||||
overridden_airpts->grf_prop.override_id = airpt_id;
|
overridden_airpts->grf_prop.override_id = airpt_id;
|
||||||
overridden_airpts->enabled = false;
|
overridden_airpts->enabled = false;
|
||||||
|
|
|
@ -84,7 +84,7 @@ struct AirportTileSpec {
|
||||||
private:
|
private:
|
||||||
static AirportTileSpec tiles[NUM_AIRPORTTILES];
|
static AirportTileSpec tiles[NUM_AIRPORTTILES];
|
||||||
|
|
||||||
friend void AirportTileOverrideManager::SetEntitySpec(const AirportTileSpec *airpts);
|
friend void AirportTileOverrideManager::SetEntitySpec(AirportTileSpec &&airpts);
|
||||||
};
|
};
|
||||||
|
|
||||||
void AnimateAirportTile(TileIndex tile);
|
void AnimateAirportTile(TileIndex tile);
|
||||||
|
|
|
@ -157,9 +157,9 @@ uint16_t OverrideManagerBase::GetSubstituteID(uint16_t entity_id) const
|
||||||
* It will find itself the proper slot on which it will go
|
* It will find itself the proper slot on which it will go
|
||||||
* @param hs HouseSpec read from the grf file, ready for inclusion
|
* @param hs HouseSpec read from the grf file, ready for inclusion
|
||||||
*/
|
*/
|
||||||
void HouseOverrideManager::SetEntitySpec(const HouseSpec *hs)
|
void HouseOverrideManager::SetEntitySpec(HouseSpec &&hs)
|
||||||
{
|
{
|
||||||
HouseID house_id = this->AddEntityID(hs->grf_prop.local_id, hs->grf_prop.grfid, hs->grf_prop.subst_id);
|
HouseID house_id = this->AddEntityID(hs.grf_prop.local_id, hs.grf_prop.grfid, hs.grf_prop.subst_id);
|
||||||
|
|
||||||
if (house_id == this->invalid_id) {
|
if (house_id == this->invalid_id) {
|
||||||
GrfMsg(1, "House.SetEntitySpec: Too many houses allocated. Ignoring.");
|
GrfMsg(1, "House.SetEntitySpec: Too many houses allocated. Ignoring.");
|
||||||
|
@ -170,13 +170,13 @@ void HouseOverrideManager::SetEntitySpec(const HouseSpec *hs)
|
||||||
|
|
||||||
/* Now that we know we can use the given id, copy the spec to its final destination. */
|
/* Now that we know we can use the given id, copy the spec to its final destination. */
|
||||||
if (house_id >= house_specs.size()) house_specs.resize(house_id + 1);
|
if (house_id >= house_specs.size()) house_specs.resize(house_id + 1);
|
||||||
house_specs[house_id] = *hs;
|
house_specs[house_id] = std::move(hs);
|
||||||
|
|
||||||
/* Now add the overrides. */
|
/* Now add the overrides. */
|
||||||
for (int i = 0; i < this->max_offset; i++) {
|
for (int i = 0; i < this->max_offset; i++) {
|
||||||
HouseSpec *overridden_hs = HouseSpec::Get(i);
|
HouseSpec *overridden_hs = HouseSpec::Get(i);
|
||||||
|
|
||||||
if (this->entity_overrides[i] != hs->grf_prop.local_id || this->grfid_overrides[i] != hs->grf_prop.grfid) continue;
|
if (this->entity_overrides[i] != house_specs[house_id].grf_prop.local_id || this->grfid_overrides[i] != house_specs[house_id].grf_prop.grfid) continue;
|
||||||
|
|
||||||
overridden_hs->grf_prop.override_id = house_id;
|
overridden_hs->grf_prop.override_id = house_id;
|
||||||
this->entity_overrides[i] = this->invalid_id;
|
this->entity_overrides[i] = this->invalid_id;
|
||||||
|
@ -245,18 +245,18 @@ uint16_t IndustryOverrideManager::AddEntityID(uint16_t grf_local_id, uint32_t gr
|
||||||
* checking what is available
|
* checking what is available
|
||||||
* @param inds Industryspec that comes from the grf decoding process
|
* @param inds Industryspec that comes from the grf decoding process
|
||||||
*/
|
*/
|
||||||
void IndustryOverrideManager::SetEntitySpec(IndustrySpec *inds)
|
void IndustryOverrideManager::SetEntitySpec(IndustrySpec &&inds)
|
||||||
{
|
{
|
||||||
/* First step : We need to find if this industry is already specified in the savegame data. */
|
/* First step : We need to find if this industry is already specified in the savegame data. */
|
||||||
IndustryType ind_id = this->GetID(inds->grf_prop.local_id, inds->grf_prop.grfid);
|
IndustryType ind_id = this->GetID(inds.grf_prop.local_id, inds.grf_prop.grfid);
|
||||||
|
|
||||||
if (ind_id == this->invalid_id) {
|
if (ind_id == this->invalid_id) {
|
||||||
/* Not found.
|
/* Not found.
|
||||||
* Or it has already been overridden, so you've lost your place.
|
* Or it has already been overridden, so you've lost your place.
|
||||||
* Or it is a simple substitute.
|
* Or it is a simple substitute.
|
||||||
* We need to find a free available slot */
|
* We need to find a free available slot */
|
||||||
ind_id = this->AddEntityID(inds->grf_prop.local_id, inds->grf_prop.grfid, inds->grf_prop.subst_id);
|
ind_id = this->AddEntityID(inds.grf_prop.local_id, inds.grf_prop.grfid, inds.grf_prop.subst_id);
|
||||||
inds->grf_prop.override_id = this->invalid_id; // make sure it will not be detected as overridden
|
inds.grf_prop.override_id = this->invalid_id; // make sure it will not be detected as overridden
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ind_id == this->invalid_id) {
|
if (ind_id == this->invalid_id) {
|
||||||
|
@ -265,27 +265,27 @@ void IndustryOverrideManager::SetEntitySpec(IndustrySpec *inds)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now that we know we can use the given id, copy the spec to its final destination... */
|
/* Now that we know we can use the given id, copy the spec to its final destination... */
|
||||||
_industry_specs[ind_id] = *inds;
|
_industry_specs[ind_id] = std::move(inds);
|
||||||
/* ... and mark it as usable*/
|
/* ... and mark it as usable*/
|
||||||
_industry_specs[ind_id].enabled = true;
|
_industry_specs[ind_id].enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void IndustryTileOverrideManager::SetEntitySpec(const IndustryTileSpec *its)
|
void IndustryTileOverrideManager::SetEntitySpec(IndustryTileSpec &&its)
|
||||||
{
|
{
|
||||||
IndustryGfx indt_id = this->AddEntityID(its->grf_prop.local_id, its->grf_prop.grfid, its->grf_prop.subst_id);
|
IndustryGfx indt_id = this->AddEntityID(its.grf_prop.local_id, its.grf_prop.grfid, its.grf_prop.subst_id);
|
||||||
|
|
||||||
if (indt_id == this->invalid_id) {
|
if (indt_id == this->invalid_id) {
|
||||||
GrfMsg(1, "IndustryTile.SetEntitySpec: Too many industry tiles allocated. Ignoring.");
|
GrfMsg(1, "IndustryTile.SetEntitySpec: Too many industry tiles allocated. Ignoring.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_industry_tile_specs[indt_id] = *its;
|
_industry_tile_specs[indt_id] = std::move(its);
|
||||||
|
|
||||||
/* Now add the overrides. */
|
/* Now add the overrides. */
|
||||||
for (int i = 0; i < this->max_offset; i++) {
|
for (int i = 0; i < this->max_offset; i++) {
|
||||||
IndustryTileSpec *overridden_its = &_industry_tile_specs[i];
|
IndustryTileSpec *overridden_its = &_industry_tile_specs[i];
|
||||||
|
|
||||||
if (this->entity_overrides[i] != its->grf_prop.local_id || this->grfid_overrides[i] != its->grf_prop.grfid) continue;
|
if (this->entity_overrides[i] != _industry_tile_specs[indt_id].grf_prop.local_id || this->grfid_overrides[i] != _industry_tile_specs[indt_id].grf_prop.grfid) continue;
|
||||||
|
|
||||||
overridden_its->grf_prop.override_id = indt_id;
|
overridden_its->grf_prop.override_id = indt_id;
|
||||||
overridden_its->enabled = false;
|
overridden_its->enabled = false;
|
||||||
|
@ -300,17 +300,17 @@ void IndustryTileOverrideManager::SetEntitySpec(const IndustryTileSpec *its)
|
||||||
* checking what is available
|
* checking what is available
|
||||||
* @param spec ObjectSpec that comes from the grf decoding process
|
* @param spec ObjectSpec that comes from the grf decoding process
|
||||||
*/
|
*/
|
||||||
void ObjectOverrideManager::SetEntitySpec(ObjectSpec *spec)
|
void ObjectOverrideManager::SetEntitySpec(ObjectSpec &&spec)
|
||||||
{
|
{
|
||||||
/* First step : We need to find if this object is already specified in the savegame data. */
|
/* First step : We need to find if this object is already specified in the savegame data. */
|
||||||
ObjectType type = this->GetID(spec->grf_prop.local_id, spec->grf_prop.grfid);
|
ObjectType type = this->GetID(spec.grf_prop.local_id, spec.grf_prop.grfid);
|
||||||
|
|
||||||
if (type == this->invalid_id) {
|
if (type == this->invalid_id) {
|
||||||
/* Not found.
|
/* Not found.
|
||||||
* Or it has already been overridden, so you've lost your place.
|
* Or it has already been overridden, so you've lost your place.
|
||||||
* Or it is a simple substitute.
|
* Or it is a simple substitute.
|
||||||
* We need to find a free available slot */
|
* We need to find a free available slot */
|
||||||
type = this->AddEntityID(spec->grf_prop.local_id, spec->grf_prop.grfid, OBJECT_TRANSMITTER);
|
type = this->AddEntityID(spec.grf_prop.local_id, spec.grf_prop.grfid, OBJECT_TRANSMITTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == this->invalid_id) {
|
if (type == this->invalid_id) {
|
||||||
|
@ -322,7 +322,7 @@ void ObjectOverrideManager::SetEntitySpec(ObjectSpec *spec)
|
||||||
|
|
||||||
/* Now that we know we can use the given id, copy the spec to its final destination. */
|
/* Now that we know we can use the given id, copy the spec to its final destination. */
|
||||||
if (type >= _object_specs.size()) _object_specs.resize(type + 1);
|
if (type >= _object_specs.size()) _object_specs.resize(type + 1);
|
||||||
_object_specs[type] = *spec;
|
_object_specs[type] = std::move(spec);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -617,7 +617,7 @@ uint32_t NewGRFSpriteLayout::PrepareLayout(uint32_t orig_offset, uint32_t newgrf
|
||||||
* and apply the default sprite offsets (unless disabled). */
|
* and apply the default sprite offsets (unless disabled). */
|
||||||
const TileLayoutRegisters *regs = this->registers.empty() ? nullptr : this->registers.data();
|
const TileLayoutRegisters *regs = this->registers.empty() ? nullptr : this->registers.data();
|
||||||
bool ground = true;
|
bool ground = true;
|
||||||
for (DrawTileSeqStruct result : result_seq) {
|
for (DrawTileSeqStruct &result : result_seq) {
|
||||||
TileLayoutFlags flags = TLF_NOTHING;
|
TileLayoutFlags flags = TLF_NOTHING;
|
||||||
if (regs != nullptr) flags = regs->flags;
|
if (regs != nullptr) flags = regs->flags;
|
||||||
|
|
||||||
|
|
|
@ -210,7 +210,7 @@ public:
|
||||||
HouseOverrideManager(uint16_t offset, uint16_t maximum, uint16_t invalid) :
|
HouseOverrideManager(uint16_t offset, uint16_t maximum, uint16_t invalid) :
|
||||||
OverrideManagerBase(offset, maximum, invalid) {}
|
OverrideManagerBase(offset, maximum, invalid) {}
|
||||||
|
|
||||||
void SetEntitySpec(const HouseSpec *hs);
|
void SetEntitySpec(HouseSpec &&hs);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -223,7 +223,7 @@ public:
|
||||||
uint16_t AddEntityID(uint16_t grf_local_id, uint32_t grfid, uint16_t substitute_id) override;
|
uint16_t AddEntityID(uint16_t grf_local_id, uint32_t grfid, uint16_t substitute_id) override;
|
||||||
uint16_t GetID(uint16_t grf_local_id, uint32_t grfid) const override;
|
uint16_t GetID(uint16_t grf_local_id, uint32_t grfid) const override;
|
||||||
|
|
||||||
void SetEntitySpec(IndustrySpec *inds);
|
void SetEntitySpec(IndustrySpec &&inds);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -235,7 +235,7 @@ public:
|
||||||
IndustryTileOverrideManager(uint16_t offset, uint16_t maximum, uint16_t invalid) :
|
IndustryTileOverrideManager(uint16_t offset, uint16_t maximum, uint16_t invalid) :
|
||||||
OverrideManagerBase(offset, maximum, invalid) {}
|
OverrideManagerBase(offset, maximum, invalid) {}
|
||||||
|
|
||||||
void SetEntitySpec(const IndustryTileSpec *indts);
|
void SetEntitySpec(IndustryTileSpec &&indts);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct AirportSpec;
|
struct AirportSpec;
|
||||||
|
@ -244,7 +244,7 @@ public:
|
||||||
AirportOverrideManager(uint16_t offset, uint16_t maximum, uint16_t invalid) :
|
AirportOverrideManager(uint16_t offset, uint16_t maximum, uint16_t invalid) :
|
||||||
OverrideManagerBase(offset, maximum, invalid) {}
|
OverrideManagerBase(offset, maximum, invalid) {}
|
||||||
|
|
||||||
void SetEntitySpec(AirportSpec *inds);
|
void SetEntitySpec(AirportSpec &&inds);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct AirportTileSpec;
|
struct AirportTileSpec;
|
||||||
|
@ -255,7 +255,7 @@ public:
|
||||||
AirportTileOverrideManager(uint16_t offset, uint16_t maximum, uint16_t invalid) :
|
AirportTileOverrideManager(uint16_t offset, uint16_t maximum, uint16_t invalid) :
|
||||||
OverrideManagerBase(offset, maximum, invalid) {}
|
OverrideManagerBase(offset, maximum, invalid) {}
|
||||||
|
|
||||||
void SetEntitySpec(const AirportTileSpec *ats);
|
void SetEntitySpec(AirportTileSpec &&ats);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ObjectSpec;
|
struct ObjectSpec;
|
||||||
|
@ -266,7 +266,7 @@ public:
|
||||||
ObjectOverrideManager(uint16_t offset, uint16_t maximum, uint16_t invalid) :
|
ObjectOverrideManager(uint16_t offset, uint16_t maximum, uint16_t invalid) :
|
||||||
OverrideManagerBase(offset, maximum, invalid) {}
|
OverrideManagerBase(offset, maximum, invalid) {}
|
||||||
|
|
||||||
void SetEntitySpec(ObjectSpec *spec);
|
void SetEntitySpec(ObjectSpec &&spec);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern HouseOverrideManager _house_mngr;
|
extern HouseOverrideManager _house_mngr;
|
||||||
|
|
|
@ -628,12 +628,20 @@ bool CanDeleteHouse(TileIndex tile)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void AnimationControl(TileIndex tile, uint16_t random_bits)
|
/**
|
||||||
|
* Call the tile loop animation trigger for houses, if enabled.
|
||||||
|
* @param tile House tile
|
||||||
|
* @param sync Whether to call the synchronized or the unsynchronized trigger.
|
||||||
|
* @param random_bits Shared random bits for the synchronized trigger.
|
||||||
|
*/
|
||||||
|
static void AnimationControl(TileIndex tile, bool sync, uint16_t random_bits)
|
||||||
{
|
{
|
||||||
const HouseSpec *hs = HouseSpec::Get(GetHouseType(tile));
|
const HouseSpec *hs = HouseSpec::Get(GetHouseType(tile));
|
||||||
|
|
||||||
if (hs->callback_mask.Test(HouseCallbackMask::AnimationStartStop)) {
|
/* Check whether the matching trigger is enabled */
|
||||||
uint32_t param = hs->extra_flags.Test(HouseExtraFlag::SynchronisedCallback1B) ? (GB(Random(), 0, 16) | random_bits << 16) : Random();
|
if (hs->callback_mask.Test(HouseCallbackMask::AnimationStartStop) &&
|
||||||
|
hs->extra_flags.Test(HouseExtraFlag::SynchronisedCallback1B) == sync) {
|
||||||
|
uint32_t param = sync ? (GB(Random(), 0, 16) | random_bits << 16) : Random();
|
||||||
HouseAnimationBase::ChangeAnimationFrame(CBID_HOUSE_ANIMATION_START_STOP, hs, Town::GetByTile(tile), tile, param, 0);
|
HouseAnimationBase::ChangeAnimationFrame(CBID_HOUSE_ANIMATION_START_STOP, hs, Town::GetByTile(tile), tile, param, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -650,21 +658,16 @@ bool NewHouseTileLoop(TileIndex tile)
|
||||||
TriggerHouse(tile, HOUSE_TRIGGER_TILE_LOOP);
|
TriggerHouse(tile, HOUSE_TRIGGER_TILE_LOOP);
|
||||||
if (hs->building_flags.Any(BUILDING_HAS_1_TILE)) TriggerHouse(tile, HOUSE_TRIGGER_TILE_LOOP_TOP);
|
if (hs->building_flags.Any(BUILDING_HAS_1_TILE)) TriggerHouse(tile, HOUSE_TRIGGER_TILE_LOOP_TOP);
|
||||||
|
|
||||||
if (hs->callback_mask.Test(HouseCallbackMask::AnimationStartStop)) {
|
/* Call the unsynchronized tile loop trigger */
|
||||||
/* If this house is marked as having a synchronised callback, all the
|
AnimationControl(tile, false, 0);
|
||||||
* tiles will have the callback called at once, rather than when the
|
|
||||||
* tile loop reaches them. This should only be enabled for the northern
|
|
||||||
* tile, or strange things will happen (here, and in TTDPatch). */
|
|
||||||
if (hs->extra_flags.Test(HouseExtraFlag::SynchronisedCallback1B)) {
|
|
||||||
uint16_t random = GB(Random(), 0, 16);
|
|
||||||
|
|
||||||
if (hs->building_flags.Any(BUILDING_HAS_1_TILE)) AnimationControl(tile, random);
|
/* Call the synchronized tile loop trigger, if this is the north tile */
|
||||||
if (hs->building_flags.Any(BUILDING_2_TILES_Y)) AnimationControl(TileAddXY(tile, 0, 1), random);
|
if (hs->building_flags.Any(BUILDING_HAS_1_TILE)) {
|
||||||
if (hs->building_flags.Any(BUILDING_2_TILES_X)) AnimationControl(TileAddXY(tile, 1, 0), random);
|
uint16_t random = GB(Random(), 0, 16);
|
||||||
if (hs->building_flags.Any(BUILDING_HAS_4_TILES)) AnimationControl(TileAddXY(tile, 1, 1), random);
|
AnimationControl(tile, true, random);
|
||||||
} else {
|
if (hs->building_flags.Any(BUILDING_2_TILES_Y)) AnimationControl(TileAddXY(tile, 0, 1), true, random);
|
||||||
AnimationControl(tile, 0);
|
if (hs->building_flags.Any(BUILDING_2_TILES_X)) AnimationControl(TileAddXY(tile, 1, 0), true, random);
|
||||||
}
|
if (hs->building_flags.Any(BUILDING_HAS_4_TILES)) AnimationControl(TileAddXY(tile, 1, 1), true, random);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check callback 21, which determines if a house should be destroyed. */
|
/* Check callback 21, which determines if a house should be destroyed. */
|
||||||
|
|
|
@ -889,9 +889,13 @@ enum class CargoSortType : uint8_t {
|
||||||
|
|
||||||
class CargoSorter {
|
class CargoSorter {
|
||||||
public:
|
public:
|
||||||
|
using is_transparent = void;
|
||||||
CargoSorter(CargoSortType t = CargoSortType::StationID, SortOrder o = SO_ASCENDING) : type(t), order(o) {}
|
CargoSorter(CargoSortType t = CargoSortType::StationID, SortOrder o = SO_ASCENDING) : type(t), order(o) {}
|
||||||
CargoSortType GetSortType() {return this->type;}
|
CargoSortType GetSortType() {return this->type;}
|
||||||
bool operator()(const CargoDataEntry *cd1, const CargoDataEntry *cd2) const;
|
bool operator()(const CargoDataEntry &cd1, const CargoDataEntry &cd2) const;
|
||||||
|
bool operator()(const CargoDataEntry &cd1, const std::unique_ptr<CargoDataEntry> &cd2) const { return this->operator()(cd1, *cd2); }
|
||||||
|
bool operator()(const std::unique_ptr<CargoDataEntry> &cd1, const CargoDataEntry &cd2) const { return this->operator()(*cd1, cd2); }
|
||||||
|
bool operator()(const std::unique_ptr<CargoDataEntry> &cd1, const std::unique_ptr<CargoDataEntry> &cd2) const { return this->operator()(*cd1, *cd2); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CargoSortType type;
|
CargoSortType type;
|
||||||
|
@ -899,11 +903,11 @@ private:
|
||||||
|
|
||||||
template <class Tid>
|
template <class Tid>
|
||||||
bool SortId(Tid st1, Tid st2) const;
|
bool SortId(Tid st1, Tid st2) const;
|
||||||
bool SortCount(const CargoDataEntry *cd1, const CargoDataEntry *cd2) const;
|
bool SortCount(const CargoDataEntry &cd1, const CargoDataEntry &cd2) const;
|
||||||
bool SortStation (StationID st1, StationID st2) const;
|
bool SortStation(StationID st1, StationID st2) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::set<CargoDataEntry *, CargoSorter> CargoDataSet;
|
typedef std::set<std::unique_ptr<CargoDataEntry>, CargoSorter> CargoDataSet;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A cargo data entry representing one possible row in the station view window's
|
* A cargo data entry representing one possible row in the station view window's
|
||||||
|
@ -920,7 +924,7 @@ public:
|
||||||
* @param station ID of the station for which an entry shall be created or retrieved
|
* @param station ID of the station for which an entry shall be created or retrieved
|
||||||
* @return a child entry associated with the given station.
|
* @return a child entry associated with the given station.
|
||||||
*/
|
*/
|
||||||
CargoDataEntry *InsertOrRetrieve(StationID station)
|
CargoDataEntry &InsertOrRetrieve(StationID station)
|
||||||
{
|
{
|
||||||
return this->InsertOrRetrieve<StationID>(station);
|
return this->InsertOrRetrieve<StationID>(station);
|
||||||
}
|
}
|
||||||
|
@ -930,7 +934,7 @@ public:
|
||||||
* @param cargo type of the cargo for which an entry shall be created or retrieved
|
* @param cargo type of the cargo for which an entry shall be created or retrieved
|
||||||
* @return a child entry associated with the given cargo.
|
* @return a child entry associated with the given cargo.
|
||||||
*/
|
*/
|
||||||
CargoDataEntry *InsertOrRetrieve(CargoType cargo)
|
CargoDataEntry &InsertOrRetrieve(CargoType cargo)
|
||||||
{
|
{
|
||||||
return this->InsertOrRetrieve<CargoType>(cargo);
|
return this->InsertOrRetrieve<CargoType>(cargo);
|
||||||
}
|
}
|
||||||
|
@ -944,7 +948,7 @@ public:
|
||||||
void Remove(StationID station)
|
void Remove(StationID station)
|
||||||
{
|
{
|
||||||
CargoDataEntry t(station);
|
CargoDataEntry t(station);
|
||||||
this->Remove(&t);
|
this->Remove(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -954,7 +958,7 @@ public:
|
||||||
void Remove(CargoType cargo)
|
void Remove(CargoType cargo)
|
||||||
{
|
{
|
||||||
CargoDataEntry t(cargo);
|
CargoDataEntry t(cargo);
|
||||||
this->Remove(&t);
|
this->Remove(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -965,7 +969,7 @@ public:
|
||||||
CargoDataEntry *Retrieve(StationID station) const
|
CargoDataEntry *Retrieve(StationID station) const
|
||||||
{
|
{
|
||||||
CargoDataEntry t(station);
|
CargoDataEntry t(station);
|
||||||
return this->Retrieve(this->children->find(&t));
|
return this->Retrieve(this->children->find(t));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -976,7 +980,7 @@ public:
|
||||||
CargoDataEntry *Retrieve(CargoType cargo) const
|
CargoDataEntry *Retrieve(CargoType cargo) const
|
||||||
{
|
{
|
||||||
CargoDataEntry t(cargo);
|
CargoDataEntry t(cargo);
|
||||||
return this->Retrieve(this->children->find(&t));
|
return this->Retrieve(this->children->find(t));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Resort(CargoSortType type, SortOrder order);
|
void Resort(CargoSortType type, SortOrder order);
|
||||||
|
@ -1027,19 +1031,19 @@ public:
|
||||||
void SetTransfers(bool value) { this->transfers = value; }
|
void SetTransfers(bool value) { this->transfers = value; }
|
||||||
|
|
||||||
void Clear();
|
void Clear();
|
||||||
private:
|
|
||||||
|
|
||||||
CargoDataEntry(StationID station, uint count, CargoDataEntry *parent);
|
CargoDataEntry(StationID station, uint count, CargoDataEntry *parent);
|
||||||
CargoDataEntry(CargoType cargo, uint count, CargoDataEntry *parent);
|
CargoDataEntry(CargoType cargo, uint count, CargoDataEntry *parent);
|
||||||
CargoDataEntry(StationID station);
|
CargoDataEntry(StationID station);
|
||||||
CargoDataEntry(CargoType cargo);
|
CargoDataEntry(CargoType cargo);
|
||||||
|
|
||||||
|
private:
|
||||||
CargoDataEntry *Retrieve(CargoDataSet::iterator i) const;
|
CargoDataEntry *Retrieve(CargoDataSet::iterator i) const;
|
||||||
|
|
||||||
template <class Tid>
|
template <class Tid>
|
||||||
CargoDataEntry *InsertOrRetrieve(Tid s);
|
CargoDataEntry &InsertOrRetrieve(Tid s);
|
||||||
|
|
||||||
void Remove(CargoDataEntry *entry);
|
void Remove(CargoDataEntry &entry);
|
||||||
void IncrementSize();
|
void IncrementSize();
|
||||||
|
|
||||||
CargoDataEntry *parent; ///< the parent of this entry.
|
CargoDataEntry *parent; ///< the parent of this entry.
|
||||||
|
@ -1052,7 +1056,7 @@ private:
|
||||||
};
|
};
|
||||||
uint num_children; ///< the number of subentries belonging to this entry.
|
uint num_children; ///< the number of subentries belonging to this entry.
|
||||||
uint count; ///< sum of counts of all children or amount of cargo for this entry.
|
uint count; ///< sum of counts of all children or amount of cargo for this entry.
|
||||||
CargoDataSet *children; ///< the children of this entry.
|
std::unique_ptr<CargoDataSet> children; ///< the children of this entry.
|
||||||
};
|
};
|
||||||
|
|
||||||
CargoDataEntry::CargoDataEntry() :
|
CargoDataEntry::CargoDataEntry() :
|
||||||
|
@ -1060,7 +1064,7 @@ CargoDataEntry::CargoDataEntry() :
|
||||||
station(StationID::Invalid()),
|
station(StationID::Invalid()),
|
||||||
num_children(0),
|
num_children(0),
|
||||||
count(0),
|
count(0),
|
||||||
children(new CargoDataSet(CargoSorter(CargoSortType::CargoType)))
|
children(std::make_unique<CargoDataSet>(CargoSorter(CargoSortType::CargoType)))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
CargoDataEntry::CargoDataEntry(CargoType cargo, uint count, CargoDataEntry *parent) :
|
CargoDataEntry::CargoDataEntry(CargoType cargo, uint count, CargoDataEntry *parent) :
|
||||||
|
@ -1068,7 +1072,7 @@ CargoDataEntry::CargoDataEntry(CargoType cargo, uint count, CargoDataEntry *pare
|
||||||
cargo(cargo),
|
cargo(cargo),
|
||||||
num_children(0),
|
num_children(0),
|
||||||
count(count),
|
count(count),
|
||||||
children(new CargoDataSet)
|
children(std::make_unique<CargoDataSet>())
|
||||||
{}
|
{}
|
||||||
|
|
||||||
CargoDataEntry::CargoDataEntry(StationID station, uint count, CargoDataEntry *parent) :
|
CargoDataEntry::CargoDataEntry(StationID station, uint count, CargoDataEntry *parent) :
|
||||||
|
@ -1076,7 +1080,7 @@ CargoDataEntry::CargoDataEntry(StationID station, uint count, CargoDataEntry *pa
|
||||||
station(station),
|
station(station),
|
||||||
num_children(0),
|
num_children(0),
|
||||||
count(count),
|
count(count),
|
||||||
children(new CargoDataSet)
|
children(std::make_unique<CargoDataSet>())
|
||||||
{}
|
{}
|
||||||
|
|
||||||
CargoDataEntry::CargoDataEntry(StationID station) :
|
CargoDataEntry::CargoDataEntry(StationID station) :
|
||||||
|
@ -1098,7 +1102,6 @@ CargoDataEntry::CargoDataEntry(CargoType cargo) :
|
||||||
CargoDataEntry::~CargoDataEntry()
|
CargoDataEntry::~CargoDataEntry()
|
||||||
{
|
{
|
||||||
this->Clear();
|
this->Clear();
|
||||||
delete this->children;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1106,13 +1109,7 @@ CargoDataEntry::~CargoDataEntry()
|
||||||
*/
|
*/
|
||||||
void CargoDataEntry::Clear()
|
void CargoDataEntry::Clear()
|
||||||
{
|
{
|
||||||
if (this->children != nullptr) {
|
if (this->children != nullptr) this->children->clear();
|
||||||
for (auto &it : *this->children) {
|
|
||||||
assert(it != this);
|
|
||||||
delete it;
|
|
||||||
}
|
|
||||||
this->children->clear();
|
|
||||||
}
|
|
||||||
if (this->parent != nullptr) this->parent->count -= this->count;
|
if (this->parent != nullptr) this->parent->count -= this->count;
|
||||||
this->count = 0;
|
this->count = 0;
|
||||||
this->num_children = 0;
|
this->num_children = 0;
|
||||||
|
@ -1124,13 +1121,10 @@ void CargoDataEntry::Clear()
|
||||||
* which only contains the ID of the entry to be removed. In this case child is
|
* which only contains the ID of the entry to be removed. In this case child is
|
||||||
* not deleted.
|
* not deleted.
|
||||||
*/
|
*/
|
||||||
void CargoDataEntry::Remove(CargoDataEntry *entry)
|
void CargoDataEntry::Remove(CargoDataEntry &entry)
|
||||||
{
|
{
|
||||||
CargoDataSet::iterator i = this->children->find(entry);
|
CargoDataSet::iterator i = this->children->find(entry);
|
||||||
if (i != this->children->end()) {
|
if (i != this->children->end()) this->children->erase(i);
|
||||||
delete *i;
|
|
||||||
this->children->erase(i);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1140,17 +1134,16 @@ void CargoDataEntry::Remove(CargoDataEntry *entry)
|
||||||
* @return the new or retrieved subentry
|
* @return the new or retrieved subentry
|
||||||
*/
|
*/
|
||||||
template <class Tid>
|
template <class Tid>
|
||||||
CargoDataEntry *CargoDataEntry::InsertOrRetrieve(Tid child_id)
|
CargoDataEntry &CargoDataEntry::InsertOrRetrieve(Tid child_id)
|
||||||
{
|
{
|
||||||
CargoDataEntry tmp(child_id);
|
CargoDataEntry tmp(child_id);
|
||||||
CargoDataSet::iterator i = this->children->find(&tmp);
|
CargoDataSet::iterator i = this->children->find(tmp);
|
||||||
if (i == this->children->end()) {
|
if (i == this->children->end()) {
|
||||||
IncrementSize();
|
IncrementSize();
|
||||||
return *(this->children->insert(new CargoDataEntry(child_id, 0, this)).first);
|
return **(this->children->insert(std::make_unique<CargoDataEntry>(child_id, 0, this)).first);
|
||||||
} else {
|
} else {
|
||||||
CargoDataEntry *ret = *i;
|
|
||||||
assert(this->children->value_comp().GetSortType() != CargoSortType::Count);
|
assert(this->children->value_comp().GetSortType() != CargoSortType::Count);
|
||||||
return ret;
|
return **i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1176,9 +1169,9 @@ void CargoDataEntry::IncrementSize()
|
||||||
|
|
||||||
void CargoDataEntry::Resort(CargoSortType type, SortOrder order)
|
void CargoDataEntry::Resort(CargoSortType type, SortOrder order)
|
||||||
{
|
{
|
||||||
CargoDataSet *new_subs = new CargoDataSet(this->children->begin(), this->children->end(), CargoSorter(type, order));
|
auto new_children = std::make_unique<CargoDataSet>(CargoSorter(type, order));
|
||||||
delete this->children;
|
new_children->merge(*this->children);
|
||||||
this->children = new_subs;
|
this->children = std::move(new_children);
|
||||||
}
|
}
|
||||||
|
|
||||||
CargoDataEntry *CargoDataEntry::Retrieve(CargoDataSet::iterator i) const
|
CargoDataEntry *CargoDataEntry::Retrieve(CargoDataSet::iterator i) const
|
||||||
|
@ -1187,21 +1180,21 @@ CargoDataEntry *CargoDataEntry::Retrieve(CargoDataSet::iterator i) const
|
||||||
return nullptr;
|
return nullptr;
|
||||||
} else {
|
} else {
|
||||||
assert(this->children->value_comp().GetSortType() != CargoSortType::Count);
|
assert(this->children->value_comp().GetSortType() != CargoSortType::Count);
|
||||||
return *i;
|
return i->get();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CargoSorter::operator()(const CargoDataEntry *cd1, const CargoDataEntry *cd2) const
|
bool CargoSorter::operator()(const CargoDataEntry &cd1, const CargoDataEntry &cd2) const
|
||||||
{
|
{
|
||||||
switch (this->type) {
|
switch (this->type) {
|
||||||
case CargoSortType::StationID:
|
case CargoSortType::StationID:
|
||||||
return this->SortId<StationID>(cd1->GetStation(), cd2->GetStation());
|
return this->SortId<StationID>(cd1.GetStation(), cd2.GetStation());
|
||||||
case CargoSortType::CargoType:
|
case CargoSortType::CargoType:
|
||||||
return this->SortId<CargoType>(cd1->GetCargo(), cd2->GetCargo());
|
return this->SortId<CargoType>(cd1.GetCargo(), cd2.GetCargo());
|
||||||
case CargoSortType::Count:
|
case CargoSortType::Count:
|
||||||
return this->SortCount(cd1, cd2);
|
return this->SortCount(cd1, cd2);
|
||||||
case CargoSortType::StationString:
|
case CargoSortType::StationString:
|
||||||
return this->SortStation(cd1->GetStation(), cd2->GetStation());
|
return this->SortStation(cd1.GetStation(), cd2.GetStation());
|
||||||
default:
|
default:
|
||||||
NOT_REACHED();
|
NOT_REACHED();
|
||||||
}
|
}
|
||||||
|
@ -1213,12 +1206,12 @@ bool CargoSorter::SortId(Tid st1, Tid st2) const
|
||||||
return (this->order == SO_ASCENDING) ? st1 < st2 : st2 < st1;
|
return (this->order == SO_ASCENDING) ? st1 < st2 : st2 < st1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CargoSorter::SortCount(const CargoDataEntry *cd1, const CargoDataEntry *cd2) const
|
bool CargoSorter::SortCount(const CargoDataEntry &cd1, const CargoDataEntry &cd2) const
|
||||||
{
|
{
|
||||||
uint c1 = cd1->GetCount();
|
uint c1 = cd1.GetCount();
|
||||||
uint c2 = cd2->GetCount();
|
uint c2 = cd2.GetCount();
|
||||||
if (c1 == c2) {
|
if (c1 == c2) {
|
||||||
return this->SortStation(cd1->GetStation(), cd2->GetStation());
|
return this->SortStation(cd1.GetStation(), cd2.GetStation());
|
||||||
} else if (this->order == SO_ASCENDING) {
|
} else if (this->order == SO_ASCENDING) {
|
||||||
return c1 < c2;
|
return c1 < c2;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1392,25 +1385,25 @@ struct StationViewWindow : public Window {
|
||||||
switch (groupings[i]) {
|
switch (groupings[i]) {
|
||||||
case GR_CARGO:
|
case GR_CARGO:
|
||||||
assert(i == 0);
|
assert(i == 0);
|
||||||
data = data->InsertOrRetrieve(cargo);
|
data = &data->InsertOrRetrieve(cargo);
|
||||||
data->SetTransfers(source != this->window_number);
|
data->SetTransfers(source != this->window_number);
|
||||||
expand = expand->Retrieve(cargo);
|
expand = expand->Retrieve(cargo);
|
||||||
break;
|
break;
|
||||||
case GR_SOURCE:
|
case GR_SOURCE:
|
||||||
if (auto_distributed || source != this->window_number) {
|
if (auto_distributed || source != this->window_number) {
|
||||||
data = data->InsertOrRetrieve(source);
|
data = &data->InsertOrRetrieve(source);
|
||||||
expand = expand->Retrieve(source);
|
expand = expand->Retrieve(source);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GR_NEXT:
|
case GR_NEXT:
|
||||||
if (auto_distributed) {
|
if (auto_distributed) {
|
||||||
data = data->InsertOrRetrieve(next);
|
data = &data->InsertOrRetrieve(next);
|
||||||
expand = expand->Retrieve(next);
|
expand = expand->Retrieve(next);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GR_DESTINATION:
|
case GR_DESTINATION:
|
||||||
if (auto_distributed) {
|
if (auto_distributed) {
|
||||||
data = data->InsertOrRetrieve(dest);
|
data = &data->InsertOrRetrieve(dest);
|
||||||
expand = expand->Retrieve(dest);
|
expand = expand->Retrieve(dest);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1498,7 +1491,7 @@ struct StationViewWindow : public Window {
|
||||||
/* Draw waiting cargo. */
|
/* Draw waiting cargo. */
|
||||||
NWidgetBase *nwi = this->GetWidget<NWidgetBase>(WID_SV_WAITING);
|
NWidgetBase *nwi = this->GetWidget<NWidgetBase>(WID_SV_WAITING);
|
||||||
Rect waiting_rect = nwi->GetCurrentRect().Shrink(WidgetDimensions::scaled.framerect);
|
Rect waiting_rect = nwi->GetCurrentRect().Shrink(WidgetDimensions::scaled.framerect);
|
||||||
this->DrawEntries(&cargo, waiting_rect, pos, maxrows, 0);
|
this->DrawEntries(cargo, waiting_rect, pos, maxrows, 0);
|
||||||
scroll_to_row = INT_MAX;
|
scroll_to_row = INT_MAX;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1521,20 +1514,20 @@ struct StationViewWindow : public Window {
|
||||||
void RecalcDestinations(CargoType cargo)
|
void RecalcDestinations(CargoType cargo)
|
||||||
{
|
{
|
||||||
const Station *st = Station::Get(this->window_number);
|
const Station *st = Station::Get(this->window_number);
|
||||||
CargoDataEntry *entry = cached_destinations.InsertOrRetrieve(cargo);
|
CargoDataEntry &entry = cached_destinations.InsertOrRetrieve(cargo);
|
||||||
entry->Clear();
|
entry.Clear();
|
||||||
|
|
||||||
if (!st->goods[cargo].HasData()) return;
|
if (!st->goods[cargo].HasData()) return;
|
||||||
|
|
||||||
for (const auto &it : st->goods[cargo].GetData().flows) {
|
for (const auto &it : st->goods[cargo].GetData().flows) {
|
||||||
StationID from = it.first;
|
StationID from = it.first;
|
||||||
CargoDataEntry *source_entry = entry->InsertOrRetrieve(from);
|
CargoDataEntry &source_entry = entry.InsertOrRetrieve(from);
|
||||||
uint32_t prev_count = 0;
|
uint32_t prev_count = 0;
|
||||||
for (const auto &flow_it : *it.second.GetShares()) {
|
for (const auto &flow_it : *it.second.GetShares()) {
|
||||||
StationID via = flow_it.second;
|
StationID via = flow_it.second;
|
||||||
CargoDataEntry *via_entry = source_entry->InsertOrRetrieve(via);
|
CargoDataEntry &via_entry = source_entry.InsertOrRetrieve(via);
|
||||||
if (via == this->window_number) {
|
if (via == this->window_number) {
|
||||||
via_entry->InsertOrRetrieve(via)->Update(flow_it.first - prev_count);
|
via_entry.InsertOrRetrieve(via).Update(flow_it.first - prev_count);
|
||||||
} else {
|
} else {
|
||||||
EstimateDestinations(cargo, from, via, flow_it.first - prev_count, via_entry);
|
EstimateDestinations(cargo, from, via, flow_it.first - prev_count, via_entry);
|
||||||
}
|
}
|
||||||
|
@ -1552,7 +1545,7 @@ struct StationViewWindow : public Window {
|
||||||
* @param count Size of the batch of cargo.
|
* @param count Size of the batch of cargo.
|
||||||
* @param dest CargoDataEntry to save the results in.
|
* @param dest CargoDataEntry to save the results in.
|
||||||
*/
|
*/
|
||||||
void EstimateDestinations(CargoType cargo, StationID source, StationID next, uint count, CargoDataEntry *dest)
|
void EstimateDestinations(CargoType cargo, StationID source, StationID next, uint count, CargoDataEntry &dest)
|
||||||
{
|
{
|
||||||
if (Station::IsValidID(next) && Station::IsValidID(source)) {
|
if (Station::IsValidID(next) && Station::IsValidID(source)) {
|
||||||
GoodsEntry &ge = Station::Get(next)->goods[cargo];
|
GoodsEntry &ge = Station::Get(next)->goods[cargo];
|
||||||
|
@ -1565,19 +1558,19 @@ struct StationViewWindow : public Window {
|
||||||
const FlowStat::SharesMap *shares = map_it->second.GetShares();
|
const FlowStat::SharesMap *shares = map_it->second.GetShares();
|
||||||
uint32_t prev_count = 0;
|
uint32_t prev_count = 0;
|
||||||
for (FlowStat::SharesMap::const_iterator i = shares->begin(); i != shares->end(); ++i) {
|
for (FlowStat::SharesMap::const_iterator i = shares->begin(); i != shares->end(); ++i) {
|
||||||
tmp.InsertOrRetrieve(i->second)->Update(i->first - prev_count);
|
tmp.InsertOrRetrieve(i->second).Update(i->first - prev_count);
|
||||||
prev_count = i->first;
|
prev_count = i->first;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tmp.GetCount() == 0) {
|
if (tmp.GetCount() == 0) {
|
||||||
dest->InsertOrRetrieve(StationID::Invalid())->Update(count);
|
dest.InsertOrRetrieve(StationID::Invalid()).Update(count);
|
||||||
} else {
|
} else {
|
||||||
uint sum_estimated = 0;
|
uint sum_estimated = 0;
|
||||||
while (sum_estimated < count) {
|
while (sum_estimated < count) {
|
||||||
for (CargoDataSet::iterator i = tmp.Begin(); i != tmp.End() && sum_estimated < count; ++i) {
|
for (CargoDataSet::iterator i = tmp.Begin(); i != tmp.End() && sum_estimated < count; ++i) {
|
||||||
CargoDataEntry *child = *i;
|
CargoDataEntry &child = **i;
|
||||||
uint estimate = DivideApprox(child->GetCount() * count, tmp.GetCount());
|
uint estimate = DivideApprox(child.GetCount() * count, tmp.GetCount());
|
||||||
if (estimate == 0) estimate = 1;
|
if (estimate == 0) estimate = 1;
|
||||||
|
|
||||||
sum_estimated += estimate;
|
sum_estimated += estimate;
|
||||||
|
@ -1587,10 +1580,10 @@ struct StationViewWindow : public Window {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (estimate > 0) {
|
if (estimate > 0) {
|
||||||
if (child->GetStation() == next) {
|
if (child.GetStation() == next) {
|
||||||
dest->InsertOrRetrieve(next)->Update(estimate);
|
dest.InsertOrRetrieve(next).Update(estimate);
|
||||||
} else {
|
} else {
|
||||||
EstimateDestinations(cargo, source, child->GetStation(), estimate, dest);
|
EstimateDestinations(cargo, source, child.GetStation(), estimate, dest);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1598,7 +1591,7 @@ struct StationViewWindow : public Window {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
dest->InsertOrRetrieve(StationID::Invalid())->Update(count);
|
dest.InsertOrRetrieve(StationID::Invalid()).Update(count);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1618,8 +1611,8 @@ struct StationViewWindow : public Window {
|
||||||
for (FlowStat::SharesMap::const_iterator flow_it = shares->begin(); flow_it != shares->end(); ++flow_it) {
|
for (FlowStat::SharesMap::const_iterator flow_it = shares->begin(); flow_it != shares->end(); ++flow_it) {
|
||||||
const CargoDataEntry *via_entry = source_entry->Retrieve(flow_it->second);
|
const CargoDataEntry *via_entry = source_entry->Retrieve(flow_it->second);
|
||||||
for (CargoDataSet::iterator dest_it = via_entry->Begin(); dest_it != via_entry->End(); ++dest_it) {
|
for (CargoDataSet::iterator dest_it = via_entry->Begin(); dest_it != via_entry->End(); ++dest_it) {
|
||||||
CargoDataEntry *dest_entry = *dest_it;
|
CargoDataEntry &dest_entry = **dest_it;
|
||||||
ShowCargo(entry, cargo, from, flow_it->second, dest_entry->GetStation(), dest_entry->GetCount());
|
ShowCargo(entry, cargo, from, flow_it->second, dest_entry.GetStation(), dest_entry.GetCount());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1652,7 +1645,7 @@ struct StationViewWindow : public Window {
|
||||||
|
|
||||||
uint remaining = cp->Count();
|
uint remaining = cp->Count();
|
||||||
for (CargoDataSet::iterator dest_it = via_entry->Begin(); dest_it != via_entry->End();) {
|
for (CargoDataSet::iterator dest_it = via_entry->Begin(); dest_it != via_entry->End();) {
|
||||||
CargoDataEntry *dest_entry = *dest_it;
|
CargoDataEntry &dest_entry = **dest_it;
|
||||||
|
|
||||||
/* Advance iterator here instead of in the for statement to test whether this is the last entry */
|
/* Advance iterator here instead of in the for statement to test whether this is the last entry */
|
||||||
++dest_it;
|
++dest_it;
|
||||||
|
@ -1664,10 +1657,10 @@ struct StationViewWindow : public Window {
|
||||||
* not matching GoodsEntry::TotalCount() */
|
* not matching GoodsEntry::TotalCount() */
|
||||||
val = remaining;
|
val = remaining;
|
||||||
} else {
|
} else {
|
||||||
val = std::min<uint>(remaining, DivideApprox(cp->Count() * dest_entry->GetCount(), via_entry->GetCount()));
|
val = std::min<uint>(remaining, DivideApprox(cp->Count() * dest_entry.GetCount(), via_entry->GetCount()));
|
||||||
remaining -= val;
|
remaining -= val;
|
||||||
}
|
}
|
||||||
this->ShowCargo(entry, cargo, cp->GetFirstStation(), next, dest_entry->GetStation(), val);
|
this->ShowCargo(entry, cargo, cp->GetFirstStation(), next, dest_entry.GetStation(), val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this->ShowCargo(entry, cargo, NEW_STATION, NEW_STATION, NEW_STATION, packets.ReservedCount());
|
this->ShowCargo(entry, cargo, NEW_STATION, NEW_STATION, NEW_STATION, packets.ReservedCount());
|
||||||
|
@ -1701,16 +1694,16 @@ struct StationViewWindow : public Window {
|
||||||
* Mark a specific row, characterized by its CargoDataEntry, as expanded.
|
* Mark a specific row, characterized by its CargoDataEntry, as expanded.
|
||||||
* @param entry The row to be marked as expanded.
|
* @param entry The row to be marked as expanded.
|
||||||
*/
|
*/
|
||||||
void SetDisplayedRow(const CargoDataEntry *entry)
|
void SetDisplayedRow(const CargoDataEntry &entry)
|
||||||
{
|
{
|
||||||
std::list<StationID> stations;
|
std::list<StationID> stations;
|
||||||
const CargoDataEntry *parent = entry->GetParent();
|
const CargoDataEntry *parent = entry.GetParent();
|
||||||
if (parent->GetParent() == nullptr) {
|
if (parent->GetParent() == nullptr) {
|
||||||
this->displayed_rows.push_back(RowDisplay(&this->expanded_rows, entry->GetCargo()));
|
this->displayed_rows.push_back(RowDisplay(&this->expanded_rows, entry.GetCargo()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
StationID next = entry->GetStation();
|
StationID next = entry.GetStation();
|
||||||
while (parent->GetParent()->GetParent() != nullptr) {
|
while (parent->GetParent()->GetParent() != nullptr) {
|
||||||
stations.push_back(parent->GetStation());
|
stations.push_back(parent->GetStation());
|
||||||
parent = parent->GetParent();
|
parent = parent->GetParent();
|
||||||
|
@ -1764,9 +1757,9 @@ struct StationViewWindow : public Window {
|
||||||
* @param column The "column" the entry will be shown in.
|
* @param column The "column" the entry will be shown in.
|
||||||
* @return either STR_STATION_VIEW_VIA or STR_STATION_VIEW_NONSTOP.
|
* @return either STR_STATION_VIEW_VIA or STR_STATION_VIEW_NONSTOP.
|
||||||
*/
|
*/
|
||||||
StringID SearchNonStop(CargoDataEntry *cd, StationID station, int column)
|
StringID SearchNonStop(CargoDataEntry &cd, StationID station, int column)
|
||||||
{
|
{
|
||||||
CargoDataEntry *parent = cd->GetParent();
|
CargoDataEntry *parent = cd.GetParent();
|
||||||
for (int i = column - 1; i > 0; --i) {
|
for (int i = column - 1; i > 0; --i) {
|
||||||
if (this->groupings[i] == GR_DESTINATION) {
|
if (this->groupings[i] == GR_DESTINATION) {
|
||||||
if (parent->GetStation() == station) {
|
if (parent->GetStation() == station) {
|
||||||
|
@ -1779,9 +1772,9 @@ struct StationViewWindow : public Window {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->groupings[column + 1] == GR_DESTINATION) {
|
if (this->groupings[column + 1] == GR_DESTINATION) {
|
||||||
CargoDataSet::iterator begin = cd->Begin();
|
CargoDataSet::iterator begin = cd.Begin();
|
||||||
CargoDataSet::iterator end = cd->End();
|
CargoDataSet::iterator end = cd.End();
|
||||||
if (begin != end && ++(cd->Begin()) == end && (*(begin))->GetStation() == station) {
|
if (begin != end && ++(cd.Begin()) == end && (*(begin))->GetStation() == station) {
|
||||||
return STR_STATION_VIEW_NONSTOP;
|
return STR_STATION_VIEW_NONSTOP;
|
||||||
} else {
|
} else {
|
||||||
return STR_STATION_VIEW_VIA;
|
return STR_STATION_VIEW_VIA;
|
||||||
|
@ -1801,20 +1794,20 @@ struct StationViewWindow : public Window {
|
||||||
* @param cargo Current cargo being drawn (if cargo column has been passed).
|
* @param cargo Current cargo being drawn (if cargo column has been passed).
|
||||||
* @return row (in "pos" counting) after the one we have last drawn to.
|
* @return row (in "pos" counting) after the one we have last drawn to.
|
||||||
*/
|
*/
|
||||||
int DrawEntries(CargoDataEntry *entry, const Rect &r, int pos, int maxrows, int column, CargoType cargo = INVALID_CARGO)
|
int DrawEntries(CargoDataEntry &entry, const Rect &r, int pos, int maxrows, int column, CargoType cargo = INVALID_CARGO)
|
||||||
{
|
{
|
||||||
if (this->sortings[column] == CargoSortType::AsGrouping) {
|
if (this->sortings[column] == CargoSortType::AsGrouping) {
|
||||||
if (this->groupings[column] != GR_CARGO) {
|
if (this->groupings[column] != GR_CARGO) {
|
||||||
entry->Resort(CargoSortType::StationString, this->sort_orders[column]);
|
entry.Resort(CargoSortType::StationString, this->sort_orders[column]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
entry->Resort(CargoSortType::Count, this->sort_orders[column]);
|
entry.Resort(CargoSortType::Count, this->sort_orders[column]);
|
||||||
}
|
}
|
||||||
for (CargoDataSet::iterator i = entry->Begin(); i != entry->End(); ++i) {
|
for (CargoDataSet::iterator i = entry.Begin(); i != entry.End(); ++i) {
|
||||||
CargoDataEntry *cd = *i;
|
CargoDataEntry &cd = **i;
|
||||||
|
|
||||||
Grouping grouping = this->groupings[column];
|
Grouping grouping = this->groupings[column];
|
||||||
if (grouping == GR_CARGO) cargo = cd->GetCargo();
|
if (grouping == GR_CARGO) cargo = cd.GetCargo();
|
||||||
bool auto_distributed = _settings_game.linkgraph.GetDistributionType(cargo) != DT_MANUAL;
|
bool auto_distributed = _settings_game.linkgraph.GetDistributionType(cargo) != DT_MANUAL;
|
||||||
|
|
||||||
if (pos > -maxrows && pos <= 0) {
|
if (pos > -maxrows && pos <= 0) {
|
||||||
|
@ -1823,10 +1816,10 @@ struct StationViewWindow : public Window {
|
||||||
int y = r.top - pos * GetCharacterHeight(FS_NORMAL);
|
int y = r.top - pos * GetCharacterHeight(FS_NORMAL);
|
||||||
if (this->groupings[column] == GR_CARGO) {
|
if (this->groupings[column] == GR_CARGO) {
|
||||||
str = STR_STATION_VIEW_WAITING_CARGO;
|
str = STR_STATION_VIEW_WAITING_CARGO;
|
||||||
DrawCargoIcons(cd->GetCargo(), cd->GetCount(), r.left + this->expand_shrink_width, r.right - this->expand_shrink_width, y);
|
DrawCargoIcons(cd.GetCargo(), cd.GetCount(), r.left + this->expand_shrink_width, r.right - this->expand_shrink_width, y);
|
||||||
} else {
|
} else {
|
||||||
if (!auto_distributed) grouping = GR_SOURCE;
|
if (!auto_distributed) grouping = GR_SOURCE;
|
||||||
station = cd->GetStation();
|
station = cd.GetStation();
|
||||||
str = this->GetGroupingString(grouping, station);
|
str = this->GetGroupingString(grouping, station);
|
||||||
if (grouping == GR_NEXT && str == STR_STATION_VIEW_VIA) str = this->SearchNonStop(cd, station, column);
|
if (grouping == GR_NEXT && str == STR_STATION_VIEW_VIA) str = this->SearchNonStop(cd, station, column);
|
||||||
|
|
||||||
|
@ -1839,11 +1832,11 @@ struct StationViewWindow : public Window {
|
||||||
Rect text = r.Indent(column * WidgetDimensions::scaled.hsep_indent, rtl).Indent(this->expand_shrink_width, !rtl);
|
Rect text = r.Indent(column * WidgetDimensions::scaled.hsep_indent, rtl).Indent(this->expand_shrink_width, !rtl);
|
||||||
Rect shrink = r.WithWidth(this->expand_shrink_width, !rtl);
|
Rect shrink = r.WithWidth(this->expand_shrink_width, !rtl);
|
||||||
|
|
||||||
DrawString(text.left, text.right, y, GetString(str, cargo, cd->GetCount(), station));
|
DrawString(text.left, text.right, y, GetString(str, cargo, cd.GetCount(), station));
|
||||||
|
|
||||||
if (column < NUM_COLUMNS - 1) {
|
if (column < NUM_COLUMNS - 1) {
|
||||||
const char *sym = nullptr;
|
const char *sym = nullptr;
|
||||||
if (cd->GetNumChildren() > 0) {
|
if (cd.GetNumChildren() > 0) {
|
||||||
sym = "-";
|
sym = "-";
|
||||||
} else if (auto_distributed && str != STR_STATION_VIEW_RESERVED) {
|
} else if (auto_distributed && str != STR_STATION_VIEW_RESERVED) {
|
||||||
sym = "+";
|
sym = "+";
|
||||||
|
@ -1852,7 +1845,7 @@ struct StationViewWindow : public Window {
|
||||||
const GoodsEntry &ge = Station::Get(this->window_number)->goods[cargo];
|
const GoodsEntry &ge = Station::Get(this->window_number)->goods[cargo];
|
||||||
if (ge.HasData()) {
|
if (ge.HasData()) {
|
||||||
const StationCargoList &cargo_list = ge.GetData().cargo;
|
const StationCargoList &cargo_list = ge.GetData().cargo;
|
||||||
if (grouping == GR_CARGO && (cargo_list.ReservedCount() > 0 || cd->HasTransfers())) {
|
if (grouping == GR_CARGO && (cargo_list.ReservedCount() > 0 || cd.HasTransfers())) {
|
||||||
sym = "+";
|
sym = "+";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1727,36 +1727,37 @@ static const char * const _name_czech_patmod[][3] = {
|
||||||
|
|
||||||
/* This way the substantive can choose only some adjectives/endings:
|
/* This way the substantive can choose only some adjectives/endings:
|
||||||
* At least one of these flags must be satisfied: */
|
* At least one of these flags must be satisfied: */
|
||||||
enum CzechAllow : uint8_t {
|
enum class CzechAllowFlag : uint8_t {
|
||||||
CZA_SHORT = 1,
|
Short,
|
||||||
CZA_MIDDLE = 2,
|
Middle,
|
||||||
CZA_LONG = 4,
|
Long,
|
||||||
CZA_ALL = CZA_SHORT | CZA_MIDDLE | CZA_LONG,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
DECLARE_ENUM_AS_BIT_SET(CzechAllow)
|
using CzechAllowFlags = EnumBitSet<CzechAllowFlag, uint8_t>;
|
||||||
|
|
||||||
|
static constexpr CzechAllowFlags CZA_ALL = {CzechAllowFlag::Short, CzechAllowFlag::Middle, CzechAllowFlag::Long};
|
||||||
|
|
||||||
/* All these flags must be satisfied (in the stem->others direction): */
|
/* All these flags must be satisfied (in the stem->others direction): */
|
||||||
enum CzechChoose : uint8_t {
|
enum class CzechChooseFlag : uint8_t {
|
||||||
CZC_NONE = 0, // No requirements.
|
Colour,
|
||||||
CZC_COLOR = 1,
|
Postfix, // Matched if postfix was inserted.
|
||||||
CZC_POSTFIX = 2, // Matched if postfix was inserted.
|
NoPostfix, // Matched if no postfix was inserted.
|
||||||
CZC_NOPOSTFIX = 4, // Matched if no postfix was inserted.
|
|
||||||
CZC_ANY = CZC_COLOR | CZC_POSTFIX | CZC_NOPOSTFIX,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
DECLARE_ENUM_AS_BIT_SET(CzechChoose)
|
using CzechChooseFlags = EnumBitSet<CzechChooseFlag, uint8_t>;
|
||||||
|
|
||||||
|
static constexpr CzechChooseFlags CZC_ANY = {CzechChooseFlag::Colour, CzechChooseFlag::Postfix, CzechChooseFlag::NoPostfix};
|
||||||
|
|
||||||
struct CzechNameSubst {
|
struct CzechNameSubst {
|
||||||
CzechGender gender;
|
CzechGender gender;
|
||||||
CzechAllow allow;
|
CzechAllowFlags allow;
|
||||||
CzechChoose choose;
|
CzechChooseFlags choose;
|
||||||
const char *name;
|
const char *name;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CzechNameAdj {
|
struct CzechNameAdj {
|
||||||
CzechPattern pattern;
|
CzechPattern pattern;
|
||||||
CzechChoose choose;
|
CzechChooseFlags choose;
|
||||||
const char *name;
|
const char *name;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1791,18 +1792,18 @@ static const CzechNameAdj _name_czech_adj[] = {
|
||||||
{ CZP_MLADY, CZC_ANY, "Kamenn" },
|
{ CZP_MLADY, CZC_ANY, "Kamenn" },
|
||||||
{ CZP_MLADY, CZC_ANY, "Cihlov" },
|
{ CZP_MLADY, CZC_ANY, "Cihlov" },
|
||||||
{ CZP_MLADY, CZC_ANY, "Divn" },
|
{ CZP_MLADY, CZC_ANY, "Divn" },
|
||||||
{ CZP_MLADY, CZC_COLOR, "\u010cerven" },
|
{ CZP_MLADY, CzechChooseFlag::Colour, "\u010cerven" },
|
||||||
{ CZP_MLADY, CZC_COLOR, "\u010cerven" },
|
{ CZP_MLADY, CzechChooseFlag::Colour, "\u010cerven" },
|
||||||
{ CZP_MLADY, CZC_COLOR, "\u010cerven" },
|
{ CZP_MLADY, CzechChooseFlag::Colour, "\u010cerven" },
|
||||||
{ CZP_MLADY, CZC_COLOR, "Zelen" },
|
{ CZP_MLADY, CzechChooseFlag::Colour, "Zelen" },
|
||||||
{ CZP_MLADY, CZC_COLOR, "\u017dlut" },
|
{ CZP_MLADY, CzechChooseFlag::Colour, "\u017dlut" },
|
||||||
{ CZP_MLADY, CZC_COLOR, "Siv" },
|
{ CZP_MLADY, CzechChooseFlag::Colour, "Siv" },
|
||||||
{ CZP_MLADY, CZC_COLOR, "\u0160ed" },
|
{ CZP_MLADY, CzechChooseFlag::Colour, "\u0160ed" },
|
||||||
{ CZP_MLADY, CZC_COLOR, "B\u00edl" },
|
{ CZP_MLADY, CzechChooseFlag::Colour, "B\u00edl" },
|
||||||
{ CZP_MLADY, CZC_COLOR, "B\u00edl" },
|
{ CZP_MLADY, CzechChooseFlag::Colour, "B\u00edl" },
|
||||||
{ CZP_MLADY, CZC_COLOR, "Modr" },
|
{ CZP_MLADY, CzechChooseFlag::Colour, "Modr" },
|
||||||
{ CZP_MLADY, CZC_COLOR, "R\u016f\u017eov" },
|
{ CZP_MLADY, CzechChooseFlag::Colour, "R\u016f\u017eov" },
|
||||||
{ CZP_MLADY, CZC_COLOR, "\u010cern" },
|
{ CZP_MLADY, CzechChooseFlag::Colour, "\u010cern" },
|
||||||
{ CZP_PRIVL, CZC_ANY, "Kr\u00e1l" },
|
{ CZP_PRIVL, CZC_ANY, "Kr\u00e1l" },
|
||||||
{ CZP_PRIVL, CZC_ANY, "Jan" },
|
{ CZP_PRIVL, CZC_ANY, "Jan" },
|
||||||
{ CZP_PRIVL, CZC_ANY, "Karl" },
|
{ CZP_PRIVL, CZC_ANY, "Karl" },
|
||||||
|
@ -1814,68 +1815,68 @@ static const CzechNameAdj _name_czech_adj[] = {
|
||||||
|
|
||||||
/* Considered a stem for choose/allow matching purposes. */
|
/* Considered a stem for choose/allow matching purposes. */
|
||||||
static const CzechNameSubst _name_czech_subst_full[] = {
|
static const CzechNameSubst _name_czech_subst_full[] = {
|
||||||
{ CZG_SMASC, CZA_ALL, CZC_COLOR, "Sedlec" },
|
{ CZG_SMASC, CZA_ALL, CzechChooseFlag::Colour, "Sedlec" },
|
||||||
{ CZG_SMASC, CZA_ALL, CZC_COLOR, "Brod" },
|
{ CZG_SMASC, CZA_ALL, CzechChooseFlag::Colour, "Brod" },
|
||||||
{ CZG_SMASC, CZA_ALL, CZC_COLOR, "Brod" },
|
{ CZG_SMASC, CZA_ALL, CzechChooseFlag::Colour, "Brod" },
|
||||||
{ CZG_SMASC, CZA_ALL, CZC_NONE, "\u00daval" },
|
{ CZG_SMASC, CZA_ALL, {}, "\u00daval" },
|
||||||
{ CZG_SMASC, CZA_ALL, CZC_COLOR, "\u017d\u010f\u00e1r" },
|
{ CZG_SMASC, CZA_ALL, CzechChooseFlag::Colour, "\u017d\u010f\u00e1r" },
|
||||||
{ CZG_SMASC, CZA_ALL, CZC_COLOR, "Smrk" },
|
{ CZG_SMASC, CZA_ALL, CzechChooseFlag::Colour, "Smrk" },
|
||||||
{ CZG_SFEM, CZA_ALL, CZC_COLOR, "Hora" },
|
{ CZG_SFEM, CZA_ALL, CzechChooseFlag::Colour, "Hora" },
|
||||||
{ CZG_SFEM, CZA_ALL, CZC_COLOR, "Lhota" },
|
{ CZG_SFEM, CZA_ALL, CzechChooseFlag::Colour, "Lhota" },
|
||||||
{ CZG_SFEM, CZA_ALL, CZC_COLOR, "Lhota" },
|
{ CZG_SFEM, CZA_ALL, CzechChooseFlag::Colour, "Lhota" },
|
||||||
{ CZG_SFEM, CZA_ALL, CZC_COLOR, "Hlava" },
|
{ CZG_SFEM, CZA_ALL, CzechChooseFlag::Colour, "Hlava" },
|
||||||
{ CZG_SFEM, CZA_ALL, CZC_COLOR, "L\u00edpa" },
|
{ CZG_SFEM, CZA_ALL, CzechChooseFlag::Colour, "L\u00edpa" },
|
||||||
{ CZG_SNEUT, CZA_ALL, CZC_COLOR, "Pole" },
|
{ CZG_SNEUT, CZA_ALL, CzechChooseFlag::Colour, "Pole" },
|
||||||
{ CZG_SNEUT, CZA_ALL, CZC_COLOR, "\u00dadol\u00ed" },
|
{ CZG_SNEUT, CZA_ALL, CzechChooseFlag::Colour, "\u00dadol\u00ed" },
|
||||||
{ CZG_PMASC, CZA_ALL, CZC_NONE, "\u00davaly" },
|
{ CZG_PMASC, CZA_ALL, {}, "\u00davaly" },
|
||||||
{ CZG_PFEM, CZA_ALL, CZC_COLOR, "Luka" },
|
{ CZG_PFEM, CZA_ALL, CzechChooseFlag::Colour, "Luka" },
|
||||||
{ CZG_PNEUT, CZA_ALL, CZC_COLOR, "Pole" },
|
{ CZG_PNEUT, CZA_ALL, CzechChooseFlag::Colour, "Pole" },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* TODO: More stems needed. --pasky */
|
/* TODO: More stems needed. --pasky */
|
||||||
static const CzechNameSubst _name_czech_subst_stem[] = {
|
static const CzechNameSubst _name_czech_subst_stem[] = {
|
||||||
{ CZG_SMASC, CZA_MIDDLE, CZC_COLOR, "Kostel" },
|
{ CZG_SMASC, { CzechAllowFlag::Middle }, CzechChooseFlag::Colour, "Kostel" },
|
||||||
{ CZG_SMASC, CZA_MIDDLE, CZC_COLOR, "Kl\u00e1\u0161ter" },
|
{ CZG_SMASC, { CzechAllowFlag::Middle }, CzechChooseFlag::Colour, "Kl\u00e1\u0161ter" },
|
||||||
{ CZG_SMASC, CZA_SHORT, CZC_COLOR, "Lhot" },
|
{ CZG_SMASC, {CzechAllowFlag::Short }, CzechChooseFlag::Colour, "Lhot" },
|
||||||
{ CZG_SFEM, CZA_SHORT, CZC_COLOR, "Lhot" },
|
{ CZG_SFEM, {CzechAllowFlag::Short }, CzechChooseFlag::Colour, "Lhot" },
|
||||||
{ CZG_SFEM, CZA_SHORT, CZC_COLOR, "Hur" },
|
{ CZG_SFEM, {CzechAllowFlag::Short }, CzechChooseFlag::Colour, "Hur" },
|
||||||
{ CZG_FREE, CZA_MIDDLE | CZA_LONG, CZC_NONE, "Sedl" },
|
{ CZG_FREE, { CzechAllowFlag::Middle, CzechAllowFlag::Long}, {}, "Sedl" },
|
||||||
{ CZG_FREE, CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_COLOR, "Hrad" },
|
{ CZG_FREE, {CzechAllowFlag::Short, CzechAllowFlag::Middle, CzechAllowFlag::Long}, CzechChooseFlag::Colour, "Hrad" },
|
||||||
{ CZG_NFREE, CZA_MIDDLE, CZC_NONE, "Pras" },
|
{ CZG_NFREE, { CzechAllowFlag::Middle }, {}, "Pras" },
|
||||||
{ CZG_NFREE, CZA_MIDDLE, CZC_NONE, "Ba\u017e" },
|
{ CZG_NFREE, { CzechAllowFlag::Middle }, {}, "Ba\u017e" },
|
||||||
{ CZG_NFREE, CZA_MIDDLE, CZC_NONE, "Tes" },
|
{ CZG_NFREE, { CzechAllowFlag::Middle }, {}, "Tes" },
|
||||||
{ CZG_NFREE, CZA_MIDDLE, CZC_NONE, "U\u017e" },
|
{ CZG_NFREE, { CzechAllowFlag::Middle }, {}, "U\u017e" },
|
||||||
{ CZG_NFREE, CZA_MIDDLE | CZA_LONG, CZC_POSTFIX, "B\u0159" },
|
{ CZG_NFREE, { CzechAllowFlag::Middle, CzechAllowFlag::Long}, CzechChooseFlag::Postfix, "B\u0159" },
|
||||||
{ CZG_NFREE, CZA_MIDDLE | CZA_LONG, CZC_NONE, "Vod" },
|
{ CZG_NFREE, { CzechAllowFlag::Middle, CzechAllowFlag::Long}, {}, "Vod" },
|
||||||
{ CZG_NFREE, CZA_MIDDLE | CZA_LONG, CZC_NONE, "Jan" },
|
{ CZG_NFREE, { CzechAllowFlag::Middle, CzechAllowFlag::Long}, {}, "Jan" },
|
||||||
{ CZG_NFREE, CZA_LONG, CZC_NONE, "Prach" },
|
{ CZG_NFREE, { CzechAllowFlag::Long}, {}, "Prach" },
|
||||||
{ CZG_NFREE, CZA_LONG, CZC_NONE, "Kunr" },
|
{ CZG_NFREE, { CzechAllowFlag::Long}, {}, "Kunr" },
|
||||||
{ CZG_NFREE, CZA_LONG, CZC_NONE, "Strak" },
|
{ CZG_NFREE, { CzechAllowFlag::Long}, {}, "Strak" },
|
||||||
{ CZG_NFREE, CZA_LONG, CZC_NONE, "V\u00edt" },
|
{ CZG_NFREE, { CzechAllowFlag::Long}, {}, "V\u00edt" },
|
||||||
{ CZG_NFREE, CZA_LONG, CZC_NONE, "Vy\u0161" },
|
{ CZG_NFREE, { CzechAllowFlag::Long}, {}, "Vy\u0161" },
|
||||||
{ CZG_NFREE, CZA_LONG, CZC_NONE, "\u017dat" },
|
{ CZG_NFREE, { CzechAllowFlag::Long}, {}, "\u017dat" },
|
||||||
{ CZG_NFREE, CZA_LONG, CZC_NONE, "\u017der" },
|
{ CZG_NFREE, { CzechAllowFlag::Long}, {}, "\u017der" },
|
||||||
{ CZG_NFREE, CZA_LONG, CZC_NONE, "St\u0159ed" },
|
{ CZG_NFREE, { CzechAllowFlag::Long}, {}, "St\u0159ed" },
|
||||||
{ CZG_NFREE, CZA_LONG, CZC_NONE, "Harv" },
|
{ CZG_NFREE, { CzechAllowFlag::Long}, {}, "Harv" },
|
||||||
{ CZG_NFREE, CZA_LONG, CZC_NONE, "Pruh" },
|
{ CZG_NFREE, { CzechAllowFlag::Long}, {}, "Pruh" },
|
||||||
{ CZG_NFREE, CZA_LONG, CZC_NONE, "Tach" },
|
{ CZG_NFREE, { CzechAllowFlag::Long}, {}, "Tach" },
|
||||||
{ CZG_NFREE, CZA_LONG, CZC_NONE, "P\u00edsn" },
|
{ CZG_NFREE, { CzechAllowFlag::Long}, {}, "P\u00edsn" },
|
||||||
{ CZG_NFREE, CZA_LONG, CZC_NONE, "Jin" },
|
{ CZG_NFREE, { CzechAllowFlag::Long}, {}, "Jin" },
|
||||||
{ CZG_NFREE, CZA_LONG, CZC_NONE, "Jes" },
|
{ CZG_NFREE, { CzechAllowFlag::Long}, {}, "Jes" },
|
||||||
{ CZG_NFREE, CZA_LONG, CZC_NONE, "Jar" },
|
{ CZG_NFREE, { CzechAllowFlag::Long}, {}, "Jar" },
|
||||||
{ CZG_NFREE, CZA_LONG, CZC_NONE, "Sok" },
|
{ CZG_NFREE, { CzechAllowFlag::Long}, {}, "Sok" },
|
||||||
{ CZG_NFREE, CZA_LONG, CZC_NONE, "Hod" },
|
{ CZG_NFREE, { CzechAllowFlag::Long}, {}, "Hod" },
|
||||||
{ CZG_NFREE, CZA_LONG, CZC_NONE, "Net" },
|
{ CZG_NFREE, { CzechAllowFlag::Long}, {}, "Net" },
|
||||||
{ CZG_FREE, CZA_LONG, CZC_NONE, "Pra\u017e" },
|
{ CZG_FREE, { CzechAllowFlag::Long}, {}, "Pra\u017e" },
|
||||||
{ CZG_FREE, CZA_LONG, CZC_NONE, "Nerat" },
|
{ CZG_FREE, { CzechAllowFlag::Long}, {}, "Nerat" },
|
||||||
{ CZG_FREE, CZA_LONG, CZC_NONE, "Kral" },
|
{ CZG_FREE, { CzechAllowFlag::Long}, {}, "Kral" },
|
||||||
{ CZG_FREE, CZA_LONG, CZC_NONE, "Hut" },
|
{ CZG_FREE, { CzechAllowFlag::Long}, {}, "Hut" },
|
||||||
{ CZG_FREE, CZA_LONG, CZC_NOPOSTFIX, "Pan" },
|
{ CZG_FREE, { CzechAllowFlag::Long}, CzechChooseFlag::NoPostfix, "Pan" },
|
||||||
{ CZG_FREE, CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_NOPOSTFIX, "Odst\u0159ed" },
|
{ CZG_FREE, {CzechAllowFlag::Short, CzechAllowFlag::Middle, CzechAllowFlag::Long}, CzechChooseFlag::NoPostfix, "Odst\u0159ed" },
|
||||||
{ CZG_FREE, CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_COLOR, "Mrat" },
|
{ CZG_FREE, {CzechAllowFlag::Short, CzechAllowFlag::Middle, CzechAllowFlag::Long}, CzechChooseFlag::Colour, "Mrat" },
|
||||||
{ CZG_FREE, CZA_LONG, CZC_COLOR, "Hlav" },
|
{ CZG_FREE, { CzechAllowFlag::Long}, CzechChooseFlag::Colour, "Hlav" },
|
||||||
{ CZG_FREE, CZA_SHORT | CZA_MIDDLE, CZC_NONE, "M\u011b\u0159" },
|
{ CZG_FREE, {CzechAllowFlag::Short, CzechAllowFlag::Middle }, {}, "M\u011b\u0159" },
|
||||||
{ CZG_FREE, CZA_MIDDLE | CZA_LONG, CZC_NONE, "Lip" },
|
{ CZG_FREE, { CzechAllowFlag::Middle, CzechAllowFlag::Long}, {}, "Lip" },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Optional postfix inserted between stem and ending. */
|
/* Optional postfix inserted between stem and ending. */
|
||||||
|
@ -1887,26 +1888,26 @@ static const char * const _name_czech_subst_postfix[] = {
|
||||||
|
|
||||||
/* This array must have the both neutral genders at the end! */
|
/* This array must have the both neutral genders at the end! */
|
||||||
static const CzechNameSubst _name_czech_subst_ending[] = {
|
static const CzechNameSubst _name_czech_subst_ending[] = {
|
||||||
{ CZG_SMASC, CZA_SHORT | CZA_MIDDLE, CZC_ANY, "ec" },
|
{ CZG_SMASC, {CzechAllowFlag::Short, CzechAllowFlag::Middle }, CZC_ANY, "ec" },
|
||||||
{ CZG_SMASC, CZA_SHORT | CZA_MIDDLE, CZC_ANY, "\u00edn" },
|
{ CZG_SMASC, {CzechAllowFlag::Short, CzechAllowFlag::Middle }, CZC_ANY, "\u00edn" },
|
||||||
{ CZG_SMASC, CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_ANY, "ov" },
|
{ CZG_SMASC, {CzechAllowFlag::Short, CzechAllowFlag::Middle, CzechAllowFlag::Long}, CZC_ANY, "ov" },
|
||||||
{ CZG_SMASC, CZA_SHORT | CZA_LONG, CZC_ANY, "kov" },
|
{ CZG_SMASC, {CzechAllowFlag::Short, CzechAllowFlag::Long}, CZC_ANY, "kov" },
|
||||||
{ CZG_SMASC, CZA_LONG, CZC_POSTFIX, "\u00edn" },
|
{ CZG_SMASC, { CzechAllowFlag::Long}, CzechChooseFlag::Postfix, "\u00edn" },
|
||||||
{ CZG_SMASC, CZA_LONG, CZC_POSTFIX, "n\u00edk" },
|
{ CZG_SMASC, { CzechAllowFlag::Long}, CzechChooseFlag::Postfix, "n\u00edk" },
|
||||||
{ CZG_SMASC, CZA_LONG, CZC_ANY, "burk" },
|
{ CZG_SMASC, { CzechAllowFlag::Long}, CZC_ANY, "burk" },
|
||||||
{ CZG_SFEM, CZA_SHORT, CZC_ANY, "ka" },
|
{ CZG_SFEM, {CzechAllowFlag::Short }, CZC_ANY, "ka" },
|
||||||
{ CZG_SFEM, CZA_MIDDLE, CZC_ANY, "inka" },
|
{ CZG_SFEM, { CzechAllowFlag::Middle }, CZC_ANY, "inka" },
|
||||||
{ CZG_SFEM, CZA_MIDDLE, CZC_ANY, "n\u00e1" },
|
{ CZG_SFEM, { CzechAllowFlag::Middle }, CZC_ANY, "n\u00e1" },
|
||||||
{ CZG_SFEM, CZA_LONG, CZC_ANY, "ava" },
|
{ CZG_SFEM, { CzechAllowFlag::Long}, CZC_ANY, "ava" },
|
||||||
{ CZG_PMASC, CZA_LONG, CZC_POSTFIX, "\u00edky" },
|
{ CZG_PMASC, { CzechAllowFlag::Long}, CzechChooseFlag::Postfix, "\u00edky" },
|
||||||
{ CZG_PMASC, CZA_LONG, CZC_ANY, "upy" },
|
{ CZG_PMASC, { CzechAllowFlag::Long}, CZC_ANY, "upy" },
|
||||||
{ CZG_PMASC, CZA_LONG, CZC_ANY, "olupy" },
|
{ CZG_PMASC, { CzechAllowFlag::Long}, CZC_ANY, "olupy" },
|
||||||
{ CZG_PFEM, CZA_LONG, CZC_ANY, "avy" },
|
{ CZG_PFEM, { CzechAllowFlag::Long}, CZC_ANY, "avy" },
|
||||||
{ CZG_PFEM, CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_ANY, "ice" },
|
{ CZG_PFEM, {CzechAllowFlag::Short, CzechAllowFlag::Middle, CzechAllowFlag::Long}, CZC_ANY, "ice" },
|
||||||
{ CZG_PFEM, CZA_SHORT | CZA_MIDDLE | CZA_LONG, CZC_ANY, "i\u010dky" },
|
{ CZG_PFEM, {CzechAllowFlag::Short, CzechAllowFlag::Middle, CzechAllowFlag::Long}, CZC_ANY, "i\u010dky" },
|
||||||
{ CZG_PNEUT, CZA_SHORT | CZA_MIDDLE, CZC_ANY, "na" },
|
{ CZG_PNEUT, {CzechAllowFlag::Short, CzechAllowFlag::Middle }, CZC_ANY, "na" },
|
||||||
{ CZG_SNEUT, CZA_SHORT | CZA_MIDDLE, CZC_ANY, "no" },
|
{ CZG_SNEUT, {CzechAllowFlag::Short, CzechAllowFlag::Middle }, CZC_ANY, "no" },
|
||||||
{ CZG_SNEUT, CZA_LONG, CZC_ANY, "i\u0161t\u011b" },
|
{ CZG_SNEUT, { CzechAllowFlag::Long}, CZC_ANY, "i\u0161t\u011b" },
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char * const _name_czech_suffix[] = {
|
static const char * const _name_czech_suffix[] = {
|
||||||
|
|
|
@ -602,8 +602,8 @@ static void MakeCzechTownName(StringBuilder &builder, uint32_t seed)
|
||||||
|
|
||||||
/* The select criteria. */
|
/* The select criteria. */
|
||||||
CzechGender gender;
|
CzechGender gender;
|
||||||
CzechChoose choose;
|
CzechChooseFlags choose;
|
||||||
CzechAllow allow;
|
CzechAllowFlags allow;
|
||||||
|
|
||||||
if (do_prefix) prefix = SeedModChance(5, std::size(_name_czech_adj) * 12, seed) / 12;
|
if (do_prefix) prefix = SeedModChance(5, std::size(_name_czech_adj) * 12, seed) / 12;
|
||||||
if (do_suffix) suffix = SeedModChance(7, std::size(_name_czech_suffix), seed);
|
if (do_suffix) suffix = SeedModChance(7, std::size(_name_czech_suffix), seed);
|
||||||
|
@ -632,18 +632,18 @@ static void MakeCzechTownName(StringBuilder &builder, uint32_t seed)
|
||||||
/* Load the postfix (1:1 chance that a postfix will be inserted) */
|
/* Load the postfix (1:1 chance that a postfix will be inserted) */
|
||||||
postfix = SeedModChance(14, std::size(_name_czech_subst_postfix) * 2, seed);
|
postfix = SeedModChance(14, std::size(_name_czech_subst_postfix) * 2, seed);
|
||||||
|
|
||||||
if (choose & CZC_POSTFIX) {
|
if (choose.Test(CzechChooseFlag::Postfix)) {
|
||||||
/* Always get a real postfix. */
|
/* Always get a real postfix. */
|
||||||
postfix %= std::size(_name_czech_subst_postfix);
|
postfix %= std::size(_name_czech_subst_postfix);
|
||||||
}
|
}
|
||||||
if (choose & CZC_NOPOSTFIX) {
|
if (choose.Test(CzechChooseFlag::NoPostfix)) {
|
||||||
/* Always drop a postfix. */
|
/* Always drop a postfix. */
|
||||||
postfix += std::size(_name_czech_subst_postfix);
|
postfix += std::size(_name_czech_subst_postfix);
|
||||||
}
|
}
|
||||||
if (postfix < std::size(_name_czech_subst_postfix)) {
|
if (postfix < std::size(_name_czech_subst_postfix)) {
|
||||||
choose |= CZC_POSTFIX;
|
choose.Set(CzechChooseFlag::Postfix);
|
||||||
} else {
|
} else {
|
||||||
choose |= CZC_NOPOSTFIX;
|
choose.Set(CzechChooseFlag::NoPostfix);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Localize the array segment containing a good gender */
|
/* Localize the array segment containing a good gender */
|
||||||
|
@ -671,7 +671,7 @@ static void MakeCzechTownName(StringBuilder &builder, uint32_t seed)
|
||||||
for (ending = ending_start; ending <= ending_stop; ending++) {
|
for (ending = ending_start; ending <= ending_stop; ending++) {
|
||||||
const CzechNameSubst *e = &_name_czech_subst_ending[ending];
|
const CzechNameSubst *e = &_name_czech_subst_ending[ending];
|
||||||
|
|
||||||
if ((e->choose & choose) == choose && (e->allow & allow) != 0) {
|
if ((e->choose & choose) == choose && e->allow.Any(allow)) {
|
||||||
map[i++] = ending;
|
map[i++] = ending;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue