From d28caa3ced326adbeb2bd7eb9c4f97ad11c00801 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Sat, 11 Nov 2023 08:31:27 -0500 Subject: [PATCH 01/40] Codechange: Use ticks for timetable start date --- src/base_consist.h | 4 ++-- src/saveload/saveload.h | 1 + src/saveload/vehicle_sl.cpp | 14 +++++++++++- src/timetable.h | 3 +++ src/timetable_cmd.cpp | 44 +++++++++++++++++++++++++++++++++---- src/timetable_cmd.h | 4 ++-- src/timetable_gui.cpp | 4 ++-- 7 files changed, 63 insertions(+), 11 deletions(-) diff --git a/src/base_consist.h b/src/base_consist.h index f8a68faaa6..b89cddab55 100644 --- a/src/base_consist.h +++ b/src/base_consist.h @@ -11,7 +11,7 @@ #define BASE_CONSIST_H #include "order_type.h" -#include "timer/timer_game_calendar.h" +#include "timer/timer_game_tick.h" /** Various front vehicle properties that are preserved when autoreplacing, using order-backup or switching front engines within a consist. */ struct BaseConsist { @@ -20,7 +20,7 @@ struct BaseConsist { /* Used for timetabling. */ uint32_t current_order_time; ///< How many ticks have passed since this order started. int32_t lateness_counter; ///< How many ticks late (or early if negative) this vehicle is. - TimerGameCalendar::Date timetable_start; ///< When the vehicle is supposed to start the timetable. + TimerGameTick::TickCounter timetable_start; ///< At what tick of TimerGameTick::counter the vehicle should start its timetable. uint16_t service_interval; ///< The interval for (automatic) servicing; either in days or %. diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index bde63020eb..5d993b928d 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -363,6 +363,7 @@ enum SaveLoadVersion : uint16_t { SLV_CARGO_TRAVELLED, ///< 319 PR#11283 CargoPacket now tracks how far it travelled inside a vehicle. SLV_STATION_RATING_CHEAT, ///< 320 PR#11346 Add cheat to fix station ratings at 100%. + SLV_TIMETABLE_START_TICKS, ///< 321 PR#11468 Convert timetable start from a date to ticks. SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 4ef24cf228..e0b7073ce6 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -17,6 +17,7 @@ #include "../roadveh.h" #include "../ship.h" #include "../aircraft.h" +#include "../timetable.h" #include "../station_base.h" #include "../effectvehicle_base.h" #include "../company_base.h" @@ -373,6 +374,16 @@ void AfterLoadVehicles(bool part_of_load) s->rotation_y_pos = s->y_pos; } } + + if (IsSavegameVersionBefore(SLV_TIMETABLE_START_TICKS)) { + /* Convert timetable start from a date to an absolute tick in TimerGameTick::counter. */ + for (Vehicle *v : Vehicle::Iterate()) { + /* If the start date is 0, the vehicle is not waiting to start and can be ignored. */ + if (v->timetable_start == 0) continue; + + v->timetable_start = GetStartTickFromDate(v->timetable_start); + } + } } CheckValidVehicles(); @@ -663,7 +674,8 @@ public: SLE_CONDVAR(Vehicle, current_order.wait_time, SLE_UINT16, SLV_67, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, current_order.travel_time, SLE_UINT16, SLV_67, SL_MAX_VERSION), SLE_CONDVAR(Vehicle, current_order.max_speed, SLE_UINT16, SLV_174, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, timetable_start, SLE_INT32, SLV_129, SL_MAX_VERSION), + SLE_CONDVAR(Vehicle, timetable_start, SLE_FILE_I32 | SLE_VAR_U64, SLV_129, SLV_TIMETABLE_START_TICKS), + SLE_CONDVAR(Vehicle, timetable_start, SLE_UINT64, SLV_TIMETABLE_START_TICKS, SL_MAX_VERSION), SLE_CONDREF(Vehicle, orders, REF_ORDER, SL_MIN_VERSION, SLV_105), SLE_CONDREF(Vehicle, orders, REF_ORDERLIST, SLV_105, SL_MAX_VERSION), diff --git a/src/timetable.h b/src/timetable.h index 597d391da7..8aacf98483 100644 --- a/src/timetable.h +++ b/src/timetable.h @@ -16,6 +16,9 @@ static const TimerGameCalendar::Year MAX_TIMETABLE_START_YEARS = 15; ///< The maximum start date offset, in years. +TimerGameTick::TickCounter GetStartTickFromDate(TimerGameCalendar::Date start_date); +TimerGameCalendar::Date GetDateFromStartTick(TimerGameTick::TickCounter start_tick); + void ShowTimetableWindow(const Vehicle *v); void UpdateVehicleTimetable(Vehicle *v, bool travelling); void SetTimetableParams(int param1, int param2, TimerGameTick::Ticks ticks); diff --git a/src/timetable_cmd.cpp b/src/timetable_cmd.cpp index c1911bd49e..e36ea4a144 100644 --- a/src/timetable_cmd.cpp +++ b/src/timetable_cmd.cpp @@ -21,6 +21,40 @@ #include "safeguards.h" +/** + * Get the TimerGameTick::TickCounter tick of a given date. + * @param start_date The date when the timetable starts. + * @return The first tick of this date. + */ +TimerGameTick::TickCounter GetStartTickFromDate(TimerGameCalendar::Date start_date) +{ + /* Calculate the offset in ticks from the current date. */ + TimerGameTick::Ticks tick_offset = (start_date - TimerGameCalendar::date).base() * Ticks::DAY_TICKS; + + /* Compensate for the current date_fract. */ + tick_offset -= TimerGameCalendar::date_fract; + + /* Return the current tick plus the offset. */ + return TimerGameTick::counter + tick_offset; +} + +/** + * Get a date from a given start tick of timetable. + * @param start_tick The TimerGameTick::TickCounter when the timetable starts. + * @return The date when we reach this tick. + */ +TimerGameCalendar::Date GetDateFromStartTick(TimerGameTick::TickCounter start_tick) +{ + /* Calculate the offset in ticks from the current counter tick. */ + TimerGameTick::Ticks tick_offset = start_tick - TimerGameTick::counter; + + /* Compensate for the current date_fract. */ + tick_offset += TimerGameCalendar::date_fract; + + /* Return the current date plus the offset in days. */ + return TimerGameCalendar::date + (tick_offset / Ticks::DAY_TICKS); +} + /** * Change/update a particular timetable entry. * @param v The vehicle to change the timetable of. @@ -300,10 +334,10 @@ static bool VehicleTimetableSorter(Vehicle * const &a, Vehicle * const &b) * @param flags Operation to perform. * @param veh_id Vehicle ID. * @param timetable_all Set to set timetable start for all vehicles sharing this order - * @param start_date The timetable start date. + * @param start_tick The TimerGameTick::counter tick when the timetable starts. * @return The error or cost of the operation. */ -CommandCost CmdSetTimetableStart(DoCommandFlag flags, VehicleID veh_id, bool timetable_all, TimerGameCalendar::Date start_date) +CommandCost CmdSetTimetableStart(DoCommandFlag flags, VehicleID veh_id, bool timetable_all, TimerGameTick::TickCounter start_tick) { Vehicle *v = Vehicle::GetIfValid(veh_id); if (v == nullptr || !v->IsPrimaryVehicle() || v->orders == nullptr) return CMD_ERROR; @@ -313,6 +347,8 @@ CommandCost CmdSetTimetableStart(DoCommandFlag flags, VehicleID veh_id, bool tim TimerGameTick::Ticks total_duration = v->orders->GetTimetableTotalDuration(); + TimerGameCalendar::Date start_date = GetDateFromStartTick(start_tick); + /* Don't let a timetable start at an invalid date. */ if (start_date < 0 || start_date > CalendarTime::MAX_DATE) return CMD_ERROR; @@ -351,7 +387,7 @@ CommandCost CmdSetTimetableStart(DoCommandFlag flags, VehicleID veh_id, bool tim w->lateness_counter = 0; ClrBit(w->vehicle_flags, VF_TIMETABLE_STARTED); /* Do multiplication, then division to reduce rounding errors. */ - w->timetable_start = start_date + idx * total_duration / num_vehs / Ticks::DAY_TICKS; + w->timetable_start = start_tick + (idx * total_duration / num_vehs); SetWindowDirty(WC_VEHICLE_TIMETABLE, w->index); ++idx; } @@ -444,7 +480,7 @@ void UpdateVehicleTimetable(Vehicle *v, bool travelling) just_started = !HasBit(v->vehicle_flags, VF_TIMETABLE_STARTED); if (v->timetable_start != 0) { - v->lateness_counter = (TimerGameCalendar::date - v->timetable_start).base() * Ticks::DAY_TICKS + TimerGameCalendar::date_fract; + v->lateness_counter = TimerGameTick::counter - v->timetable_start; v->timetable_start = 0; } diff --git a/src/timetable_cmd.h b/src/timetable_cmd.h index 433f191196..43e76fa985 100644 --- a/src/timetable_cmd.h +++ b/src/timetable_cmd.h @@ -11,13 +11,13 @@ #define TIMETABLE_CMD_H #include "command_type.h" -#include "timer/timer_game_calendar.h" +#include "timer/timer_game_tick.h" CommandCost CmdChangeTimetable(DoCommandFlag flags, VehicleID veh, VehicleOrderID order_number, ModifyTimetableFlags mtf, uint16_t data); CommandCost CmdBulkChangeTimetable(DoCommandFlag flags, VehicleID veh, ModifyTimetableFlags mtf, uint16_t data); CommandCost CmdSetVehicleOnTime(DoCommandFlag flags, VehicleID veh, bool apply_to_group); CommandCost CmdAutofillTimetable(DoCommandFlag flags, VehicleID veh, bool autofill, bool preserve_wait_time); -CommandCost CmdSetTimetableStart(DoCommandFlag flags, VehicleID veh_id, bool timetable_all, TimerGameCalendar::Date start_date); +CommandCost CmdSetTimetableStart(DoCommandFlag flags, VehicleID veh_id, bool timetable_all, TimerGameTick::TickCounter start_tick); DEF_CMD_TRAIT(CMD_CHANGE_TIMETABLE, CmdChangeTimetable, 0, CMDT_ROUTE_MANAGEMENT) DEF_CMD_TRAIT(CMD_BULK_CHANGE_TIMETABLE, CmdBulkChangeTimetable, 0, CMDT_ROUTE_MANAGEMENT) diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp index c38b91f434..c2ac3ca415 100644 --- a/src/timetable_gui.cpp +++ b/src/timetable_gui.cpp @@ -145,7 +145,7 @@ static void FillTimetableArrivalDepartureTable(const Vehicle *v, VehicleOrderID */ static void ChangeTimetableStartCallback(const Window *w, TimerGameCalendar::Date date, void *data) { - Command::Post(STR_ERROR_CAN_T_TIMETABLE_VEHICLE, (VehicleID)w->window_number, reinterpret_cast(data) != 0, date); + Command::Post(STR_ERROR_CAN_T_TIMETABLE_VEHICLE, (VehicleID)w->window_number, reinterpret_cast(data) != 0, GetStartTickFromDate(date)); } @@ -494,7 +494,7 @@ struct TimetableWindow : Window { /* We are running towards the first station so we can start the * timetable at the given time. */ SetDParam(0, STR_JUST_DATE_TINY); - SetDParam(1, v->timetable_start); + SetDParam(1, GetDateFromStartTick(v->timetable_start)); DrawString(tr, STR_TIMETABLE_STATUS_START_AT); } else if (!HasBit(v->vehicle_flags, VF_TIMETABLE_STARTED)) { /* We aren't running on a timetable yet, so how can we be "on time" From c6b9227dbb2167b5f8579524b7add0ad76e7e2a8 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 25 Nov 2023 18:37:21 +0000 Subject: [PATCH 02/40] Update: Translations from eints --- src/lang/afrikaans.txt | 17 ----------------- src/lang/arabic_egypt.txt | 17 ----------------- src/lang/basque.txt | 17 ----------------- src/lang/belarusian.txt | 17 ----------------- src/lang/brazilian_portuguese.txt | 17 ----------------- src/lang/bulgarian.txt | 17 ----------------- src/lang/catalan.txt | 17 ----------------- src/lang/chuvash.txt | 17 ----------------- src/lang/croatian.txt | 17 ----------------- src/lang/czech.txt | 17 ----------------- src/lang/danish.txt | 17 ----------------- src/lang/dutch.txt | 17 ----------------- src/lang/english_AU.txt | 17 ----------------- src/lang/english_US.txt | 17 ----------------- src/lang/esperanto.txt | 17 ----------------- src/lang/estonian.txt | 17 ----------------- src/lang/faroese.txt | 17 ----------------- src/lang/finnish.txt | 17 ----------------- src/lang/french.txt | 17 ----------------- src/lang/frisian.txt | 17 ----------------- src/lang/gaelic.txt | 17 ----------------- src/lang/galician.txt | 17 ----------------- src/lang/german.txt | 17 ----------------- src/lang/greek.txt | 17 ----------------- src/lang/hebrew.txt | 17 ----------------- src/lang/hindi.txt | 17 ----------------- src/lang/hungarian.txt | 17 ----------------- src/lang/icelandic.txt | 17 ----------------- src/lang/ido.txt | 16 ---------------- src/lang/indonesian.txt | 17 ----------------- src/lang/irish.txt | 17 ----------------- src/lang/italian.txt | 17 ----------------- src/lang/japanese.txt | 17 ----------------- src/lang/korean.txt | 17 ----------------- src/lang/latin.txt | 17 ----------------- src/lang/latvian.txt | 17 ----------------- src/lang/lithuanian.txt | 17 ----------------- src/lang/luxembourgish.txt | 17 ----------------- src/lang/macedonian.txt | 17 ----------------- src/lang/malay.txt | 17 ----------------- src/lang/maltese.txt | 16 ---------------- src/lang/marathi.txt | 17 ----------------- src/lang/norwegian_bokmal.txt | 17 ----------------- src/lang/norwegian_nynorsk.txt | 17 ----------------- src/lang/persian.txt | 17 ----------------- src/lang/polish.txt | 17 ----------------- src/lang/portuguese.txt | 17 ----------------- src/lang/romanian.txt | 17 ----------------- src/lang/russian.txt | 17 ----------------- src/lang/serbian.txt | 17 ----------------- src/lang/simplified_chinese.txt | 17 ----------------- src/lang/slovak.txt | 17 ----------------- src/lang/slovenian.txt | 17 ----------------- src/lang/spanish.txt | 17 ----------------- src/lang/spanish_MX.txt | 17 ----------------- src/lang/swedish.txt | 17 ----------------- src/lang/tamil.txt | 17 ----------------- src/lang/thai.txt | 17 ----------------- src/lang/traditional_chinese.txt | 17 ----------------- src/lang/turkish.txt | 17 ----------------- src/lang/ukrainian.txt | 17 ----------------- src/lang/urdu.txt | 17 ----------------- src/lang/vietnamese.txt | 17 ----------------- src/lang/welsh.txt | 17 ----------------- 64 files changed, 1086 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 8cfc326ac7..cce78a8e5d 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -402,31 +402,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Deurskynende ge STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Deurskynende stasie tekens # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Stoor spel STR_FILE_MENU_LOAD_GAME :Laai spel STR_FILE_MENU_QUIT_GAME :Verlaat spel -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Verlaat # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Kaart van wêreld STR_MAP_MENU_EXTRA_VIEWPORT :Ekstra toonvenster STR_MAP_MENU_LINGRAPH_LEGEND :Vragverspreidingsleutel STR_MAP_MENU_SIGN_LIST :Teken lys # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Dorp gids STR_TOWN_MENU_FOUND_TOWN :Stig dorp # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subsidies # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Bedryfswins grafiek STR_GRAPH_MENU_INCOME_GRAPH :Inkomste grafiek STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Gelewerde vrag grafiek @@ -435,57 +429,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Maatskappy waar STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Vragbetalingstariewe # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Maatskappy verbond tabel STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Omstandig prestasie gradering STR_GRAPH_MENU_HIGHSCORE :Hoogste tellings tafel # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Nywerheid Gids STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Nywerheidsskakels STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Konsolideer nuwe nywerheid # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Spoorwegkonstruksie STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Elekriese spoorwegkonstruksie STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Monospoor konstruksie STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Magneetsweeftrein konstruksie # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Pad konstruksie STR_ROAD_MENU_TRAM_CONSTRUCTION :Tremweg konstruksie # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Waterweg konstruksie # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Lughawe konstruksie # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Landargitektuur STR_LANDSCAPING_MENU_PLANT_TREES :Plant bome STR_LANDSCAPING_MENU_PLACE_SIGN :Plaas teken # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Klank/musiek # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Laaste boodskap/nuus verslag STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Boodskapgeskiedenis STR_NEWS_MENU_DELETE_ALL_MESSAGES :Vee alle boodskappe uit # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Terreininligting -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Skakel terminaal STR_ABOUT_MENU_AI_DEBUG :AI/Spel skript ontfout STR_ABOUT_MENU_SCREENSHOT :Skermskoot diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 49750bc89c..f3ba25e5a2 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -402,31 +402,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :مباني شف STR_SETTINGS_MENU_TRANSPARENT_SIGNS :اسماء المحطات شفافة # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :حفظ STR_FILE_MENU_LOAD_GAME :تحميل STR_FILE_MENU_QUIT_GAME :اغلاق اللعبة -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :خروج # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :خريطة العالم STR_MAP_MENU_EXTRA_VIEWPORT :شاشة عرض اضافية STR_MAP_MENU_LINGRAPH_LEGEND :مفتاح تدفق البضائع STR_MAP_MENU_SIGN_LIST :قائمة العلامات # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :دليل المدن STR_TOWN_MENU_FOUND_TOWN :جد المدينة # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :العروض # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :مخطط التشغيل STR_GRAPH_MENU_INCOME_GRAPH :مخطط الارباح STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :مخطط البضاعة المشحونة @@ -435,57 +429,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :مخطط قيم STR_GRAPH_MENU_CARGO_PAYMENT_RATES :معدل تكلفة النقل # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :ترتيب الشركات STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :تقييم أداء مفصل STR_GRAPH_MENU_HIGHSCORE :قائمه المتفوقين # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :دليل المصانع STR_INDUSTRY_MENU_INDUSTRY_CHAIN :سلاسل الصناعة STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :مول بناء مصنع # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :بناء سكة قطار حديدية STR_RAIL_MENU_ELRAIL_CONSTRUCTION :بناء سكة الحديد الكهربائية STR_RAIL_MENU_MONORAIL_CONSTRUCTION :بناء سكة قطار احادية STR_RAIL_MENU_MAGLEV_CONSTRUCTION :بناء سكة قطار ممغنطة # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :بناء الطرق STR_ROAD_MENU_TRAM_CONSTRUCTION :بناء الترام # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :بناء ممرات مائيه # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :بناء المطار # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :تصميم الخريطة STR_LANDSCAPING_MENU_PLANT_TREES :زراعة اشجار STR_LANDSCAPING_MENU_PLACE_SIGN :وضع علامات # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :الموسيقى/الصوت # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :الرسالة الأخيرة/التقرير الجديد STR_NEWS_MENU_MESSAGE_HISTORY_MENU :الرسائل السابقة STR_NEWS_MENU_DELETE_ALL_MESSAGES :احذف كل الرسائل # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :معلومات مربع في الخريطة -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :توقل كونسول STR_ABOUT_MENU_AI_DEBUG :مكتشف اخطاء الذكاء الصناعي STR_ABOUT_MENU_SCREENSHOT :صورة من الشاشة - Ctrl-S - diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 1a1905c70a..998d533fe3 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -391,30 +391,24 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Eraikin transpa STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Geltoki errotulu transparenteak # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Jokoa gorde STR_FILE_MENU_LOAD_GAME :Jokoa kargatu STR_FILE_MENU_QUIT_GAME :Jokoa utzi -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Irten # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Munduko mapa STR_MAP_MENU_EXTRA_VIEWPORT :lehio extra STR_MAP_MENU_SIGN_LIST :Seinale zerrenda # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Herri direktorioa STR_TOWN_MENU_FOUND_TOWN :Herria eraiki # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subsidioak # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Operazio benefizioen grafikoa STR_GRAPH_MENU_INCOME_GRAPH :Irabazien grafikoa STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Entregatutako zama grafikoa @@ -423,56 +417,45 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Konpaniako bali STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Zama salneurriak # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Konpanien ligaren tabloia STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Errendimentu xehetuaren tasa STR_GRAPH_MENU_HIGHSCORE :Puntuazio taula # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Industria direktorioa STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Industri katea STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Industria berri bat eraiki # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Trenbidea eraiki STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Trenbide elektrikoa eraiki STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Monorail trenbidea eraiki STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Trenbide magnetikoa eraiki # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Errepidea eraiki STR_ROAD_MENU_TRAM_CONSTRUCTION :Tranbia eraiki # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Urbideak eraiki # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Aireportua eraiki # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Paisai editorea STR_LANDSCAPING_MENU_PLANT_TREES :Zuhaitzak landatu STR_LANDSCAPING_MENU_PLACE_SIGN :Kartela jarri # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Soinua/musika # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Azken mezua/albiste erreportaia STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Mezuen historia # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Lur arearen informazioa -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Konsola aktibatu STR_ABOUT_MENU_AI_DEBUG :IA/Joko script-aren garbitzailea STR_ABOUT_MENU_SCREENSHOT :Pantailan dagoenaren argazkia hartu (Ctrl+S) diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index c3522b3588..2b9c774d93 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -711,31 +711,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Празрыс STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Празрыстыя надпісы # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Захаваць гульню STR_FILE_MENU_LOAD_GAME :Загрузіць гульню STR_FILE_MENU_QUIT_GAME :Да галоўнага мэню -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Выхад # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Мапа сусьвету STR_MAP_MENU_EXTRA_VIEWPORT :Дадатковае вакно прагляду STR_MAP_MENU_LINGRAPH_LEGEND :Леґенда грузаперавозак STR_MAP_MENU_SIGN_LIST :Сьпіс таблічак # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Сьпіс гарадоў STR_TOWN_MENU_FOUND_TOWN :Заснаваць горад # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Субсыдыі # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Ґрафік прыбытку STR_GRAPH_MENU_INCOME_GRAPH :Ґрафік даходу STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Ґрафік дастаўленага грузу @@ -744,57 +738,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Ґрафік в STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Ґрафік аплаты перавозак # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Табліца фірмаў STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Дэталізаваны рэйтынґ кампаніі STR_GRAPH_MENU_HIGHSCORE :Табліца рэкордаў # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Пералік прамысловасьці STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Вытворчыя ланцужкі STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Заснаваць новае прадпрыемства # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Будаўніцтва чыгункі STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Будаўніцтва электрыфікаванай чыгункі STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Будаўніцтва монарэйкавай дарогі STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Будаўніцтва маґлева # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Будаўніцтва дарогаў STR_ROAD_MENU_TRAM_CONSTRUCTION :Будаўніцтва трамвайных каляiнаў # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Будаўніцтва водных камунікацыяў # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Будаўніцтва аэрапортаў # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Ляндшафт STR_LANDSCAPING_MENU_PLANT_TREES :Пасадзіць дрэвы STR_LANDSCAPING_MENU_PLACE_SIGN :Паставіць метку # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Гукі/музыка # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Апошняе паведамленьне STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Гісторыя паведамленьняў STR_NEWS_MENU_DELETE_ALL_MESSAGES :Выдаліць усе паведамленьні # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Зьвесткі аб зямлі -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Кансоль STR_ABOUT_MENU_AI_DEBUG :Наладка штучнага інтэлекту (ШІ/AI) / скрыптоў STR_ABOUT_MENU_SCREENSHOT :Здымак экрана (Ctrl+S) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 17523c4126..a6f8caa1d1 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -441,31 +441,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Edifícios tran STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Placas de estações transparentes # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Salvar jogo STR_FILE_MENU_LOAD_GAME :Carregar jogo STR_FILE_MENU_QUIT_GAME :Abandonar jogo -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Sair # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Mapa do mundo STR_MAP_MENU_EXTRA_VIEWPORT :Janela extra STR_MAP_MENU_LINGRAPH_LEGEND :Legenda do fluxo de carga STR_MAP_MENU_SIGN_LIST :Lista de sinais # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Lista de cidades STR_TOWN_MENU_FOUND_TOWN :Fundar cidade # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subsídios # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Gráfico de lucro operacional STR_GRAPH_MENU_INCOME_GRAPH :Gráfico de renda STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Gráfico de carga entregue @@ -474,58 +468,47 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Gráfico de ava STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Taxa de pagamento de carga # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Tabela da liga de empresa STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Avaliação detalhada de performance STR_GRAPH_MENU_HIGHSCORE :Tabela de Pontuações # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Catálogo de indústrias STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Cadeias de indústrias STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Financiar nova indústria # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Construção de ferrovia STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Construção de ferrovia elétrificada STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Construção de monotrilho STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construção de Maglev # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Construção de rodovia STR_ROAD_MENU_TRAM_CONSTRUCTION :Construção de Bonde # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Construção de canais # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Construção de aeroporto # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Paisagismo STR_LANDSCAPING_MENU_PLANT_TREES :Plantar árvores STR_LANDSCAPING_MENU_PLACE_SIGN :Colocar sinal # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Som/música # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Última mensagem/notícia STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Histórico de Mensagens STR_NEWS_MENU_DELETE_ALL_MESSAGES :Apagar todas as mensagens # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Informação da área do terreno STR_ABOUT_MENU_HELP :Ajuda & manuais -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Alternar console STR_ABOUT_MENU_AI_DEBUG :Depurar IA/Script do jogo STR_ABOUT_MENU_SCREENSHOT :Captura de tela diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 2e442359cb..bbd2c1ba98 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -395,30 +395,24 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Прозрач STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Прозрачни табели # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Запази игра STR_FILE_MENU_LOAD_GAME :Отваряне на игра STR_FILE_MENU_QUIT_GAME :Прекъсване на играта -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Изход # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Карта на света STR_MAP_MENU_EXTRA_VIEWPORT :Допълнителна камера STR_MAP_MENU_SIGN_LIST :Списък с табели # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Списък с градовете STR_TOWN_MENU_FOUND_TOWN :Основи град # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Субсидии # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Графика на капитала STR_GRAPH_MENU_INCOME_GRAPH :Графика на приходите STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Графика на доставките @@ -427,57 +421,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Стойнос STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Тарифи за доставка на стоки # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Класиране на компаниите STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Рейтинг на представянето в детайли STR_GRAPH_MENU_HIGHSCORE :Таблица с най-добрите резултати # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Списък на индустриите STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Индустриални вериги STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Инвестирай в нова индустрия # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Конструиране на Двурелсов път STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Строене на електрифицирана ЖП мрежа STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Конструиране на Еднорелсов път STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Конструиране на Магниторелсов път # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Пътно строителство STR_ROAD_MENU_TRAM_CONSTRUCTION :Трамвайно строителство # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Воднопътен строеж # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Строене на летище # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Тераформиране STR_LANDSCAPING_MENU_PLANT_TREES :Засаждане на дървета STR_LANDSCAPING_MENU_PLACE_SIGN :Поставяне на знак # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Звук/музика # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Последно съобщение/новини STR_NEWS_MENU_MESSAGE_HISTORY_MENU :История на съобщенията STR_NEWS_MENU_DELETE_ALL_MESSAGES :Изтрий всички съобщения # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Информация за терена -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Показване/скриване на конзола STR_ABOUT_MENU_AI_DEBUG :ИИ дебъг STR_ABOUT_MENU_SCREENSHOT :Screenshot diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 881be8c9e7..b0818882d1 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -441,31 +441,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Edificis transp STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Senyals transparents # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Desa la partida STR_FILE_MENU_LOAD_GAME :Carrega una partida STR_FILE_MENU_QUIT_GAME :Abandona la partida -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Surt # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Mapa del món STR_MAP_MENU_EXTRA_VIEWPORT :Vista extra STR_MAP_MENU_LINGRAPH_LEGEND :Llegenda del flux de càrrega STR_MAP_MENU_SIGN_LIST :Llista de senyals # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Llista de poblacions STR_TOWN_MENU_FOUND_TOWN :Funda una població # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subvencions # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Gràfic de beneficis operatius STR_GRAPH_MENU_INCOME_GRAPH :Gràfic d'ingressos STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Gràfic d'entrega de càrrega @@ -474,58 +468,47 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Gràfic del val STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Tarifes de pagament per càrrega # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Taula de la lliga de companyies STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Detall de ratis de rendiment STR_GRAPH_MENU_HIGHSCORE :Taula de puntuacions # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Llista d'indústries STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Cadenes industrials STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Finança una nova indústria # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Construcció de ferrocarril STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Construcció de ferrocarril elèctric STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Construcció de monorail STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construcció de maglev # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Construcció de carreteres STR_ROAD_MENU_TRAM_CONSTRUCTION :Construcció de tramvies # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Construcció de canals # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Construcció d'aeroports # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Modificació del paisatge STR_LANDSCAPING_MENU_PLANT_TREES :Planta arbres STR_LANDSCAPING_MENU_PLACE_SIGN :Situa un senyal # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :So/música # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Darrer missatge/notícia STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Historial de missatges STR_NEWS_MENU_DELETE_ALL_MESSAGES :Esborra tots els missatges # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Informació de la casella STR_ABOUT_MENU_HELP :Ajuda i manuals -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Commuta la consola STR_ABOUT_MENU_AI_DEBUG :Depuració de les IA i l'script de partida STR_ABOUT_MENU_SCREENSHOT :Captura de pantalla diff --git a/src/lang/chuvash.txt b/src/lang/chuvash.txt index 4a97f5217a..3d107a16da 100644 --- a/src/lang/chuvash.txt +++ b/src/lang/chuvash.txt @@ -234,55 +234,38 @@ STR_SETTINGS_MENU_GAME_OPTIONS :Вӑййи ма STR_SETTINGS_MENU_NEWGRF_SETTINGS :NewGRF майлаштару # File menu -###length 5 -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Тух # Map menu -###length 4 # Town menu -###length 2 # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Грантсем # Graph menu -###length 6 # Company league menu -###length 3 # Industry menu -###length 3 # URailway construction menu -###length 4 # Road construction menu -###length 2 # Waterways construction menu -###length 1 # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Аэропорт ҫурт # Landscaping menu -###length 3 # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Сасӑ/Юрӑ-кӗвӗ # Message menu -###length 3 # About menu -###length 12 -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_SCREENSHOT :Экран сӑнӗ STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD' çинчен diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 6b55a490ca..4db0d4b144 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -500,31 +500,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Prozirne građe STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Prozirni znakovi # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Spremi igru STR_FILE_MENU_LOAD_GAME :Učitaj igru STR_FILE_MENU_QUIT_GAME :Napusti igru -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Izlaz # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Karta svijeta STR_MAP_MENU_EXTRA_VIEWPORT :Dodatni pogled STR_MAP_MENU_LINGRAPH_LEGEND :Legenda protoka tereta STR_MAP_MENU_SIGN_LIST :Popis znakova # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Popis gradova STR_TOWN_MENU_FOUND_TOWN :Osnuj grad # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subvencije # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Grafikon operativne dobiti STR_GRAPH_MENU_INCOME_GRAPH :Grafikon prihoda STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Grafikon isporučenog tereta @@ -533,57 +527,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Grafikon vrijed STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Iznosi plaćanja tereta # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Tablica lige tvrtki STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Detaljna ocjena učinka STR_GRAPH_MENU_HIGHSCORE :Tablica najboljih rezultata # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Popis industrija STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Industrijski lanci STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Financiraj novu industriju # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Izgradnja željeznice STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Izgradnja elektrificirane željeznice STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Izgradnja jednotračne željeznice STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Izgradnja Magleva # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Izgradnja ceste STR_ROAD_MENU_TRAM_CONSTRUCTION :Izgradnja tramvaja # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Izgradnja plovnih kanala # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Izgradnja zračne luke # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Uređivanje krajolika STR_LANDSCAPING_MENU_PLANT_TREES :Posadi drveće STR_LANDSCAPING_MENU_PLACE_SIGN :Postavi znak # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Zvuk/glazba # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Poslijednja poruka/vijest STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Povijest poruka STR_NEWS_MENU_DELETE_ALL_MESSAGES :Obriši sve poruke # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Podaci o zemljištu -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Otvori konzolu STR_ABOUT_MENU_AI_DEBUG :Debugiranje UI-ja/Skripte igre STR_ABOUT_MENU_SCREENSHOT :Slika zaslona diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 51dcb5f12f..3d757a6f5a 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -501,31 +501,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Průhledné bud STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Průhledné popisky # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Uložit hru STR_FILE_MENU_LOAD_GAME :Načíst hru STR_FILE_MENU_QUIT_GAME :Ukončit hru -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Ukončit program # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Mapa světa STR_MAP_MENU_EXTRA_VIEWPORT :Další pohled STR_MAP_MENU_LINGRAPH_LEGEND :Legenda toku nákladu STR_MAP_MENU_SIGN_LIST :Seznam popisků # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Seznam měst STR_TOWN_MENU_FOUND_TOWN :Založit město # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Dotace # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Graf provozního zisku STR_GRAPH_MENU_INCOME_GRAPH :Graf příjmů STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Graf doručeného zboží @@ -534,57 +528,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Graf hodnoty sp STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Graf přepravních sazeb # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Tabulka společností STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Podrobné hodnocení výkonu STR_GRAPH_MENU_HIGHSCORE :Nejlepší výsledky # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Seznam průmyslu STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Průmyslové řetězce STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Investovat do průmyslu # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Výstavba železnice STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Výstavba elektrifikované železnice STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Výstavba monorailu STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Výstavba maglevu # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Výstavba silnic STR_ROAD_MENU_TRAM_CONSTRUCTION :Výstavba tramvajové tratě # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Výstavba vodních cest # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Stavba letiště # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Úpravy krajiny STR_LANDSCAPING_MENU_PLANT_TREES :Vysadit stromy STR_LANDSCAPING_MENU_PLACE_SIGN :Umístit nápis # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Zvuk/Hudba # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Poslední zpráva nebo článek STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Historie zpráv STR_NEWS_MENU_DELETE_ALL_MESSAGES :Smazat všechny zprávy # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Informace o zemi -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Zobrazit nebo skrýt konzoli STR_ABOUT_MENU_AI_DEBUG :Ladění AI / herních skriptů STR_ABOUT_MENU_SCREENSHOT :Screenshot diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 45d139e198..f7d676bbd2 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -440,31 +440,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Gennemsigtige b STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Gennemsigtige skilte # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Gem spil STR_FILE_MENU_LOAD_GAME :Fortsæt spil STR_FILE_MENU_QUIT_GAME :Forlad spillet -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Afslut # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Kort over verden STR_MAP_MENU_EXTRA_VIEWPORT :Nyt lokalitetsvindue STR_MAP_MENU_LINGRAPH_LEGEND :Laststrømforklaring STR_MAP_MENU_SIGN_LIST :Liste over skilte # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Byoversigt STR_TOWN_MENU_FOUND_TOWN :Stift by # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Tilskudsordninger # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Graf over afkast STR_GRAPH_MENU_INCOME_GRAPH :Graf over indkomster STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Graf over leveret last @@ -473,58 +467,47 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Graf over selsk STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Graf over lastudbetalingsrater # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Selskabsoversigt STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Detaljeret præstationsoversigt STR_GRAPH_MENU_HIGHSCORE :Topresultater # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Industrioversigt STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Industrikæder STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Finansiér ny industri # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Jernbanekonstruktion STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Elektrisk jernbanekonstruktion STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Monorailkonstruktion STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Magnetskinnekonstruktion # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Vejkonstruktion STR_ROAD_MENU_TRAM_CONSTRUCTION :Sporvejskonstruktion # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Bygning af vandveje # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Lufthavnskonstruktion # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Landskabsværktøjer STR_LANDSCAPING_MENU_PLANT_TREES :Plant træer STR_LANDSCAPING_MENU_PLACE_SIGN :Placer skilt # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Lyd/Musik # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Seneste besked/nyhedsrapport STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Tidligere beskeder STR_NEWS_MENU_DELETE_ALL_MESSAGES :Slet alle beskeder # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Landområde information STR_ABOUT_MENU_HELP :Hjælp & manualer -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Tænd/Sluk konsol STR_ABOUT_MENU_AI_DEBUG :Computerspiller/spilscript debug STR_ABOUT_MENU_SCREENSHOT :Skærmbillede (Ctrl-S) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 65169ea683..34644eac9f 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -440,31 +440,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Transparante ge STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Transparante bordjes # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Spel opslaan STR_FILE_MENU_LOAD_GAME :Spel laden STR_FILE_MENU_QUIT_GAME :Spel sluiten -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Afsluiten # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Wereldkaart STR_MAP_MENU_EXTRA_VIEWPORT :Extra kijkvenster STR_MAP_MENU_LINGRAPH_LEGEND :Legenda vrachtstroom STR_MAP_MENU_SIGN_LIST :Bordjeslijst # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Stedenlijst STR_TOWN_MENU_FOUND_TOWN :Stad stichten # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subsidies # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Grafiek van operationele winst STR_GRAPH_MENU_INCOME_GRAPH :Grafiek van inkomsten STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Grafiek van afgeleverde vracht @@ -473,58 +467,47 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Grafiek van bed STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Vrachtprijzen # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Bedrijfsscoretabel STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Gedetailleerde prestatiescore STR_GRAPH_MENU_HIGHSCORE :Scoretabel # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Industrielijst STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Industrieketens STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Betaal nieuwe industrie # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Spoorwegen bouwen STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Geëlektrificeerde spoorwegen bouwen STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Monorailspoorwegen bouwen STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Zweeftreinspoorwegen bouwen # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Wegen bouwen STR_ROAD_MENU_TRAM_CONSTRUCTION :Tramsporen bouwen # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Waterwegen bouwen # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Vliegvelden bouwen # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Terreinaanpassing STR_LANDSCAPING_MENU_PLANT_TREES :Bomen planten STR_LANDSCAPING_MENU_PLACE_SIGN :Bord plaatsen # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Geluid/muziek # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Laatste (nieuws)bericht STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Berichtengeschiedenis STR_NEWS_MENU_DELETE_ALL_MESSAGES :Alle berichten verwijderen # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Landinformatie STR_ABOUT_MENU_HELP :Help en handleidingen -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Console in-uitschakelen STR_ABOUT_MENU_AI_DEBUG :Probleemoplossing AI/spelscript STR_ABOUT_MENU_SCREENSHOT :Schermfoto diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index eb72d13859..a00ba4f135 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -440,31 +440,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Transparent bui STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Transparent signs # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Save game STR_FILE_MENU_LOAD_GAME :Load game STR_FILE_MENU_QUIT_GAME :Abandon game -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Exit # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Map of world STR_MAP_MENU_EXTRA_VIEWPORT :Extra viewport STR_MAP_MENU_LINGRAPH_LEGEND :Cargo flow legend STR_MAP_MENU_SIGN_LIST :Sign list # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Town directory STR_TOWN_MENU_FOUND_TOWN :Found town # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subsidies # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Operating profit graph STR_GRAPH_MENU_INCOME_GRAPH :Income graph STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Delivered cargo graph @@ -473,58 +467,47 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Company value g STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Cargo payment rates # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Company league table STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Detailed performance rating STR_GRAPH_MENU_HIGHSCORE :Highscore table # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Industry directory STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Industry chains STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Fund new industry # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Railway construction STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Electrified railway construction STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Monorail construction STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Maglev construction # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Road construction STR_ROAD_MENU_TRAM_CONSTRUCTION :Tramway construction # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Waterways construction # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Airport construction # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Landscaping STR_LANDSCAPING_MENU_PLANT_TREES :Plant trees STR_LANDSCAPING_MENU_PLACE_SIGN :Place sign # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Sound/music # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Last message/news report STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Message history STR_NEWS_MENU_DELETE_ALL_MESSAGES :Delete all messages # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Land area information STR_ABOUT_MENU_HELP :Help & manuals -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Toggle console STR_ABOUT_MENU_AI_DEBUG :AI/Game script debug STR_ABOUT_MENU_SCREENSHOT :Screenshot diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 258e12f94e..158e732051 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -440,31 +440,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Transparent bui STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Transparent signs # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Save game STR_FILE_MENU_LOAD_GAME :Load game STR_FILE_MENU_QUIT_GAME :Abandon game -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Quit # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Map of world STR_MAP_MENU_EXTRA_VIEWPORT :Extra viewport STR_MAP_MENU_LINGRAPH_LEGEND :Cargo flow legend STR_MAP_MENU_SIGN_LIST :Sign list # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Town directory STR_TOWN_MENU_FOUND_TOWN :Found town # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subsidies # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Operating profit graph STR_GRAPH_MENU_INCOME_GRAPH :Income graph STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Delivered cargo graph @@ -473,58 +467,47 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Company value g STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Cargo payment rates # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Company league table STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Detailed performance rating STR_GRAPH_MENU_HIGHSCORE :Highscore table # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Industry directory STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Industry chains STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Fund new industry # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Railroad construction STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Electrified railroad construction STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Monorail construction STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Maglev construction # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Road construction STR_ROAD_MENU_TRAM_CONSTRUCTION :Streetcar construction # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Waterways construction # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Airport construction # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Landscaping STR_LANDSCAPING_MENU_PLANT_TREES :Plant trees STR_LANDSCAPING_MENU_PLACE_SIGN :Place sign # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Sound/music # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Last message/news report STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Message history STR_NEWS_MENU_DELETE_ALL_MESSAGES :Delete all messages # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Land area information STR_ABOUT_MENU_HELP :Help & manuals -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Toggle console STR_ABOUT_MENU_AI_DEBUG :AI/Game script debug STR_ABOUT_MENU_SCREENSHOT :Screenshot diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index ed74133028..44e658c324 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -503,31 +503,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Travideblaj kon STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Travideblaj signoj # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Konservu ludon STR_FILE_MENU_LOAD_GAME :Ŝarĝu ludon STR_FILE_MENU_QUIT_GAME :Foriru de la ludo -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Fermu # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Mondomapo STR_MAP_MENU_EXTRA_VIEWPORT :Plia vidujo STR_MAP_MENU_LINGRAPH_LEGEND :Klarigeto de ŝarĝfluo STR_MAP_MENU_SIGN_LIST :Listo de ŝildoj # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Urba katalogo STR_TOWN_MENU_FOUND_TOWN :Urbo troviĝas. # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subvencioj # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Gajna grafiko STR_GRAPH_MENU_INCOME_GRAPH :Enspeza grafiko STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Liveriteca grafiko @@ -536,57 +530,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Kompanivalora g STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Ŝarĝpaga grafiko # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Kompaniara tabelo STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Detala rendimento STR_GRAPH_MENU_HIGHSCORE :Altpoentara tabelo # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Industria katalogo STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Industriaj ĉenoj STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Fondu novan industrion # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Fervoja Konstruado STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Elektrofervoja konstruado STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Unurelfervoja konstruado STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Maglevfervoja konstruado # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Vojkonstruado STR_ROAD_MENU_TRAM_CONSTRUCTION :Konstruado de tramvojo # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Konstruado de akvovojoj # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Flughavena konstruado # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Landaspektigi STR_LANDSCAPING_MENU_PLANT_TREES :Plantu arbojn STR_LANDSCAPING_MENU_PLACE_SIGN :Metu signon # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Sono/muziko # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Lasta mesaĝo/novaĵo STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Mesaĝa Historio STR_NEWS_MENU_DELETE_ALL_MESSAGES :Forigu ĉiujn mesaĝojn # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Landkvadrataj informoj -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Baskuligi Konzolon STR_ABOUT_MENU_AI_DEBUG :AI/Ludoskripta sencimigo STR_ABOUT_MENU_SCREENSHOT :Ekranfoto diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 6773e4acee..e68b1144b4 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -479,31 +479,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Läbipaistvad h STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Läbipaistvad sildid # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Mängu salvestamine STR_FILE_MENU_LOAD_GAME :Mängu jätkamine STR_FILE_MENU_QUIT_GAME :Lahku mängust -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Välju # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Maailmakaart STR_MAP_MENU_EXTRA_VIEWPORT :Lisa vaateaken STR_MAP_MENU_LINGRAPH_LEGEND :Kaubavoo legend STR_MAP_MENU_SIGN_LIST :Siltide register # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Asustuste register STR_TOWN_MENU_FOUND_TOWN :Raja asustus # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Toetused # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Opereerimiskasumi graafik STR_GRAPH_MENU_INCOME_GRAPH :Tulugraafik STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Äraveetud kauba graafik @@ -512,57 +506,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Firmaväärtust STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Veotasude määrad # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Ettevõtete edetabel STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Täpsustatud tulemushinnang STR_GRAPH_MENU_HIGHSCORE :Edetabel # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Tööstuste register STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Tööstuste ahel STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Uue tööstuse rahastamine # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Rööbastee ehitamine STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Elektriraudtee ehitamine STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Monorelsi ehitamine STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Magnethõljuktee ehitamine # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Maanteede ehitamine STR_ROAD_MENU_TRAM_CONSTRUCTION :Trammiteede ehitamine # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Veeteede ehitamine # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Lennuväljade ehitamine # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Maapinna kujundamine STR_LANDSCAPING_MENU_PLANT_TREES :Puude istutamine STR_LANDSCAPING_MENU_PLACE_SIGN :Paigalda silt # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Heli/muusika # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Viimane teade STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Teadete ajalugu STR_NEWS_MENU_DELETE_ALL_MESSAGES :Kustuta kõik teated # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Maa-ala andmed -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Lülita konsool sisse/välja STR_ABOUT_MENU_AI_DEBUG :AI/GameScripti debugimine STR_ABOUT_MENU_SCREENSHOT :Ekraanipilt diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 072ed31c9c..19271e3574 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -373,30 +373,24 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Gjøgnumskygdir STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Gjøgnumskygd statións skelti # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Goym spæl STR_FILE_MENU_LOAD_GAME :Heinta spæl STR_FILE_MENU_QUIT_GAME :Far frá spæli -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Gevst # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Heimskort STR_MAP_MENU_EXTRA_VIEWPORT :Eyka synisgluggi STR_MAP_MENU_SIGN_LIST :Listi yvur tekin # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Bygdar yvirlit STR_TOWN_MENU_FOUND_TOWN :Funnar bygdir # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Stuðulsflutningur # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Grafur fyri rakstrar vinning STR_GRAPH_MENU_INCOME_GRAPH :Inntøku grafur STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Grafur fyri útflýggjaðan farm @@ -405,56 +399,45 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Grafur fyri vir STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Farma gjald takstur # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Yvirlit fyri Fyritøku Deildina STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Avriks meting í smálutum STR_GRAPH_MENU_HIGHSCORE :Hástigs yvirlit # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Ídnaðar yvirlit STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Ídnaðar ketur STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Fíggja nýggjan ídnað # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Jarnbreyta bygging STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Ravmagns jarnbreyta bygging STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Einsporað jarnbreyta bygging STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Maglev bygging # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Vegagerð STR_ROAD_MENU_TRAM_CONSTRUCTION :Sporvega bygging # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Siglingarrennu bygging # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Floghavns bygging # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Landslags broyting STR_LANDSCAPING_MENU_PLANT_TREES :Planta trø STR_LANDSCAPING_MENU_PLACE_SIGN :Set tekin # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Ljóð/ tónleik # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Seinastu boð/tíðinda frásøgn STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Boð søga # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Landa økis kunning -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Console opið ella lukka STR_ABOUT_MENU_AI_DEBUG :AI/Spæl script debug STR_ABOUT_MENU_SCREENSHOT :Skermmynd diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 991dc1b987..0b13d27a4c 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -440,31 +440,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Läpinäkyvät STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Läpinäkyvät kyltit # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Tallenna peli STR_FILE_MENU_LOAD_GAME :Lataa peli STR_FILE_MENU_QUIT_GAME :Lopeta peli -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Sulje # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Maailmankartta STR_MAP_MENU_EXTRA_VIEWPORT :Lisänäkymä STR_MAP_MENU_LINGRAPH_LEGEND :Rahtivirran selitys STR_MAP_MENU_SIGN_LIST :Kylttilista # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Kuntahakemisto STR_TOWN_MENU_FOUND_TOWN :Perusta kunta # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Tuet # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Liikevoitto STR_GRAPH_MENU_INCOME_GRAPH :Tulot STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Kuljetettu rahti @@ -473,58 +467,47 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Yhtiön arvo STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Rahtitaksat # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Yhtiökilpataulukko STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Suoritearviointi STR_GRAPH_MENU_HIGHSCORE :Pistetaulukko # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Teollisuushakemisto STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Teollisuusketjut STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Rakenna uutta teollisuutta # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Rautatien rakentaminen STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Sähköradan rakentaminen STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Yksiraiteisen rakentaminen STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Maglevin rakentaminen # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Tien rakentaminen STR_ROAD_MENU_TRAM_CONSTRUCTION :Raitiotien rakentaminen # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Vesireittien rakentaminen # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Lentokentän rakentaminen # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Maastonmuokkaus STR_LANDSCAPING_MENU_PLANT_TREES :Istuta puita STR_LANDSCAPING_MENU_PLACE_SIGN :Aseta kyltti # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Ääni/musiikki # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Viimeisin viesti/uutisraportti STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Viestihistoria STR_NEWS_MENU_DELETE_ALL_MESSAGES :Poista kaikki viestit # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Maa-alueen tiedot STR_ABOUT_MENU_HELP :Ohjeet ja oppaat -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Konsoli STR_ABOUT_MENU_AI_DEBUG :Tekoälyn/peliskriptin virheenjäljitys STR_ABOUT_MENU_SCREENSHOT :Kuvakaappaus diff --git a/src/lang/french.txt b/src/lang/french.txt index 36c9ea69e8..4bb33af182 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -441,31 +441,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Édifices trans STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Panneaux transparents # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Sauvegarder la partie STR_FILE_MENU_LOAD_GAME :Charger une partie STR_FILE_MENU_QUIT_GAME :Abandonner la partie -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Quitter le jeu # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Carte du monde STR_MAP_MENU_EXTRA_VIEWPORT :Vue supplémentaire STR_MAP_MENU_LINGRAPH_LEGEND :Légende du flux de marchandises STR_MAP_MENU_SIGN_LIST :Liste des panneaux # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Annuaire des villes STR_TOWN_MENU_FOUND_TOWN :Fonder une ville # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subventions # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Profit d'opération STR_GRAPH_MENU_INCOME_GRAPH :Revenu STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Cargaison livrée @@ -474,58 +468,47 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Valeur de la co STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Valeur des marchandises # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Classement des compagnies STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Détail des performances STR_GRAPH_MENU_HIGHSCORE :Meilleurs scores # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Annuaire des industries STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Chaînes des industries STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Financer une nouvelle industrie # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Construction de voie ferrée STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Construction de voie ferrée électrifiée STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Construction de Monorail STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construction de Maglev # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Construction routière STR_ROAD_MENU_TRAM_CONSTRUCTION :Construction de tramway # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Construction de voies navigables # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Construction d'aéroports # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Modification du paysage STR_LANDSCAPING_MENU_PLANT_TREES :Planter des arbres STR_LANDSCAPING_MENU_PLACE_SIGN :Placer un panneau # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Son/Musique # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Message/Bulletin précédent STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Historique des messages STR_NEWS_MENU_DELETE_ALL_MESSAGES :Effacer tous les messages # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Outil d'inspection du paysage STR_ABOUT_MENU_HELP :Aide et manuels -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Afficher/Cacher la console STR_ABOUT_MENU_AI_DEBUG :Débogage de scripts STR_ABOUT_MENU_SCREENSHOT :Copie d'écran diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index 722d0507cf..6bc3958d5c 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -395,31 +395,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Trochsichtige g STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Trochsichtige nammen # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Spul opslaan STR_FILE_MENU_LOAD_GAME :Spul lade STR_FILE_MENU_QUIT_GAME :Spul ferlitte -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Ôfslute # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Wrâldkaart STR_MAP_MENU_EXTRA_VIEWPORT :Ekstra finster STR_MAP_MENU_LINGRAPH_LEGEND :Frachtstreamleginda STR_MAP_MENU_SIGN_LIST :Buordsjeslist # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Stêdlist STR_TOWN_MENU_FOUND_TOWN :In stêd stichte # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subsydzjes # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Fertsjinstengrafyk STR_GRAPH_MENU_INCOME_GRAPH :Ynkomstengrafyk STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Oflevere frachtgrafyk @@ -428,56 +422,45 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Bedriuwsweardeg STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Frachtprizengrafyk # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Bedriuwskompetysjetabel STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Wiidweidiche prestaasjewurdearring STR_GRAPH_MENU_HIGHSCORE :Topskoretabel # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Yndustrylist STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Yndustrykeatlings STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Nije yndustry finansierje # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Spoarwei bouwe STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Elektifisearre spoarwei bouwe STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Monorail bouwe STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Maglev bouwe # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Wegen bouwe STR_ROAD_MENU_TRAM_CONSTRUCTION :Tramwei bouwe # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Wetterwei bouwe # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Fleanfjild bouwe # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Lânskipsfoarming STR_LANDSCAPING_MENU_PLANT_TREES :Plantsje beammen STR_LANDSCAPING_MENU_PLACE_SIGN :Buordsje delsette # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Lûd/musyk # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Lêtste (nijs)berjocht STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Berjochtenskiednis # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Gebietsynformaasje -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Skeakel console oan/ût STR_ABOUT_MENU_AI_DEBUG :AI/Gamescript debug STR_ABOUT_MENU_SCREENSHOT :Skermôfbylding diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index e673f71cf4..c3e772aac9 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -582,31 +582,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Togalaichean tr STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Sanasan trìd-sholleir # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Sàbhail an geama STR_FILE_MENU_LOAD_GAME :Luchdaich geama STR_FILE_MENU_QUIT_GAME :Fàg an geama -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Fàg an-seo # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Mapa an t-saoghail STR_MAP_MENU_EXTRA_VIEWPORT :Port-seallaidh a bharrachd STR_MAP_MENU_LINGRAPH_LEGEND :Clàr-mìneachaidh an t-srutha carago STR_MAP_MENU_SIGN_LIST :Liosta nan sanas # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Eòlaire nam bailtean STR_TOWN_MENU_FOUND_TOWN :Baile air a lorg # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Tarrailean # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Graf air prothaid-obrachaidh STR_GRAPH_MENU_INCOME_GRAPH :Graf air teachd a-steach STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Graf air carago air a lìbhrigeadh @@ -615,56 +609,45 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Graf air luach STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Reataichean pàighidh carago # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Clàr co-bhann nan companaidh STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Mion-rangachadh dèanadais STR_GRAPH_MENU_HIGHSCORE :Liosta nan sgòran àrda # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Eòlaire nan gnìomhachas STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Sreathan nan gnìomhachas STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Maoinich gnìomhachas ùr # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Togail rathaid-iarainn STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Togail rathaid-iarainn dealain STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Togail rathaid-iarainn aona-rèile STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Togail rathaid-iarainn magnaiteach # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Togail rathaidean STR_ROAD_MENU_TRAM_CONSTRUCTION :Togail slighe-trama # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Togail slighe-uisge # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Togail puirt-adhair # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Cruth-tìre STR_LANDSCAPING_MENU_PLANT_TREES :Cuir craobhan STR_LANDSCAPING_MENU_PLACE_SIGN :Cuir sanas # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Fuaim/ceòl # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Am brath/aithris naidheachd mu dheireadh STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Eachdraidh nam brath # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Fiosrachadh raon tìre -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Toglaich a' chonsoil STR_ABOUT_MENU_AI_DEBUG :Dì-bhugaich IF/sgriobt geama STR_ABOUT_MENU_SCREENSHOT :Glacadh-sgrìn diff --git a/src/lang/galician.txt b/src/lang/galician.txt index b2d105c665..b9ba1b95f9 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -424,31 +424,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Construccións STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Rótulos transparentes # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Gravar partida STR_FILE_MENU_LOAD_GAME :Cargar partida STR_FILE_MENU_QUIT_GAME :Abandonar partida -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Saír # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Mapa do mundo STR_MAP_MENU_EXTRA_VIEWPORT :Xanela extra STR_MAP_MENU_LINGRAPH_LEGEND :Lenda de tomar carga STR_MAP_MENU_SIGN_LIST :Lista de rótulos # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Directorio de cidades STR_TOWN_MENU_FOUND_TOWN :Fundar poboación # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subvencións # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Gráfica de beneficio operativo STR_GRAPH_MENU_INCOME_GRAPH :Gráfica de ingresos STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Gráfica de carga entregada @@ -457,57 +451,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Gráfica de val STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Taxas de pago por carga # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Cadro da liga de compañías STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Puntuación de rendemento detallada STR_GRAPH_MENU_HIGHSCORE :Táboa de máximas puntuacións # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Directorio de industrias STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Cadeas industriais STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Financiar nova industria # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Construción de ferrocarrís STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Construción de ferrocarrís eléctricos STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Construción de monorraíl STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construción de Maglev # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Construción de estradas STR_ROAD_MENU_TRAM_CONSTRUCTION :Construción de vías de tranvía # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Construción de canles # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Construción de aeroportos # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Paisaxe STR_LANDSCAPING_MENU_PLANT_TREES :Plantar árbores STR_LANDSCAPING_MENU_PLACE_SIGN :Colocar rótulo # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Son/música # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Última mensaxe/nova STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Historial de mensaxes STR_NEWS_MENU_DELETE_ALL_MESSAGES :Borrar tódalas mensaxes # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Información de área de terreo -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :(Des)Activar consola STR_ABOUT_MENU_AI_DEBUG :Depuración IA/script do xogo STR_ABOUT_MENU_SCREENSHOT :Captura de pantalla diff --git a/src/lang/german.txt b/src/lang/german.txt index ad88809dc9..3684132d09 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -441,31 +441,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Transparenz fü STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Transparenz für Schilder # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Spiel speichern STR_FILE_MENU_LOAD_GAME :Spiel laden STR_FILE_MENU_QUIT_GAME :Spiel beenden -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :OpenTTD beenden # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Weltkarte STR_MAP_MENU_EXTRA_VIEWPORT :Zusatzansicht STR_MAP_MENU_LINGRAPH_LEGEND :Frachtverbindungen STR_MAP_MENU_SIGN_LIST :Schilderliste # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Städteverzeichnis STR_TOWN_MENU_FOUND_TOWN :Stadt gründen # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subventionen # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Betriebsgewinndiagramm STR_GRAPH_MENU_INCOME_GRAPH :Einkommensdiagramm STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Frachtlieferungsdiagramm @@ -474,58 +468,47 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Firmenwertdiagr STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Frachtratendiagramm # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Firmentabelle STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Leistungsaufschlüsselung STR_GRAPH_MENU_HIGHSCORE :Bestenliste # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Industrieverzeichnis STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Wirtschaftsketten STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Neue Industrie finanzieren # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Gleisbau STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Bau elektrifizierter Strecken STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Einschienenbahnbau STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Magnetschwebebahnbau # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Straßenbau STR_ROAD_MENU_TRAM_CONSTRUCTION :Straßenbahnbau # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Wasserstraßenbau # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Flughafenbau # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Landschaftsbau STR_LANDSCAPING_MENU_PLANT_TREES :Bäume pflanzen STR_LANDSCAPING_MENU_PLACE_SIGN :Schild aufstellen # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Sound/Musik # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Letzte Mitteilung/Nachricht STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Vergangene Nachrichten STR_NEWS_MENU_DELETE_ALL_MESSAGES :Alle Nachrichten löschen # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Gebietsinformationen STR_ABOUT_MENU_HELP :Hilfe u. Anleitungen -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Konsole öffnen/schließen STR_ABOUT_MENU_AI_DEBUG :KI-/Skript-Debug STR_ABOUT_MENU_SCREENSHOT :Screenshot (Standard: Strg+S) diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 5432f984b0..5a13ce0e9a 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -482,31 +482,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Διαφανέ STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Διάφανες ταμπέλες # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Αποθήκευση παιχνιδιού STR_FILE_MENU_LOAD_GAME :Φόρτωση παιχνιδιού STR_FILE_MENU_QUIT_GAME :Έξοδος από το παιχνίδι -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Έξοδος # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Χάρτης του κόσμου STR_MAP_MENU_EXTRA_VIEWPORT :Πρόσθετη εμφάνιση STR_MAP_MENU_LINGRAPH_LEGEND :Υπόμνημα Ροής Φορτίου STR_MAP_MENU_SIGN_LIST :Λίστα πινακίδων # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Καταλογος πόλεων STR_TOWN_MENU_FOUND_TOWN :Ιδρύση πόλης # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Χρηματοδοτήσεις # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Γράφημα λειτουργικού κέρδους STR_GRAPH_MENU_INCOME_GRAPH :Γράφημα εισοδήματος STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Γράφημα παραδοθέντος φορτίου @@ -515,57 +509,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Γράφημα STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Ποσοστά πληρωμής φορτίου # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Πίνακας κατάταξης επιχειρήσεων STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Λεπτομερής εκτίμηση απόδοσης STR_GRAPH_MENU_HIGHSCORE :Πίνακας βαθμολογίας # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Κατάλογος Βιομηχανιών STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Αλυσίδες βιομηχανιών STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Χρηματοδότηση νέας βιομηχανίας # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Κατασκευή σιδηρόδρομου STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Κατασκευή ηλεκτροδοτουμένου σιδηρόδρομου STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Κατασκευή μονοτρόχιου STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Κατασκευή Maglev # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Κατασκευή δρόμου STR_ROAD_MENU_TRAM_CONSTRUCTION :Κατασκευή τροχιόδρομου # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Κατασκευή καναλιού νερού # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Κατασκευή αεροδρομίου # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Μορφοποίηση εδάφους STR_LANDSCAPING_MENU_PLANT_TREES :Φύτευση δέντρων STR_LANDSCAPING_MENU_PLACE_SIGN :Τοποθέτηση πινακίδας # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Ήχος/Μουσική # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Τελευταίο μήνυμα/αναφορά ειδήσεων STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Ιστορικό μηνυμάτων STR_NEWS_MENU_DELETE_ALL_MESSAGES :Διαγραφή όλων των μηνυμάτων # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Πληροφορίες περιοχής εδάφους -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Εναλλαγή κονσόλας STR_ABOUT_MENU_AI_DEBUG :Αποσφαλμάτωση AI και δέσμης ενεργειών παιχνιδιού STR_ABOUT_MENU_SCREENSHOT :Στιγμιότυπο οθόνης diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 31e35e322e..57ff59d2e6 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -411,31 +411,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :בניינים STR_SETTINGS_MENU_TRANSPARENT_SIGNS :שלטים שקופים # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :שמור משחק STR_FILE_MENU_LOAD_GAME :טען משחק STR_FILE_MENU_QUIT_GAME :עזוב משחק -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :יציאה # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :מפת העולם STR_MAP_MENU_EXTRA_VIEWPORT :השקפה נוספת STR_MAP_MENU_LINGRAPH_LEGEND :מקרא זרימת מטענים STR_MAP_MENU_SIGN_LIST :רשימת שלטים # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :מדריך הערים STR_TOWN_MENU_FOUND_TOWN :ייסד עיר # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :סובסידיות # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :גרף רווח תפעולי STR_GRAPH_MENU_INCOME_GRAPH :גרף הכנסות STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :גרף שינוע מטענים @@ -444,56 +438,45 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :גרף שווי STR_GRAPH_MENU_CARGO_PAYMENT_RATES :שערי תשלום עבור שירותי הובלה # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :טבלת ליגת החברות STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :דירוג ביצועים מפורט STR_GRAPH_MENU_HIGHSCORE :טבלת ניקוד מירבי # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :ספריית תעשיות STR_INDUSTRY_MENU_INDUSTRY_CHAIN :שרשראות תעשיה STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :ממן תעשיה חדשה # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :בניית מסילות STR_RAIL_MENU_ELRAIL_CONSTRUCTION :בניית מסילות רכבת מחושמלות STR_RAIL_MENU_MONORAIL_CONSTRUCTION :בניית מסילות חד פסיות STR_RAIL_MENU_MAGLEV_CONSTRUCTION :בניית מסילות מגנטיות # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :סלילת כבישים STR_ROAD_MENU_TRAM_CONSTRUCTION :בניית מסילה חשמלית # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :בניית נתיבי מים # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :בניית שדה תעופה # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :עיצוב פני השטח STR_LANDSCAPING_MENU_PLANT_TREES :נטע עצים STR_LANDSCAPING_MENU_PLACE_SIGN :מקם סימניות # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :צלילים/מנגינה # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :הודעה אחרונה/מבזק חדשות אחרון STR_NEWS_MENU_MESSAGE_HISTORY_MENU :היסטורית הודעות # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :מידע על שטח קרקע -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :פתח/סגור קונסולה STR_ABOUT_MENU_AI_DEBUG :דיבאג של סקריפטים של בינה מלאכותית או של המשחק STR_ABOUT_MENU_SCREENSHOT :צילום מסך diff --git a/src/lang/hindi.txt b/src/lang/hindi.txt index 07ed1715c0..25765efc16 100644 --- a/src/lang/hindi.txt +++ b/src/lang/hindi.txt @@ -133,53 +133,36 @@ STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :पथ-सं STR_SETTINGS_MENU_TRANSPARENT_SIGNS :पारदर्शी संकेत # File menu -###length 5 -STR_FILE_MENU_SEPARATOR : # Map menu -###length 4 # Town menu -###length 2 # Subsidies menu -###length 1 # Graph menu -###length 6 # Company league menu -###length 3 # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_CHAIN :औद्योगिक शृंखला # URailway construction menu -###length 4 STR_RAIL_MENU_ELRAIL_CONSTRUCTION :विद्युतिकृत रेलवे निर्माण # Road construction menu -###length 2 # Waterways construction menu -###length 1 # Aairport construction menu -###length 1 # Landscaping menu -###length 3 # Music menu -###length 1 # Message menu -###length 3 # About menu -###length 12 -STR_ABOUT_MENU_SEPARATOR : # Place in highscore window ###length 15 diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 76ecc7c290..38b585d9dd 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -503,31 +503,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Átlátszó ép STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Átlátszó feliratok # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Játék mentése STR_FILE_MENU_LOAD_GAME :Játék betöltése STR_FILE_MENU_QUIT_GAME :Kilépés a játékból -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Kilépés # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Világtérkép STR_MAP_MENU_EXTRA_VIEWPORT :Extra látkép STR_MAP_MENU_LINGRAPH_LEGEND :Rakományáramlási jelmagyarázat STR_MAP_MENU_SIGN_LIST :Feliratok listája # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Városlista STR_TOWN_MENU_FOUND_TOWN :Új város alapítása # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Támogatások # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Működési nyereség grafikon STR_GRAPH_MENU_INCOME_GRAPH :Bevétel grafikon STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Elszállított rakomány grafikon @@ -536,58 +530,47 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Vállalat ért STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Rakományok szállítási díja # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Vállalatok helyezései STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Teljesítményértékelések részletezése STR_GRAPH_MENU_HIGHSCORE :Rekord Tábla # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Gazdasági épületek listája STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Ipari lánc STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Új gazdasági épület építése # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Normál vasút építése STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Villamosított vasút építése STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Egysínű vasút építése STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Maglev vasút építése # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Út építése STR_ROAD_MENU_TRAM_CONSTRUCTION :Villamospálya építése # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Vízi út építése # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Repülőtér építése # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Tájrendezés STR_LANDSCAPING_MENU_PLANT_TREES :Faültetés STR_LANDSCAPING_MENU_PLACE_SIGN :Felirat lerakása # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Hang/zene # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Legutóbbi üzenet/újsághír STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Előző üzenetek STR_NEWS_MENU_DELETE_ALL_MESSAGES :Az összes üzenet törlése # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Terület-információ STR_ABOUT_MENU_HELP :Súgó és útmutatók -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Átváltás konzolra STR_ABOUT_MENU_AI_DEBUG :MI / Játékszkript nyomkövetés STR_ABOUT_MENU_SCREENSHOT :Képmentés diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index a75123cd0b..cf406dc2c1 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -373,30 +373,24 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Gegnsæjar bygg STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Gegnsæ skilti # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Vista leik STR_FILE_MENU_LOAD_GAME :Opna leik STR_FILE_MENU_QUIT_GAME :Hætta leik -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Hætta # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Heimskort STR_MAP_MENU_EXTRA_VIEWPORT :Auka sjónarhorn STR_MAP_MENU_SIGN_LIST :Skiltalisti # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Listi yfir bæi STR_TOWN_MENU_FOUND_TOWN :Fann bæ # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Samstarfssamningar # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Línurit: Rekstrarhagnaður STR_GRAPH_MENU_INCOME_GRAPH :Línurit: Tekjur STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Línurit: Fluttur farmur @@ -405,56 +399,45 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Línurit: Verð STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Línurit: Flutningsgróði # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Stigatafla fyrirtækja STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Nákvæm frammistöðumæling STR_GRAPH_MENU_HIGHSCORE :Stigatafla # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Fyrirtækjaskrá STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Tengdur iðnaður STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Fjármagna nýjan iðnað # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Járnbrautarspors framkvæmdir STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Rafmagnsspora framkvæmdir STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Einteinungsframkvæmdir STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Segulsvifvagna framkvæmdir # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Vegagerð STR_ROAD_MENU_TRAM_CONSTRUCTION :Sporvagnaframkvæmdir # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Vatnaframkvæmdir # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Flugvallarframkvæmdir # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Mótun lands STR_LANDSCAPING_MENU_PLANT_TREES :Gróðursetja tré STR_LANDSCAPING_MENU_PLACE_SIGN :Setja skilti # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Hljóð/tónlist # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Síðustu skilaboð/frétt STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Saga skilaboða # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Landssvæðisupplýsingar -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Kveikja á stýriskjá STR_ABOUT_MENU_AI_DEBUG :Aflúsun gervigreindar/forskrifta STR_ABOUT_MENU_SCREENSHOT :Skjámynd diff --git a/src/lang/ido.txt b/src/lang/ido.txt index fcf9653fdf..e208ff94d6 100644 --- a/src/lang/ido.txt +++ b/src/lang/ido.txt @@ -295,58 +295,42 @@ STR_SETTINGS_MENU_FULL_DETAIL :Plene detaloza STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Diafana konstrukturi # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Salvas ludo STR_FILE_MENU_LOAD_GAME :Kargas ludo STR_FILE_MENU_QUIT_GAME :Abandonas ludo -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Ekiras # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Mapo di mondo STR_MAP_MENU_SIGN_LIST :Listo di signi # Town menu -###length 2 # Subsidies menu -###length 1 # Graph menu -###length 6 STR_GRAPH_MENU_INCOME_GRAPH :Revenuo grafiko STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Livrita kargajo grafiko # Company league menu -###length 3 # Industry menu -###length 3 # URailway construction menu -###length 4 # Road construction menu -###length 2 # Waterways construction menu -###length 1 # Aairport construction menu -###length 1 # Landscaping menu -###length 3 # Music menu -###length 1 # Message menu -###length 3 # About menu -###length 12 # Place in highscore window ###length 15 diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index c9bdd7e8e1..17167745ad 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -440,31 +440,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Transparankan b STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Transparankan tanda-tanda # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Simpan permainan STR_FILE_MENU_LOAD_GAME :Buka Permainan STR_FILE_MENU_QUIT_GAME :Batalkan permainan -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Keluar # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Peta Dunia STR_MAP_MENU_EXTRA_VIEWPORT :Viewport ekstra STR_MAP_MENU_LINGRAPH_LEGEND :Legenda aliran kargo STR_MAP_MENU_SIGN_LIST :Daftar Tanda # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Daftar kota STR_TOWN_MENU_FOUND_TOWN :Bangun Kota # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subsidi # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Grafik keuntungan operasional STR_GRAPH_MENU_INCOME_GRAPH :Grafik Pendapatan STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Grafik kargo terkirim @@ -473,58 +467,47 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Grafik Aset Per STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Daftar biaya kargo # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Tabel Perusahaan STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Penilaian terperinci kinerja STR_GRAPH_MENU_HIGHSCORE :Tabel Skor # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Daftar Industri STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Rantai industri STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Danai industri baru # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Pembangunan Rel STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Pembangunan Rel Kereta Listrik STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Pembangunan Monorel STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Pembangunan Maglev # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Pembangunan jalan STR_ROAD_MENU_TRAM_CONSTRUCTION :Pembangunan Jalur Tram # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Konstruksi Perairan. # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Konstruksi Bandara # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Proses Landsekap STR_LANDSCAPING_MENU_PLANT_TREES :Menanam pohon STR_LANDSCAPING_MENU_PLACE_SIGN :Memasang pengenal # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Suara/musik # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Pesan/Berita terakhir STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Berita Lampau STR_NEWS_MENU_DELETE_ALL_MESSAGES :Hapus semua pesan # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Informasi area daratan STR_ABOUT_MENU_HELP :Bantuan & panduan -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Hidup/matikan Layar Konsol STR_ABOUT_MENU_AI_DEBUG :Debug skrip AI/Permainan STR_ABOUT_MENU_SCREENSHOT :Ambil gambar diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 7437cee17c..a446fc7715 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -411,31 +411,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Foignimh trédh STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Comharthaí trédhearcacha # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Sábháil an cluiche STR_FILE_MENU_LOAD_GAME :Lódáil cluiche STR_FILE_MENU_QUIT_GAME :Fág an cluiche -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Scoir # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Léarscáil den domhan STR_MAP_MENU_EXTRA_VIEWPORT :Fuinneog amhairc bhreise STR_MAP_MENU_LINGRAPH_LEGEND :Eochair an tSreafa Lastais STR_MAP_MENU_SIGN_LIST :Liosta na gcomharthaí # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Liosta bailte STR_TOWN_MENU_FOUND_TOWN :Aimsíodh baile # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Fóirdheontais # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Graf den bhrabús oibriúcháin STR_GRAPH_MENU_INCOME_GRAPH :Graf den ioncam STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Graf den lastas a seachadadh @@ -444,57 +438,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Graf de luach n STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Rátaí íocaíochta do lastas # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Tábla sraithe na gcuideachtaí STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Rátáil feidhmíochta mionsonraithe STR_GRAPH_MENU_HIGHSCORE :Tábla na n-ardscór # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Liosta de na tionscail STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Slabhraí na dtionscal STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Déan maoiniú ar thionscal nua # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Tógáil iarnróid STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Tógáil iarnróid leictrithe STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Tógáil iarnród aonráille STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Tógáil maglev # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Tógáil bóithre STR_ROAD_MENU_TRAM_CONSTRUCTION :Tógáil trambhealaigh # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Tógáil uiscebhealaí # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Tógáil aerfoirt # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Tírdhreachú STR_LANDSCAPING_MENU_PLANT_TREES :Crainnte a chur STR_LANDSCAPING_MENU_PLACE_SIGN :Comhartha a chur # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Fuaim/ceol # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Teachtaireacht/tuairisc nuachta deiridh STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Stair na dteachtaireachtaí STR_NEWS_MENU_DELETE_ALL_MESSAGES :Scrios gach teachtaireacht # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Faisnéis faoin limistéar talún -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Scoránaigh consól STR_ABOUT_MENU_AI_DEBUG :Dífhabhtú AI/Scripteanna Cluiche STR_ABOUT_MENU_SCREENSHOT :Seat scáileáin diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 9fb8d3058b..88b6fd5a7b 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -442,31 +442,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Edifici traspar STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Cartelli trasparenti # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Salva partita STR_FILE_MENU_LOAD_GAME :Carica partita STR_FILE_MENU_QUIT_GAME :Abbandona partita -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Esci # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Mappa del mondo STR_MAP_MENU_EXTRA_VIEWPORT :Mini visuale extra STR_MAP_MENU_LINGRAPH_LEGEND :Legenda del flusso di merci STR_MAP_MENU_SIGN_LIST :Elenco cartelli # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Elenco città STR_TOWN_MENU_FOUND_TOWN :Fonda città # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Sussidi # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Grafico margine operativo STR_GRAPH_MENU_INCOME_GRAPH :Grafico ricavi STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Grafico carichi consegnati @@ -475,58 +469,47 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Grafico valore STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Grafico tariffe carichi # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Classifica compagnie STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Valutazione dettagliata prestazioni STR_GRAPH_MENU_HIGHSCORE :Punteggi migliori # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Elenco industrie STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Catene di distribuzione STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Finanzia nuova industria # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Costruzione ferrovie STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Costruzione ferrovie elettrificate STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Costruzione monorotaia STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Costruzione maglev # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Costruzione strade STR_ROAD_MENU_TRAM_CONSTRUCTION :Costruzione tranvie # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Costruzione trasporti su acqua # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Costruzione aeroporto # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Modellazione terreno STR_LANDSCAPING_MENU_PLANT_TREES :Pianta alberi STR_LANDSCAPING_MENU_PLACE_SIGN :Posiziona cartello # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Suoni/musica # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Ultimo messaggio/notizia STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Cronologia messaggi STR_NEWS_MENU_DELETE_ALL_MESSAGES :Elimina tutti i messaggi # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Informazioni sull'area di terreno STR_ABOUT_MENU_HELP :Aiuto e manuali -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Apri/chiudi console STR_ABOUT_MENU_AI_DEBUG :Debug IA/Script STR_ABOUT_MENU_SCREENSHOT :Screenshot diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 8b2d7dbc76..baae5c689c 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -423,31 +423,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :建物を透過 STR_SETTINGS_MENU_TRANSPARENT_SIGNS :標識を透過表示 # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :セーブ STR_FILE_MENU_LOAD_GAME :ロード STR_FILE_MENU_QUIT_GAME :タイトルに戻る -STR_FILE_MENU_SEPARATOR :――――――― STR_FILE_MENU_EXIT :OpenTTDを終了 # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :地図 STR_MAP_MENU_EXTRA_VIEWPORT :ビューポートを開く STR_MAP_MENU_LINGRAPH_LEGEND :貨物流通履歴 STR_MAP_MENU_SIGN_LIST :標識リスト # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :街一覧 STR_TOWN_MENU_FOUND_TOWN :街の新設に出資 # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :助成金 # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :営業利益 推移 STR_GRAPH_MENU_INCOME_GRAPH :売上高 推移 STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :貨物運送量 推移 @@ -456,57 +450,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :総資産 推 STR_GRAPH_MENU_CARGO_PAYMENT_RATES :運送報酬相場 # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :格付順位 STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :格付詳細情報 STR_GRAPH_MENU_HIGHSCORE :ハイスコア # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :産業リスト STR_INDUSTRY_MENU_INDUSTRY_CHAIN :産業チェイン STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :産業の新設に出資 # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :鉄道敷設 STR_RAIL_MENU_ELRAIL_CONSTRUCTION :電気鉄道の敷設 STR_RAIL_MENU_MONORAIL_CONSTRUCTION :モノレール敷設 STR_RAIL_MENU_MAGLEV_CONSTRUCTION :リニア線路を敷設 # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :道路敷設 STR_ROAD_MENU_TRAM_CONSTRUCTION :軌道敷設 # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :水運設備建設 # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :空港建設 # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :地形ツール STR_LANDSCAPING_MENU_PLANT_TREES :植林 STR_LANDSCAPING_MENU_PLACE_SIGN :標識設置 # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :効果音/音楽 # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :最新メッセージ/ニュース STR_NEWS_MENU_MESSAGE_HISTORY_MENU :メッセージ履歴 STR_NEWS_MENU_DELETE_ALL_MESSAGES :メッセージをすべて削除 # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :地域情報 -STR_ABOUT_MENU_SEPARATOR :――――――――――――――――― STR_ABOUT_MENU_TOGGLE_CONSOLE :コンソールの表示切替 STR_ABOUT_MENU_AI_DEBUG :AI/ゲームスクリプトのデバッグ STR_ABOUT_MENU_SCREENSHOT :スクリーンショット diff --git a/src/lang/korean.txt b/src/lang/korean.txt index ebfb457083..a255ccdadf 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -441,31 +441,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :건물 감추 STR_SETTINGS_MENU_TRANSPARENT_SIGNS :역명판 감추기 # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :게임 저장하기 STR_FILE_MENU_LOAD_GAME :게임 불러오기 STR_FILE_MENU_QUIT_GAME :게임 그만두기 -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :종료 # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :전체 지도 보기 STR_MAP_MENU_EXTRA_VIEWPORT :외부 화면 STR_MAP_MENU_LINGRAPH_LEGEND :화물 흐름 범례 STR_MAP_MENU_SIGN_LIST :팻말 목록 # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :도시 목록 STR_TOWN_MENU_FOUND_TOWN :도시 건설 # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :보조금 # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :경영 수익 그래프 STR_GRAPH_MENU_INCOME_GRAPH :수익 그래프 STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :수송 화물량 그래프 @@ -474,58 +468,47 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :회사가치 STR_GRAPH_MENU_CARGO_PAYMENT_RATES :화물 운송단가 그래프 # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :회사 성취도 순위 STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :상세 성취도 STR_GRAPH_MENU_HIGHSCORE :고득점 순위표 # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :산업시설 목록 STR_INDUSTRY_MENU_INDUSTRY_CHAIN :산업시설 연계도 STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :새 산업시설 건설 # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :선로 건설 STR_RAIL_MENU_ELRAIL_CONSTRUCTION :전기선로 건설 STR_RAIL_MENU_MONORAIL_CONSTRUCTION :모노레일 건설 STR_RAIL_MENU_MAGLEV_CONSTRUCTION :자기부상열차 건설 # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :도로 건설 STR_ROAD_MENU_TRAM_CONSTRUCTION :전찻길 건설 # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :항만 건설 # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :공항 건설 # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :지형 편집 STR_LANDSCAPING_MENU_PLANT_TREES :나무 심기 STR_LANDSCAPING_MENU_PLACE_SIGN :팻말 달기 # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :효과음/배경 음악 # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :최근 메시지/뉴스 기록 STR_NEWS_MENU_MESSAGE_HISTORY_MENU :과거 메시지 목록 STR_NEWS_MENU_DELETE_ALL_MESSAGES :모든 뉴스 메시지 삭제 # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :지형 정보 STR_ABOUT_MENU_HELP :도움말 & 매뉴얼 -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :콘솔 켜기/끄기 STR_ABOUT_MENU_AI_DEBUG :인공지능/게임 스크립트 디버그 STR_ABOUT_MENU_SCREENSHOT :스크린샷 찍기 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index a75f1bb61e..6538c6b495 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -584,31 +584,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Aedificia perlu STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Signa perlucida # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Servare ludum STR_FILE_MENU_LOAD_GAME :Legere ludum STR_FILE_MENU_QUIT_GAME :Relinquere ludum -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Exire # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Orbis tabula STR_MAP_MENU_EXTRA_VIEWPORT :Fenestra conspectus additicia STR_MAP_MENU_LINGRAPH_LEGEND :Formula graphica onerum cursus STR_MAP_MENU_SIGN_LIST :Index signorum # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Index oppidorum STR_TOWN_MENU_FOUND_TOWN :Condere oppidum # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subsidia # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Formula lucri operationis graphica STR_GRAPH_MENU_INCOME_GRAPH :Formula reditus graphica STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Formula oneris traditi graphica @@ -617,57 +611,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Formula aestima STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Tabula mercedum onerum # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Album foederis societatum STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Censio effectus descripta STR_GRAPH_MENU_HIGHSCORE :Album punctorum supremorum # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Index industriarum STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Catenae industriarum STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Condere novam industriam # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Constructio ferriviarum STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Constructio electricarum ferriviarum STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Constructio monoorbitarum STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Constructio maglev # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Constructio viarum STR_ROAD_MENU_TRAM_CONSTRUCTION :Constructio ferriviarum stratarium # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Constructio viarum aquariarum # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Constructio aeroportuum # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Plasmatio terrae STR_LANDSCAPING_MENU_PLANT_TREES :Serere arbores STR_LANDSCAPING_MENU_PLACE_SIGN :Ponere signum # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Sonus musicave # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Monstrare nuntium novissimum STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Historia nuntiorum STR_NEWS_MENU_DELETE_ALL_MESSAGES :Delere omnia nuntia # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Terrae regionis indicia -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Monstrare celareve consolam STR_ABOUT_MENU_AI_DEBUG :Emendatio IA/Ludi scriptorum STR_ABOUT_MENU_SCREENSHOT :Imago conspectus diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 6aa336e8fe..91ce8250e1 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -424,31 +424,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Caurspīdīgas STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Caurspīdīgas zīmes # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Saglabāt spēli STR_FILE_MENU_LOAD_GAME :Ielādēt spēli STR_FILE_MENU_QUIT_GAME :Pamest spēli -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Iziet # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Pasaules karte STR_MAP_MENU_EXTRA_VIEWPORT :Papildu skatvieta STR_MAP_MENU_LINGRAPH_LEGEND :Kravu plūsmas apzīmējumi STR_MAP_MENU_SIGN_LIST :Zīmju saraksts # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Pilsētu saraksts STR_TOWN_MENU_FOUND_TOWN :Dibināt pilsētu # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subsīdijas # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Darbības peļņas diagramma STR_GRAPH_MENU_INCOME_GRAPH :Ienākumu diagramma STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Piegādāto kravu diagramma @@ -457,57 +451,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Uzņēmuma vēr STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Kravas apmaksas cenas # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Uzņēmumu rangu saraksts STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Detalizēts uzņēmējdarbības vērtējums STR_GRAPH_MENU_HIGHSCORE :Sasniegumu tabula # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Ražotņu saraksts STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Ražotņu ķēdes STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Finansēt jaunu ražotni # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Dzelzceļa būvniecība STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Elektrificētā dzelzceļa būvniecība STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Viensliedes būvniecība STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Magleva būvniecība # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Ceļu būvēšana STR_ROAD_MENU_TRAM_CONSTRUCTION :Tramvaju ceļa būvniecība # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Ūdensceļu būvniecība # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Lidostas būvniecība # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Ainavas veidošana STR_LANDSCAPING_MENU_PLANT_TREES :Stādīt kokus STR_LANDSCAPING_MENU_PLACE_SIGN :Novietot zīmi # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Skaņa/mūzika # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Pēdējais ziņojums/avīzes raksts STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Ziņojumu vēsture STR_NEWS_MENU_DELETE_ALL_MESSAGES :Dzēst visus ziņojumus # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Zemes platības informācija -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Atvērt/aizvērt konsoli STR_ABOUT_MENU_AI_DEBUG :MI/spēles skriptu atkļūdošana STR_ABOUT_MENU_SCREENSHOT :Ekrānuzņēmums diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 8befc1ba53..39e8ed7a56 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -613,31 +613,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Skaidrūs pasta STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Skaidrūs ženklai # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Išsaugoti žaidimą STR_FILE_MENU_LOAD_GAME :Įkelti žaidimą STR_FILE_MENU_QUIT_GAME :Palikti žaidimą -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Išeiti # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Žemėlapis STR_MAP_MENU_EXTRA_VIEWPORT :Papildomas peržiūros langas STR_MAP_MENU_LINGRAPH_LEGEND :Krovinių srautų legenda STR_MAP_MENU_SIGN_LIST :Ženklų sąrašas # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Miestų sąrašas STR_TOWN_MENU_FOUND_TOWN :Įkurti miestą # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subsidijos # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Įprastinės veiklos pelno diagrama STR_GRAPH_MENU_INCOME_GRAPH :Pajamų diagrama STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Krovinių pristatymo diagrama @@ -646,57 +640,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Kompanijos vert STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Krovinių apmokėjimo lygis # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Kompanijos užimama vieta STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Išsamus veiklos įvertinimas STR_GRAPH_MENU_HIGHSCORE :Nugalėtojų lentelė # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Pramonės katalogas STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Gamybos grandinės STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Įsteigti naują pramonės įmonę # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Tiesti geležinkelius STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Tiesti elektrifikuotus geležinkelius STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Tiesti vienbėgius geležinkelius STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Tiesti „Maglev“ geležinkelius # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Tiesti kelius STR_ROAD_MENU_TRAM_CONSTRUCTION :Tiesti tramvajaus linijas # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Tiesti vandens kelius # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Statyti oro uostus # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Formuoti kraštovaizdį STR_LANDSCAPING_MENU_PLANT_TREES :Sodinti medžius STR_LANDSCAPING_MENU_PLACE_SIGN :Statyti ženklus # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Garsas/muzika # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Paskutinė žinutė/naujiena STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Žinučių istorija STR_NEWS_MENU_DELETE_ALL_MESSAGES :Pašalinti visas žinutes # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Žemės ploto informacija -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Perjungti konsolę STR_ABOUT_MENU_AI_DEBUG :AI / GameScript derinimas STR_ABOUT_MENU_SCREENSHOT :Ekrano nuotrauka diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 64ef069ced..e348c1b941 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -422,31 +422,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Transparent Geb STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Transparent Schëlder # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Spill späicheren STR_FILE_MENU_LOAD_GAME :Spill lueden STR_FILE_MENU_QUIT_GAME :Spill ophalen -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Eraus # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Weltkaart STR_MAP_MENU_EXTRA_VIEWPORT :Extra Usiicht STR_MAP_MENU_LINGRAPH_LEGEND :Cargo Flow Legend STR_MAP_MENU_SIGN_LIST :Schëlderlëscht # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Stiedverzeeschnëss STR_TOWN_MENU_FOUND_TOWN :Stad grënnen # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subside # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Grafik: Operative Gewënn STR_GRAPH_MENU_INCOME_GRAPH :Grafik: Akommes STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Grafik: Geliwwert Luedungen @@ -455,57 +449,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Grafik: Betribs STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Luedungs Bezuelraten # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Betribsranglëscht STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Detailléiert Leeschtungsbewäertung STR_GRAPH_MENU_HIGHSCORE :Beschtelëscht # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Industrielëscht STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Industrieketten STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Finanzéiert eng nei Industrie # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Schinnebau STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Elektrësche Schinnebau STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Monorailbau STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Magnéitbunnbau # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Stroossebau STR_ROAD_MENU_TRAM_CONSTRUCTION :Trambau # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Waasserstroosse bauen # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Fluchhafebau # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Landschaftsbau STR_LANDSCAPING_MENU_PLANT_TREES :Beem planzen STR_LANDSCAPING_MENU_PLACE_SIGN :Schëld opstellen # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Sound/Musik # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Lescht Meldung/Neiegkeet STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Meldungshistorie STR_NEWS_MENU_DELETE_ALL_MESSAGES :All Message läschen # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Landinformatiounen -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Konsole un/aus STR_ABOUT_MENU_AI_DEBUG :KI / Spill-Script Debug STR_ABOUT_MENU_SCREENSHOT :Screenshot (Ctrl+S) diff --git a/src/lang/macedonian.txt b/src/lang/macedonian.txt index 71bee74913..1ac4e9b624 100644 --- a/src/lang/macedonian.txt +++ b/src/lang/macedonian.txt @@ -371,30 +371,24 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Транспа STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Транспарентна станица знаци # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Зачувај ја играта STR_FILE_MENU_LOAD_GAME :Вчитај игра STR_FILE_MENU_QUIT_GAME :Напушти ја играта -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Излез # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Мапа на светот STR_MAP_MENU_EXTRA_VIEWPORT :екстра прозорец STR_MAP_MENU_SIGN_LIST :Си листа # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Место STR_TOWN_MENU_FOUND_TOWN :Резултати градот # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :субвенции # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :График на оперативен профит STR_GRAPH_MENU_INCOME_GRAPH :График на добивка STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :График на испорачан товар @@ -403,54 +397,43 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :График н STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Курс на исплата за товар # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Табела на вредност на компании STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Детален перформанси рејтинг # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :индустрија директориум STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Фонд за нова индустрија # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Железничка изградба STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Електрифицирани железнички изградба STR_RAIL_MENU_MONORAIL_CONSTRUCTION :монорелса изградба STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Maglev изградба # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :изградба на патишта STR_ROAD_MENU_TRAM_CONSTRUCTION :трамвај изградба # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :патишта изградба # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Изградба на аеродром # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :уредување STR_LANDSCAPING_MENU_PLANT_TREES :насадат дрвја STR_LANDSCAPING_MENU_PLACE_SIGN :место знак # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Звук/музика # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Последната порака/вест STR_NEWS_MENU_MESSAGE_HISTORY_MENU :порака историјата # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Земјиште во областа -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Вклучи конзола STR_ABOUT_MENU_AI_DEBUG :АИ / игри сценарио де-бубачки STR_ABOUT_MENU_SCREENSHOT :Слика од екранот diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 461a62f75a..e26f26da16 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -377,30 +377,24 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Bangunan-bangun STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Teluskan tanda arah # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Simpan Permainan STR_FILE_MENU_LOAD_GAME :Buka Permainan STR_FILE_MENU_QUIT_GAME :Tinggalkan Permainan -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Keluar # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Peta Dunia STR_MAP_MENU_EXTRA_VIEWPORT :Tetingkap pemandangan tambahan STR_MAP_MENU_SIGN_LIST :Senarai papan tanda # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Senarai Nama Bandar STR_TOWN_MENU_FOUND_TOWN :Binakan bandar # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subsidi # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Graf keuntungan operasi STR_GRAPH_MENU_INCOME_GRAPH :Graf Pendapatan STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Graf Penghantaran Kargo @@ -409,56 +403,45 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Graf nilai syar STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Kadar bayaran kargo # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Jadual liga syarikat STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Penarafan prestasi secara terperinci STR_GRAPH_MENU_HIGHSCORE :Carta mata tertinggi # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Direktori Industri STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Rantaian industri STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Biaya industri baru # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Pembinaan landasan keretapi STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Pembinaan landasan keretapi berelektrik STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Pembinaan landasan monorel STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Pembinaan landasan maglev # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Pembinaan jalanraya STR_ROAD_MENU_TRAM_CONSTRUCTION :Pembinaan laluan trem # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Pembinaan tali air # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Pembinaan lapangan terbang # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Pemindaan lanskap STR_LANDSCAPING_MENU_PLANT_TREES :Tanam pokok-pokok STR_LANDSCAPING_MENU_PLACE_SIGN :Letakkan papan tanda # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Bunyi/muzik # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Pesanan/laporan berita terkini STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Pesanan sebelumnya # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Maklumat kawasan tanah -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Papar atau padamkan konsol STR_ABOUT_MENU_AI_DEBUG :Al/Skrip pepijat permainan STR_ABOUT_MENU_SCREENSHOT :Tangkapan skrin (Ctrl+S) diff --git a/src/lang/maltese.txt b/src/lang/maltese.txt index 0beb12735e..8ead54ff11 100644 --- a/src/lang/maltese.txt +++ b/src/lang/maltese.txt @@ -272,50 +272,34 @@ STR_SCENEDIT_FILE_MENU_SEPARATOR : ###length 15 # File menu -###length 5 -STR_FILE_MENU_SEPARATOR : # Map menu -###length 4 # Town menu -###length 2 # Subsidies menu -###length 1 # Graph menu -###length 6 # Company league menu -###length 3 # Industry menu -###length 3 # URailway construction menu -###length 4 # Road construction menu -###length 2 # Waterways construction menu -###length 1 # Aairport construction menu -###length 1 # Landscaping menu -###length 3 # Music menu -###length 1 # Message menu -###length 3 # About menu -###length 12 # Place in highscore window ###length 15 diff --git a/src/lang/marathi.txt b/src/lang/marathi.txt index daa1680c83..941d8dbd2c 100644 --- a/src/lang/marathi.txt +++ b/src/lang/marathi.txt @@ -365,29 +365,23 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :इमारत STR_SETTINGS_MENU_TRANSPARENT_SIGNS :स्थानकांची नावे पारदर्शक # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :खेळ वाचवणे STR_FILE_MENU_LOAD_GAME :खेळ उघडा STR_FILE_MENU_QUIT_GAME :खेळ सोडून द्या -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :बाहेर पडा # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :वैश्विक नकाशा STR_MAP_MENU_SIGN_LIST :चिन्हांची यादी # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :शहरांची यादी STR_TOWN_MENU_FOUND_TOWN :सापडलेलं शहर # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :अनुदान # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :चालू असले नफा आलेख STR_GRAPH_MENU_INCOME_GRAPH :आवक आलेख STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :वितरित मालवाहू आलेख @@ -396,55 +390,44 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :कंपनी STR_GRAPH_MENU_CARGO_PAYMENT_RATES :मालवाहू देयक दर # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :कंपनी लीग तक्ता STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :तपशीलावर कामगिरी रेटिंग STR_GRAPH_MENU_HIGHSCORE :उच्च स्कोअर तक्ता # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :उद्योग निर्देशिका STR_INDUSTRY_MENU_INDUSTRY_CHAIN :इंडस्ट्री बंदिवासात STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :नवीन उद्योग फंड # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :लोहमार्ग बांधणी STR_RAIL_MENU_ELRAIL_CONSTRUCTION :विद्युत लोहमार्ग बांधणी STR_RAIL_MENU_MONORAIL_CONSTRUCTION :मोनोरेल बांधणी STR_RAIL_MENU_MAGLEV_CONSTRUCTION :मॅग्लेव बांधणी # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :रस्तेबांधणी STR_ROAD_MENU_TRAM_CONSTRUCTION :ट्रामगाडी बांधणी # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :जलमार्ग बांधणी # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :विमानतळ बांधणी # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_PLANT_TREES :झाडे लावा STR_LANDSCAPING_MENU_PLACE_SIGN :चिन्ह लावा # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :ध्वनी/संगीत # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :शेवटचा संदेश/बातम्या अहवाल STR_NEWS_MENU_MESSAGE_HISTORY_MENU :निरोपांचा इतिहास # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :जागाची माहिती -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_SCREENSHOT :द्श्य STR_ABOUT_MENU_ABOUT_OPENTTD :ओपेन टीटीडी बद्दल diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index d2b54e2345..fb2c08cb1e 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -415,31 +415,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Gjennomsiktige STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Gjennomsiktige skilt # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Lagre spill STR_FILE_MENU_LOAD_GAME :Last inn spill STR_FILE_MENU_QUIT_GAME :Avslutt gjeldende spill -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Avslutt OpenTTD # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Verdenskart STR_MAP_MENU_EXTRA_VIEWPORT :Ekstra tilleggsvindu STR_MAP_MENU_LINGRAPH_LEGEND :Symbolforklaring for vareflyt STR_MAP_MENU_SIGN_LIST :Skiltliste # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Byoversikt STR_TOWN_MENU_FOUND_TOWN :Grunnlegg by # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subsidier # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Graf over fortjeneste STR_GRAPH_MENU_INCOME_GRAPH :Graf over Inntekter STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Graf over leverte varer @@ -448,57 +442,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Graf over firma STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Varetakster # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Firmarangeringstabell STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Detaljert prestasjonrating STR_GRAPH_MENU_HIGHSCORE :Tavle med høyeste poengsummer # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Liste over industrier STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Industrikjeder STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Finansier ny industri # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Bygg jernbane STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Bygg elektrisk jernbane STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Bygg monorail STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Bygg maglev # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Bygg vei STR_ROAD_MENU_TRAM_CONSTRUCTION :Bygg trikkespor # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Bygg vannveier # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Bygg flyplass # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Landskapsverktøy STR_LANDSCAPING_MENU_PLANT_TREES :Plant trær STR_LANDSCAPING_MENU_PLACE_SIGN :Plasser skilt # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Lyd/musikk # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Siste melding/nyhet STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Tidligere meldinger STR_NEWS_MENU_DELETE_ALL_MESSAGES :Slett alle meldinger # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Informasjon om landområde -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Vis/skjul konsoll STR_ABOUT_MENU_AI_DEBUG :AI/Spillskript-feilsøking STR_ABOUT_MENU_SCREENSHOT :Skjermbilde diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index aa358c6f0f..7605587d49 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -396,31 +396,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Gjennomsiktige STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Gjennomsiktige skilt # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Lagre spel STR_FILE_MENU_LOAD_GAME :Last inn spel STR_FILE_MENU_QUIT_GAME :Avslutt noverande spel -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Avslutt OpenTTD # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Verdskart STR_MAP_MENU_EXTRA_VIEWPORT :Ekstra tilleggsvindauge STR_MAP_MENU_LINGRAPH_LEGEND :Symbolforklaring for vareflyt STR_MAP_MENU_SIGN_LIST :Skiltliste # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Byoversikt STR_TOWN_MENU_FOUND_TOWN :Grunnlegg by # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subsidiar # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Fortenestegraf STR_GRAPH_MENU_INCOME_GRAPH :Inntektsgraf STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Graf over leverte varer @@ -429,56 +423,45 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Graf over firma STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Varetakster # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Firmarangeringstabell STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Detaljert prestasjonsnivå STR_GRAPH_MENU_HIGHSCORE :Poengtavle # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Oversikt over industriar STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Næringskjeder STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Finansier ny industri # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Bygg jernbane STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Bygg elektrisk jernbane STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Bygg monorail STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Bygg maglev # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Bygg veg STR_ROAD_MENU_TRAM_CONSTRUCTION :Bygg trikkespor # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Bygg vannvegar # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Bygg flyplass # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Landskapsverktøy STR_LANDSCAPING_MENU_PLANT_TREES :Plant tre STR_LANDSCAPING_MENU_PLACE_SIGN :Plasser skilt # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Lyd/musikk # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Siste melding/nyheit STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Tidlegare meldingar # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Informasjon om landområde -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Syne/gøym konsoll STR_ABOUT_MENU_AI_DEBUG :AI- / Spelscriptfeilsøking STR_ABOUT_MENU_SCREENSHOT :Skjermdump diff --git a/src/lang/persian.txt b/src/lang/persian.txt index 263c10a303..9a651fcdd1 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -385,31 +385,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :ساختمان STR_SETTINGS_MENU_TRANSPARENT_SIGNS :شفاف کردن نشان های ایستگاه ها # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :ذخیره بازی STR_FILE_MENU_LOAD_GAME :فراخوانی بازی STR_FILE_MENU_QUIT_GAME :رها کردن بازی -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :خروج # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :نقشه ی دنیا STR_MAP_MENU_EXTRA_VIEWPORT :نمای اضافه STR_MAP_MENU_LINGRAPH_LEGEND :میزان حمل بار STR_MAP_MENU_SIGN_LIST :لیست نشانه # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :لیست شهر ها STR_TOWN_MENU_FOUND_TOWN :ساخت شهر # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :یارانه ها # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :نمودار سود خالص STR_GRAPH_MENU_INCOME_GRAPH :نمودار درآمد STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :نمودار محموله های رسانده شده @@ -418,56 +412,45 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :نمودار ا STR_GRAPH_MENU_CARGO_PAYMENT_RATES :نمودار قیمت پرداختی محموله ها # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :جدول اتحادیه شرکتها STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :جزییات امتیازهای کارایی STR_GRAPH_MENU_HIGHSCORE :جدول بالاترین امتیازها # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :فهرست صنایع STR_INDUSTRY_MENU_INDUSTRY_CHAIN :زنجیره تولید STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :ساخت کارخانه جدید # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :ساخت راه آهن STR_RAIL_MENU_ELRAIL_CONSTRUCTION :ساخت و ساز ریل برقی STR_RAIL_MENU_MONORAIL_CONSTRUCTION :ساخت مونوریل STR_RAIL_MENU_MAGLEV_CONSTRUCTION :ساخت ریل مغناطیسی # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :ساخت جاده STR_ROAD_MENU_TRAM_CONSTRUCTION :ساخت ساز تراموا # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :ساخت ساز آبراهه # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :ساختمان فرودگاه # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :محوطه سازی STR_LANDSCAPING_MENU_PLANT_TREES :کاشتن درخت STR_LANDSCAPING_MENU_PLACE_SIGN :قرار دادن علامت # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :صدا/موسیقی # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :گزارش آخرین پیام/خبر STR_NEWS_MENU_MESSAGE_HISTORY_MENU :تاریخچه پیام ها # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :اطلاعات زمین ها -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :باز و بسته کردن کنسول STR_ABOUT_MENU_AI_DEBUG :خطایابی هوش مصنوعی STR_ABOUT_MENU_SCREENSHOT :تصویر از بازی diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 7392866582..53b10fb415 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -819,31 +819,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Przeźroczyste STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Przeźroczyste znaki # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Zapisz grę STR_FILE_MENU_LOAD_GAME :Wczytaj grę STR_FILE_MENU_QUIT_GAME :Opuść grę -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Wyjście # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Mapa świata STR_MAP_MENU_EXTRA_VIEWPORT :Dodatkowy podgląd STR_MAP_MENU_LINGRAPH_LEGEND :Legenda przepływu ładunków STR_MAP_MENU_SIGN_LIST :Lista napisów # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Lista miast STR_TOWN_MENU_FOUND_TOWN :Załóż miasto # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Dotacje # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Wykres zysku operacyjnego STR_GRAPH_MENU_INCOME_GRAPH :Wykres przychodów STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Wykres dostarczonego ładunku @@ -852,58 +846,47 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Wykres wartośc STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Stawki płatności za ładunek # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Ranking firm STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Szczegóły oceny wydajności STR_GRAPH_MENU_HIGHSCORE :Tabela wyników # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Spis przedsiębiorstw STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Łańcuchy produkcji STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Ufunduj nowe przedsiębiorstwo # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Konstrukcja linii kolejowej STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Konstrukcja linii zelektryfikowanej STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Konstrukcja linii jednoszynowej STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Konstrukcja linii Maglev # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Budowa drogi STR_ROAD_MENU_TRAM_CONSTRUCTION :Budowa linii tramwajowej # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Konstrukcja kanału wodnego # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Konstrukcje lotnicze # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Krajobraz STR_LANDSCAPING_MENU_PLANT_TREES :Posadź drzewa STR_LANDSCAPING_MENU_PLACE_SIGN :Umieść napis # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Dźwięk/muzyka # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Ostatnia wiadomość/ogłoszenie STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Poprzednie wiadomości STR_NEWS_MENU_DELETE_ALL_MESSAGES :Usuń wszystkie wiadomości # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Informacje o terenie STR_ABOUT_MENU_HELP :Pomoc i instrukcje -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Włącz/wyłącz konsolę STR_ABOUT_MENU_AI_DEBUG :Debugowanie SI / Game Script STR_ABOUT_MENU_SCREENSHOT :Zrzut ekranu diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 4f7f90fdb6..9adc82c7dc 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -441,31 +441,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Edifícios tran STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Sinais Transparentes # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Guardar jogo STR_FILE_MENU_LOAD_GAME :Abrir jogo STR_FILE_MENU_QUIT_GAME :Abandonar jogo -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Sair # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Mapa do mundo STR_MAP_MENU_EXTRA_VIEWPORT :Visualizador extra STR_MAP_MENU_LINGRAPH_LEGEND :Legenda do fluxo de carga STR_MAP_MENU_SIGN_LIST :Lista de sinais # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Lista de localidades STR_TOWN_MENU_FOUND_TOWN :Fundar localidade # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subsídios # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Gráfico do lucro operacional STR_GRAPH_MENU_INCOME_GRAPH :Rendimentos STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Carga entregue @@ -474,58 +468,47 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Valor da empres STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Tarifas por carga # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Classificação de empresas STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Classificação detalhada de desempenho STR_GRAPH_MENU_HIGHSCORE :Tabela de classificações # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Lista de indústrias STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Cadeias de indústria STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Financiar nova indústria # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Construção de caminhos-de-ferro STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Construção de caminhos-de-ferro eletrificados STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Construir monocarril STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construir Maglev # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Construir estradas STR_ROAD_MENU_TRAM_CONSTRUCTION :Construção de carris para eléctricos # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Construção de hidrovia # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Construção de aeroportos # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Paisagem STR_LANDSCAPING_MENU_PLANT_TREES :Plantar árvores STR_LANDSCAPING_MENU_PLACE_SIGN :Colocar sinal # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Som/música # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Última mensagem/notícia STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Histórico de mensagens STR_NEWS_MENU_DELETE_ALL_MESSAGES :Apagar todas as mensagens # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Informações do terreno STR_ABOUT_MENU_HELP :Ajuda & manuais -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Mostrar/Ocultar consola STR_ABOUT_MENU_AI_DEBUG :Depuração da IA/Scripts de jogo STR_ABOUT_MENU_SCREENSHOT :Captura de ecrã diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 9483e89ed5..dcca6dc1f5 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -440,31 +440,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Peisaj transpar STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Nume staţii/semne transparente # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Salvează jocul STR_FILE_MENU_LOAD_GAME :Încarcă joc STR_FILE_MENU_QUIT_GAME :Ieșire în meniul principal -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Ieşire din joc # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Harta lumii STR_MAP_MENU_EXTRA_VIEWPORT :Ecran suplimentar STR_MAP_MENU_LINGRAPH_LEGEND :Legenda flux încărcătură STR_MAP_MENU_SIGN_LIST :Lista de semne # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Lista oraşelor STR_TOWN_MENU_FOUND_TOWN :Fondează oraş # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subvenţii # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Profitul operaţional STR_GRAPH_MENU_INCOME_GRAPH :Venituri STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Număr încărcături livrate @@ -473,58 +467,47 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Valoarea compan STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Valorile plăților pe mărfuri # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Clasamentul companiilor STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Rating de performanţă detaliat STR_GRAPH_MENU_HIGHSCORE :Tabela cu scoruri maxime # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Lista industriilor STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Lanțuri industriale STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Obiectiv industrial nou # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Construcţie cale ferată STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Construcţie cale ferată electrificată STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Construcţie monoşină STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construcţie pernă magnetică # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Construcţii rutiere STR_ROAD_MENU_TRAM_CONSTRUCTION :Construcție tramvai # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Construcţie rute acvatice # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Construire aeroport # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Modificare peisaj STR_LANDSCAPING_MENU_PLANT_TREES :Plantează arbori STR_LANDSCAPING_MENU_PLACE_SIGN :Plasează semn # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Sunet/muzică # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Ultimul mesaj/ultima știre STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Lista ultimelor mesaje STR_NEWS_MENU_DELETE_ALL_MESSAGES :Șterge toate mesajele # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Informaţii despre teren STR_ABOUT_MENU_HELP :Ajutor și manuale -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Consolă pornit/oprit STR_ABOUT_MENU_AI_DEBUG :Depanare Inteligenţă Artificială / Script Joc STR_ABOUT_MENU_SCREENSHOT :Capturează ecranul diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 4d0c3637d7..1eb347f757 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -566,31 +566,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Прозрач STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Прозрачные надписи # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Сохранить игру STR_FILE_MENU_LOAD_GAME :Загрузить игру STR_FILE_MENU_QUIT_GAME :В главное меню -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Выход # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Карта мира STR_MAP_MENU_EXTRA_VIEWPORT :Доп. окно просмотра STR_MAP_MENU_LINGRAPH_LEGEND :Схема грузопотоков STR_MAP_MENU_SIGN_LIST :Список табличек # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Список городов STR_TOWN_MENU_FOUND_TOWN :Основать город # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Субсидии # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :График прибыли STR_GRAPH_MENU_INCOME_GRAPH :График дохода STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :График доставленного груза @@ -599,58 +593,47 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :График с STR_GRAPH_MENU_CARGO_PAYMENT_RATES :График оплаты перевозок # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Табель о рангах STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Рейтинг в деталях STR_GRAPH_MENU_HIGHSCORE :Таблица рекордов # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Список предприятий STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Производственные цепочки STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Создать новое предприятие # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Строительство неэлектрифицированной ж/д STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Строительство электрифицированной ж/д STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Строительство монорельсовой ж/д STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Строительство магнитной ж/д # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Строительство автомобильной инфраструктуры STR_ROAD_MENU_TRAM_CONSTRUCTION :Строительство трамвайной инфраструктуры # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Строительство инфраструктуры водного транспорта # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Строительство аэропортов # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Ландшафт STR_LANDSCAPING_MENU_PLANT_TREES :Высадка деревьев STR_LANDSCAPING_MENU_PLACE_SIGN :Поставить метку # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Звук/музыка # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Последняя новость STR_NEWS_MENU_MESSAGE_HISTORY_MENU :История сообщений STR_NEWS_MENU_DELETE_ALL_MESSAGES :Удалить все сообщения # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Информация об участке земли STR_ABOUT_MENU_HELP :Помощь и документация -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Консоль STR_ABOUT_MENU_AI_DEBUG :Отладка ИИ / скриптов STR_ABOUT_MENU_SCREENSHOT :Снимок экрана diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index a5dd4b3327..d318688421 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -610,31 +610,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Transparentne z STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Transparentni znakovi # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Sačuvaj igru STR_FILE_MENU_LOAD_GAME :Učitaj igru STR_FILE_MENU_QUIT_GAME :Napusti igru -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Izađi # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Karta sveta STR_MAP_MENU_EXTRA_VIEWPORT :Dodatno gledište STR_MAP_MENU_LINGRAPH_LEGEND :Legenda protoka tereta STR_MAP_MENU_SIGN_LIST :Lista Znakova # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Popis naselja STR_TOWN_MENU_FOUND_TOWN :Osnivanje naselja # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subvencije # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Grafikon operativnog profita STR_GRAPH_MENU_INCOME_GRAPH :Grafikon prihoda STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Grafikon dostavljenog tereta @@ -643,57 +637,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Grafikon vredno STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Stope naplate tereta # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Tabela lige preduzeća STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Detaljan pregled poslovanja STR_GRAPH_MENU_HIGHSCORE :Tabela najboljih rezultata # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Spisak fabrika STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Lanci fabrika STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Finansiranje nove fabrike # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Izgradnja železnice STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Izgradnja elektrifikovane železnice STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Izgradnja jednošinske železnice STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Izgradnja magnetne železnice # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Izgradnja drumskog sistema STR_ROAD_MENU_TRAM_CONSTRUCTION :Izgradnja tramvajskog sistema # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Izgradnja plovnog sistema # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Izgradnja aerodroma # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Oblikovanje terena STR_LANDSCAPING_MENU_PLANT_TREES :Posadi drvo STR_LANDSCAPING_MENU_PLACE_SIGN :Postavi znak # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Zvuk/muzika # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Poslednja poruka/izveštaj STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Istorija Obaveštenja STR_NEWS_MENU_DELETE_ALL_MESSAGES :Obriši sve poruke # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Podaci o zemljištu -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Uključi/isključi konzolu STR_ABOUT_MENU_AI_DEBUG :Korekcija VI / skripte igre STR_ABOUT_MENU_SCREENSHOT :Sačuvaj sliku diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index a3d367230e..7cf9b1410a 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -440,31 +440,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :透明建筑 STR_SETTINGS_MENU_TRANSPARENT_SIGNS :透明车站标志 # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :保存游戏 STR_FILE_MENU_LOAD_GAME :读取存档 STR_FILE_MENU_QUIT_GAME :放弃游戏 -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :退出 # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :缩略地图 STR_MAP_MENU_EXTRA_VIEWPORT :额外视点 STR_MAP_MENU_LINGRAPH_LEGEND :客货流图标 STR_MAP_MENU_SIGN_LIST :标志列表 # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :城镇列表 STR_TOWN_MENU_FOUND_TOWN :建立城镇 # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :财政补贴 # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :利润图表 STR_GRAPH_MENU_INCOME_GRAPH :收入图表 STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :运输货物图表 @@ -473,58 +467,47 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :公司市值图 STR_GRAPH_MENU_CARGO_PAYMENT_RATES :货物运费图表 # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :公司评价排名 STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :公司评价明细 STR_GRAPH_MENU_HIGHSCORE :高分榜 # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :工业列表 STR_INDUSTRY_MENU_INDUSTRY_CHAIN :产业链 STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :新建工业设施 # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :铁路建设 STR_RAIL_MENU_ELRAIL_CONSTRUCTION :电气化铁路建设 STR_RAIL_MENU_MONORAIL_CONSTRUCTION :单轨铁路建设 STR_RAIL_MENU_MAGLEV_CONSTRUCTION :磁悬浮铁路建设 # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :道路建设 STR_ROAD_MENU_TRAM_CONSTRUCTION :电车建设 # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :水运建设 # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :机场建设 # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :景观美化 STR_LANDSCAPING_MENU_PLANT_TREES :植树 STR_LANDSCAPING_MENU_PLACE_SIGN :放置标志 # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :声音/音乐 # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :最新消息/新闻 STR_NEWS_MENU_MESSAGE_HISTORY_MENU :消息历史 STR_NEWS_MENU_DELETE_ALL_MESSAGES :删除全部消息 # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :查询地块信息 STR_ABOUT_MENU_HELP :帮助和指南 -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :切换到控制台模式 STR_ABOUT_MENU_AI_DEBUG :AI /游戏脚本调试 STR_ABOUT_MENU_SCREENSHOT :屏幕截图 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 254858c0af..e04ca99626 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -503,31 +503,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Priehľadné bu STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Priehľadné nápisy # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Uložiť hru STR_FILE_MENU_LOAD_GAME :Nahrať hru STR_FILE_MENU_QUIT_GAME :Opustiť hru -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Ukončiť # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Mapa sveta STR_MAP_MENU_EXTRA_VIEWPORT :Ďalší pohľad STR_MAP_MENU_LINGRAPH_LEGEND :Legenda k smerovaniu nákladu STR_MAP_MENU_SIGN_LIST :Zoznam popisov # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Zoznam miest STR_TOWN_MENU_FOUND_TOWN :Založiť mesto # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Dotácie # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Graf prevádzkového zisku STR_GRAPH_MENU_INCOME_GRAPH :Graf tržieb STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Graf prepraveného nákladu @@ -536,57 +530,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Graf hodnoty sp STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Ceny prepravy # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Hodnotenie spoločností STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Detailné hodnotenie výkonu STR_GRAPH_MENU_HIGHSCORE :Najvyššie skóre # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Zoznam priemyslu STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Priemyselné reťaze STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Financovať nový priemysel # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Výstavba železnice STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Výstavba elektrifikovanej železnice STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Výstavba jednokoľajky (Monorail) STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Výstavba magnetickej dráhy (Maglev) # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Výstavba cesty STR_ROAD_MENU_TRAM_CONSTRUCTION :Výstavba električkovej trate # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Stavba vodnej cesty # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Výstavba letiska # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Úprava terénu STR_LANDSCAPING_MENU_PLANT_TREES :Sadenie stromov STR_LANDSCAPING_MENU_PLACE_SIGN :Umiestnenie popisu # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Zvuk/Hudba # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Zobraziť poslednú správu/novinku STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Archív správ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Vymazať všetky správy # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Informácie o pozemku -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Zobraziť / skryť konzolu STR_ABOUT_MENU_AI_DEBUG :Ladenie AI/skriptu STR_ABOUT_MENU_SCREENSHOT :Snímka obrazovky diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index c38ab55490..4425bcc73b 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -548,31 +548,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Prosojne stavbe STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Prosojni napisi postaj # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Shrani igro STR_FILE_MENU_LOAD_GAME :Naloži igro STR_FILE_MENU_QUIT_GAME :Zapusti igro -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Izhod # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Zemljevid sveta STR_MAP_MENU_EXTRA_VIEWPORT :Dodaten pogled STR_MAP_MENU_LINGRAPH_LEGEND :Legenda pretoka tovora STR_MAP_MENU_SIGN_LIST :Seznam napisov # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Imenik mest STR_TOWN_MENU_FOUND_TOWN :Ustanovi mesto # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subvencije # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Graf dobička STR_GRAPH_MENU_INCOME_GRAPH :Graf prihodkov STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Graf dostavljenega tovora @@ -581,56 +575,45 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Graf vrednosti STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Graf plačila za tovore # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Tabela lige podjetij STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Podrobna ocena uspeha STR_GRAPH_MENU_HIGHSCORE :Tabela najboljših rezultatov # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Imenik industrij STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Industrijske verige STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Financiraj novo industrijo # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Gradnja železnice STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Gradnja elektrificirane železnice STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Enotirna železnica STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Magnetna železnica # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Gradnja ceste STR_ROAD_MENU_TRAM_CONSTRUCTION :Gradnja tramvaj proge # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Gradnja vodnih poti # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Gradnja letališča # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Oblikovanje terena STR_LANDSCAPING_MENU_PLANT_TREES :Posadi drevesa STR_LANDSCAPING_MENU_PLACE_SIGN :Postavi znak # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Zvok/glasba # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Zadnje sporočilo/novica STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Zgodovina sporočil # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Informacije o terenu -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Vklopi/Izklopi konzolo STR_ABOUT_MENU_AI_DEBUG :Razhročevanje UI / skript STR_ABOUT_MENU_SCREENSHOT :Zajemi sliko diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 8550adf5c8..6450180b39 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -423,31 +423,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Edificios trans STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Letreros transparentes # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Guardar partida STR_FILE_MENU_LOAD_GAME :Cargar partida STR_FILE_MENU_QUIT_GAME :Abandonar partida -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Salir # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Mapa del mundo STR_MAP_MENU_EXTRA_VIEWPORT :Punto de vista extra STR_MAP_MENU_LINGRAPH_LEGEND :Leyenda de Flujos de Carga STR_MAP_MENU_SIGN_LIST :Lista de letreros # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Lista de municipios STR_TOWN_MENU_FOUND_TOWN :Fundar municipio # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subvenciones # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Gráfica de beneficio operativo STR_GRAPH_MENU_INCOME_GRAPH :Gráfica de ingresos STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Gráfica de carga entregada @@ -456,57 +450,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Gráfica del va STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Tarifas de pago de cargas # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Tabla de clasificación de empresas STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Calificación detallada de desempeño STR_GRAPH_MENU_HIGHSCORE :Tabla de puntuaciones # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Lista de industrias STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Cadenas de industria STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Fundar nueva industria # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Construcción de ferrocarril STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Construcción de ferrocarril eléctrico STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Construcción de monorraíl STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construcción de maglev # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Construcción de carretera STR_ROAD_MENU_TRAM_CONSTRUCTION :Construcción de tranvía # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Construcción de canales # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Construir aeropuerto # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Terreno STR_LANDSCAPING_MENU_PLANT_TREES :Plantar árboles STR_LANDSCAPING_MENU_PLACE_SIGN :Colocar letrero # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Sonido/música # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Último mensaje/noticia STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Historial de mensajes STR_NEWS_MENU_DELETE_ALL_MESSAGES :Borrar todos los mensajes # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Información del terreno -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Activar consola STR_ABOUT_MENU_AI_DEBUG :Depuración de script de juego/IA STR_ABOUT_MENU_SCREENSHOT :Captura de pantalla diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 4c764257f3..6233052156 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -423,31 +423,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Edificios trans STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Carteles transparentes # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Guardar partida STR_FILE_MENU_LOAD_GAME :Cargar partida STR_FILE_MENU_QUIT_GAME :Salir de la partida -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Salir # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Minimapa completo STR_MAP_MENU_EXTRA_VIEWPORT :Ventana de vista adicional STR_MAP_MENU_LINGRAPH_LEGEND :Leyenda de flujo de carga STR_MAP_MENU_SIGN_LIST :Lista de carteles # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Guía de localidades STR_TOWN_MENU_FOUND_TOWN :Fundar localidad # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subsidios # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Gráfica de utilidades operativas STR_GRAPH_MENU_INCOME_GRAPH :Gráfica de ingresos STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Gráfica de carga entregada @@ -456,57 +450,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Gráfica del va STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Tasas de pago por carga # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Tabla de evaluación de empresas STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Detalles de desempeño STR_GRAPH_MENU_HIGHSCORE :Tabla de puntuaciones # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Guía de industrias STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Cadenas de industrias STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Fundar nueva industria # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Construcción de ferrocarril STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Construcción de ferrocarril eléctrico STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Construcción de monorriel STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construcción de maglev # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Construcción de carretera STR_ROAD_MENU_TRAM_CONSTRUCTION :Construcción de tranvía # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Construcción de canales # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Construcción de aeropuerto # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Alteración de terreno STR_LANDSCAPING_MENU_PLANT_TREES :Plantar árboles STR_LANDSCAPING_MENU_PLACE_SIGN :Poner letrero # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Sonido y música # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Último mensaje o noticia STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Historial de mensajes STR_NEWS_MENU_DELETE_ALL_MESSAGES :Eliminar todos los mensajes # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Información sobre área de terreno -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Activar consola STR_ABOUT_MENU_AI_DEBUG :Depuración de scripts de IA o juego STR_ABOUT_MENU_SCREENSHOT :Captura de pantalla diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 6e9086445e..914b670c1d 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -440,31 +440,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Genomskinliga b STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Genomskinliga skyltar # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Spara spelet STR_FILE_MENU_LOAD_GAME :Ladda ett spel STR_FILE_MENU_QUIT_GAME :Avsluta spelet -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Avsluta # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Världskarta STR_MAP_MENU_EXTRA_VIEWPORT :Nytt vyfönster STR_MAP_MENU_LINGRAPH_LEGEND :Legend för godsflöden STR_MAP_MENU_SIGN_LIST :Skyltlista # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Lista med städer STR_TOWN_MENU_FOUND_TOWN :Grunda stad # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Subventioner # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Graf över gångbar inkomst STR_GRAPH_MENU_INCOME_GRAPH :Graf över inkomster STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Graf över levererat gods @@ -473,57 +467,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Graf över för STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Fraktförtjänster # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Tabell över ledande företag STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Detaljerad prestationsvärdering STR_GRAPH_MENU_HIGHSCORE :Bästa spelresultat # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Industriförteckning STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Industrikedjor STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Bekosta ny industri # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Bygg järnväg STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Bygg elektrifierad järnväg STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Bygg monorail STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Bygg maglev # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Bygg väg STR_ROAD_MENU_TRAM_CONSTRUCTION :Bygg spårväg # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Bygg kanal # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Bygg flygplats # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Landskapsarkitektur STR_LANDSCAPING_MENU_PLANT_TREES :Plantera träd STR_LANDSCAPING_MENU_PLACE_SIGN :Placera skylt # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Ljud/musik # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Senaste meddelandet/nyheten STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Meddelandehistorik STR_NEWS_MENU_DELETE_ALL_MESSAGES :Ta bort alla meddelanden # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Information om mark -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Visa/dölj konsolen STR_ABOUT_MENU_AI_DEBUG :Felsökning av datorspelare/spelskript STR_ABOUT_MENU_SCREENSHOT :Skärmdump diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index c9d9ed34d3..1d164e49ee 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -404,31 +404,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :கட்டட STR_SETTINGS_MENU_TRANSPARENT_SIGNS :ஒளிபுகும் குறிகள் # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :விளையாட்டை பதி STR_FILE_MENU_LOAD_GAME :விளையாட்டை ஏற்று STR_FILE_MENU_QUIT_GAME :விளையாட்டை கைவிடு -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :வெளியேறு # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :உலகப் படம் STR_MAP_MENU_EXTRA_VIEWPORT :கூடுதல் பார்வைபடம் STR_MAP_MENU_LINGRAPH_LEGEND :சரக்கு செல்லும் வழிப் படம் STR_MAP_MENU_SIGN_LIST :குறிகளின் பட்டியல் # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :நகர புத்தகம் STR_TOWN_MENU_FOUND_TOWN :நகரம் உருவாக்கு # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :மானியங்கள் # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :தொழிற்பாட்டு இலாப வரைபடம் STR_GRAPH_MENU_INCOME_GRAPH :வருமான வரைபடம் STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :கொண்டு சேர்கப்பட்ட சரக்கு வரைபடம் @@ -437,57 +431,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :கம்பெ STR_GRAPH_MENU_CARGO_PAYMENT_RATES :சரக்கு வருமானங்கள் # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :நிறுவனங்களின் பட்டியல் STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :விவரமான செயல்திறன் மதிப்பீடு STR_GRAPH_MENU_HIGHSCORE :புள்ளிகள் பட்டியல் # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :தொழிற்சாலைகளின் பட்டியல் STR_INDUSTRY_MENU_INDUSTRY_CHAIN :தொழிற்சாலைத் தொடர்கள் STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :புதிய தொழிற்சாலையை நிறுவு # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :இரயில்வே கட்டுமானம் STR_RAIL_MENU_ELRAIL_CONSTRUCTION :மின்சார இரயில்வே கட்டுமானம் STR_RAIL_MENU_MONORAIL_CONSTRUCTION :மோனோ இரயில் கட்டுமானம் STR_RAIL_MENU_MAGLEV_CONSTRUCTION :மேக்லெவ் கட்டுமானம் # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :சாலை கட்டுமானம் STR_ROAD_MENU_TRAM_CONSTRUCTION :அமிழ் தண்டூர்திப் பாதை கட்டுமானம் # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :கடல்வழி போக்குவரத்து கட்டுமானம் # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :விமானநிலைய கட்டுமானம் # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :நிலத்தோற்றம் மாற்றுதல் STR_LANDSCAPING_MENU_PLANT_TREES :மரங்களை நடு STR_LANDSCAPING_MENU_PLACE_SIGN :அறிவிக்கை பலகை வை # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :ஒலி/இசை # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :கடைசி செய்தி/செய்தி அறிவிக்கை STR_NEWS_MENU_MESSAGE_HISTORY_MENU :செய்தி வரலாறு STR_NEWS_MENU_DELETE_ALL_MESSAGES :எல்லா செய்திகளையும் நீக்கு # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :நிலா பகுதி விவரம் -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :முனையத்தை மாற்று STR_ABOUT_MENU_AI_DEBUG :AI/வரிவடிவம் சரிபார் STR_ABOUT_MENU_SCREENSHOT :திரைபிடிப்பு diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 0154731250..1eb2d8a276 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -399,31 +399,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :สิ่งก STR_SETTINGS_MENU_TRANSPARENT_SIGNS :ป้ายแบบโปร่งใส # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :บันทึกเกม STR_FILE_MENU_LOAD_GAME :โหลดเกม STR_FILE_MENU_QUIT_GAME :กลับไปยังเมนูหลักของเกม -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :ออกจากเกม # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :แผนที่โลก STR_MAP_MENU_EXTRA_VIEWPORT :มุมมองเพิ่มเติม STR_MAP_MENU_LINGRAPH_LEGEND :เส้นทางการกระจายสินค้า STR_MAP_MENU_SIGN_LIST :รายการป้าย # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :ทำเนียบชื่อเมือง STR_TOWN_MENU_FOUND_TOWN :ตั้งเมือง # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :การสนับสนุน # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :กราฟแสดงผลประกอบการ STR_GRAPH_MENU_INCOME_GRAPH :กราฟแสดงรายได้ STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :กราฟแสดงปริมาณการขนส่งสินค้า @@ -432,56 +426,45 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :กราฟแ STR_GRAPH_MENU_CARGO_PAYMENT_RATES :อัตราผลตอบแทนของการส่งสินค้า # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :ตารางแสดงอันดับบริษัท STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :การวัดผลประสิทธิภาพอย่างละเอียด STR_GRAPH_MENU_HIGHSCORE :ตารางคะแนนสูงสุด # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :ทำเนียบอุตสาหกรรม STR_INDUSTRY_MENU_INDUSTRY_CHAIN :ห่วงโซ่อุตสาหกรรม STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :ลงทุนอุตสาหกรรมใหม่ # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :การก่อสร้างทางรถไฟ STR_RAIL_MENU_ELRAIL_CONSTRUCTION :การก่อสร้างทางรถไฟพลังไฟฟ้า STR_RAIL_MENU_MONORAIL_CONSTRUCTION :การก่อสร้างทางรถไฟรางเดี่ยว STR_RAIL_MENU_MAGLEV_CONSTRUCTION :การก่อสร้างทางรถไฟพลังแม่เหล็ก # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :การก่อสร้างถนน STR_ROAD_MENU_TRAM_CONSTRUCTION :การก่อสร้างทางรถราง # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :การก่อสร้างคลอง # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :การก่อสร้างท่าอากาศยาน # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :การปรับพื้นที่ STR_LANDSCAPING_MENU_PLANT_TREES :ปลูกต้นไม้ STR_LANDSCAPING_MENU_PLACE_SIGN :ปักป้าย # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :เสียงและดนตรี # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :ข้อความล่าสุด/รายงานข่าว STR_NEWS_MENU_MESSAGE_HISTORY_MENU :ดูข้อความย้อนหลัง # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :ข้อมูลพื้นที่ -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :เปิด/ปิด คอนโซล STR_ABOUT_MENU_AI_DEBUG :ดีบัก สคริปต์ AI/Game STR_ABOUT_MENU_SCREENSHOT :จับภาพหน้าจอ (Ctrl+S) diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 0fc2c4b1b3..36b7a26cc3 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -440,31 +440,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :視野穿透建 STR_SETTINGS_MENU_TRANSPARENT_SIGNS :半透明標籤 # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :儲存遊戲 STR_FILE_MENU_LOAD_GAME :載入遊戲 STR_FILE_MENU_QUIT_GAME :放棄遊戲 -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :離開 # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :世界地圖 STR_MAP_MENU_EXTRA_VIEWPORT :打開新視野 STR_MAP_MENU_LINGRAPH_LEGEND :貨物流程索引 STR_MAP_MENU_SIGN_LIST :標誌清單 # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :市鎮目錄 STR_TOWN_MENU_FOUND_TOWN :興建市鎮 # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :補助資訊 # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :營運報表 STR_GRAPH_MENU_INCOME_GRAPH :收入圖表 STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :運載報表 @@ -473,58 +467,47 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :公司市值圖 STR_GRAPH_MENU_CARGO_PAYMENT_RATES :貨物運費表 # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :公司排行榜 STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :詳細營運評比 STR_GRAPH_MENU_HIGHSCORE :積分排行榜 # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :工業目錄 STR_INDUSTRY_MENU_INDUSTRY_CHAIN :工業關係鏈 STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :投資成立工廠 # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :鋪設鐵軌 STR_RAIL_MENU_ELRAIL_CONSTRUCTION :鋪設電氣化鐵路 STR_RAIL_MENU_MONORAIL_CONSTRUCTION :鋪設單軌 STR_RAIL_MENU_MAGLEV_CONSTRUCTION :鋪設磁浮軌 # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :鋪設道路 STR_ROAD_MENU_TRAM_CONSTRUCTION :鋪設電車軌 # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :興建水道 # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :興建機場 # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :地形 STR_LANDSCAPING_MENU_PLANT_TREES :植樹 STR_LANDSCAPING_MENU_PLACE_SIGN :放置標誌 # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :音效/背景音樂 # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :上次訊息/新聞報告 STR_NEWS_MENU_MESSAGE_HISTORY_MENU :訊息記錄 STR_NEWS_MENU_DELETE_ALL_MESSAGES :刪除所有訊息 # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :土地資訊 STR_ABOUT_MENU_HELP :幫助和手冊 -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :切換主控台 STR_ABOUT_MENU_AI_DEBUG :AI/遊戲腳本除錯 STR_ABOUT_MENU_SCREENSHOT :擷取畫面 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 6acef6c10b..a176d5e3ed 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -441,31 +441,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Şeffaf binalar STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Şeffaf tabelalar # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Kaydet STR_FILE_MENU_LOAD_GAME :Yükle STR_FILE_MENU_QUIT_GAME :Ana menüye dön -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Çıkış # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Dünya haritası STR_MAP_MENU_EXTRA_VIEWPORT :Ek görünüm STR_MAP_MENU_LINGRAPH_LEGEND :Kargo Akış Göstergesi STR_MAP_MENU_SIGN_LIST :Tabela listesi # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Şehir listesi STR_TOWN_MENU_FOUND_TOWN :Şehir başlat # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Teşvikler # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Faaliyet kar grafiği STR_GRAPH_MENU_INCOME_GRAPH :Gelir grafiği STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Taşınan kargo grafiği @@ -474,58 +468,47 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Şirket değeri STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Kargo ödeme tablosu # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Şirketler ligi tablosu STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Ayrıntılı performans değerlendirmesi STR_GRAPH_MENU_HIGHSCORE :Puan tablosu # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Fabrika listesi STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Sanayi zincirleri STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Yeni fabrika kur # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Demiryolu yapımı STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Elektrikli demiryolu yapımı STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Tekli ray yapımı STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Manyetik ray yapımı # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Yol yapımı STR_ROAD_MENU_TRAM_CONSTRUCTION :Tramvay yapımı # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Suyolu inşaatı # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Havalimanı inşası # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Peyzaj STR_LANDSCAPING_MENU_PLANT_TREES :Ağaç dik STR_LANDSCAPING_MENU_PLACE_SIGN :Tabela dik # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Ses/müzik # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Son mesaj/haber raporu STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Mesaj geçmişi STR_NEWS_MENU_DELETE_ALL_MESSAGES :Tüm mesajları sil # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Arazi bilgisi STR_ABOUT_MENU_HELP :Yardım & Kılavuzlar -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Konsolu aç/kapa STR_ABOUT_MENU_AI_DEBUG :YZ/Oyun betik hata ayıklama STR_ABOUT_MENU_SCREENSHOT :Ekran görüntüsü diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index c647e12358..a497550f16 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -548,31 +548,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Прозорі STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Прозорі назви станцій # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Зберегти гру STR_FILE_MENU_LOAD_GAME :Завантажити гру STR_FILE_MENU_QUIT_GAME :Покинути гру -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Вихід # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Карта світу STR_MAP_MENU_EXTRA_VIEWPORT :Додаткове вікно STR_MAP_MENU_LINGRAPH_LEGEND :Легенда вантажопотоку STR_MAP_MENU_SIGN_LIST :Список позначок # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Список міст STR_TOWN_MENU_FOUND_TOWN :Заснувати місто # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Субсидії # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Операційний прибуток STR_GRAPH_MENU_INCOME_GRAPH :Графік доходів STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Доставка вантажів @@ -581,57 +575,46 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Вартіст STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Вартість перевезень # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Рейтингова таблиця STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Детальний рейтинг продуктивності STR_GRAPH_MENU_HIGHSCORE :Таблиця рекордів # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Список підприємств STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Виробничі ланцюжки STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Заснувати підприємство # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Будівництво залізниці STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Будівництво електрифікованої залізниці STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Будівництво монорейкової залізниці STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Будівництво магнітної залізниці # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Будівництво автомобільних доріг STR_ROAD_MENU_TRAM_CONSTRUCTION :Будівництво трамвайних колій # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Будівництво водних шляхів # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Будівництво аеропортів # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Ландшафт STR_LANDSCAPING_MENU_PLANT_TREES :Посадка дерев STR_LANDSCAPING_MENU_PLACE_SIGN :Встановлення позначок # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Звук/Музика # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Останнє повідомлення STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Історія повідомлень STR_NEWS_MENU_DELETE_ALL_MESSAGES :Видалити всі повідомлення # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Інформація про ділянку -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Вкл./відкл. консоль STR_ABOUT_MENU_AI_DEBUG :Зневадження ШІ / ігрового скрипту STR_ABOUT_MENU_SCREENSHOT :Знімок екрану diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index de677c0210..2060def919 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -379,30 +379,24 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :شفاف عما STR_SETTINGS_MENU_TRANSPARENT_SIGNS :شفاف اشارے # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :کھیل محفوظ کرو STR_FILE_MENU_LOAD_GAME :کھیل دوبارہ چڑھاو STR_FILE_MENU_QUIT_GAME :کھیل چھوڑ دو -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :باہر نکلو # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :دنیا کا نقشھ STR_MAP_MENU_EXTRA_VIEWPORT :اضافی منظر STR_MAP_MENU_SIGN_LIST :اشاروں کی فھرست # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :کتبِ قصبھ جات STR_TOWN_MENU_FOUND_TOWN :قصبھ قائم کیجیئے # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :امداد # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :عملی منافع مخطط STR_GRAPH_MENU_INCOME_GRAPH :آمدنی مخطط STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :پھنچائے گئے سامان کا مخطط @@ -411,54 +405,43 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :کمپنی کی STR_GRAPH_MENU_CARGO_PAYMENT_RATES :سامان کی ادایگی کا تناسب # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :کمپنیوں کے گروپ کی فہرست STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :تفصیلی عملی درجہ بندی # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :کتبِ صنعت STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :نئ سنعت تعمیر کیجیئے # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :راھ آھن پٹری کی تعمیر STR_RAIL_MENU_ELRAIL_CONSTRUCTION :برقی راھ آھن پٹری کی تعمیر STR_RAIL_MENU_MONORAIL_CONSTRUCTION :وحید راھ کی تعمیر STR_RAIL_MENU_MAGLEV_CONSTRUCTION :علناظیس کی تعمیر # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :سڑک کی تعمیر STR_ROAD_MENU_TRAM_CONSTRUCTION :ٹرام وے کی تعمیر # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :نھر کی تعمیر # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :ھواگاھ کی تعمیر # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :منظر کشی STR_LANDSCAPING_MENU_PLANT_TREES :درخت لگایئے STR_LANDSCAPING_MENU_PLACE_SIGN :اشارھ لگایے # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :آواز و موسیقی # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :پچھلا پیعام/ خبر STR_NEWS_MENU_MESSAGE_HISTORY_MENU :تاریخِ پیغامات # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :زمینی رقبہ کی معلومات -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :حائطھ تدویم STR_ABOUT_MENU_AI_DEBUG :AI debug STR_ABOUT_MENU_SCREENSHOT :اسکرین کی تصویر diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index c2c2bd0d5f..f8c1178640 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -440,31 +440,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Làm trong su STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Làm trong suốt biển hiệu # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Lưu game STR_FILE_MENU_LOAD_GAME :Nạp game STR_FILE_MENU_QUIT_GAME :Bỏ game -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Thoát # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Bản đồ thế giới STR_MAP_MENU_EXTRA_VIEWPORT :Cửa sổ bổ sung STR_MAP_MENU_LINGRAPH_LEGEND :Ghi chú luồng hàng hóa STR_MAP_MENU_SIGN_LIST :Danh sách biển hiệu # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Thư mục thị trấn STR_TOWN_MENU_FOUND_TOWN :Thị Xã # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Tiền trợ cấp # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Biều đồ lợi nhuận hoạt động STR_GRAPH_MENU_INCOME_GRAPH :Biểu đồ thu nhập STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Biểu đồ hàng hoá phân phối @@ -473,58 +467,47 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Biểu đồ gi STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Bảng giá cước vận chuyển # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Bảng tầm cỡ công ty STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Chi tiết hệ số năng suất STR_GRAPH_MENU_HIGHSCORE :Bảng điểm chơi cao nhất # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Danh mục các ngành STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Chuỗi cung ứng STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Góp vốn xây nhà máy mới # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Công trình đường ray STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Công trình đường ray điện STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Công trình tàu đơn ray STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Công trình tàu điện từ # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Công trình đường ôtô STR_ROAD_MENU_TRAM_CONSTRUCTION :Công trình ô tô điện # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Công trình đường thuỷ # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Công trình sân bay # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Phong cảnh STR_LANDSCAPING_MENU_PLANT_TREES :Trồng cây STR_LANDSCAPING_MENU_PLACE_SIGN :Đặt ký hiệu # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Âm thanh/nhạc # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Thư/bản tin cuối cùng STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Thông báo cũ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Xoá tất cả thông điệp # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Thông tin vùng đất STR_ABOUT_MENU_HELP :Trợ giúp & hướng dẫn -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Bật/tắt bảng lệnh STR_ABOUT_MENU_AI_DEBUG :Gỡ rối AI / Game script STR_ABOUT_MENU_SCREENSHOT :Ảnh chụp màn hình diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 6ca4d9e6ce..e7fac0868b 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -402,31 +402,25 @@ STR_SETTINGS_MENU_TRANSPARENT_BUILDINGS :Adeiladau trylo STR_SETTINGS_MENU_TRANSPARENT_SIGNS :Arwyddion tryloyw # File menu -###length 5 STR_FILE_MENU_SAVE_GAME :Cadw Gêm STR_FILE_MENU_LOAD_GAME :Llwytho Gêm STR_FILE_MENU_QUIT_GAME :Rhoi'r gorau i'r Gêm -STR_FILE_MENU_SEPARATOR : STR_FILE_MENU_EXIT :Gadael # Map menu -###length 4 STR_MAP_MENU_MAP_OF_WORLD :Map o'r Byd STR_MAP_MENU_EXTRA_VIEWPORT :Ffenestr Olygfa Newydd STR_MAP_MENU_LINGRAPH_LEGEND :Allwedd Llif Cargo STR_MAP_MENU_SIGN_LIST :Rhestr Arwyddion # Town menu -###length 2 STR_TOWN_MENU_TOWN_DIRECTORY :Cyfeiriadur Trefi STR_TOWN_MENU_FOUND_TOWN :Sefydlu tref # Subsidies menu -###length 1 STR_SUBSIDIES_MENU_SUBSIDIES :Cymorthdaliadau # Graph menu -###length 6 STR_GRAPH_MENU_OPERATING_PROFIT_GRAPH :Graff Elw Gweithredol STR_GRAPH_MENU_INCOME_GRAPH :Graff Incwm STR_GRAPH_MENU_DELIVERED_CARGO_GRAPH :Graff Llwythi a Ddanfonwyd @@ -435,56 +429,45 @@ STR_GRAPH_MENU_COMPANY_VALUE_GRAPH :Graff Gwerth Cw STR_GRAPH_MENU_CARGO_PAYMENT_RATES :Cyfraddau Tâl Llwythi # Company league menu -###length 3 STR_GRAPH_MENU_COMPANY_LEAGUE_TABLE :Tabl Cynghrair Cwmnïau STR_GRAPH_MENU_DETAILED_PERFORMANCE_RATING :Graddfa Fanwl Perfformiad STR_GRAPH_MENU_HIGHSCORE :Tabl sgôr uchaf # Industry menu -###length 3 STR_INDUSTRY_MENU_INDUSTRY_DIRECTORY :Cyfeiriadur Diwydiannau STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Cadwyni diwydiant STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Ariannu diwydiant newydd # URailway construction menu -###length 4 STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Adeiladu rheilffordd STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Adeiladu rheilffordd drydan STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Adeiladu monoreilffordd STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Adeiladu maglef # Road construction menu -###length 2 STR_ROAD_MENU_ROAD_CONSTRUCTION :Adeiladu ffyrdd STR_ROAD_MENU_TRAM_CONSTRUCTION :Adeiladu tramffordd # Waterways construction menu -###length 1 STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Adeiladu camlesi # Aairport construction menu -###length 1 STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Adeiladu maes awyr # Landscaping menu -###length 3 STR_LANDSCAPING_MENU_LANDSCAPING :Tirweddu STR_LANDSCAPING_MENU_PLANT_TREES :Plannu coed STR_LANDSCAPING_MENU_PLACE_SIGN :Gosod arwydd # Music menu -###length 1 STR_TOOLBAR_SOUND_MUSIC :Sain/cerddoriaeth # Message menu -###length 3 STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Neges/Adroddiad newyddion ddiwethaf STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Hanes negeseuon # About menu -###length 12 STR_ABOUT_MENU_LAND_BLOCK_INFO :Gwybodaeth ardal tir -STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Toglu Consol STR_ABOUT_MENU_AI_DEBUG :Dadnamu AI / Sgript Gêm STR_ABOUT_MENU_SCREENSHOT :Ciplun From c5a292c0df0a2fc916991c87d29b2fff2eaefa75 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 25 Nov 2023 20:57:20 +0000 Subject: [PATCH 03/40] Fix #11493: Incorrect flow values in LinkGraphJob::EdgeAnnotation (#11494) --- src/linkgraph/linkgraphjob.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/linkgraph/linkgraphjob.cpp b/src/linkgraph/linkgraphjob.cpp index 64494ffddb..26fafbe613 100644 --- a/src/linkgraph/linkgraphjob.cpp +++ b/src/linkgraph/linkgraphjob.cpp @@ -221,7 +221,7 @@ void Path::Fork(Path *base, uint cap, int free_cap, uint dist) uint Path::AddFlow(uint new_flow, LinkGraphJob &job, uint max_saturation) { if (this->parent != nullptr) { - LinkGraphJob::EdgeAnnotation edge = job[this->parent->node][this->node]; + LinkGraphJob::EdgeAnnotation &edge = job[this->parent->node][this->node]; if (max_saturation != UINT_MAX) { uint usable_cap = edge.base.capacity * max_saturation / 100; if (usable_cap > edge.Flow()) { From 872fdcbbab45b224e38e27b875104b24c3c74e7b Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 26 Nov 2023 15:59:41 +0000 Subject: [PATCH 04/40] Change: When building NewGRFs, use grfid (from grfcodec) to calculate NewGRF MD5 hash. (#11492) This allows for v2 container NewGRFs to be created. Hashes are needed for building the baseset metadata, so the .hash files are stored the source tree so they can be built if grfcodec and grfid are not present. The hash of openttd.grf is not actually needed, but it is simpler to leave it in than handle only orig_extra.grf. --- cmake/CreateGrfCommand.cmake | 3 ++- cmake/FindGrfcodec.cmake | 2 ++ cmake/scripts/Baseset.cmake | 3 ++- cmake/scripts/CreateGRF.cmake | 14 ++++++++++++++ media/baseset/CMakeLists.txt | 1 + media/baseset/openttd.grf.hash | 1 + media/baseset/orig_extra.grf.hash | 1 + 7 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 media/baseset/openttd.grf.hash create mode 100644 media/baseset/orig_extra.grf.hash diff --git a/cmake/CreateGrfCommand.cmake b/cmake/CreateGrfCommand.cmake index 107ec09b88..642fffb27f 100644 --- a/cmake/CreateGrfCommand.cmake +++ b/cmake/CreateGrfCommand.cmake @@ -28,12 +28,13 @@ function(create_grf_command) list(APPEND GRF_PNG_BINARY_FILES ${GRF_PNG_BINARY_FILE}) endforeach() - add_custom_command(OUTPUT ${GRF_BINARY_FILE} + add_custom_command(OUTPUT ${GRF_BINARY_FILE} ${GRF_BINARY_FILE}.hash COMMAND ${CMAKE_COMMAND} -DGRF_SOURCE_FOLDER=${CMAKE_CURRENT_SOURCE_DIR} -DGRF_BINARY_FILE=${GRF_BINARY_FILE} -DNFORENUM_EXECUTABLE=${NFORENUM_EXECUTABLE} -DGRFCODEC_EXECUTABLE=${GRFCODEC_EXECUTABLE} + -DGRFID_EXECUTABLE=${GRFID_EXECUTABLE} -P ${CMAKE_SOURCE_DIR}/cmake/scripts/CreateGRF.cmake MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/cmake/scripts/CreateGRF.cmake DEPENDS ${GRF_PNG_BINARY_FILES} diff --git a/cmake/FindGrfcodec.cmake b/cmake/FindGrfcodec.cmake index 089f956706..d4d8d91708 100644 --- a/cmake/FindGrfcodec.cmake +++ b/cmake/FindGrfcodec.cmake @@ -2,6 +2,7 @@ # find_program(GRFCODEC_EXECUTABLE grfcodec) +find_program(GRFID_EXECUTABLE grfid) find_program(NFORENUM_EXECUTABLE nforenum) include(FindPackageHandleStandardArgs) @@ -9,5 +10,6 @@ find_package_handle_standard_args(Grfcodec FOUND_VAR GRFCODEC_FOUND REQUIRED_VARS GRFCODEC_EXECUTABLE + GRFID_EXECUTABLE NFORENUM_EXECUTABLE ) diff --git a/cmake/scripts/Baseset.cmake b/cmake/scripts/Baseset.cmake index cb5fb5704d..c298aea484 100644 --- a/cmake/scripts/Baseset.cmake +++ b/cmake/scripts/Baseset.cmake @@ -58,6 +58,7 @@ list(SORT ${PLACE_HOLDER}) string(REPLACE ";" "\n" ${PLACE_HOLDER} "${${PLACE_HOLDER}}") # Get the grf md5 -file(MD5 ${BASESET_EXTRAGRF_FILE} ORIG_EXTRA_GRF_MD5) +file(READ ${BASESET_EXTRAGRF_FILE}.hash ORIG_EXTRA_GRF_MD5) +string(STRIP ${ORIG_EXTRA_GRF_MD5} ORIG_EXTRA_GRF_MD5) configure_file(${BASESET_SOURCE_FILE} ${BASESET_BINARY_FILE}) diff --git a/cmake/scripts/CreateGRF.cmake b/cmake/scripts/CreateGRF.cmake index d47e39aa0e..e93f5c66be 100644 --- a/cmake/scripts/CreateGRF.cmake +++ b/cmake/scripts/CreateGRF.cmake @@ -11,6 +11,9 @@ endif() if(NOT GRFCODEC_EXECUTABLE) message(FATAL_ERROR "Script needs GRFCODEC_EXECUTABLE defined") endif() +if(NOT GRFID_EXECUTABLE) + message(FATAL_ERROR "Script needs GRFID_EXECUTABLE defined") +endif() if(NOT GRF_SOURCE_FOLDER) message(FATAL_ERROR "Script needs GRF_SOURCE_FOLDER defined") endif() @@ -55,4 +58,15 @@ if(RESULT) message(FATAL_ERROR "GRFCodec failed") endif() +execute_process(COMMAND ${GRFID_EXECUTABLE} -m ${GRF_SOURCE_FOLDER_NAME}.grf OUTPUT_VARIABLE GRFID_HASH RESULT_VARIABLE RESULT) +if(RESULT) + if(NOT RESULT MATCHES "^[0-9]*$") + message(FATAL_ERROR "Failed to run GRFID (${RESULT}), please check GRFID_EXECUTABLE variable") + endif() + message(FATAL_ERROR "GRFID failed") +endif() + +file(WRITE ${GRF_BINARY_FILE}.hash ${GRFID_HASH}) + +# Copy build files back to the source directory. execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${GRF_SOURCE_FOLDER_NAME}.grf ${GRF_BINARY_FILE}) diff --git a/media/baseset/CMakeLists.txt b/media/baseset/CMakeLists.txt index 1bf16ec064..d3c5f87337 100644 --- a/media/baseset/CMakeLists.txt +++ b/media/baseset/CMakeLists.txt @@ -49,6 +49,7 @@ foreach(BASESET_SOURCE_FILE IN LISTS BASESET_SOURCE_FILES) MAIN_DEPENDENCY ${BASESET_SOURCE_FILE} DEPENDS ${LANG_SOURCE_FILES} ${BASESET_EXTRAGRF_FILE} + ${BASESET_EXTRAGRF_FILE}.hash ${CMAKE_SOURCE_DIR}/cmake/scripts/Baseset.cmake WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating ${BASESET_SOURCE_FILE_NAME} baseset metadata file" diff --git a/media/baseset/openttd.grf.hash b/media/baseset/openttd.grf.hash new file mode 100644 index 0000000000..c35f659c50 --- /dev/null +++ b/media/baseset/openttd.grf.hash @@ -0,0 +1 @@ +237f3152daa7706aa30784ba72fb727a diff --git a/media/baseset/orig_extra.grf.hash b/media/baseset/orig_extra.grf.hash new file mode 100644 index 0000000000..b26114bc39 --- /dev/null +++ b/media/baseset/orig_extra.grf.hash @@ -0,0 +1 @@ +1fb8473f51d1c57c3bba4ae6cfca1cb2 From 7bee955a4be19f93f53d190e14cb63dbe1ba0641 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 26 Nov 2023 17:56:51 +0000 Subject: [PATCH 05/40] Change: Set height of larger heightmap/scenario worldgen buttons by text height. (#11496) This allows the button height to scale properly by font size. --- src/genworld_gui.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index a49b58d8d7..ef3d3b0f00 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -181,13 +181,13 @@ static const NWidgetPart _nested_generate_landscape_widgets[] = { /* AI, GS, and NewGRF settings */ NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_AI_BUTTON), SetMinimalSize(0, 24), SetDataTip(STR_MAPGEN_AI_SETTINGS, STR_MAPGEN_AI_SETTINGS_TOOLTIP), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_GS_BUTTON), SetMinimalSize(0, 24), SetDataTip(STR_MAPGEN_GS_SETTINGS, STR_MAPGEN_GS_SETTINGS_TOOLTIP), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_NEWGRF_BUTTON), SetMinimalSize(0, 24), SetDataTip(STR_MAPGEN_NEWGRF_SETTINGS, STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_AI_BUTTON), SetMinimalTextLines(2, 0), SetDataTip(STR_MAPGEN_AI_SETTINGS, STR_MAPGEN_AI_SETTINGS_TOOLTIP), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_GS_BUTTON), SetMinimalTextLines(2, 0), SetDataTip(STR_MAPGEN_GS_SETTINGS, STR_MAPGEN_GS_SETTINGS_TOOLTIP), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_NEWGRF_BUTTON), SetMinimalTextLines(2, 0), SetDataTip(STR_MAPGEN_NEWGRF_SETTINGS, STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP), SetFill(1, 0), EndContainer(), /* Generate */ - NWidget(WWT_PUSHTXTBTN, COLOUR_GREEN, WID_GL_GENERATE_BUTTON), SetMinimalSize(84, 36), SetDataTip(STR_MAPGEN_GENERATE, STR_NULL), SetFill(1, 1), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREEN, WID_GL_GENERATE_BUTTON), SetMinimalTextLines(3, 0), SetDataTip(STR_MAPGEN_GENERATE, STR_NULL), SetFill(1, 1), EndContainer(), EndContainer(), }; @@ -298,13 +298,13 @@ static const NWidgetPart _nested_heightmap_load_widgets[] = { /* AI, GS, and NewGRF settings */ NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_AI_BUTTON), SetMinimalSize(0, 24), SetDataTip(STR_MAPGEN_AI_SETTINGS, STR_MAPGEN_AI_SETTINGS_TOOLTIP), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_GS_BUTTON), SetMinimalSize(0, 24), SetDataTip(STR_MAPGEN_GS_SETTINGS, STR_MAPGEN_GS_SETTINGS_TOOLTIP), SetFill(1, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_NEWGRF_BUTTON), SetMinimalSize(0, 24), SetDataTip(STR_MAPGEN_NEWGRF_SETTINGS, STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_AI_BUTTON), SetMinimalTextLines(2, 0), SetDataTip(STR_MAPGEN_AI_SETTINGS, STR_MAPGEN_AI_SETTINGS_TOOLTIP), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_GS_BUTTON), SetMinimalTextLines(2, 0), SetDataTip(STR_MAPGEN_GS_SETTINGS, STR_MAPGEN_GS_SETTINGS_TOOLTIP), SetFill(1, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, WID_GL_NEWGRF_BUTTON), SetMinimalTextLines(2, 0), SetDataTip(STR_MAPGEN_NEWGRF_SETTINGS, STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP), SetFill(1, 0), EndContainer(), /* Generate */ - NWidget(WWT_PUSHTXTBTN, COLOUR_GREEN, WID_GL_GENERATE_BUTTON), SetMinimalSize(84, 36), SetDataTip(STR_MAPGEN_GENERATE, STR_NULL), SetFill(1, 1), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREEN, WID_GL_GENERATE_BUTTON), SetMinimalTextLines(3, 0), SetDataTip(STR_MAPGEN_GENERATE, STR_NULL), SetFill(1, 1), EndContainer(), EndContainer(), }; From 46098449b6ee35be0d6d8eecd6be5f6a43f29b1d Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 26 Nov 2023 19:30:22 +0000 Subject: [PATCH 06/40] Fix 7cfcf65: cargo_filter_criteria is now a CargoID instead of a index. (#11497) --- src/vehicle_gui_base.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vehicle_gui_base.h b/src/vehicle_gui_base.h index 5858dbc800..3a54805c2c 100644 --- a/src/vehicle_gui_base.h +++ b/src/vehicle_gui_base.h @@ -88,7 +88,7 @@ struct BaseVehicleListWindow : public Window { Scrollbar *vscroll; VehicleListIdentifier vli; ///< Identifier of the vehicle list we want to currently show. VehicleID vehicle_sel; ///< Selected vehicle - byte cargo_filter_criteria; ///< Selected cargo filter index + CargoID cargo_filter_criteria; ///< Selected cargo filter index uint order_arrow_width; ///< Width of the arrow in the small order list. typedef GUIVehicleGroupList::SortFunction VehicleGroupSortFunction; From 2b92577f5ca39c8ef05afd2d71f8151581443eda Mon Sep 17 00:00:00 2001 From: Richard Wheeler <2762690+zephyris@users.noreply.github.com> Date: Sat, 25 Nov 2023 02:00:25 +0000 Subject: [PATCH 07/40] Fix: Add shading to river slopes Adds a 32bpp shading to the river rapids/slopes to make them more visible. Requires a bump of original graphics grfs to use container version 2. Fixes #9031 --- cmake/scripts/CreateGRF.cmake | 2 +- media/baseset/openttd.grf | Bin 509868 -> 553738 bytes media/baseset/openttd.grf.hash | 2 +- media/baseset/orig_extra.grf | Bin 329463 -> 420418 bytes media/baseset/orig_extra.grf.hash | 2 +- media/baseset/orig_extra/rivers/rapids.nfo | 256 +++++++++++++----- .../orig_extra/rivers/rapids_shading.png | Bin 0 -> 30746 bytes 7 files changed, 195 insertions(+), 67 deletions(-) create mode 100644 media/baseset/orig_extra/rivers/rapids_shading.png diff --git a/cmake/scripts/CreateGRF.cmake b/cmake/scripts/CreateGRF.cmake index e93f5c66be..55e136ef4e 100644 --- a/cmake/scripts/CreateGRF.cmake +++ b/cmake/scripts/CreateGRF.cmake @@ -50,7 +50,7 @@ if(RESULT) message(FATAL_ERROR "NFORenum failed") endif() -execute_process(COMMAND ${GRFCODEC_EXECUTABLE} -n -s -e -p1 ${GRF_SOURCE_FOLDER_NAME}.grf RESULT_VARIABLE RESULT) +execute_process(COMMAND ${GRFCODEC_EXECUTABLE} -n -s -e -g2 -p1 ${GRF_SOURCE_FOLDER_NAME}.grf RESULT_VARIABLE RESULT) if(RESULT) if(NOT RESULT MATCHES "^[0-9]*$") message(FATAL_ERROR "Failed to run GRFCodec (${RESULT}), please check GRFCODEC_EXECUTABLE variable") diff --git a/media/baseset/openttd.grf b/media/baseset/openttd.grf index dd8acf3e8217fd37af9b7895ee970cde8d033a6a..7f4f6cbc499876021243cd11e7bc33fac4132c52 100644 GIT binary patch delta 87565 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 delta 43056 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 diff --git a/media/baseset/openttd.grf.hash b/media/baseset/openttd.grf.hash index c35f659c50..25a50247f5 100644 --- a/media/baseset/openttd.grf.hash +++ b/media/baseset/openttd.grf.hash @@ -1 +1 @@ -237f3152daa7706aa30784ba72fb727a +4f03553f614a06d86dc06376db3353c7 diff --git a/media/baseset/orig_extra.grf b/media/baseset/orig_extra.grf index 881c4631cec0aeb0ccd4b64bef6b8fcb520be2d4..5f2298a354108040a842dd843933b6b0594c6de6 100644 GIT binary patch delta 123146 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 delta 30185 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%0D}*xmu~H zu@=`z9B@?e&sEL>Zc&18(8NovA|O-*@sg178NFLus<%H2_(#1y55%Q@2;u!cQ(h>X zJ*i?)8yYyXNodEnp4r^NDbl;RijHkLtr4!bX3d>!zPW=HdW?`U&0?-zjWC#d?*Z4lv)Xx<;ru%4t4TUN3E ze0v^FCzaC~;hk9ivhc*I0QNsVMU(v4|LHU!Ud8zu3oL_*r=~N3MSAosERwn)e?J?* ze#$oi>_4HTRJ~C7O~6A+yBYS;-v$)8db-fhN&Tk_v9%x%t-8BQ9sOMcdzW+6f4Fe? zT!6a``;M;H26yti0C$`Ay++xHAbd~#=L*j61G>BY4*~Kv?+4oUTw(cn+V)%_U!tw& z3jfQxTL9htz3}rznx^g8P5N5^{aq^zkwMDTefeL|;VPFg{Y+nMgX1tZ;@xs3tnpvUKTE z|0%)RrOP48vqFk*Z~1iDicgiW($c^wfxf`9blF;#EsfKsF8!a+2&8;ywCxeWvbD?M zh#(b?2$nDVha-X&%a*5p`fnT&z&{$ZL@2yW=V+q&f6ZQ{`^B}@REc1!I{00#vmV8O zsoVcA&D5htaJi(xs=WS7Tjf6uyz^#x9sLLWrN!53&{Dmw(Z)8SddHu@w^h58avg}2 zIyg87d_c{6p+B#ASuY&pAJweV7{vPz0M{eFkCt}~@&4!|#=PIlnu7Vd7K0QkOy>B{ zTD+{?+Jpc14Uzx`>4Y%F#E-HZtNUfg9z;OQQHX_}6g`m|mMF~eE zc*lRtDg`6q?)G3*Z!%3Hm?p4ADkb~g%t!pYW@)|&u%6A5|2^Ym5#)HjSFY-;jBIgM zMyb9Dw1Cny-(<9!aVKPq)H24X&dMmAPB%K>tOQ=V=5=FqgW=s}`{I=k-m~c5l4}Y5 z+nk;K_gc<>ujRD*JO90w^WSSZRQTuDa;DsDi2r*n=Ra|^@4we_{(CLw|A}ik=`A!Q zLnRqgfMlcxNJiibQg~g4F0thHAxUBI4ch2CjNpZwi?|e}MG1G`&woe)DXY+TK7>7# Pk7B|Dd@_Q6sqX&(?libx diff --git a/media/baseset/orig_extra.grf.hash b/media/baseset/orig_extra.grf.hash index b26114bc39..3d6fe3d451 100644 --- a/media/baseset/orig_extra.grf.hash +++ b/media/baseset/orig_extra.grf.hash @@ -1 +1 @@ -1fb8473f51d1c57c3bba4ae6cfca1cb2 +3e860a0e880e3dc90615facf5f455fc6 diff --git a/media/baseset/orig_extra/rivers/rapids.nfo b/media/baseset/orig_extra/rivers/rapids.nfo index e03d96ca17..99f87c7392 100644 --- a/media/baseset/orig_extra/rivers/rapids.nfo +++ b/media/baseset/orig_extra/rivers/rapids.nfo @@ -5,115 +5,243 @@ // -1 * 0 0C "Rapid graphics" -1 * 4 01 05 01 04 - -1 sprites/rapids.png 8bpp 10 10 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 90 10 64 39 -31 -8 normal - -1 sprites/rapids.png 8bpp 170 10 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 250 10 64 39 -31 -8 normal + -1 sprites/rapids.png 8bpp 10 10 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 10 10 64 23 -31 0 normal + | sprites/rapids.png mask 10 10 + -1 sprites/rapids.png 8bpp 90 10 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 90 10 64 39 -31 -8 normal + | sprites/rapids.png mask 90 10 + -1 sprites/rapids.png 8bpp 170 10 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 170 10 64 23 -31 0 normal + | sprites/rapids.png mask 10 10 + -1 sprites/rapids.png 8bpp 250 10 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 250 10 64 39 -31 -8 normal + | sprites/rapids.png mask 250 10 -1 * 7 02 05 00 01 00 00 00 -1 * 4 01 05 01 04 - -1 sprites/rapids.png 8bpp 10 60 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 90 60 64 39 -31 -8 normal - -1 sprites/rapids.png 8bpp 170 60 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 250 60 64 39 -31 -8 normal + -1 sprites/rapids.png 8bpp 10 60 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 10 60 64 23 -31 0 normal + | sprites/rapids.png mask 10 60 + -1 sprites/rapids.png 8bpp 90 60 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 90 60 64 39 -31 -8 normal + | sprites/rapids.png mask 90 60 + -1 sprites/rapids.png 8bpp 170 60 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 170 60 64 23 -31 0 normal + | sprites/rapids.png mask 10 60 + -1 sprites/rapids.png 8bpp 250 60 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 250 60 64 39 -31 -8 normal + | sprites/rapids.png mask 250 60 -1 * 7 02 05 01 01 00 00 00 -1 * 4 01 05 01 04 - -1 sprites/rapids.png 8bpp 10 110 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 90 110 64 39 -31 -8 normal - -1 sprites/rapids.png 8bpp 170 110 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 250 110 64 39 -31 -8 normal + -1 sprites/rapids.png 8bpp 10 110 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 10 110 64 23 -31 0 normal + | sprites/rapids.png mask 10 110 + -1 sprites/rapids.png 8bpp 90 110 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 90 110 64 39 -31 -8 normal + | sprites/rapids.png mask 90 110 + -1 sprites/rapids.png 8bpp 170 110 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 170 110 64 23 -31 0 normal + | sprites/rapids.png mask 10 110 + -1 sprites/rapids.png 8bpp 250 110 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 250 110 64 39 -31 -8 normal + | sprites/rapids.png mask 250 110 -1 * 7 02 05 02 01 00 00 00 -1 * 4 01 05 01 04 - -1 sprites/rapids.png 8bpp 10 160 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 90 160 64 39 -31 -8 normal - -1 sprites/rapids.png 8bpp 170 160 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 250 160 64 39 -31 -8 normal + -1 sprites/rapids.png 8bpp 10 160 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 10 160 64 23 -31 0 normal + | sprites/rapids.png mask 10 160 + -1 sprites/rapids.png 8bpp 90 160 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 90 160 64 39 -31 -8 normal + | sprites/rapids.png mask 90 160 + -1 sprites/rapids.png 8bpp 170 160 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 170 160 64 23 -31 0 normal + | sprites/rapids.png mask 10 160 + -1 sprites/rapids.png 8bpp 250 160 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 250 160 64 39 -31 -8 normal + | sprites/rapids.png mask 250 160 -1 * 7 02 05 03 01 00 00 00 -1 * 4 01 05 01 04 - -1 sprites/rapids.png 8bpp 10 210 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 90 210 64 39 -31 -8 normal - -1 sprites/rapids.png 8bpp 170 210 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 250 210 64 39 -31 -8 normal + -1 sprites/rapids.png 8bpp 10 210 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 10 210 64 23 -31 0 normal + | sprites/rapids.png mask 10 210 + -1 sprites/rapids.png 8bpp 90 210 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 90 210 64 39 -31 -8 normal + | sprites/rapids.png mask 90 210 + -1 sprites/rapids.png 8bpp 170 210 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 170 210 64 23 -31 0 normal + | sprites/rapids.png mask 10 210 + -1 sprites/rapids.png 8bpp 250 210 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 250 210 64 39 -31 -8 normal + | sprites/rapids.png mask 250 210 -1 * 7 02 05 04 01 00 00 00 -1 * 4 01 05 01 04 - -1 sprites/rapids.png 8bpp 10 260 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 90 260 64 39 -31 -8 normal - -1 sprites/rapids.png 8bpp 170 260 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 250 260 64 39 -31 -8 normal + -1 sprites/rapids.png 8bpp 10 260 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 10 260 64 23 -31 0 normal + | sprites/rapids.png mask 10 260 + -1 sprites/rapids.png 8bpp 90 260 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 90 260 64 39 -31 -8 normal + | sprites/rapids.png mask 90 260 + -1 sprites/rapids.png 8bpp 170 260 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 170 260 64 23 -31 0 normal + | sprites/rapids.png mask 10 260 + -1 sprites/rapids.png 8bpp 250 260 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 250 260 64 39 -31 -8 normal + | sprites/rapids.png mask 250 260 -1 * 7 02 05 05 01 00 00 00 -1 * 4 01 05 01 04 - -1 sprites/rapids.png 8bpp 10 310 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 90 310 64 39 -31 -8 normal - -1 sprites/rapids.png 8bpp 170 310 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 250 310 64 39 -31 -8 normal + -1 sprites/rapids.png 8bpp 10 310 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 10 310 64 23 -31 0 normal + | sprites/rapids.png mask 10 310 + -1 sprites/rapids.png 8bpp 90 310 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 90 310 64 39 -31 -8 normal + | sprites/rapids.png mask 90 310 + -1 sprites/rapids.png 8bpp 170 310 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 170 310 64 23 -31 0 normal + | sprites/rapids.png mask 10 310 + -1 sprites/rapids.png 8bpp 250 310 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 250 310 64 39 -31 -8 normal + | sprites/rapids.png mask 250 310 -1 * 7 02 05 06 01 00 00 00 -1 * 4 01 05 01 04 - -1 sprites/rapids.png 8bpp 10 360 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 90 360 64 39 -31 -8 normal - -1 sprites/rapids.png 8bpp 170 360 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 250 360 64 39 -31 -8 normal + -1 sprites/rapids.png 8bpp 10 360 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 10 360 64 23 -31 0 normal + | sprites/rapids.png mask 10 360 + -1 sprites/rapids.png 8bpp 90 360 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 90 360 64 39 -31 -8 normal + | sprites/rapids.png mask 90 360 + -1 sprites/rapids.png 8bpp 170 360 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 170 360 64 23 -31 0 normal + | sprites/rapids.png mask 10 360 + -1 sprites/rapids.png 8bpp 250 360 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 250 360 64 39 -31 -8 normal + | sprites/rapids.png mask 250 360 -1 * 7 02 05 07 01 00 00 00 -1 * 4 01 05 01 04 - -1 sprites/rapids.png 8bpp 10 410 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 90 410 64 39 -31 -8 normal - -1 sprites/rapids.png 8bpp 170 410 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 250 410 64 39 -31 -8 normal + -1 sprites/rapids.png 8bpp 10 410 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 10 410 64 23 -31 0 normal + | sprites/rapids.png mask 10 410 + -1 sprites/rapids.png 8bpp 90 410 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 90 410 64 39 -31 -8 normal + | sprites/rapids.png mask 90 410 + -1 sprites/rapids.png 8bpp 170 410 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 170 410 64 23 -31 0 normal + | sprites/rapids.png mask 10 410 + -1 sprites/rapids.png 8bpp 250 410 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 250 410 64 39 -31 -8 normal + | sprites/rapids.png mask 250 410 -1 * 7 02 05 08 01 00 00 00 -1 * 4 01 05 01 04 - -1 sprites/rapids.png 8bpp 10 460 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 90 460 64 39 -31 -8 normal - -1 sprites/rapids.png 8bpp 170 460 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 250 460 64 39 -31 -8 normal + -1 sprites/rapids.png 8bpp 10 460 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 10 460 64 23 -31 0 normal + | sprites/rapids.png mask 10 460 + -1 sprites/rapids.png 8bpp 90 460 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 90 460 64 39 -31 -8 normal + | sprites/rapids.png mask 90 460 + -1 sprites/rapids.png 8bpp 170 460 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 170 460 64 23 -31 0 normal + | sprites/rapids.png mask 10 460 + -1 sprites/rapids.png 8bpp 250 460 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 250 460 64 39 -31 -8 normal + | sprites/rapids.png mask 250 460 -1 * 7 02 05 09 01 00 00 00 -1 * 4 01 05 01 04 - -1 sprites/rapids.png 8bpp 10 510 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 90 510 64 39 -31 -8 normal - -1 sprites/rapids.png 8bpp 170 510 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 250 510 64 39 -31 -8 normal + -1 sprites/rapids.png 8bpp 10 510 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 10 510 64 23 -31 0 normal + | sprites/rapids.png mask 10 510 + -1 sprites/rapids.png 8bpp 90 510 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 90 510 64 39 -31 -8 normal + | sprites/rapids.png mask 90 510 + -1 sprites/rapids.png 8bpp 170 510 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 170 510 64 23 -31 0 normal + | sprites/rapids.png mask 10 510 + -1 sprites/rapids.png 8bpp 250 510 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 250 510 64 39 -31 -8 normal + | sprites/rapids.png mask 250 510 -1 * 7 02 05 0A 01 00 00 00 -1 * 4 01 05 01 04 - -1 sprites/rapids.png 8bpp 10 560 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 90 560 64 39 -31 -8 normal - -1 sprites/rapids.png 8bpp 170 560 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 250 560 64 39 -31 -8 normal + -1 sprites/rapids.png 8bpp 10 560 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 10 560 64 23 -31 0 normal + | sprites/rapids.png mask 10 560 + -1 sprites/rapids.png 8bpp 90 560 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 90 560 64 39 -31 -8 normal + | sprites/rapids.png mask 90 560 + -1 sprites/rapids.png 8bpp 170 560 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 170 560 64 23 -31 0 normal + | sprites/rapids.png mask 10 560 + -1 sprites/rapids.png 8bpp 250 560 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 250 560 64 39 -31 -8 normal + | sprites/rapids.png mask 250 560 -1 * 7 02 05 0B 01 00 00 00 -1 * 4 01 05 01 04 - -1 sprites/rapids.png 8bpp 10 610 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 90 610 64 39 -31 -8 normal - -1 sprites/rapids.png 8bpp 170 610 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 250 610 64 39 -31 -8 normal + -1 sprites/rapids.png 8bpp 10 610 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 10 610 64 23 -31 0 normal + | sprites/rapids.png mask 10 610 + -1 sprites/rapids.png 8bpp 90 610 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 90 610 64 39 -31 -8 normal + | sprites/rapids.png mask 90 610 + -1 sprites/rapids.png 8bpp 170 610 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 170 610 64 23 -31 0 normal + | sprites/rapids.png mask 10 610 + -1 sprites/rapids.png 8bpp 250 610 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 250 610 64 39 -31 -8 normal + | sprites/rapids.png mask 250 610 -1 * 7 02 05 0C 01 00 00 00 -1 * 4 01 05 01 04 - -1 sprites/rapids.png 8bpp 10 660 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 90 660 64 39 -31 -8 normal - -1 sprites/rapids.png 8bpp 170 660 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 250 660 64 39 -31 -8 normal + -1 sprites/rapids.png 8bpp 10 660 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 10 660 64 23 -31 0 normal + | sprites/rapids.png mask 10 660 + -1 sprites/rapids.png 8bpp 90 660 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 90 660 64 39 -31 -8 normal + | sprites/rapids.png mask 90 660 + -1 sprites/rapids.png 8bpp 170 660 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 170 660 64 23 -31 0 normal + | sprites/rapids.png mask 10 660 + -1 sprites/rapids.png 8bpp 250 660 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 250 660 64 39 -31 -8 normal + | sprites/rapids.png mask 250 660 -1 * 7 02 05 0D 01 00 00 00 -1 * 4 01 05 01 04 - -1 sprites/rapids.png 8bpp 10 710 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 90 710 64 39 -31 -8 normal - -1 sprites/rapids.png 8bpp 170 710 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 250 710 64 39 -31 -8 normal + -1 sprites/rapids.png 8bpp 10 710 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 10 710 64 23 -31 0 normal + | sprites/rapids.png mask 10 710 + -1 sprites/rapids.png 8bpp 90 710 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 90 710 64 39 -31 -8 normal + | sprites/rapids.png mask 90 710 + -1 sprites/rapids.png 8bpp 170 710 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 170 710 64 23 -31 0 normal + | sprites/rapids.png mask 10 710 + -1 sprites/rapids.png 8bpp 250 710 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 250 710 64 39 -31 -8 normal + | sprites/rapids.png mask 250 710 -1 * 7 02 05 0E 01 00 00 00 -1 * 4 01 05 01 04 - -1 sprites/rapids.png 8bpp 10 760 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 90 760 64 39 -31 -8 normal - -1 sprites/rapids.png 8bpp 170 760 64 23 -31 0 normal - -1 sprites/rapids.png 8bpp 250 760 64 39 -31 -8 normal + -1 sprites/rapids.png 8bpp 10 760 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 10 760 64 23 -31 0 normal + | sprites/rapids.png mask 10 760 + -1 sprites/rapids.png 8bpp 90 760 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 90 760 64 39 -31 -8 normal + | sprites/rapids.png mask 90 760 + -1 sprites/rapids.png 8bpp 170 760 64 23 -31 0 normal + | sprites/rapids_shading.png 32bpp 170 760 64 23 -31 0 normal + | sprites/rapids.png mask 10 760 + -1 sprites/rapids.png 8bpp 250 760 64 39 -31 -8 normal + | sprites/rapids_shading.png 32bpp 250 760 64 39 -31 -8 normal + | sprites/rapids.png mask 250 760 -1 * 7 02 05 0F 01 00 00 00 -1 * 39 02 05 10 80 00 01 10 diff --git a/media/baseset/orig_extra/rivers/rapids_shading.png b/media/baseset/orig_extra/rivers/rapids_shading.png new file mode 100644 index 0000000000000000000000000000000000000000..2606f9d565c160f28a47e3da89d305f4c87bcca7 GIT binary patch literal 30746 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 literal 0 HcmV?d00001 From e3622da408dff9fb33da1b6e16235b0b258e32d0 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 27 Nov 2023 10:06:46 +0000 Subject: [PATCH 08/40] Fix #11500: Rename Textfile GUI's LinkType to HyperlinkType. (#11502) This disambiguates it with LinkType in league tables. --- src/textfile_gui.cpp | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index 3f5319cb26..57278000ae 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -160,7 +160,7 @@ void TextfileWindow::SetupScrollbars(bool force_reflow) static const std::regex _markdown_link_regex{"\\[(.+?)\\]\\((.+?)\\)", std::regex_constants::ECMAScript | std::regex_constants::optimize}; /** Types of link we support in markdown files. */ -enum class LinkType { +enum class HyperlinkType { Internal, ///< Internal link, or "anchor" in HTML language. Web, ///< Link to an external website. File, ///< Link to a local file. @@ -172,20 +172,20 @@ enum class LinkType { * * @param destination The hyperlink destination. * @param trusted Whether we trust the content of this file. - * @return LinkType The classification of the link. + * @return HyperlinkType The classification of the link. */ -static LinkType ClassifyHyperlink(const std::string &destination, bool trusted) +static HyperlinkType ClassifyHyperlink(const std::string &destination, bool trusted) { - if (destination.empty()) return LinkType::Unknown; - if (StrStartsWith(destination, "#")) return LinkType::Internal; + if (destination.empty()) return HyperlinkType::Unknown; + if (StrStartsWith(destination, "#")) return HyperlinkType::Internal; /* Only allow external / internal links for sources we trust. */ - if (!trusted) return LinkType::Unknown; + if (!trusted) return HyperlinkType::Unknown; - if (StrStartsWith(destination, "http://")) return LinkType::Web; - if (StrStartsWith(destination, "https://")) return LinkType::Web; - if (StrStartsWith(destination, "./")) return LinkType::File; - return LinkType::Unknown; + if (StrStartsWith(destination, "http://")) return HyperlinkType::Web; + if (StrStartsWith(destination, "https://")) return HyperlinkType::Web; + if (StrStartsWith(destination, "./")) return HyperlinkType::File; + return HyperlinkType::Unknown; } /** @@ -249,16 +249,16 @@ void TextfileWindow::FindHyperlinksInMarkdown(Line &line, size_t line_index) link.destination = match[2].str(); this->links.push_back(link); - LinkType link_type = ClassifyHyperlink(link.destination, this->trusted); + HyperlinkType link_type = ClassifyHyperlink(link.destination, this->trusted); StringControlCode link_colour; switch (link_type) { - case LinkType::Internal: + case HyperlinkType::Internal: link_colour = SCC_GREEN; break; - case LinkType::Web: + case HyperlinkType::Web: link_colour = SCC_LTBLUE; break; - case LinkType::File: + case HyperlinkType::File: link_colour = SCC_LTBROWN; break; default: @@ -394,7 +394,7 @@ void TextfileWindow::NavigateHistory(int delta) /* virtual */ void TextfileWindow::OnHyperlinkClick(const Hyperlink &link) { switch (ClassifyHyperlink(link.destination, this->trusted)) { - case LinkType::Internal: + case HyperlinkType::Internal: { auto it = std::find_if(this->link_anchors.cbegin(), this->link_anchors.cend(), [&](const Hyperlink &other) { return link.destination == other.destination; }); if (it != this->link_anchors.cend()) { @@ -405,11 +405,11 @@ void TextfileWindow::NavigateHistory(int delta) break; } - case LinkType::Web: + case HyperlinkType::Web: OpenBrowser(link.destination.c_str()); break; - case LinkType::File: + case HyperlinkType::File: this->NavigateToFile(link.destination, 0); break; From a856fbeca9b4416052e3adc714f355015a5846cb Mon Sep 17 00:00:00 2001 From: Richard Wheeler <2762690+zephyris@users.noreply.github.com> Date: Mon, 27 Nov 2023 13:00:20 +0000 Subject: [PATCH 09/40] Fix: Incorrect mask files for NE river slopes (#11503) --- media/baseset/orig_extra.grf | Bin 420418 -> 420256 bytes media/baseset/orig_extra/rivers/rapids.nfo | 32 ++++++++++----------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/media/baseset/orig_extra.grf b/media/baseset/orig_extra.grf index 5f2298a354108040a842dd843933b6b0594c6de6..9adc6e04f8daf499c9a659472fde96a6cc9c0924 100644 GIT binary patch delta 12636 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 Date: Mon, 27 Nov 2023 20:39:22 +0000 Subject: [PATCH 10/40] Change: Try stopping extmidi player with SIGINT first. (#11404) This may give the player a chance to issue MIDI note-off commands. The kill/waitpid cycle is also less aggressive, waiting 50ms each time. --- src/music/extmidi.cpp | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/src/music/extmidi.cpp b/src/music/extmidi.cpp index 86b8bb57c0..74539ff569 100644 --- a/src/music/extmidi.cpp +++ b/src/music/extmidi.cpp @@ -130,23 +130,38 @@ void MusicDriver_ExtMidi::DoPlay() } } -void MusicDriver_ExtMidi::DoStop() +/** + * Try to end child process with kill/waitpid for up to 1 second. + * @param pid The process ID to end. + * @param signal The signal type to send. + * @return True if the process has been ended. + */ +static bool KillWait(pid_t &pid, int signal) { - if (this->pid <= 0) return; - - /* First try to gracefully stop for about five seconds; - * 5 seconds = 5000 milliseconds, 10 ms per cycle => 500 cycles. */ - for (int i = 0; i < 500; i++) { - kill(this->pid, SIGTERM); - if (waitpid(this->pid, nullptr, WNOHANG) == this->pid) { + /* First try to stop for about a second; + * 1 seconds = 1000 milliseconds, 50 ms per cycle => 20 cycles. */ + for (int i = 0; i < 20; i++) { + kill(pid, signal); + if (waitpid(pid, nullptr, WNOHANG) == pid) { /* It has shut down, so we are done */ - this->pid = -1; - return; + pid = -1; + return true; } - /* Wait 10 milliseconds. */ - CSleep(10); + /* Wait 50 milliseconds. */ + CSleep(50); } + return false; +} + +void MusicDriver_ExtMidi::DoStop() +{ + if (this->pid <= 0) return; + + if (KillWait(this->pid, SIGINT)) return; + + if (KillWait(this->pid, SIGTERM)) return; + Debug(driver, 0, "extmidi: gracefully stopping failed, trying the hard way"); /* Gracefully stopping failed. Do it the hard way * and wait till the process finally died. */ From 6c91c4b99da0b20fdaa46225e385884686eeb927 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 27 Nov 2023 12:52:30 +0000 Subject: [PATCH 11/40] Fix: Invalidate playlist window when (un)shuffling playlist. --- src/music_gui.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/music_gui.cpp b/src/music_gui.cpp index 0d6ee8e481..ef6cc83606 100644 --- a/src/music_gui.cpp +++ b/src/music_gui.cpp @@ -197,6 +197,7 @@ void MusicSystem::Shuffle() if (_settings_client.music.playing) this->Play(); + InvalidateWindowData(WC_MUSIC_TRACK_SELECTION, 0); InvalidateWindowData(WC_MUSIC_WINDOW, 0); } @@ -208,6 +209,7 @@ void MusicSystem::Unshuffle() if (_settings_client.music.playing) this->Play(); + InvalidateWindowData(WC_MUSIC_TRACK_SELECTION, 0); InvalidateWindowData(WC_MUSIC_WINDOW, 0); } From ab1a4c6c80a98b37c1ffac756f6400e6f185189d Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 27 Nov 2023 12:52:31 +0000 Subject: [PATCH 12/40] Change: Don't restart playback when toggling playlist shuffle. Instead update the selected playlist entry for the current song. --- src/music_gui.cpp | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/music_gui.cpp b/src/music_gui.cpp index ef6cc83606..490d80817e 100644 --- a/src/music_gui.cpp +++ b/src/music_gui.cpp @@ -87,6 +87,7 @@ struct MusicSystem { void PlaylistClear(); private: + void SetPositionBySetIndex(uint set_index); void ChangePlaylistPosition(int ofs); int playlist_position; @@ -184,30 +185,45 @@ void MusicSystem::ChangeMusicSet(const std::string &set_name) InvalidateWindowData(WC_MUSIC_WINDOW, 0, 1, true); } -/** Enable shuffle mode and restart playback */ +/** + * Set playlist position by set index. + * @param set_index Set index to select. + */ +void MusicSystem::SetPositionBySetIndex(uint set_index) +{ + auto it = std::find_if(std::begin(this->active_playlist), std::end(this->active_playlist), [&set_index](const PlaylistEntry &ple) { return ple.set_index == set_index; }); + if (it != std::end(this->active_playlist)) this->playlist_position = std::distance(std::begin(this->active_playlist), it); +} + +/** + * Enable shuffle mode. + */ void MusicSystem::Shuffle() { _settings_client.music.shuffle = true; + uint set_index = this->active_playlist[this->playlist_position].set_index; this->active_playlist = this->displayed_playlist; for (size_t i = 0; i < this->active_playlist.size(); i++) { size_t shuffle_index = InteractiveRandom() % (this->active_playlist.size() - i); std::swap(this->active_playlist[i], this->active_playlist[i + shuffle_index]); } - - if (_settings_client.music.playing) this->Play(); + this->SetPositionBySetIndex(set_index); InvalidateWindowData(WC_MUSIC_TRACK_SELECTION, 0); InvalidateWindowData(WC_MUSIC_WINDOW, 0); } -/** Disable shuffle and restart playback */ +/** + * Disable shuffle mode. + */ void MusicSystem::Unshuffle() { _settings_client.music.shuffle = false; - this->active_playlist = this->displayed_playlist; - if (_settings_client.music.playing) this->Play(); + uint set_index = this->active_playlist[this->playlist_position].set_index; + this->active_playlist = this->displayed_playlist; + this->SetPositionBySetIndex(set_index); InvalidateWindowData(WC_MUSIC_TRACK_SELECTION, 0); InvalidateWindowData(WC_MUSIC_WINDOW, 0); From f268c90bd3d102c6359e50a6082122c3260836c4 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 27 Nov 2023 23:17:16 +0000 Subject: [PATCH 13/40] Change: Use sparse padding for content download window. (#11501) --- src/network/network_content_gui.cpp | 100 ++++++++++++++-------------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 335e803e66..a9a0f9bc06 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -1039,67 +1039,67 @@ static const NWidgetPart _nested_network_content_list_widgets[] = { NWidget(WWT_DEFSIZEBOX, COLOUR_LIGHT_BLUE), EndContainer(), NWidget(WWT_PANEL, COLOUR_LIGHT_BLUE, WID_NCL_BACKGROUND), - NWidget(NWID_SPACER), SetMinimalSize(0, 7), SetResize(1, 0), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(8, 8, 8), + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_wide, 0), SetPadding(WidgetDimensions::unscaled.sparse_resize), /* Top */ - NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NCL_FILTER_CAPT), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_CONTENT_FILTER_TITLE, STR_NULL), SetAlignment(SA_RIGHT), - NWidget(WWT_EDITBOX, COLOUR_LIGHT_BLUE, WID_NCL_FILTER), SetFill(1, 0), SetResize(1, 0), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), + NWidget(WWT_TEXT, COLOUR_LIGHT_BLUE, WID_NCL_FILTER_CAPT), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_CONTENT_FILTER_TITLE, STR_NULL), SetAlignment(SA_RIGHT | SA_VERT_CENTER), + NWidget(WWT_EDITBOX, COLOUR_LIGHT_BLUE, WID_NCL_FILTER), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_LIST_FILTER_OSKTITLE, STR_LIST_FILTER_TOOLTIP), - EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(0, 7), SetResize(1, 0), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(8, 8, 8), - /* Left side. */ - NWidget(NWID_VERTICAL), SetPIP(0, 4, 0), - NWidget(NWID_HORIZONTAL), - NWidget(NWID_VERTICAL), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_CHECKBOX), SetMinimalSize(13, 1), SetDataTip(STR_EMPTY, STR_NULL), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_TYPE), - SetDataTip(STR_CONTENT_TYPE_CAPTION, STR_CONTENT_TYPE_CAPTION_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_NAME), SetResize(1, 0), SetFill(1, 0), - SetDataTip(STR_CONTENT_NAME_CAPTION, STR_CONTENT_NAME_CAPTION_TOOLTIP), + EndContainer(), + /* Lists and info. */ + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), + /* Left side. */ + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), + NWidget(NWID_HORIZONTAL), + NWidget(NWID_VERTICAL), + NWidget(NWID_HORIZONTAL), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_CHECKBOX), SetMinimalSize(13, 1), SetDataTip(STR_EMPTY, STR_NULL), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_TYPE), + SetDataTip(STR_CONTENT_TYPE_CAPTION, STR_CONTENT_TYPE_CAPTION_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_NAME), SetResize(1, 0), SetFill(1, 0), + SetDataTip(STR_CONTENT_NAME_CAPTION, STR_CONTENT_NAME_CAPTION_TOOLTIP), + EndContainer(), + NWidget(WWT_MATRIX, COLOUR_LIGHT_BLUE, WID_NCL_MATRIX), SetResize(1, 14), SetFill(1, 1), SetScrollbar(WID_NCL_SCROLLBAR), SetMatrixDataTip(1, 0, STR_CONTENT_MATRIX_TOOLTIP), EndContainer(), - NWidget(WWT_MATRIX, COLOUR_LIGHT_BLUE, WID_NCL_MATRIX), SetResize(1, 14), SetFill(1, 1), SetScrollbar(WID_NCL_SCROLLBAR), SetMatrixDataTip(1, 0, STR_CONTENT_MATRIX_TOOLTIP), + NWidget(NWID_VSCROLLBAR, COLOUR_LIGHT_BLUE, WID_NCL_SCROLLBAR), + EndContainer(), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), + NWidget(NWID_SELECTION, INVALID_COLOUR, WID_NCL_SEL_ALL_UPDATE), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_SELECT_UPDATE), SetResize(1, 0), SetFill(1, 0), + SetDataTip(STR_CONTENT_SELECT_UPDATES_CAPTION, STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_SELECT_ALL), SetResize(1, 0), SetFill(1, 0), + SetDataTip(STR_CONTENT_SELECT_ALL_CAPTION, STR_CONTENT_SELECT_ALL_CAPTION_TOOLTIP), + EndContainer(), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_UNSELECT), SetResize(1, 0), SetFill(1, 0), + SetDataTip(STR_CONTENT_UNSELECT_ALL_CAPTION, STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP), EndContainer(), - NWidget(NWID_VSCROLLBAR, COLOUR_LIGHT_BLUE, WID_NCL_SCROLLBAR), EndContainer(), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(0, 8, 0), - NWidget(NWID_SELECTION, INVALID_COLOUR, WID_NCL_SEL_ALL_UPDATE), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_SELECT_UPDATE), SetResize(1, 0), SetFill(1, 0), - SetDataTip(STR_CONTENT_SELECT_UPDATES_CAPTION, STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_SELECT_ALL), SetResize(1, 0), SetFill(1, 0), - SetDataTip(STR_CONTENT_SELECT_ALL_CAPTION, STR_CONTENT_SELECT_ALL_CAPTION_TOOLTIP), + /* Right side. */ + NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_sparse, 0), + NWidget(WWT_PANEL, COLOUR_LIGHT_BLUE, WID_NCL_DETAILS), SetResize(1, 1), SetFill(1, 1), + EndContainer(), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL), + EndContainer(), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_OPEN_URL), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_CONTENT_OPEN_URL, STR_CONTENT_OPEN_URL_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL), EndContainer(), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_UNSELECT), SetResize(1, 0), SetFill(1, 0), - SetDataTip(STR_CONTENT_UNSELECT_ALL_CAPTION, STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP), EndContainer(), EndContainer(), - /* Right side. */ - NWidget(NWID_VERTICAL), SetPIP(0, 4, 0), - NWidget(WWT_PANEL, COLOUR_LIGHT_BLUE, WID_NCL_DETAILS), SetResize(1, 1), SetFill(1, 1), EndContainer(), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(0, 8, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_TEXTFILE + TFT_README), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_README, STR_NULL), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_TEXTFILE + TFT_CHANGELOG), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_CHANGELOG, STR_NULL), - EndContainer(), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(0, 8, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_OPEN_URL), SetResize(1, 0), SetFill(1, 0), SetDataTip(STR_CONTENT_OPEN_URL, STR_CONTENT_OPEN_URL_TOOLTIP), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_TEXTFILE + TFT_LICENSE), SetFill(1, 0), SetResize(1, 0), SetDataTip(STR_TEXTFILE_VIEW_LICENCE, STR_NULL), + /* Bottom. */ + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_SEARCH_EXTERNAL), SetResize(1, 0), SetFill(1, 0), + SetDataTip(STR_CONTENT_SEARCH_EXTERNAL, STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP), + NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(0, WidgetDimensions::unscaled.hsep_wide, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_CANCEL), SetResize(1, 0), SetFill(1, 0), + SetDataTip(STR_BUTTON_CANCEL, STR_NULL), + NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_DOWNLOAD), SetResize(1, 0), SetFill(1, 0), + SetDataTip(STR_CONTENT_DOWNLOAD_CAPTION, STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP), EndContainer(), EndContainer(), EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(0, 7), SetResize(1, 0), - /* Bottom. */ - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(8, 8, 8), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_SEARCH_EXTERNAL), SetResize(1, 0), SetFill(1, 0), - SetDataTip(STR_CONTENT_SEARCH_EXTERNAL, STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), SetPIP(0, 8, 0), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_CANCEL), SetResize(1, 0), SetFill(1, 0), - SetDataTip(STR_BUTTON_CANCEL, STR_NULL), - NWidget(WWT_PUSHTXTBTN, COLOUR_WHITE, WID_NCL_DOWNLOAD), SetResize(1, 0), SetFill(1, 0), - SetDataTip(STR_CONTENT_DOWNLOAD_CAPTION, STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP), - EndContainer(), - EndContainer(), - NWidget(NWID_SPACER), SetMinimalSize(0, 2), SetResize(1, 0), /* Resize button. */ NWidget(NWID_HORIZONTAL), NWidget(NWID_SPACER), SetFill(1, 0), SetResize(1, 0), From e5aed2439552f63960d4e3dcff66df614d27e278 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 27 Nov 2023 23:17:55 +0000 Subject: [PATCH 14/40] Codechange: Use std::array for industry tile cargo acceptance. (#11498) This avoids use of memcpy/memset to copy or fill. --- src/industry_cmd.cpp | 22 ++++++++++------------ src/industrytype.h | 4 ++-- src/newgrf.cpp | 4 ++-- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 6c42240ba3..ebbc316dba 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -415,22 +415,20 @@ static void AddAcceptedCargo_Industry(TileIndex tile, CargoArray &acceptance, Ca const Industry *ind = Industry::GetByTile(tile); /* Starting point for acceptance */ - CargoID accepts_cargo[lengthof(itspec->accepts_cargo)]; - int8_t cargo_acceptance[lengthof(itspec->acceptance)]; - MemCpyT(accepts_cargo, itspec->accepts_cargo, lengthof(accepts_cargo)); - MemCpyT(cargo_acceptance, itspec->acceptance, lengthof(cargo_acceptance)); + auto accepts_cargo = itspec->accepts_cargo; + auto cargo_acceptance = itspec->acceptance; if (itspec->special_flags & INDTILE_SPECIAL_ACCEPTS_ALL_CARGO) { /* Copy all accepted cargoes from industry itself */ for (const auto &a : ind->accepted) { - CargoID *pos = std::find(accepts_cargo, endof(accepts_cargo), a.cargo); - if (pos == endof(accepts_cargo)) { + auto pos = std::find(std::begin(accepts_cargo), std::end(accepts_cargo), a.cargo); + if (pos == std::end(accepts_cargo)) { /* Not found, insert */ - pos = std::find(accepts_cargo, endof(accepts_cargo), CT_INVALID); - if (pos == endof(accepts_cargo)) continue; // nowhere to place, give up on this one + pos = std::find(std::begin(accepts_cargo), std::end(accepts_cargo), CT_INVALID); + if (pos == std::end(accepts_cargo)) continue; // nowhere to place, give up on this one *pos = a.cargo; } - cargo_acceptance[pos - accepts_cargo] += 8; + cargo_acceptance[std::distance(std::begin(accepts_cargo), pos)] += 8; } } @@ -438,7 +436,7 @@ static void AddAcceptedCargo_Industry(TileIndex tile, CargoArray &acceptance, Ca /* Try callback for accepts list, if success override all existing accepts */ uint16_t res = GetIndustryTileCallback(CBID_INDTILE_ACCEPT_CARGO, 0, 0, gfx, Industry::GetByTile(tile), tile); if (res != CALLBACK_FAILED) { - MemSetT(accepts_cargo, CT_INVALID, lengthof(accepts_cargo)); + accepts_cargo.fill(CT_INVALID); for (uint i = 0; i < 3; i++) accepts_cargo[i] = GetCargoTranslation(GB(res, i * 5, 5), itspec->grf_prop.grffile); } } @@ -447,12 +445,12 @@ static void AddAcceptedCargo_Industry(TileIndex tile, CargoArray &acceptance, Ca /* Try callback for acceptance list, if success override all existing acceptance */ uint16_t res = GetIndustryTileCallback(CBID_INDTILE_CARGO_ACCEPTANCE, 0, 0, gfx, Industry::GetByTile(tile), tile); if (res != CALLBACK_FAILED) { - MemSetT(cargo_acceptance, 0, lengthof(cargo_acceptance)); + cargo_acceptance.fill(0); for (uint i = 0; i < 3; i++) cargo_acceptance[i] = GB(res, i * 4, 4); } } - for (byte i = 0; i < lengthof(itspec->accepts_cargo); i++) { + for (byte i = 0; i < std::size(itspec->accepts_cargo); i++) { CargoID a = accepts_cargo[i]; if (!IsValidCargoID(a) || cargo_acceptance[i] <= 0) continue; // work only with valid cargoes diff --git a/src/industrytype.h b/src/industrytype.h index 153e4a0ff1..df2b5e6e51 100644 --- a/src/industrytype.h +++ b/src/industrytype.h @@ -152,8 +152,8 @@ struct IndustrySpec { * @note A tile can at most accept 3 types of cargo, even if an industry as a whole can accept more types. */ struct IndustryTileSpec { - CargoID accepts_cargo[INDUSTRY_NUM_INPUTS]; ///< Cargo accepted by this tile - int8_t acceptance[INDUSTRY_NUM_INPUTS]; ///< Level of acceptance per cargo type (signed, may be negative!) + std::array accepts_cargo; ///< Cargo accepted by this tile + std::array acceptance; ///< Level of acceptance per cargo type (signed, may be negative!) Slope slopes_refused; ///< slope pattern on which this tile cannot be built byte anim_production; ///< Animation frame to start when goods are produced byte anim_next; ///< Next frame in an animation diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 8c76a04d0b..72687655ca 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -3295,12 +3295,12 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr case 0x13: { // variable length cargo acceptance byte num_cargoes = buf->ReadByte(); - if (num_cargoes > lengthof(tsp->acceptance)) { + if (num_cargoes > std::size(tsp->acceptance)) { GRFError *error = DisableGrf(STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG); error->param_value[1] = prop; return CIR_DISABLED; } - for (uint i = 0; i < lengthof(tsp->acceptance); i++) { + for (uint i = 0; i < std::size(tsp->acceptance); i++) { if (i < num_cargoes) { tsp->accepts_cargo[i] = GetCargoTranslation(buf->ReadByte(), _cur.grffile); /* Tile acceptance can be negative to counteract the INDTILE_SPECIAL_ACCEPTS_ALL_CARGO flag */ From 3df7d1aff90c40b2dcabbe6c31aae746c0e4fd01 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 28 Nov 2023 00:05:30 +0000 Subject: [PATCH 15/40] Codechange: Template input buffer type in audio mixer. (#11505) This reduces code duplication. --- src/mixer.cpp | 54 +++++++++++---------------------------------------- 1 file changed, 11 insertions(+), 43 deletions(-) diff --git a/src/mixer.cpp b/src/mixer.cpp index 10a9ac8933..3b30f3d25d 100644 --- a/src/mixer.cpp +++ b/src/mixer.cpp @@ -63,49 +63,17 @@ static int RateConversion(T *b, int frac_pos) return ((b[0] * ((1 << 16) - frac_pos)) + (b[1] * frac_pos)) >> 16; } +template static void mix_int16(MixerChannel *sc, int16_t *buffer, uint samples, uint8_t effect_vol) { - if (samples > sc->samples_left) samples = sc->samples_left; - sc->samples_left -= samples; - assert(samples > 0); + /* Shift required to get sample value into range for the data type. */ + const uint SHIFT = sizeof(T) * CHAR_BIT; - const int16_t *b = (const int16_t *)sc->memory + sc->pos; - uint32_t frac_pos = sc->frac_pos; - uint32_t frac_speed = sc->frac_speed; - int volume_left = sc->volume_left * effect_vol / 255; - int volume_right = sc->volume_right * effect_vol / 255; - - if (frac_speed == 0x10000) { - /* Special case when frac_speed is 0x10000 */ - do { - buffer[0] = Clamp(buffer[0] + (*b * volume_left >> 16), -MAX_VOLUME, MAX_VOLUME); - buffer[1] = Clamp(buffer[1] + (*b * volume_right >> 16), -MAX_VOLUME, MAX_VOLUME); - b++; - buffer += 2; - } while (--samples > 0); - } else { - do { - int data = RateConversion(b, frac_pos); - buffer[0] = Clamp(buffer[0] + (data * volume_left >> 16), -MAX_VOLUME, MAX_VOLUME); - buffer[1] = Clamp(buffer[1] + (data * volume_right >> 16), -MAX_VOLUME, MAX_VOLUME); - buffer += 2; - frac_pos += frac_speed; - b += frac_pos >> 16; - frac_pos &= 0xffff; - } while (--samples > 0); - } - - sc->frac_pos = frac_pos; - sc->pos = b - (const int16_t *)sc->memory; -} - -static void mix_int8_to_int16(MixerChannel *sc, int16_t *buffer, uint samples, uint8_t effect_vol) -{ if (samples > sc->samples_left) samples = sc->samples_left; sc->samples_left -= samples; assert(samples > 0); - const int8_t *b = sc->memory + sc->pos; + const T *b = (const T *)sc->memory + sc->pos; uint32_t frac_pos = sc->frac_pos; uint32_t frac_speed = sc->frac_speed; int volume_left = sc->volume_left * effect_vol / 255; @@ -114,16 +82,16 @@ static void mix_int8_to_int16(MixerChannel *sc, int16_t *buffer, uint samples, u if (frac_speed == 0x10000) { /* Special case when frac_speed is 0x10000 */ do { - buffer[0] = Clamp(buffer[0] + (*b * volume_left >> 8), -MAX_VOLUME, MAX_VOLUME); - buffer[1] = Clamp(buffer[1] + (*b * volume_right >> 8), -MAX_VOLUME, MAX_VOLUME); + buffer[0] = Clamp(buffer[0] + (*b * volume_left >> SHIFT), -MAX_VOLUME, MAX_VOLUME); + buffer[1] = Clamp(buffer[1] + (*b * volume_right >> SHIFT), -MAX_VOLUME, MAX_VOLUME); b++; buffer += 2; } while (--samples > 0); } else { do { int data = RateConversion(b, frac_pos); - buffer[0] = Clamp(buffer[0] + (data * volume_left >> 8), -MAX_VOLUME, MAX_VOLUME); - buffer[1] = Clamp(buffer[1] + (data * volume_right >> 8), -MAX_VOLUME, MAX_VOLUME); + buffer[0] = Clamp(buffer[0] + (data * volume_left >> SHIFT), -MAX_VOLUME, MAX_VOLUME); + buffer[1] = Clamp(buffer[1] + (data * volume_right >> SHIFT), -MAX_VOLUME, MAX_VOLUME); buffer += 2; frac_pos += frac_speed; b += frac_pos >> 16; @@ -132,7 +100,7 @@ static void mix_int8_to_int16(MixerChannel *sc, int16_t *buffer, uint samples, u } sc->frac_pos = frac_pos; - sc->pos = b - sc->memory; + sc->pos = b - (const T *)sc->memory; } static void MxCloseChannel(uint8_t channel_index) @@ -172,9 +140,9 @@ void MxMixSamples(void *buffer, uint samples) for (uint8_t idx : SetBitIterator(active)) { MixerChannel *mc = &_channels[idx]; if (mc->is16bit) { - mix_int16(mc, (int16_t*)buffer, samples, effect_vol); + mix_int16(mc, (int16_t*)buffer, samples, effect_vol); } else { - mix_int8_to_int16(mc, (int16_t*)buffer, samples, effect_vol); + mix_int16(mc, (int16_t*)buffer, samples, effect_vol); } if (mc->samples_left == 0) MxCloseChannel(idx); } From e6d132d24b4fa95119bd7cde7b19008822bc4a14 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 28 Nov 2023 13:48:09 +0000 Subject: [PATCH 16/40] Fix #10926: New free wagons no longer split by type. (#11507) NormalizeTrainVehInDepot() should only be called if an engine was built, not for wagons. --- src/train_cmd.cpp | 1 + src/vehicle_cmd.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 2a162426c8..67e233f9d7 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -689,6 +689,7 @@ static CommandCost CmdBuildRailWagon(DoCommandFlag flags, TileIndex tile, const /** Move all free vehicles in the depot to the train */ void NormalizeTrainVehInDepot(const Train *u) { + assert(u->IsEngine()); for (const Train *v : Train::Iterate()) { if (v->IsFreeWagon() && v->tile == u->tile && v->track == TRACK_BIT_DEPOT) { diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 46f284e15c..549bd189c4 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -172,7 +172,7 @@ std::tuple CmdBuildVehicle(D } if (flags & DC_EXEC) { - if (type == VEH_TRAIN && use_free_vehicles && !(flags & DC_AUTOREPLACE)) { + if (type == VEH_TRAIN && use_free_vehicles && !(flags & DC_AUTOREPLACE) && Train::From(v)->IsEngine()) { /* Move any free wagons to the new vehicle. */ NormalizeTrainVehInDepot(Train::From(v)); } From e3924f3231d01bb6af4686c66f1e41dc23e44ee7 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 28 Nov 2023 13:52:36 +0000 Subject: [PATCH 17/40] Fix #10811: Allow dragging vehicle in depot to any free row. (#11508) --- src/depot_gui.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index e001f2fedb..9eeb51011c 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -460,11 +460,9 @@ struct DepotWindow : Window { ym = (y - matrix_widget->pos_y) % this->resize.step_height; int row = this->vscroll->GetScrolledRowFromWidget(y, this, WID_D_MATRIX); - if (row == INT_MAX) return MODE_ERROR; - uint pos = (row * this->num_columns) + xt; - if (this->vehicle_list.size() + this->wagon_list.size() <= pos) { + if (row == INT_MAX || this->vehicle_list.size() + this->wagon_list.size() <= pos) { /* Clicking on 'line' / 'block' without a vehicle */ if (this->type == VEH_TRAIN) { /* End the dragging */ From 519fe33175a5c4131d61362377383e44da021bf2 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 28 Nov 2023 17:44:31 +0000 Subject: [PATCH 18/40] Fix ab1a4c6c: Changing baseset/playlist while shuffle is on does not change song. (#11510) The change-playlist function relied on toggling shuffle to restart playing which is no longer the case, so always handle it when changing playlist instead. --- src/music_gui.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/music_gui.cpp b/src/music_gui.cpp index 490d80817e..335b9dd617 100644 --- a/src/music_gui.cpp +++ b/src/music_gui.cpp @@ -156,12 +156,8 @@ void MusicSystem::ChangePlaylist(PlaylistChoices pl) this->selected_playlist = pl; this->playlist_position = 0; - if (_settings_client.music.shuffle) { - this->Shuffle(); - /* Shuffle() will also Play() if necessary, only start once */ - } else if (_settings_client.music.playing) { - this->Play(); - } + if (_settings_client.music.shuffle) this->Shuffle(); + if (_settings_client.music.playing) this->Play(); } InvalidateWindowData(WC_MUSIC_TRACK_SELECTION, 0); From 5f442c9127249b89571ba037ddcc5dfc002e4b29 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 28 Nov 2023 18:38:40 +0000 Subject: [PATCH 19/40] Update: Translations from eints english (us): 1 change by 2TallTyler --- src/lang/english_US.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 158e732051..315e851f3b 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1073,6 +1073,7 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Base mus STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Select the base music set to use STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Additional information about the base music set +STR_BASESET_STATUS :{STRING} {RED}({NUM} missing/corrupted file{P "" s}) STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Failed to retrieve a list of supported resolutions STR_ERROR_FULLSCREEN_FAILED :{WHITE}Fullscreen mode failed From 1f41e773d681ac05ff60aec35e4d0ae7841eeb97 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Sun, 22 Oct 2023 17:27:57 -0400 Subject: [PATCH 20/40] Codechange: Use consistent name for bay road stops As of #10494, this is how we describe original dead-end road stops. --- src/openttd.cpp | 2 +- src/pathfinder/follow_track.hpp | 6 +++--- src/pathfinder/npf/npf.cpp | 4 ++-- src/road_cmd.cpp | 2 +- src/roadstop.cpp | 6 +++--- src/roadveh_cmd.cpp | 8 ++++---- src/saveload/afterload.cpp | 2 +- src/station.cpp | 2 +- src/station_cmd.cpp | 2 +- src/station_map.h | 6 +++--- src/town_cmd.cpp | 2 +- src/vehicle.cpp | 2 +- 12 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/openttd.cpp b/src/openttd.cpp index 19eb01432f..3b6c303de6 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1220,7 +1220,7 @@ static void CheckCaches() /* Strict checking of the road stop cache entries */ for (const RoadStop *rs : RoadStop::Iterate()) { - if (IsStandardRoadStopTile(rs->xy)) continue; + if (IsBayRoadStopTile(rs->xy)) continue; assert(rs->GetEntry(DIAGDIR_NE) != rs->GetEntry(DIAGDIR_NW)); rs->GetEntry(DIAGDIR_NE)->CheckIntegrity(rs); diff --git a/src/pathfinder/follow_track.hpp b/src/pathfinder/follow_track.hpp index ce15790d41..3cdb3625b5 100644 --- a/src/pathfinder/follow_track.hpp +++ b/src/pathfinder/follow_track.hpp @@ -247,7 +247,7 @@ protected: inline bool CanExitOldTile() { /* road stop can be left at one direction only unless it's a drive-through stop */ - if (IsRoadTT() && IsStandardRoadStopTile(m_old_tile)) { + if (IsRoadTT() && IsBayRoadStopTile(m_old_tile)) { DiagDirection exitdir = GetRoadStopDir(m_old_tile); if (exitdir != m_exitdir) { m_err = EC_NO_WAY; @@ -278,7 +278,7 @@ protected: /** return true if we can enter m_new_tile from m_exitdir */ inline bool CanEnterNewTile() { - if (IsRoadTT() && IsStandardRoadStopTile(m_new_tile)) { + if (IsRoadTT() && IsBayRoadStopTile(m_new_tile)) { /* road stop can be entered from one direction only unless it's a drive-through stop */ DiagDirection exitdir = GetRoadStopDir(m_new_tile); if (ReverseDiagDir(exitdir) != m_exitdir) { @@ -402,7 +402,7 @@ protected: /* Single tram bits and standard road stops cause reversing. */ if (IsRoadTT() && ((IsTram() && GetSingleTramBit(m_old_tile) == ReverseDiagDir(m_exitdir)) || - (IsStandardRoadStopTile(m_old_tile) && GetRoadStopDir(m_old_tile) == ReverseDiagDir(m_exitdir)))) { + (IsBayRoadStopTile(m_old_tile) && GetRoadStopDir(m_old_tile) == ReverseDiagDir(m_exitdir)))) { /* reverse */ m_new_tile = m_old_tile; m_new_td_bits = TrackdirToTrackdirBits(ReverseTrackdir(m_old_td)); diff --git a/src/pathfinder/npf/npf.cpp b/src/pathfinder/npf/npf.cpp index 0868d97519..b8f6528f12 100644 --- a/src/pathfinder/npf/npf.cpp +++ b/src/pathfinder/npf/npf.cpp @@ -695,7 +695,7 @@ static bool CanEnterTileOwnerCheck(Owner owner, TileIndex tile, DiagDirection en if (IsTileType(tile, MP_RAILWAY) || // Rail tile (also rail depot) HasStationTileRail(tile) || // Rail station tile/waypoint IsRoadDepotTile(tile) || // Road depot tile - IsStandardRoadStopTile(tile)) { // Road station tile (but not drive-through stops) + IsBayRoadStopTile(tile)) { // Road station tile (but not drive-through stops) return IsTileOwner(tile, owner); // You need to own these tiles entirely to use them } @@ -768,7 +768,7 @@ static DiagDirection GetTileSingleEntry(TileIndex tile, TransportType type, uint if (type != TRANSPORT_WATER && IsDepotTypeTile(tile, type)) return GetDepotDirection(tile, type); if (type == TRANSPORT_ROAD) { - if (IsStandardRoadStopTile(tile)) return GetRoadStopDir(tile); + if (IsBayRoadStopTile(tile)) return GetRoadStopDir(tile); if ((RoadTramType)subtype == RTT_TRAM) return GetSingleTramBit(tile); } diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 102efa3a83..a71d2005e7 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -2487,7 +2487,7 @@ CommandCost CmdConvertRoad(DoCommandFlag flags, TileIndex tile, TileIndex area_s } uint num_pieces = CountBits(GetAnyRoadBits(tile, rtt)); - if (tt == MP_STATION && IsStandardRoadStopTile(tile)) { + if (tt == MP_STATION && IsBayRoadStopTile(tile)) { num_pieces *= ROAD_STOP_TRACKBIT_FACTOR; } else if (tt == MP_ROAD && IsRoadDepot(tile)) { num_pieces *= ROAD_DEPOT_TRACKBIT_FACTOR; diff --git a/src/roadstop.cpp b/src/roadstop.cpp index e9f3a9a238..2e4f441973 100644 --- a/src/roadstop.cpp +++ b/src/roadstop.cpp @@ -45,7 +45,7 @@ RoadStop *RoadStop::GetNextRoadStop(const RoadVehicle *v) const /* The vehicle cannot go to this roadstop (different roadtype) */ if (!HasTileAnyRoadType(rs->xy, v->compatible_roadtypes)) continue; /* The vehicle is articulated and can therefore not go to a standard road stop. */ - if (IsStandardRoadStopTile(rs->xy) && v->HasArticulatedPart()) continue; + if (IsBayRoadStopTile(rs->xy) && v->HasArticulatedPart()) continue; /* The vehicle can actually go to this road stop. So, return it! */ return rs; @@ -215,7 +215,7 @@ void RoadStop::ClearDriveThrough() */ void RoadStop::Leave(RoadVehicle *rv) { - if (IsStandardRoadStopTile(rv->tile)) { + if (IsBayRoadStopTile(rv->tile)) { /* Vehicle is leaving a road stop tile, mark bay as free */ this->FreeBay(HasBit(rv->state, RVS_USING_SECOND_BAY)); this->SetEntranceBusy(false); @@ -232,7 +232,7 @@ void RoadStop::Leave(RoadVehicle *rv) */ bool RoadStop::Enter(RoadVehicle *rv) { - if (IsStandardRoadStopTile(this->xy)) { + if (IsBayRoadStopTile(this->xy)) { /* For normal (non drive-through) road stops * Check if station is busy or if there are no free bays or whether it is a articulated vehicle. */ if (this->IsEntranceBusy() || !this->HasFreeBay() || rv->HasArticulatedPart()) return false; diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 4917a05b50..80869d9c03 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -893,7 +893,7 @@ static Trackdir RoadFindPathToDest(RoadVehicle *v, TileIndex tile, DiagDirection /* Road depot owned by another company or with the wrong orientation */ trackdirs = TRACKDIR_BIT_NONE; } - } else if (IsTileType(tile, MP_STATION) && IsStandardRoadStopTile(tile)) { + } else if (IsTileType(tile, MP_STATION) && IsBayRoadStopTile(tile)) { /* Standard road stop (drive-through stops are treated as normal road) */ if (!IsTileOwner(tile, v->owner) || GetRoadStopDir(tile) == enterdir || v->HasArticulatedPart()) { @@ -908,7 +908,7 @@ static Trackdir RoadFindPathToDest(RoadVehicle *v, TileIndex tile, DiagDirection trackdirs = TRACKDIR_BIT_NONE; } else { /* Proper station type, check if there is free loading bay */ - if (!_settings_game.pf.roadveh_queue && IsStandardRoadStopTile(tile) && + if (!_settings_game.pf.roadveh_queue && IsBayRoadStopTile(tile) && !RoadStop::GetByTile(tile, rstype)->HasFreeBay()) { /* Station is full and RV queuing is off */ trackdirs = TRACKDIR_BIT_NONE; @@ -1535,7 +1535,7 @@ again: if (v->current_order.IsType(OT_LEAVESTATION)) v->current_order.Free(); } - if (IsStandardRoadStopTile(v->tile)) rs->SetEntranceBusy(true); + if (IsBayRoadStopTile(v->tile)) rs->SetEntranceBusy(true); StartRoadVehSound(v); SetWindowWidgetDirty(WC_VEHICLE_VIEW, v->index, WID_VV_START_STOP); @@ -1740,7 +1740,7 @@ Trackdir RoadVehicle::GetVehicleTrackdir() const return DiagDirToDiagTrackdir(GetRoadDepotDirection(this->tile)); } - if (IsStandardRoadStopTile(this->tile)) { + if (IsBayRoadStopTile(this->tile)) { /* We'll assume the road vehicle is facing outwards */ return DiagDirToDiagTrackdir(GetRoadStopDir(this->tile)); // Road vehicle in a station } diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 1a13b011c9..bc0c7253a8 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2828,7 +2828,7 @@ bool AfterLoadGame() /* The road owner of standard road stops was not properly accounted for. */ if (IsSavegameVersionBefore(SLV_172)) { for (auto t : Map::Iterate()) { - if (!IsStandardRoadStopTile(t)) continue; + if (!IsBayRoadStopTile(t)) continue; Owner o = GetTileOwner(t); SetRoadOwner(t, RTT_ROAD, o); SetRoadOwner(t, RTT_TRAM, o); diff --git a/src/station.cpp b/src/station.cpp index 4abc2de378..1338077d57 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -211,7 +211,7 @@ RoadStop *Station::GetPrimaryRoadStop(const RoadVehicle *v) const /* The vehicle cannot go to this roadstop (different roadtype) */ if (!HasTileAnyRoadType(rs->xy, v->compatible_roadtypes)) continue; /* The vehicle is articulated and can therefore not go to a standard road stop. */ - if (IsStandardRoadStopTile(rs->xy) && v->HasArticulatedPart()) continue; + if (IsBayRoadStopTile(rs->xy) && v->HasArticulatedPart()) continue; /* The vehicle can actually go to this road stop. So, return it! */ break; diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 4a561ad060..784b4bac37 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -3408,7 +3408,7 @@ static TrackStatus GetTileTrackStatus_Station(TileIndex tile, TransportType mode Axis axis = DiagDirToAxis(dir); if (side != INVALID_DIAGDIR) { - if (axis != DiagDirToAxis(side) || (IsStandardRoadStopTile(tile) && dir != side)) break; + if (axis != DiagDirToAxis(side) || (IsBayRoadStopTile(tile) && dir != side)) break; } trackbits = AxisToTrackBits(axis); diff --git a/src/station_map.h b/src/station_map.h index ed21c71848..d1032d8ab8 100644 --- a/src/station_map.h +++ b/src/station_map.h @@ -216,11 +216,11 @@ static inline bool IsRoadStopTile(Tile t) } /** - * Is tile \a t a standard (non-drive through) road stop station? + * Is tile \a t a bay (non-drive through) road stop station? * @param t Tile to check - * @return \c true if the tile is a station tile and a standard road stop + * @return \c true if the tile is a station tile and a bay road stop */ -static inline bool IsStandardRoadStopTile(Tile t) +static inline bool IsBayRoadStopTile(Tile t) { return IsRoadStopTile(t) && GetStationGfx(t) < GFX_TRUCK_BUS_DRIVETHROUGH_OFFSET; } diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 30463dd25d..c9e63db54d 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -847,7 +847,7 @@ void OnTick_Town() */ static RoadBits GetTownRoadBits(TileIndex tile) { - if (IsRoadDepotTile(tile) || IsStandardRoadStopTile(tile)) return ROAD_NONE; + if (IsRoadDepotTile(tile) || IsBayRoadStopTile(tile)) return ROAD_NONE; return GetAnyRoadBits(tile, RTT_ROAD, true); } diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 609c7a1a3e..7e9d9a0a13 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -2896,7 +2896,7 @@ StringID GetVehicleCannotUseStationReason(const Vehicle *v, const Station *st) for (; rs != nullptr; rs = rs->next) { /* Articulated vehicles cannot use bay road stops, only drive-through. Make sure the vehicle can actually use this bay stop */ - if (HasTileAnyRoadType(rs->xy, rv->compatible_roadtypes) && IsStandardRoadStopTile(rs->xy) && rv->HasArticulatedPart()) { + if (HasTileAnyRoadType(rs->xy, rv->compatible_roadtypes) && IsBayRoadStopTile(rs->xy) && rv->HasArticulatedPart()) { err = STR_ERROR_NO_STOP_ARTICULATED_VEHICLE; continue; } From 060672428dacc75c2d507e2e4996e2364734e4ee Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Sun, 22 Oct 2023 18:50:21 -0400 Subject: [PATCH 21/40] Codechange: Merge confusingly-named helper functions into their timer --- src/town_cmd.cpp | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index c9e63db54d..18731dcb95 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -3561,22 +3561,6 @@ static void UpdateTownGrowth(Town *t) SetWindowDirty(WC_TOWN_VIEW, t->index); } -static void UpdateTownAmounts(Town *t) -{ - for (auto &supplied : t->supplied) supplied.NewMonth(); - for (auto &received : t->received) received.NewMonth(); - if (t->fund_buildings_months != 0) t->fund_buildings_months--; - - SetWindowDirty(WC_TOWN_VIEW, t->index); -} - -static void UpdateTownUnwanted(Town *t) -{ - for (const Company *c : Company::Iterate()) { - if (t->unwanted[c->index] > 0) t->unwanted[c->index]--; - } -} - /** * Checks whether the local authority allows construction of a new station (rail, road, airport, dock) on the given tile * @param tile The tile where the station shall be constructed. @@ -3775,16 +3759,27 @@ CommandCost CheckforTownRating(DoCommandFlag flags, Town *t, TownRatingCheckType static IntervalTimer _towns_monthly({TimerGameCalendar::MONTH, TimerGameCalendar::Priority::TOWN}, [](auto) { for (Town *t : Town::Iterate()) { + /* Check for active town actions and decrement their counters. */ if (t->road_build_months != 0) t->road_build_months--; + if (t->fund_buildings_months != 0) t->fund_buildings_months--; if (t->exclusive_counter != 0) { if (--t->exclusive_counter == 0) t->exclusivity = INVALID_COMPANY; } - UpdateTownAmounts(t); + /* Check for active failed bribe cooloff periods and decrement them. */ + for (const Company *c : Company::Iterate()) { + if (t->unwanted[c->index] > 0) t->unwanted[c->index]--; + } + + /* Update cargo statistics. */ + for (auto &supplied : t->supplied) supplied.NewMonth(); + for (auto &received : t->received) received.NewMonth(); + UpdateTownGrowth(t); UpdateTownRating(t); - UpdateTownUnwanted(t); + + SetWindowDirty(WC_TOWN_VIEW, t->index); } }); From a98fe9f317b5b21f0fe9dda80e8ba3fca3b12b4e Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Sun, 22 Oct 2023 18:54:55 -0400 Subject: [PATCH 22/40] Codechange: Rename MakeTownHouseBigger() for clarity --- src/town_cmd.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 18731dcb95..da58b5e6e8 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -481,14 +481,14 @@ static void RemoveNearbyStations(Town *t, TileIndex tile, BuildingFlags flags) } /** - * Helper function for house completion stages progression - * @param tile TileIndex of the house (or parts of it) to "grow" + * Helper function for house construction stage progression. + * @param tile TileIndex of the house (or parts of it) to construct. */ -static void MakeSingleHouseBigger(TileIndex tile) +static void AdvanceSingleHouseConstruction(TileIndex tile) { assert(IsTileType(tile, MP_HOUSE)); - /* progress in construction stages */ + /* Progress in construction stages */ IncHouseConstructionTick(tile); if (GetHouseConstructionTick(tile) != 0) return; @@ -504,16 +504,16 @@ static void MakeSingleHouseBigger(TileIndex tile) } /** - * Make the house advance in its construction stages until completion - * @param tile TileIndex of house + * Increase the construction stage of a house. + * @param tile The tile of the house under construction. */ -static void MakeTownHouseBigger(TileIndex tile) +static void AdvanceHouseConstruction(TileIndex tile) { uint flags = HouseSpec::Get(GetHouseType(tile))->building_flags; - if (flags & BUILDING_HAS_1_TILE) MakeSingleHouseBigger(TILE_ADDXY(tile, 0, 0)); - if (flags & BUILDING_2_TILES_Y) MakeSingleHouseBigger(TILE_ADDXY(tile, 0, 1)); - if (flags & BUILDING_2_TILES_X) MakeSingleHouseBigger(TILE_ADDXY(tile, 1, 0)); - if (flags & BUILDING_HAS_4_TILES) MakeSingleHouseBigger(TILE_ADDXY(tile, 1, 1)); + if (flags & BUILDING_HAS_1_TILE) AdvanceSingleHouseConstruction(TILE_ADDXY(tile, 0, 0)); + if (flags & BUILDING_2_TILES_Y) AdvanceSingleHouseConstruction(TILE_ADDXY(tile, 0, 1)); + if (flags & BUILDING_2_TILES_X) AdvanceSingleHouseConstruction(TILE_ADDXY(tile, 1, 0)); + if (flags & BUILDING_HAS_4_TILES) AdvanceSingleHouseConstruction(TILE_ADDXY(tile, 1, 1)); } /** @@ -531,8 +531,8 @@ static void TileLoop_Town(TileIndex tile) if (house_id >= NEW_HOUSE_OFFSET && !NewHouseTileLoop(tile)) return; if (!IsHouseCompleted(tile)) { - /* Construction is not completed. See if we can go further in construction*/ - MakeTownHouseBigger(tile); + /* Construction is not completed, so we advance a construction stage. */ + AdvanceHouseConstruction(tile); return; } From 1b14eca9d9790304501c053c71b3156e221eab84 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Sun, 22 Oct 2023 18:56:42 -0400 Subject: [PATCH 23/40] Codechange: Rename TryClearTile() for clarity The function does not execute the clearing action. --- src/town_cmd.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index da58b5e6e8..3c576bbcc0 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -3136,9 +3136,9 @@ static CommandCost TownActionRoadRebuild(Town *t, DoCommandFlag flags) /** * Check whether the land can be cleared. * @param tile Tile to check. - * @return The tile can be cleared. + * @return true if the tile can be cleared. */ -static bool TryClearTile(TileIndex tile) +static bool CheckClearTile(TileIndex tile) { Backup cur_company(_current_company, OWNER_NONE, FILE_LINE); CommandCost r = Command::Do(DC_NONE, tile); @@ -3173,7 +3173,7 @@ static bool SearchTileForStatue(TileIndex tile, void *user_data) if (IsBridgeAbove(tile)) return false; /* A clear-able open space is always preferred. */ - if ((IsTileType(tile, MP_CLEAR) || IsTileType(tile, MP_TREES)) && TryClearTile(tile)) { + if ((IsTileType(tile, MP_CLEAR) || IsTileType(tile, MP_TREES)) && CheckClearTile(tile)) { statue_data->best_position = tile; return true; } @@ -3183,7 +3183,7 @@ static bool SearchTileForStatue(TileIndex tile, void *user_data) /* Searching inside the inner circle. */ if (statue_data->tile_count <= STATUE_NUMBER_INNER_TILES) { /* Save first house in inner circle. */ - if (house && statue_data->best_position == INVALID_TILE && TryClearTile(tile)) { + if (house && statue_data->best_position == INVALID_TILE && CheckClearTile(tile)) { statue_data->best_position = tile; } @@ -3193,7 +3193,7 @@ static bool SearchTileForStatue(TileIndex tile, void *user_data) /* Searching outside the circle, just pick the first possible spot. */ statue_data->best_position = tile; // Is optimistic, the condition below must also hold. - return house && TryClearTile(tile); + return house && CheckClearTile(tile); } /** From 745945c4d391872d802a763d5853f03c3dbe7560 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Sun, 22 Oct 2023 18:58:10 -0400 Subject: [PATCH 24/40] Codechange: Be consistent with how we name common parameters TileIndex is always tile and Town is always *t. Don't use t and *town. --- src/town_cmd.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 3c576bbcc0..646b9d5113 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -2346,26 +2346,26 @@ static inline void ClearMakeHouseTile(TileIndex tile, Town *t, byte counter, byt /** - * Write house information into the map. For houses > 1 tile, all tiles are marked. - * @param t tile index + * Write house information into the map. For multi-tile houses, all tiles are marked. * @param town The town related to this house - * @param counter of construction step - * @param stage of construction (used for drawing) - * @param type of house. Index into house specs array - * @param random_bits required for newgrf houses - * @pre house can be built here + * @param t The tile to build on. If a multi-tile house, this is the northern-most tile. + * @param counter The counter of the construction stage. + * @param stage The current construction stage. + * @param The type of house. + * @param random_bits Random bits for newgrf houses to use. + * @pre The house can be built here. */ -static void MakeTownHouse(TileIndex t, Town *town, byte counter, byte stage, HouseID type, byte random_bits) +static void MakeTownHouse(TileIndex tile, Town *t, byte counter, byte stage, HouseID type, byte random_bits) { BuildingFlags size = HouseSpec::Get(type)->building_flags; - ClearMakeHouseTile(t, town, counter, stage, type, random_bits); - if (size & BUILDING_2_TILES_Y) ClearMakeHouseTile(t + TileDiffXY(0, 1), town, counter, stage, ++type, random_bits); - if (size & BUILDING_2_TILES_X) ClearMakeHouseTile(t + TileDiffXY(1, 0), town, counter, stage, ++type, random_bits); - if (size & BUILDING_HAS_4_TILES) ClearMakeHouseTile(t + TileDiffXY(1, 1), town, counter, stage, ++type, random_bits); + ClearMakeHouseTile(tile, t, counter, stage, type, random_bits); + if (size & BUILDING_2_TILES_Y) ClearMakeHouseTile(tile + TileDiffXY(0, 1), t, counter, stage, ++type, random_bits); + if (size & BUILDING_2_TILES_X) ClearMakeHouseTile(tile + TileDiffXY(1, 0), t, counter, stage, ++type, random_bits); + if (size & BUILDING_HAS_4_TILES) ClearMakeHouseTile(tile + TileDiffXY(1, 1), t, counter, stage, ++type, random_bits); - ForAllStationsAroundTiles(TileArea(t, (size & BUILDING_2_TILES_X) ? 2 : 1, (size & BUILDING_2_TILES_Y) ? 2 : 1), [town](Station *st, TileIndex) { - town->stations_near.insert(st); + ForAllStationsAroundTiles(TileArea(tile, (size & BUILDING_2_TILES_X) ? 2 : 1, (size & BUILDING_2_TILES_Y) ? 2 : 1), [t](Station *st, TileIndex) { + t->stations_near.insert(st); return true; }); } From 2dad9263d7631447348d79b65ee01c19fc960be1 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Sun, 22 Oct 2023 18:59:17 -0400 Subject: [PATCH 25/40] Doc: Add, fix, and clean up documentation inside town_cmd.cpp --- src/town_cmd.cpp | 407 ++++++++++++++++++++++++++++------------------- 1 file changed, 241 insertions(+), 166 deletions(-) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 646b9d5113..9959482cea 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -79,12 +79,12 @@ void RebuildTownKdtree() /** * Check if a town 'owns' a bridge. - * Bridges to not directly have an owner, so we check the tiles adjacent to the bridge ends. + * Bridges do not directly have an owner, so we check the tiles adjacent to the bridge ends. * If either adjacent tile belongs to the town then it will be assumed that the town built * the bridge. - * @param tile Bridge tile to test - * @param t Town we are interested in - * @return true if town 'owns' a bridge. + * @param tile The bridge tile to test + * @param t The town we are interested in + * @return true If town 'owns' a bridge. */ static bool TestTownOwnsBridge(TileIndex tile, const Town *t) { @@ -168,7 +168,8 @@ void Town::PostDestructor(size_t) } /** - * Assigns town layout. If Random, generates one based on TileHash. + * Assign the town layout. + * @param layout The desired layout. If TL_RANDOM, we pick one based on TileHash. */ void Town::InitializeLayout(TownLayout layout) { @@ -182,7 +183,7 @@ void Town::InitializeLayout(TownLayout layout) /** * Return a random valid town. - * @return random town, nullptr if there are no towns + * @return A random town, or nullptr if there are no towns. */ /* static */ Town *Town::GetRandom() { @@ -210,8 +211,8 @@ void Town::FillCachedName() const } /** - * Get the cost for removing this house - * @return the cost (inflation corrected etc) + * Get the cost for removing this house. + * @return The cost adjusted for inflation, etc. */ Money HouseSpec::GetRemovalCost() const { @@ -221,7 +222,7 @@ Money HouseSpec::GetRemovalCost() const /* Local */ static int _grow_town_result; -/* Describe the possible states */ +/* The possible states of town growth. */ enum TownGrowthResult { GROWTH_SUCCEED = -1, GROWTH_SEARCH_STOPPED = 0 @@ -252,8 +253,7 @@ static inline DiagDirection RandomDiagDir() } /** - * House Tile drawing handler. - * Part of the tile loop process + * Draw a house and its tile. This is a tile callback routine. * @param ti TileInfo of the tile to draw */ static void DrawTile_Town(TileInfo *ti) @@ -310,7 +310,11 @@ static int GetSlopePixelZ_Town(TileIndex tile, uint, uint, bool) return GetTileMaxPixelZ(tile); } -/** Tile callback routine */ +/** + * Get the foundation for a house. This is a tile callback routine. + * @param tile The tile to find a foundation for. + * @param tileh The slope of the tile. + */ static Foundation GetFoundation_Town(TileIndex tile, Slope tileh) { HouseID hid = GetHouseType(tile); @@ -330,10 +334,10 @@ static Foundation GetFoundation_Town(TileIndex tile, Slope tileh) } /** - * Animate a tile for a town - * Only certain houses can be animated - * The newhouses animation supersedes regular ones - * @param tile TileIndex of the house to animate + * Animate a tile for a town. + * Only certain houses can be animated. + * The newhouses animation supersedes regular ones. + * @param tile TileIndex of the house to animate. */ static void AnimateTile_Town(TileIndex tile) { @@ -381,10 +385,10 @@ static void AnimateTile_Town(TileIndex tile) } /** - * Determines if a town is close to a tile - * @param tile TileIndex of the tile to query - * @param dist maximum distance to be accepted - * @returns true if the tile correspond to the distance criteria + * Determines if a town is close to a tile. + * @param tile TileIndex of the tile to query. + * @param dist The maximum distance to be accepted. + * @returns true if the tile is within the specified distance. */ static bool IsCloseToTown(TileIndex tile, uint dist) { @@ -393,10 +397,7 @@ static bool IsCloseToTown(TileIndex tile, uint dist) return DistanceManhattan(tile, t->xy) < dist; } -/** - * Resize the sign(label) of the town after changes in - * population (creation or growth or else) - */ +/** Resize the sign (label) of the town after it changes population. */ void Town::UpdateVirtCoord() { Point pt = RemapCoords2(TileX(this->xy) * TILE_SIZE, TileY(this->xy) * TILE_SIZE); @@ -422,6 +423,7 @@ void UpdateAllTownVirtCoords() } } +/** Clear the cached_name of all towns. */ void ClearAllTownCachedNames() { for (Town *t : Town::Iterate()) { @@ -430,9 +432,9 @@ void ClearAllTownCachedNames() } /** - * Change the towns population - * @param t Town which population has changed - * @param mod population change (can be positive or negative) + * Change the town's population as recorded in the town cache, town label, and town directory. + * @param t The town which has changed. + * @param mod The population change (can be positive or negative). */ static void ChangePopulation(Town *t, int mod) { @@ -444,9 +446,8 @@ static void ChangePopulation(Town *t, int mod) } /** - * Determines the world population - * Basically, count population of all towns, one by one - * @return uint32_t the calculated population of the world + * Get the total population, the sum of all towns in the world. + * @return The calculated population of the world */ uint32_t GetWorldPopulation() { @@ -458,9 +459,9 @@ uint32_t GetWorldPopulation() /** * Remove stations from nearby station list if a town is no longer in the catchment area of each. * To improve performance only checks stations that cover the provided house area (doesn't need to contain an actual house). - * @param t Town to work on - * @param tile Location of house area (north part) - * @param flags BuildingFlags containing the size of house area + * @param t Town to work on. + * @param tile Location of house area (north tile). + * @param flags BuildingFlags containing the size of house area. */ static void RemoveNearbyStations(Town *t, TileIndex tile, BuildingFlags flags) { @@ -517,9 +518,7 @@ static void AdvanceHouseConstruction(TileIndex tile) } /** - * Tile callback function. - * - * Periodic tic handler for houses and town + * Tile callback function. Periodic tick handler for the tiles of a town. * @param tile been asked to do its stuff */ static void TileLoop_Town(TileIndex tile) @@ -660,6 +659,12 @@ static void TileLoop_Town(TileIndex tile) cur_company.Restore(); } +/** + * Callback function to clear a house tile. + * @param tile The tile to clear. + * @param flags Type of operation. + * @return The cost of this operation or an error. + */ static CommandCost ClearTile_Town(TileIndex tile, DoCommandFlag flags) { if (flags & DC_AUTO) return_cmd_error(STR_ERROR_BUILDING_MUST_BE_DEMOLISHED); @@ -812,6 +817,10 @@ static void ChangeTileOwner_Town(TileIndex, Owner, Owner) static bool GrowTown(Town *t); +/** + * Handle the town tick for a single town, by growing the town if desired. + * @param t The town to try growing. + */ static void TownTickHandler(Town *t) { if (HasBit(t->flags, TOWN_IS_GROWING)) { @@ -828,6 +837,7 @@ static void TownTickHandler(Town *t) } } +/** Iterate through all towns and call their tick handler. */ void OnTick_Town() { if (_game_mode == GM_EDITOR) return; @@ -838,12 +848,9 @@ void OnTick_Town() } /** - * Return the RoadBits of a tile - * - * @note There are many other functions doing things like that. - * @note Needs to be checked for needlessness. - * @param tile The tile we want to analyse - * @return The roadbits of the given tile + * Return the RoadBits of a tile, ignoring depot and bay road stops. + * @param tile The tile to check. + * @return The roadbits of the given tile. */ static RoadBits GetTownRoadBits(TileIndex tile) { @@ -852,6 +859,10 @@ static RoadBits GetTownRoadBits(TileIndex tile) return GetAnyRoadBits(tile, RTT_ROAD, true); } +/** + * Get the road type that towns should build at this current moment. + * They may have built a different type in the past. + */ RoadType GetTownRoadType() { RoadType best_rt = ROADTYPE_ROAD; @@ -888,10 +899,10 @@ RoadType GetTownRoadType() * Assuming a road from (tile - TileOffsByDiagDir(dir)) to tile, * is there a parallel road left or right of it within distance dist_multi? * - * @param tile current tile - * @param dir target direction - * @param dist_multi distance multiplayer - * @return true if there is a parallel road + * @param tile The current tile. + * @param dir The target direction. + * @param dist_multi The distance multiplier. + * @return true if there is a parallel road. */ static bool IsNeighborRoadTile(TileIndex tile, const DiagDirection dir, uint dist_multi) { @@ -920,12 +931,12 @@ static bool IsNeighborRoadTile(TileIndex tile, const DiagDirection dir, uint dis } /** - * Check if a Road is allowed on a given tile + * Check if a Road is allowed on a given tile. * - * @param t The current town - * @param tile The target tile - * @param dir The direction in which we want to extend the town - * @return true if it is allowed else false + * @param t The current town. + * @param tile The target tile. + * @param dir The direction in which we want to extend the town. + * @return true if it is allowed. */ static bool IsRoadAllowedHere(Town *t, TileIndex tile, DiagDirection dir) { @@ -997,13 +1008,12 @@ static void LevelTownLand(TileIndex tile) } /** - * Generate the RoadBits of a grid tile + * Generate the RoadBits of a grid tile. * - * @param t current town - * @param tile tile in reference to the town - * @param dir The direction to which we are growing ATM - * @return the RoadBit of the current tile regarding - * the selected town layout + * @param t The current town. + * @param tile The tile in reference to the town. + * @param dir The direction to which we are growing. + * @return The RoadBit of the current tile regarding the selected town layout. */ static RoadBits GetTownRoadGridElement(Town *t, TileIndex tile, DiagDirection dir) { @@ -1060,9 +1070,9 @@ static RoadBits GetTownRoadGridElement(Town *t, TileIndex tile, DiagDirection di * next to the current tile. If there are enough * add another house. * - * @param t The current town - * @param tile The target tile for the extra house - * @return true if an extra house has been added + * @param t The current town. + * @param tile The target tile for the extra house. + * @return true if an extra house has been added. */ static bool GrowTownWithExtraHouse(Town *t, TileIndex tile) { @@ -1101,10 +1111,10 @@ static bool GrowTownWithExtraHouse(Town *t, TileIndex tile) /** * Grows the town with a road piece. * - * @param t The current town - * @param tile The current tile - * @param rcmd The RoadBits we want to build on the tile - * @return true if the RoadBits have been added else false + * @param t The current town. + * @param tile The current tile. + * @param rcmd The RoadBits we want to build on the tile. + * @return true if the RoadBits have been added. */ static bool GrowTownWithRoad(const Town *t, TileIndex tile, RoadBits rcmd) { @@ -1332,10 +1342,10 @@ static bool GrowTownWithTunnel(const Town *t, const TileIndex tile, const DiagDi } /** - * Checks whether at least one surrounding roads allows to build a house here + * Checks whether at least one surrounding road allows to build a house here. * - * @param t the tile where the house will be built - * @return true if at least one surrounding roadtype allows building houses here + * @param t The tile where the house will be built. + * @return true if at least one surrounding roadtype allows building houses here. */ static inline bool RoadTypesAllowHouseHere(TileIndex t) { @@ -1645,10 +1655,10 @@ static bool CanFollowRoad(TileIndex tile, DiagDirection dir) } /** - * Returns "growth" if a house was built, or no if the build failed. - * @param t town to inquiry - * @param tile to inquiry - * @return true if town expansion was possible + * Try to grow a town at a given road tile. + * @param t The town to grow. + * @param tile The road tile to try growing from. + * @return true if we successfully expanded the town. */ static bool GrowTownAtRoad(Town *t, TileIndex tile) { @@ -1742,9 +1752,9 @@ static RoadBits GenRandomRoadBits() } /** - * Grow the town - * @param t town to grow - * @return true iff something (house, road, bridge, ...) was built + * Grow the town. + * @param t The town to grow + * @return true if we successfully grew the town with a road or house. */ static bool GrowTown(Town *t) { @@ -1802,6 +1812,10 @@ static bool GrowTown(Town *t) return false; } +/** + * Update the cached town zone radii of a town, based on the number of houses. + * @param t The town to update. + */ void UpdateTownRadius(Town *t) { static const uint32_t _town_squared_town_zone_radius_data[23][5] = { @@ -1845,6 +1859,10 @@ void UpdateTownRadius(Town *t) } } +/** + * Update the maximum amount of montly passengers and mail for a town, based on its population. + * @param t The town to update. + */ void UpdateTownMaxPass(Town *t) { t->supplied[CT_PASSENGERS].old_max = t->cache.population >> 3; @@ -1855,15 +1873,15 @@ static void UpdateTownGrowthRate(Town *t); static void UpdateTownGrowth(Town *t); /** - * Does the actual town creation. + * Actually create a town. * - * @param t The town - * @param tile Where to put it - * @param townnameparts The town name - * @param size Parameter for size determination - * @param city whether to build a city or town - * @param layout the (road) layout of the town - * @param manual was the town placed manually? + * @param t The town. + * @param tile Where to put it. + * @param townnameparts The town name. + * @param size The preset size of the town. + * @param city Should we create a city? + * @param layout The road layout of the town. + * @param manual Was the town placed manually? */ static void DoCreateTown(Town *t, TileIndex tile, uint32_t townnameparts, TownSize size, bool city, TownLayout layout, bool manual) { @@ -1937,9 +1955,9 @@ static void DoCreateTown(Town *t, TileIndex tile, uint32_t townnameparts, TownSi } /** - * Checks if it's possible to place a town at given tile - * @param tile tile to check - * @return error value or zero cost + * Check if it's possible to place a town on a given tile. + * @param tile The tile to check. + * @return A zero cost if allowed, otherwise an error. */ static CommandCost TownCanBePlacedHere(TileIndex tile) { @@ -1963,8 +1981,8 @@ static CommandCost TownCanBePlacedHere(TileIndex tile) /** * Verifies this custom name is unique. Only custom names are checked. - * @param name name to check - * @return is this name unique? + * @param name The name to check. + * @return true if the name is unique */ static bool IsUniqueTownName(const std::string &name) { @@ -1977,15 +1995,15 @@ static bool IsUniqueTownName(const std::string &name) /** * Create a new town. - * @param flags type of operation - * @param tile coordinates where town is built - * @param size size of the town (@see TownSize) - * @param city true iff it should be a city - * @param layout town road layout (@see TownLayout) - * @param random_location use random location (randomize \c tile ) - * @param townnameparts town name parts + * @param flags The type of operation. + * @param tile The coordinates where town is built. + * @param size The size of the town (@see TownSize). + * @param city Should we build a city? + * @param layout The town road layout (@see TownLayout). + * @param random_location Should we use a random location? (randomize \c tile ) + * @param townnameparts Town name parts. * @param text Custom name for the town. If empty, the town name parts will be used. - * @return the cost of this operation or an error + * @return The cost of this operation or an error. */ std::tuple CmdFoundTown(DoCommandFlag flags, TileIndex tile, TownSize size, bool city, TownLayout layout, bool random_location, uint32_t townnameparts, const std::string &text) { @@ -2090,9 +2108,9 @@ std::tuple CmdFoundTown(DoCommandFlag flags, TileInd * interpenetrate their road networks will not mesh nicely; this * function adjusts a tile so that it aligns properly. * - * @param tile the tile to start at - * @param layout which town layout algo is in effect - * @return the adjusted tile + * @param tile The tile to start at. + * @param layout The town layout in effect. + * @return The adjusted tile. */ static TileIndex AlignTileToGrid(TileIndex tile, TownLayout layout) { @@ -2108,9 +2126,9 @@ static TileIndex AlignTileToGrid(TileIndex tile, TownLayout layout) * interpenetrate their road networks will not mesh nicely; this * function tells you if a tile is properly aligned. * - * @param tile the tile to start at - * @param layout which town layout algo is in effect - * @return true if the tile is in the correct location + * @param tile The tile to start at. + * @param layout The town layout in effect. + * @return true if the tile is in the correct location. */ static bool IsTileAlignedToGrid(TileIndex tile, TownLayout layout) { @@ -2163,8 +2181,7 @@ static bool FindFurthestFromWater(TileIndex tile, void *user_data) } /** - * CircularTileSearch callback; finds the nearest land tile - * + * CircularTileSearch callback to find the nearest land tile. * @param tile Start looking from this tile */ static bool FindNearestEmptyLand(TileIndex tile, void *) @@ -2175,7 +2192,7 @@ static bool FindNearestEmptyLand(TileIndex tile, void *) /** * Given a spot on the map (presumed to be a water tile), find a good * coastal spot to build a city. We don't want to build too close to - * the edge if we can help it (since that retards city growth) hence + * the edge if we can help it (since that inhibits city growth) hence * the search within a search within a search. O(n*m^2), where n is * how far to search for land, and m is how far inland to look for a * flat spot. @@ -2198,6 +2215,15 @@ static TileIndex FindNearestGoodCoastalTownSpot(TileIndex tile, TownLayout layou return INVALID_TILE; } +/** + * Create a random town somewhere in the world. + * @param attempts How many times should we try? + * @param townnameparts The name of the town. + * @param size The size preset of the town. + * @param city Should we build a city? + * @param layout The road layout to build. + * @return The town object, or nullptr if we failed to create a town anywhere. + */ static Town *CreateRandomTown(uint attempts, uint32_t townnameparts, TownSize size, bool city, TownLayout layout) { assert(_game_mode == GM_EDITOR || _generating_world); // These are the preconditions for CMD_DELETE_TOWN @@ -2245,11 +2271,10 @@ static Town *CreateRandomTown(uint attempts, uint32_t townnameparts, TownSize si static const byte _num_initial_towns[4] = {5, 11, 23, 46}; // very low, low, normal, high /** - * This function will generate a certain amount of towns, with a certain layout - * It can be called from the scenario editor (i.e.: generate Random Towns) - * as well as from world creation. - * @param layout which towns will be set to, when created - * @return true if towns have been successfully created + * Generate a number of towns with a given layout. + * This function is used by the Random Towns button in Scenario Editor as well as in world generation. + * @param layout The road layout to build. + * @return true if towns have been successfully created. */ bool GenerateTowns(TownLayout layout) { @@ -2303,10 +2328,10 @@ bool GenerateTowns(TownLayout layout) /** - * Returns the bit corresponding to the town zone of the specified tile - * @param t Town on which town zone is to be found - * @param tile TileIndex where town zone needs to be found - * @return the bit position of the given zone, as defined in HouseZones + * Returns the bit corresponding to the town zone of the specified tile. + * @param t Town on which town zone is to be found. + * @param tile TileIndex where town zone needs to be found. + * @return the bit position of the given zone, as defined in HouseZones. */ HouseZonesBits GetTownRadiusGroup(const Town *t, TileIndex tile) { @@ -2324,13 +2349,13 @@ HouseZonesBits GetTownRadiusGroup(const Town *t, TileIndex tile) /** * Clears tile and builds a house or house part. - * @param tile tile index - * @param t The town to clear the house for - * @param counter of construction step - * @param stage of construction (used for drawing) - * @param type of house. Index into house specs array - * @param random_bits required for newgrf houses - * @pre house can be built here + * @param tile The tile to build upon. + * @param t The town which will own the house. + * @param counter The construction stage counter for the house. + * @param stage The current construction stage of the house. + * @param type The type of house. + * @param random_bits Random bits for newgrf houses to use. + * @pre The house can be built here. */ static inline void ClearMakeHouseTile(TileIndex tile, Town *t, byte counter, byte stage, HouseID type, byte random_bits) { @@ -2372,11 +2397,10 @@ static void MakeTownHouse(TileIndex tile, Town *t, byte counter, byte stage, Hou /** - * Checks if a house can be built here. Important is slope, bridge above - * and ability to clear the land. - * @param tile tile to check - * @param noslope are slopes (foundations) allowed? - * @return true iff house can be built here + * Check if a house can be built here, based on slope, whether there's a bridge above, and if we can clear the land. + * @param tile The tile to check. + * @param noslope Are foundations prohibited for this house? + * @return true iff house can be built here. */ static inline bool CanBuildHouseHere(TileIndex tile, bool noslope) { @@ -2396,11 +2420,11 @@ static inline bool CanBuildHouseHere(TileIndex tile, bool noslope) /** - * Checks if a house can be built at this tile, must have the same max z as parameter. - * @param tile tile to check - * @param z max z of this tile so more parts of a house are at the same height (with foundation) - * @param noslope are slopes (foundations) allowed? - * @return true iff house can be built here + * Check if a tile where we want to build a multi-tile house has an appropriate max Z. + * @param tile The tile to check. + * @param z The max Z level to allow. + * @param noslope Are foundations disallowed for this house? + * @return true iff house can be built here. * @see CanBuildHouseHere() */ static inline bool CheckBuildHouseSameZ(TileIndex tile, int z, bool noslope) @@ -2415,11 +2439,11 @@ static inline bool CheckBuildHouseSameZ(TileIndex tile, int z, bool noslope) /** - * Checks if a house of size 2x2 can be built at this tile - * @param tile tile, N corner - * @param z maximum tile z so all tile have the same max z - * @param noslope are slopes (foundations) allowed? - * @return true iff house can be built + * Checks if a house of size 2x2 can be built at this tile. + * @param tile The tile of the house's northernmost tile. + * @param z The maximum tile z, so all tiles are the same height. + * @param noslope Are foundations disallowed for this house? + * @return true iff house can be built here. * @see CheckBuildHouseSameZ() */ static bool CheckFree2x2Area(TileIndex tile, int z, bool noslope) @@ -2437,10 +2461,10 @@ static bool CheckFree2x2Area(TileIndex tile, int z, bool noslope) /** - * Checks if current town layout allows building here - * @param t town - * @param tile tile to check - * @return true iff town layout allows building here + * Checks if the current town layout allows building here. + * @param t The town. + * @param tile The tile to check. + * @return true iff town layout allows building here. * @note see layouts */ static inline bool TownLayoutAllowsHouseHere(Town *t, TileIndex tile) @@ -2468,10 +2492,10 @@ static inline bool TownLayoutAllowsHouseHere(Town *t, TileIndex tile) /** - * Checks if current town layout allows 2x2 building here - * @param t town - * @param tile tile to check - * @return true iff town layout allows 2x2 building here + * Checks if the current town layout allows a 2x2 building here. + * @param t The town. + * @param tile The tile to check. + * @return true iff town layout allows a 2x2 building here. * @note see layouts */ static inline bool TownLayoutAllows2x2HouseHere(Town *t, TileIndex tile) @@ -2503,13 +2527,13 @@ static inline bool TownLayoutAllows2x2HouseHere(Town *t, TileIndex tile) /** - * Checks if 1x2 or 2x1 building is allowed here, also takes into account current town layout - * Also, tests both building positions that occupy this tile - * @param tile tile where the building should be built - * @param t town - * @param maxz all tiles should have the same height - * @param noslope are slopes forbidden? - * @param second diagdir from first tile to second tile + * Checks if a 1x2 or 2x1 building is allowed here, accounting for road layout and tile heights. + * Also, tests both building positions that occupy this tile. + * @param tile The tile where the building should be built. + * @param t The town. + * @param maxz The maximum Z level, since all tiles must have the same height. + * @param noslope Are foundations disallowed for this house? + * @param second The diagdir from the first tile to the second tile. */ static bool CheckTownBuild2House(TileIndex *tile, Town *t, int maxz, bool noslope, DiagDirection second) { @@ -2529,12 +2553,12 @@ static bool CheckTownBuild2House(TileIndex *tile, Town *t, int maxz, bool noslop /** - * Checks if 2x2 building is allowed here, also takes into account current town layout - * Also, tests all four building positions that occupy this tile - * @param tile tile where the building should be built - * @param t town - * @param maxz all tiles should have the same height - * @param noslope are slopes forbidden? + * Checks if a 1x2 or 2x1 building is allowed here, accounting for road layout and tile heights. + * Also, tests all four building positions that occupy this tile. + * @param tile The tile where the building should be built. + * @param t The town. + * @param maxz The maximum Z level, since all tiles must have the same height. + * @param noslope Are foundations disallowed for this house? */ static bool CheckTownBuild2x2House(TileIndex *tile, Town *t, int maxz, bool noslope) { @@ -2554,10 +2578,10 @@ static bool CheckTownBuild2x2House(TileIndex *tile, Town *t, int maxz, bool nosl /** - * Tries to build a house at this tile - * @param t town the house will belong to - * @param tile where the house will be built - * @return false iff no house can be built at this tile + * Tries to build a house at this tile. + * @param t The town the house will belong to. + * @param tile The tile to try building on. + * @return false iff no house can be built on this tile. */ static bool BuildTownHouse(Town *t, TileIndex tile) { @@ -2750,14 +2774,19 @@ TileIndexDiff GetHouseNorthPart(HouseID &house) return 0; } +/** + * Clear a town house. + * @param t The town which owns the house. + * @param tile The tile to clear. + */ void ClearTownHouse(Town *t, TileIndex tile) { assert(IsTileType(tile, MP_HOUSE)); HouseID house = GetHouseType(tile); - /* need to align the tile to point to the upper left corner of the house */ - tile += GetHouseNorthPart(house); // modifies house to the ID of the north tile + /* The northernmost tile of the house is the main house. */ + tile += GetHouseNorthPart(house); const HouseSpec *hs = HouseSpec::Get(house); @@ -3088,6 +3117,12 @@ const byte _town_action_costs[TACT_COUNT] = { 2, 4, 9, 35, 48, 53, 117, 175 }; +/** + * Perform the "small advertising campaign" town action. + * @param t The town to advertise in. + * @param flags Type of operation. + * @return An empty cost. + */ static CommandCost TownActionAdvertiseSmall(Town *t, DoCommandFlag flags) { if (flags & DC_EXEC) { @@ -3096,6 +3131,12 @@ static CommandCost TownActionAdvertiseSmall(Town *t, DoCommandFlag flags) return CommandCost(); } +/** + * Perform the "medium advertising campaign" town action. + * @param t The town to advertise in. + * @param flags Type of operation. + * @return An empty cost. + */ static CommandCost TownActionAdvertiseMedium(Town *t, DoCommandFlag flags) { if (flags & DC_EXEC) { @@ -3104,6 +3145,12 @@ static CommandCost TownActionAdvertiseMedium(Town *t, DoCommandFlag flags) return CommandCost(); } +/** + * Perform the "large advertising campaign" town action. + * @param t The town to advertise in. + * @param flags Type of operation. + * @return An empty cost. + */ static CommandCost TownActionAdvertiseLarge(Town *t, DoCommandFlag flags) { if (flags & DC_EXEC) { @@ -3112,6 +3159,12 @@ static CommandCost TownActionAdvertiseLarge(Town *t, DoCommandFlag flags) return CommandCost(); } +/** + * Perform the "local road reconstruction" town action. + * @param t The town to grief in. + * @param flags Type of operation. + * @return An empty cost. + */ static CommandCost TownActionRoadRebuild(Town *t, DoCommandFlag flags) { /* Check if the company is allowed to fund new roads. */ @@ -3222,6 +3275,12 @@ static CommandCost TownActionBuildStatue(Town *t, DoCommandFlag flags) return CommandCost(); } +/** + * Perform the "fund new buildings" town action. + * @param t The town to fund buildings in. + * @param flags Type of operation. + * @return An empty cost. + */ static CommandCost TownActionFundBuildings(Town *t, DoCommandFlag flags) { /* Check if it's allowed to buy the rights */ @@ -3249,6 +3308,12 @@ static CommandCost TownActionFundBuildings(Town *t, DoCommandFlag flags) return CommandCost(); } +/** + * Perform the "buy exclusive transport rights" town action. + * @param t The town to buy exclusivity in. + * @param flags Type of operation. + * @return An empty cost. + */ static CommandCost TownActionBuyRights(Town *t, DoCommandFlag flags) { /* Check if it's allowed to buy the rights */ @@ -3276,6 +3341,12 @@ static CommandCost TownActionBuyRights(Town *t, DoCommandFlag flags) return CommandCost(); } +/** + * Perform the "bribe" town action. + * @param t The town to bribe. + * @param flags Type of operation. + * @return An empty cost. + */ static CommandCost TownActionBribe(Town *t, DoCommandFlag flags) { if (flags & DC_EXEC) { @@ -3326,10 +3397,10 @@ static TownActionProc * const _town_action_proc[] = { }; /** - * Get a list of available actions to do at a town. - * @param cid the company that is querying the town - * @param t the town that is queried - * @return bitmasked value of enabled actions + * Get a list of available town authority actions. + * @param cid The company that is querying the town. + * @param t The town that is queried. + * @return The bitmasked value of enabled actions. */ TownActions GetMaskOfTownActions(CompanyID cid, const Town *t) { @@ -3413,6 +3484,10 @@ static void ForAllStationsNearTown(Town *t, Func func) }); } +/** + * Monthly callback to update town and station ratings. + * @param t The town to update. + */ static void UpdateTownRating(Town *t) { /* Increase company ratings if they're low */ From 4181d3c1ff244cba32ef8c80a43e1b2afa1ffce9 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Wed, 1 Nov 2023 15:46:50 -0400 Subject: [PATCH 26/40] Codechange: Don't use a magic number for the number of DiagDirections --- src/town_cmd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 9959482cea..d59fb78a15 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -249,7 +249,7 @@ static TownDrawTileProc * const _town_draw_tile_procs[1] = { */ static inline DiagDirection RandomDiagDir() { - return (DiagDirection)(3 & Random()); + return (DiagDirection)(RandomRange(DIAGDIR_END)); } /** From 3f853d8003fc8bdd2b865b9dfbfc4d5e72012ef2 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 26 Nov 2023 21:30:31 +0000 Subject: [PATCH 27/40] Codechange: Use range-for to simplify getting first non-zero value. This reduces indexed array access. --- src/script/api/script_engine.cpp | 5 ++--- src/script/api/script_event_types.cpp | 5 ++--- src/vehicle_gui.cpp | 4 ++-- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/script/api/script_engine.cpp b/src/script/api/script_engine.cpp index 22caa1fad9..bc0071301a 100644 --- a/src/script/api/script_engine.cpp +++ b/src/script/api/script_engine.cpp @@ -94,9 +94,8 @@ case VEH_ROAD: case VEH_TRAIN: { CargoArray capacities = GetCapacityOfArticulatedParts(engine_id); - for (CargoID c = 0; c < NUM_CARGO; c++) { - if (capacities[c] == 0) continue; - return capacities[c]; + for (uint &cap : capacities) { + if (cap != 0) return cap; } return -1; } diff --git a/src/script/api/script_event_types.cpp b/src/script/api/script_event_types.cpp index 5b5f432379..64b6acb3bc 100644 --- a/src/script/api/script_event_types.cpp +++ b/src/script/api/script_event_types.cpp @@ -62,9 +62,8 @@ int32_t ScriptEventEnginePreview::GetCapacity() case VEH_ROAD: case VEH_TRAIN: { CargoArray capacities = GetCapacityOfArticulatedParts(this->engine); - for (CargoID c = 0; c < NUM_CARGO; c++) { - if (capacities[c] == 0) continue; - return capacities[c]; + for (uint &cap : capacities) { + if (cap != 0) return cap; } return -1; } diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 3a9ddbdc8a..dff391c8a9 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -1373,8 +1373,8 @@ static bool VehicleCargoSorter(const Vehicle * const &a, const Vehicle * const & for (v = b; v != nullptr; v = v->Next()) diff[v->cargo_type] -= v->cargo_cap; int r = 0; - for (CargoID i = 0; i < NUM_CARGO; i++) { - r = diff[i]; + for (uint d : diff) { + r = d; if (r != 0) break; } From 7b0afec11f1524357b94be4ae03832c86de48c79 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 26 Nov 2023 21:38:49 +0000 Subject: [PATCH 28/40] Codechange: Use max_element to find highest cargo amount. --- src/script/api/script_engine.cpp | 12 +++--------- src/script/api/script_event_types.cpp | 12 +++--------- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/src/script/api/script_engine.cpp b/src/script/api/script_engine.cpp index bc0071301a..6475e9d003 100644 --- a/src/script/api/script_engine.cpp +++ b/src/script/api/script_engine.cpp @@ -55,16 +55,10 @@ CargoArray cap = ::GetCapacityOfArticulatedParts(engine_id); - CargoID most_cargo = CT_INVALID; - uint amount = 0; - for (CargoID cid = 0; cid < NUM_CARGO; cid++) { - if (cap[cid] > amount) { - amount = cap[cid]; - most_cargo = cid; - } - } + auto it = std::max_element(std::cbegin(cap), std::cend(cap)); + if (*it == 0) return CT_INVALID; - return most_cargo; + return CargoID(std::distance(std::cbegin(cap), it)); } /* static */ bool ScriptEngine::CanRefitCargo(EngineID engine_id, CargoID cargo_id) diff --git a/src/script/api/script_event_types.cpp b/src/script/api/script_event_types.cpp index 64b6acb3bc..48d6405e57 100644 --- a/src/script/api/script_event_types.cpp +++ b/src/script/api/script_event_types.cpp @@ -42,16 +42,10 @@ CargoID ScriptEventEnginePreview::GetCargoType() if (!this->IsEngineValid()) return CT_INVALID; CargoArray cap = ::GetCapacityOfArticulatedParts(this->engine); - CargoID most_cargo = CT_INVALID; - uint amount = 0; - for (CargoID cid = 0; cid < NUM_CARGO; cid++) { - if (cap[cid] > amount) { - amount = cap[cid]; - most_cargo = cid; - } - } + auto it = std::max_element(std::cbegin(cap), std::cend(cap)); + if (*it == 0) return CT_INVALID; - return most_cargo; + return CargoID(std::distance(std::cbegin(cap), it)); } int32_t ScriptEventEnginePreview::GetCapacity() From 8437b20feda7d0dc3a97cdb76ad87c68fb1f8077 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Tue, 28 Nov 2023 21:59:00 +0000 Subject: [PATCH 29/40] Fix: Deleting towns did not check for waypoints referencing the town --- src/town_cmd.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index d59fb78a15..48fbf03940 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -17,6 +17,7 @@ #include "command_func.h" #include "industry.h" #include "station_base.h" +#include "waypoint_base.h" #include "station_kdtree.h" #include "company_base.h" #include "news_func.h" @@ -3040,6 +3041,11 @@ CommandCost CmdDeleteTown(DoCommandFlag flags, TownID town_id) } } + /* Waypoints refer to towns. */ + for (const Waypoint *wp : Waypoint::Iterate()) { + if (wp->town == t) return CMD_ERROR; + } + /* Depots refer to towns. */ for (const Depot *d : Depot::Iterate()) { if (d->town == t) return CMD_ERROR; From 27082f9efa60a6729d8d3bc2511b6a087889e1aa Mon Sep 17 00:00:00 2001 From: rubidium42 Date: Tue, 28 Nov 2023 20:17:05 -0400 Subject: [PATCH 30/40] Codechange: pass std::string references to OpenBrowser --- src/help_gui.cpp | 8 ++++---- src/network/network_content_gui.cpp | 4 ++-- src/network/network_gui.cpp | 2 +- src/openttd.cpp | 4 ++-- src/openttd.h | 2 +- src/os/macosx/macos.mm | 4 ++-- src/os/unix/unix.cpp | 8 ++++---- src/os/windows/win32.cpp | 2 +- src/settings_gui.cpp | 2 +- src/textfile_gui.cpp | 2 +- 10 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/help_gui.cpp b/src/help_gui.cpp index 4ee33529d0..ea318dbda7 100644 --- a/src/help_gui.cpp +++ b/src/help_gui.cpp @@ -145,16 +145,16 @@ struct HelpWindow : public Window { new GameManualTextfileWindow(LICENSE_FILENAME); break; case WID_HW_WEBSITE: - OpenBrowser(WEBSITE_LINK.c_str()); + OpenBrowser(WEBSITE_LINK); break; case WID_HW_WIKI: - OpenBrowser(WIKI_LINK.c_str()); + OpenBrowser(WIKI_LINK); break; case WID_HW_BUGTRACKER: - OpenBrowser(BUGTRACKER_LINK.c_str()); + OpenBrowser(BUGTRACKER_LINK); break; case WID_HW_COMMUNITY: - OpenBrowser(COMMUNITY_LINK.c_str()); + OpenBrowser(COMMUNITY_LINK); break; } } diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index a9a0f9bc06..9eb5b212ed 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -384,7 +384,7 @@ class NetworkContentListWindow : public Window, ContentCallback { } } - OpenBrowser(url.c_str()); + OpenBrowser(url); } /** @@ -855,7 +855,7 @@ public: case WID_NCL_OPEN_URL: if (this->selected != nullptr) { - OpenBrowser(this->selected->url.c_str()); + OpenBrowser(this->selected->url); } break; diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index e92f573fb4..449f09a326 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -2501,7 +2501,7 @@ struct NetworkAskSurveyWindow : public Window { break; case WID_NAS_LINK: - OpenBrowser(NETWORK_SURVEY_DETAILS_LINK.c_str()); + OpenBrowser(NETWORK_SURVEY_DETAILS_LINK); break; case WID_NAS_NO: diff --git a/src/openttd.cpp b/src/openttd.cpp index 3b6c303de6..96f7dc7d98 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -94,7 +94,7 @@ bool HandleBootstrap(); extern void AfterLoadCompanyStats(); extern Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY); -extern void OSOpenBrowser(const char *url); +extern void OSOpenBrowser(const std::string &url); extern void RebuildTownCaches(); extern void ShowOSErrorBox(const char *buf, bool system); extern std::string _config_file; @@ -370,7 +370,7 @@ void MakeNewgameSettingsLive() } } -void OpenBrowser(const char *url) +void OpenBrowser(const std::string &url) { /* Make sure we only accept urls that are sure to open a browser. */ if (StrStartsWith(url, "http://") || StrStartsWith(url, "https://")) { diff --git a/src/openttd.h b/src/openttd.h index 282c0a033b..93875dfd6d 100644 --- a/src/openttd.h +++ b/src/openttd.h @@ -90,7 +90,7 @@ void SwitchToMode(SwitchMode new_mode); bool RequestNewGRFScan(struct NewGRFScanCallback *callback = nullptr); void GenerateSavegameId(); -void OpenBrowser(const char *url); +void OpenBrowser(const std::string &url); void ChangeAutosaveFrequency(bool reset); #endif /* OPENTTD_H */ diff --git a/src/os/macosx/macos.mm b/src/os/macosx/macos.mm index bc97f6cdce..1b1beacab4 100644 --- a/src/os/macosx/macos.mm +++ b/src/os/macosx/macos.mm @@ -143,9 +143,9 @@ void ShowOSErrorBox(const char *buf, bool system) } } -void OSOpenBrowser(const char *url) +void OSOpenBrowser(const std::string &url) { - [ [ NSWorkspace sharedWorkspace ] openURL:[ NSURL URLWithString:[ NSString stringWithUTF8String:url ] ] ]; + [ [ NSWorkspace sharedWorkspace ] openURL:[ NSURL URLWithString:[ NSString stringWithUTF8String:url.c_str() ] ] ]; } /** diff --git a/src/os/unix/unix.cpp b/src/os/unix/unix.cpp index ee4d0b7e15..2583be3347 100644 --- a/src/os/unix/unix.cpp +++ b/src/os/unix/unix.cpp @@ -230,20 +230,20 @@ std::optional GetClipboardContents() #if defined(__EMSCRIPTEN__) -void OSOpenBrowser(const char *url) +void OSOpenBrowser(const std::string &url) { /* Implementation in pre.js */ - EM_ASM({ if(window["openttd_open_url"]) window.openttd_open_url($0, $1) }, url, strlen(url)); + EM_ASM({ if (window["openttd_open_url"]) window.openttd_open_url($0, $1) }, url.c_str(), url.size()); } #elif !defined( __APPLE__) -void OSOpenBrowser(const char *url) +void OSOpenBrowser(const std::string &url) { pid_t child_pid = fork(); if (child_pid != 0) return; const char *args[3]; args[0] = "xdg-open"; - args[1] = url; + args[1] = url.c_str(); args[2] = nullptr; execvp(args[0], const_cast(args)); Debug(misc, 0, "Failed to open url: {}", url); diff --git a/src/os/windows/win32.cpp b/src/os/windows/win32.cpp index 0b732ca431..1d4e747378 100644 --- a/src/os/windows/win32.cpp +++ b/src/os/windows/win32.cpp @@ -52,7 +52,7 @@ void ShowOSErrorBox(const char *buf, bool) MessageBox(GetActiveWindow(), OTTD2FS(buf).c_str(), L"Error!", MB_ICONSTOP | MB_TASKMODAL); } -void OSOpenBrowser(const char *url) +void OSOpenBrowser(const std::string &url) { ShellExecute(GetActiveWindow(), L"open", OTTD2FS(url).c_str(), nullptr, nullptr, SW_SHOWNORMAL); } diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 5b23df1f81..97a3066dae 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -495,7 +495,7 @@ struct GameOptionsWindow : Window { break; case WID_GO_SURVEY_LINK_BUTTON: - OpenBrowser(NETWORK_SURVEY_DETAILS_LINK.c_str()); + OpenBrowser(NETWORK_SURVEY_DETAILS_LINK); break; case WID_GO_SURVEY_PREVIEW_BUTTON: diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index 57278000ae..abfcb25632 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -406,7 +406,7 @@ void TextfileWindow::NavigateHistory(int delta) } case HyperlinkType::Web: - OpenBrowser(link.destination.c_str()); + OpenBrowser(link.destination); break; case HyperlinkType::File: From 6f35f3274f2a845307cbc5c5ef6c5bde952fdcb4 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 29 Nov 2023 02:30:10 +0000 Subject: [PATCH 31/40] Fix ab1a4c6c: Crash if the "No Music" set is loaded because there is no current set_index. (#11511) Add a helper function to get the current set_index which which checks it is in range. --- src/music_gui.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/music_gui.cpp b/src/music_gui.cpp index 335b9dd617..ebbc4ddf7b 100644 --- a/src/music_gui.cpp +++ b/src/music_gui.cpp @@ -87,6 +87,7 @@ struct MusicSystem { void PlaylistClear(); private: + uint GetSetIndex(); void SetPositionBySetIndex(uint set_index); void ChangePlaylistPosition(int ofs); int playlist_position; @@ -191,6 +192,17 @@ void MusicSystem::SetPositionBySetIndex(uint set_index) if (it != std::end(this->active_playlist)) this->playlist_position = std::distance(std::begin(this->active_playlist), it); } +/** + * Get set index from current playlist position. + * @return current set index, or UINT_MAX if nothing is selected. + */ +uint MusicSystem::GetSetIndex() +{ + return static_cast(this->playlist_position) < this->active_playlist.size() + ? this->active_playlist[this->playlist_position].set_index + : UINT_MAX; +} + /** * Enable shuffle mode. */ @@ -198,7 +210,7 @@ void MusicSystem::Shuffle() { _settings_client.music.shuffle = true; - uint set_index = this->active_playlist[this->playlist_position].set_index; + uint set_index = this->GetSetIndex(); this->active_playlist = this->displayed_playlist; for (size_t i = 0; i < this->active_playlist.size(); i++) { size_t shuffle_index = InteractiveRandom() % (this->active_playlist.size() - i); @@ -217,7 +229,7 @@ void MusicSystem::Unshuffle() { _settings_client.music.shuffle = false; - uint set_index = this->active_playlist[this->playlist_position].set_index; + uint set_index = this->GetSetIndex(); this->active_playlist = this->displayed_playlist; this->SetPositionBySetIndex(set_index); From b1f98a79f8a6a5c1b1a59247b35b2d23759b0c48 Mon Sep 17 00:00:00 2001 From: glx22 Date: Tue, 28 Nov 2023 23:44:22 +0100 Subject: [PATCH 32/40] Update: [CI] Use macos-12 image for release-macos workflow --- .github/workflows/release-macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-macos.yml b/.github/workflows/release-macos.yml index 0e560cc470..26e3395642 100644 --- a/.github/workflows/release-macos.yml +++ b/.github/workflows/release-macos.yml @@ -12,7 +12,7 @@ jobs: macos: name: MacOS - runs-on: macos-11 + runs-on: macos-12 env: MACOSX_DEPLOYMENT_TARGET: 10.13 From e2c5eb3b65ee420a664abfee5128bc89cce68ef1 Mon Sep 17 00:00:00 2001 From: glx22 Date: Wed, 29 Nov 2023 17:39:39 +0100 Subject: [PATCH 33/40] Codechange: [CI] Use runner vcpkg in release-linux workflow --- .github/workflows/release-linux.yml | 65 +++++++++++++---------------- 1 file changed, 29 insertions(+), 36 deletions(-) diff --git a/.github/workflows/release-linux.yml b/.github/workflows/release-linux.yml index 29eea834e9..0044ea14ad 100644 --- a/.github/workflows/release-linux.yml +++ b/.github/workflows/release-linux.yml @@ -17,6 +17,11 @@ jobs: # manylinux2014 is based on CentOS 7, but already has a lot of things # installed and preconfigured. It makes it easier to build OpenTTD. image: quay.io/pypa/manylinux2014_x86_64 + volumes: + - /usr/local/share/vcpkg:/vcpkg + env: + ImageOS: ${{ env.ImageOS }} + ImageVersion: ${{ env.ImageVersion }} steps: - name: Download source @@ -41,13 +46,18 @@ jobs: - name: Enable Rust cache uses: Swatinem/rust-cache@v2 + - name: Prepare cache key + id: key + run: | + echo "image=$ImageOS-$ImageVersion" >> $GITHUB_OUTPUT + - name: Enable vcpkg cache uses: actions/cache@v3 with: path: /vcpkg/installed - key: ubuntu-20.04-vcpkg-release-1 # Increase the number whenever dependencies are modified + key: ${{ steps.key.outputs.image }}-vcpkg-release-1 # Increase the number whenever dependencies are modified restore-keys: | - ubuntu-20.04-vcpkg-release + ${{ steps.key.outputs.image }}-vcpkg-release - name: Install dependencies run: | @@ -103,40 +113,23 @@ jobs: # We use vcpkg for our dependencies, to get more up-to-date version. echo "::group::Install vcpkg and dependencies" - # We do a little dance to make sure we copy the cached install folder - # into our new clone. - git clone --depth=1 https://github.com/microsoft/vcpkg /vcpkg-clone - if [ -e /vcpkg/installed ]; then - mv /vcpkg/installed /vcpkg-clone/ - rm -rf /vcpkg - fi - mv /vcpkg-clone /vcpkg - - ( - cd /vcpkg - ./bootstrap-vcpkg.sh -disableMetrics - - # Once installed (and cached) a package will never be upgraded unless we do it ourselves. - ./vcpkg upgrade --no-dry-run - - # Make Python3 available for other packages. - ./vcpkg install python3 - ln -sf $(pwd)/installed/x64-linux/tools/python3/python3.[0-9][0-9] /usr/bin/python3 - - ./vcpkg install \ - breakpad \ - curl[http2] \ - fontconfig \ - freetype \ - harfbuzz \ - icu \ - liblzma \ - libpng \ - lzo \ - sdl2 \ - zlib \ - # EOF - ) + # Make Python3 available for other packages. + /vcpkg/vcpkg install python3 + ln -sf /vcpkg/installed/x64-linux/tools/python3/python3.[0-9][0-9] /usr/bin/python3 + + /vcpkg/vcpkg install \ + breakpad \ + curl[http2] \ + fontconfig \ + freetype \ + harfbuzz \ + icu \ + liblzma \ + libpng \ + lzo \ + sdl2 \ + zlib \ + # EOF echo "::endgroup::" echo "::group::Install breakpad dependencies" From ddd609ce9b9c8b021aa2b851f15c1da8af574c59 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 29 Nov 2023 22:40:09 +0000 Subject: [PATCH 34/40] Feature: Randomize direction of rail vehicle on build based on probability callback. (#11489) This allows NewGRF authors to indicate that the game should randomly flip rail vehicles on build, without needing to use random bits nor duplicate sprites to handle it themselves. To use this functionality, test for callback 162 (CBID_VEHICLE_BUILD_PROBABILITY) and var10 = 0 (values other than 0 are reserved for future use), and return a value between 0 and 100 inclusive. The return value is a percentage chance of reversing the vehicle. A value of 0 will always build a forward facing vehicle, and 100 will always build a reverse facing vehicle. --- src/newgrf_callbacks.h | 3 +++ src/newgrf_engine.cpp | 14 ++++++++++++++ src/newgrf_engine.h | 6 ++++++ src/train_cmd.cpp | 3 +++ 4 files changed, 26 insertions(+) diff --git a/src/newgrf_callbacks.h b/src/newgrf_callbacks.h index 482031cec0..056461c006 100644 --- a/src/newgrf_callbacks.h +++ b/src/newgrf_callbacks.h @@ -282,6 +282,9 @@ enum CallbackID { /** Called to determine the engine name to show. */ CBID_VEHICLE_NAME = 0x161, // 15 bit callback + + /** Called to determine probability during build. */ + CBID_VEHICLE_BUILD_PROBABILITY = 0x162, // 15 bit callback }; /** diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index df3be19561..bea6c1d2e8 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -1192,6 +1192,20 @@ int GetEngineProperty(EngineID engine, PropertyID property, int orig_value, cons return orig_value; } +/** + * Test for vehicle build probablity type. + * @param v Vehicle whose build probability to test. + * @param type Build probability type to test for. + * @returns True iff the probability result says so. + */ +bool TestVehicleBuildProbability(Vehicle *v, EngineID engine, BuildProbabilityType type) +{ + uint16_t p = GetVehicleCallback(CBID_VEHICLE_BUILD_PROBABILITY, std::underlying_type::type(type), 0, engine, v); + if (p == CALLBACK_FAILED) return false; + + const uint16_t PROBABILITY_RANGE = 100; + return p + RandomRange(PROBABILITY_RANGE) >= PROBABILITY_RANGE; +} static void DoTriggerVehicle(Vehicle *v, VehicleTrigger trigger, uint16_t base_random_bits, bool first) { diff --git a/src/newgrf_engine.h b/src/newgrf_engine.h index 4452ad9caf..da37602b81 100644 --- a/src/newgrf_engine.h +++ b/src/newgrf_engine.h @@ -103,6 +103,12 @@ bool UsesWagonOverride(const Vehicle *v); int GetVehicleProperty(const Vehicle *v, PropertyID property, int orig_value, bool is_signed = false); int GetEngineProperty(EngineID engine, PropertyID property, int orig_value, const Vehicle *v = nullptr, bool is_signed = false); +enum class BuildProbabilityType { + Reversed = 0, +}; + +bool TestVehicleBuildProbability(Vehicle *v, EngineID engine, BuildProbabilityType type); + enum VehicleTrigger { VEHICLE_TRIGGER_NEW_CARGO = 0x01, /* Externally triggered only for the first vehicle in chain */ diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 67e233f9d7..848a1bad4e 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -661,6 +661,7 @@ static CommandCost CmdBuildRailWagon(DoCommandFlag flags, TileIndex tile, const v->group_id = DEFAULT_GROUP; + if (TestVehicleBuildProbability(v, v->engine_type, BuildProbabilityType::Reversed)) SetBit(v->flags, VRF_REVERSE_DIRECTION); AddArticulatedParts(v); v->UpdatePosition(); @@ -728,6 +729,7 @@ static void AddRearEngineToMultiheadedTrain(Train *v) v->SetMultiheaded(); u->SetMultiheaded(); v->SetNext(u); + if (TestVehicleBuildProbability(u, u->engine_type, BuildProbabilityType::Reversed)) SetBit(u->flags, VRF_REVERSE_DIRECTION); u->UpdatePosition(); /* Now we need to link the front and rear engines together */ @@ -799,6 +801,7 @@ CommandCost CmdBuildRailVehicle(DoCommandFlag flags, TileIndex tile, const Engin v->SetFrontEngine(); v->SetEngine(); + if (TestVehicleBuildProbability(v, v->engine_type, BuildProbabilityType::Reversed)) SetBit(v->flags, VRF_REVERSE_DIRECTION); v->UpdatePosition(); if (rvi->railveh_type == RAILVEH_MULTIHEAD) { From cb8612ba79fc3da00bb8d41f817889942f98f270 Mon Sep 17 00:00:00 2001 From: rubidium42 Date: Wed, 29 Nov 2023 20:29:23 -0400 Subject: [PATCH 35/40] Remove: ZOOM_LVL_COUNT This is the only enumeration with a COUNT and END. The logic of the COUNT implied that BEGIN could be non-zero, but all but two uses of zoom level assume that BEGIN is zero, making the separate count only confusing. --- src/blitter/32bpp_optimized.cpp | 6 +++--- src/blitter/32bpp_optimized.hpp | 2 +- src/blitter/32bpp_sse2.hpp | 2 +- src/blitter/8bpp_optimized.hpp | 2 +- src/sound.cpp | 4 ++-- src/spritecache.cpp | 4 ++-- src/spriteloader/spriteloader.hpp | 2 +- src/video/opengl.cpp | 6 +++--- src/video/opengl.h | 2 +- src/viewport.cpp | 2 +- src/zoom_type.h | 2 -- 11 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/blitter/32bpp_optimized.cpp b/src/blitter/32bpp_optimized.cpp index 74181f0b61..104a3cc97d 100644 --- a/src/blitter/32bpp_optimized.cpp +++ b/src/blitter/32bpp_optimized.cpp @@ -277,7 +277,7 @@ template Sprite *Blitter_32bppOptimized::EncodeInternal(const /* streams of pixels (a, r, g, b channels) * * stored in separated stream so data are always aligned on 4B boundary */ - Colour *dst_px_orig[ZOOM_LVL_COUNT]; + Colour *dst_px_orig[ZOOM_LVL_END]; /* interleaved stream of 'm' channel and 'n' channel * 'n' is number of following pixels with the same alpha channel class @@ -285,10 +285,10 @@ template Sprite *Blitter_32bppOptimized::EncodeInternal(const * * it has to be stored in one stream so fewer registers are used - * x86 has problems with register allocation even with this solution */ - uint16_t *dst_n_orig[ZOOM_LVL_COUNT]; + uint16_t *dst_n_orig[ZOOM_LVL_END]; /* lengths of streams */ - uint32_t lengths[ZOOM_LVL_COUNT][2]; + uint32_t lengths[ZOOM_LVL_END][2]; ZoomLevel zoom_min; ZoomLevel zoom_max; diff --git a/src/blitter/32bpp_optimized.hpp b/src/blitter/32bpp_optimized.hpp index 842fbb7b40..9df64eb6c6 100644 --- a/src/blitter/32bpp_optimized.hpp +++ b/src/blitter/32bpp_optimized.hpp @@ -17,7 +17,7 @@ class Blitter_32bppOptimized : public Blitter_32bppSimple { public: /** Data stored about a (single) sprite. */ struct SpriteData { - uint32_t offset[ZOOM_LVL_COUNT][2]; ///< Offsets (from .data) to streams for different zoom levels, and the normal and remap image information. + uint32_t offset[ZOOM_LVL_END][2]; ///< Offsets (from .data) to streams for different zoom levels, and the normal and remap image information. byte data[]; ///< Data, all zoomlevels. }; diff --git a/src/blitter/32bpp_sse2.hpp b/src/blitter/32bpp_sse2.hpp index f6b505bb9e..37f9661b1d 100644 --- a/src/blitter/32bpp_sse2.hpp +++ b/src/blitter/32bpp_sse2.hpp @@ -72,7 +72,7 @@ public: }; struct SpriteData { SpriteFlags flags; - SpriteInfo infos[ZOOM_LVL_COUNT]; + SpriteInfo infos[ZOOM_LVL_END]; byte data[]; ///< Data, all zoomlevels. }; diff --git a/src/blitter/8bpp_optimized.hpp b/src/blitter/8bpp_optimized.hpp index 5f2c2f39a3..59e9f017b5 100644 --- a/src/blitter/8bpp_optimized.hpp +++ b/src/blitter/8bpp_optimized.hpp @@ -18,7 +18,7 @@ class Blitter_8bppOptimized FINAL : public Blitter_8bppBase { public: /** Data stored about a (single) sprite. */ struct SpriteData { - uint32_t offset[ZOOM_LVL_COUNT]; ///< Offsets (from .data) to streams for different zoom levels. + uint32_t offset[ZOOM_LVL_END]; ///< Offsets (from .data) to streams for different zoom levels. byte data[]; ///< Data, all zoomlevels. }; diff --git a/src/sound.cpp b/src/sound.cpp index 870df98920..09b6e13cbc 100644 --- a/src/sound.cpp +++ b/src/sound.cpp @@ -195,7 +195,7 @@ static void StartSound(SoundID sound_id, float pan, uint volume) static const byte _vol_factor_by_zoom[] = {255, 255, 255, 190, 134, 87}; -static_assert(lengthof(_vol_factor_by_zoom) == ZOOM_LVL_COUNT); +static_assert(lengthof(_vol_factor_by_zoom) == ZOOM_LVL_END); static const byte _sound_base_vol[] = { 128, 90, 128, 128, 128, 128, 128, 128, @@ -258,7 +258,7 @@ static void SndPlayScreenCoordFx(SoundID sound, int left, int right, int top, in StartSound( sound, panning, - _vol_factor_by_zoom[vp->zoom - ZOOM_LVL_BEGIN] + _vol_factor_by_zoom[vp->zoom] ); return; } diff --git a/src/spritecache.cpp b/src/spritecache.cpp index e840045ca9..1811a047fe 100644 --- a/src/spritecache.cpp +++ b/src/spritecache.cpp @@ -457,7 +457,7 @@ static void *ReadSprite(const SpriteCache *sc, SpriteID id, SpriteType sprite_ty Debug(sprite, 9, "Load sprite {}", id); - SpriteLoader::Sprite sprite[ZOOM_LVL_COUNT]; + SpriteLoader::Sprite sprite[ZOOM_LVL_END]; uint8_t sprite_avail = 0; sprite[ZOOM_LVL_NORMAL].type = sprite_type; @@ -1051,4 +1051,4 @@ void GfxClearFontSpriteCache() } } -/* static */ ReusableBuffer SpriteLoader::Sprite::buffer[ZOOM_LVL_COUNT]; +/* static */ ReusableBuffer SpriteLoader::Sprite::buffer[ZOOM_LVL_END]; diff --git a/src/spriteloader/spriteloader.hpp b/src/spriteloader/spriteloader.hpp index 54d229b502..c7157db61e 100644 --- a/src/spriteloader/spriteloader.hpp +++ b/src/spriteloader/spriteloader.hpp @@ -62,7 +62,7 @@ public: void AllocateData(ZoomLevel zoom, size_t size) { this->data = Sprite::buffer[zoom].ZeroAllocate(size); } private: /** Allocated memory to pass sprite data around */ - static ReusableBuffer buffer[ZOOM_LVL_COUNT]; + static ReusableBuffer buffer[ZOOM_LVL_END]; }; /** diff --git a/src/video/opengl.cpp b/src/video/opengl.cpp index 1cbcda61af..886a048ff0 100644 --- a/src/video/opengl.cpp +++ b/src/video/opengl.cpp @@ -1270,10 +1270,10 @@ void OpenGLBackend::ReleaseAnimBuffer(const Rect &update_rect) Sprite *dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + sizeof(OpenGLSprite)); OpenGLSprite *gl_sprite = (OpenGLSprite *)dest_sprite->data; - new (gl_sprite) OpenGLSprite(sprite->width, sprite->height, sprite->type == SpriteType::Font ? 1 : ZOOM_LVL_COUNT, sprite->colours); + new (gl_sprite) OpenGLSprite(sprite->width, sprite->height, sprite->type == SpriteType::Font ? 1 : ZOOM_LVL_END, sprite->colours); /* Upload texture data. */ - for (int i = 0; i < (sprite->type == SpriteType::Font ? 1 : ZOOM_LVL_COUNT); i++) { + for (int i = 0; i < (sprite->type == SpriteType::Font ? 1 : ZOOM_LVL_END); i++) { gl_sprite->Update(sprite[i].width, sprite[i].height, i, sprite[i].data); } @@ -1323,7 +1323,7 @@ void OpenGLBackend::RenderOglSprite(OpenGLSprite *gl_sprite, PaletteID pal, int Dimension dim = gl_sprite->GetSize(zoom); _glUseProgram(this->sprite_program); _glUniform4f(this->sprite_sprite_loc, (float)x, (float)y, (float)dim.width, (float)dim.height); - _glUniform1f(this->sprite_zoom_loc, (float)(zoom - ZOOM_LVL_BEGIN)); + _glUniform1f(this->sprite_zoom_loc, (float)zoom); _glUniform2f(this->sprite_screen_loc, (float)_screen.width, (float)_screen.height); _glUniform1i(this->sprite_rgb_loc, rgb ? 1 : 0); _glUniform1i(this->sprite_crash_loc, pal == PALETTE_CRASH ? 1 : 0); diff --git a/src/video/opengl.h b/src/video/opengl.h index f3607a2e33..9c0086fab4 100644 --- a/src/video/opengl.h +++ b/src/video/opengl.h @@ -108,7 +108,7 @@ public: /* SpriteEncoder */ bool Is32BppSupported() override { return true; } - uint GetSpriteAlignment() override { return 1u << (ZOOM_LVL_COUNT - 1); } + uint GetSpriteAlignment() override { return 1u << (ZOOM_LVL_END - 1); } Sprite *Encode(const SpriteLoader::Sprite *sprite, AllocatorProc *allocator) override; }; diff --git a/src/viewport.cpp b/src/viewport.cpp index e0af8f5f50..5d1b4f634c 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1477,7 +1477,7 @@ void ViewportSign::UpdatePosition(int center, int top, StringID str, StringID st */ void ViewportSign::MarkDirty(ZoomLevel maxzoom) const { - Rect zoomlevels[ZOOM_LVL_COUNT]; + Rect zoomlevels[ZOOM_LVL_END]; for (ZoomLevel zoom = ZOOM_LVL_BEGIN; zoom != ZOOM_LVL_END; zoom++) { /* FIXME: This doesn't switch to width_small when appropriate. */ diff --git a/src/zoom_type.h b/src/zoom_type.h index ab2e24b7b5..cbf669c89b 100644 --- a/src/zoom_type.h +++ b/src/zoom_type.h @@ -27,8 +27,6 @@ enum ZoomLevel : byte { ZOOM_LVL_OUT_32X, ///< Zoomed 32 times out. ZOOM_LVL_END, ///< End for iteration. - ZOOM_LVL_COUNT = ZOOM_LVL_END - ZOOM_LVL_BEGIN, ///< Number of zoom levels. - /* Here we define in which zoom viewports are */ ZOOM_LVL_VIEWPORT = ZOOM_LVL_OUT_4X, ///< Default zoom level for viewports. ZOOM_LVL_NEWS = ZOOM_LVL_OUT_4X, ///< Default zoom level for the news messages. From 33ba609290991536bffa8c9e627145514742fc93 Mon Sep 17 00:00:00 2001 From: rubidium42 Date: Thu, 30 Nov 2023 07:47:51 -0400 Subject: [PATCH 36/40] Fix #11521, e404ba0: size for remaining span determined incorrectly --- src/strings_internal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/strings_internal.h b/src/strings_internal.h index 75168ad78b..e9e4b1921a 100644 --- a/src/strings_internal.h +++ b/src/strings_internal.h @@ -129,7 +129,7 @@ public: */ StringParameters GetRemainingParameters(size_t offset) { - return StringParameters(this->parameters.subspan(offset, GetDataLeft())); + return StringParameters(this->parameters.subspan(offset, this->parameters.size() - offset)); } /** Return the amount of elements which can still be read. */ From 6f7153bf71b088a3ebb5cab3a3e1919903744b6d Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 30 Nov 2023 18:10:07 +0000 Subject: [PATCH 37/40] Codechange: Make a generic DrawRectOutline function from DrawOutline. (#11524) This allows drawing an outline from Rect, not just constrained to a Widget's Rect. And reduces duplication a little. --- src/gfx.cpp | 15 +++++++++++++++ src/gfx_func.h | 1 + src/industry_gui.cpp | 5 +---- src/widget.cpp | 8 ++------ 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/gfx.cpp b/src/gfx.cpp index b261845f0d..aed5aa3d3e 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -451,6 +451,21 @@ void DrawBox(int x, int y, int dx1, int dy1, int dx2, int dy2, int dx3, int dy3) GfxDrawLineUnscaled(x + dx3, y + dy3, x + dx3 + dx2, y + dy3 + dy2, colour); } +/** + * Draw the outline of a Rect + * @param r Rect to draw. + * @param colour Colour of the outline. + * @param width Width of the outline. + * @param dash Length of dashes for dashed lines. 0 means solid lines. + */ +void DrawRectOutline(const Rect &r, int colour, int width, int dash) +{ + GfxDrawLine(r.left, r.top, r.right, r.top, colour, width, dash); + GfxDrawLine(r.left, r.top, r.left, r.bottom, colour, width, dash); + GfxDrawLine(r.right, r.top, r.right, r.bottom, colour, width, dash); + GfxDrawLine(r.left, r.bottom, r.right, r.bottom, colour, width, dash); +} + /** * Set the colour remap to be for the given colour. * @param colour the new colour of the remap. diff --git a/src/gfx_func.h b/src/gfx_func.h index c0610e43ea..2e747d3170 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -103,6 +103,7 @@ void GfxFillRect(int left, int top, int right, int bottom, int colour, FillRectM void GfxFillPolygon(const std::vector &shape, int colour, FillRectMode mode = FILLRECT_OPAQUE); void GfxDrawLine(int left, int top, int right, int bottom, int colour, int width = 1, int dash = 0); void DrawBox(int x, int y, int dx1, int dy1, int dx2, int dy2, int dx3, int dy3); +void DrawRectOutline(const Rect &r, int colour, int width = 1, int dash = 0); /* Versions of DrawString/DrawStringMultiLine that accept a Rect instead of separate left, right, top and bottom parameters. */ static inline int DrawString(const Rect &r, std::string_view str, TextColour colour = TC_FROMSTRING, StringAlignment align = SA_LEFT, bool underline = false, FontSize fontsize = FS_NORMAL) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 39f2404445..328824f0df 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -2146,10 +2146,7 @@ struct CargoesField { int ypos1 = ypos + vert_inter_industry_space / 2; int ypos2 = ypos + normal_height - 1 - vert_inter_industry_space / 2; int xpos2 = xpos + industry_width - 1; - GfxDrawLine(xpos, ypos1, xpos2, ypos1, INDUSTRY_LINE_COLOUR); - GfxDrawLine(xpos, ypos1, xpos, ypos2, INDUSTRY_LINE_COLOUR); - GfxDrawLine(xpos, ypos2, xpos2, ypos2, INDUSTRY_LINE_COLOUR); - GfxDrawLine(xpos2, ypos1, xpos2, ypos2, INDUSTRY_LINE_COLOUR); + DrawRectOutline({xpos, ypos1, xpos2, ypos2}, INDUSTRY_LINE_COLOUR); ypos += (normal_height - GetCharacterHeight(FS_NORMAL)) / 2; if (this->u.industry.ind_type < NUM_INDUSTRYTYPES) { const IndustrySpec *indsp = GetIndustrySpec(this->u.industry.ind_type); diff --git a/src/widget.cpp b/src/widget.cpp index d5f35d6d21..20d010d787 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -922,15 +922,11 @@ int Window::SortButtonWidth() bool _draw_widget_outlines; -void DrawOutline(const Window *, const NWidgetBase *wid) +static void DrawOutline(const Window *, const NWidgetBase *wid) { if (!_draw_widget_outlines || wid->current_x == 0 || wid->current_y == 0) return; - Rect r = wid->GetCurrentRect(); - GfxDrawLine(r.left, r.top, r.right, r.top, PC_WHITE, 1, 4); - GfxDrawLine(r.left, r.top, r.left, r.bottom, PC_WHITE, 1, 4); - GfxDrawLine(r.right, r.top, r.right, r.bottom, PC_WHITE, 1, 4); - GfxDrawLine(r.left, r.bottom, r.right, r.bottom, PC_WHITE, 1, 4); + DrawRectOutline(wid->GetCurrentRect(), PC_WHITE, 1, 4); } /** From 4a5ab331e2428378f1a83504bfaa6b6ba3072702 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 30 Nov 2023 19:18:28 +0000 Subject: [PATCH 38/40] Change: Add extra padding to climate buttons to match pre-#11464. (#11525) Padding used to be included in the SetMinimalSize() part which was removed, but also made it require specific sprite sizes. This now adds padding on the already determined size, removing the need for hardcoding pixel dimensions and allowing the sprites to be any size. --- src/genworld_gui.cpp | 12 ++++++++++++ src/intro_gui.cpp | 11 +++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index ef3d3b0f00..f529e5d77c 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -575,6 +575,12 @@ struct GenerateLandscapeWindow : public Window { Dimension d{0, (uint)GetCharacterHeight(FS_NORMAL)}; const StringID *strs = nullptr; switch (widget) { + case WID_GL_TEMPERATE: case WID_GL_ARCTIC: + case WID_GL_TROPICAL: case WID_GL_TOYLAND: + size->width += WidgetDimensions::scaled.fullbevel.Horizontal(); + size->height += WidgetDimensions::scaled.fullbevel.Vertical(); + break; + case WID_GL_HEIGHTMAP_HEIGHT_TEXT: SetDParam(0, MAX_TILE_HEIGHT); d = GetStringBoundingBox(STR_JUST_INT); @@ -1118,6 +1124,12 @@ struct CreateScenarioWindow : public Window { StringID str = STR_JUST_INT; switch (widget) { + case WID_CS_TEMPERATE: case WID_CS_ARCTIC: + case WID_CS_TROPICAL: case WID_CS_TOYLAND: + size->width += WidgetDimensions::scaled.fullbevel.Horizontal(); + size->height += WidgetDimensions::scaled.fullbevel.Vertical(); + break; + case WID_CS_START_DATE_TEXT: SetDParam(0, TimerGameCalendar::ConvertYMDToDate(CalendarTime::MAX_YEAR, 0, 1)); str = STR_JUST_DATE_LONG; diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp index ca807f18bb..954615570b 100644 --- a/src/intro_gui.cpp +++ b/src/intro_gui.cpp @@ -297,6 +297,17 @@ struct SelectGameWindow : public Window { } } + void UpdateWidgetSize(int widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + { + switch (widget) { + case WID_SGI_TEMPERATE_LANDSCAPE: case WID_SGI_ARCTIC_LANDSCAPE: + case WID_SGI_TROPIC_LANDSCAPE: case WID_SGI_TOYLAND_LANDSCAPE: + size->width += WidgetDimensions::scaled.fullbevel.Horizontal(); + size->height += WidgetDimensions::scaled.fullbevel.Vertical(); + break; + } + } + void OnResize() override { bool changed = false; From cc488ec6c901d858118c77abb36925c25c8665db Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 30 Nov 2023 23:12:39 +0000 Subject: [PATCH 39/40] Fix ddd609c: Reverse build probability callback was not called for articulated parts. (#11526) --- src/articulated_vehicles.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/articulated_vehicles.cpp b/src/articulated_vehicles.cpp index 51953b1601..cefac74dcb 100644 --- a/src/articulated_vehicles.cpp +++ b/src/articulated_vehicles.cpp @@ -431,6 +431,7 @@ void AddArticulatedParts(Vehicle *first) if (flip_image) v->spritenum++; + if (v->type == VEH_TRAIN && TestVehicleBuildProbability(v, v->engine_type, BuildProbabilityType::Reversed)) SetBit(Train::From(v)->flags, VRF_REVERSE_DIRECTION); v->UpdatePosition(); } } From 0b1429ce1486c37ea52c591205d25412841a552e Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 1 Dec 2023 12:52:33 +0000 Subject: [PATCH 40/40] Fix: AI window did not update button disabled state when changing values. (#11527) --- src/ai/ai_gui.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 21e2ebe5af..c49e1e497b 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -205,6 +205,7 @@ struct AIConfigWindow : public Window { new_value = std::min(MAX_COMPANIES - 1, GetGameSettings().difficulty.max_no_competitors + 1); } IConsoleSetSetting("difficulty.max_no_competitors", new_value); + this->InvalidateData(); break; } @@ -217,6 +218,7 @@ struct AIConfigWindow : public Window { new_value = std::min(static_cast(MAX_COMPETITORS_INTERVAL), GetGameSettings().difficulty.competitors_interval + 1); } IConsoleSetSetting("difficulty.competitors_interval", new_value); + this->InvalidateData(); break; }